Fixed conflicts after merge with master

This commit is contained in:
enricoturri1966 2022-12-05 13:29:28 +01:00
commit 8eb12cbaf0
111 changed files with 4514 additions and 2126 deletions

View File

@ -1,2 +1,3 @@
min_slic3r_version = 2.6.0-alpha1
1.0.1 Disabled thick bridges.
1.0.0 Initial Version

View File

@ -6,7 +6,7 @@
name = Anker
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the PrusaSlicer configuration to be downgraded.
config_version = 1.0.0
config_version = 1.0.1
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/Anker/
@ -118,7 +118,7 @@ support_material_synchronize_layers = 0
support_material_threshold = 40
support_material_with_sheath = 0
support_material_xy_spacing = 60%
thick_bridges = 1
thick_bridges = 0
thin_walls = 0
top_solid_infill_speed = 150
travel_speed = 300

View File

@ -0,0 +1,4 @@
min_slic3r_version = 2.6.0-alpha1
0.1.0 Initial Geeetech bundle

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@ -0,0 +1,39 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="129.3mm" height="124.3mm" viewBox="0 0 366.4 352.2">
<g>
<path d="M13,334.4c-.2,0-.4,0-.4,0h0c-.2,0-.4,0-.5-.1l-1-.4c-.2,0-.4-.2-.7-.4l-.6-.6c-.6-.6-1-1.4-1.3-2.5-.3-.9-.4-2-.4-3.3s.2-2.6,.6-3.5c.5-1.2,1.3-2.2,2.5-2.9,.3-.2,.8-.3,1.4-.4,.6,0,3-.1,7.4-.1v2.5h-5.8c-1.1,0-1.9,.5-2.5,1.4-.4,.7-.6,1.7-.6,2.8v1.5c0,.2,0,.4,.1,.5h0c0,.3,0,.5,0,.6,.1,.7,.4,1.3,.9,1.7,.5,.4,2.1,.6,5,.6v-3.3h-3.6v-2.5h6.4v8.4h-6.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M27.2,334.4h-1.1c0,0-.4,0-.4,0,0,0-.2,0-.3,0,0,0-.1,0-.1,0,0,0-.1,0-.2,0-1.3-.4-2.3-1.2-2.9-2.5-.3-.5-.5-1.1-.6-1.7-.2-.6-.2-1.2-.2-1.9,0-1.3,0-2.4,.3-3.3,.2-.9,.5-1.7,1-2.4,.5-.8,1.2-1.3,2-1.6,.3-.1,.8-.3,1.4-.4,.5,0,2.5-.1,6-.1v2.5h-4.4c-2,0-3,1.1-3,3.3h7.5v2.5h-7.5c0,.6,0,1,.1,1.4,0,.2,0,.4,.2,.6,0,.1,.2,.3,.3,.5l.5,.5c.2,.1,.3,.2,.6,.3,.2,0,.5,.1,.7,.1h5.2v2.5h-4.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M39.4,334.4h-1.1c0,0-.4,0-.4,0,0,0-.2,0-.3,0,0,0-.1,0-.1,0,0,0-.1,0-.2,0-1.3-.4-2.3-1.2-2.9-2.5-.3-.5-.5-1.1-.6-1.7-.2-.6-.2-1.2-.2-1.9,0-1.3,0-2.4,.3-3.3,.2-.9,.5-1.7,1-2.4,.5-.8,1.2-1.3,2-1.6,.3-.1,.8-.3,1.4-.4,.5,0,2.5-.1,6-.1v2.5h-4.4c-2,0-3,1.1-3,3.3h7.5v2.5h-7.5c0,.6,0,1,.1,1.4,0,.2,0,.4,.2,.6,0,.1,.2,.3,.3,.5l.5,.5c.2,.1,.3,.2,.6,.3,.2,0,.5,.1,.7,.1h5.2v2.5h-4.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M51.5,334.4h-1.1c0,0-.4,0-.4,0,0,0-.2,0-.3,0,0,0-.1,0-.1,0,0,0-.1,0-.2,0-1.3-.4-2.3-1.2-2.9-2.5-.3-.5-.5-1.1-.6-1.7-.2-.6-.2-1.2-.2-1.9,0-1.3,0-2.4,.3-3.3,.2-.9,.5-1.7,1-2.4,.5-.8,1.2-1.3,2-1.6,.3-.1,.8-.3,1.4-.4,.5,0,2.5-.1,6-.1v2.5h-4.4c-2,0-3,1.1-3,3.3h7.5v2.5h-7.5c0,.6,0,1,.1,1.4,0,.2,0,.4,.2,.6,0,.1,.2,.3,.3,.5l.5,.5c.2,.1,.3,.2,.6,.3,.2,0,.5,.1,.7,.1h5.2v2.5h-4.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="64 322.7 64 334.4 61.2 334.4 61.2 322.7 57.1 322.7 57.1 320.2 68.2 320.2 68.2 322.7 64 322.7" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M74.7,334.4h-1.1c0,0-.4,0-.4,0,0,0-.2,0-.3,0,0,0-.1,0-.1,0,0,0-.1,0-.2,0-1.3-.4-2.3-1.2-2.9-2.5-.3-.5-.5-1.1-.6-1.7-.2-.6-.2-1.2-.2-1.9,0-1.3,0-2.4,.3-3.3,.2-.9,.5-1.7,1-2.4,.5-.8,1.2-1.3,2-1.6,.3-.1,.8-.3,1.4-.4,.5,0,2.5-.1,6-.1v2.5h-4.4c-2,0-3,1.1-3,3.3h7.5v2.5h-7.5c0,.6,0,1,.1,1.4,0,.2,0,.4,.2,.6,0,.1,.2,.3,.3,.5l.5,.5c.2,.1,.3,.2,.6,.3,.2,0,.5,.1,.7,.1h5.2v2.5h-4.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M86.8,334.4h-1.1c0,0-.4,0-.4,0,0,0-.2,0-.3,0,0,0-.1,0-.1,0,0,0-.1,0-.2,0-1.3-.4-2.3-1.2-2.9-2.5-.6-1.1-.9-2.3-.9-3.6s0-2.4,.3-3.3c.2-.9,.5-1.7,1-2.4,.5-.8,1.2-1.3,2-1.6,.5-.2,.9-.3,1.4-.4,.5,0,2.5-.1,6-.1v2.4h-4.4c-.9,0-1.5,.3-2.1,.8-.4,.4-.7,1.1-.9,1.8-.2,.8-.3,1.6-.3,2.5s.1,1.7,.3,2.4c.3,.9,.8,1.4,1.5,1.6h.3c0,0,.3,0,.3,0h5.2v2.5h-4.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="101 334.4 101 328.4 96.1 328.4 96.1 334.4 93.3 334.4 93.3 320.2 96.1 320.2 96.1 325.9 101 325.9 101 320.2 103.7 320.2 103.7 334.4 101 334.4" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x=".4" y=".4" width="365.7" height="351.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="112.9" y1="326.8" x2="366" y2="326.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="301.7" x2="366" y2="301.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="276.6" x2="366" y2="276.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="251.4" x2="366" y2="251.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="226.3" x2="366" y2="226.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="201.2" x2="366" y2="201.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="176.1" x2="366" y2="176.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="151" x2="366" y2="151" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="125.9" x2="366" y2="125.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="100.8" x2="366" y2="100.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="75.7" x2="366" y2="75.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="50.6" x2="366" y2="50.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1=".4" y1="25.5" x2="366" y2="25.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="337.9" y1=".4" x2="337.9" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="309.8" y1=".4" x2="309.8" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="281.7" y1=".4" x2="281.7" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="253.5" y1=".4" x2="253.5" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="225.4" y1=".4" x2="225.4" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="197.3" y1=".4" x2="197.3" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="169.1" y1=".4" x2="169.1" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="141" y1=".4" x2="141" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="112.9" y1=".4" x2="112.9" y2="351.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="84.8" y1=".4" x2="84.8" y2="301.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="56.6" y1=".4" x2="56.6" y2="301.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="28.5" y1=".4" x2="28.5" y2="301.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

View File

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="150mm" height="150mm" viewBox="0 0 425.2 425.2">
<g>
<rect x="311" y="375.2" width="93.6" height="29.5" style="fill: none;"/>
<g>
<path d="M340.4,398.5h0l-10.9-18.8c0-.2-.3-.3-.5-.3s-.5,.2-.5,.3l-10.9,18.8c0,.2,0,.5,0,.6,0,.2,.3,.3,.5,.3h21.7c.2,0,.5-.2,.5-.3,0-.2,0-.5,0-.6h0Zm-21.2-.3l9.8-16.9,9.8,16.9h-19.5Z" style="fill: #fff;"/>
<rect x="324.2" y="396.1" width="9.5" height="1" style="fill: #fff;"/>
<path d="M327.1,395.4l-.5-.4c1-1.4,.5-2.3,0-3.2-.6-1-1.3-2.2,0-3.9l.5,.4c-1,1.4-.5,2.3,0,3.2,.6,1,1.3,2.2,0,3.9h0Z" style="fill: #fff;"/>
<path d="M329.4,395.4l-.5-.4c1-1.4,.5-2.3,0-3.2-.6-1-1.3-2.2,0-3.8l.5,.4c-1,1.4-.5,2.3,0,3.2,.6,1,1.3,2.2,0,3.8h0Z" style="fill: #fff;"/>
<path d="M331.7,395.4l-.5-.4c1-1.4,.5-2.3,0-3.2-.6-1.1-1.2-2.2,0-3.9l.5,.4c-1,1.4-.5,2.3,0,3.2,.6,1.1,1.2,2.2,0,3.9Z" style="fill: #fff;"/>
</g>
<g>
<path d="M346,387.6c-.5,0-.8,0-1.2-.2-.4,0-.7-.2-.9-.5-.2-.2-.5-.6-.6-1-.2-.5-.2-1-.2-1.7s0-1.1,.2-1.5c.2-.5,.3-.8,.6-1,.2-.2,.5-.5,.9-.5,.4,0,.8-.2,1.2-.2h.8c.2,0,.5,0,.6,.2v.8c-.2,0-.4-.2-.6-.2h-.8c-.3,0-.7,0-.9,.2-.3,0-.5,.2-.7,.5-.2,.2-.3,.5-.4,.8s-.2,.7-.2,1.2,0,.9,.2,1.2c0,.3,.2,.6,.4,.8s.4,.3,.6,.4,.5,.2,.9,.2h.8c.2,0,.5,0,.7-.2v.7c-.2,0-.4,.2-.7,.2-.2,0-.5,0-.9,0l.2-.2Z" style="fill: #fff;"/>
<path d="M350.6,382.6c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.3s.2,.3,.3,.5c0,.2,0,.4,0,.6v3.5h-.7l-.2-.8c0,.2-.2,.2-.3,.4s-.2,.2-.4,.2-.3,.2-.5,.2h-.5c-.6,0-1-.2-1.3-.4s-.4-.6-.4-1.1,0-.5,.2-.8c0-.2,.2-.4,.4-.5,.2-.2,.4-.2,.6-.2s.5,0,.8,0h1.5v-.8c0-.2,0-.2-.2-.3s-.2-.2-.4-.2h-1.1c-.2,0-.4,0-.5,0v-.7h1.1v-.2Zm-.6,4.4c.4,0,.8,0,1.1-.2s.5-.4,.6-.7v-.8h-2c-.2,0-.3,0-.4,.2s-.2,.2-.2,.3v.5c0,.3,0,.5,.2,.6s.4,.2,.8,.2h0Z" style="fill: #fff;"/>
<path d="M358.1,382.7v4.9h-.7v-.7l-.4,.4c0,0-.2,.2-.4,.2-.2,0-.3,0-.5,.2h-.5c-.3,0-.6,0-.8-.2-.2,0-.4-.2-.5-.3s-.2-.3-.2-.5,0-.4,0-.7v-3.4h.8v3.6c0,.2,0,.3,.2,.4s.2,.2,.3,.2,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.2-.2,.3-.3c0-.2,.2-.3,.2-.5v-3.3h1Z" style="fill: #fff;"/>
<path d="M361.4,387h.5v.7h-1.3c-.2,0-.3-.2-.5-.2-.2-.2-.2-.3-.2-.5,0-.2,0-.5,0-.8v-2.8h-.8v-.7h.8v-1.1h.8v1.1h1.2v.7h-1.2v3.2c0,0,0,.2,0,.3s.2,.2,.2,.2h.5Z" style="fill: #fff;"/>
<path d="M363.2,381.8c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,.9h.8v4.9h-.8v-4.9Z" style="fill: #fff;"/>
<path d="M367.3,387.6c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,1-.2s.7,0,1,.2c.3,0,.5,.2,.7,.5,.2,.2,.3,.5,.5,.8,0,.3,.2,.8,.2,1.2s0,.9-.2,1.2c0,.3-.2,.6-.5,.8-.2,.2-.5,.3-.7,.5-.3,0-.6,.2-1,.2Zm0-.7c.3,0,.5,0,.7,0s.3-.2,.5-.3c0-.2,.2-.3,.2-.6s0-.5,0-.9v-.9c0-.2-.2-.5-.2-.6s-.2-.2-.5-.3c-.2,0-.4,0-.7,0s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.4-.2,.6v1.8c0,.2,.2,.5,.2,.6,.2,.2,.2,.2,.5,.3s.4,0,.7,0Z" style="fill: #fff;"/>
<path d="M373.2,382.6c.3,0,.6,0,.8,.2,.2,0,.4,.2,.5,.3,.2,.2,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.4h-.8v-3.6c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.2s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.2,.2-.4,.3-.2,.3-.2,.5v3.3h-.8v-4.9h.8v.7c0-.2,.2-.3,.3-.4s.2-.2,.4-.2,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M383.6,381.3v6.3h-.8v-3.1h-3.1v3.1h-.8v-6.3h.8v2.6h3.1v-2.6h.8Z" style="fill: #fff;"/>
<path d="M385.6,381.8c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,.9h.8v4.9h-.8v-4.9Z" style="fill: #fff;"/>
<path d="M391.8,382.7v4.6c0,.7-.2,1.2-.6,1.6s-1,.6-1.8,.6-.5,0-.6,0c-.2,0-.4,0-.5,0v-.7c.4,0,.8,0,1.2,0s1-.2,1.2-.4,.4-.7,.4-1.2v-.5c0,.3-.3,.5-.5,.7s-.6,.2-1.1,.2-.8,0-1-.2-.5-.3-.6-.5-.2-.5-.3-.8c0-.3,0-.7,0-1.1s0-.7,0-1c0-.3,.2-.6,.3-.8s.4-.4,.6-.5,.6-.2,1-.2,.5,0,.7,0c.2,0,.3,.2,.5,.2,.2,0,.2,.2,.3,.3,0,.2,.2,.2,.2,.4v-.9h.7Zm-2.3,4.3c.3,0,.5,0,.8-.2,.2,0,.4-.2,.5-.4s.2-.4,.2-.6v-1.5c0-.2-.2-.5-.2-.6s-.3-.3-.5-.4-.5-.2-.8-.2-.5,0-.7,.2c-.2,0-.3,.2-.4,.4s-.2,.4-.2,.6v1.4c0,.2,0,.5,.2,.6,0,.2,.2,.3,.4,.4s.4,.2,.7,.2h0Z" style="fill: #fff;"/>
<path d="M395.8,382.6c.3,0,.6,0,.8,.2,.2,0,.4,.2,.5,.3,.2,.2,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.4h-.8v-3.6c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.2s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.2,.2-.4,.3-.2,.3-.2,.5v3.3h-.8v-6.9h.8v2.7c0-.2,.2-.3,.3-.4s.2-.2,.4-.2,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M347.1,392.9h-1.8v5.6h-.8v-5.6h-1.8v-.8h4.5v.8h0Z" style="fill: #fff;"/>
<path d="M351.7,395.4v.5l-3.3,.2c0,.3,0,.5,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.5,0,.8,0,.5-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,.9-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.5c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.5v.7l2.6-.2h0Z" style="fill: #fff;"/>
<path d="M358.4,393.4c.3,0,.5,0,.8,.2,.2,0,.4,.2,.5,.3,.2,.2,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.4h-.8v-3.1c0-.4,0-.7-.2-.9-.2-.2-.4-.3-.8-.3h-.4c0,0-.2,0-.4,.2,0,0-.2,.2-.3,.2,0,0-.2,.2-.2,.5h0v3.5h-.8v-3.1c0-.4,0-.7-.2-.9s-.4-.3-.8-.3h-.5c-.2,0-.2,0-.4,.2,0,0-.2,.2-.3,.3,0,.2-.2,.3-.2,.5v3.4h-.8v-4.9h.8v.7c.2-.3,.4-.5,.6-.6,.2,0,.5-.2,.8-.2s.7,0,.9,.2c.2,.2,.4,.3,.5,.6,0-.2,.2-.3,.3-.4,0,0,.2-.2,.4-.2,.2,0,.3,0,.5-.2s.3,0,.5,0v-.2Z" style="fill: #fff;"/>
<path d="M364.2,393.4c.4,0,.8,0,1,.2s.5,.3,.6,.5,.2,.5,.3,.8c0,.3,0,.7,0,1.1s0,.7,0,1c0,.3-.2,.6-.3,.8s-.4,.5-.6,.5c-.2,.2-.6,.2-1,.2s-.8,0-1.1-.2c-.2-.2-.4-.4-.5-.7v2.6h-.8v-6.7h.8v.9c0-.3,.3-.5,.5-.7s.6-.3,1.1-.3h0Zm0,4.4c.3,0,.5,0,.7-.2s.3-.2,.4-.5c0-.2,.2-.4,.2-.6v-1.4c0-.2,0-.5-.2-.6,0-.2-.2-.3-.4-.4s-.4-.2-.7-.2-.5,0-.8,.2-.4,.2-.5,.4c-.2,.2-.2,.4-.2,.6v1.5c0,.2,.2,.5,.2,.6,.2,.2,.3,.3,.5,.4,.2,0,.5,.2,.8,.2Z" style="fill: #fff;"/>
<path d="M371.7,395.4v.5l-3.3,.2c0,.3,0,.5,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.5,0,.8,0,.5-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,.9-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.5c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.5v.7l2.6-.2h0Z" style="fill: #fff;"/>
<path d="M375.6,393.4v.7h-.6c-.2,0-.3,0-.5,.2-.2,0-.2,.2-.4,.3,0,.2-.2,.3-.2,.5v3.2h-.8v-4.9h.8v.9c0-.2,.2-.4,.3-.5s.2-.2,.4-.3c.2,0,.3-.2,.5-.2h.5Z" style="fill: #fff;"/>
<path d="M378.4,393.4c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.3s.2,.3,.3,.5c0,.2,0,.4,0,.6v3.5h-.7l-.2-.8c0,.2-.2,.2-.3,.4s-.2,.2-.4,.2-.3,.2-.5,.2h-.5c-.6,0-1-.2-1.3-.4s-.4-.6-.4-1.1,0-.5,.2-.8c0-.2,.2-.4,.4-.5,.2-.2,.4-.2,.6-.2s.5,0,.8,0h1.5v-.8c0-.2,0-.2-.2-.3s-.2-.2-.4-.2h-1.1c-.2,0-.4,0-.5,0v-.7h1.1v-.2Zm-.6,4.4c.4,0,.8,0,1.1-.2s.5-.4,.6-.7v-.8h-2c-.2,0-.3,0-.4,.2s-.2,.2-.2,.3v.5c0,.3,0,.5,.2,.6s.4,.2,.8,.2h0Z" style="fill: #fff;"/>
<path d="M383.7,397.8h.5v.7h-1.3c-.2,0-.3-.2-.5-.2-.2-.2-.2-.3-.2-.5,0-.2,0-.5,0-.8v-2.8h-.8v-.7h.8v-1.1h.8v1.1h1.2v.7h-1.2v3.2c0,0,0,.2,0,.3s.2,.2,.2,.2h.5Z" style="fill: #fff;"/>
<path d="M389.4,393.5v4.9h-.7v-.7l-.4,.4c0,0-.2,.2-.4,.2-.2,0-.3,0-.5,.2h-.5c-.3,0-.6,0-.8-.2-.2,0-.4-.2-.5-.3s-.2-.3-.2-.5,0-.4,0-.7v-3.4h.8v3.6c0,.2,0,.3,.2,.4s.2,.2,.3,.2,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.2-.2,.3-.3c0-.2,.2-.3,.2-.5v-3.3h1Z" style="fill: #fff;"/>
<path d="M393.7,393.4v.7h-.6c-.2,0-.3,0-.5,.2-.2,0-.2,.2-.4,.3,0,.2-.2,.3-.2,.5v3.2h-.8v-4.9h.8v.9c0-.2,.2-.4,.3-.5s.2-.2,.4-.3c.2,0,.3-.2,.5-.2h.5Z" style="fill: #fff;"/>
<path d="M398.6,395.4v.5l-3.3,.2c0,.3,0,.5,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.5,0,.8,0,.5-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,.9-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.5c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.5v.7l2.6-.2h0Z" style="fill: #fff;"/>
</g>
<g>
<path d="M307.6,409.3h.5l1.5,5.6h0l1.8-5.6h.7l1.9,5.6h0l1.5-5.6h.5l-1.7,6.2h-.6l-1.9-5.6h0l-1.9,5.6h-.6l-1.7-6.2h0Z" style="fill: #fff;"/>
<path d="M316.5,409.3h.5l1.5,5.6h0l1.8-5.6h.7l1.9,5.6h0l1.5-5.6h.5l-1.7,6.2h-.6l-1.9-5.6h0l-1.9,5.6h-.6l-1.7-6.2h0Z" style="fill: #fff;"/>
<path d="M325.3,409.3h.5l1.5,5.6h0l1.8-5.6h.7l1.9,5.6h0l1.5-5.6h.5l-1.7,6.2h-.6l-1.9-5.6h0l-1.9,5.6h-.6l-1.7-6.2h0Z" style="fill: #fff;"/>
<path d="M334.6,415.5c-.2,0-.3,0-.4,0,0,0,0-.2,0-.5s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.5c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M341.9,409.3v5.7c0,.8-.2,1.5-.7,2-.5,.5-1.2,.7-2.1,.7s-.5,0-.8,0-.5,0-.6,0v-.5c.2,0,.5,0,.7,.2h.8c.8,0,1.4-.2,1.7-.6s.5-1,.5-1.7v-.8c-.2,.5-.4,.8-.8,1s-.8,.4-1.5,.4-.8,0-1.1-.2c-.3-.2-.5-.3-.8-.6-.2-.2-.3-.6-.4-1s-.2-.8-.2-1.4,0-.9,.2-1.3c0-.4,.2-.8,.4-1,.2-.3,.5-.5,.8-.6s.7-.2,1.1-.2,.6,0,.9,0c.2,0,.5,.2,.6,.3l.5,.5c.2,.2,.2,.4,.3,.6v-1.3h.5Zm-2.6,5.7c.5,0,.8,0,1.1-.2s.5-.3,.7-.5,.3-.5,.4-.8,0-.7,0-1.1,0-.8,0-1.1c0-.3-.2-.6-.4-.8s-.4-.5-.7-.5-.6-.2-1.1-.2-.8,0-1,.2-.5,.3-.6,.5-.2,.5-.3,.8c0,.3,0,.7,0,1.1s0,.8,0,1.1c0,.3,.2,.6,.3,.8s.4,.4,.6,.5,.6,.2,1,.2Z" style="fill: #fff;"/>
<path d="M348.5,411.7v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M354.8,411.7v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M361.1,411.7v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M364.5,415h.8v.5h-1.5c-.2,0-.4-.2-.5-.3-.2-.2-.2-.3-.2-.6s0-.6,0-1v-3.8h-1v-.5h1v-1.4h.5v1.4h1.7v.5h-1.7v4.5c0,.2,0,.3,.2,.5s.2,.2,.3,.2h.5Z" style="fill: #fff;"/>
<path d="M370.8,411.7v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M374.8,415.5c-.5,0-.8,0-1.2-.2-.3,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5c0-.4,.2-.8,.5-1s.5-.5,.8-.5c.3,0,.7-.2,1.2-.2h.9c.2,0,.5,0,.7,.2v.5c-.2,0-.5-.2-.8-.2h-.8c-.3,0-.7,0-1,.2-.2,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.4,0,.8,0,1.3s0,.9,0,1.3c0,.4,.2,.6,.4,.8,.2,.2,.4,.4,.6,.5s.6,.2,1,.2,.6,0,.9,0c.2,0,.5-.2,.8-.2v.5c-.2,0-.4,.2-.7,.2-.3,0-.6,0-.9,0v-.2Z" style="fill: #fff;"/>
<path d="M380.5,409.1c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.5,0,.8v4.3h-.5v-4.8c0-.2-.2-.5-.2-.5-.2-.2-.3-.2-.5-.3s-.5,0-.8,0h-.6c-.2,0-.4,0-.6,.2s-.4,.2-.5,.5-.2,.5-.3,.8v4.3h-.5v-8.6h.5v3.5c0-.2,.2-.4,.3-.5s.3-.3,.5-.4,.4-.2,.6-.2,.5,0,.7,0h0Z" style="fill: #fff;"/>
<path d="M385,415.5c-.2,0-.3,0-.4,0,0,0,0-.2,0-.5s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.5c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M389.2,415.5c-.5,0-.8,0-1.2-.2-.3,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5c0-.4,.2-.8,.5-1s.5-.5,.8-.5c.3,0,.7-.2,1.2-.2h.9c.2,0,.5,0,.7,.2v.5c-.2,0-.5-.2-.8-.2h-.8c-.3,0-.7,0-1,.2-.2,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.4,0,.8,0,1.3s0,.9,0,1.3c0,.4,.2,.6,.4,.8,.2,.2,.4,.4,.6,.5s.6,.2,1,.2,.6,0,.9,0c.2,0,.5-.2,.8-.2v.5c-.2,0-.4,.2-.7,.2-.3,0-.6,0-.9,0v-.2Z" style="fill: #fff;"/>
<path d="M394.6,415.5c-.5,0-.9,0-1.2-.2-.3,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5c0-.4,.2-.8,.5-1s.5-.5,.8-.5,.8-.2,1.2-.2,.8,0,1.2,.2c.3,0,.6,.3,.8,.5s.4,.6,.5,1,.2,.9,.2,1.5,0,1.1-.2,1.5c0,.4-.2,.8-.5,1s-.5,.5-.8,.5c-.3,0-.8,.2-1.2,.2Zm0-.5c.4,0,.8,0,1.1-.2,.3,0,.5-.2,.7-.5,.2-.2,.3-.5,.4-.8s0-.8,0-1.3,0-.9,0-1.3-.2-.6-.4-.8-.4-.4-.7-.5-.6-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.7,.5-.2,.2-.3,.5-.3,.8s0,.8,0,1.3,0,.9,0,1.3c0,.4,.2,.6,.3,.8s.4,.4,.7,.5,.6,.2,1,.2h0Z" style="fill: #fff;"/>
<path d="M405.2,409.1c.4,0,.7,0,.9,.2,.2,0,.5,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.5,0,.8v4.3h-.5v-4.8c0-.2,0-.5-.2-.5,0-.2-.2-.2-.5-.3-.2,0-.5,0-.7,0h-.6c-.2,0-.4,0-.5,.2-.2,0-.3,.2-.5,.5-.2,.2-.2,.5-.3,.8h0v4.3h-.5v-4.8c0-.2,0-.5-.2-.5,0-.2-.2-.2-.5-.3s-.5,0-.7,0h-.6c-.2,0-.4,0-.5,.2-.2,0-.3,.2-.5,.5-.2,.2-.2,.5-.3,.8v4.4h-.5v-6.2h.5v1.1c0-.2,.2-.4,.3-.5s.3-.2,.5-.4c.2,0,.4-.2,.5-.2s.5,0,.6,0c.5,0,1,0,1.2,.3,.3,.2,.5,.5,.5,.9,0-.2,.2-.4,.3-.5s.3-.3,.5-.4,.4-.2,.6-.2,.5,0,.7,0v-.2Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M33.4,406.4c-.2,0-.4,0-.4,0h0c-.2,0-.4,0-.6-.1l-1-.4c-.2,0-.4-.2-.8-.5l-.7-.6c-.6-.6-1.1-1.4-1.4-2.6-.3-.9-.4-2.1-.4-3.5s.2-2.7,.6-3.7c.5-1.3,1.4-2.3,2.6-3,.3-.2,.8-.4,1.4-.4,.6,0,3.2-.1,7.8-.1v2.6h-6.1c-1.2,0-2,.5-2.6,1.5-.4,.8-.6,1.7-.6,3v1.6c0,.2,.1,.4,.1,.5h0c0,.3,0,.5,0,.6,.2,.7,.5,1.3,.9,1.8,.5,.4,2.2,.7,5.2,.7v-3.5h-3.8v-2.6h6.7v8.8h-7.2Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M48.3,406.4h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.5-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.5,0,2.6-.1,6.2-.1v2.6h-4.6c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.2,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M61,406.4h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.1,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.5-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.6,0,2.6-.1,6.2-.1v2.6h-4.6c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.3,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M73.7,406.4h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.5-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.5,0,2.6-.1,6.2-.1v2.6h-4.7c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.2,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="86.8 394.1 86.8 406.4 83.8 406.4 83.8 394.1 79.5 394.1 79.5 391.5 91.1 391.5 91.1 394.1 86.8 394.1" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M97.9,406.4h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.5-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.5,0,2.6-.1,6.2-.1v2.6h-4.6c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.2,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M110.6,406.4h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.6-1.2-.9-2.5-.9-3.8s0-2.5,.3-3.5c.2-1,.5-1.8,1-2.5,.5-.8,1.2-1.4,2.1-1.7,.5-.2,1-.3,1.4-.4,.5,0,2.6-.1,6.2-.1v2.5h-4.6c-.9,0-1.6,.3-2.2,.8-.4,.5-.7,1.1-.9,1.9-.2,.8-.3,1.7-.3,2.6s.1,1.8,.3,2.5c.3,.9,.8,1.5,1.6,1.7h.3c0,0,.3,.1,.3,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="125.5 406.4 125.5 400.1 120.3 400.1 120.3 406.4 117.5 406.4 117.5 391.5 120.3 391.5 120.3 397.5 125.5 397.5 125.5 391.5 128.3 391.5 128.3 406.4 125.5 406.4" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="422.4" height="422.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="159.8" y1="397.4" x2="291.8" y2="397.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="371" x2="423.8" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="344.6" x2="423.8" y2="344.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="318.2" x2="423.8" y2="318.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="291.8" x2="423.8" y2="291.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="265.4" x2="423.8" y2="265.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="239" x2="423.8" y2="239" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="212.6" x2="423.8" y2="212.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="186.2" x2="423.8" y2="186.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="159.8" x2="423.8" y2="159.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="133.4" x2="423.8" y2="133.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="107" x2="423.8" y2="107" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="80.6" x2="423.8" y2="80.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="54.2" x2="423.8" y2="54.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="27.8" x2="423.8" y2="27.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="397.4" y1="1.4" x2="397.4" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="371" y1="1.4" x2="371" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="344.6" y1="1.4" x2="344.6" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="318.2" y1="1.4" x2="318.2" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="291.8" y1="1.4" x2="291.8" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="265.4" y1="1.4" x2="265.4" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="239" y1="1.4" x2="239" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="212.6" y1="1.4" x2="212.6" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="186.2" y1="1.4" x2="186.2" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="159.8" y1="1.4" x2="159.8" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="133.4" y1="1.4" x2="133.4" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="107" y1="1.4" x2="107" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="80.6" y1="1.4" x2="80.6" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="54.2" y1="1.4" x2="54.2" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="27.8" y1="1.4" x2="27.8" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="160mm" height="160mm" viewBox="0 0 453.5 453.5">
<g>
<rect x="338.5" y="403.4" width="93.7" height="29.5" style="fill: none;"/>
<g>
<path d="M367.9,426.8h0l-10.9-18.8c0-.2-.3-.3-.5-.3s-.5,.2-.5,.3l-10.9,18.8c0,.2,0,.5,0,.6,0,.2,.3,.3,.5,.3h21.7c.2,0,.5-.2,.5-.3,0-.2,0-.5,0-.6h0Zm-21.2-.3l9.8-16.9,9.8,16.9h-19.5Z" style="fill: #fff;"/>
<rect x="351.7" y="424.4" width="9.5" height="1" style="fill: #fff;"/>
<path d="M354.6,423.7l-.5-.4c1-1.4,.5-2.3,0-3.2-.6-1-1.3-2.2,0-3.9l.5,.4c-1,1.4-.5,2.3,0,3.2,.6,1,1.3,2.2,0,3.9h0Z" style="fill: #fff;"/>
<path d="M356.9,423.7l-.5-.4c1-1.4,.5-2.3,0-3.2-.6-1-1.3-2.2,0-3.8l.5,.4c-1,1.4-.5,2.3,0,3.2,.6,1,1.3,2.2,0,3.8h0Z" style="fill: #fff;"/>
<path d="M359.2,423.7l-.5-.4c1-1.4,.5-2.3,0-3.2-.6-1.1-1.2-2.2,0-3.9l.5,.4c-1,1.4-.5,2.3,0,3.2,.6,1.1,1.2,2.2,0,3.9Z" style="fill: #fff;"/>
</g>
<g>
<path d="M373.5,415.9c-.5,0-.8,0-1.2-.2-.4,0-.7-.2-.9-.5-.2-.2-.5-.6-.6-1-.2-.5-.2-1-.2-1.7s0-1.1,.2-1.5c.2-.5,.3-.8,.6-1,.2-.2,.5-.5,.9-.5,.4,0,.8-.2,1.2-.2h.8c.2,0,.5,0,.6,.2v.8c-.2,0-.4-.2-.6-.2h-.8c-.3,0-.7,0-.9,.2-.3,0-.5,.2-.7,.5-.2,.2-.3,.5-.4,.8s-.2,.7-.2,1.2,0,.9,.2,1.2c0,.3,.2,.6,.4,.8s.4,.3,.6,.4,.5,.2,.9,.2h.8c.2,0,.5,0,.7-.2v.7c-.2,0-.4,.2-.7,.2-.2,0-.5,0-.9,0l.2-.2Z" style="fill: #fff;"/>
<path d="M378.2,410.8c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.3s.2,.3,.3,.5c0,.2,0,.4,0,.6v3.5h-.7l-.2-.8c0,.2-.2,.2-.3,.4s-.2,.2-.4,.2-.3,.2-.5,.2h-.5c-.6,0-1-.2-1.3-.4s-.4-.6-.4-1.1,0-.5,.2-.8c0-.2,.2-.4,.4-.5,.2-.2,.4-.2,.6-.2s.5,0,.8,0h1.5v-.8c0-.2,0-.2-.2-.3s-.2-.2-.4-.2h-1.1c-.2,0-.4,0-.5,0v-.7h1.1v-.2Zm-.6,4.4c.4,0,.8,0,1.1-.2s.5-.4,.6-.7v-.8h-2c-.2,0-.3,0-.4,.2s-.2,.2-.2,.3v.5c0,.3,0,.5,.2,.6s.4,.2,.8,.2h0Z" style="fill: #fff;"/>
<path d="M385.7,410.9v4.9h-.7v-.7l-.4,.4c0,0-.2,.2-.4,.2-.2,0-.3,0-.5,.2h-.5c-.3,0-.6,0-.8-.2-.2,0-.4-.2-.5-.3s-.2-.3-.2-.5,0-.4,0-.7v-3.4h.8v3.6c0,.2,0,.3,.2,.4s.2,.2,.3,.2,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.2-.2,.3-.3c0-.2,.2-.3,.2-.5v-3.3h1Z" style="fill: #fff;"/>
<path d="M388.9,415.2h.5v.7h-1.3c-.2,0-.3-.2-.5-.2-.2-.2-.2-.3-.2-.5,0-.2,0-.5,0-.8v-2.8h-.8v-.7h.8v-1.1h.8v1.1h1.2v.7h-1.2v3.2c0,0,0,.2,0,.3s.2,.2,.2,.2h.5Z" style="fill: #fff;"/>
<path d="M390.8,410c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,.9h.8v4.9h-.8v-4.9Z" style="fill: #fff;"/>
<path d="M394.8,415.9c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,1-.2s.7,0,1,.2c.3,0,.5,.2,.7,.5,.2,.2,.3,.5,.5,.8,0,.3,.2,.8,.2,1.2s0,.9-.2,1.2c0,.3-.2,.6-.5,.8-.2,.2-.5,.3-.7,.5-.3,0-.6,.2-1,.2Zm0-.7c.3,0,.5,0,.7,0s.3-.2,.5-.3c0-.2,.2-.3,.2-.6s0-.5,0-.9v-.9c0-.2-.2-.5-.2-.6s-.2-.2-.5-.3c-.2,0-.4,0-.7,0s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.4-.2,.6v1.8c0,.2,.2,.5,.2,.6,.2,.2,.2,.2,.5,.3s.4,0,.7,0Z" style="fill: #fff;"/>
<path d="M400.8,410.8c.3,0,.6,0,.8,.2,.2,0,.4,.2,.5,.3,.2,.2,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.4h-.8v-3.6c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.2s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.2,.2-.4,.3-.2,.3-.2,.5v3.3h-.8v-4.9h.8v.7c0-.2,.2-.3,.3-.4s.2-.2,.4-.2,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M411.1,409.5v6.3h-.8v-3.1h-3.1v3.1h-.8v-6.3h.8v2.6h3.1v-2.6h.8Z" style="fill: #fff;"/>
<path d="M413.2,410c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,.9h.8v4.9h-.8v-4.9Z" style="fill: #fff;"/>
<path d="M419.3,410.9v4.6c0,.7-.2,1.2-.6,1.6s-1,.6-1.8,.6-.5,0-.6,0c-.2,0-.4,0-.5,0v-.7c.4,0,.8,0,1.2,0s1-.2,1.2-.4,.4-.7,.4-1.2v-.5c0,.3-.3,.5-.5,.7s-.6,.2-1.1,.2-.8,0-1-.2-.5-.3-.6-.5-.2-.5-.3-.8c0-.3,0-.7,0-1.1s0-.7,0-1c0-.3,.2-.6,.3-.8s.4-.4,.6-.5,.6-.2,1-.2,.5,0,.7,0c.2,0,.3,.2,.5,.2,.2,0,.2,.2,.3,.3,0,.2,.2,.2,.2,.4v-.9h.7Zm-2.3,4.3c.3,0,.5,0,.8-.2,.2,0,.4-.2,.5-.4s.2-.4,.2-.6v-1.5c0-.2-.2-.5-.2-.6s-.3-.3-.5-.4-.5-.2-.8-.2-.5,0-.7,.2c-.2,0-.3,.2-.4,.4s-.2,.4-.2,.6v1.4c0,.2,0,.5,.2,.6,0,.2,.2,.3,.4,.4s.4,.2,.7,.2h0Z" style="fill: #fff;"/>
<path d="M423.3,410.8c.3,0,.6,0,.8,.2,.2,0,.4,.2,.5,.3,.2,.2,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.4h-.8v-3.6c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.2s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.2,.2-.4,.3-.2,.3-.2,.5v3.3h-.8v-6.9h.8v2.7c0-.2,.2-.3,.3-.4s.2-.2,.4-.2,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M374.6,421.1h-1.8v5.6h-.8v-5.6h-1.8v-.8h4.5v.8h0Z" style="fill: #fff;"/>
<path d="M379.2,423.7v.5l-3.3,.2c0,.3,0,.5,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.5,0,.8,0,.5-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,.9-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.5c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.5v.7l2.6-.2h0Z" style="fill: #fff;"/>
<path d="M385.9,421.6c.3,0,.5,0,.8,.2,.2,0,.4,.2,.5,.3,.2,.2,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.4h-.8v-3.1c0-.4,0-.7-.2-.9-.2-.2-.4-.3-.8-.3h-.4c0,0-.2,0-.4,.2,0,0-.2,.2-.3,.2,0,0-.2,.2-.2,.5h0v3.5h-.8v-3.1c0-.4,0-.7-.2-.9s-.4-.3-.8-.3h-.5c-.2,0-.2,0-.4,.2,0,0-.2,.2-.3,.3,0,.2-.2,.3-.2,.5v3.4h-.8v-4.9h.8v.7c.2-.3,.4-.5,.6-.6,.2,0,.5-.2,.8-.2s.7,0,.9,.2c.2,.2,.4,.3,.5,.6,0-.2,.2-.3,.3-.4,0,0,.2-.2,.4-.2,.2,0,.3,0,.5-.2s.3,0,.5,0v-.2Z" style="fill: #fff;"/>
<path d="M391.7,421.6c.4,0,.8,0,1,.2s.5,.3,.6,.5,.2,.5,.3,.8c0,.3,0,.7,0,1.1s0,.7,0,1c0,.3-.2,.6-.3,.8s-.4,.5-.6,.5c-.2,.2-.6,.2-1,.2s-.8,0-1.1-.2c-.2-.2-.4-.4-.5-.7v2.6h-.8v-6.7h.8v.9c0-.3,.3-.5,.5-.7s.6-.3,1.1-.3h0Zm0,4.4c.3,0,.5,0,.7-.2s.3-.2,.4-.5c0-.2,.2-.4,.2-.6v-1.4c0-.2,0-.5-.2-.6,0-.2-.2-.3-.4-.4s-.4-.2-.7-.2-.5,0-.8,.2-.4,.2-.5,.4c-.2,.2-.2,.4-.2,.6v1.5c0,.2,.2,.5,.2,.6,.2,.2,.3,.3,.5,.4,.2,0,.5,.2,.8,.2Z" style="fill: #fff;"/>
<path d="M399.2,423.7v.5l-3.3,.2c0,.3,0,.5,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.5,0,.8,0,.5-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,.9-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.5c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.5v.7l2.6-.2h0Z" style="fill: #fff;"/>
<path d="M403.2,421.6v.7h-.6c-.2,0-.3,0-.5,.2-.2,0-.2,.2-.4,.3,0,.2-.2,.3-.2,.5v3.2h-.8v-4.9h.8v.9c0-.2,.2-.4,.3-.5s.2-.2,.4-.3c.2,0,.3-.2,.5-.2h.5Z" style="fill: #fff;"/>
<path d="M405.9,421.6c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.3s.2,.3,.3,.5c0,.2,0,.4,0,.6v3.5h-.7l-.2-.8c0,.2-.2,.2-.3,.4s-.2,.2-.4,.2-.3,.2-.5,.2h-.5c-.6,0-1-.2-1.3-.4s-.4-.6-.4-1.1,0-.5,.2-.8c0-.2,.2-.4,.4-.5,.2-.2,.4-.2,.6-.2s.5,0,.8,0h1.5v-.8c0-.2,0-.2-.2-.3s-.2-.2-.4-.2h-1.1c-.2,0-.4,0-.5,0v-.7h1.1v-.2Zm-.6,4.4c.4,0,.8,0,1.1-.2s.5-.4,.6-.7v-.8h-2c-.2,0-.3,0-.4,.2s-.2,.2-.2,.3v.5c0,.3,0,.5,.2,.6s.4,.2,.8,.2h0Z" style="fill: #fff;"/>
<path d="M411.3,426.1h.5v.7h-1.3c-.2,0-.3-.2-.5-.2-.2-.2-.2-.3-.2-.5,0-.2,0-.5,0-.8v-2.8h-.8v-.7h.8v-1.1h.8v1.1h1.2v.7h-1.2v3.2c0,0,0,.2,0,.3s.2,.2,.2,.2h.5Z" style="fill: #fff;"/>
<path d="M416.9,421.7v4.9h-.7v-.7l-.4,.4c0,0-.2,.2-.4,.2-.2,0-.3,0-.5,.2h-.5c-.3,0-.6,0-.8-.2-.2,0-.4-.2-.5-.3s-.2-.3-.2-.5,0-.4,0-.7v-3.4h.8v3.6c0,.2,0,.3,.2,.4s.2,.2,.3,.2,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.2-.2,.3-.3c0-.2,.2-.3,.2-.5v-3.3h1Z" style="fill: #fff;"/>
<path d="M421.2,421.6v.7h-.6c-.2,0-.3,0-.5,.2-.2,0-.2,.2-.4,.3,0,.2-.2,.3-.2,.5v3.2h-.8v-4.9h.8v.9c0-.2,.2-.4,.3-.5s.2-.2,.4-.3c.2,0,.3-.2,.5-.2h.5Z" style="fill: #fff;"/>
<path d="M426.1,423.7v.5l-3.3,.2c0,.3,0,.5,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.5,0,.8,0,.5-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.5-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.2,0-.9,.2-1.2c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,.9-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.5c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.5,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.5v.7l2.6-.2h0Z" style="fill: #fff;"/>
</g>
<g>
<path d="M335.1,437.5h.5l1.5,5.6h0l1.8-5.6h.7l1.9,5.6h0l1.5-5.6h.5l-1.7,6.2h-.6l-1.9-5.6h0l-1.9,5.6h-.6l-1.7-6.2h0Z" style="fill: #fff;"/>
<path d="M344,437.5h.5l1.5,5.6h0l1.8-5.6h.7l1.9,5.6h0l1.5-5.6h.5l-1.7,6.2h-.6l-1.9-5.6h0l-1.9,5.6h-.6l-1.7-6.2h0Z" style="fill: #fff;"/>
<path d="M352.8,437.5h.5l1.5,5.6h0l1.8-5.6h.7l1.9,5.6h0l1.5-5.6h.5l-1.7,6.2h-.6l-1.9-5.6h0l-1.9,5.6h-.6l-1.7-6.2h0Z" style="fill: #fff;"/>
<path d="M362.2,443.7c-.2,0-.3,0-.4,0,0,0,0-.2,0-.5s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.5c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M369.4,437.5v5.7c0,.8-.2,1.5-.7,2-.5,.5-1.2,.7-2.1,.7s-.5,0-.8,0-.5,0-.6,0v-.5c.2,0,.5,0,.7,.2h.8c.8,0,1.4-.2,1.7-.6s.5-1,.5-1.7v-.8c-.2,.5-.4,.8-.8,1s-.8,.4-1.5,.4-.8,0-1.1-.2c-.3-.2-.5-.3-.8-.6-.2-.2-.3-.6-.4-1s-.2-.8-.2-1.4,0-.9,.2-1.3c0-.4,.2-.8,.4-1,.2-.3,.5-.5,.8-.6s.7-.2,1.1-.2,.6,0,.9,0c.2,0,.5,.2,.6,.3l.5,.5c.2,.2,.2,.4,.3,.6v-1.3h.5Zm-2.6,5.7c.5,0,.8,0,1.1-.2s.5-.3,.7-.5,.3-.5,.4-.8,0-.7,0-1.1,0-.8,0-1.1c0-.3-.2-.6-.4-.8s-.4-.5-.7-.5-.6-.2-1.1-.2-.8,0-1,.2-.5,.3-.6,.5-.2,.5-.3,.8c0,.3,0,.7,0,1.1s0,.8,0,1.1c0,.3,.2,.6,.3,.8s.4,.4,.6,.5,.6,.2,1,.2Z" style="fill: #fff;"/>
<path d="M376.1,439.9v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M382.4,439.9v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M388.6,439.9v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M392,443.2h.8v.5h-1.5c-.2,0-.4-.2-.5-.3-.2-.2-.2-.3-.2-.6s0-.6,0-1v-3.8h-1v-.5h1v-1.4h.5v1.4h1.7v.5h-1.7v4.5c0,.2,0,.3,.2,.5s.2,.2,.3,.2h.5Z" style="fill: #fff;"/>
<path d="M398.4,439.9v.6l-4.4,.3c0,.5,0,.8,.2,1.1,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,.9-.3v.5c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.5,0h-.6c-.5,0-.9,0-1.2-.2-.4,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5,.2-.8,.5-1,.5-.5,.8-.5c.3,0,.8-.2,1.2-.2s.9,0,1.2,.2c.3,.2,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9v-.2Zm-.5,.2v-.9c0-.3-.2-.5-.2-.7-.2-.2-.3-.4-.5-.5s-.5-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.1l3.8-.3h0Z" style="fill: #fff;"/>
<path d="M402.3,443.7c-.5,0-.8,0-1.2-.2-.3,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5c0-.4,.2-.8,.5-1s.5-.5,.8-.5c.3,0,.7-.2,1.2-.2h.9c.2,0,.5,0,.7,.2v.5c-.2,0-.5-.2-.8-.2h-.8c-.3,0-.7,0-1,.2-.2,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.4,0,.8,0,1.3s0,.9,0,1.3c0,.4,.2,.6,.4,.8,.2,.2,.4,.4,.6,.5s.6,.2,1,.2,.6,0,.9,0c.2,0,.5-.2,.8-.2v.5c-.2,0-.4,.2-.7,.2-.3,0-.6,0-.9,0v-.2Z" style="fill: #fff;"/>
<path d="M408,437.3c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.5,0,.8v4.3h-.5v-4.8c0-.2-.2-.5-.2-.5-.2-.2-.3-.2-.5-.3s-.5,0-.8,0h-.6c-.2,0-.4,0-.6,.2s-.4,.2-.5,.5-.2,.5-.3,.8v4.3h-.5v-8.6h.5v3.5c0-.2,.2-.4,.3-.5s.3-.3,.5-.4,.4-.2,.6-.2,.5,0,.7,0h0Z" style="fill: #fff;"/>
<path d="M412.6,443.7c-.2,0-.3,0-.4,0,0,0,0-.2,0-.5s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.5c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M416.8,443.7c-.5,0-.8,0-1.2-.2-.3,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5c0-.4,.2-.8,.5-1s.5-.5,.8-.5c.3,0,.7-.2,1.2-.2h.9c.2,0,.5,0,.7,.2v.5c-.2,0-.5-.2-.8-.2h-.8c-.3,0-.7,0-1,.2-.2,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.4,0,.8,0,1.3s0,.9,0,1.3c0,.4,.2,.6,.4,.8,.2,.2,.4,.4,.6,.5s.6,.2,1,.2,.6,0,.9,0c.2,0,.5-.2,.8-.2v.5c-.2,0-.4,.2-.7,.2-.3,0-.6,0-.9,0v-.2Z" style="fill: #fff;"/>
<path d="M422.2,443.7c-.5,0-.9,0-1.2-.2-.3,0-.6-.3-.8-.5s-.4-.6-.5-1-.2-.9-.2-1.5,0-1.1,.2-1.5c0-.4,.2-.8,.5-1s.5-.5,.8-.5,.8-.2,1.2-.2,.8,0,1.2,.2c.3,0,.6,.3,.8,.5s.4,.6,.5,1,.2,.9,.2,1.5,0,1.1-.2,1.5c0,.4-.2,.8-.5,1s-.5,.5-.8,.5c-.3,0-.8,.2-1.2,.2Zm0-.5c.4,0,.8,0,1.1-.2,.3,0,.5-.2,.7-.5,.2-.2,.3-.5,.4-.8s0-.8,0-1.3,0-.9,0-1.3-.2-.6-.4-.8-.4-.4-.7-.5-.6-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.7,.5-.2,.2-.3,.5-.3,.8s0,.8,0,1.3,0,.9,0,1.3c0,.4,.2,.6,.3,.8s.4,.4,.7,.5,.6,.2,1,.2h0Z" style="fill: #fff;"/>
<path d="M432.8,437.3c.4,0,.7,0,.9,.2,.2,0,.5,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.5,0,.8v4.3h-.5v-4.8c0-.2,0-.5-.2-.5,0-.2-.2-.2-.5-.3-.2,0-.5,0-.7,0h-.6c-.2,0-.4,0-.5,.2-.2,0-.3,.2-.5,.5-.2,.2-.2,.5-.3,.8h0v4.3h-.5v-4.8c0-.2,0-.5-.2-.5,0-.2-.2-.2-.5-.3s-.5,0-.7,0h-.6c-.2,0-.4,0-.5,.2-.2,0-.3,.2-.5,.5-.2,.2-.2,.5-.3,.8v4.4h-.5v-6.2h.5v1.1c0-.2,.2-.4,.3-.5s.3-.2,.5-.4c.2,0,.4-.2,.5-.2s.5,0,.6,0c.5,0,1,0,1.2,.3,.3,.2,.5,.5,.5,.9,0-.2,.2-.4,.3-.5s.3-.3,.5-.4,.4-.2,.6-.2,.5,0,.7,0v-.2Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M20.7,432.6c-.2,0-.4,0-.5,0h0c-.2,0-.4,0-.6-.1l-1-.4c-.2,0-.4-.2-.8-.5l-.7-.6c-.6-.6-1.1-1.4-1.4-2.6-.3-.9-.4-2.1-.4-3.5s.2-2.7,.6-3.7c.5-1.3,1.4-2.3,2.6-3,.3-.2,.8-.4,1.4-.4,.6,0,3.2-.1,7.8-.1v2.6h-6.1c-1.2,0-2,.5-2.6,1.5-.4,.8-.6,1.7-.6,3v1.6c0,.2,.1,.4,.1,.5h0c0,.3,0,.5,0,.6,.2,.7,.5,1.3,.9,1.8,.5,.4,2.2,.7,5.2,.7v-3.5h-3.8v-2.6h6.7v8.8h-7.2Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M35.6,432.6h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.6-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.6,0,2.6-.1,6.2-.1v2.6h-4.7c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.3,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M48.3,432.6h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.1,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.6-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.6,0,2.6-.1,6.2-.1v2.6h-4.7c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.3,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M61,432.6h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.6-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.6,0,2.6-.1,6.2-.1v2.6h-4.7c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.2,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="74.1 420.4 74.1 432.6 71.1 432.6 71.1 420.4 66.8 420.4 66.8 417.8 78.4 417.8 78.4 420.4 74.1 420.4" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M85.2,432.6h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.3-.6-.5-1.2-.7-1.8-.2-.6-.2-1.3-.2-2,0-1.4,0-2.5,.3-3.5,.2-1,.5-1.8,1-2.5,.5-.8,1.2-1.4,2.1-1.7,.3-.1,.8-.3,1.4-.4,.6,0,2.6-.1,6.2-.1v2.6h-4.7c-2.1,0-3.2,1.2-3.2,3.5h7.8v2.6h-7.8c0,.6,0,1.1,.1,1.5,0,.2,0,.4,.2,.6,0,.2,.2,.3,.3,.5l.5,.5c.2,.1,.4,.2,.6,.3,.3,0,.5,.1,.7,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M97.9,432.6h-1.2c0,0-.4,0-.4,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.3-.4-2.4-1.2-3.1-2.6-.6-1.2-.9-2.5-.9-3.8s0-2.5,.3-3.5c.2-1,.5-1.8,1-2.5,.6-.8,1.2-1.4,2.1-1.7,.5-.2,1-.3,1.4-.4,.5,0,2.6-.1,6.2-.1v2.5h-4.7c-.9,0-1.6,.3-2.2,.8-.4,.5-.7,1.1-.9,1.9-.2,.8-.3,1.7-.3,2.6s.1,1.8,.3,2.5c.3,.9,.9,1.5,1.6,1.7h.3c0,0,.3,.1,.3,.1h5.4v2.6h-4.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="112.8 432.6 112.8 426.4 107.6 426.4 107.6 432.6 104.8 432.6 104.8 417.7 107.6 417.7 107.6 423.8 112.8 423.8 112.8 417.7 115.6 417.7 115.6 432.6 112.8 432.6" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="450.7" height="450.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="134" y1="425.6" x2="319.6" y2="425.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="399.1" x2="452.1" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="372.6" x2="452.1" y2="372.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="346.1" x2="452.1" y2="346.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="319.6" x2="452.1" y2="319.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="293.1" x2="452.1" y2="293.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="266.5" x2="452.1" y2="266.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="240" x2="452.1" y2="240" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="213.5" x2="452.1" y2="213.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="187" x2="452.1" y2="187" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="160.5" x2="452.1" y2="160.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="134" x2="452.1" y2="134" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="107.5" x2="452.1" y2="107.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="81" x2="452.1" y2="81" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="54.4" x2="452.1" y2="54.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="27.9" x2="452.1" y2="27.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="425.6" y1="1.4" x2="425.6" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="399.1" y1="1.4" x2="399.1" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="372.6" y1="1.4" x2="372.6" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="346.1" y1="1.4" x2="346.1" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="319.6" y1="1.4" x2="319.6" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="293.1" y1="1.4" x2="293.1" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="266.5" y1="1.4" x2="266.5" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="240" y1="1.4" x2="240" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="213.5" y1="1.4" x2="213.5" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="187" y1="1.4" x2="187" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="160.5" y1="1.4" x2="160.5" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="134" y1="1.4" x2="134" y2="452.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="107.5" y1="1.4" x2="107.5" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="81" y1="1.4" x2="81" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="54.4" y1="1.4" x2="54.4" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="27.9" y1="1.4" x2="27.9" y2="399.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

View File

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="180mm" height="150mm" viewBox="0 0 510.2 425.2">
<g>
<rect x="393.4" y="373.9" width="99.4" height="31.3" style="fill: none;"/>
<g>
<path d="M424.6,398.7h0l-11.6-19.9c0-.2-.3-.3-.6-.3s-.5,.2-.6,.3l-11.6,19.9c0,.2,0,.5,0,.6,0,.2,.3,.3,.6,.3h23c.2,0,.5-.2,.6-.3,0-.2,0-.5,0-.6h0Zm-22.5-.3l10.4-17.9,10.4,17.9h-20.7Z" style="fill: #fff;"/>
<rect x="407.4" y="396.1" width="10.1" height="1" style="fill: #fff;"/>
<path d="M410.4,395.4l-.6-.4c1-1.5,.5-2.4,0-3.4-.6-1-1.4-2.3,0-4.1l.6,.4c-1,1.4-.6,2.4,0,3.4,.6,1,1.4,2.3,0,4.1h0Z" style="fill: #fff;"/>
<path d="M412.9,395.4l-.6-.4c1-1.5,.5-2.4,0-3.4-.6-1-1.4-2.3,0-4.1l.6,.4c-1,1.4-.6,2.4,0,3.4,.6,1,1.4,2.3,0,4.1h0Z" style="fill: #fff;"/>
<path d="M415.4,395.4l-.6-.4c1-1.5,.6-2.4,0-3.4-.6-1.1-1.3-2.3,0-4.1l.6,.4c-1,1.5-.6,2.4,0,3.4,.6,1.1,1.3,2.3,0,4.1Z" style="fill: #fff;"/>
</g>
<g>
<path d="M430.5,387.1c-.5,0-.9,0-1.3-.2-.4,0-.7-.2-1-.6-.2-.2-.5-.6-.6-1-.2-.5-.2-1-.2-1.8s0-1.2,.2-1.6c.2-.5,.3-.8,.6-1,.2-.2,.6-.5,1-.6,.4,0,.8-.2,1.3-.2h.8c.2,0,.5,0,.6,.2v.8c-.2,0-.4-.2-.6-.2h-.8c-.3,0-.7,0-1,.2-.3,0-.5,.2-.7,.5-.2,.2-.3,.5-.4,.8s-.2,.7-.2,1.3,0,1,.2,1.3c0,.3,.2,.6,.4,.8s.4,.3,.6,.4,.6,.2,1,.2h.8c.2,0,.5,0,.7-.2v.7c-.2,0-.4,.2-.7,.2-.2,0-.6,0-1,0l.2-.2Z" style="fill: #fff;"/>
<path d="M435.5,381.8c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.3s.2,.3,.3,.5c0,.2,0,.4,0,.6v3.7h-.7l-.2-.8c0,.2-.2,.2-.3,.4s-.2,.2-.4,.2-.3,.2-.6,.2h-.6c-.6,0-1-.2-1.4-.4s-.4-.6-.4-1.1,0-.6,.2-.8c0-.2,.2-.4,.4-.5,.2-.2,.4-.2,.6-.2s.6,0,.9,0h1.6v-.8c0-.2,0-.2-.2-.3s-.2-.2-.4-.2h-1.2c-.2,0-.4,0-.6,0v-.7h1.1v-.2Zm-.6,4.7c.4,0,.8,0,1.1-.2s.6-.4,.6-.7v-.9h-2.1c-.2,0-.3,0-.4,.2s-.2,.2-.2,.3v.5c0,.3,0,.5,.2,.6s.4,.2,.8,.2h0Z" style="fill: #fff;"/>
<path d="M443.4,381.8v5.2h-.7v-.7l-.4,.4c0,0-.2,.2-.4,.2-.2,0-.3,0-.5,.2h-.5c-.3,0-.6,0-.9-.2-.2,0-.4-.2-.6-.3s-.2-.3-.2-.6,0-.4,0-.7v-3.6h.8v3.8c0,.2,0,.3,.2,.4s.2,.2,.3,.2,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.2-.2,.3-.3c0-.2,.2-.3,.2-.6v-3.5h1Z" style="fill: #fff;"/>
<path d="M446.9,386.4h.6v.7h-1.4c-.2,0-.3-.2-.5-.2-.2-.2-.2-.3-.2-.5,0-.2,0-.5,0-.8v-2.9h-.8v-.7h.8v-1.2h.8v1.2h1.3v.7h-1.3v3.3c0,0,0,.2,0,.3s.2,.2,.2,.2h.5Z" style="fill: #fff;"/>
<path d="M448.9,380.9c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,1h.8v5.2h-.8v-5.2Z" style="fill: #fff;"/>
<path d="M453.2,387.1c-.4,0-.7,0-1-.2-.3,0-.6-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.3,0-1,.2-1.3c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,1-.2s.7,0,1,.2c.3,0,.6,.2,.7,.5,.2,.2,.3,.5,.5,.8,0,.3,.2,.8,.2,1.3s0,1-.2,1.3c0,.3-.2,.6-.5,.8-.2,.2-.5,.3-.7,.5-.3,0-.6,.2-1,.2Zm0-.7c.3,0,.6,0,.7,0s.3-.2,.5-.3c0-.2,.2-.3,.2-.6s0-.6,0-1v-1c0-.2-.2-.5-.2-.6s-.2-.2-.5-.3c-.2,0-.4,0-.7,0s-.6,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.4-.2,.6v1.9c0,.2,.2,.5,.2,.6,.2,.2,.2,.2,.5,.3s.4,0,.7,0Z" style="fill: #fff;"/>
<path d="M459.5,381.8c.3,0,.6,0,.9,.2,.2,0,.4,.2,.6,.3,.2,.2,.2,.3,.3,.6,0,.2,0,.4,0,.7v3.6h-.8v-3.8c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.2s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.2,.2-.4,.3-.2,.3-.2,.6v3.5h-.8v-5.2h.8v.7c0-.2,.2-.3,.3-.4s.2-.2,.4-.2,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M470.5,380.3v6.7h-.9v-3.3h-3.3v3.3h-.9v-6.7h.9v2.7h3.3v-2.7h.9Z" style="fill: #fff;"/>
<path d="M472.6,380.9c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,1h.8v5.2h-.8v-5.2Z" style="fill: #fff;"/>
<path d="M479.1,381.8v4.9c0,.7-.2,1.3-.6,1.7s-1,.6-1.9,.6-.5,0-.6,0c-.2,0-.4,0-.6,0v-.7c.4,0,.8,0,1.3,0s1-.2,1.3-.4,.4-.7,.4-1.3v-.6c0,.3-.3,.6-.6,.7s-.6,.2-1.1,.2-.8,0-1-.2-.5-.3-.6-.6-.2-.5-.3-.8c0-.3,0-.7,0-1.1s0-.7,0-1c0-.3,.2-.6,.3-.9s.4-.4,.6-.6,.6-.2,1-.2,.5,0,.7,0c.2,0,.3,.2,.5,.2,.2,0,.2,.2,.3,.3,0,.2,.2,.2,.2,.4v-1h.7Zm-2.4,4.5c.3,0,.6,0,.8-.2,.2,0,.4-.2,.5-.4s.2-.4,.2-.6v-1.6c0-.2-.2-.5-.2-.6s-.3-.3-.5-.4-.5-.2-.8-.2-.6,0-.7,.2c-.2,0-.3,.2-.4,.4s-.2,.4-.2,.6v1.5c0,.2,0,.5,.2,.6,0,.2,.2,.3,.4,.4s.4,.2,.7,.2h0Z" style="fill: #fff;"/>
<path d="M483.4,381.8c.3,0,.6,0,.9,.2,.2,0,.4,.2,.6,.3,.2,.2,.2,.3,.3,.6,0,.2,0,.4,0,.7v3.6h-.8v-3.8c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.2s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.2,.2-.4,.3-.2,.3-.2,.6v3.5h-.8v-7.3h.8v2.9c0-.2,.2-.3,.3-.4s.2-.2,.4-.2,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M431.7,392.7h-1.9v5.9h-.9v-5.9h-1.9v-.8h4.8v.8h0Z" style="fill: #fff;"/>
<path d="M436.6,395.4v.6l-3.5,.2c0,.3,0,.6,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.6,0,.9,0,.6-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.6-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.3,0-1,.2-1.3c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,1-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.6c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.6,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.6v.7l2.7-.2h0Z" style="fill: #fff;"/>
<path d="M443.7,393.2c.3,0,.6,0,.8,.2,.2,0,.4,.2,.6,.3,.2,.2,.2,.3,.3,.6,0,.2,0,.4,0,.7v3.6h-.8v-3.3c0-.4,0-.7-.2-1-.2-.2-.4-.3-.8-.3h-.4c0,0-.2,0-.4,.2,0,0-.2,.2-.3,.2,0,0-.2,.2-.2,.5h0v3.7h-.8v-3.3c0-.4,0-.7-.2-1s-.4-.3-.8-.3h-.5c-.2,0-.2,0-.4,.2,0,0-.2,.2-.3,.3,0,.2-.2,.3-.2,.5v3.6h-.8v-5.2h.8v.7c.2-.3,.4-.5,.6-.6,.2,0,.6-.2,.9-.2s.7,0,1,.2c.2,.2,.4,.3,.6,.6,0-.2,.2-.3,.3-.4,0,0,.2-.2,.4-.2,.2,0,.3,0,.5-.2s.3,0,.5,0v-.2Z" style="fill: #fff;"/>
<path d="M449.8,393.2c.4,0,.8,0,1,.2s.5,.3,.6,.6,.2,.6,.3,.9c0,.3,0,.7,0,1.1s0,.7,0,1c0,.3-.2,.6-.3,.9s-.4,.5-.6,.6c-.2,.2-.6,.2-1,.2s-.9,0-1.1-.2c-.2-.2-.4-.4-.6-.7v2.8h-.8v-7.1h.8v1c0-.3,.3-.6,.6-.7s.6-.3,1.1-.3h0Zm0,4.6c.3,0,.6,0,.7-.2s.3-.2,.4-.5c0-.2,.2-.4,.2-.6v-1.5c0-.2,0-.5-.2-.6,0-.2-.2-.3-.4-.4s-.4-.2-.7-.2-.6,0-.8,.2-.4,.2-.5,.4c-.2,.2-.2,.4-.2,.6v1.6c0,.2,.2,.5,.2,.6,.2,.2,.3,.3,.5,.4,.2,0,.5,.2,.8,.2Z" style="fill: #fff;"/>
<path d="M457.8,395.4v.6l-3.5,.2c0,.3,0,.6,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.6,0,.9,0,.6-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.6-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.3,0-1,.2-1.3c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,1-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.6c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.6,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.6v.7l2.7-.2h0Z" style="fill: #fff;"/>
<path d="M462,393.2v.7h-.6c-.2,0-.3,0-.5,.2-.2,0-.2,.2-.4,.3,0,.2-.2,.3-.2,.6v3.4h-.8v-5.2h.8v1c0-.2,.2-.4,.3-.6s.2-.2,.4-.3c.2,0,.3-.2,.5-.2h.6Z" style="fill: #fff;"/>
<path d="M465,393.2c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.3s.2,.3,.3,.5c0,.2,0,.4,0,.6v3.7h-.7l-.2-.8c0,.2-.2,.2-.3,.4s-.2,.2-.4,.2-.3,.2-.6,.2h-.6c-.6,0-1-.2-1.4-.4s-.4-.6-.4-1.1,0-.6,.2-.8c0-.2,.2-.4,.4-.5,.2-.2,.4-.2,.6-.2s.6,0,.9,0h1.6v-.8c0-.2,0-.2-.2-.3s-.2-.2-.4-.2h-1.2c-.2,0-.4,0-.6,0v-.7h1.1v-.2Zm-.6,4.7c.4,0,.8,0,1.1-.2s.6-.4,.6-.7v-.9h-2.1c-.2,0-.3,0-.4,.2s-.2,.2-.2,.3v.5c0,.3,0,.5,.2,.6s.4,.2,.8,.2h0Z" style="fill: #fff;"/>
<path d="M470.6,397.9h.6v.7h-1.4c-.2,0-.3-.2-.5-.2-.2-.2-.2-.3-.2-.5,0-.2,0-.5,0-.8v-2.9h-.8v-.7h.8v-1.2h.8v1.2h1.3v.7h-1.3v3.3c0,0,0,.2,0,.3s.2,.2,.2,.2h.5Z" style="fill: #fff;"/>
<path d="M476.6,393.3v5.2h-.7v-.7l-.4,.4c0,0-.2,.2-.4,.2-.2,0-.3,0-.5,.2h-.5c-.3,0-.6,0-.9-.2-.2,0-.4-.2-.6-.3s-.2-.3-.2-.6,0-.4,0-.7v-3.6h.8v3.8c0,.2,0,.3,.2,.4s.2,.2,.3,.2,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.2-.2,.3-.3c0-.2,.2-.3,.2-.6v-3.5h1Z" style="fill: #fff;"/>
<path d="M481.1,393.2v.7h-.6c-.2,0-.3,0-.5,.2-.2,0-.2,.2-.4,.3,0,.2-.2,.3-.2,.6v3.4h-.8v-5.2h.8v1c0-.2,.2-.4,.3-.6s.2-.2,.4-.3c.2,0,.3-.2,.5-.2h.6Z" style="fill: #fff;"/>
<path d="M486.4,395.4v.6l-3.5,.2c0,.3,0,.6,0,.7,0,.2,.2,.4,.2,.5,.2,.2,.3,.2,.5,.3,.2,0,.5,0,.8,0s.6,0,.9,0,.6-.2,.7-.2v.8s-.2,0-.3,0c-.2,0-.2,0-.4,0h-1c-.4,0-.7,0-1-.2-.3,0-.6-.2-.7-.5-.2-.2-.4-.5-.5-.8s-.2-.8-.2-1.3,0-1,.2-1.3c0-.3,.2-.6,.5-.8,.2-.2,.5-.3,.7-.5,.3,0,.6-.2,1-.2s.8,0,1,.2,.5,.3,.6,.5c.2,.2,.2,.5,.3,.7v.8l.2,.2Zm-.8,0v-.6c0-.2,0-.3-.2-.5s-.2-.2-.4-.3c-.2,0-.4-.2-.6-.2s-.6,0-.7,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.2,.6v.7l2.7-.2h0Z" style="fill: #fff;"/>
</g>
<g>
<path d="M389.8,410h.6l1.6,5.9h0l1.9-5.9h.7l2,5.9h0l1.6-5.9h.6l-1.8,6.5h-.6l-2-6h0l-2,6h-.6l-1.8-6.5h0Z" style="fill: #fff;"/>
<path d="M399.2,410h.6l1.6,5.9h0l1.9-5.9h.7l2,5.9h0l1.6-5.9h.6l-1.8,6.5h-.6l-2-6h0l-2,6h-.6l-1.8-6.5h0Z" style="fill: #fff;"/>
<path d="M408.5,410h.6l1.6,5.9h0l1.9-5.9h.7l2,5.9h0l1.6-5.9h.6l-1.8,6.5h-.6l-2-6h0l-2,6h-.6l-1.8-6.5h0Z" style="fill: #fff;"/>
<path d="M418.5,416.7c-.2,0-.3,0-.4,0,0,0,0-.2,0-.5s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.5c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M426.2,410v6.1c0,.9-.2,1.6-.7,2.1-.5,.5-1.3,.7-2.2,.7s-.6,0-.8,0-.5,0-.6,0v-.6c.2,0,.5,0,.7,.2h.8c.9,0,1.4-.2,1.8-.6s.6-1,.6-1.8v-.9c-.2,.5-.4,.8-.8,1s-.9,.4-1.6,.4-.9,0-1.2-.2c-.3-.2-.6-.3-.8-.6-.2-.2-.3-.6-.4-1s-.2-.9-.2-1.4,0-1,.2-1.4c0-.4,.2-.8,.4-1,.2-.3,.5-.5,.8-.6s.7-.2,1.2-.2,.6,0,1,0c.2,0,.5,.2,.6,.3l.5,.5c.2,.2,.2,.4,.3,.6v-1.4h.5Zm-2.8,6.1c.5,0,.8,0,1.1-.2s.6-.3,.7-.6,.3-.6,.4-.9,0-.7,0-1.1,0-.8,0-1.1c0-.3-.2-.6-.4-.9s-.4-.5-.7-.6-.6-.2-1.1-.2-.8,0-1,.2-.5,.3-.6,.6-.2,.6-.3,.9c0,.3,0,.7,0,1.2s0,.9,0,1.2c0,.3,.2,.6,.3,.9s.4,.4,.6,.6,.6,.2,1,.2Z" style="fill: #fff;"/>
<path d="M433.2,412.6v.6l-4.6,.3c0,.5,0,.9,.2,1.2,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,1-.3v.6c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.6c-.5,0-1,0-1.3-.2-.4,0-.6-.3-.9-.6s-.4-.6-.5-1-.2-1-.2-1.6,0-1.2,.2-1.6,.2-.8,.5-1,.5-.5,.9-.6c.3,0,.8-.2,1.3-.2s1,0,1.3,.2c.3,.2,.6,.4,.7,.6s.2,.6,.3,.9,0,.6,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.2-.7-.2-.2-.3-.4-.6-.5s-.6-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.2l4.1-.3h0Z" style="fill: #fff;"/>
<path d="M439.9,412.6v.6l-4.6,.3c0,.5,0,.9,.2,1.2,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,1-.3v.6c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.6c-.5,0-1,0-1.3-.2-.4,0-.6-.3-.9-.6s-.4-.6-.5-1-.2-1-.2-1.6,0-1.2,.2-1.6,.2-.8,.5-1,.5-.5,.9-.6c.3,0,.8-.2,1.3-.2s1,0,1.3,.2c.3,.2,.6,.4,.7,.6s.2,.6,.3,.9,0,.6,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.2-.7-.2-.2-.3-.4-.6-.5s-.6-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.2l4.1-.3h0Z" style="fill: #fff;"/>
<path d="M446.5,412.6v.6l-4.6,.3c0,.5,0,.9,.2,1.2,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,1-.3v.6c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.6c-.5,0-1,0-1.3-.2-.4,0-.6-.3-.9-.6s-.4-.6-.5-1-.2-1-.2-1.6,0-1.2,.2-1.6,.2-.8,.5-1,.5-.5,.9-.6c.3,0,.8-.2,1.3-.2s1,0,1.3,.2c.3,.2,.6,.4,.7,.6s.2,.6,.3,.9,0,.6,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.2-.7-.2-.2-.3-.4-.6-.5s-.6-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.2l4.1-.3h0Z" style="fill: #fff;"/>
<path d="M450.1,416.1h.9v.5h-1.6c-.2,0-.4-.2-.5-.3-.2-.2-.2-.3-.2-.6s0-.6,0-1v-4.1h-1v-.5h1v-1.5h.6v1.5h1.8v.5h-1.8v4.8c0,.2,0,.3,.2,.5s.2,.2,.3,.2h.5Z" style="fill: #fff;"/>
<path d="M456.9,412.6v.6l-4.6,.3c0,.5,0,.9,.2,1.2,0,.3,.2,.6,.4,.8,.2,.2,.4,.4,.7,.5s.6,.2,1.1,.2,.7,0,1,0c.4,0,.7-.2,1-.3v.6c0,0-.2,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.6c-.5,0-1,0-1.3-.2-.4,0-.6-.3-.9-.6s-.4-.6-.5-1-.2-1-.2-1.6,0-1.2,.2-1.6,.2-.8,.5-1,.5-.5,.9-.6c.3,0,.8-.2,1.3-.2s1,0,1.3,.2c.3,.2,.6,.4,.7,.6s.2,.6,.3,.9,0,.6,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.2-.7-.2-.2-.3-.4-.6-.5s-.6-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.6,.5s-.3,.5-.4,.8c0,.3,0,.7-.2,1.2l4.1-.3h0Z" style="fill: #fff;"/>
<path d="M461.1,416.7c-.5,0-.9,0-1.3-.2-.3,0-.6-.3-.9-.6s-.4-.6-.5-1-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.2-.8,.5-1s.5-.5,.9-.6c.3,0,.7-.2,1.3-.2h1c.2,0,.6,0,.7,.2v.6c-.2,0-.5-.2-.8-.2h-.9c-.3,0-.7,0-1,.2-.2,0-.5,.2-.6,.5s-.3,.5-.4,.9c0,.4,0,.8,0,1.4s0,1,0,1.4c0,.4,.2,.6,.4,.9,.2,.2,.4,.4,.6,.5s.6,.2,1,.2,.6,0,1,0c.2,0,.6-.2,.8-.2v.6c-.2,0-.4,.2-.7,.2-.3,0-.6,0-1,0v-.2Z" style="fill: #fff;"/>
<path d="M467.2,409.9c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.6,0,.9v4.5h-.6v-5.1c0-.2-.2-.5-.2-.6-.2-.2-.3-.2-.5-.3s-.5,0-.8,0h-.6c-.2,0-.4,0-.6,.2s-.4,.2-.6,.5-.2,.5-.3,.8v4.5h-.6v-9.2h.6v3.7c0-.2,.2-.4,.3-.6s.3-.3,.6-.4,.4-.2,.6-.2,.5,0,.7,0h0Z" style="fill: #fff;"/>
<path d="M472,416.7c-.2,0-.3,0-.4,0,0,0,0-.2,0-.5s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.5c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M476.4,416.7c-.5,0-.9,0-1.3-.2-.3,0-.6-.3-.9-.6s-.4-.6-.5-1-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.2-.8,.5-1s.5-.5,.9-.6c.3,0,.7-.2,1.3-.2h1c.2,0,.6,0,.7,.2v.6c-.2,0-.5-.2-.8-.2h-.9c-.3,0-.7,0-1,.2-.2,0-.5,.2-.6,.5s-.3,.5-.4,.9c0,.4,0,.8,0,1.4s0,1,0,1.4c0,.4,.2,.6,.4,.9,.2,.2,.4,.4,.6,.5s.6,.2,1,.2,.6,0,1,0c.2,0,.6-.2,.8-.2v.6c-.2,0-.4,.2-.7,.2-.3,0-.6,0-1,0v-.2Z" style="fill: #fff;"/>
<path d="M482.2,416.7c-.5,0-1,0-1.3-.2-.3,0-.6-.3-.9-.6s-.4-.6-.5-1-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.2-.8,.5-1s.5-.5,.9-.6,.8-.2,1.3-.2,.9,0,1.3,.2c.3,0,.6,.3,.9,.6s.4,.6,.5,1,.2,1,.2,1.6,0,1.2-.2,1.6c0,.4-.2,.8-.5,1s-.6,.5-.9,.6c-.3,0-.8,.2-1.3,.2Zm0-.5c.4,0,.8,0,1.1-.2,.3,0,.5-.2,.7-.5,.2-.2,.3-.6,.4-.9s0-.8,0-1.4,0-1,0-1.4-.2-.6-.4-.9-.4-.4-.7-.5-.6-.2-1-.2-.8,0-1,.2c-.3,0-.5,.2-.7,.5-.2,.2-.3,.6-.3,.9s0,.8,0,1.4,0,1,0,1.4c0,.4,.2,.6,.3,.9s.4,.4,.7,.5,.6,.2,1,.2h0Z" style="fill: #fff;"/>
<path d="M493.4,409.9c.4,0,.7,0,1,.2,.2,0,.5,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.6,0,.9v4.5h-.6v-5.1c0-.2,0-.5-.2-.6,0-.2-.2-.2-.5-.3-.2,0-.5,0-.7,0h-.6c-.2,0-.4,0-.6,.2-.2,0-.3,.2-.5,.5-.2,.2-.2,.5-.3,.8h0v4.5h-.6v-5.1c0-.2,0-.5-.2-.6,0-.2-.2-.2-.5-.3s-.5,0-.7,0h-.6c-.2,0-.4,0-.6,.2-.2,0-.3,.2-.5,.5-.2,.2-.2,.5-.3,.8v4.6h-.6v-6.5h.6v1.1c0-.2,.2-.4,.3-.6s.3-.2,.5-.4c.2,0,.4-.2,.6-.2s.5,0,.6,0c.6,0,1,0,1.3,.3,.3,.2,.5,.6,.6,1,0-.2,.2-.4,.3-.6s.3-.3,.5-.4,.4-.2,.6-.2,.5,0,.7,0v-.2Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M20,405.8c-.3,0-.4,0-.5,0h0c-.2,0-.4,0-.6-.2l-1.1-.4c-.2,0-.5-.2-.8-.5l-.7-.6c-.6-.6-1.1-1.5-1.5-2.7-.3-1-.4-2.2-.4-3.7s.2-2.8,.7-3.9c.5-1.4,1.4-2.4,2.8-3.2,.4-.2,.9-.4,1.5-.5,.6,0,3.4-.1,8.2-.1v2.7h-6.4c-1.2,0-2.1,.5-2.7,1.6-.4,.8-.7,1.9-.7,3.1v1.6c0,.2,.1,.4,.1,.5h0c0,.3,0,.5,0,.7,.2,.8,.5,1.4,1,1.9,.5,.5,2.4,.7,5.6,.7v-3.7h-4v-2.8h7.1v9.4h-7.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M35.8,405.8h-1.3c0,0-.5,0-.5,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.4-.4-2.5-1.3-3.3-2.8-.3-.6-.6-1.2-.7-1.9-.2-.7-.3-1.4-.3-2.1,0-1.5,.1-2.7,.3-3.7,.2-1,.6-1.9,1.1-2.7,.6-.9,1.3-1.5,2.2-1.8,.4-.1,.9-.3,1.5-.4,.6,0,2.8-.1,6.6-.1v2.7h-4.9c-2.3,0-3.4,1.2-3.4,3.7h8.3v2.7h-8.3c0,.6,0,1.2,.1,1.6,0,.2,0,.5,.2,.7,0,.2,.2,.3,.3,.5l.5,.6c.2,.1,.4,.3,.6,.4,.3,0,.5,.1,.7,.1h5.8v2.8h-5.1Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M49.3,405.8h-1.3c0,0-.5,0-.5,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.4-.4-2.5-1.3-3.3-2.8-.3-.6-.6-1.2-.7-1.9-.2-.7-.3-1.4-.3-2.1,0-1.5,.1-2.7,.3-3.7,.2-1,.6-1.9,1.1-2.7,.6-.9,1.3-1.5,2.2-1.8,.4-.1,.9-.3,1.5-.4,.6,0,2.8-.1,6.6-.1v2.7h-4.9c-2.3,0-3.4,1.2-3.4,3.7h8.3v2.7h-8.3c0,.6,0,1.2,.1,1.6,0,.2,0,.5,.2,.7,0,.2,.2,.3,.3,.5l.5,.6c.2,.1,.4,.3,.6,.4,.3,0,.5,.1,.7,.1h5.8v2.8h-5.1Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M62.7,405.8h-1.3c0,0-.5,0-.5,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.4-.4-2.5-1.3-3.3-2.8-.3-.6-.6-1.2-.7-1.9-.2-.7-.3-1.4-.3-2.1,0-1.5,.1-2.7,.3-3.7,.2-1,.6-1.9,1.1-2.7,.6-.9,1.3-1.5,2.2-1.8,.4-.1,.9-.3,1.5-.4,.6,0,2.8-.1,6.6-.1v2.7h-4.9c-2.3,0-3.4,1.2-3.4,3.7h8.3v2.7h-8.3c0,.6,0,1.2,.1,1.6,0,.2,0,.5,.2,.7,0,.2,.2,.3,.3,.5l.5,.6c.2,.1,.4,.3,.6,.4,.3,0,.5,.1,.7,.1h5.8v2.8h-5.1Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="76.7 392.7 76.7 405.8 73.5 405.8 73.5 392.7 69 392.7 69 390 81.3 390 81.3 392.7 76.7 392.7" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M88.5,405.8h-1.3c0,0-.5,0-.5,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.4-.4-2.5-1.3-3.3-2.8-.3-.6-.6-1.2-.7-1.9-.2-.7-.3-1.4-.3-2.1,0-1.5,.1-2.7,.3-3.7,.2-1,.6-1.9,1.1-2.7,.6-.9,1.3-1.5,2.2-1.8,.4-.1,.9-.3,1.5-.4,.6,0,2.8-.1,6.6-.1v2.7h-4.9c-2.3,0-3.4,1.2-3.4,3.7h8.3v2.7h-8.3c0,.6,0,1.2,.1,1.6,0,.2,0,.5,.2,.7,0,.2,.2,.3,.3,.5l.5,.6c.2,.1,.4,.3,.6,.4,.3,0,.5,.1,.7,.1h5.8v2.8h-5.1Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M102,405.8h-1.3c0,0-.5,0-.5,0-.1,0-.2,0-.4,0,0,0-.1,0-.2,0,0,0-.1,0-.2,0-1.4-.4-2.5-1.3-3.3-2.8-.7-1.3-1-2.6-1-4s.1-2.7,.3-3.7c.2-1,.6-1.9,1.1-2.7,.6-.9,1.3-1.5,2.2-1.8,.5-.2,1-.3,1.5-.4,.6,0,2.8-.1,6.6-.1v2.7h-4.9c-1,0-1.7,.3-2.3,.9-.5,.5-.8,1.2-1,2-.2,.9-.3,1.8-.3,2.8s.1,1.9,.4,2.7c.3,1,.9,1.6,1.7,1.8h.3c0,0,.4,.1,.4,.1h5.8v2.8h-5.1Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="117.7 405.8 117.7 399.1 112.2 399.1 112.2 405.8 109.2 405.8 109.2 390 112.2 390 112.2 396.4 117.7 396.4 117.7 390 120.7 390 120.7 405.8 117.7 405.8" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="507.4" height="422.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="134.9" y1="397.4" x2="375.3" y2="397.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="371" x2="508.8" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="344.6" x2="508.8" y2="344.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="318.2" x2="508.8" y2="318.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="291.8" x2="508.8" y2="291.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="265.4" x2="508.8" y2="265.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="239" x2="508.8" y2="239" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="212.6" x2="508.8" y2="212.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="186.2" x2="508.8" y2="186.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="159.8" x2="508.8" y2="159.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="133.4" x2="508.8" y2="133.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="107" x2="508.8" y2="107" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="80.6" x2="508.8" y2="80.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="54.2" x2="508.8" y2="54.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="27.8" x2="508.8" y2="27.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="482.1" y1="1.4" x2="482.1" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="455.4" y1="1.4" x2="455.4" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="428.7" y1="1.4" x2="428.7" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="402" y1="1.4" x2="402" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="375.3" y1="1.4" x2="375.3" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="348.6" y1="1.4" x2="348.6" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="321.9" y1="1.4" x2="321.9" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="295.2" y1="1.4" x2="295.2" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="268.5" y1="1.4" x2="268.5" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="241.8" y1="1.4" x2="241.8" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="215.1" y1="1.4" x2="215.1" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="188.4" y1="1.4" x2="188.4" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="161.6" y1="1.4" x2="161.6" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="134.9" y1="1.4" x2="134.9" y2="423.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="108.2" y1="1.4" x2="108.2" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="81.5" y1="1.4" x2="81.5" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="54.8" y1="1.4" x2="54.8" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="28.1" y1="1.4" x2="28.1" y2="371" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

View File

@ -0,0 +1,106 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="200mm" height="200mm" viewBox="0 0 566.9 566.9">
<g>
<rect x="453.6" y="515.8" width="90.9" height="28.7" style="fill: none;"/>
<g>
<path d="M482.1,538.5h0l-10.6-18.2c0-.2-.3-.3-.5-.3s-.4,.1-.5,.3l-10.6,18.2c0,.2,0,.4,0,.6,0,.2,.3,.3,.5,.3h21.1c.2,0,.4-.1,.5-.3,0-.2,0-.4,0-.6h0Zm-20.6-.3l9.5-16.4,9.5,16.4h-19Z" style="fill: #fff;"/>
<rect x="466.4" y="536.2" width="9.3" height=".9" style="fill: #fff;"/>
<path d="M469.2,535.5l-.5-.4c.9-1.4,.4-2.2,0-3.1-.6-.9-1.2-2.1,0-3.8l.5,.4c-.9,1.3-.5,2.2,0,3.1,.6,.9,1.2,2.1,0,3.8h0Z" style="fill: #fff;"/>
<path d="M471.4,535.5l-.5-.4c.9-1.4,.4-2.2,0-3.1-.6-.9-1.2-2.1,0-3.7l.5,.4c-.9,1.3-.5,2.2,0,3.1,.6,.9,1.2,2.1,0,3.7h0Z" style="fill: #fff;"/>
<path d="M473.7,535.5l-.5-.4c.9-1.4,.5-2.2,0-3.1-.6-1-1.2-2.1,0-3.8l.5,.4c-.9,1.4-.5,2.2,0,3.1,.6,1,1.2,2.1,0,3.8Z" style="fill: #fff;"/>
</g>
<g>
<path d="M487.5,527.9c-.4,0-.8,0-1.2-.1-.4,0-.7-.2-.9-.5-.2-.2-.4-.6-.6-.9-.1-.4-.2-.9-.2-1.6s0-1.1,.2-1.5c.1-.4,.3-.7,.6-.9,.2-.2,.5-.4,.9-.5,.4,0,.7-.1,1.2-.1h.7c.2,0,.4,0,.6,.1v.7c-.1,0-.4-.1-.6-.1h-.7c-.3,0-.7,0-.9,.1-.3,0-.4,.2-.7,.4-.1,.2-.3,.4-.4,.7s-.1,.7-.1,1.2,0,.9,.1,1.2c0,.3,.2,.6,.4,.7s.4,.3,.6,.4,.5,.1,.9,.1h.7c.2,0,.4,0,.7-.1v.7c-.1,0-.4,.1-.7,.2-.2,0-.5,0-.9,0h.2Z" style="fill: #fff;"/>
<path d="M492,523c.4,0,.7,0,.9,.1,.2,0,.4,.1,.6,.3s.2,.3,.3,.4c0,.1,0,.4,0,.6v3.4h-.7v-.7c-.1,.1-.3,.2-.4,.4s-.2,.2-.4,.2-.3,.1-.5,.1h-.5c-.6,0-.9-.1-1.2-.4s-.4-.6-.4-1,0-.5,.1-.7c0-.2,.2-.4,.4-.4,.1-.1,.4-.2,.6-.2s.5,0,.8,0h1.5v-.7c0-.1,0-.2-.1-.3s-.2-.1-.4-.2h-1.1c-.1,0-.4,0-.5,0v-.7h.9Zm-.5,4.2c.4,0,.7,0,1-.2s.5-.4,.6-.7v-.8h-1.9c-.1,0-.3,0-.4,.1s-.1,.1-.2,.3v.4c0,.3,0,.4,.2,.6s.4,.2,.7,.2h0Z" style="fill: #fff;"/>
<path d="M499.3,523.1v4.7h-.7v-.7l-.4,.4c0,0-.2,.1-.4,.2-.1,0-.3,0-.4,.1h-.4c-.3,0-.6,0-.8-.1-.2,0-.4-.1-.5-.3s-.2-.3-.2-.5,0-.4,0-.7v-3.3h.7v3.5c0,.1,0,.3,.1,.4s.1,.1,.3,.2,.3,0,.4,0h.4c.1,0,.3,0,.4-.1s.2-.1,.3-.3c0-.1,.1-.3,.2-.5v-3.2h.9Z" style="fill: #fff;"/>
<path d="M502.5,527.3h.5v.7h-1.2c-.1,0-.3-.1-.4-.2-.1-.1-.2-.3-.2-.4,0-.2,0-.4,0-.7v-2.7h-.7v-.7h.7v-1.1h.7v1.1h1.2v.7h-1.2v3.1c0,0,0,.2,0,.3s.1,.1,.2,.1h.4Z" style="fill: #fff;"/>
<path d="M504.3,522.2c-.1,0-.3,0-.4,0,0,0,0-.1,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.1,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,.9h.7v4.7h-.7v-4.7Z" style="fill: #fff;"/>
<path d="M508.2,527.9c-.4,0-.7,0-.9-.1-.3,0-.5-.2-.7-.4-.2-.2-.4-.4-.4-.7s-.1-.7-.1-1.2,0-.9,.1-1.2c0-.3,.2-.6,.4-.7,.2-.2,.4-.3,.7-.4,.3,0,.6-.1,.9-.1s.7,0,.9,.1c.3,0,.5,.2,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,.1,.7,.1,1.2s0,.9-.1,1.2c0,.3-.2,.6-.4,.7-.2,.2-.4,.3-.7,.4-.3,0-.6,.1-.9,.1Zm0-.7c.3,0,.5,0,.7,0s.3-.1,.4-.3c0-.1,.1-.3,.2-.6s0-.5,0-.9v-.9c0-.2-.1-.4-.2-.6s-.2-.2-.4-.3c-.1,0-.4,0-.7,0s-.5,0-.7,0c-.1,0-.3,.1-.4,.3,0,.1-.2,.4-.2,.6v1.7c0,.2,.1,.4,.2,.6,.1,.1,.2,.2,.4,.3s.4,0,.7,0Z" style="fill: #fff;"/>
<path d="M514,523c.3,0,.6,0,.8,.1,.2,0,.4,.2,.5,.3,.1,.1,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.3h-.7v-3.5c0-.1,0-.3-.1-.4,0,0-.1-.1-.3-.2s-.3,0-.4,0h-.4c-.1,0-.3,0-.4,.1s-.2,.1-.4,.3-.2,.3-.2,.5v3.2h-.7v-4.7h.7v.7c0-.1,.1-.3,.3-.4s.2-.1,.4-.2,.3,0,.4-.1,.3,0,.4,0h-.1Z" style="fill: #fff;"/>
<path d="M524.1,521.7v6.1h-.8v-3h-3v3h-.8v-6.1h.8v2.5h3v-2.5h.8Z" style="fill: #fff;"/>
<path d="M526,522.2c-.1,0-.3,0-.4,0,0,0,0-.1,0-.4s0-.3,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.1,0,.4s0,.3,0,.4c0,0-.2,0-.4,0Zm-.4,.9h.7v4.7h-.7v-4.7Z" style="fill: #fff;"/>
<path d="M532,523.1v4.4c0,.7-.2,1.2-.6,1.5s-.9,.6-1.7,.6-.4,0-.6,0c-.2,0-.4,0-.5,0v-.7c.4,0,.7,0,1.2,0s.9-.1,1.2-.4,.4-.7,.4-1.2v-.5c0,.3-.3,.5-.5,.7s-.6,.2-1,.2-.7,0-.9-.1-.4-.3-.6-.5-.2-.4-.3-.7c0-.3,0-.7,0-1s0-.7,0-.9c0-.3,.1-.6,.3-.8s.4-.4,.6-.5,.6-.2,.9-.2,.4,0,.7,0c.1,0,.3,.1,.4,.2,.1,0,.2,.2,.3,.3,0,.1,.1,.2,.2,.4v-.9h.7Zm-2.2,4.2c.3,0,.5,0,.7-.1,.2,0,.4-.2,.4-.4s.2-.4,.2-.6v-1.5c0-.2-.1-.4-.2-.6s-.3-.3-.4-.4-.4-.1-.7-.1-.5,0-.7,.1c-.1,0-.3,.2-.4,.4s-.1,.4-.1,.6v1.4c0,.2,0,.4,.1,.6,0,.1,.2,.3,.4,.4s.4,.1,.7,.1h0Z" style="fill: #fff;"/>
<path d="M535.9,523c.3,0,.6,0,.8,.1,.2,0,.4,.2,.5,.3,.1,.1,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.3h-.7v-3.5c0-.1,0-.3-.1-.4,0,0-.1-.1-.3-.2s-.3,0-.4,0h-.4c-.1,0-.3,0-.4,.1s-.2,.1-.4,.3-.2,.3-.2,.5v3.2h-.7v-6.7h.7v2.6c0-.1,.1-.3,.3-.4s.2-.1,.4-.2,.3,0,.4-.1,.3,0,.4,0h-.1Z" style="fill: #fff;"/>
<path d="M488.6,533h-1.7v5.4h-.8v-5.4h-1.7v-.7h4.4v.7h0Z" style="fill: #fff;"/>
<path d="M493.1,535.5v.5l-3.2,.2c0,.3,0,.5,0,.7,0,.2,.1,.4,.2,.4,.1,.1,.3,.2,.4,.3,.2,0,.4,0,.7,0s.5,0,.8,0,.5-.1,.7-.2v.7s-.1,0-.3,0c-.1,0-.2,0-.4,0h-.9c-.4,0-.7,0-.9-.1-.3,0-.5-.2-.7-.4-.2-.2-.4-.4-.4-.7s-.1-.7-.1-1.2,0-.9,.1-1.2c0-.3,.2-.6,.4-.7,.2-.2,.4-.3,.7-.4,.3,0,.6-.1,.9-.1s.7,0,.9,.1,.4,.3,.6,.4c.1,.2,.2,.4,.3,.7v.9Zm-.6,0v-.5c0-.1,0-.3-.1-.4s-.2-.2-.4-.3c-.1,0-.4-.1-.6-.1s-.5,0-.7,0c-.1,0-.3,.1-.4,.3,0,.1-.1,.3-.2,.5v.7l2.5-.2h0Z" style="fill: #fff;"/>
<path d="M499.6,533.5c.3,0,.5,0,.7,.1,.2,0,.4,.2,.5,.3,.1,.1,.2,.3,.3,.5,0,.2,0,.4,0,.7v3.3h-.7v-3c0-.4,0-.7-.2-.9-.1-.2-.4-.3-.7-.3h-.4c0,0-.2,0-.4,.1,0,0-.2,.1-.3,.2,0,0-.1,.2-.2,.4h0v3.4h-.7v-3c0-.4,0-.7-.1-.9s-.4-.3-.7-.3h-.4c-.1,0-.2,0-.4,.1,0,0-.2,.1-.3,.3,0,.1-.1,.3-.2,.4v3.3h-.7v-4.7h.7v.7c.1-.3,.4-.4,.6-.6,.2,0,.5-.1,.8-.1s.7,0,.9,.2c.2,.1,.4,.3,.5,.6,0-.1,.1-.3,.3-.4,0,0,.2-.1,.4-.2,.1,0,.3,0,.4-.1s.3,0,.4,0h0Z" style="fill: #fff;"/>
<path d="M505.2,533.5c.4,0,.7,0,.9,.1s.4,.3,.6,.5,.2,.5,.3,.8c0,.3,0,.7,0,1s0,.7,0,.9c0,.3-.1,.6-.3,.8s-.4,.4-.6,.5c-.2,.1-.6,.2-.9,.2s-.8,0-1-.2c-.2-.1-.4-.4-.5-.7v2.6h-.7v-6.5h.7v.9c0-.3,.3-.5,.5-.7s.6-.3,1-.3h0Zm0,4.2c.3,0,.5,0,.7-.1s.3-.2,.4-.4c0-.1,.1-.4,.1-.6v-1.4c0-.2,0-.4-.1-.6,0-.1-.2-.3-.4-.4s-.4-.1-.7-.1-.5,0-.7,.1-.4,.2-.4,.4c-.1,.1-.2,.4-.2,.6v1.5c0,.2,.1,.4,.2,.6,.1,.1,.3,.3,.4,.4,.2,0,.4,.1,.7,.1Z" style="fill: #fff;"/>
<path d="M512.5,535.5v.5l-3.2,.2c0,.3,0,.5,0,.7,0,.2,.1,.4,.2,.4,.1,.1,.3,.2,.4,.3,.2,0,.4,0,.7,0s.5,0,.8,0,.5-.1,.7-.2v.7s-.1,0-.3,0c-.1,0-.2,0-.4,0h-.9c-.4,0-.7,0-.9-.1-.3,0-.5-.2-.7-.4-.2-.2-.4-.4-.4-.7s-.1-.7-.1-1.2,0-.9,.1-1.2c0-.3,.2-.6,.4-.7,.2-.2,.4-.3,.7-.4,.3,0,.6-.1,.9-.1s.7,0,.9,.1,.4,.3,.6,.4c.1,.2,.2,.4,.3,.7v.9Zm-.6,0v-.5c0-.1,0-.3-.1-.4s-.2-.2-.4-.3c-.1,0-.4-.1-.6-.1s-.5,0-.7,0c-.1,0-.3,.1-.4,.3,0,.1-.1,.3-.2,.5v.7l2.5-.2h0Z" style="fill: #fff;"/>
<path d="M516.3,533.5v.7h-.6c-.1,0-.3,0-.4,.1-.1,0-.2,.2-.4,.3,0,.1-.2,.3-.2,.5v3.1h-.7v-4.7h.7v.9c0-.2,.1-.4,.3-.5s.2-.2,.4-.3c.1,0,.3-.1,.4-.1h.5Z" style="fill: #fff;"/>
<path d="M519,533.5c.4,0,.7,0,.9,.1,.2,0,.4,.1,.6,.3s.2,.3,.3,.4c0,.1,0,.4,0,.6v3.4h-.7v-.7c-.1,.1-.3,.2-.4,.4s-.2,.2-.4,.2-.3,.1-.5,.1h-.5c-.6,0-.9-.1-1.2-.4s-.4-.6-.4-1,0-.5,.1-.7c0-.2,.2-.4,.4-.4,.1-.1,.4-.2,.6-.2s.5,0,.8,0h1.5v-.7c0-.1,0-.2-.1-.3s-.2-.1-.4-.2h-1.1c-.1,0-.4,0-.5,0v-.7h.9Zm-.5,4.2c.4,0,.7,0,1-.2s.5-.4,.6-.7v-.8h-1.9c-.1,0-.3,0-.4,.1s-.1,.1-.2,.3v.4c0,.3,0,.4,.2,.6s.4,.2,.7,.2h0Z" style="fill: #fff;"/>
<path d="M524.2,537.8h.5v.7h-1.2c-.1,0-.3-.1-.4-.2-.1-.1-.2-.3-.2-.4,0-.2,0-.4,0-.7v-2.7h-.7v-.7h.7v-1.1h.7v1.1h1.2v.7h-1.2v3.1c0,0,0,.2,0,.3s.1,.1,.2,.1h.4Z" style="fill: #fff;"/>
<path d="M529.7,533.6v4.7h-.7v-.7l-.4,.4c0,0-.2,.1-.4,.2-.1,0-.3,0-.4,.1h-.4c-.3,0-.6,0-.8-.1-.2,0-.4-.1-.5-.3s-.2-.3-.2-.5,0-.4,0-.7v-3.3h.7v3.5c0,.1,0,.3,.1,.4s.1,.1,.3,.2,.3,0,.4,0h.4c.1,0,.3,0,.4-.1s.2-.1,.3-.3c0-.1,.1-.3,.2-.5v-3.2h.9Z" style="fill: #fff;"/>
<path d="M533.8,533.5v.7h-.6c-.1,0-.3,0-.4,.1-.1,0-.2,.2-.4,.3,0,.1-.2,.3-.2,.5v3.1h-.7v-4.7h.7v.9c0-.2,.1-.4,.3-.5s.2-.2,.4-.3c.1,0,.3-.1,.4-.1h.5Z" style="fill: #fff;"/>
<path d="M538.6,535.5v.5l-3.2,.2c0,.3,0,.5,0,.7,0,.2,.1,.4,.2,.4,.1,.1,.3,.2,.4,.3,.2,0,.4,0,.7,0s.5,0,.8,0,.5-.1,.7-.2v.7s-.1,0-.3,0c-.1,0-.2,0-.4,0h-.9c-.4,0-.7,0-.9-.1-.3,0-.5-.2-.7-.4-.2-.2-.4-.4-.4-.7s-.1-.7-.1-1.2,0-.9,.1-1.2c0-.3,.2-.6,.4-.7,.2-.2,.4-.3,.7-.4,.3,0,.6-.1,.9-.1s.7,0,.9,.1,.4,.3,.6,.4c.1,.2,.2,.4,.3,.7v.9Zm-.6,0v-.5c0-.1,0-.3-.1-.4s-.2-.2-.4-.3c-.1,0-.4-.1-.6-.1s-.5,0-.7,0c-.1,0-.3,.1-.4,.3,0,.1-.1,.3-.2,.5v.7l2.5-.2h0Z" style="fill: #fff;"/>
</g>
<g>
<path d="M450.3,548.9h.5l1.5,5.4h0l1.7-5.4h.7l1.8,5.4h0l1.5-5.4h.5l-1.7,6h-.6l-1.8-5.5h0l-1.8,5.5h-.6l-1.7-6h0Z" style="fill: #fff;"/>
<path d="M458.9,548.9h.5l1.5,5.4h0l1.7-5.4h.7l1.8,5.4h0l1.5-5.4h.5l-1.7,6h-.6l-1.8-5.5h0l-1.8,5.5h-.6l-1.7-6h0Z" style="fill: #fff;"/>
<path d="M467.4,548.9h.5l1.5,5.4h0l1.7-5.4h.7l1.8,5.4h0l1.5-5.4h.5l-1.7,6h-.6l-1.8-5.5h0l-1.8,5.5h-.6l-1.7-6h0Z" style="fill: #fff;"/>
<path d="M476.5,555c-.1,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.4c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M483.6,548.9v5.5c0,.8-.2,1.5-.7,1.9-.4,.4-1.2,.7-2,.7s-.5,0-.7,0-.4,0-.6,0v-.5c.2,0,.4,0,.7,.1h.7c.8,0,1.3-.2,1.7-.6s.5-.9,.5-1.7v-.8c-.1,.4-.4,.7-.7,.9s-.8,.4-1.5,.4-.8,0-1.1-.2c-.3-.1-.5-.3-.7-.6-.1-.2-.3-.6-.4-.9s-.1-.8-.1-1.3,0-.9,.1-1.2c0-.4,.2-.7,.4-.9,.1-.3,.4-.4,.7-.6s.7-.2,1.1-.2,.6,0,.9,0c.2,0,.4,.1,.6,.3l.4,.4c.1,.1,.2,.4,.3,.6v-1.2h.4Zm-2.6,5.5c.4,0,.7,0,1-.2s.5-.3,.7-.5,.3-.5,.4-.8,0-.7,0-1,0-.7,0-1c0-.3-.1-.6-.4-.8s-.4-.4-.7-.5-.6-.2-1-.2-.7,0-.9,.1-.4,.3-.6,.5-.2,.5-.3,.8c0,.3,0,.7,0,1.1s0,.8,0,1.1c0,.3,.1,.6,.3,.8s.4,.4,.6,.5,.6,.1,.9,.1Z" style="fill: #fff;"/>
<path d="M490,551.3v.6l-4.2,.3c0,.4,0,.8,.1,1.1,0,.3,.2,.6,.4,.7,.1,.2,.4,.4,.7,.4s.6,.1,1,.1,.7,0,.9,0c.4,0,.7-.1,.9-.3v.5c0,0-.2,0-.4,.1-.1,0-.3,0-.4,.1-.1,0-.4,0-.5,0h-.6c-.4,0-.9,0-1.2-.1-.4,0-.6-.3-.8-.5s-.4-.6-.4-.9-.1-.9-.1-1.5,0-1.1,.1-1.5,.2-.7,.4-.9,.4-.4,.8-.5c.3,0,.7-.1,1.2-.1s.9,0,1.2,.2c.3,.1,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9h0Zm-.5,0v-.9c0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.4s-.5-.1-.9-.1-.7,0-.9,.1c-.3,0-.4,.2-.6,.4s-.3,.4-.4,.7c0,.3,0,.7-.1,1.1l3.7-.3h0Z" style="fill: #fff;"/>
<path d="M496.1,551.3v.6l-4.2,.3c0,.4,0,.8,.1,1.1,0,.3,.2,.6,.4,.7,.1,.2,.4,.4,.7,.4s.6,.1,1,.1,.7,0,.9,0c.4,0,.7-.1,.9-.3v.5c0,0-.2,0-.4,.1-.1,0-.3,0-.4,.1-.1,0-.4,0-.5,0h-.6c-.4,0-.9,0-1.2-.1-.4,0-.6-.3-.8-.5s-.4-.6-.4-.9-.1-.9-.1-1.5,0-1.1,.1-1.5,.2-.7,.4-.9,.4-.4,.8-.5c.3,0,.7-.1,1.2-.1s.9,0,1.2,.2c.3,.1,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9h0Zm-.5,0v-.9c0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.4s-.5-.1-.9-.1-.7,0-.9,.1c-.3,0-.4,.2-.6,.4s-.3,.4-.4,.7c0,.3,0,.7-.1,1.1l3.7-.3h0Z" style="fill: #fff;"/>
<path d="M502.2,551.3v.6l-4.2,.3c0,.4,0,.8,.1,1.1,0,.3,.2,.6,.4,.7,.1,.2,.4,.4,.7,.4s.6,.1,1,.1,.7,0,.9,0c.4,0,.7-.1,.9-.3v.5c0,0-.2,0-.4,.1-.1,0-.3,0-.4,.1-.1,0-.4,0-.5,0h-.6c-.4,0-.9,0-1.2-.1-.4,0-.6-.3-.8-.5s-.4-.6-.4-.9-.1-.9-.1-1.5,0-1.1,.1-1.5,.2-.7,.4-.9,.4-.4,.8-.5c.3,0,.7-.1,1.2-.1s.9,0,1.2,.2c.3,.1,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9h0Zm-.5,0v-.9c0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.4s-.5-.1-.9-.1-.7,0-.9,.1c-.3,0-.4,.2-.6,.4s-.3,.4-.4,.7c0,.3,0,.7-.1,1.1l3.7-.3h0Z" style="fill: #fff;"/>
<path d="M505.5,554.5h.8v.4h-1.5c-.2,0-.4-.1-.4-.3-.1-.1-.2-.3-.2-.6s0-.6,0-.9v-3.7h-.9v-.4h.9v-1.4h.5v1.4h1.7v.4h-1.7v4.4c0,.1,0,.3,.1,.4s.1,.1,.3,.2h.4Z" style="fill: #fff;"/>
<path d="M511.7,551.3v.6l-4.2,.3c0,.4,0,.8,.1,1.1,0,.3,.2,.6,.4,.7,.1,.2,.4,.4,.7,.4s.6,.1,1,.1,.7,0,.9,0c.4,0,.7-.1,.9-.3v.5c0,0-.2,0-.4,.1-.1,0-.3,0-.4,.1-.1,0-.4,0-.5,0h-.6c-.4,0-.9,0-1.2-.1-.4,0-.6-.3-.8-.5s-.4-.6-.4-.9-.1-.9-.1-1.5,0-1.1,.1-1.5,.2-.7,.4-.9,.4-.4,.8-.5c.3,0,.7-.1,1.2-.1s.9,0,1.2,.2c.3,.1,.5,.4,.7,.6s.2,.5,.3,.8,0,.6,0,.9h0Zm-.5,0v-.9c0-.3-.1-.5-.2-.7-.1-.2-.3-.4-.5-.4s-.5-.1-.9-.1-.7,0-.9,.1c-.3,0-.4,.2-.6,.4s-.3,.4-.4,.7c0,.3,0,.7-.1,1.1l3.7-.3h0Z" style="fill: #fff;"/>
<path d="M515.5,555c-.4,0-.8,0-1.2-.1-.3,0-.6-.3-.8-.5s-.4-.6-.4-.9-.1-.9-.1-1.5,0-1.1,.1-1.5c0-.4,.2-.7,.4-.9s.4-.4,.8-.5c.3,0,.7-.1,1.2-.1h.9c.2,0,.5,0,.7,.1v.5c-.2,0-.4-.1-.7-.1h-.8c-.3,0-.7,0-.9,.1-.2,0-.4,.2-.6,.4s-.3,.4-.4,.8c0,.4,0,.7,0,1.2s0,.9,0,1.2c0,.4,.1,.6,.4,.8,.1,.2,.4,.4,.6,.4s.6,.1,.9,.1,.6,0,.9,0c.2,0,.5-.1,.7-.2v.5c-.1,0-.4,.1-.7,.2-.3,0-.6,0-.9,0h0Z" style="fill: #fff;"/>
<path d="M521.1,548.8c.4,0,.7,0,.9,.1,.2,0,.4,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.5,0,.8v4.2h-.5v-4.7c0-.2-.1-.4-.2-.5-.1-.1-.3-.2-.4-.3s-.4,0-.7,0h-.6c-.2,0-.4,0-.6,.2s-.4,.2-.5,.4-.2,.4-.3,.7v4.2h-.5v-8.4h.5v3.4c0-.2,.1-.4,.3-.5s.3-.3,.5-.4,.4-.1,.6-.2,.4,0,.7,0h0Z" style="fill: #fff;"/>
<path d="M525.4,555c-.1,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.4,0-.4c0,0,.2,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.4,0,.4c0,0-.2,0-.4,0Z" style="fill: #fff;"/>
<path d="M529.5,555c-.4,0-.8,0-1.2-.1-.3,0-.6-.3-.8-.5s-.4-.6-.4-.9-.1-.9-.1-1.5,0-1.1,.1-1.5c0-.4,.2-.7,.4-.9s.4-.4,.8-.5c.3,0,.7-.1,1.2-.1h.9c.2,0,.5,0,.7,.1v.5c-.2,0-.4-.1-.7-.1h-.8c-.3,0-.7,0-.9,.1-.2,0-.4,.2-.6,.4s-.3,.4-.4,.8c0,.4,0,.7,0,1.2s0,.9,0,1.2c0,.4,.1,.6,.4,.8,.1,.2,.4,.4,.6,.4s.6,.1,.9,.1,.6,0,.9,0c.2,0,.5-.1,.7-.2v.5c-.1,0-.4,.1-.7,.2-.3,0-.6,0-.9,0h0Z" style="fill: #fff;"/>
<path d="M534.8,555c-.4,0-.9,0-1.2-.1-.3,0-.6-.3-.8-.5s-.4-.6-.4-.9-.1-.9-.1-1.5,0-1.1,.1-1.5c0-.4,.2-.7,.4-.9s.4-.4,.8-.5,.7-.1,1.2-.1,.8,0,1.2,.1c.3,0,.6,.3,.8,.5s.4,.6,.4,.9,.1,.9,.1,1.5,0,1.1-.1,1.5c0,.4-.2,.7-.4,.9s-.5,.4-.8,.5c-.3,0-.7,.1-1.2,.1Zm0-.4c.4,0,.7,0,1-.1,.3,0,.4-.2,.7-.4,.1-.2,.3-.5,.4-.8s0-.7,0-1.2,0-.9,0-1.2-.1-.6-.4-.8-.4-.4-.7-.4-.6-.1-.9-.1-.7,0-.9,.1c-.3,0-.4,.2-.7,.4-.1,.2-.3,.5-.3,.8s0,.7,0,1.2,0,.9,0,1.2c0,.4,.1,.6,.3,.8s.4,.4,.7,.4,.6,.1,.9,.1h0Z" style="fill: #fff;"/>
<path d="M545.1,548.8c.4,0,.7,0,.9,.1,.2,0,.4,.2,.6,.4s.2,.4,.3,.6c0,.2,0,.5,0,.8v4.2h-.5v-4.7c0-.2,0-.4-.2-.5,0-.1-.2-.2-.4-.3-.1,0-.4,0-.7,0h-.6c-.2,0-.4,0-.5,.2-.1,0-.3,.2-.4,.4-.1,.2-.2,.4-.3,.7h0v4.2h-.5v-4.7c0-.2,0-.4-.2-.5,0-.1-.2-.2-.4-.3s-.4,0-.7,0h-.6c-.2,0-.4,0-.5,.2-.1,0-.3,.2-.4,.4-.1,.1-.2,.4-.3,.7v4.2h-.5v-6h.5v1c0-.2,.1-.4,.3-.5s.3-.2,.4-.4c.1,0,.4-.1,.5-.2s.4,0,.6,0c.5,0,.9,0,1.2,.3,.3,.2,.4,.5,.5,.9,0-.2,.1-.4,.3-.5s.3-.3,.4-.4,.4-.1,.6-.2,.4,0,.7,0h0Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M14.6,548.8c-.3,0-.5,0-.5,0h0c-.2,0-.4-.1-.7-.2l-1.2-.4c-.2,0-.5-.3-.9-.5l-.8-.7c-.7-.7-1.3-1.7-1.7-3-.3-1.1-.5-2.5-.5-4.1s.3-3.2,.8-4.4c.6-1.5,1.6-2.7,3.1-3.5,.4-.2,1-.4,1.7-.5,.7,0,3.7-.1,9.2-.1v3.1h-7.2c-1.4,0-2.4,.6-3,1.7-.5,.9-.7,2.1-.7,3.5v1.8c0,.3,.1,.5,.1,.6h0c0,.3,0,.6,.1,.8,.2,.9,.5,1.6,1.1,2.1,.6,.5,2.6,.8,6.2,.8v-4.1h-4.5v-3.1h7.9v10.4H14.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M32.2,548.8h-1.4c0,0-.5,0-.5,0-.1,0-.3,0-.4,0-.1,0-.2,0-.2,0,0,0-.2,0-.2,0-1.6-.4-2.8-1.5-3.6-3.1-.4-.7-.6-1.4-.8-2.2-.2-.7-.3-1.5-.3-2.4,0-1.6,.1-3,.4-4.1,.2-1.1,.6-2.1,1.2-3,.6-1,1.5-1.6,2.4-2,.4-.2,1-.3,1.7-.5,.6,0,3.1-.1,7.4-.1v3.1h-5.5c-2.5,0-3.8,1.4-3.8,4.1h9.3v3.1h-9.3c0,.7,0,1.3,.2,1.8,0,.3,.1,.5,.2,.7,0,.2,.2,.4,.4,.6l.6,.6c.2,.2,.4,.3,.7,.4,.3,0,.6,.1,.8,.1h6.4v3.1h-5.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M47.2,548.8h-1.4c0,0-.5,0-.5,0-.1,0-.3,0-.4,0-.1,0-.2,0-.2,0,0,0-.2,0-.2,0-1.6-.4-2.8-1.5-3.6-3.1-.4-.7-.6-1.4-.8-2.2-.2-.7-.3-1.5-.3-2.4,0-1.6,.1-3,.4-4.1,.2-1.1,.6-2.1,1.2-3,.6-1,1.5-1.6,2.4-2,.4-.2,1-.3,1.7-.5,.6,0,3.1-.1,7.4-.1v3.1h-5.5c-2.5,0-3.8,1.4-3.8,4.1h9.3v3.1h-9.3c0,.7,0,1.3,.2,1.8,0,.3,.1,.5,.2,.7,0,.2,.2,.4,.4,.6l.6,.6c.2,.2,.4,.3,.7,.4,.3,0,.6,.1,.8,.1h6.4v3.1h-5.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M62.1,548.8h-1.4c0,0-.5,0-.5,0-.1,0-.3,0-.4,0-.1,0-.2,0-.2,0,0,0-.2,0-.2,0-1.6-.4-2.8-1.5-3.6-3.1-.4-.7-.6-1.4-.8-2.2-.2-.7-.3-1.5-.3-2.4,0-1.6,.1-3,.4-4.1,.2-1.1,.6-2.1,1.2-3,.6-1,1.5-1.6,2.4-2,.4-.2,1-.3,1.7-.5,.6,0,3.1-.1,7.4-.1v3.1h-5.5c-2.5,0-3.8,1.4-3.8,4.1h9.3v3.1h-9.3c0,.7,0,1.3,.2,1.8,0,.3,.1,.5,.2,.7,0,.2,.2,.4,.4,.6l.6,.6c.2,.2,.4,.3,.7,.4,.3,0,.6,.1,.8,.1h6.4v3.1h-5.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="77.6 534.3 77.6 548.8 74.2 548.8 74.2 534.3 69.1 534.3 69.1 531.2 82.8 531.2 82.8 534.3 77.6 534.3" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M90.8,548.8h-1.4c0,0-.5,0-.5,0-.1,0-.3,0-.4,0-.1,0-.2,0-.2,0,0,0-.2,0-.2,0-1.6-.4-2.8-1.5-3.6-3.1-.4-.7-.6-1.4-.8-2.2-.2-.7-.3-1.5-.3-2.4,0-1.6,.1-3,.4-4.1,.2-1.1,.6-2.1,1.2-3,.6-1,1.5-1.6,2.4-2,.4-.2,1-.3,1.7-.5,.6,0,3.1-.1,7.4-.1v3.1h-5.5c-2.5,0-3.8,1.4-3.8,4.1h9.3v3.1h-9.3c0,.7,0,1.3,.2,1.8,0,.3,.1,.5,.2,.7,0,.2,.2,.4,.4,.6l.6,.6c.2,.2,.4,.3,.7,.4,.3,0,.6,.1,.8,.1h6.4v3.1h-5.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M105.8,548.8h-1.4c0,0-.5,0-.5,0-.1,0-.3,0-.4,0-.1,0-.2,0-.2,0,0,0-.2,0-.2,0-1.6-.4-2.8-1.5-3.6-3.1-.7-1.4-1.1-2.9-1.1-4.5s.1-3,.4-4.1c.2-1.1,.6-2.1,1.2-3,.6-1,1.5-1.6,2.4-2,.6-.2,1.1-.4,1.7-.5,.6,0,3.1-.1,7.4-.1v3h-5.5c-1.1,0-1.9,.3-2.5,1-.5,.6-.9,1.3-1.1,2.3-.2,1-.3,2-.3,3.1s.1,2.2,.4,3c.4,1.1,1,1.8,1.9,2h.4c0,0,.4,.1,.4,.1h6.4v3.1h-5.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="123.4 548.8 123.4 541.4 117.2 541.4 117.2 548.8 113.9 548.8 113.9 531.2 117.2 531.2 117.2 538.3 123.4 538.3 123.4 531.2 126.7 531.2 126.7 548.8 123.4 548.8" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="564.1" height="564.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="135.7" y1="538.7" x2="431.2" y2="538.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="511.8" x2="565.5" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="484.9" x2="565.5" y2="484.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="458.1" x2="565.5" y2="458.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="431.2" x2="565.5" y2="431.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="404.3" x2="565.5" y2="404.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="377.5" x2="565.5" y2="377.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="350.6" x2="565.5" y2="350.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="323.8" x2="565.5" y2="323.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="296.9" x2="565.5" y2="296.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="270" x2="565.5" y2="270" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="243.2" x2="565.5" y2="243.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="216.3" x2="565.5" y2="216.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="189.4" x2="565.5" y2="189.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="162.6" x2="565.5" y2="162.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="135.7" x2="565.5" y2="135.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="108.9" x2="565.5" y2="108.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="82" x2="565.5" y2="82" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="55.1" x2="565.5" y2="55.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="28.3" x2="565.5" y2="28.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="538.7" y1="1.4" x2="538.7" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="511.8" y1="1.4" x2="511.8" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="484.9" y1="1.4" x2="484.9" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="458.1" y1="1.4" x2="458.1" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="431.2" y1="1.4" x2="431.2" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="404.3" y1="1.4" x2="404.3" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="377.5" y1="1.4" x2="377.5" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="350.6" y1="1.4" x2="350.6" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="323.8" y1="1.4" x2="323.8" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="296.9" y1="1.4" x2="296.9" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="270" y1="1.4" x2="270" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="243.2" y1="1.4" x2="243.2" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="216.3" y1="1.4" x2="216.3" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="189.4" y1="1.4" x2="189.4" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="162.6" y1="1.4" x2="162.6" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="135.7" y1="1.4" x2="135.7" y2="565.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="108.9" y1="1.4" x2="108.9" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="82" y1="1.4" x2="82" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="55.1" y1="1.4" x2="55.1" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="28.3" y1="1.4" x2="28.3" y2="511.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

View File

@ -0,0 +1,110 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="220mm" height="220mm" viewBox="0 0 623.6 623.6">
<g>
<rect x="501.8" y="570.2" width="105.6" height="33.3" style="fill: none;"/>
<g>
<path d="M534.9,596.6h0l-12.3-21.2c0-.3-.3-.3-.6-.3s-.5,.2-.6,.3l-12.3,21.2c0,.3,0,.5,0,.7,0,.3,.3,.3,.6,.3h24.5c.3,0,.5-.2,.6-.3,0-.3,0-.5,0-.7h0Zm-23.9-.3l11-19,11,19h-22Z" style="fill: #fff;"/>
<rect x="516.7" y="593.9" width="10.8" height="1.1" style="fill: #fff;"/>
<path d="M520,593.1l-.6-.4c1.1-1.6,.5-2.5,0-3.6-.7-1.1-1.4-2.5,0-4.4l.6,.4c-1.1,1.5-.6,2.5,0,3.6,.7,1.1,1.4,2.5,0,4.4h0Z" style="fill: #fff;"/>
<path d="M522.6,593.1l-.6-.4c1.1-1.6,.5-2.5,0-3.6-.7-1.1-1.4-2.5,0-4.3l.6,.4c-1.1,1.5-.6,2.5,0,3.6,.7,1.1,1.4,2.5,0,4.3h0Z" style="fill: #fff;"/>
<path d="M525.2,593.1l-.6-.4c1.1-1.6,.6-2.5,0-3.6-.7-1.2-1.4-2.5,0-4.4l.6,.4c-1.1,1.6-.6,2.5,0,3.6,.7,1.2,1.4,2.5,0,4.4Z" style="fill: #fff;"/>
</g>
<g>
<path d="M541.3,584.3c-.5,0-.9,0-1.4-.2-.4,0-.8-.3-1-.6-.3-.3-.5-.7-.7-1.1-.2-.5-.3-1.1-.3-1.9s0-1.3,.3-1.7c.2-.5,.3-.8,.7-1.1,.3-.3,.6-.5,1-.6,.4,0,.8-.2,1.4-.2h.8c.3,0,.5,0,.7,.2v.8c-.2,0-.4-.2-.7-.2h-.8c-.3,0-.8,0-1,.2-.3,0-.5,.3-.8,.5-.2,.3-.3,.5-.4,.8s-.2,.8-.2,1.4,0,1,.2,1.4c0,.3,.3,.7,.4,.8s.4,.3,.7,.4,.6,.2,1,.2h.8c.3,0,.5,0,.8-.2v.8c-.2,0-.4,.2-.8,.3-.3,0-.6,0-1,0l.3-.2Z" style="fill: #fff;"/>
<path d="M546.5,578.6c.4,0,.8,0,1.1,.2,.3,0,.5,.2,.7,.3s.3,.3,.3,.5c0,.2,0,.4,0,.7v3.9h-.8l-.2-.8c0,.2-.2,.3-.3,.4s-.3,.3-.4,.3-.3,.2-.6,.2h-.6c-.7,0-1.1-.2-1.4-.4s-.4-.7-.4-1.2,0-.6,.2-.8c0-.3,.3-.4,.4-.5,.2-.2,.4-.3,.7-.3s.6,0,.9,0h1.7v-.8c0-.2,0-.3-.2-.3s-.3-.2-.4-.3h-1.3c-.2,0-.4,0-.6,0v-.8h1.2v-.2Zm-.7,5c.4,0,.8,0,1.2-.3s.6-.4,.7-.8v-.9h-2.2c-.2,0-.3,0-.4,.2s-.2,.2-.3,.3v.5c0,.3,0,.5,.3,.7s.4,.3,.8,.3h0Z" style="fill: #fff;"/>
<path d="M555,578.7v5.5h-.8v-.8l-.4,.4c0,0-.3,.2-.4,.3-.2,0-.3,0-.5,.2h-.5c-.3,0-.7,0-.9-.2-.3,0-.4-.2-.6-.3s-.3-.3-.3-.6,0-.4,0-.8v-3.8h.8v4.1c0,.2,0,.3,.2,.4s.2,.2,.3,.3,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.3-.2,.3-.3c0-.2,.2-.3,.3-.6v-3.7h1.1Z" style="fill: #fff;"/>
<path d="M558.6,583.5h.6v.8h-1.4c-.2,0-.3-.2-.5-.3-.2-.2-.3-.3-.3-.5,0-.3,0-.5,0-.8v-3.1h-.8v-.8h.8v-1.3h.8v1.3h1.4v.8h-1.4v3.6c0,0,0,.3,0,.3s.2,.2,.3,.2h.5Z" style="fill: #fff;"/>
<path d="M560.8,577.7c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.3,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.3,0-.4,0Zm-.4,1h.8v5.5h-.8v-5.5Z" style="fill: #fff;"/>
<path d="M565.3,584.3c-.4,0-.8,0-1.1-.2-.3,0-.6-.3-.8-.5-.3-.3-.4-.5-.5-.8s-.2-.8-.2-1.4,0-1,.2-1.4c0-.3,.3-.7,.5-.8,.3-.3,.5-.3,.8-.5,.3,0,.7-.2,1.1-.2s.8,0,1.1,.2c.3,0,.6,.3,.8,.5,.3,.3,.3,.5,.5,.8,0,.3,.2,.8,.2,1.4s0,1-.2,1.4c0,.3-.3,.7-.5,.8-.3,.3-.5,.3-.8,.5-.3,0-.7,.2-1.1,.2Zm0-.8c.3,0,.6,0,.8,0s.3-.2,.5-.3c0-.2,.2-.3,.3-.7s0-.6,0-1v-1c0-.3-.2-.5-.3-.7s-.3-.3-.5-.3c-.2,0-.4,0-.8,0s-.6,0-.8,0c-.2,0-.3,.2-.5,.3,0,.2-.3,.4-.3,.7v2c0,.3,.2,.5,.3,.7,.2,.2,.3,.3,.5,.3s.4,0,.8,0Z" style="fill: #fff;"/>
<path d="M572,578.6c.3,0,.7,0,.9,.2,.3,0,.4,.3,.6,.3,.2,.2,.3,.3,.3,.6,0,.3,0,.4,0,.8v3.8h-.8v-4.1c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.3s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.3,.2-.4,.3-.3,.3-.3,.6v3.7h-.8v-5.5h.8v.8c0-.2,.2-.3,.3-.4s.3-.2,.4-.3,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M583.7,577.1v7.1h-.9v-3.5h-3.5v3.5h-.9v-7.1h.9v2.9h3.5v-2.9h.9Z" style="fill: #fff;"/>
<path d="M586,577.7c-.2,0-.3,0-.4,0,0,0,0-.2,0-.4s0-.3,0-.4c0,0,.3,0,.4,0s.3,0,.4,0c0,0,0,.2,0,.4s0,.3,0,.4c0,0-.3,0-.4,0Zm-.4,1h.8v5.5h-.8v-5.5Z" style="fill: #fff;"/>
<path d="M592.9,578.7v5.2c0,.8-.3,1.4-.7,1.8s-1.1,.7-2,.7-.5,0-.7,0c-.3,0-.4,0-.6,0v-.8c.4,0,.8,0,1.4,0s1.1-.2,1.4-.4,.4-.8,.4-1.4v-.6c0,.3-.3,.6-.6,.8s-.7,.3-1.2,.3-.8,0-1.1-.2-.5-.3-.7-.6-.3-.5-.3-.8c0-.3,0-.8,0-1.2s0-.8,0-1.1c0-.3,.2-.7,.3-.9s.4-.4,.7-.6,.7-.3,1.1-.3,.5,0,.8,0c.2,0,.3,.2,.5,.3,.2,0,.3,.3,.3,.3,0,.2,.2,.3,.3,.4v-1h.8Zm-2.5,4.8c.3,0,.6,0,.8-.2,.3,0,.4-.3,.5-.4s.3-.4,.3-.7v-1.7c0-.3-.2-.5-.3-.7s-.3-.3-.5-.4-.5-.2-.8-.2-.6,0-.8,.2c-.2,0-.3,.3-.4,.4s-.2,.4-.2,.7v1.6c0,.3,0,.5,.2,.7,0,.2,.3,.3,.4,.4s.4,.2,.8,.2h0Z" style="fill: #fff;"/>
<path d="M597.4,578.6c.3,0,.7,0,.9,.2,.3,0,.4,.3,.6,.3,.2,.2,.3,.3,.3,.6,0,.3,0,.4,0,.8v3.8h-.8v-4.1c0-.2,0-.3-.2-.4,0,0-.2-.2-.3-.3s-.3,0-.5,0h-.5c-.2,0-.3,0-.5,.2s-.3,.2-.4,.3-.3,.3-.3,.6v3.7h-.8v-7.8h.8v3c0-.2,.2-.3,.3-.4s.3-.2,.4-.3,.3,0,.5-.2,.3,0,.5,0h-.2Z" style="fill: #fff;"/>
<path d="M542.6,590.2h-2v6.3h-.9v-6.3h-2v-.8h5.1v.8h0Z" style="fill: #fff;"/>
<path d="M547.7,593.1v.6l-3.7,.3c0,.3,0,.6,0,.8,0,.3,.2,.4,.3,.5,.2,.2,.3,.3,.5,.3,.3,0,.5,0,.8,0s.6,0,.9,0,.6-.2,.8-.3v.8s-.2,0-.3,0c-.2,0-.3,0-.4,0h-1.1c-.4,0-.8,0-1.1-.2-.3,0-.6-.3-.8-.5-.3-.3-.4-.5-.5-.8s-.2-.8-.2-1.4,0-1,.2-1.4c0-.3,.3-.7,.5-.8,.3-.3,.5-.3,.8-.5,.3,0,.7-.2,1-.2s.8,0,1.1,.2,.5,.3,.7,.5c.2,.3,.3,.5,.3,.8v.8l.2,.3Zm-.8,0v-.6c0-.2,0-.3-.2-.5s-.3-.3-.4-.3c-.2,0-.4-.2-.7-.2s-.6,0-.8,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.3,.6v.8l2.9-.3h0Z" style="fill: #fff;"/>
<path d="M555.3,590.8c.3,0,.6,0,.8,.2,.3,0,.4,.3,.6,.3,.2,.2,.3,.3,.3,.6,0,.3,0,.4,0,.8v3.8h-.8v-3.5c0-.4,0-.8-.3-1-.2-.3-.4-.3-.8-.3h-.4c0,0-.3,0-.4,.2,0,0-.3,.2-.3,.3,0,0-.2,.3-.3,.5h0v3.9h-.8v-3.5c0-.4,0-.8-.2-1s-.4-.3-.8-.3h-.5c-.2,0-.3,0-.4,.2,0,0-.3,.2-.3,.3,0,.2-.2,.3-.3,.5v3.8h-.8v-5.5h.8v.8c.2-.3,.4-.5,.7-.7,.3,0,.6-.2,.9-.2s.8,0,1,.3c.3,.2,.4,.3,.6,.7,0-.2,.2-.3,.3-.4,0,0,.3-.2,.4-.3,.2,0,.3,0,.5-.2s.3,0,.5,0v-.2Z" style="fill: #fff;"/>
<path d="M561.8,590.8c.4,0,.8,0,1.1,.2s.5,.3,.7,.6,.3,.6,.3,.9c0,.3,0,.8,0,1.2s0,.8,0,1.1c0,.3-.2,.7-.3,.9s-.4,.5-.7,.6c-.3,.2-.7,.3-1.1,.3s-.9,0-1.2-.3c-.3-.2-.4-.4-.6-.8v3h-.8v-7.5h.8v1c0-.3,.3-.6,.6-.8s.7-.3,1.2-.3h0Zm0,4.9c.3,0,.6,0,.8-.2s.3-.3,.4-.5c0-.2,.2-.4,.2-.7v-1.6c0-.3,0-.5-.2-.7,0-.2-.3-.3-.4-.4s-.4-.2-.8-.2-.6,0-.8,.2-.4,.3-.5,.4c-.2,.2-.3,.4-.3,.7v1.7c0,.3,.2,.5,.3,.7,.2,.2,.3,.3,.5,.4,.3,0,.5,.2,.8,.2Z" style="fill: #fff;"/>
<path d="M570.2,593.1v.6l-3.7,.3c0,.3,0,.6,0,.8,0,.3,.2,.4,.3,.5,.2,.2,.3,.3,.5,.3,.3,0,.5,0,.8,0s.6,0,.9,0,.6-.2,.8-.3v.8s-.2,0-.3,0c-.2,0-.3,0-.4,0h-1.1c-.4,0-.8,0-1.1-.2-.3,0-.6-.3-.8-.5-.3-.3-.4-.5-.5-.8s-.2-.8-.2-1.4,0-1,.2-1.4c0-.3,.3-.7,.5-.8,.3-.3,.5-.3,.8-.5,.3,0,.7-.2,1-.2s.8,0,1.1,.2,.5,.3,.7,.5c.2,.3,.3,.5,.3,.8v.8l.2,.3Zm-.8,0v-.6c0-.2,0-.3-.2-.5s-.3-.3-.4-.3c-.2,0-.4-.2-.7-.2s-.6,0-.8,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.3,.6v.8l2.9-.3h0Z" style="fill: #fff;"/>
<path d="M574.7,590.8v.8h-.7c-.2,0-.3,0-.5,.2-.2,0-.3,.3-.4,.3,0,.2-.3,.3-.3,.6v3.6h-.8v-5.5h.8v1c0-.3,.2-.4,.3-.6s.3-.3,.4-.3c.2,0,.3-.2,.5-.2h.6Z" style="fill: #fff;"/>
<path d="M577.9,590.8c.4,0,.8,0,1.1,.2,.3,0,.5,.2,.7,.3s.3,.3,.3,.5c0,.2,0,.4,0,.7v3.9h-.8l-.2-.8c0,.2-.2,.3-.3,.4s-.3,.3-.4,.3-.3,.2-.6,.2h-.6c-.7,0-1.1-.2-1.4-.4s-.4-.7-.4-1.2,0-.6,.2-.8c0-.3,.3-.4,.4-.5,.2-.2,.4-.3,.7-.3s.6,0,.9,0h1.7v-.8c0-.2,0-.3-.2-.3s-.3-.2-.4-.3h-1.3c-.2,0-.4,0-.6,0v-.8h1.2v-.2Zm-.7,5c.4,0,.8,0,1.2-.3s.6-.4,.7-.8v-.9h-2.2c-.2,0-.3,0-.4,.2s-.2,.2-.3,.3v.5c0,.3,0,.5,.3,.7s.4,.3,.8,.3h0Z" style="fill: #fff;"/>
<path d="M583.9,595.8h.6v.8h-1.4c-.2,0-.3-.2-.5-.3-.2-.2-.3-.3-.3-.5,0-.3,0-.5,0-.8v-3.1h-.8v-.8h.8v-1.3h.8v1.3h1.4v.8h-1.4v3.6c0,0,0,.3,0,.3s.2,.2,.3,.2h.5Z" style="fill: #fff;"/>
<path d="M590.2,590.9v5.5h-.8v-.8l-.4,.4c0,0-.3,.2-.4,.3-.2,0-.3,0-.5,.2h-.5c-.3,0-.7,0-.9-.2-.3,0-.4-.2-.6-.3s-.3-.3-.3-.6,0-.4,0-.8v-3.8h.8v4.1c0,.2,0,.3,.2,.4s.2,.2,.3,.3,.3,0,.5,0h.5c.2,0,.3,0,.4-.2s.3-.2,.3-.3c0-.2,.2-.3,.3-.6v-3.7h1.1Z" style="fill: #fff;"/>
<path d="M595,590.8v.8h-.7c-.2,0-.3,0-.5,.2-.2,0-.3,.3-.4,.3,0,.2-.3,.3-.3,.6v3.6h-.8v-5.5h.8v1c0-.3,.2-.4,.3-.6s.3-.3,.4-.3c.2,0,.3-.2,.5-.2h.6Z" style="fill: #fff;"/>
<path d="M600.6,593.1v.6l-3.7,.3c0,.3,0,.6,0,.8,0,.3,.2,.4,.3,.5,.2,.2,.3,.3,.5,.3,.3,0,.5,0,.8,0s.6,0,.9,0,.6-.2,.8-.3v.8s-.2,0-.3,0c-.2,0-.3,0-.4,0h-1.1c-.4,0-.8,0-1.1-.2-.3,0-.6-.3-.8-.5-.3-.3-.4-.5-.5-.8s-.2-.8-.2-1.4,0-1,.2-1.4c0-.3,.3-.7,.5-.8,.3-.3,.5-.3,.8-.5,.3,0,.7-.2,1-.2s.8,0,1.1,.2,.5,.3,.7,.5c.2,.3,.3,.5,.3,.8v.8l.2,.3Zm-.8,0v-.6c0-.2,0-.3-.2-.5s-.3-.3-.4-.3c-.2,0-.4-.2-.7-.2s-.6,0-.8,0c-.2,0-.3,.2-.5,.3,0,.2-.2,.3-.3,.6v.8l2.9-.3h0Z" style="fill: #fff;"/>
</g>
<g>
<path d="M498,608.7h.6l1.7,6.3h0l2-6.3h.8l2.1,6.3h0l1.7-6.3h.6l-1.9,6.9h-.7l-2.1-6.3h0l-2.1,6.3h-.7l-1.9-6.9h0Z" style="fill: #fff;"/>
<path d="M508,608.7h.6l1.7,6.3h0l2-6.3h.8l2.1,6.3h0l1.7-6.3h.6l-1.9,6.9h-.7l-2.1-6.3h0l-2.1,6.3h-.7l-1.9-6.9h0Z" style="fill: #fff;"/>
<path d="M517.9,608.7h.6l1.7,6.3h0l2-6.3h.8l2.1,6.3h0l1.7-6.3h.6l-1.9,6.9h-.7l-2.1-6.3h0l-2.1,6.3h-.7l-1.9-6.9h0Z" style="fill: #fff;"/>
<path d="M528.5,615.7c-.2,0-.3,0-.4,0,0,0,0-.3,0-.5s0-.4,0-.4c0,0,.3,0,.4,0s.3,0,.4,0c0,0,0,.3,0,.4s0,.4,0,.5c0,0-.3,0-.4,0Z" style="fill: #fff;"/>
<path d="M536.7,608.7v6.4c0,.9-.3,1.7-.8,2.2-.5,.5-1.4,.8-2.4,.8s-.6,0-.8,0-.5,0-.7,0v-.6c.3,0,.5,0,.8,.2h.8c.9,0,1.5-.3,1.9-.7s.6-1.1,.6-1.9v-.9c-.2,.5-.4,.8-.8,1.1s-.9,.4-1.7,.4-.9,0-1.3-.3c-.3-.2-.6-.3-.8-.7-.2-.3-.3-.7-.4-1.1s-.2-.9-.2-1.5,0-1,.2-1.4c0-.4,.3-.8,.4-1.1,.2-.3,.5-.5,.8-.7s.8-.3,1.3-.3,.7,0,1,0c.3,0,.5,.2,.7,.3l.5,.5c.2,.2,.3,.4,.3,.7v-1.4h.5Zm-3,6.4c.5,0,.8,0,1.2-.3s.6-.3,.8-.6,.3-.6,.4-.9,0-.8,0-1.2,0-.8,0-1.2c0-.3-.2-.7-.4-.9s-.4-.5-.8-.6-.7-.3-1.2-.3-.8,0-1.1,.2-.5,.3-.7,.6-.3,.6-.3,.9c0,.3,0,.8,0,1.3s0,.9,0,1.3c0,.3,.2,.7,.3,.9s.4,.4,.7,.6,.7,.2,1.1,.2Z" style="fill: #fff;"/>
<path d="M544.2,611.4v.7l-4.9,.3c0,.5,0,.9,.2,1.3,0,.3,.3,.7,.4,.8,.2,.3,.4,.4,.8,.5s.7,.2,1.2,.2,.8,0,1.1,0c.4,0,.8-.2,1-.3v.6c0,0-.3,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.7c-.5,0-1,0-1.4-.2-.4,0-.7-.3-.9-.6s-.4-.7-.5-1.1-.2-1-.2-1.7,0-1.3,.2-1.7,.3-.8,.5-1.1,.5-.5,.9-.6c.3,0,.8-.2,1.4-.2s1,0,1.4,.3c.3,.2,.6,.4,.8,.7s.3,.6,.3,.9,0,.7,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.3-.8-.2-.3-.3-.4-.6-.5s-.6-.2-1.1-.2-.8,0-1.1,.2c-.3,0-.5,.3-.7,.5s-.3,.5-.4,.8c0,.3,0,.8-.2,1.3l4.3-.3h0Z" style="fill: #fff;"/>
<path d="M551.3,611.4v.7l-4.9,.3c0,.5,0,.9,.2,1.3,0,.3,.3,.7,.4,.8,.2,.3,.4,.4,.8,.5s.7,.2,1.2,.2,.8,0,1.1,0c.4,0,.8-.2,1-.3v.6c0,0-.3,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.7c-.5,0-1,0-1.4-.2-.4,0-.7-.3-.9-.6s-.4-.7-.5-1.1-.2-1-.2-1.7,0-1.3,.2-1.7,.3-.8,.5-1.1,.5-.5,.9-.6c.3,0,.8-.2,1.4-.2s1,0,1.4,.3c.3,.2,.6,.4,.8,.7s.3,.6,.3,.9,0,.7,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.3-.8-.2-.3-.3-.4-.6-.5s-.6-.2-1.1-.2-.8,0-1.1,.2c-.3,0-.5,.3-.7,.5s-.3,.5-.4,.8c0,.3,0,.8-.2,1.3l4.3-.3h0Z" style="fill: #fff;"/>
<path d="M558.3,611.4v.7l-4.9,.3c0,.5,0,.9,.2,1.3,0,.3,.3,.7,.4,.8,.2,.3,.4,.4,.8,.5s.7,.2,1.2,.2,.8,0,1.1,0c.4,0,.8-.2,1-.3v.6c0,0-.3,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.7c-.5,0-1,0-1.4-.2-.4,0-.7-.3-.9-.6s-.4-.7-.5-1.1-.2-1-.2-1.7,0-1.3,.2-1.7,.3-.8,.5-1.1,.5-.5,.9-.6c.3,0,.8-.2,1.4-.2s1,0,1.4,.3c.3,.2,.6,.4,.8,.7s.3,.6,.3,.9,0,.7,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.3-.8-.2-.3-.3-.4-.6-.5s-.6-.2-1.1-.2-.8,0-1.1,.2c-.3,0-.5,.3-.7,.5s-.3,.5-.4,.8c0,.3,0,.8-.2,1.3l4.3-.3h0Z" style="fill: #fff;"/>
<path d="M562.1,615.1h.9v.5h-1.7c-.3,0-.4-.2-.5-.3-.2-.2-.3-.3-.3-.7s0-.7,0-1.1v-4.3h-1.1v-.5h1.1v-1.6h.6v1.6h1.9v.5h-1.9v5.1c0,.2,0,.3,.2,.5s.2,.2,.3,.3h.5Z" style="fill: #fff;"/>
<path d="M569.3,611.4v.7l-4.9,.3c0,.5,0,.9,.2,1.3,0,.3,.3,.7,.4,.8,.2,.3,.4,.4,.8,.5s.7,.2,1.2,.2,.8,0,1.1,0c.4,0,.8-.2,1-.3v.6c0,0-.3,0-.4,.2-.2,0-.3,0-.5,.2-.2,0-.4,0-.6,0h-.7c-.5,0-1,0-1.4-.2-.4,0-.7-.3-.9-.6s-.4-.7-.5-1.1-.2-1-.2-1.7,0-1.3,.2-1.7,.3-.8,.5-1.1,.5-.5,.9-.6c.3,0,.8-.2,1.4-.2s1,0,1.4,.3c.3,.2,.6,.4,.8,.7s.3,.6,.3,.9,0,.7,0,1v-.2Zm-.6,.2v-1c0-.3-.2-.6-.3-.8-.2-.3-.3-.4-.6-.5s-.6-.2-1.1-.2-.8,0-1.1,.2c-.3,0-.5,.3-.7,.5s-.3,.5-.4,.8c0,.3,0,.8-.2,1.3l4.3-.3h0Z" style="fill: #fff;"/>
<path d="M573.8,615.7c-.5,0-.9,0-1.4-.2-.3,0-.7-.3-.9-.6s-.4-.7-.5-1.1-.2-1-.2-1.7,0-1.3,.2-1.7c0-.4,.3-.8,.5-1.1s.5-.5,.9-.6c.3,0,.8-.2,1.4-.2h1c.3,0,.6,0,.8,.2v.6c-.3,0-.5-.2-.8-.2h-.9c-.3,0-.8,0-1.1,.2-.3,0-.5,.3-.7,.5s-.3,.5-.4,.9c0,.4,0,.8,0,1.4s0,1,0,1.4c0,.4,.2,.7,.4,.9,.2,.3,.4,.4,.7,.5s.7,.2,1.1,.2,.7,0,1,0c.3,0,.6-.2,.8-.3v.6c-.2,0-.4,.2-.8,.3-.3,0-.7,0-1,0v-.2Z" style="fill: #fff;"/>
<path d="M580.2,608.5c.4,0,.8,0,1.1,.2,.3,0,.5,.3,.7,.4s.3,.4,.3,.7c0,.3,0,.6,0,.9v4.8h-.6v-5.4c0-.3-.2-.5-.3-.6-.2-.2-.3-.3-.5-.3s-.5,0-.8,0h-.7c-.3,0-.4,0-.7,.3s-.4,.3-.6,.5-.3,.5-.3,.8v4.8h-.6v-9.7h.6v4c0-.3,.2-.4,.3-.6s.3-.3,.6-.4,.4-.2,.7-.3,.5,0,.8,0h0Z" style="fill: #fff;"/>
<path d="M585.3,615.7c-.2,0-.3,0-.4,0,0,0,0-.3,0-.5s0-.4,0-.4c0,0,.3,0,.4,0s.3,0,.4,0c0,0,0,.3,0,.4s0,.4,0,.5c0,0-.3,0-.4,0Z" style="fill: #fff;"/>
<path d="M590.1,615.7c-.5,0-.9,0-1.4-.2-.3,0-.7-.3-.9-.6s-.4-.7-.5-1.1-.2-1-.2-1.7,0-1.3,.2-1.7c0-.4,.3-.8,.5-1.1s.5-.5,.9-.6c.3,0,.8-.2,1.4-.2h1c.3,0,.6,0,.8,.2v.6c-.3,0-.5-.2-.8-.2h-.9c-.3,0-.8,0-1.1,.2-.3,0-.5,.3-.7,.5s-.3,.5-.4,.9c0,.4,0,.8,0,1.4s0,1,0,1.4c0,.4,.2,.7,.4,.9,.2,.3,.4,.4,.7,.5s.7,.2,1.1,.2,.7,0,1,0c.3,0,.6-.2,.8-.3v.6c-.2,0-.4,.2-.8,.3-.3,0-.7,0-1,0v-.2Z" style="fill: #fff;"/>
<path d="M596.1,615.7c-.5,0-1,0-1.4-.2-.3,0-.7-.3-.9-.6s-.4-.7-.5-1.1-.2-1-.2-1.7,0-1.3,.2-1.7c0-.4,.3-.8,.5-1.1s.5-.5,.9-.6,.8-.2,1.4-.2,.9,0,1.4,.2c.3,0,.7,.3,.9,.6s.4,.7,.5,1.1,.2,1,.2,1.7,0,1.3-.2,1.7c0,.4-.3,.8-.5,1.1s-.6,.5-.9,.6c-.3,0-.8,.2-1.4,.2Zm0-.5c.4,0,.8,0,1.2-.2,.3,0,.5-.3,.8-.5,.2-.3,.3-.6,.4-.9s0-.8,0-1.4,0-1,0-1.4-.2-.7-.4-.9-.4-.4-.8-.5-.7-.2-1.1-.2-.8,0-1.1,.2c-.3,0-.5,.3-.8,.5-.2,.3-.3,.6-.3,.9s0,.8,0,1.4,0,1,0,1.4c0,.4,.2,.7,.3,.9s.4,.4,.8,.5,.7,.2,1.1,.2h0Z" style="fill: #fff;"/>
<path d="M608.1,608.5c.4,0,.8,0,1,.2,.3,0,.5,.3,.7,.4s.3,.4,.3,.7c0,.3,0,.6,0,.9v4.8h-.6v-5.4c0-.3,0-.5-.3-.6,0-.2-.3-.3-.5-.3-.2,0-.5,0-.8,0h-.7c-.3,0-.4,0-.6,.3-.2,0-.3,.3-.5,.5-.2,.3-.3,.5-.3,.8h0v4.8h-.6v-5.4c0-.3,0-.5-.3-.6,0-.2-.3-.3-.5-.3s-.5,0-.8,0h-.7c-.3,0-.4,0-.6,.3-.2,0-.3,.3-.5,.5-.2,.2-.3,.5-.3,.8v4.9h-.6v-6.9h.6v1.2c0-.3,.2-.4,.3-.6s.3-.3,.5-.4c.2,0,.4-.2,.6-.3s.5,0,.7,0c.6,0,1.1,0,1.4,.3,.3,.3,.5,.6,.6,1,0-.3,.2-.4,.3-.6s.3-.3,.5-.4,.4-.2,.7-.3,.5,0,.8,0v-.2Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M20.2,605.8c-.3,0-.5,0-.6,0h0c-.3,0-.5-.1-.8-.2l-1.4-.5c-.2-.1-.6-.3-1-.6l-.9-.8c-.8-.8-1.5-2-1.9-3.5-.4-1.3-.5-2.9-.5-4.8s.3-3.7,.9-5.1c.7-1.8,1.9-3.1,3.6-4.1,.5-.3,1.1-.5,2-.6,.8-.1,4.4-.2,10.6-.2v3.6h-8.3c-1.6,0-2.8,.7-3.5,2-.6,1-.8,2.4-.8,4.1v2.1c.1,.3,.1,.5,.2,.7h0c0,.4,0,.7,.1,.9,.2,1,.6,1.8,1.3,2.4,.7,.6,3,.9,7.2,.9v-4.8h-5.2v-3.6h9.1v12.1h-9.8Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M40.7,605.8h-1.6c0,0-.6-.1-.6-.1-.1,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.2,0-1.8-.5-3.2-1.7-4.2-3.6-.4-.8-.7-1.6-.9-2.5-.2-.9-.3-1.8-.3-2.8,0-1.9,.1-3.5,.4-4.7,.3-1.3,.7-2.5,1.4-3.4,.8-1.1,1.7-1.9,2.8-2.3,.5-.2,1.1-.4,2-.5,.8-.1,3.6-.2,8.6-.2v3.6h-6.4c-2.9,0-4.4,1.6-4.4,4.8h10.8v3.6h-10.8c0,.8,0,1.5,.2,2,0,.3,.1,.6,.2,.9,0,.2,.2,.4,.4,.7l.7,.7c.2,.2,.5,.3,.8,.5,.3,.1,.7,.2,1,.2h7.4v3.6h-6.5Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M58.1,605.8h-1.6c0,0-.6-.1-.6-.1-.1,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.2,0-1.8-.5-3.2-1.7-4.2-3.6-.4-.8-.7-1.6-.9-2.5-.2-.9-.3-1.8-.3-2.8,0-1.9,.1-3.5,.4-4.7,.3-1.3,.7-2.5,1.4-3.4,.8-1.1,1.7-1.9,2.8-2.3,.5-.2,1.1-.4,2-.5,.8-.1,3.6-.2,8.6-.2v3.6h-6.4c-2.9,0-4.4,1.6-4.4,4.8h10.7v3.6h-10.7c0,.8,0,1.5,.2,2,0,.3,.1,.6,.2,.9,0,.2,.2,.4,.4,.7l.7,.7c.2,.2,.5,.3,.8,.5,.3,.1,.7,.2,1,.2h7.4v3.6h-6.5Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M75.4,605.8h-1.6c0,0-.6-.1-.6-.1-.1,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.2,0-1.8-.5-3.2-1.7-4.2-3.6-.4-.8-.7-1.6-.9-2.5-.2-.9-.3-1.8-.3-2.8,0-1.9,.1-3.5,.4-4.7,.3-1.3,.7-2.5,1.4-3.4,.8-1.1,1.7-1.9,2.8-2.3,.5-.2,1.1-.4,2-.5,.8-.1,3.6-.2,8.6-.2v3.6h-6.4c-2.9,0-4.4,1.6-4.4,4.8h10.8v3.6h-10.8c0,.8,0,1.5,.2,2,0,.3,.1,.6,.2,.9,0,.2,.2,.4,.4,.7l.7,.7c.2,.2,.5,.3,.8,.5,.3,.1,.7,.2,1,.2h7.4v3.6h-6.5Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="93.4 589 93.4 605.8 89.4 605.8 89.4 589 83.5 589 83.5 585.4 99.4 585.4 99.4 589 93.4 589" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M108.7,605.8h-1.6c0,0-.6-.1-.6-.1-.1,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.2,0-1.8-.5-3.2-1.7-4.2-3.6-.4-.8-.7-1.6-.9-2.5-.2-.9-.3-1.8-.3-2.8,0-1.9,.1-3.5,.4-4.7,.3-1.3,.7-2.5,1.4-3.4,.8-1.1,1.7-1.9,2.8-2.3,.5-.2,1.1-.4,2-.5,.8-.1,3.6-.2,8.6-.2v3.6h-6.4c-2.9,0-4.4,1.6-4.4,4.8h10.7v3.6h-10.7c0,.8,0,1.5,.2,2,0,.3,.1,.6,.2,.9,0,.2,.2,.4,.4,.7l.7,.7c.2,.2,.5,.3,.8,.5,.3,.1,.7,.2,1,.2h7.4v3.6h-6.5Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M126.1,605.8h-1.6c0,0-.6-.1-.6-.1-.1,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.2,0-1.8-.5-3.2-1.7-4.2-3.6-.8-1.6-1.3-3.4-1.3-5.2s.1-3.5,.4-4.8c.3-1.3,.7-2.5,1.4-3.4,.8-1.1,1.7-1.9,2.8-2.3,.7-.2,1.3-.4,2-.5,.7-.1,3.6-.2,8.6-.2v3.5h-6.4c-1.2,0-2.2,.4-3,1.1-.6,.6-1,1.5-1.2,2.6-.2,1.2-.4,2.4-.4,3.6s.2,2.5,.5,3.5c.4,1.3,1.2,2.1,2.2,2.4h.4c0,.1,.5,.1,.5,.1h7.4v3.6h-6.5Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="146.5 605.8 146.5 597.2 139.4 597.2 139.4 605.8 135.5 605.8 135.5 585.4 139.4 585.4 139.4 593.6 146.5 593.6 146.5 585.4 150.4 585.4 150.4 605.8 146.5 605.8" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="620.8" height="620.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="163.4" y1="595.2" x2="487.3" y2="595.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="568.2" x2="622.2" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="541.2" x2="622.2" y2="541.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="514.2" x2="622.2" y2="514.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="487.3" x2="622.2" y2="487.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="460.3" x2="622.2" y2="460.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="433.3" x2="622.2" y2="433.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="406.3" x2="622.2" y2="406.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="379.3" x2="622.2" y2="379.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="352.3" x2="622.2" y2="352.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="325.3" x2="622.2" y2="325.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="298.3" x2="622.2" y2="298.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="271.3" x2="622.2" y2="271.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="244.3" x2="622.2" y2="244.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="217.3" x2="622.2" y2="217.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="190.4" x2="622.2" y2="190.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="163.4" x2="622.2" y2="163.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="136.4" x2="622.2" y2="136.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="109.4" x2="622.2" y2="109.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="82.4" x2="622.2" y2="82.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="55.4" x2="622.2" y2="55.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="28.4" x2="622.2" y2="28.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="595.2" y1="1.4" x2="595.2" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="568.2" y1="1.4" x2="568.2" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="541.2" y1="1.4" x2="541.2" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="514.2" y1="1.4" x2="514.2" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="487.3" y1="1.4" x2="487.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="460.3" y1="1.4" x2="460.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="433.3" y1="1.4" x2="433.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="406.3" y1="1.4" x2="406.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="379.3" y1="1.4" x2="379.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="352.3" y1="1.4" x2="352.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="325.3" y1="1.4" x2="325.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="298.3" y1="1.4" x2="298.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="271.3" y1="1.4" x2="271.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="244.3" y1="1.4" x2="244.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="217.3" y1="1.4" x2="217.3" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="190.4" y1="1.4" x2="190.4" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="163.4" y1="1.4" x2="163.4" y2="622.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="136.4" y1="1.4" x2="136.4" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="109.4" y1="1.4" x2="109.4" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="82.4" y1="1.4" x2="82.4" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="55.4" y1="1.4" x2="55.4" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="28.4" y1="1.4" x2="28.4" y2="568.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="250mm" height="250mm" viewBox="0 0 708.7 708.7">
<g>
<rect x="561.4" y="636.7" width="124.2" height="39.1" style="fill: none;"/>
<g>
<path d="M600.4,667.7h0l-14.4-24.9c0-.3-.4-.4-.7-.4s-.6,.2-.7,.4l-14.4,24.9c0,.3,0,.6,0,.8,0,.3,.4,.4,.7,.4h28.8c.3,0,.6-.2,.7-.4,0-.3,0-.6,0-.8h0Zm-28.1-.4l12.9-22.4,12.9,22.4h-25.9Z" style="fill: #fff;"/>
<rect x="579" y="664.5" width="12.6" height="1.3" style="fill: #fff;"/>
<path d="M582.8,663.6l-.7-.5c1.3-1.9,.6-3,0-4.3-.8-1.3-1.7-2.9,0-5.2l.7,.5c-1.3,1.8-.7,3,0,4.3,.8,1.3,1.7,2.9,0,5.2h0Z" style="fill: #fff;"/>
<path d="M585.8,663.6l-.7-.5c1.3-1.9,.6-3,0-4.3-.8-1.3-1.7-2.9,0-5.1l.7,.5c-1.3,1.8-.7,3,0,4.3,.8,1.3,1.7,2.9,0,5.1h0Z" style="fill: #fff;"/>
<path d="M588.9,663.6l-.7-.5c1.3-1.9,.7-3,0-4.3-.8-1.4-1.6-2.9,0-5.2l.7,.5c-1.3,1.9-.7,3,0,4.3,.8,1.4,1.6,2.9,0,5.2Z" style="fill: #fff;"/>
</g>
<g>
<path d="M607.9,653.2c-.6,0-1.1,0-1.6-.2-.5,0-.9-.3-1.2-.7-.3-.3-.6-.8-.8-1.3-.2-.6-.3-1.3-.3-2.2s0-1.5,.3-2c.2-.6,.4-1,.8-1.3,.3-.3,.7-.6,1.2-.7,.5,0,1-.2,1.6-.2h1c.3,0,.6,0,.8,.2v1c-.2,0-.5-.2-.8-.2h-1c-.4,0-.9,0-1.2,.2-.4,0-.6,.3-.9,.6-.2,.3-.4,.6-.5,1s-.2,.9-.2,1.6,0,1.2,.2,1.6c0,.4,.3,.8,.5,1s.5,.4,.8,.5,.7,.2,1.2,.2h1c.3,0,.6,0,.9-.2v.9c-.2,0-.5,.2-.9,.3-.3,0-.7,0-1.2,0l.3-.2Z" style="fill: #fff;"/>
<path d="M614,646.5c.5,0,.9,0,1.3,.2,.3,0,.6,.2,.8,.4s.3,.4,.4,.6c0,.2,0,.5,0,.8v4.6h-.9l-.2-1c0,.2-.2,.3-.4,.5s-.3,.3-.5,.3-.4,.2-.7,.2h-.7c-.8,0-1.3-.2-1.7-.5s-.5-.8-.5-1.4,0-.7,.2-1c0-.3,.3-.5,.5-.6,.2-.2,.5-.3,.8-.3s.7,0,1.1,0h2v-1c0-.2,0-.3-.2-.4s-.3-.2-.5-.3h-1.5c-.2,0-.5,0-.7,0v-.9h1.4v-.2Zm-.8,5.9c.5,0,1,0,1.4-.3s.7-.5,.8-.9v-1.1h-2.6c-.2,0-.4,0-.5,.2s-.2,.2-.3,.4v.6c0,.4,0,.6,.3,.8s.5,.3,1,.3h0Z" style="fill: #fff;"/>
<path d="M624,646.6v6.5h-.9v-.9l-.5,.5c0,0-.3,.2-.5,.3-.2,0-.4,0-.6,.2h-.6c-.4,0-.8,0-1.1-.2-.3,0-.5-.2-.7-.4s-.3-.4-.3-.7,0-.5,0-.9v-4.5h1v4.8c0,.2,0,.4,.2,.5s.2,.2,.4,.3,.4,0,.6,0h.6c.2,0,.4,0,.5-.2s.3-.2,.4-.4c0-.2,.2-.4,.3-.7v-4.4h1.3Z" style="fill: #fff;"/>
<path d="M628.3,652.3h.7v.9h-1.7c-.2,0-.4-.2-.6-.3-.2-.2-.3-.4-.3-.6,0-.3,0-.6,0-1v-3.7h-1v-.9h1v-1.5h1v1.5h1.6v.9h-1.6v4.2c0,0,0,.3,0,.4s.2,.2,.3,.2h.6Z" style="fill: #fff;"/>
<path d="M630.8,645.4c-.2,0-.4,0-.5,0,0,0,0-.2,0-.5s0-.4,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.2,0,.5s0,.4,0,.5c0,0-.3,0-.5,0Zm-.5,1.2h1v6.5h-1v-6.5Z" style="fill: #fff;"/>
<path d="M636.1,653.2c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.3-.2s.9,0,1.3,.2c.4,0,.7,.3,.9,.6,.3,.3,.4,.6,.6,1,0,.4,.2,1,.2,1.6s0,1.2-.2,1.6c0,.4-.3,.8-.6,1-.3,.3-.6,.4-.9,.6-.4,0-.8,.2-1.3,.2Zm0-.9c.4,0,.7,0,.9,0s.4-.2,.6-.4c0-.2,.2-.4,.3-.8s0-.7,0-1.2v-1.2c0-.3-.2-.6-.3-.8s-.3-.3-.6-.4c-.2,0-.5,0-.9,0s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.3,.5-.3,.8v2.4c0,.3,.2,.6,.3,.8,.2,.2,.3,.3,.6,.4s.5,0,.9,0Z" style="fill: #fff;"/>
<path d="M644,646.5c.4,0,.8,0,1.1,.2,.3,0,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,0,.5,0,.9v4.5h-1v-4.8c0-.2,0-.4-.2-.5,0,0-.2-.2-.4-.3s-.4,0-.6,0h-.6c-.2,0-.4,0-.6,.2s-.3,.2-.5,.4-.3,.4-.3,.7v4.4h-1v-6.5h1v.9c0-.2,.2-.4,.4-.5s.3-.2,.5-.3,.4,0,.6-.2,.4,0,.6,0h-.2Z" style="fill: #fff;"/>
<path d="M657.8,644.8v8.4h-1.1v-4.1h-4.1v4.1h-1.1v-8.4h1.1v3.4h4.1v-3.4h1.1Z" style="fill: #fff;"/>
<path d="M660.4,645.4c-.2,0-.4,0-.5,0,0,0,0-.2,0-.5s0-.4,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.2,0,.5s0,.4,0,.5c0,0-.3,0-.5,0Zm-.5,1.2h1v6.5h-1v-6.5Z" style="fill: #fff;"/>
<path d="M668.6,646.6v6.1c0,.9-.3,1.6-.8,2.1s-1.3,.8-2.4,.8-.6,0-.8,0c-.3,0-.5,0-.7,0v-.9c.5,0,1,0,1.6,0s1.3-.2,1.6-.5,.5-.9,.5-1.6v-.7c0,.4-.4,.7-.7,.9s-.8,.3-1.4,.3-1,0-1.3-.2-.6-.4-.8-.7-.3-.6-.4-1c0-.4,0-.9,0-1.4s0-.9,0-1.3c0-.4,.2-.8,.4-1.1s.5-.5,.8-.7,.8-.3,1.3-.3,.6,0,.9,0c.2,0,.4,.2,.6,.3,.2,0,.3,.3,.4,.4,0,.2,.2,.3,.3,.5v-1.2h.9Zm-3,5.7c.4,0,.7,0,1-.2,.3,0,.5-.3,.6-.5s.3-.5,.3-.8v-2c0-.3-.2-.6-.3-.8s-.4-.4-.6-.5-.6-.2-1-.2-.7,0-.9,.2c-.2,0-.4,.3-.5,.5s-.2,.5-.2,.8v1.9c0,.3,0,.6,.2,.8,0,.2,.3,.4,.5,.5s.5,.2,.9,.2h0Z" style="fill: #fff;"/>
<path d="M673.9,646.5c.4,0,.8,0,1.1,.2,.3,0,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,0,.5,0,.9v4.5h-1v-4.8c0-.2,0-.4-.2-.5,0,0-.2-.2-.4-.3s-.4,0-.6,0h-.6c-.2,0-.4,0-.6,.2s-.3,.2-.5,.4-.3,.4-.3,.7v4.4h-1v-9.2h1v3.6c0-.2,.2-.4,.4-.5s.3-.2,.5-.3,.4,0,.6-.2,.4,0,.6,0h-.2Z" style="fill: #fff;"/>
<path d="M609.3,660.2h-2.4v7.4h-1.1v-7.4h-2.4v-1h6v1h0Z" style="fill: #fff;"/>
<path d="M615.4,663.6v.7l-4.4,.3c0,.4,0,.7,0,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,0,1,0s.7,0,1.1,0,.7-.2,.9-.3v1s-.2,0-.4,0c-.2,0-.3,0-.5,0h-1.3c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.2-.2s1,0,1.3,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1,0v-.7c0-.2,0-.4-.2-.6s-.3-.3-.5-.4c-.2,0-.5-.2-.8-.2s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.2,.4-.3,.7v.9l3.4-.3h0Z" style="fill: #fff;"/>
<path d="M624.3,660.9c.4,0,.7,0,1,.2,.3,0,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,0,.5,0,.9v4.5h-1v-4.1c0-.5,0-.9-.3-1.2-.2-.3-.5-.4-1-.4h-.5c0,0-.3,0-.5,.2,0,0-.3,.2-.4,.3,0,0-.2,.3-.3,.6h0v4.6h-1v-4.1c0-.5,0-.9-.2-1.2s-.5-.4-1-.4h-.6c-.2,0-.3,0-.5,.2,0,0-.3,.2-.4,.4,0,.2-.2,.4-.3,.6v4.5h-1v-6.5h1v.9c.2-.4,.5-.6,.8-.8,.3,0,.7-.2,1.1-.2s.9,0,1.2,.3c.3,.2,.5,.4,.7,.8,0-.2,.2-.4,.4-.5,0,0,.3-.2,.5-.3,.2,0,.4,0,.6-.2s.4,0,.6,0v-.2Z" style="fill: #fff;"/>
<path d="M632,660.9c.5,0,1,0,1.3,.2s.6,.4,.8,.7,.3,.7,.4,1.1c0,.4,0,.9,0,1.4s0,.9,0,1.3c0,.4-.2,.8-.4,1.1s-.5,.6-.8,.7c-.3,.2-.8,.3-1.3,.3s-1.1,0-1.4-.3c-.3-.2-.5-.5-.7-.9v3.5h-1v-8.9h1v1.2c0-.4,.4-.7,.7-.9s.8-.4,1.4-.4h0Zm0,5.8c.4,0,.7,0,.9-.2s.4-.3,.5-.6c0-.2,.2-.5,.2-.8v-1.9c0-.3,0-.6-.2-.8,0-.2-.3-.4-.5-.5s-.5-.2-.9-.2-.7,0-1,.2-.5,.3-.6,.5c-.2,.2-.3,.5-.3,.8v2c0,.3,.2,.6,.3,.8,.2,.2,.4,.4,.6,.5,.3,0,.6,.2,1,.2Z" style="fill: #fff;"/>
<path d="M641.9,663.6v.7l-4.4,.3c0,.4,0,.7,0,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,0,1,0s.7,0,1.1,0,.7-.2,.9-.3v1s-.2,0-.4,0c-.2,0-.3,0-.5,0h-1.3c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.2-.2s1,0,1.3,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1,0v-.7c0-.2,0-.4-.2-.6s-.3-.3-.5-.4c-.2,0-.5-.2-.8-.2s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.2,.4-.3,.7v.9l3.4-.3h0Z" style="fill: #fff;"/>
<path d="M647.2,660.9v.9h-.8c-.2,0-.4,0-.6,.2-.2,0-.3,.3-.5,.4,0,.2-.3,.4-.3,.7v4.3h-1v-6.5h1v1.2c0-.3,.2-.5,.4-.7s.3-.3,.5-.4c.2,0,.4-.2,.6-.2h.7Z" style="fill: #fff;"/>
<path d="M650.9,660.9c.5,0,.9,0,1.3,.2,.3,0,.6,.2,.8,.4s.3,.4,.4,.6c0,.2,0,.5,0,.8v4.6h-.9l-.2-1c0,.2-.2,.3-.4,.5s-.3,.3-.5,.3-.4,.2-.7,.2h-.7c-.8,0-1.3-.2-1.7-.5s-.5-.8-.5-1.4,0-.7,.2-1c0-.3,.3-.5,.5-.6,.2-.2,.5-.3,.8-.3s.7,0,1.1,0h2v-1c0-.2,0-.3-.2-.4s-.3-.2-.5-.3h-1.5c-.2,0-.5,0-.7,0v-.9h1.4v-.2Zm-.8,5.9c.5,0,1,0,1.4-.3s.7-.5,.8-.9v-1.1h-2.6c-.2,0-.4,0-.5,.2s-.2,.2-.3,.4v.6c0,.4,0,.6,.3,.8s.5,.3,1,.3h0Z" style="fill: #fff;"/>
<path d="M658,666.8h.7v.9h-1.7c-.2,0-.4-.2-.6-.3-.2-.2-.3-.4-.3-.6,0-.3,0-.6,0-1v-3.7h-1v-.9h1v-1.5h1v1.5h1.6v.9h-1.6v4.2c0,0,0,.3,0,.4s.2,.2,.3,.2h.6Z" style="fill: #fff;"/>
<path d="M665.4,661v6.5h-.9v-.9l-.5,.5c0,0-.3,.2-.5,.3-.2,0-.4,0-.6,.2h-.6c-.4,0-.8,0-1.1-.2-.3,0-.5-.2-.7-.4s-.3-.4-.3-.7,0-.5,0-.9v-4.5h1v4.8c0,.2,0,.4,.2,.5s.2,.2,.4,.3,.4,0,.6,0h.6c.2,0,.4,0,.5-.2s.3-.2,.4-.4c0-.2,.2-.4,.3-.7v-4.4h1.3Z" style="fill: #fff;"/>
<path d="M671.1,660.9v.9h-.8c-.2,0-.4,0-.6,.2-.2,0-.3,.3-.5,.4,0,.2-.3,.4-.3,.7v4.3h-1v-6.5h1v1.2c0-.3,.2-.5,.4-.7s.3-.3,.5-.4c.2,0,.4-.2,.6-.2h.7Z" style="fill: #fff;"/>
<path d="M677.7,663.6v.7l-4.4,.3c0,.4,0,.7,0,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,0,1,0s.7,0,1.1,0,.7-.2,.9-.3v1s-.2,0-.4,0c-.2,0-.3,0-.5,0h-1.3c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.2-.2s1,0,1.3,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1,0v-.7c0-.2,0-.4-.2-.6s-.3-.3-.5-.4c-.2,0-.5-.2-.8-.2s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.2,.4-.3,.7v.9l3.4-.3h0Z" style="fill: #fff;"/>
</g>
<g>
<path d="M557,681.9h.7l2,7.4h0l2.4-7.4h.9l2.5,7.4h0l2-7.4h.7l-2.3,8.2h-.8l-2.5-7.5h0l-2.5,7.5h-.8l-2.3-8.2h0Z" style="fill: #fff;"/>
<path d="M568.7,681.9h.7l2,7.4h0l2.4-7.4h.9l2.5,7.4h0l2-7.4h.7l-2.3,8.2h-.8l-2.5-7.5h0l-2.5,7.5h-.8l-2.3-8.2h0Z" style="fill: #fff;"/>
<path d="M580.4,681.9h.7l2,7.4h0l2.4-7.4h.9l2.5,7.4h0l2-7.4h.7l-2.3,8.2h-.8l-2.5-7.5h0l-2.5,7.5h-.8l-2.3-8.2h0Z" style="fill: #fff;"/>
<path d="M592.8,690.2c-.2,0-.4,0-.5,0,0,0,0-.3,0-.6s0-.5,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.3,0,.5s0,.5,0,.6c0,0-.3,0-.5,0Z" style="fill: #fff;"/>
<path d="M602.5,681.9v7.6c0,1.1-.3,2-.9,2.6-.6,.6-1.6,.9-2.8,.9s-.7,0-1,0-.6,0-.8,0v-.7c.3,0,.6,0,.9,.2h1c1.1,0,1.8-.3,2.3-.8s.7-1.3,.7-2.3v-1.1c-.2,.6-.5,1-1,1.3s-1.1,.5-2,.5-1.1,0-1.5-.3c-.4-.2-.7-.4-1-.8-.2-.3-.4-.8-.5-1.3s-.2-1.1-.2-1.8,0-1.2,.2-1.7c0-.5,.3-1,.5-1.3,.2-.4,.6-.6,1-.8s.9-.3,1.5-.3,.8,0,1.2,0c.3,0,.6,.2,.8,.4l.6,.6c.2,.2,.3,.5,.4,.8v-1.7h.6Zm-3.5,7.6c.6,0,1,0,1.4-.3s.7-.4,.9-.7,.4-.7,.5-1.1,0-.9,0-1.4,0-1,0-1.4c0-.4-.2-.8-.5-1.1s-.5-.6-.9-.7-.8-.3-1.4-.3-1,0-1.3,.2-.6,.4-.8,.7-.3,.7-.4,1.1c0,.4,0,.9,0,1.5s0,1.1,0,1.5c0,.4,.2,.8,.4,1.1s.5,.5,.8,.7,.8,.2,1.3,.2Z" style="fill: #fff;"/>
<path d="M611.2,685.1v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M619.6,685.1v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M627.9,685.1v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M632.4,689.5h1.1v.6h-2c-.3,0-.5-.2-.6-.4-.2-.2-.3-.4-.3-.8s0-.8,0-1.3v-5.1h-1.3v-.6h1.3v-1.9h.7v1.9h2.3v.6h-2.3v6c0,.2,0,.4,.2,.6s.2,.2,.4,.3h.6Z" style="fill: #fff;"/>
<path d="M640.8,685.1v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M646.1,690.2c-.6,0-1.1,0-1.6-.2-.4,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2c0-.5,.3-1,.6-1.3s.6-.6,1.1-.7c.4,0,.9-.2,1.6-.2h1.2c.3,0,.7,0,.9,.2v.7c-.3,0-.6-.2-1-.2h-1.1c-.4,0-.9,0-1.3,.2-.3,0-.6,.3-.8,.6s-.4,.6-.5,1.1c0,.5,0,1,0,1.7s0,1.2,0,1.7c0,.5,.2,.8,.5,1.1,.2,.3,.5,.5,.8,.6s.8,.2,1.3,.2,.8,0,1.2,0c.3,0,.7-.2,1-.3v.7c-.2,0-.5,.2-.9,.3-.4,0-.8,0-1.2,0v-.2Z" style="fill: #fff;"/>
<path d="M653.7,681.7c.5,0,.9,0,1.3,.2,.3,0,.6,.3,.8,.5s.3,.5,.4,.8c0,.3,0,.7,0,1.1v5.7h-.7v-6.4c0-.3-.2-.6-.3-.7-.2-.2-.4-.3-.6-.4s-.6,0-1,0h-.8c-.3,0-.5,0-.8,.3s-.5,.3-.7,.6-.3,.6-.4,1v5.7h-.7v-11.5h.7v4.7c0-.3,.2-.5,.4-.7s.4-.4,.7-.5,.5-.2,.8-.3,.6,0,.9,0h0Z" style="fill: #fff;"/>
<path d="M659.6,690.2c-.2,0-.4,0-.5,0,0,0,0-.3,0-.6s0-.5,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.3,0,.5s0,.5,0,.6c0,0-.3,0-.5,0Z" style="fill: #fff;"/>
<path d="M665.2,690.2c-.6,0-1.1,0-1.6-.2-.4,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2c0-.5,.3-1,.6-1.3s.6-.6,1.1-.7c.4,0,.9-.2,1.6-.2h1.2c.3,0,.7,0,.9,.2v.7c-.3,0-.6-.2-1-.2h-1.1c-.4,0-.9,0-1.3,.2-.3,0-.6,.3-.8,.6s-.4,.6-.5,1.1c0,.5,0,1,0,1.7s0,1.2,0,1.7c0,.5,.2,.8,.5,1.1,.2,.3,.5,.5,.8,.6s.8,.2,1.3,.2,.8,0,1.2,0c.3,0,.7-.2,1-.3v.7c-.2,0-.5,.2-.9,.3-.4,0-.8,0-1.2,0v-.2Z" style="fill: #fff;"/>
<path d="M672.4,690.2c-.6,0-1.2,0-1.6-.2-.4,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2c0-.5,.3-1,.6-1.3s.6-.6,1.1-.7,1-.2,1.6-.2,1.1,0,1.6,.2c.4,0,.8,.4,1.1,.7s.5,.8,.6,1.3,.2,1.2,.2,2,0,1.5-.2,2c0,.5-.3,1-.6,1.3s-.7,.6-1.1,.7c-.4,0-1,.2-1.6,.2Zm0-.6c.5,0,1,0,1.4-.2,.4,0,.6-.3,.9-.6,.2-.3,.4-.7,.5-1.1s0-1,0-1.7,0-1.2,0-1.7-.2-.8-.5-1.1-.5-.5-.9-.6-.8-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.9,.6-.2,.3-.4,.7-.4,1.1s0,1,0,1.7,0,1.2,0,1.7c0,.5,.2,.8,.4,1.1s.5,.5,.9,.6,.8,.2,1.3,.2h0Z" style="fill: #fff;"/>
<path d="M686.4,681.7c.5,0,.9,0,1.2,.2,.3,0,.6,.3,.8,.5s.3,.5,.4,.8c0,.3,0,.7,0,1.1v5.7h-.7v-6.4c0-.3,0-.6-.3-.7,0-.2-.3-.3-.6-.4-.2,0-.6,0-.9,0h-.8c-.3,0-.5,0-.7,.3-.2,0-.4,.3-.6,.6-.2,.3-.3,.6-.4,1h0v5.7h-.7v-6.4c0-.3,0-.6-.3-.7,0-.2-.3-.3-.6-.4s-.6,0-.9,0h-.8c-.3,0-.5,0-.7,.3-.2,0-.4,.3-.6,.6-.2,.2-.3,.6-.4,1v5.8h-.7v-8.2h.7v1.4c0-.3,.2-.5,.4-.7s.4-.3,.6-.5c.2,0,.5-.2,.7-.3s.6,0,.8,0c.7,0,1.3,0,1.6,.4,.4,.3,.6,.7,.7,1.2,0-.3,.2-.5,.4-.7s.4-.4,.6-.5,.5-.2,.8-.3,.6,0,.9,0v-.2Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M28.3,690c-.4,0-.6,0-.7,0h0c-.3,0-.6-.1-.9-.2l-1.6-.6c-.3-.1-.7-.4-1.2-.7l-1.1-.9c-1-.9-1.7-2.3-2.3-4.1-.4-1.5-.6-3.4-.6-5.6s.3-4.3,1-6c.8-2.1,2.2-3.7,4.2-4.8,.6-.3,1.3-.6,2.3-.7,.9-.1,5.1-.2,12.5-.2v4.2h-9.8c-1.9,0-3.3,.8-4.1,2.4-.7,1.2-1,2.8-1,4.8v2.5c.1,.4,.2,.6,.2,.8h0c0,.4,0,.8,.2,1,.2,1.2,.7,2.2,1.5,2.9,.8,.7,3.6,1.1,8.4,1.1v-5.6h-6.1v-4.2h10.7v14.2h-11.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M52.4,690h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.2-.5-.9-.8-1.9-1.1-2.9-.3-1-.4-2.1-.4-3.2,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4,.9-1.3,2-2.2,3.3-2.7,.5-.2,1.3-.4,2.3-.6,.9-.1,4.2-.2,10.1-.2v4.2h-7.5c-3.4,0-5.1,1.9-5.1,5.6h12.6v4.2h-12.6c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.7v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M72.9,690h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.2-.5-.9-.8-1.9-1.1-2.9-.3-1-.4-2.1-.4-3.2,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4,.9-1.3,2-2.2,3.3-2.7,.5-.2,1.3-.4,2.3-.6,.9-.1,4.2-.2,10.1-.2v4.2h-7.5c-3.4,0-5.1,1.9-5.1,5.6h12.6v4.2h-12.6c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.7v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M93.3,690h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.2-.5-.9-.8-1.9-1.1-2.9-.3-1-.4-2.1-.4-3.2,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4,.9-1.3,2-2.2,3.3-2.7,.5-.2,1.3-.4,2.3-.6,.9-.1,4.2-.2,10.1-.2v4.2h-7.5c-3.4,0-5.1,1.9-5.1,5.6h12.6v4.2h-12.6c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.7v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="114.5 670.2 114.5 690 109.7 690 109.7 670.2 102.8 670.2 102.8 666.1 121.5 666.1 121.5 670.2 114.5 670.2" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M132.5,690h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.2-.5-.9-.8-1.9-1.1-2.9-.3-1-.4-2.1-.4-3.2,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4,.9-1.3,2-2.2,3.3-2.7,.5-.2,1.3-.4,2.3-.6,.9-.1,4.2-.2,10.1-.2v4.2h-7.5c-3.4,0-5.1,1.9-5.1,5.6h12.6v4.2h-12.6c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.7v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M152.9,690h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.2-1-1.9-1.5-4-1.5-6.1s.2-4.1,.5-5.6c.3-1.6,.9-2.9,1.6-4,.9-1.3,2-2.2,3.3-2.7,.8-.3,1.6-.5,2.3-.6,.8-.1,4.2-.2,10.1-.2v4.1h-7.5c-1.5,0-2.6,.4-3.5,1.3-.7,.8-1.2,1.8-1.5,3.1-.3,1.4-.4,2.8-.4,4.2s.2,2.9,.5,4.1c.5,1.5,1.4,2.4,2.5,2.8h.5c0,.1,.5,.2,.5,.2h8.7v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="176.9 690 176.9 680 168.6 680 168.6 690 164 690 164 666 168.6 666 168.6 675.7 176.9 675.7 176.9 666 181.5 666 181.5 690 176.9 690" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="705.8" height="705.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="199" y1="679" x2="537.8" y2="679" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="650.8" x2="537.8" y2="650.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="622.5" x2="707.2" y2="622.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="594.3" x2="707.2" y2="594.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="566.1" x2="707.2" y2="566.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="537.8" x2="707.2" y2="537.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="509.6" x2="707.2" y2="509.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="481.4" x2="707.2" y2="481.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="453.1" x2="707.2" y2="453.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="424.9" x2="707.2" y2="424.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="396.7" x2="707.2" y2="396.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="368.4" x2="707.2" y2="368.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="340.2" x2="707.2" y2="340.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="312" x2="707.2" y2="312" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="283.7" x2="707.2" y2="283.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="255.5" x2="707.2" y2="255.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="227.3" x2="707.2" y2="227.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="199" x2="707.2" y2="199" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="170.8" x2="707.2" y2="170.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="142.6" x2="707.2" y2="142.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="114.3" x2="707.2" y2="114.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="86.1" x2="707.2" y2="86.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="57.9" x2="707.2" y2="57.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="29.7" x2="707.2" y2="29.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="679" y1="1.4" x2="679" y2="622.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="650.8" y1="1.4" x2="650.8" y2="622.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="622.5" y1="1.4" x2="622.5" y2="622.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="594.3" y1="1.4" x2="594.3" y2="622.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="566.1" y1="1.4" x2="566.1" y2="622.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="537.8" y1="1.4" x2="537.8" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="509.6" y1="1.4" x2="509.6" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="481.4" y1="1.4" x2="481.4" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="453.1" y1="1.4" x2="453.1" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="424.9" y1="1.4" x2="424.9" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="396.7" y1="1.4" x2="396.7" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="368.4" y1="1.4" x2="368.4" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="340.2" y1="1.4" x2="340.2" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="312" y1="1.4" x2="312" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="283.7" y1="1.4" x2="283.7" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="255.5" y1="1.4" x2="255.5" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="227.3" y1="1.4" x2="227.3" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="199" y1="1.4" x2="199" y2="707.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="170.8" y1="1.4" x2="170.8" y2="650.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="142.6" y1="1.4" x2="142.6" y2="650.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="114.3" y1="1.4" x2="114.3" y2="650.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="86.1" y1="1.4" x2="86.1" y2="650.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="57.9" y1="1.4" x2="57.9" y2="650.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="29.7" y1="1.4" x2="29.7" y2="650.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="255mm" height="255mm" viewBox="0 0 722.8 722.8">
<g>
<rect x="569.4" y="644.9" width="124.7" height="39.3" style="fill: none;"/>
<g>
<path d="M608.5,676h0l-14.5-25c0-.3-.4-.4-.7-.4s-.6,.2-.7,.4l-14.5,25c0,.3,0,.6,0,.8,0,.3,.4,.4,.7,.4h28.9c.3,0,.6-.2,.7-.4,0-.3,0-.6,0-.8h0Zm-28.2-.4l13-22.5,13,22.5h-26Z" style="fill: #fff;"/>
<rect x="587" y="672.8" width="12.7" height="1.3" style="fill: #fff;"/>
<path d="M590.8,671.9l-.7-.5c1.3-1.9,.6-3,0-4.3-.8-1.3-1.7-2.9,0-5.2l.7,.5c-1.3,1.8-.7,3,0,4.3,.8,1.3,1.7,2.9,0,5.2h0Z" style="fill: #fff;"/>
<path d="M593.9,671.9l-.7-.5c1.3-1.9,.6-3,0-4.3-.8-1.3-1.7-2.9,0-5.1l.7,.5c-1.3,1.8-.7,3,0,4.3,.8,1.3,1.7,2.9,0,5.1h0Z" style="fill: #fff;"/>
<path d="M597,671.9l-.7-.5c1.3-1.9,.7-3,0-4.3-.8-1.4-1.6-2.9,0-5.2l.7,.5c-1.3,1.9-.7,3,0,4.3,.8,1.4,1.6,2.9,0,5.2Z" style="fill: #fff;"/>
</g>
<g>
<path d="M616,661.5c-.6,0-1.1,0-1.6-.2-.5,0-.9-.3-1.2-.7-.3-.3-.6-.8-.8-1.3-.2-.6-.3-1.3-.3-2.2s0-1.5,.3-2c.2-.6,.4-1,.8-1.3,.3-.3,.7-.6,1.2-.7,.5,0,1-.2,1.6-.2h1c.3,0,.6,0,.8,.2v1c-.2,0-.5-.2-.8-.2h-1c-.4,0-.9,0-1.2,.2-.4,0-.6,.3-.9,.6-.2,.3-.4,.6-.5,1s-.2,.9-.2,1.6,0,1.2,.2,1.6c0,.4,.3,.8,.5,1s.5,.4,.8,.5,.7,.2,1.2,.2h1c.3,0,.6,0,.9-.2v.9c-.2,0-.5,.2-.9,.3-.3,0-.7,0-1.2,0l.3-.2Z" style="fill: #fff;"/>
<path d="M622.2,654.8c.5,0,.9,0,1.3,.2,.3,0,.6,.2,.8,.4s.3,.4,.4,.6c0,.2,0,.5,0,.8v4.6h-.9l-.2-1c0,.2-.2,.3-.4,.5s-.3,.3-.5,.3-.4,.2-.7,.2h-.7c-.8,0-1.3-.2-1.7-.5s-.5-.8-.5-1.4,0-.7,.2-1c0-.3,.3-.5,.5-.6,.2-.2,.5-.3,.8-.3s.7,0,1.1,0h2v-1c0-.2,0-.3-.2-.4s-.3-.2-.5-.3h-1.5c-.2,0-.5,0-.7,0v-.9h1.4v-.2Zm-.8,5.9c.5,0,1,0,1.4-.3s.7-.5,.8-.9v-1.1h-2.6c-.2,0-.4,0-.5,.2s-.2,.2-.3,.4v.6c0,.4,0,.6,.3,.8s.5,.3,1,.3h0Z" style="fill: #fff;"/>
<path d="M632.2,654.9v6.5h-.9v-.9l-.5,.5c0,0-.3,.2-.5,.3-.2,0-.4,0-.6,.2h-.6c-.4,0-.8,0-1.1-.2-.3,0-.5-.2-.7-.4s-.3-.4-.3-.7,0-.5,0-.9v-4.5h1v4.8c0,.2,0,.4,.2,.5s.2,.2,.4,.3,.4,0,.6,0h.6c.2,0,.4,0,.5-.2s.3-.2,.4-.4c0-.2,.2-.4,.3-.7v-4.4h1.3Z" style="fill: #fff;"/>
<path d="M636.5,660.6h.7v.9h-1.7c-.2,0-.4-.2-.6-.3-.2-.2-.3-.4-.3-.6,0-.3,0-.6,0-1v-3.7h-1v-.9h1v-1.5h1v1.5h1.6v.9h-1.6v4.2c0,0,0,.3,0,.4s.2,.2,.3,.2h.6Z" style="fill: #fff;"/>
<path d="M639,653.7c-.2,0-.4,0-.5,0,0,0,0-.2,0-.5s0-.4,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.2,0,.5s0,.4,0,.5c0,0-.3,0-.5,0Zm-.5,1.2h1v6.5h-1v-6.5Z" style="fill: #fff;"/>
<path d="M644.4,661.5c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.3-.2s.9,0,1.3,.2c.4,0,.7,.3,.9,.6,.3,.3,.4,.6,.6,1,0,.4,.2,1,.2,1.6s0,1.2-.2,1.6c0,.4-.3,.8-.6,1-.3,.3-.6,.4-.9,.6-.4,0-.8,.2-1.3,.2Zm0-.9c.4,0,.7,0,.9,0s.4-.2,.6-.4c0-.2,.2-.4,.3-.8s0-.7,0-1.2v-1.2c0-.3-.2-.6-.3-.8s-.3-.3-.6-.4c-.2,0-.5,0-.9,0s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.3,.5-.3,.8v2.4c0,.3,.2,.6,.3,.8,.2,.2,.3,.3,.6,.4s.5,0,.9,0Z" style="fill: #fff;"/>
<path d="M652.3,654.8c.4,0,.8,0,1.1,.2,.3,0,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,0,.5,0,.9v4.5h-1v-4.8c0-.2,0-.4-.2-.5,0,0-.2-.2-.4-.3s-.4,0-.6,0h-.6c-.2,0-.4,0-.6,.2s-.3,.2-.5,.4-.3,.4-.3,.7v4.4h-1v-6.5h1v.9c0-.2,.2-.4,.4-.5s.3-.2,.5-.3,.4,0,.6-.2,.4,0,.6,0h-.2Z" style="fill: #fff;"/>
<path d="M666.1,653v8.4h-1.1v-4.1h-4.1v4.1h-1.1v-8.4h1.1v3.4h4.1v-3.4h1.1Z" style="fill: #fff;"/>
<path d="M668.8,653.7c-.2,0-.4,0-.5,0,0,0,0-.2,0-.5s0-.4,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.2,0,.5s0,.4,0,.5c0,0-.3,0-.5,0Zm-.5,1.2h1v6.5h-1v-6.5Z" style="fill: #fff;"/>
<path d="M677,654.9v6.1c0,.9-.3,1.6-.8,2.1s-1.3,.8-2.4,.8-.6,0-.8,0c-.3,0-.5,0-.7,0v-.9c.5,0,1,0,1.6,0s1.3-.2,1.6-.5,.5-.9,.5-1.6v-.7c0,.4-.4,.7-.7,.9s-.8,.3-1.4,.3-1,0-1.3-.2-.6-.4-.8-.7-.3-.6-.4-1c0-.4,0-.9,0-1.4s0-.9,0-1.3c0-.4,.2-.8,.4-1.1s.5-.5,.8-.7,.8-.3,1.3-.3,.6,0,.9,0c.2,0,.4,.2,.6,.3,.2,0,.3,.3,.4,.4,0,.2,.2,.3,.3,.5v-1.2h.9Zm-3,5.7c.4,0,.7,0,1-.2,.3,0,.5-.3,.6-.5s.3-.5,.3-.8v-2c0-.3-.2-.6-.3-.8s-.4-.4-.6-.5-.6-.2-1-.2-.7,0-.9,.2c-.2,0-.4,.3-.5,.5s-.2,.5-.2,.8v1.9c0,.3,0,.6,.2,.8,0,.2,.3,.4,.5,.5s.5,.2,.9,.2h0Z" style="fill: #fff;"/>
<path d="M682.3,654.8c.4,0,.8,0,1.1,.2,.3,0,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,0,.5,0,.9v4.5h-1v-4.8c0-.2,0-.4-.2-.5,0,0-.2-.2-.4-.3s-.4,0-.6,0h-.6c-.2,0-.4,0-.6,.2s-.3,.2-.5,.4-.3,.4-.3,.7v4.4h-1v-9.2h1v3.6c0-.2,.2-.4,.4-.5s.3-.2,.5-.3,.4,0,.6-.2,.4,0,.6,0h-.2Z" style="fill: #fff;"/>
<path d="M617.5,668.5h-2.4v7.4h-1.1v-7.4h-2.4v-1h6v1h0Z" style="fill: #fff;"/>
<path d="M623.6,671.9v.7l-4.4,.3c0,.4,0,.7,0,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,0,1,0s.7,0,1.1,0,.7-.2,.9-.3v1s-.2,0-.4,0c-.2,0-.3,0-.5,0h-1.3c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.2-.2s1,0,1.3,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1,0v-.7c0-.2,0-.4-.2-.6s-.3-.3-.5-.4c-.2,0-.5-.2-.8-.2s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.2,.4-.3,.7v.9l3.4-.3h-.1Z" style="fill: #fff;"/>
<path d="M632.5,669.2c.4,0,.7,0,1,.2,.3,0,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,0,.5,0,.9v4.5h-1v-4.1c0-.5,0-.9-.3-1.2-.2-.3-.5-.4-1-.4h-.5c0,0-.3,0-.5,.2,0,0-.3,.2-.4,.3,0,0-.2,.3-.3,.6h0v4.6h-1v-4.1c0-.5,0-.9-.2-1.2s-.5-.4-1-.4h-.6c-.2,0-.3,0-.5,.2,0,0-.3,.2-.4,.4,0,.2-.2,.4-.3,.6v4.5h-1v-6.5h1v.9c.2-.4,.5-.6,.8-.8,.3,0,.7-.2,1.1-.2s.9,0,1.2,.3c.3,.2,.5,.4,.7,.8,0-.2,.2-.4,.4-.5,0,0,.3-.2,.5-.3,.2,0,.4,0,.6-.2s.4,0,.6,0v-.2Z" style="fill: #fff;"/>
<path d="M640.2,669.2c.5,0,1,0,1.3,.2s.6,.4,.8,.7,.3,.7,.4,1.1c0,.4,0,.9,0,1.4s0,.9,0,1.3c0,.4-.2,.8-.4,1.1s-.5,.6-.8,.7c-.3,.2-.8,.3-1.3,.3s-1.1,0-1.4-.3c-.3-.2-.5-.5-.7-.9v3.5h-1v-8.9h1v1.2c0-.4,.4-.7,.7-.9s.8-.4,1.4-.4h0Zm0,5.8c.4,0,.7,0,.9-.2s.4-.3,.5-.6c0-.2,.2-.5,.2-.8v-1.9c0-.3,0-.6-.2-.8,0-.2-.3-.4-.5-.5s-.5-.2-.9-.2-.7,0-1,.2-.5,.3-.6,.5c-.2,.2-.3,.5-.3,.8v2c0,.3,.2,.6,.3,.8,.2,.2,.4,.4,.6,.5,.3,0,.6,.2,1,.2Z" style="fill: #fff;"/>
<path d="M650.2,671.9v.7l-4.4,.3c0,.4,0,.7,0,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,0,1,0s.7,0,1.1,0,.7-.2,.9-.3v1s-.2,0-.4,0c-.2,0-.3,0-.5,0h-1.3c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.2-.2s1,0,1.3,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1,0v-.7c0-.2,0-.4-.2-.6s-.3-.3-.5-.4c-.2,0-.5-.2-.8-.2s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.2,.4-.3,.7v.9l3.4-.3h-.1Z" style="fill: #fff;"/>
<path d="M655.5,669.2v.9h-.8c-.2,0-.4,0-.6,.2-.2,0-.3,.3-.5,.4,0,.2-.3,.4-.3,.7v4.3h-1v-6.5h1v1.2c0-.3,.2-.5,.4-.7s.3-.3,.5-.4c.2,0,.4-.2,.6-.2h.7Z" style="fill: #fff;"/>
<path d="M659.2,669.2c.5,0,.9,0,1.3,.2,.3,0,.6,.2,.8,.4s.3,.4,.4,.6c0,.2,0,.5,0,.8v4.6h-.9l-.2-1c0,.2-.2,.3-.4,.5s-.3,.3-.5,.3-.4,.2-.7,.2h-.7c-.8,0-1.3-.2-1.7-.5s-.5-.8-.5-1.4,0-.7,.2-1c0-.3,.3-.5,.5-.6,.2-.2,.5-.3,.8-.3s.7,0,1.1,0h2v-1c0-.2,0-.3-.2-.4s-.3-.2-.5-.3h-1.5c-.2,0-.5,0-.7,0v-.9h1.4v-.2Zm-.8,5.9c.5,0,1,0,1.4-.3s.7-.5,.8-.9v-1.1h-2.6c-.2,0-.4,0-.5,.2s-.2,.2-.3,.4v.6c0,.4,0,.6,.3,.8s.5,.3,1,.3h0Z" style="fill: #fff;"/>
<path d="M666.3,675.1h.7v.9h-1.7c-.2,0-.4-.2-.6-.3-.2-.2-.3-.4-.3-.6,0-.3,0-.6,0-1v-3.7h-1v-.9h1v-1.5h1v1.5h1.6v.9h-1.6v4.2c0,0,0,.3,0,.4s.2,.2,.3,.2h.6Z" style="fill: #fff;"/>
<path d="M673.8,669.3v6.5h-.9v-.9l-.5,.5c0,0-.3,.2-.5,.3-.2,0-.4,0-.6,.2h-.6c-.4,0-.8,0-1.1-.2-.3,0-.5-.2-.7-.4s-.3-.4-.3-.7,0-.5,0-.9v-4.5h1v4.8c0,.2,0,.4,.2,.5s.2,.2,.4,.3,.4,0,.6,0h.6c.2,0,.4,0,.5-.2s.3-.2,.4-.4c0-.2,.2-.4,.3-.7v-4.4h1.3Z" style="fill: #fff;"/>
<path d="M679.5,669.2v.9h-.8c-.2,0-.4,0-.6,.2-.2,0-.3,.3-.5,.4,0,.2-.3,.4-.3,.7v4.3h-1v-6.5h1v1.2c0-.3,.2-.5,.4-.7s.3-.3,.5-.4c.2,0,.4-.2,.6-.2h.7Z" style="fill: #fff;"/>
<path d="M686.1,671.9v.7l-4.4,.3c0,.4,0,.7,0,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,0,1,0s.7,0,1.1,0,.7-.2,.9-.3v1s-.2,0-.4,0c-.2,0-.3,0-.5,0h-1.3c-.5,0-.9,0-1.3-.2-.4,0-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.6,0-1.2,.2-1.6c0-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4,0,.8-.2,1.2-.2s1,0,1.3,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1,0v-.7c0-.2,0-.4-.2-.6s-.3-.3-.5-.4c-.2,0-.5-.2-.8-.2s-.7,0-.9,0c-.2,0-.4,.2-.6,.4,0,.2-.2,.4-.3,.7v.9l3.4-.3h-.1Z" style="fill: #fff;"/>
</g>
<g>
<path d="M564.9,690.3h.7l2,7.4h0l2.4-7.4h.9l2.5,7.4h0l2-7.4h.7l-2.3,8.2h-.8l-2.5-7.5h0l-2.5,7.5h-.8l-2.3-8.2h0Z" style="fill: #fff;"/>
<path d="M576.7,690.3h.7l2,7.4h0l2.4-7.4h.9l2.5,7.4h0l2-7.4h.7l-2.3,8.2h-.8l-2.5-7.5h0l-2.5,7.5h-.8l-2.3-8.2h0Z" style="fill: #fff;"/>
<path d="M588.4,690.3h.7l2,7.4h0l2.4-7.4h.9l2.5,7.4h0l2-7.4h.7l-2.3,8.2h-.8l-2.5-7.5h0l-2.5,7.5h-.8l-2.3-8.2h0Z" style="fill: #fff;"/>
<path d="M600.9,698.6c-.2,0-.4,0-.5,0,0,0,0-.3,0-.6s0-.5,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.3,0,.5s0,.5,0,.6c0,0-.3,0-.5,0Z" style="fill: #fff;"/>
<path d="M610.6,690.3v7.6c0,1.1-.3,2-.9,2.6-.6,.6-1.6,.9-2.8,.9s-.7,0-1,0-.6,0-.8,0v-.7c.3,0,.6,0,.9,.2h1c1.1,0,1.8-.3,2.3-.8s.7-1.3,.7-2.3v-1.1c-.2,.6-.5,1-1,1.3s-1.1,.5-2,.5-1.1,0-1.5-.3c-.4-.2-.7-.4-1-.8-.2-.3-.4-.8-.5-1.3s-.2-1.1-.2-1.8,0-1.2,.2-1.7c0-.5,.3-1,.5-1.3,.2-.4,.6-.6,1-.8s.9-.3,1.5-.3,.8,0,1.2,0c.3,0,.6,.2,.8,.4l.6,.6c.2,.2,.3,.5,.4,.8v-1.7h.6Zm-3.5,7.6c.6,0,1,0,1.4-.3s.7-.4,.9-.7,.4-.7,.5-1.1,0-.9,0-1.4,0-1,0-1.4c0-.4-.2-.8-.5-1.1s-.5-.6-.9-.7-.8-.3-1.4-.3-1,0-1.3,.2-.6,.4-.8,.7-.3,.7-.4,1.1c0,.4,0,.9,0,1.5s0,1.1,0,1.5c0,.4,.2,.8,.4,1.1s.5,.5,.8,.7,.8,.2,1.3,.2Z" style="fill: #fff;"/>
<path d="M619.4,693.5v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M627.8,693.5v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M636.1,693.5v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M640.6,697.9h1.1v.6h-2c-.3,0-.5-.2-.6-.4-.2-.2-.3-.4-.3-.8s0-.8,0-1.3v-5.1h-1.3v-.6h1.3v-1.9h.7v1.9h2.3v.6h-2.3v6c0,.2,0,.4,.2,.6s.2,.2,.4,.3h.6Z" style="fill: #fff;"/>
<path d="M649.1,693.5v.8l-5.8,.4c0,.6,0,1.1,.2,1.5,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.4,.2,.9,0,1.3,0c.5,0,.9-.2,1.2-.4v.7c0,0-.3,0-.5,.2-.2,0-.4,0-.6,.2-.2,0-.5,0-.7,0h-.8c-.6,0-1.2,0-1.6-.2-.5,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2,.3-1,.6-1.3,.6-.6,1.1-.7c.4,0,1-.2,1.6-.2s1.2,0,1.6,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.1,0,.8,0,1.2v-.2Zm-.7,.2v-1.2c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.8,.6s-.4,.6-.5,1c0,.4,0,.9-.2,1.5l5.1-.4h0Z" style="fill: #fff;"/>
<path d="M654.4,698.6c-.6,0-1.1,0-1.6-.2-.4,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2c0-.5,.3-1,.6-1.3s.6-.6,1.1-.7c.4,0,.9-.2,1.6-.2h1.2c.3,0,.7,0,.9,.2v.7c-.3,0-.6-.2-1-.2h-1.1c-.4,0-.9,0-1.3,.2-.3,0-.6,.3-.8,.6s-.4,.6-.5,1.1c0,.5,0,1,0,1.7s0,1.2,0,1.7c0,.5,.2,.8,.5,1.1,.2,.3,.5,.5,.8,.6s.8,.2,1.3,.2,.8,0,1.2,0c.3,0,.7-.2,1-.3v.7c-.2,0-.5,.2-.9,.3-.4,0-.8,0-1.2,0v-.2Z" style="fill: #fff;"/>
<path d="M662,690.1c.5,0,.9,0,1.3,.2,.3,0,.6,.3,.8,.5s.3,.5,.4,.8c0,.3,0,.7,0,1.1v5.7h-.7v-6.4c0-.3-.2-.6-.3-.7-.2-.2-.4-.3-.6-.4s-.6,0-1,0h-.8c-.3,0-.5,0-.8,.3s-.5,.3-.7,.6-.3,.6-.4,1v5.7h-.7v-11.5h.7v4.7c0-.3,.2-.5,.4-.7s.4-.4,.7-.5,.5-.2,.8-.3,.6,0,.9,0h-.1Z" style="fill: #fff;"/>
<path d="M668,698.6c-.2,0-.4,0-.5,0,0,0,0-.3,0-.6s0-.5,0-.5c0,0,.3,0,.5,0s.4,0,.5,0c0,0,0,.3,0,.5s0,.5,0,.6c0,0-.3,0-.5,0Z" style="fill: #fff;"/>
<path d="M673.6,698.6c-.6,0-1.1,0-1.6-.2-.4,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2c0-.5,.3-1,.6-1.3s.6-.6,1.1-.7c.4,0,.9-.2,1.6-.2h1.2c.3,0,.7,0,.9,.2v.7c-.3,0-.6-.2-1-.2h-1.1c-.4,0-.9,0-1.3,.2-.3,0-.6,.3-.8,.6s-.4,.6-.5,1.1c0,.5,0,1,0,1.7s0,1.2,0,1.7c0,.5,.2,.8,.5,1.1,.2,.3,.5,.5,.8,.6s.8,.2,1.3,.2,.8,0,1.2,0c.3,0,.7-.2,1-.3v.7c-.2,0-.5,.2-.9,.3-.4,0-.8,0-1.2,0v-.2Z" style="fill: #fff;"/>
<path d="M680.8,698.6c-.6,0-1.2,0-1.6-.2-.4,0-.8-.4-1.1-.7s-.5-.8-.6-1.3-.2-1.2-.2-2,0-1.5,.2-2c0-.5,.3-1,.6-1.3s.6-.6,1.1-.7,1-.2,1.6-.2,1.1,0,1.6,.2c.4,0,.8,.4,1.1,.7s.5,.8,.6,1.3,.2,1.2,.2,2,0,1.5-.2,2c0,.5-.3,1-.6,1.3s-.7,.6-1.1,.7c-.4,0-1,.2-1.6,.2Zm0-.6c.5,0,1,0,1.4-.2,.4,0,.6-.3,.9-.6,.2-.3,.4-.7,.5-1.1s0-1,0-1.7,0-1.2,0-1.7-.2-.8-.5-1.1-.5-.5-.9-.6-.8-.2-1.3-.2-1,0-1.3,.2c-.4,0-.6,.3-.9,.6-.2,.3-.4,.7-.4,1.1s0,1,0,1.7,0,1.2,0,1.7c0,.5,.2,.8,.4,1.1s.5,.5,.9,.6,.8,.2,1.3,.2h-.1Z" style="fill: #fff;"/>
<path d="M694.9,690.1c.5,0,.9,0,1.2,.2,.3,0,.6,.3,.8,.5s.3,.5,.4,.8c0,.3,0,.7,0,1.1v5.7h-.7v-6.4c0-.3,0-.6-.3-.7,0-.2-.3-.3-.6-.4-.2,0-.6,0-.9,0h-.8c-.3,0-.5,0-.7,.3-.2,0-.4,.3-.6,.6-.2,.3-.3,.6-.4,1h0v5.7h-.7v-6.4c0-.3,0-.6-.3-.7,0-.2-.3-.3-.6-.4s-.6,0-.9,0h-.8c-.3,0-.5,0-.7,.3-.2,0-.4,.3-.6,.6-.2,.2-.3,.6-.4,1v5.8h-.7v-8.2h.7v1.4c0-.3,.2-.5,.4-.7s.4-.3,.6-.5c.2,0,.5-.2,.7-.3s.6,0,.8,0c.7,0,1.3,0,1.6,.4,.4,.3,.6,.7,.7,1.2,0-.3,.2-.5,.4-.7s.4-.4,.6-.5,.5-.2,.8-.3,.6,0,.9,0v-.2Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M34.1,698.5c-.4,0-.6,0-.7,0h0c-.3,0-.6-.1-.9-.2l-1.6-.6c-.3-.1-.7-.4-1.2-.7l-1.1-.9c-1-.9-1.7-2.3-2.3-4.2-.4-1.5-.6-3.4-.6-5.7s.3-4.3,1-6c.8-2.1,2.2-3.7,4.3-4.8,.6-.3,1.3-.6,2.3-.7,1-.1,5.1-.2,12.6-.2v4.2h-9.8c-1.9,0-3.3,.8-4.2,2.4-.7,1.2-1,2.8-1,4.8v2.5c.1,.4,.2,.6,.2,.8h0c0,.4,0,.8,.2,1,.2,1.2,.7,2.2,1.5,2.9,.8,.7,3.6,1.1,8.5,1.1v-5.6h-6.1v-4.3h10.8v14.3h-11.6Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M58.3,698.5h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2-.1-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.3-.5-.9-.9-1.9-1.1-3-.3-1-.4-2.1-.4-3.3,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4.1,.9-1.3,2-2.2,3.3-2.8,.5-.2,1.3-.4,2.3-.6,.9-.1,4.3-.2,10.1-.2v4.2h-7.5c-3.4,0-5.2,1.9-5.2,5.6h12.7v4.2h-12.7c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.8v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M78.8,698.5h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2-.1-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.3-.5-.9-.9-1.9-1.1-3-.3-1-.4-2.1-.4-3.3,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4.1,.9-1.3,2-2.2,3.3-2.8,.5-.2,1.3-.4,2.3-.6,.9-.1,4.3-.2,10.1-.2v4.2h-7.5c-3.4,0-5.2,1.9-5.2,5.6h12.7v4.2h-12.7c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.8v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M99.3,698.5h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2-.1-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.3-.5-.9-.9-1.9-1.1-3-.3-1-.4-2.1-.4-3.3,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4.1,.9-1.3,2-2.2,3.3-2.8,.5-.2,1.3-.4,2.3-.6,.9-.1,4.3-.2,10.1-.2v4.2h-7.5c-3.4,0-5.2,1.9-5.2,5.6h12.7v4.2h-12.7c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.8v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="120.6 678.6 120.6 698.5 115.8 698.5 115.8 678.6 108.9 678.6 108.9 674.4 127.7 674.4 127.7 678.6 120.6 678.6" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M138.7,698.5h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2-.1-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.3-.5-.9-.9-1.9-1.1-3-.3-1-.4-2.1-.4-3.3,0-2.2,.2-4.1,.5-5.6,.3-1.6,.9-2.9,1.6-4.1,.9-1.3,2-2.2,3.3-2.8,.5-.2,1.3-.4,2.3-.6,.9-.1,4.3-.2,10.1-.2v4.2h-7.5c-3.4,0-5.2,1.9-5.2,5.6h12.7v4.2h-12.7c0,1,0,1.8,.2,2.4,0,.4,.2,.7,.3,1,.1,.2,.3,.5,.5,.8l.8,.9c.3,.2,.6,.4,1,.5,.4,.1,.8,.2,1.1,.2h8.8v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M159.2,698.5h-1.9c0-.1-.7-.1-.7-.1-.2,0-.4,0-.6-.1-.1,0-.2,0-.2-.1-.1,0-.2,0-.3,0-2.2-.6-3.8-2-5-4.3-1-1.9-1.5-4-1.5-6.2s.2-4.1,.5-5.6c.3-1.6,.9-2.9,1.6-4.1,.9-1.3,2-2.2,3.3-2.8,.8-.3,1.6-.5,2.3-.6,.9-.1,4.2-.2,10.1-.2v4.1h-7.5c-1.5,0-2.6,.4-3.5,1.3-.7,.8-1.2,1.8-1.5,3.1-.3,1.4-.4,2.8-.4,4.3s.2,3,.5,4.1c.5,1.5,1.4,2.4,2.6,2.8h.5c0,.1,.5,.2,.5,.2h8.8v4.2h-7.7Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="183.3 698.5 183.3 688.4 174.9 688.4 174.9 698.5 170.3 698.5 170.3 674.3 174.9 674.3 174.9 684.1 183.3 684.1 183.3 674.3 187.9 674.3 187.9 698.5 183.3 698.5" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="7.1" y="7.1" width="708.7" height="708.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="205.5" y1="687.4" x2="545.7" y2="687.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="659.1" x2="545.7" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="630.7" x2="715.7" y2="630.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="602.4" x2="715.7" y2="602.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="574" x2="715.7" y2="574" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="545.7" x2="715.7" y2="545.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="517.3" x2="715.7" y2="517.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="489" x2="715.7" y2="489" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="460.6" x2="715.7" y2="460.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="432.3" x2="715.7" y2="432.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="403.9" x2="715.7" y2="403.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="375.6" x2="715.7" y2="375.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="347.2" x2="715.7" y2="347.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="318.9" x2="715.7" y2="318.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="290.6" x2="715.7" y2="290.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="262.2" x2="715.7" y2="262.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="233.9" x2="715.7" y2="233.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="205.5" x2="715.7" y2="205.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="177.2" x2="715.7" y2="177.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="148.8" x2="715.7" y2="148.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="120.5" x2="715.7" y2="120.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="92.1" x2="715.7" y2="92.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="63.8" x2="715.7" y2="63.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="7.1" y1="35.4" x2="715.7" y2="35.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="687.4" y1="7.1" x2="687.4" y2="630.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="659.1" y1="7.1" x2="659.1" y2="630.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="630.7" y1="7.1" x2="630.7" y2="630.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="602.4" y1="7.1" x2="602.4" y2="630.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="574" y1="7.1" x2="574" y2="630.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="545.7" y1="7.1" x2="545.7" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="517.3" y1="7.1" x2="517.3" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="489" y1="7.1" x2="489" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="460.6" y1="7.1" x2="460.6" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="432.3" y1="7.1" x2="432.3" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="403.9" y1="7.1" x2="403.9" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="375.6" y1="7.1" x2="375.6" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="347.2" y1="7.1" x2="347.2" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="318.9" y1="7.1" x2="318.9" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="290.6" y1="7.1" x2="290.6" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="262.2" y1="7.1" x2="262.2" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="233.9" y1="7.1" x2="233.9" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="205.5" y1="7.1" x2="205.5" y2="715.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="177.2" y1="7.1" x2="177.2" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="148.8" y1="7.1" x2="148.8" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="120.5" y1="7.1" x2="120.5" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="92.1" y1="7.1" x2="92.1" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="63.8" y1="7.1" x2="63.8" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="35.4" y1="7.1" x2="35.4" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

View File

@ -0,0 +1,114 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="300mm" height="180mm" viewBox="0 0 850.4 510.2">
<g>
<rect x="702.4" y="437.4" width="131" height="41.2" style="fill: none;"/>
<g>
<path d="M743.5,470h0l-15.2-26.2c-.1-.3-.4-.4-.7-.4s-.6,.2-.7,.4l-15.2,26.2c-.1,.3-.1,.6,0,.8,.1,.3,.4,.4,.7,.4h30.4c.3,0,.6-.2,.7-.4,.1-.3,.1-.6,0-.8h.1Zm-29.6-.4l13.7-23.6,13.7,23.6h-27.3Z" style="fill: #fff;"/>
<rect x="720.9" y="466.6" width="13.3" height="1.4" style="fill: #fff;"/>
<path d="M724.9,465.7l-.7-.5c1.4-2,.6-3.1-.1-4.5-.8-1.4-1.8-3,0-5.5l.7,.5c-1.4,1.9-.7,3.1,0,4.5,.8,1.4,1.8,3,0,5.5h.1Z" style="fill: #fff;"/>
<path d="M728.2,465.7l-.7-.5c1.4-2,.6-3.1-.1-4.5-.8-1.4-1.8-3,0-5.3l.7,.5c-1.4,1.9-.7,3.1,0,4.5,.8,1.4,1.8,3,0,5.3h.1Z" style="fill: #fff;"/>
<path d="M731.4,465.7l-.7-.5c1.4-2,.7-3.1,0-4.5-.8-1.5-1.7-3,0-5.5l.7,.5c-1.4,2-.7,3.1,0,4.5,.8,1.5,1.7,3,0,5.5Z" style="fill: #fff;"/>
</g>
<g>
<path d="M751.4,454.8c-.6,0-1.2,0-1.7-.2-.5-.1-.9-.3-1.3-.7-.3-.3-.6-.8-.8-1.4-.2-.6-.3-1.4-.3-2.3s0-1.6,.3-2.1c.2-.6,.4-1,.8-1.4,.3-.3,.7-.6,1.3-.7,.5-.1,1.1-.2,1.7-.2h1.1c.3,0,.6,.1,.8,.2v1c-.2,0-.5-.2-.8-.2h-1.1c-.4,0-.9,0-1.3,.2-.4,.1-.6,.3-.9,.6-.2,.3-.4,.6-.5,1s-.2,.9-.2,1.7,0,1.3,.2,1.7c.1,.4,.3,.8,.5,1s.5,.4,.8,.5,.7,.2,1.3,.2h1.1c.3,0,.6-.1,.9-.2v.9c-.2,.1-.5,.2-.9,.3-.3,0-.7,.1-1.3,.1l.3-.2Z" style="fill: #fff;"/>
<path d="M757.9,447.8c.5,0,.9,0,1.4,.2,.3,0,.6,.2,.8,.4s.3,.4,.4,.6c0,.2,.1,.5,.1,.8v4.8h-.9l-.2-1c0,.2-.2,.3-.4,.5s-.3,.3-.5,.3-.4,.2-.7,.2h-.7c-.8,0-1.4-.2-1.8-.5s-.5-.8-.5-1.5,0-.7,.2-1c.1-.3,.3-.5,.5-.6,.2-.2,.5-.3,.8-.3s.7-.1,1.2-.1h2.1v-1c0-.2-.1-.3-.2-.4s-.3-.2-.5-.3h-1.6c-.2,0-.5,0-.7,.1v-.9h1.5v-.2Zm-.8,6.2c.5,0,1.1-.1,1.5-.3s.7-.5,.8-.9v-1.2h-2.7c-.2,0-.4,0-.5,.2s-.2,.2-.3,.4v.6c0,.4,0,.6,.3,.8s.5,.3,1.1,.3h-.1Z" style="fill: #fff;"/>
<path d="M768.4,447.9v6.8h-.9v-.9l-.5,.5c-.1,.1-.3,.2-.5,.3-.2,0-.4,.1-.6,.2h-.6c-.4,0-.8,0-1.2-.2-.3-.1-.5-.2-.7-.4s-.3-.4-.3-.7-.1-.5-.1-.9v-4.7h1.1v5c0,.2,0,.4,.2,.5s.2,.2,.4,.3,.4,.1,.6,.1h.6c.2,0,.4,0,.5-.2s.3-.2,.4-.4c.1-.2,.2-.4,.3-.7v-4.6h1.4Z" style="fill: #fff;"/>
<path d="M772.9,453.8h.7v.9h-1.8c-.2,0-.4-.2-.6-.3-.2-.2-.3-.4-.3-.6,0-.3-.1-.6-.1-1v-3.9h-1.1v-.9h1.1v-1.6h1.1v1.6h1.7v.9h-1.7v4.4c0,.1,0,.3,.1,.4s.2,.2,.3,.2h.6Z" style="fill: #fff;"/>
<path d="M775.5,446.6c-.2,0-.4,0-.5-.1,0,0-.1-.2-.1-.5s0-.4,.1-.5c0,0,.3-.1,.5-.1s.4,0,.5,.1c0,0,.1,.2,.1,.5s0,.4-.1,.5c0,0-.3,.1-.5,.1Zm-.5,1.3h1.1v6.8h-1.1v-6.8Z" style="fill: #fff;"/>
<path d="M781.2,454.8c-.5,0-.9,0-1.4-.2-.4-.1-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.7,0-1.3,.2-1.7c.1-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4-.1,.8-.2,1.4-.2s.9,0,1.4,.2c.4,.1,.7,.3,.9,.6,.3,.3,.4,.6,.6,1,.1,.4,.2,1,.2,1.7s0,1.3-.2,1.7c-.1,.4-.3,.8-.6,1-.3,.3-.6,.4-.9,.6-.4,.1-.8,.2-1.4,.2Zm0-.9c.4,0,.7,0,.9-.1s.4-.2,.6-.4c.1-.2,.2-.4,.3-.8s0-.7,0-1.3v-1.3c0-.3-.2-.6-.3-.8s-.3-.3-.6-.4c-.2,0-.5-.1-.9-.1s-.7,0-.9,.1c-.2,0-.4,.2-.6,.4-.1,.2-.3,.5-.3,.8v2.5c0,.3,.2,.6,.3,.8,.2,.2,.3,.3,.6,.4s.5,.1,.9,.1Z" style="fill: #fff;"/>
<path d="M789.5,447.8c.4,0,.8,0,1.2,.2,.3,.1,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,.1,.5,.1,.9v4.7h-1.1v-5c0-.2,0-.4-.2-.5,0-.1-.2-.2-.4-.3s-.4-.1-.6-.1h-.6c-.2,0-.4,0-.6,.2s-.3,.2-.5,.4-.3,.4-.3,.7v4.6h-1.1v-6.8h1.1v.9c0-.2,.2-.4,.4-.5s.3-.2,.5-.3,.4-.1,.6-.2,.4,0,.6,0h-.2Z" style="fill: #fff;"/>
<path d="M804,445.9v8.8h-1.2v-4.3h-4.3v4.3h-1.2v-8.8h1.2v3.6h4.3v-3.6h1.2Z" style="fill: #fff;"/>
<path d="M806.9,446.6c-.2,0-.4,0-.5-.1,0,0-.1-.2-.1-.5s0-.4,.1-.5c0,0,.3-.1,.5-.1s.4,0,.5,.1c0,0,.1,.2,.1,.5s0,.4-.1,.5c0,0-.3,.1-.5,.1Zm-.5,1.3h1.1v6.8h-1.1v-6.8Z" style="fill: #fff;"/>
<path d="M815.5,447.9v6.4c0,.9-.3,1.7-.8,2.2s-1.4,.8-2.5,.8-.6,0-.8,0c-.3,0-.5,0-.7-.1v-.9c.5,0,1.1,.1,1.7,.1s1.4-.2,1.7-.5,.5-.9,.5-1.7v-.7c-.1,.4-.4,.7-.7,.9s-.8,.3-1.5,.3-1.1,0-1.4-.2-.6-.4-.8-.7-.3-.6-.4-1c0-.4-.1-.9-.1-1.5s0-.9,.1-1.4c0-.4,.2-.8,.4-1.2s.5-.5,.8-.7,.8-.3,1.4-.3,.6,0,.9,.1c.2,0,.4,.2,.6,.3,.2,.1,.3,.3,.4,.4,.1,.2,.2,.3,.3,.5v-1.3h.9Zm-3.2,6c.4,0,.7,0,1.1-.2,.3-.1,.5-.3,.6-.5s.3-.5,.3-.8v-2.1c0-.3-.2-.6-.3-.8s-.4-.4-.6-.5-.6-.2-1.1-.2-.7,0-.9,.2c-.2,.1-.4,.3-.5,.5s-.2,.5-.2,.8v2c0,.3,.1,.6,.2,.8,.1,.2,.3,.4,.5,.5s.5,.2,.9,.2h0Z" style="fill: #fff;"/>
<path d="M821,447.8c.4,0,.8,0,1.2,.2,.3,.1,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,.1,.5,.1,.9v4.7h-1.1v-5c0-.2,0-.4-.2-.5,0-.1-.2-.2-.4-.3s-.4-.1-.6-.1h-.6c-.2,0-.4,0-.6,.2s-.3,.2-.5,.4-.3,.4-.3,.7v4.6h-1.1v-9.6h1.1v3.8c0-.2,.2-.4,.4-.5s.3-.2,.5-.3,.4-.1,.6-.2,.4,0,.6,0h-.2Z" style="fill: #fff;"/>
<path d="M752.9,462.1h-2.5v7.8h-1.2v-7.8h-2.5v-1h6.3v1h-.1Z" style="fill: #fff;"/>
<path d="M759.4,465.7v.7l-4.6,.3c0,.4,0,.7,.1,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,.1,1.1,.1s.7,0,1.2-.1,.7-.2,.9-.3v1s-.2,0-.4,.1c-.2,0-.3,0-.5,.1h-1.4c-.5,0-.9,0-1.4-.2-.4-.1-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.7,0-1.3,.2-1.7c.1-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4-.1,.8-.2,1.3-.2s1.1,0,1.4,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1.1,0v-.7c0-.2-.1-.4-.2-.6s-.3-.3-.5-.4c-.2-.1-.5-.2-.8-.2s-.7,0-.9,.1c-.2,0-.4,.2-.6,.4-.1,.2-.2,.4-.3,.7v.9l3.6-.3h-.1Z" style="fill: #fff;"/>
<path d="M768.7,462.9c.4,0,.7,0,1.1,.2,.3,.1,.5,.3,.7,.4,.2,.2,.3,.4,.4,.7,0,.3,.1,.5,.1,.9v4.7h-1.1v-4.3c0-.5,0-.9-.3-1.3-.2-.3-.5-.4-1.1-.4h-.5c-.1,0-.3,0-.5,.2-.1,0-.3,.2-.4,.3-.1,.1-.2,.3-.3,.6h0v4.8h-1.1v-4.3c0-.5,0-.9-.2-1.3s-.5-.4-1.1-.4h-.6c-.2,0-.3,0-.5,.2-.1,0-.3,.2-.4,.4-.1,.2-.2,.4-.3,.6v4.7h-1.1v-6.8h1.1v.9c.2-.4,.5-.6,.8-.8,.3-.1,.7-.2,1.2-.2s.9,0,1.3,.3c.3,.2,.5,.4,.7,.8,0-.2,.2-.4,.4-.5,.1-.1,.3-.2,.5-.3,.2,0,.4-.1,.6-.2s.4,0,.6,0v-.2Z" style="fill: #fff;"/>
<path d="M776.8,462.9c.5,0,1.1,0,1.4,.2s.6,.4,.8,.7,.3,.7,.4,1.2c0,.4,.1,.9,.1,1.5s0,.9-.1,1.4c0,.4-.2,.8-.4,1.2s-.5,.6-.8,.7c-.3,.2-.8,.3-1.4,.3s-1.2-.1-1.5-.3c-.3-.2-.5-.5-.7-.9v3.7h-1.1v-9.3h1.1v1.3c.1-.4,.4-.7,.7-.9s.8-.4,1.5-.4h0Zm-.1,6.1c.4,0,.7,0,.9-.2s.4-.3,.5-.6c.1-.2,.2-.5,.2-.8v-2c0-.3-.1-.6-.2-.8-.1-.2-.3-.4-.5-.5s-.5-.2-.9-.2-.7,0-1.1,.2-.5,.3-.6,.5c-.2,.2-.3,.5-.3,.8v2.1c0,.3,.2,.6,.3,.8,.2,.2,.4,.4,.6,.5,.3,.1,.6,.2,1.1,.2Z" style="fill: #fff;"/>
<path d="M787.3,465.7v.7l-4.6,.3c0,.4,0,.7,.1,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,.1,1.1,.1s.7,0,1.2-.1,.7-.2,.9-.3v1s-.2,0-.4,.1c-.2,0-.3,0-.5,.1h-1.4c-.5,0-.9,0-1.4-.2-.4-.1-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.7,0-1.3,.2-1.7c.1-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4-.1,.8-.2,1.3-.2s1.1,0,1.4,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1.1,0v-.7c0-.2-.1-.4-.2-.6s-.3-.3-.5-.4c-.2-.1-.5-.2-.8-.2s-.7,0-.9,.1c-.2,0-.4,.2-.6,.4-.1,.2-.2,.4-.3,.7v.9l3.6-.3h-.1Z" style="fill: #fff;"/>
<path d="M792.9,462.9v.9h-.8c-.2,0-.4,.1-.6,.2-.2,.1-.3,.3-.5,.4-.1,.2-.3,.4-.3,.7v4.5h-1.1v-6.8h1.1v1.3c.1-.3,.2-.5,.4-.7s.3-.3,.5-.4c.2,0,.4-.2,.6-.2h.7Z" style="fill: #fff;"/>
<path d="M796.8,462.9c.5,0,.9,0,1.4,.2,.3,0,.6,.2,.8,.4s.3,.4,.4,.6c0,.2,.1,.5,.1,.8v4.8h-.9l-.2-1c0,.2-.2,.3-.4,.5s-.3,.3-.5,.3-.4,.2-.7,.2h-.7c-.8,0-1.4-.2-1.8-.5s-.5-.8-.5-1.5,0-.7,.2-1c.1-.3,.3-.5,.5-.6,.2-.2,.5-.3,.8-.3s.7-.1,1.2-.1h2.1v-1c0-.2-.1-.3-.2-.4s-.3-.2-.5-.3h-1.6c-.2,0-.5,0-.7,.1v-.9h1.5v-.2Zm-.8,6.2c.5,0,1.1-.1,1.5-.3s.7-.5,.8-.9v-1.2h-2.7c-.2,0-.4,0-.5,.2s-.2,.2-.3,.4v.6c0,.4,0,.6,.3,.8s.5,.3,1.1,.3h-.1Z" style="fill: #fff;"/>
<path d="M804.2,469h.7v.9h-1.8c-.2,0-.4-.2-.6-.3-.2-.2-.3-.4-.3-.6,0-.3-.1-.6-.1-1v-3.9h-1.1v-.9h1.1v-1.6h1.1v1.6h1.7v.9h-1.7v4.4c0,.1,0,.3,.1,.4s.2,.2,.3,.2h.6Z" style="fill: #fff;"/>
<path d="M812.1,463v6.8h-.9v-.9l-.5,.5c-.1,.1-.3,.2-.5,.3-.2,0-.4,.1-.6,.2h-.6c-.4,0-.8,0-1.2-.2-.3-.1-.5-.2-.7-.4s-.3-.4-.3-.7-.1-.5-.1-.9v-4.7h1.1v5c0,.2,0,.4,.2,.5s.2,.2,.4,.3,.4,.1,.6,.1h.6c.2,0,.4,0,.5-.2s.3-.2,.4-.4c.1-.2,.2-.4,.3-.7v-4.6h1.4Z" style="fill: #fff;"/>
<path d="M818.1,462.9v.9h-.8c-.2,0-.4,.1-.6,.2-.2,.1-.3,.3-.5,.4-.1,.2-.3,.4-.3,.7v4.5h-1.1v-6.8h1.1v1.3c.1-.3,.2-.5,.4-.7s.3-.3,.5-.4c.2,0,.4-.2,.6-.2h.7Z" style="fill: #fff;"/>
<path d="M825,465.7v.7l-4.6,.3c0,.4,0,.7,.1,.9,0,.3,.2,.5,.3,.6,.2,.2,.4,.3,.6,.4,.3,0,.6,.1,1.1,.1s.7,0,1.2-.1,.7-.2,.9-.3v1s-.2,0-.4,.1c-.2,0-.3,0-.5,.1h-1.4c-.5,0-.9,0-1.4-.2-.4-.1-.7-.3-.9-.6-.3-.3-.5-.6-.6-1s-.2-1-.2-1.7,0-1.3,.2-1.7c.1-.4,.3-.8,.6-1,.3-.3,.6-.4,.9-.6,.4-.1,.8-.2,1.3-.2s1.1,0,1.4,.2,.6,.4,.8,.6c.2,.3,.3,.6,.4,.9v1l.2,.3Zm-1.1,0v-.7c0-.2-.1-.4-.2-.6s-.3-.3-.5-.4c-.2-.1-.5-.2-.8-.2s-.7,0-.9,.1c-.2,0-.4,.2-.6,.4-.1,.2-.2,.4-.3,.7v.9l3.6-.3h-.1Z" style="fill: #fff;"/>
</g>
<g>
<path d="M697.7,485h.7l2.1,7.8h0l2.5-7.8h.9l2.6,7.8h0l2.1-7.8h.7l-2.4,8.6h-.8l-2.6-7.9h0l-2.6,7.9h-.8l-2.4-8.6h0Z" style="fill: #fff;"/>
<path d="M710.1,485h.7l2.1,7.8h0l2.5-7.8h.9l2.6,7.8h0l2.1-7.8h.7l-2.4,8.6h-.8l-2.6-7.9h0l-2.6,7.9h-.8l-2.4-8.6h0Z" style="fill: #fff;"/>
<path d="M722.4,485h.7l2.1,7.8h0l2.5-7.8h.9l2.6,7.8h0l2.1-7.8h.7l-2.4,8.6h-.8l-2.6-7.9h0l-2.6,7.9h-.8l-2.4-8.6h0Z" style="fill: #fff;"/>
<path d="M735.5,493.7c-.2,0-.4,0-.5-.1,0,0-.1-.3-.1-.6s0-.5,.1-.5c0,0,.3-.1,.5-.1s.4,0,.5,.1c0,0,.1,.3,.1,.5s0,.5-.1,.6c0,0-.3,.1-.5,.1Z" style="fill: #fff;"/>
<path d="M745.7,485v8c0,1.2-.3,2.1-.9,2.7-.6,.6-1.7,.9-2.9,.9s-.7,0-1.1,0-.6,0-.8-.1v-.7c.3,0,.6,.1,.9,.2h1.1c1.2,0,1.9-.3,2.4-.8s.7-1.4,.7-2.4v-1.2c-.2,.6-.5,1-1.1,1.4s-1.2,.5-2.1,.5-1.2,0-1.6-.3c-.4-.2-.7-.4-1.1-.8-.2-.3-.4-.8-.5-1.4s-.2-1.2-.2-1.9,0-1.3,.2-1.8c.1-.5,.3-1,.5-1.4,.2-.4,.6-.6,1.1-.8s.9-.3,1.6-.3,.8,0,1.3,.1c.3,0,.6,.2,.8,.4l.6,.6c.2,.2,.3,.5,.4,.8v-1.8h.6Zm-3.7,8c.6,0,1.1,0,1.5-.3s.7-.4,.9-.7,.4-.7,.5-1.2,.1-.9,.1-1.5,0-1-.1-1.5c0-.4-.2-.8-.5-1.2s-.5-.6-.9-.7-.8-.3-1.5-.3-1.1,0-1.4,.2-.6,.4-.8,.7-.3,.7-.4,1.2c0,.4-.1,.9-.1,1.6s0,1.2,.1,1.6c0,.4,.2,.8,.4,1.2s.5,.5,.8,.7,.8,.2,1.4,.2Z" style="fill: #fff;"/>
<path d="M754.9,488.3v.8l-6.1,.4c0,.6,0,1.2,.2,1.6,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.5,.2,.9,0,1.4-.1c.5,0,.9-.2,1.3-.4v.7c-.1,0-.3,.1-.5,.2-.2,0-.4,.1-.6,.2-.2,0-.5,0-.7,.1h-.8c-.6,0-1.3,0-1.7-.2-.5-.1-.8-.4-1.2-.7s-.5-.8-.6-1.4-.2-1.3-.2-2.1,0-1.6,.2-2.1,.3-1,.6-1.4,.6-.6,1.2-.7c.4-.1,1.1-.2,1.7-.2s1.3,.1,1.7,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.2,0,.8,0,1.3v-.2Zm-.7,.2v-1.3c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.4-.2-1.1,0-1.4,.2c-.4,.1-.6,.3-.8,.6s-.4,.6-.5,1c0,.4-.1,.9-.2,1.6l5.4-.4h0Z" style="fill: #fff;"/>
<path d="M763.8,488.3v.8l-6.1,.4c0,.6,0,1.2,.2,1.6,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.5,.2,.9,0,1.4-.1c.5,0,.9-.2,1.3-.4v.7c-.1,0-.3,.1-.5,.2-.2,0-.4,.1-.6,.2-.2,0-.5,0-.7,.1h-.8c-.6,0-1.3,0-1.7-.2-.5-.1-.8-.4-1.2-.7s-.5-.8-.6-1.4-.2-1.3-.2-2.1,0-1.6,.2-2.1,.3-1,.6-1.4,.6-.6,1.2-.7c.4-.1,1.1-.2,1.7-.2s1.3,.1,1.7,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.2,0,.8,0,1.3v-.2Zm-.7,.2v-1.3c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.4-.2-1.1,0-1.4,.2c-.4,.1-.6,.3-.8,.6s-.4,.6-.5,1c0,.4-.1,.9-.2,1.6l5.4-.4h0Z" style="fill: #fff;"/>
<path d="M772.5,488.3v.8l-6.1,.4c0,.6,0,1.2,.2,1.6,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.5,.2,.9,0,1.4-.1c.5,0,.9-.2,1.3-.4v.7c-.1,0-.3,.1-.5,.2-.2,0-.4,.1-.6,.2-.2,0-.5,0-.7,.1h-.8c-.6,0-1.3,0-1.7-.2-.5-.1-.8-.4-1.2-.7s-.5-.8-.6-1.4-.2-1.3-.2-2.1,0-1.6,.2-2.1,.3-1,.6-1.4,.6-.6,1.2-.7c.4-.1,1.1-.2,1.7-.2s1.3,.1,1.7,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.2,0,.8,0,1.3v-.2Zm-.7,.2v-1.3c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.4-.2-1.1,0-1.4,.2c-.4,.1-.6,.3-.8,.6s-.4,.6-.5,1c0,.4-.1,.9-.2,1.6l5.4-.4h0Z" style="fill: #fff;"/>
<path d="M777.2,492.9h1.2v.6h-2.1c-.3,0-.5-.2-.6-.4-.2-.2-.3-.4-.3-.8s-.1-.8-.1-1.4v-5.3h-1.4v-.6h1.4v-2h.7v2h2.4v.6h-2.4v6.3c0,.2,.1,.4,.2,.6s.2,.2,.4,.3h.6Z" style="fill: #fff;"/>
<path d="M786.2,488.3v.8l-6.1,.4c0,.6,0,1.2,.2,1.6,0,.4,.3,.8,.5,1,.2,.3,.5,.5,.9,.6s.8,.2,1.5,.2,.9,0,1.4-.1c.5,0,.9-.2,1.3-.4v.7c-.1,0-.3,.1-.5,.2-.2,0-.4,.1-.6,.2-.2,0-.5,0-.7,.1h-.8c-.6,0-1.3,0-1.7-.2-.5-.1-.8-.4-1.2-.7s-.5-.8-.6-1.4-.2-1.3-.2-2.1,0-1.6,.2-2.1,.3-1,.6-1.4,.6-.6,1.2-.7c.4-.1,1.1-.2,1.7-.2s1.3,.1,1.7,.3c.4,.2,.7,.5,.9,.8s.3,.7,.4,1.2,0,.8,0,1.3v-.2Zm-.7,.2v-1.3c0-.4-.2-.7-.3-.9-.2-.3-.4-.5-.7-.6s-.7-.2-1.4-.2-1.1,0-1.4,.2c-.4,.1-.6,.3-.8,.6s-.4,.6-.5,1c0,.4-.1,.9-.2,1.6l5.4-.4h0Z" style="fill: #fff;"/>
<path d="M791.7,493.7c-.6,0-1.2,0-1.7-.2-.4-.1-.8-.4-1.2-.7s-.5-.8-.6-1.4-.2-1.3-.2-2.1,0-1.6,.2-2.1c.1-.5,.3-1,.6-1.4s.6-.6,1.2-.7c.4-.1,.9-.2,1.7-.2h1.3c.3,0,.7,.1,.9,.2v.7c-.3-.1-.6-.2-1.1-.2h-1.2c-.4,0-.9,0-1.4,.2-.3,.1-.6,.3-.8,.6s-.4,.6-.5,1.2c0,.5-.1,1-.1,1.8s0,1.3,.1,1.8c0,.5,.2,.8,.5,1.2,.2,.3,.5,.5,.8,.6s.8,.2,1.4,.2,.8,0,1.3-.1c.3,0,.7-.2,1.1-.3v.7c-.2,0-.5,.2-.9,.3-.4,0-.8,.1-1.3,.1v-.2Z" style="fill: #fff;"/>
<path d="M799.7,484.8c.5,0,.9,0,1.4,.2,.3,.1,.6,.3,.8,.5s.3,.5,.4,.8c0,.3,.1,.7,.1,1.2v6h-.7v-6.7c0-.3-.2-.6-.3-.7-.2-.2-.4-.3-.6-.4s-.6-.1-1.1-.1h-.8c-.3,0-.5,.1-.8,.3s-.5,.3-.7,.6-.3,.6-.4,1v6h-.7v-12.1h.7v4.9c0-.3,.2-.5,.4-.7s.4-.4,.7-.5,.5-.2,.8-.3,.6,0,.9,0h-.1Z" style="fill: #fff;"/>
<path d="M806,493.7c-.2,0-.4,0-.5-.1,0,0-.1-.3-.1-.6s0-.5,.1-.5c0,0,.3-.1,.5-.1s.4,0,.5,.1c0,0,.1,.3,.1,.5s0,.5-.1,.6c0,0-.3,.1-.5,.1Z" style="fill: #fff;"/>
<path d="M811.9,493.7c-.6,0-1.2,0-1.7-.2-.4-.1-.8-.4-1.2-.7s-.5-.8-.6-1.4-.2-1.3-.2-2.1,0-1.6,.2-2.1c.1-.5,.3-1,.6-1.4s.6-.6,1.2-.7c.4-.1,.9-.2,1.7-.2h1.3c.3,0,.7,.1,.9,.2v.7c-.3-.1-.6-.2-1.1-.2h-1.2c-.4,0-.9,0-1.4,.2-.3,.1-.6,.3-.8,.6s-.4,.6-.5,1.2c0,.5-.1,1-.1,1.8s0,1.3,.1,1.8c0,.5,.2,.8,.5,1.2,.2,.3,.5,.5,.8,.6s.8,.2,1.4,.2,.8,0,1.3-.1c.3,0,.7-.2,1.1-.3v.7c-.2,0-.5,.2-.9,.3-.4,0-.8,.1-1.3,.1v-.2Z" style="fill: #fff;"/>
<path d="M819.5,493.7c-.6,0-1.3,0-1.7-.2-.4-.1-.8-.4-1.2-.7s-.5-.8-.6-1.4-.2-1.3-.2-2.1,0-1.6,.2-2.1c.1-.5,.3-1,.6-1.4s.6-.6,1.2-.7,1.1-.2,1.7-.2,1.2,0,1.7,.2c.4,.1,.8,.4,1.2,.7s.5,.8,.6,1.4,.2,1.3,.2,2.1,0,1.6-.2,2.1c-.1,.5-.3,1-.6,1.4s-.7,.6-1.2,.7c-.4,.1-1.1,.2-1.7,.2Zm0-.6c.5,0,1.1,0,1.5-.2,.4-.1,.6-.3,.9-.6,.2-.3,.4-.7,.5-1.2s.1-1,.1-1.8,0-1.3-.1-1.8-.2-.8-.5-1.2-.5-.5-.9-.6-.8-.2-1.4-.2-1.1,0-1.4,.2c-.4,.1-.6,.3-.9,.6-.2,.3-.4,.7-.4,1.2s-.1,1-.1,1.8,0,1.3,.1,1.8c0,.5,.2,.8,.4,1.2s.5,.5,.9,.6,.8,.2,1.4,.2h-.1Z" style="fill: #fff;"/>
<path d="M834.3,484.8c.5,0,.9,0,1.3,.2,.3,.1,.6,.3,.8,.5s.3,.5,.4,.8c0,.3,.1,.7,.1,1.2v6h-.7v-6.7c0-.3-.1-.6-.3-.7-.1-.2-.3-.3-.6-.4-.2,0-.6-.1-.9-.1h-.8c-.3,0-.5,.1-.7,.3-.2,.1-.4,.3-.6,.6-.2,.3-.3,.6-.4,1h0v6h-.7v-6.7c0-.3-.1-.6-.3-.7-.1-.2-.3-.3-.6-.4s-.6-.1-.9-.1h-.8c-.3,0-.5,.1-.7,.3-.2,.1-.4,.3-.6,.6-.2,.2-.3,.6-.4,1v6.1h-.7v-8.6h.7v1.5c0-.3,.2-.5,.4-.7s.4-.3,.6-.5c.2-.1,.5-.2,.7-.3s.6,0,.8,0c.7,0,1.4,.1,1.7,.4,.4,.3,.6,.7,.7,1.3,0-.3,.2-.5,.4-.7s.4-.4,.6-.5,.5-.2,.8-.3,.6,0,.9,0v-.2Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M27.5,493.9c-.4,0-.6,0-.7,0h0c-.3,0-.6-.1-.9-.2l-1.5-.6c-.3-.1-.6-.4-1.1-.7l-1-.9c-.9-.9-1.6-2.2-2.1-3.9-.4-1.4-.6-3.2-.6-5.3s.3-4.1,1-5.6c.7-2,2.1-3.5,4-4.5,.5-.3,1.3-.5,2.2-.7,.9-.1,4.8-.2,11.8-.2v3.9h-9.3c-1.8,0-3.1,.7-3.9,2.2-.6,1.2-.9,2.7-.9,4.5v2.4c.1,.3,.2,.6,.2,.8h0c0,.4,0,.7,.1,1,.2,1.1,.7,2,1.4,2.7,.7,.7,3.4,1,8,1v-5.3h-5.7v-4h10.1v13.4h-10.9Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M50.2,493.9h-1.8c0,0-.7-.1-.7-.1-.2,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2-.6-3.6-1.9-4.7-4-.5-.8-.8-1.8-1-2.8-.2-.9-.4-2-.4-3.1,0-2.1,.2-3.8,.5-5.3,.3-1.5,.8-2.7,1.5-3.8,.8-1.2,1.9-2.1,3.1-2.6,.5-.2,1.2-.4,2.2-.6,.8-.1,4-.2,9.5-.2v3.9h-7.1c-3.2,0-4.9,1.8-4.9,5.3h11.9v3.9h-11.9c0,.9,0,1.7,.2,2.3,0,.3,.1,.7,.3,.9,0,.2,.3,.5,.5,.8l.8,.8c.2,.2,.6,.4,.9,.5,.4,.1,.7,.2,1.1,.2h8.3v4h-7.3Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M69.6,493.9h-1.8c0,0-.7-.1-.7-.1-.2,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2-.6-3.6-1.9-4.7-4-.5-.8-.8-1.8-1-2.8-.2-.9-.4-2-.4-3.1,0-2.1,.2-3.8,.5-5.3,.3-1.5,.8-2.7,1.5-3.8,.8-1.2,1.9-2.1,3.1-2.6,.5-.2,1.2-.4,2.2-.6,.8-.1,4-.2,9.5-.2v3.9h-7.1c-3.2,0-4.9,1.8-4.9,5.3h11.9v3.9h-11.9c0,.9,0,1.7,.2,2.3,0,.3,.1,.7,.3,.9,0,.2,.3,.5,.5,.8l.8,.8c.2,.2,.6,.4,.9,.5,.4,.1,.7,.2,1.1,.2h8.3v4h-7.3Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M88.9,493.9h-1.8c0,0-.7-.1-.7-.1-.2,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2-.6-3.6-1.9-4.7-4-.5-.8-.8-1.8-1-2.8-.2-.9-.4-2-.4-3.1,0-2.1,.2-3.8,.5-5.3,.3-1.5,.8-2.7,1.5-3.8,.8-1.2,1.9-2.1,3.1-2.6,.5-.2,1.2-.4,2.2-.6,.8-.1,4-.2,9.5-.2v3.9h-7.1c-3.2,0-4.9,1.8-4.9,5.3h11.9v3.9h-11.9c0,.9,0,1.7,.2,2.3,0,.3,.1,.7,.3,.9,0,.2,.3,.5,.5,.8l.8,.8c.2,.2,.6,.4,.9,.5,.4,.1,.7,.2,1.1,.2h8.3v4h-7.3Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="108.9 475.3 108.9 493.9 104.4 493.9 104.4 475.3 97.8 475.3 97.8 471.3 115.5 471.3 115.5 475.3 108.9 475.3" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M125.9,493.9h-1.8c0,0-.7-.1-.7-.1-.2,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2-.6-3.6-1.9-4.7-4-.5-.8-.8-1.8-1-2.8-.2-.9-.4-2-.4-3.1,0-2.1,.2-3.8,.5-5.3,.3-1.5,.8-2.7,1.5-3.8,.8-1.2,1.9-2.1,3.1-2.6,.5-.2,1.2-.4,2.2-.6,.8-.1,4-.2,9.5-.2v3.9h-7.1c-3.2,0-4.9,1.8-4.9,5.3h11.9v3.9h-11.9c0,.9,0,1.7,.2,2.3,0,.3,.1,.7,.3,.9,0,.2,.3,.5,.5,.8l.8,.8c.2,.2,.6,.4,.9,.5,.4,.1,.7,.2,1.1,.2h8.3v4h-7.3Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M145.2,493.9h-1.8c0,0-.7-.1-.7-.1-.2,0-.3,0-.5,0-.1,0-.2,0-.2,0-.1,0-.2,0-.3,0-2-.6-3.6-1.9-4.7-4-.9-1.8-1.4-3.7-1.4-5.8s.2-3.9,.5-5.3c.3-1.5,.8-2.7,1.5-3.8,.8-1.2,1.9-2.1,3.1-2.6,.7-.3,1.5-.5,2.2-.6,.8-.1,4-.2,9.5-.2v3.9h-7.1c-1.4,0-2.5,.4-3.3,1.3-.6,.7-1.1,1.7-1.4,2.9-.3,1.3-.4,2.6-.4,4s.2,2.8,.5,3.8c.5,1.4,1.3,2.3,2.4,2.6h.5c0,.1,.5,.2,.5,.2h8.3v4h-7.3Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="167.9 493.9 167.9 484.4 159.9 484.4 159.9 493.9 155.6 493.9 155.6 471.3 159.9 471.3 159.9 480.4 167.9 480.4 167.9 471.3 172.2 471.3 172.2 493.9 167.9 493.9" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="847.6" height="507.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="192.8" y1="482.1" x2="684.9" y2="482.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="455.4" x2="684.9" y2="455.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="428.7" x2="849" y2="428.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="402" x2="849" y2="402" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="375.3" x2="849" y2="375.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="348.6" x2="849" y2="348.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="321.9" x2="849" y2="321.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="295.2" x2="849" y2="295.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="268.5" x2="849" y2="268.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="241.8" x2="849" y2="241.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="215.1" x2="849" y2="215.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="188.4" x2="849" y2="188.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="161.6" x2="849" y2="161.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="134.9" x2="849" y2="134.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="108.2" x2="849" y2="108.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="81.5" x2="849" y2="81.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="54.8" x2="849" y2="54.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="28.1" x2="849" y2="28.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="821.6" y1="1.4" x2="821.6" y2="428.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="794.3" y1="1.4" x2="794.3" y2="428.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="767" y1="1.4" x2="767" y2="428.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="739.6" y1="1.4" x2="739.6" y2="428.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="712.3" y1="1.4" x2="712.3" y2="428.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="684.9" y1="1.4" x2="684.9" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="657.6" y1="1.4" x2="657.6" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="630.3" y1="1.4" x2="630.3" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="602.9" y1="1.4" x2="602.9" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="575.6" y1="1.4" x2="575.6" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="548.2" y1="1.4" x2="548.2" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="520.9" y1="1.4" x2="520.9" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="493.5" y1="1.4" x2="493.5" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="466.2" y1="1.4" x2="466.2" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="438.9" y1="1.4" x2="438.9" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="411.5" y1="1.4" x2="411.5" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="384.2" y1="1.4" x2="384.2" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="356.8" y1="1.4" x2="356.8" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="329.5" y1="1.4" x2="329.5" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="302.2" y1="1.4" x2="302.2" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="274.8" y1="1.4" x2="274.8" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="247.5" y1="1.4" x2="247.5" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="220.1" y1="1.4" x2="220.1" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="192.8" y1="1.4" x2="192.8" y2="508.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="165.5" y1="1.4" x2="165.5" y2="455.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="138.1" y1="1.4" x2="138.1" y2="455.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="110.8" y1="1.4" x2="110.8" y2="455.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="83.4" y1="1.4" x2="83.4" y2="455.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="56.1" y1="1.4" x2="56.1" y2="455.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="28.8" y1="1.4" x2="28.8" y2="455.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

View File

@ -0,0 +1,130 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_图层_1" data-name=" 图层 1" xmlns="http://www.w3.org/2000/svg" width="320mm" height="320mm" viewBox="0 0 907.1 907.1">
<g>
<rect x="709.7" y="807.9" width="178.9" height="56.3" style="fill: none;"/>
<g>
<path d="M765.8,852.5h0l-20.8-35.8c-.1-.4-.6-.6-1-.6s-.9,.3-1,.6l-20.8,35.8c-.1,.4-.1,.9,0,1.1,.1,.4,.6,.6,1,.6h41.5c.4,0,.9-.3,1-.6,.1-.4,.1-.9,0-1.1h.1Zm-40.5-.6l18.7-32.2,18.7,32.2h-37.3Z" style="fill: #fff;"/>
<rect x="735" y="847.9" width="18.2" height="1.9" style="fill: #fff;"/>
<path d="M740.4,846.6l-1-.7c1.9-2.7,.9-4.3-.1-6.2-1.1-1.9-2.4-4.2,0-7.4l1,.7c-1.9,2.6-1,4.3,0,6.2,1.1,1.9,2.4,4.2,0,7.4h.1Z" style="fill: #fff;"/>
<path d="M744.9,846.6l-1-.7c1.9-2.7,.9-4.3-.1-6.2-1.1-1.9-2.4-4.2,0-7.3l1,.7c-1.9,2.6-1,4.3,0,6.2,1.1,1.9,2.4,4.2,0,7.3h.1Z" style="fill: #fff;"/>
<path d="M749.3,846.6l-1-.7c1.9-2.7,1-4.3,0-6.2-1.1-2-2.3-4.2,0-7.4l1,.7c-1.9,2.7-1,4.3,0,6.2,1.1,2,2.3,4.2,0,7.4Z" style="fill: #fff;"/>
</g>
<g>
<path d="M776.6,831.7c-.9,0-1.6,0-2.3-.3-.7-.1-1.3-.4-1.7-1-.4-.4-.9-1.1-1.1-1.9-.3-.9-.4-1.9-.4-3.1s0-2.1,.4-2.9c.3-.9,.6-1.4,1.1-1.9,.4-.4,1-.9,1.7-1,.7-.1,1.4-.3,2.3-.3h1.4c.4,0,.9,.1,1.1,.3v1.4c-.3,0-.7-.3-1.1-.3h-1.4c-.6,0-1.3,0-1.7,.3-.6,.1-.9,.4-1.3,.9-.3,.4-.6,.9-.7,1.4s-.3,1.3-.3,2.3,0,1.7,.3,2.3c.1,.6,.4,1.1,.7,1.4s.7,.6,1.1,.7,1,.3,1.7,.3h1.4c.4,0,.9-.1,1.3-.3v1.3c-.3,.1-.7,.3-1.3,.4-.4,0-1,.1-1.7,.1l.4-.3Z" style="fill: #fff;"/>
<path d="M785.5,822.1c.7,0,1.3,0,1.9,.3,.4,0,.9,.3,1.1,.6s.4,.6,.6,.9c0,.3,.1,.7,.1,1.1v6.6h-1.3l-.3-1.4c0,.3-.3,.4-.6,.7s-.4,.4-.7,.4-.6,.3-1,.3h-1c-1.1,0-1.9-.3-2.4-.7s-.7-1.1-.7-2,0-1,.3-1.4c.1-.4,.4-.7,.7-.9,.3-.3,.7-.4,1.1-.4s1-.1,1.6-.1h2.9v-1.4c0-.3-.1-.4-.3-.6s-.4-.3-.7-.4h-2.2c-.3,0-.7,0-1,.1v-1.3h2v-.3Zm-1.1,8.4c.7,0,1.4-.1,2-.4s1-.7,1.1-1.3v-1.6h-3.7c-.3,0-.6,0-.7,.3s-.3,.3-.4,.6v.9c0,.6,0,.9,.4,1.1s.7,.4,1.4,.4h-.1Z" style="fill: #fff;"/>
<path d="M799.9,822.3v9.3h-1.3v-1.3l-.7,.7c-.1,.1-.4,.3-.7,.4-.3,0-.6,.1-.9,.3h-.9c-.6,0-1.1,0-1.6-.3-.4-.1-.7-.3-1-.6s-.4-.6-.4-1-.1-.7-.1-1.3v-6.4h1.4v6.9c0,.3,0,.6,.3,.7s.3,.3,.6,.4,.6,.1,.9,.1h.9c.3,0,.6,0,.7-.3s.4-.3,.6-.6c.1-.3,.3-.6,.4-1v-6.3h1.9Z" style="fill: #fff;"/>
<path d="M806,830.4h1v1.3h-2.4c-.3,0-.6-.3-.9-.4-.3-.3-.4-.6-.4-.9,0-.4-.1-.9-.1-1.4v-5.3h-1.4v-1.3h1.4v-2.1h1.4v2.1h2.3v1.3h-2.3v6c0,.1,0,.4,.1,.6s.3,.3,.4,.3h.9Z" style="fill: #fff;"/>
<path d="M809.6,820.5c-.3,0-.6,0-.7-.1,0,0-.1-.3-.1-.7s0-.6,.1-.7c0,0,.4-.1,.7-.1s.6,0,.7,.1c0,0,.1,.3,.1,.7s0,.6-.1,.7c0,0-.4,.1-.7,.1Zm-.7,1.7h1.4v9.3h-1.4v-9.3Z" style="fill: #fff;"/>
<path d="M817.4,831.7c-.7,0-1.3,0-1.9-.3-.6-.1-1-.4-1.3-.9-.4-.4-.7-.9-.9-1.4s-.3-1.4-.3-2.3,0-1.7,.3-2.3c.1-.6,.4-1.1,.9-1.4,.4-.4,.9-.6,1.3-.9,.6-.1,1.1-.3,1.9-.3s1.3,0,1.9,.3c.6,.1,1,.4,1.3,.9,.4,.4,.6,.9,.9,1.4,.1,.6,.3,1.4,.3,2.3s0,1.7-.3,2.3c-.1,.6-.4,1.1-.9,1.4-.4,.4-.9,.6-1.3,.9-.6,.1-1.1,.3-1.9,.3Zm0-1.3c.6,0,1,0,1.3-.1s.6-.3,.9-.6c.1-.3,.3-.6,.4-1.1s0-1,0-1.7v-1.7c0-.4-.3-.9-.4-1.1s-.4-.4-.9-.6c-.3,0-.7-.1-1.3-.1s-1,0-1.3,.1c-.3,0-.6,.3-.9,.6-.1,.3-.4,.7-.4,1.1v3.4c0,.4,.3,.9,.4,1.1,.3,.3,.4,.4,.9,.6s.7,.1,1.3,.1Z" style="fill: #fff;"/>
<path d="M828.7,822.1c.6,0,1.1,0,1.6,.3,.4,.1,.7,.4,1,.6,.3,.3,.4,.6,.6,1,0,.4,.1,.7,.1,1.3v6.4h-1.4v-6.9c0-.3,0-.6-.3-.7,0-.1-.3-.3-.6-.4s-.6-.1-.9-.1h-.9c-.3,0-.6,0-.9,.3s-.4,.3-.7,.6-.4,.6-.4,1v6.3h-1.4v-9.3h1.4v1.3c0-.3,.3-.6,.6-.7s.4-.3,.7-.4,.6-.1,.9-.3,.6,0,.9,0h-.3Z" style="fill: #fff;"/>
<path d="M848.5,819.5v12h-1.6v-5.9h-5.9v5.9h-1.6v-12h1.6v4.9h5.9v-4.9h1.6Z" style="fill: #fff;"/>
<path d="M852.4,820.5c-.3,0-.6,0-.7-.1,0,0-.1-.3-.1-.7s0-.6,.1-.7c0,0,.4-.1,.7-.1s.6,0,.7,.1c0,0,.1,.3,.1,.7s0,.6-.1,.7c0,0-.4,.1-.7,.1Zm-.7,1.7h1.4v9.3h-1.4v-9.3Z" style="fill: #fff;"/>
<path d="M864.1,822.3v8.7c0,1.3-.4,2.3-1.1,3s-1.9,1.1-3.4,1.1-.9,0-1.1,0c-.4,0-.7,0-1-.1v-1.3c.7,0,1.4,.1,2.3,.1s1.9-.3,2.3-.7,.7-1.3,.7-2.3v-1c-.1,.6-.6,1-1,1.3s-1.1,.4-2,.4-1.4,0-1.9-.3-.9-.6-1.1-1-.4-.9-.6-1.4c0-.6-.1-1.3-.1-2s0-1.3,.1-1.9c0-.6,.3-1.1,.6-1.6s.7-.7,1.1-1,1.1-.4,1.9-.4,.9,0,1.3,.1c.3,0,.6,.3,.9,.4,.3,.1,.4,.4,.6,.6,.1,.3,.3,.4,.4,.7v-1.7h1.3Zm-4.3,8.2c.6,0,1,0,1.4-.3,.4-.1,.7-.4,.9-.7s.4-.7,.4-1.1v-2.9c0-.4-.3-.9-.4-1.1s-.6-.6-.9-.7-.9-.3-1.4-.3-1,0-1.3,.3c-.3,.1-.6,.4-.7,.7s-.3,.7-.3,1.1v2.7c0,.4,.1,.9,.3,1.1,.1,.3,.4,.6,.7,.7s.7,.3,1.3,.3h0Z" style="fill: #fff;"/>
<path d="M871.7,822.1c.6,0,1.1,0,1.6,.3,.4,.1,.7,.4,1,.6,.3,.3,.4,.6,.6,1,0,.4,.1,.7,.1,1.3v6.4h-1.4v-6.9c0-.3,0-.6-.3-.7,0-.1-.3-.3-.6-.4s-.6-.1-.9-.1h-.9c-.3,0-.6,0-.9,.3s-.4,.3-.7,.6-.4,.6-.4,1v6.3h-1.4v-13.2h1.4v5.2c0-.3,.3-.6,.6-.7s.4-.3,.7-.4,.6-.1,.9-.3,.6,0,.9,0h-.3Z" style="fill: #fff;"/>
<path d="M778.8,841.7h-3.4v10.6h-1.6v-10.6h-3.4v-1.4h8.6v1.4h-.1Z" style="fill: #fff;"/>
<path d="M787.5,846.6v1l-6.3,.4c0,.6,0,1,.1,1.3,0,.4,.3,.7,.4,.9,.3,.3,.6,.4,.9,.6,.4,0,.9,.1,1.4,.1s1,0,1.6-.1,1-.3,1.3-.4v1.4s-.3,0-.6,.1c-.3,0-.4,0-.7,.1h-1.9c-.7,0-1.3,0-1.9-.3-.6-.1-1-.4-1.3-.9-.4-.4-.7-.9-.9-1.4s-.3-1.4-.3-2.3,0-1.7,.3-2.3c.1-.6,.4-1.1,.9-1.4,.4-.4,.9-.6,1.3-.9,.6-.1,1.1-.3,1.7-.3s1.4,0,1.9,.3,.9,.6,1.1,.9c.3,.4,.4,.9,.6,1.3v1.4l.3,.4Zm-1.4,0v-1c0-.3-.1-.6-.3-.9s-.4-.4-.7-.6c-.3-.1-.7-.3-1.1-.3s-1,0-1.3,.1c-.3,0-.6,.3-.9,.6-.1,.3-.3,.6-.4,1v1.3l4.9-.4h-.1Z" style="fill: #fff;"/>
<path d="M800.3,842.7c.6,0,1,0,1.4,.3,.4,.1,.7,.4,1,.6,.3,.3,.4,.6,.6,1,0,.4,.1,.7,.1,1.3v6.4h-1.4v-5.9c0-.7,0-1.3-.4-1.7-.3-.4-.7-.6-1.4-.6h-.7c-.1,0-.4,0-.7,.3-.1,0-.4,.3-.6,.4-.1,.1-.3,.4-.4,.9h0v6.6h-1.4v-5.9c0-.7,0-1.3-.3-1.7s-.7-.6-1.4-.6h-.9c-.3,0-.4,0-.7,.3-.1,0-.4,.3-.6,.6-.1,.3-.3,.6-.4,.9v6.4h-1.4v-9.3h1.4v1.3c.3-.6,.7-.9,1.1-1.1,.4-.1,1-.3,1.6-.3s1.3,0,1.7,.4c.4,.3,.7,.6,1,1.1,0-.3,.3-.6,.6-.7,.1-.1,.4-.3,.7-.4,.3,0,.6-.1,.9-.3s.6,0,.9,0v-.3Z" style="fill: #fff;"/>
<path d="M811.3,842.7c.7,0,1.4,0,1.9,.3s.9,.6,1.1,1,.4,1,.6,1.6c0,.6,.1,1.3,.1,2s0,1.3-.1,1.9c0,.6-.3,1.1-.6,1.6s-.7,.9-1.1,1c-.4,.3-1.1,.4-1.9,.4s-1.6-.1-2-.4c-.4-.3-.7-.7-1-1.3v5h-1.4v-12.7h1.4v1.7c.1-.6,.6-1,1-1.3s1.1-.6,2-.6h0Zm-.1,8.3c.6,0,1,0,1.3-.3s.6-.4,.7-.9c.1-.3,.3-.7,.3-1.1v-2.7c0-.4-.1-.9-.3-1.1-.1-.3-.4-.6-.7-.7s-.7-.3-1.3-.3-1,0-1.4,.3-.7,.4-.9,.7c-.3,.3-.4,.7-.4,1.1v2.9c0,.4,.3,.9,.4,1.1,.3,.3,.6,.6,.9,.7,.4,.1,.9,.3,1.4,.3Z" style="fill: #fff;"/>
<path d="M825.7,846.6v1l-6.3,.4c0,.6,0,1,.1,1.3,0,.4,.3,.7,.4,.9,.3,.3,.6,.4,.9,.6,.4,0,.9,.1,1.4,.1s1,0,1.6-.1,1-.3,1.3-.4v1.4s-.3,0-.6,.1c-.3,0-.4,0-.7,.1h-1.9c-.7,0-1.3,0-1.9-.3-.6-.1-1-.4-1.3-.9-.4-.4-.7-.9-.9-1.4s-.3-1.4-.3-2.3,0-1.7,.3-2.3c.1-.6,.4-1.1,.9-1.4,.4-.4,.9-.6,1.3-.9,.6-.1,1.1-.3,1.7-.3s1.4,0,1.9,.3,.9,.6,1.1,.9c.3,.4,.4,.9,.6,1.3v1.4l.3,.4Zm-1.4,0v-1c0-.3-.1-.6-.3-.9s-.4-.4-.7-.6c-.3-.1-.7-.3-1.1-.3s-1,0-1.3,.1c-.3,0-.6,.3-.9,.6-.1,.3-.3,.6-.4,1v1.3l4.9-.4h-.1Z" style="fill: #fff;"/>
<path d="M833.3,842.7v1.3h-1.1c-.3,0-.6,.1-.9,.3-.3,.1-.4,.4-.7,.6-.1,.3-.4,.6-.4,1v6.2h-1.4v-9.3h1.4v1.7c.1-.4,.3-.7,.6-1s.4-.4,.7-.6c.3,0,.6-.3,.9-.3h1Z" style="fill: #fff;"/>
<path d="M838.6,842.7c.7,0,1.3,0,1.9,.3,.4,0,.9,.3,1.1,.6s.4,.6,.6,.9c0,.3,.1,.7,.1,1.1v6.6h-1.3l-.3-1.4c0,.3-.3,.4-.6,.7s-.4,.4-.7,.4-.6,.3-1,.3h-1c-1.1,0-1.9-.3-2.4-.7s-.7-1.1-.7-2,0-1,.3-1.4c.1-.4,.4-.7,.7-.9,.3-.3,.7-.4,1.1-.4s1-.1,1.6-.1h2.9v-1.4c0-.3-.1-.4-.3-.6s-.4-.3-.7-.4h-2.2c-.3,0-.7,0-1,.1v-1.3h2v-.3Zm-1.1,8.4c.7,0,1.4-.1,2-.4s1-.7,1.1-1.3v-1.6h-3.7c-.3,0-.6,0-.7,.3s-.3,.3-.4,.6v.9c0,.6,0,.9,.4,1.1s.7,.4,1.4,.4h-.1Z" style="fill: #fff;"/>
<path d="M848.8,851.2h1v1.3h-2.4c-.3,0-.6-.3-.9-.4-.3-.3-.4-.6-.4-.9,0-.4-.1-.9-.1-1.4v-5.3h-1.4v-1.3h1.4v-2.1h1.4v2.1h2.3v1.3h-2.3v6c0,.1,0,.4,.1,.6s.3,.3,.4,.3h.9Z" style="fill: #fff;"/>
<path d="M859.5,842.9v9.3h-1.3v-1.3l-.7,.7c-.1,.1-.4,.3-.7,.4-.3,0-.6,.1-.9,.3h-.9c-.6,0-1.1,0-1.6-.3-.4-.1-.7-.3-1-.6s-.4-.6-.4-1-.1-.7-.1-1.3v-6.4h1.4v6.9c0,.3,0,.6,.3,.7s.3,.3,.6,.4,.6,.1,.9,.1h.9c.3,0,.6,0,.7-.3s.4-.3,.6-.6c.1-.3,.3-.6,.4-1v-6.3h1.9Z" style="fill: #fff;"/>
<path d="M867.7,842.7v1.3h-1.1c-.3,0-.6,.1-.9,.3-.3,.1-.4,.4-.7,.6-.1,.3-.4,.6-.4,1v6.2h-1.4v-9.3h1.4v1.7c.1-.4,.3-.7,.6-1s.4-.4,.7-.6c.3,0,.6-.3,.9-.3h1Z" style="fill: #fff;"/>
<path d="M877.2,846.6v1l-6.3,.4c0,.6,0,1,.1,1.3,0,.4,.3,.7,.4,.9,.3,.3,.6,.4,.9,.6,.4,0,.9,.1,1.4,.1s1,0,1.6-.1,1-.3,1.3-.4v1.4s-.3,0-.6,.1c-.3,0-.4,0-.7,.1h-1.9c-.7,0-1.3,0-1.9-.3-.6-.1-1-.4-1.3-.9-.4-.4-.7-.9-.9-1.4s-.3-1.4-.3-2.3,0-1.7,.3-2.3c.1-.6,.4-1.1,.9-1.4,.4-.4,.9-.6,1.3-.9,.6-.1,1.1-.3,1.7-.3s1.4,0,1.9,.3,.9,.6,1.1,.9c.3,.4,.4,.9,.6,1.3v1.4l.3,.4Zm-1.4,0v-1c0-.3-.1-.6-.3-.9s-.4-.4-.7-.6c-.3-.1-.7-.3-1.1-.3s-1,0-1.3,.1c-.3,0-.6,.3-.9,.6-.1,.3-.3,.6-.4,1v1.3l4.9-.4h-.1Z" style="fill: #fff;"/>
</g>
<g>
<path d="M703.3,872.9h1l2.9,10.6h0l3.4-10.6h1.3l3.6,10.6h0l2.9-10.6h1l-3.3,11.7h-1.1l-3.6-10.7h0l-3.6,10.7h-1.1l-3.3-11.7h0Z" style="fill: #fff;"/>
<path d="M720.2,872.9h1l2.9,10.6h0l3.4-10.6h1.3l3.6,10.6h0l2.9-10.6h1l-3.3,11.7h-1.1l-3.6-10.7h0l-3.6,10.7h-1.1l-3.3-11.7h0Z" style="fill: #fff;"/>
<path d="M737,872.9h1l2.9,10.6h0l3.4-10.6h1.3l3.6,10.6h0l2.9-10.6h1l-3.3,11.7h-1.1l-3.6-10.7h0l-3.6,10.7h-1.1l-3.3-11.7h0Z" style="fill: #fff;"/>
<path d="M754.9,884.8c-.3,0-.6,0-.7-.1,0,0-.1-.4-.1-.9s0-.7,.1-.7c0,0,.4-.1,.7-.1s.6,0,.7,.1c0,0,.1,.4,.1,.7s0,.7-.1,.9c0,0-.4,.1-.7,.1Z" style="fill: #fff;"/>
<path d="M768.9,872.9v10.9c0,1.6-.4,2.9-1.3,3.7-.9,.9-2.3,1.3-4,1.3s-1,0-1.4,0-.9,0-1.1-.1v-1c.4,0,.9,.1,1.3,.3h1.4c1.6,0,2.6-.4,3.3-1.1,.7-.7,1-1.9,1-3.3v-1.6c-.3,.9-.7,1.4-1.4,1.9s-1.6,.7-2.9,.7-1.6,0-2.2-.4c-.6-.3-1-.6-1.4-1.1-.3-.4-.6-1.1-.7-1.9s-.3-1.6-.3-2.6,0-1.7,.3-2.4c.1-.7,.4-1.4,.7-1.9,.3-.6,.9-.9,1.4-1.1s1.3-.4,2.2-.4,1.1,0,1.7,.1c.4,0,.9,.3,1.1,.6l.9,.9c.3,.3,.4,.7,.6,1.1v-2.4h.9Zm-5,10.9c.9,0,1.4,0,2-.4s1-.6,1.3-1,.6-1,.7-1.6,.1-1.3,.1-2,0-1.4-.1-2c0-.6-.3-1.1-.7-1.6s-.7-.9-1.3-1-1.1-.4-2-.4-1.4,0-1.9,.3-.9,.6-1.1,1-.4,1-.6,1.6c0,.6-.1,1.3-.1,2.1s0,1.6,.1,2.1c0,.6,.3,1.1,.6,1.6s.7,.7,1.1,1,1.1,.3,1.9,.3Z" style="fill: #fff;"/>
<path d="M781.5,877.5v1.1l-8.3,.6c0,.9,0,1.6,.3,2.1,0,.6,.4,1.1,.7,1.4,.3,.4,.7,.7,1.3,.9,.6,.1,1.1,.3,2,.3s1.3,0,1.9-.1c.7,0,1.3-.3,1.7-.6v1c-.1,0-.4,.1-.7,.3-.3,0-.6,.1-.9,.3-.3,0-.7,0-1,.1h-1.1c-.9,0-1.7,0-2.3-.3-.7-.1-1.1-.6-1.6-1s-.7-1.1-.9-1.9-.3-1.7-.3-2.9,0-2.1,.3-2.9,.4-1.4,.9-1.9,.9-.9,1.6-1c.6-.1,1.4-.3,2.3-.3s1.7,.1,2.3,.4c.6,.3,1,.7,1.3,1.1s.4,1,.6,1.6,0,1.1,0,1.7v-.3Zm-1,.3v-1.7c0-.6-.3-1-.4-1.3-.3-.4-.6-.7-1-.9s-1-.3-1.9-.3-1.4,0-1.9,.3c-.6,.1-.9,.4-1.1,.9s-.6,.9-.7,1.4c0,.6-.1,1.3-.3,2.1l7.3-.6h0Z" style="fill: #fff;"/>
<path d="M793.5,877.5v1.1l-8.3,.6c0,.9,0,1.6,.3,2.1,0,.6,.4,1.1,.7,1.4,.3,.4,.7,.7,1.3,.9,.6,.1,1.1,.3,2,.3s1.3,0,1.9-.1c.7,0,1.3-.3,1.7-.6v1c-.1,0-.4,.1-.7,.3-.3,0-.6,.1-.9,.3-.3,0-.7,0-1,.1h-1.1c-.9,0-1.7,0-2.3-.3-.7-.1-1.1-.6-1.6-1s-.7-1.1-.9-1.9-.3-1.7-.3-2.9,0-2.1,.3-2.9,.4-1.4,.9-1.9,.9-.9,1.6-1c.6-.1,1.4-.3,2.3-.3s1.7,.1,2.3,.4c.6,.3,1,.7,1.3,1.1s.4,1,.6,1.6,0,1.1,0,1.7v-.3Zm-1,.3v-1.7c0-.6-.3-1-.4-1.3-.3-.4-.6-.7-1-.9s-1-.3-1.9-.3-1.4,0-1.9,.3c-.6,.1-.9,.4-1.1,.9s-.6,.9-.7,1.4c0,.6-.1,1.3-.3,2.1l7.3-.6h0Z" style="fill: #fff;"/>
<path d="M805.4,877.5v1.1l-8.3,.6c0,.9,0,1.6,.3,2.1,0,.6,.4,1.1,.7,1.4,.3,.4,.7,.7,1.3,.9s1.1,.3,2,.3,1.3,0,1.9-.1c.7,0,1.3-.3,1.7-.6v1c-.1,0-.4,.1-.7,.3-.3,0-.6,.1-.9,.3-.3,0-.7,0-1,.1h-1.1c-.9,0-1.7,0-2.3-.3-.7-.1-1.1-.6-1.6-1s-.7-1.1-.9-1.9-.3-1.7-.3-2.9,0-2.1,.3-2.9,.4-1.4,.9-1.9,.9-.9,1.6-1c.6-.1,1.4-.3,2.3-.3s1.7,.1,2.3,.4c.6,.3,1,.7,1.3,1.1s.4,1,.6,1.6c.1,.6,0,1.1,0,1.7v-.3Zm-1,.3v-1.7c0-.6-.3-1-.4-1.3-.3-.4-.6-.7-1-.9s-1-.3-1.9-.3-1.4,0-1.9,.3c-.6,.1-.9,.4-1.1,.9s-.6,.9-.7,1.4c0,.6-.1,1.3-.3,2.1l7.3-.6h0Z" style="fill: #fff;"/>
<path d="M811.9,883.8h1.6v.9h-2.9c-.4,0-.7-.3-.9-.6-.3-.3-.4-.6-.4-1.1s-.1-1.1-.1-1.9v-7.3h-1.9v-.9h1.9v-2.7h1v2.7h3.3v.9h-3.3v8.6c0,.3,.1,.6,.3,.9s.3,.3,.6,.4h.9Z" style="fill: #fff;"/>
<path d="M824.1,877.5v1.1l-8.3,.6c0,.9,0,1.6,.3,2.1,0,.6,.4,1.1,.7,1.4,.3,.4,.7,.7,1.3,.9s1.1,.3,2,.3,1.3,0,1.9-.1c.7,0,1.3-.3,1.7-.6v1c-.1,0-.4,.1-.7,.3-.3,0-.6,.1-.9,.3-.3,0-.7,0-1,.1h-1.1c-.9,0-1.7,0-2.3-.3-.7-.1-1.1-.6-1.6-1s-.7-1.1-.9-1.9-.3-1.7-.3-2.9,0-2.1,.3-2.9,.4-1.4,.9-1.9,.9-.9,1.6-1c.6-.1,1.4-.3,2.3-.3s1.7,.1,2.3,.4c.6,.3,1,.7,1.3,1.1s.4,1,.6,1.6,0,1.1,0,1.7v-.3Zm-1,.3v-1.7c0-.6-.3-1-.4-1.3-.3-.4-.6-.7-1-.9s-1-.3-1.9-.3-1.4,0-1.9,.3c-.6,.1-.9,.4-1.1,.9s-.6,.9-.7,1.4c0,.6-.1,1.3-.3,2.1l7.3-.6h0Z" style="fill: #fff;"/>
<path d="M831.7,884.8c-.9,0-1.6,0-2.3-.3-.6-.1-1.1-.6-1.6-1s-.7-1.1-.9-1.9-.3-1.7-.3-2.9,0-2.1,.3-2.9c.1-.7,.4-1.4,.9-1.9s.9-.9,1.6-1c.6-.1,1.3-.3,2.3-.3h1.7c.4,0,1,.1,1.3,.3v1c-.4-.1-.9-.3-1.4-.3h-1.6c-.6,0-1.3,0-1.9,.3-.4,.1-.9,.4-1.1,.9s-.6,.9-.7,1.6c0,.7-.1,1.4-.1,2.4s0,1.7,.1,2.4c0,.7,.3,1.1,.7,1.6,.3,.4,.7,.7,1.1,.9s1.1,.3,1.9,.3,1.1,0,1.7-.1c.4,0,1-.3,1.4-.4v1c-.3,0-.7,.3-1.3,.4-.6,0-1.1,.1-1.7,.1v-.3Z" style="fill: #fff;"/>
<path d="M842.6,872.7c.7,0,1.3,0,1.9,.3,.4,.1,.9,.4,1.1,.7s.4,.7,.6,1.1c0,.4,.1,1,.1,1.6v8.2h-1v-9.2c0-.4-.3-.9-.4-1-.3-.3-.6-.4-.9-.6s-.9-.1-1.4-.1h-1.1c-.4,0-.7,.1-1.1,.4s-.7,.4-1,.9-.4,.9-.6,1.4v8.2h-1v-16.5h1v6.7c0-.4,.3-.7,.6-1s.6-.6,1-.7,.7-.3,1.1-.4,.9,0,1.3,0h-.1Z" style="fill: #fff;"/>
<path d="M851.2,884.8c-.3,0-.6,0-.7-.1,0,0-.1-.4-.1-.9s0-.7,.1-.7c0,0,.4-.1,.7-.1s.6,0,.7,.1c0,0,.1,.4,.1,.7s0,.7-.1,.9c0,0-.4,.1-.7,.1Z" style="fill: #fff;"/>
<path d="M859.3,884.8c-.9,0-1.6,0-2.3-.3-.6-.1-1.1-.6-1.6-1s-.7-1.1-.9-1.9c-.1-.7-.3-1.7-.3-2.9s0-2.1,.3-2.9c.1-.7,.4-1.4,.9-1.9s.9-.9,1.6-1c.6-.1,1.3-.3,2.3-.3h1.7c.4,0,1,.1,1.3,.3v1c-.4-.1-.9-.3-1.4-.3h-1.6c-.6,0-1.3,0-1.9,.3-.4,.1-.9,.4-1.1,.9s-.6,.9-.7,1.6c0,.7-.1,1.4-.1,2.4s0,1.7,.1,2.4c0,.7,.3,1.1,.7,1.6,.3,.4,.7,.7,1.1,.9s1.1,.3,1.9,.3,1.1,0,1.7-.1c.4,0,1-.3,1.4-.4v1c-.3,0-.7,.3-1.3,.4-.6,0-1.1,.1-1.7,.1v-.3Z" style="fill: #fff;"/>
<path d="M869.6,884.8c-.9,0-1.7,0-2.3-.3-.6-.1-1.1-.6-1.6-1s-.7-1.1-.9-1.9-.3-1.7-.3-2.9,0-2.1,.3-2.9c.1-.7,.4-1.4,.9-1.9s.9-.9,1.6-1,1.4-.3,2.3-.3,1.6,0,2.3,.3c.6,.1,1.1,.6,1.6,1s.7,1.1,.9,1.9,.3,1.7,.3,2.9,0,2.1-.3,2.9c-.1,.7-.4,1.4-.9,1.9s-1,.9-1.6,1c-.6,.1-1.4,.3-2.3,.3Zm0-.9c.7,0,1.4,0,2-.3,.6-.1,.9-.4,1.3-.9,.3-.4,.6-1,.7-1.6s.1-1.4,.1-2.4,0-1.7-.1-2.4-.3-1.1-.7-1.6-.7-.7-1.3-.9-1.1-.3-1.9-.3-1.4,0-1.9,.3c-.6,.1-.9,.4-1.3,.9-.3,.4-.6,1-.6,1.6s-.1,1.4-.1,2.4,0,1.7,.1,2.4c0,.7,.3,1.1,.6,1.6s.7,.7,1.3,.9,1.1,.3,1.9,.3h-.1Z" style="fill: #fff;"/>
<path d="M889.8,872.7c.7,0,1.3,0,1.7,.3,.4,.1,.9,.4,1.1,.7s.4,.7,.6,1.1c0,.4,.1,1,.1,1.6v8.2h-1v-9.2c0-.4-.1-.9-.4-1-.1-.3-.4-.4-.9-.6-.3,0-.9-.1-1.3-.1h-1.1c-.4,0-.7,.1-1,.4-.3,.1-.6,.4-.9,.9-.3,.4-.4,.9-.6,1.4h0v8.2h-1v-9.2c0-.4-.1-.9-.4-1-.1-.3-.4-.4-.9-.6s-.9-.1-1.3-.1h-1.1c-.4,0-.7,.1-1,.4-.3,.1-.6,.4-.9,.9-.3,.3-.4,.9-.6,1.4v8.3h-1v-11.7h1v2c0-.4,.3-.7,.6-1s.6-.4,.9-.7c.3-.1,.7-.3,1-.4s.9,0,1.1,0c1,0,1.9,.1,2.3,.6,.6,.4,.9,1,1,1.7,0-.4,.3-.7,.6-1s.6-.6,.9-.7,.7-.3,1.1-.4,.9,0,1.3,0v-.3Z" style="fill: #fff;"/>
</g>
</g>
<g>
<path d="M30.4,880.3c-.5,0-.8,0-.9,0h0c-.4-.1-.8-.2-1.2-.3l-2.1-.8c-.4-.2-.9-.5-1.6-1l-1.4-1.2c-1.3-1.2-2.2-3-2.9-5.4-.5-2-.8-4.4-.8-7.3s.4-5.6,1.3-7.7c1-2.7,2.8-4.8,5.5-6.2,.7-.4,1.7-.7,3-.9,1.2-.2,6.6-.3,16.2-.3v5.4h-12.7c-2.4,0-4.2,1-5.4,3.1-.9,1.6-1.3,3.6-1.3,6.2v3.2c.2,.5,.2,.8,.2,1.1h0c0,.6,.1,1,.2,1.3,.3,1.6,1,2.8,2,3.7,1,.9,4.6,1.4,10.9,1.4v-7.3h-7.9v-5.5h13.9v18.4h-15Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M61.6,880.3h-2.5c0-.1-.9-.2-.9-.2-.2,0-.5,0-.7-.1-.2,0-.3,0-.3-.1-.2,0-.3,0-.4,0-2.8-.8-4.9-2.6-6.4-5.5-.6-1.2-1.1-2.4-1.4-3.8-.3-1.3-.5-2.7-.5-4.2,0-2.9,.2-5.3,.6-7.2,.4-2,1.1-3.8,2.1-5.2,1.1-1.7,2.6-2.9,4.3-3.5,.7-.3,1.7-.6,3-.8,1.1-.2,5.5-.3,13.1-.3v5.4h-9.7c-4.4,0-6.7,2.4-6.7,7.3h16.4v5.4h-16.4c0,1.2,0,2.3,.3,3.1,0,.5,.2,.9,.4,1.3,.1,.3,.4,.7,.7,1.1l1.1,1.1c.3,.3,.8,.5,1.3,.7,.5,.2,1,.3,1.5,.3h11.3v5.4h-10Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M88.1,880.3h-2.5c0-.1-.9-.2-.9-.2-.2,0-.5,0-.7-.1-.2,0-.3,0-.3-.1-.2,0-.3,0-.4,0-2.8-.8-4.9-2.6-6.4-5.5-.6-1.2-1.1-2.4-1.4-3.8-.3-1.3-.5-2.7-.5-4.2,0-2.9,.2-5.3,.6-7.2,.4-2,1.1-3.8,2.1-5.2,1.1-1.7,2.6-2.9,4.3-3.5,.7-.3,1.7-.6,3-.8,1.2-.2,5.5-.3,13.1-.3v5.4h-9.7c-4.4,0-6.7,2.4-6.7,7.3h16.4v5.4h-16.4c0,1.2,0,2.3,.3,3.1,0,.5,.2,.9,.4,1.3,.1,.3,.4,.7,.7,1.1l1.1,1.1c.3,.3,.8,.5,1.3,.7,.5,.2,1,.3,1.5,.3h11.3v5.4h-10Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M114.6,880.3h-2.5c0-.1-.9-.2-.9-.2-.2,0-.5,0-.7-.1-.2,0-.3,0-.3-.1-.2,0-.3,0-.4,0-2.8-.8-4.9-2.6-6.4-5.5-.6-1.2-1.1-2.4-1.4-3.8-.3-1.3-.5-2.7-.5-4.2,0-2.9,.2-5.3,.6-7.2,.4-2,1.1-3.8,2.1-5.2,1.1-1.7,2.6-2.9,4.3-3.5,.7-.3,1.7-.6,3-.8,1.1-.2,5.5-.3,13.1-.3v5.4h-9.7c-4.4,0-6.7,2.4-6.7,7.3h16.4v5.4h-16.4c0,1.2,0,2.3,.3,3.1,0,.5,.2,.9,.4,1.3,.1,.3,.4,.7,.7,1.1l1.1,1.1c.3,.3,.8,.5,1.3,.7,.5,.2,1,.3,1.5,.3h11.3v5.4h-10Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="142 854.7 142 880.3 135.9 880.3 135.9 854.7 126.8 854.7 126.8 849.3 151.1 849.3 151.1 854.7 142 854.7" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M165.3,880.3h-2.5c0-.1-.9-.2-.9-.2-.2,0-.5,0-.7-.1-.2,0-.3,0-.3-.1-.2,0-.3,0-.4,0-2.8-.8-4.9-2.6-6.4-5.5-.6-1.2-1.1-2.4-1.4-3.8-.3-1.3-.5-2.7-.5-4.2,0-2.9,.2-5.3,.6-7.2,.4-2,1.1-3.8,2.1-5.2,1.1-1.7,2.6-2.9,4.3-3.5,.7-.3,1.7-.6,3-.8,1.1-.2,5.5-.3,13.1-.3v5.4h-9.7c-4.4,0-6.7,2.4-6.7,7.3h16.4v5.4h-16.4c0,1.2,0,2.3,.3,3.1,0,.5,.2,.9,.4,1.3,.1,.3,.4,.7,.7,1.1l1.1,1.1c.3,.3,.8,.5,1.3,.7,.5,.2,1,.3,1.5,.3h11.3v5.4h-10Z" style="fill: #fff; fill-rule: evenodd;"/>
<path d="M191.8,880.3h-2.5c0-.1-.9-.2-.9-.2-.2,0-.5,0-.7-.1-.2,0-.3,0-.3-.1-.2,0-.3,0-.4,0-2.8-.8-4.9-2.6-6.4-5.5-1.3-2.5-1.9-5.1-1.9-7.9s.2-5.3,.6-7.3c.4-2,1.1-3.8,2.1-5.2,1.1-1.7,2.6-2.9,4.3-3.5,1-.4,2-.6,3-.8,1.1-.2,5.4-.3,13.1-.3v5.3h-9.7c-1.9,0-3.4,.6-4.5,1.7-.9,1-1.5,2.3-1.9,4-.4,1.8-.5,3.6-.5,5.5s.2,3.8,.7,5.3c.7,1.9,1.8,3.1,3.3,3.6l.6,.2h.7s11.3,0,11.3,0v5.4h-10Z" style="fill: #fff; fill-rule: evenodd;"/>
<polygon points="222.9 880.3 222.9 867.3 212.1 867.3 212.1 880.3 206.1 880.3 206.1 849.2 212.1 849.2 212.1 861.8 222.9 861.8 222.9 849.2 228.8 849.2 228.8 880.3 222.9 880.3" style="fill: #fff; fill-rule: evenodd;"/>
</g>
<rect x="1.4" y="1.4" width="904.3" height="904.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="247.8" y1="878.3" x2="686.5" y2="878.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="248" y1="850.9" x2="686.5" y2="850.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="823.5" x2="686.5" y2="823.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="796.1" x2="905.7" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="768.7" x2="905.7" y2="768.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="741.3" x2="905.7" y2="741.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="713.9" x2="905.7" y2="713.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="686.5" x2="905.7" y2="686.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="659.1" x2="905.7" y2="659.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="631.7" x2="905.7" y2="631.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="604.3" x2="905.7" y2="604.3" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="576.9" x2="905.7" y2="576.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="549.4" x2="905.7" y2="549.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="522" x2="905.7" y2="522" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="494.6" x2="905.7" y2="494.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="467.2" x2="905.7" y2="467.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="439.8" x2="905.7" y2="439.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="412.4" x2="905.7" y2="412.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="385" x2="905.7" y2="385" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="357.6" x2="905.7" y2="357.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="330.2" x2="905.7" y2="330.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="302.8" x2="905.7" y2="302.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="275.4" x2="905.7" y2="275.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="248" x2="905.7" y2="248" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="220.6" x2="905.7" y2="220.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="193.2" x2="905.7" y2="193.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="165.8" x2="905.7" y2="165.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="138.4" x2="905.7" y2="138.4" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="111" x2="905.7" y2="111" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="83.6" x2="905.7" y2="83.6" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="56.2" x2="905.7" y2="56.2" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="1.4" y1="28.8" x2="905.7" y2="28.8" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="878.3" y1="1.4" x2="878.3" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="850.9" y1="1.4" x2="850.9" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="823.5" y1="1.4" x2="823.5" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="796.1" y1="1.4" x2="796.1" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="768.7" y1="1.4" x2="768.7" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="741.3" y1="1.4" x2="741.3" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="713.9" y1="1.4" x2="713.9" y2="796.1" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="686.5" y1="1.4" x2="686.5" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="659.1" y1="1.4" x2="659.1" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="631.7" y1="1.4" x2="631.7" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="604.3" y1="1.4" x2="604.3" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="576.9" y1="1.4" x2="576.9" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="549.4" y1="1.4" x2="549.4" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="522" y1="1.4" x2="522" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="494.6" y1="1.4" x2="494.6" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="467.2" y1="1.4" x2="467.2" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="439.8" y1="1.4" x2="439.8" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="412.4" y1="1.4" x2="412.4" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="385" y1="1.4" x2="385" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="357.6" y1="1.4" x2="357.6" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="330.2" y1="1.4" x2="330.2" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="302.8" y1="1.4" x2="302.8" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="275.4" y1="1.4" x2="275.4" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="248" y1="1.4" x2="248" y2="905.7" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="220.6" y1="1.4" x2="220.6" y2="821.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="193.2" y1="1.4" x2="193.2" y2="821.9" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="165.8" y1="1.4" x2="165.8" y2="823.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="138.4" y1="1.4" x2="138.4" y2="823.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="111" y1="1.4" x2="111" y2="823.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="83.6" y1="1.4" x2="83.6" y2="823.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="56.2" y1="1.4" x2="56.2" y2="823.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
<line x1="28.8" y1="1.4" x2="28.8" y2="823.5" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: .8px;"/>
</svg>

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 56 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

View File

@ -1,3 +1,4 @@
min_slic3r_version = 2.4.1-alpha0
1.0.2 Updated start g-code.
1.0.1 Various fixes and improvements. Commented filament sensor initialisation for v-Minion (optional HW).
1.0.0 Initial RatRig bundle

View File

@ -9,7 +9,7 @@
name = RatRig
# Configuration version of this file. Config file will only be installed, if the config_version differs.
# This means, the server may force the Slic3r configuration to be downgraded.
config_version = 1.0.1
config_version = 1.0.2
# Where to get the updates from?
config_update_url = https://files.prusa3d.com/wp-content/uploads/repository/PrusaSlicer-settings-master/live/RatRig/
# The printer models will be shown by the Configuration Wizard in this order,
@ -433,7 +433,7 @@ retract_restart_extra_toolchange = 0
retract_speed = 40
silent_mode = 0
single_extruder_multi_material = 0
start_gcode = M190 S0 ; Prevents prusaslicer from prepending m190 to the gcode interfering with the macro\nM109 S0 ; Prevents prusaslicer from prepending m109 to the gcode interfering with the macro\nSTART_PRINT EXTRUDER_TEMP=[first_layer_temperature] BED_TEMP=[first_layer_bed_temperature]\n;enable this if you have a BTT Smart Filament Sensor\nSET_FILAMENT_SENSOR SENSOR=my_sensor ENABLE=0\n
start_gcode = M190 S0 ; Prevents prusaslicer from prepending m190 to the gcode interfering with the macro\nM109 S0 ; Prevents prusaslicer from prepending m109 to the gcode interfering with the macro\nSET_GCODE_VARIABLE MACRO=RatOS VARIABLE=relative_extrusion VALUE=True\nSTART_PRINT EXTRUDER_TEMP=[first_layer_temperature] BED_TEMP=[first_layer_bed_temperature]\n;enable this if you have a BTT Smart Filament Sensor\nSET_FILAMENT_SENSOR SENSOR=my_sensor ENABLE=0\n
thumbnails = 64x64,400x300
toolchange_gcode =
use_firmware_retraction = 0
@ -496,7 +496,7 @@ retract_restart_extra_toolchange = 0
retract_speed = 40
silent_mode = 0
single_extruder_multi_material = 0
start_gcode = M190 S0 ; Prevents prusaslicer from prepending m190 to the gcode interfering with the macro\nM109 S0 ; Prevents prusaslicer from prepending m109 to the gcode interfering with the macro\nSTART_PRINT EXTRUDER_TEMP=[first_layer_temperature] BED_TEMP=[first_layer_bed_temperature]\n;enable this if you have a BTT Smart Filament Sensor\n; SET_FILAMENT_SENSOR SENSOR=my_sensor ENABLE=0\n
start_gcode = M190 S0 ; Prevents prusaslicer from prepending m190 to the gcode interfering with the macro\nM109 S0 ; Prevents prusaslicer from prepending m109 to the gcode interfering with the macro\nSET_GCODE_VARIABLE MACRO=RatOS VARIABLE=relative_extrusion VALUE=True\nSTART_PRINT EXTRUDER_TEMP=[first_layer_temperature] BED_TEMP=[first_layer_bed_temperature]\n;enable this if you have a BTT Smart Filament Sensor\nSET_FILAMENT_SENSOR SENSOR=my_sensor ENABLE=0\n
start_gcode_manual = 0
template_custom_gcode =
thumbnails = 64x64,400x300

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.4 KiB

Binary file not shown.

View File

@ -14,21 +14,44 @@ namespace Measure {
constexpr double feature_hover_limit = 0.5; // how close to a feature the mouse must be to highlight it
static std::pair<Vec3d, double> get_center_and_radius(const std::vector<Vec3d>& border, int start_idx, int end_idx, const Transform3d& trafo)
static std::pair<Vec3d, double> get_center_and_radius(const std::vector<Vec3d>& points, const Transform3d& trafo)
{
Vec2ds pts;
Vec2ds out;
double z = 0.;
for (int i=start_idx; i<=end_idx; ++i) {
Vec3d pt_transformed = trafo * border[i];
for (const Vec3d& pt : points) {
Vec3d pt_transformed = trafo * pt;
z = pt_transformed.z();
pts.emplace_back(pt_transformed.x(), pt_transformed.y());
out.emplace_back(pt_transformed.x(), pt_transformed.y());
}
auto circle = Geometry::circle_ransac(pts, 20); // FIXME: iterations?
auto circle = Geometry::circle_ransac(out, 20); // FIXME: iterations?
return std::make_pair(trafo.inverse() * Vec3d(circle.center.x(), circle.center.y(), z), circle.radius);
}
static bool circle_fit_is_ok(const std::vector<Vec3d>& pts, const Vec3d& center, double radius)
{
for (const Vec3d& pt : pts)
if (std::abs((pt - center).norm() - radius) > 0.05)
return false;
return true;
}
static std::array<Vec3d, 3> orthonormal_basis(const Vec3d& v)
{
std::array<Vec3d, 3> ret;
ret[2] = v.normalized();
int index;
ret[2].cwiseAbs().maxCoeff(&index);
switch (index)
{
case 0: { ret[0] = Vec3d(ret[2].y(), -ret[2].x(), 0.0).normalized(); break; }
case 1: { ret[0] = Vec3d(0.0, ret[2].z(), -ret[2].y()).normalized(); break; }
case 2: { ret[0] = Vec3d(-ret[2].z(), 0.0, ret[2].x()).normalized(); break; }
}
ret[1] = ret[2].cross(ret[0]).normalized();
return ret;
}
@ -47,6 +70,7 @@ public:
std::optional<SurfaceFeature> get_feature(size_t face_idx, const Vec3d& point) const;
std::vector<std::vector<int>> get_planes_triangle_indices() const;
const std::vector<SurfaceFeature>& get_plane_features(unsigned int plane_id) const;
const TriangleMesh& get_mesh() const;
private:
void update_planes();
@ -54,7 +78,7 @@ private:
std::vector<PlaneData> m_planes;
std::vector<size_t> m_face_to_plane;
const indexed_triangle_set& m_its;
TriangleMesh m_mesh;
};
@ -63,7 +87,7 @@ private:
MeasuringImpl::MeasuringImpl(const indexed_triangle_set& its)
: m_its{its}
: m_mesh(its)
{
update_planes();
extract_features();
@ -76,10 +100,10 @@ void MeasuringImpl::update_planes()
// Now we'll go through all the facets and append Points of facets sharing the same normal.
// This part is still performed in mesh coordinate system.
const size_t num_of_facets = m_its.indices.size();
const size_t num_of_facets = m_mesh.its.indices.size();
m_face_to_plane.resize(num_of_facets, size_t(-1));
const std::vector<Vec3f> face_normals = its_face_normals(m_its);
const std::vector<Vec3i> face_neighbors = its_face_neighbors(m_its);
const std::vector<Vec3f> face_normals = its_face_normals(m_mesh.its);
const std::vector<Vec3i> face_neighbors = its_face_neighbors(m_mesh.its);
std::vector<int> facet_queue(num_of_facets, 0);
int facet_queue_cnt = 0;
const stl_normal* normal_ptr = nullptr;
@ -128,7 +152,7 @@ void MeasuringImpl::update_planes()
assert(std::none_of(m_face_to_plane.begin(), m_face_to_plane.end(), [](size_t val) { return val == size_t(-1); }));
// Now we will walk around each of the planes and save vertices which form the border.
SurfaceMesh sm(m_its);
SurfaceMesh sm(m_mesh.its);
for (int plane_id=0; plane_id < int(m_planes.size()); ++plane_id) {
const auto& facets = m_planes[plane_id].facets;
m_planes[plane_id].borders.clear();
@ -173,9 +197,15 @@ void MeasuringImpl::update_planes()
he = sm.next_around_target(he);
if (he.is_invalid())
goto PLANE_FAILURE;
// For broken meshes, the iteration might never get back to he_orig.
// Remember all halfedges we saw to break out of such infinite loops.
boost::container::small_vector<Halfedge_index, 10> he_seen;
while ( (int)m_face_to_plane[sm.face(he)] == plane_id && he != he_orig) {
he_seen.emplace_back(he);
he = sm.next_around_target(he);
if (he.is_invalid())
if (he.is_invalid() || std::find(he_seen.begin(), he_seen.end(), he) != he_seen.end())
goto PLANE_FAILURE;
}
he = sm.opposite(he);
@ -194,12 +224,19 @@ void MeasuringImpl::update_planes()
visited[face_it - facets.begin()][he.side()] = true;
last_border.emplace_back(sm.point(sm.source(he)).cast<double>());
// In case of broken meshes, this loop might be infinite. Break
// out in case it is clearly going bad.
if (last_border.size() > 3*facets.size()+1)
goto PLANE_FAILURE;
} while (he != he_start);
if (last_border.size() == 1)
m_planes[plane_id].borders.pop_back();
else {
assert(last_border.front() == last_border.back());
last_border.pop_back();
}
}
}
@ -217,7 +254,7 @@ void MeasuringImpl::update_planes()
void MeasuringImpl::extract_features()
{
std::vector<double> angles;
std::vector<double> angles; // placed in outer scope to prevent reallocations
std::vector<double> lengths;
@ -234,148 +271,168 @@ void MeasuringImpl::extract_features()
for (const std::vector<Vec3d>& border : plane.borders) {
if (border.size() <= 1)
continue;
assert(border.front() == border.back());
int start_idx = -1;
std::vector<SurfaceFeature> edges;
bool done = false;
if (const auto& [center, radius] = get_center_and_radius(border, trafo);
(border.size()>4) && circle_fit_is_ok(border, center, radius)) {
// The whole border is one circle. Just add it into the list of features
// and we are done.
bool is_polygon = border.size()>4 && border.size()<=8;
bool lengths_match = std::all_of(border.begin()+2, border.end(), [is_polygon](const Vec3d& pt) {
return Slic3r::is_approx((pt - *((&pt)-1)).squaredNorm(), (*((&pt)-1) - *((&pt)-2)).squaredNorm(), is_polygon ? 0.01 : 0.01);
});
if (lengths_match && (is_polygon || border.size() > 8)) {
if (is_polygon) {
// This is a polygon, add the separate edges with the center.
for (int j=0; j<int(border.size()); ++j)
plane.surface_features.emplace_back(SurfaceFeature(SurfaceFeatureType::Edge,
border[j==0 ? border.size()-1 : j-1], border[j],
std::make_optional(center)));
} else {
// The fit went well and it has more than 8 points - let's consider this a circle.
plane.surface_features.emplace_back(SurfaceFeature(SurfaceFeatureType::Circle, center, plane.normal, std::nullopt, radius));
}
done = true;
}
}
if (! done) {
// In this case, the border is not a circle and may contain circular
// segments. Try to find them and then add all remaining edges as edges.
auto are_angles_same = [](double a, double b) { return Slic3r::is_approx(a,b,0.01); };
auto are_lengths_same = [](double a, double b) { return Slic3r::is_approx(a,b,0.01); };
// Given an idx into border, return the index that is idx+offset position,
// while taking into account the need for wrap-around and the fact that
// the first and last point are the same.
auto offset_to_index = [border_size = int(border.size())](int idx, int offset) -> int {
assert(std::abs(offset) < border_size);
int out = idx+offset;
if (out >= border_size)
out = out - border_size;
else if (out < 0)
out = border_size + out;
return out;
};
// First calculate angles at all the vertices.
angles.clear();
lengths.clear();
for (int i=0; i<int(border.size()); ++i) { // front is the same as back, hence the weird indexing
const Vec3d& v2 = (i == 0 ? border[0] - border[border.size()-2]
: border[i] - border[i-1]);
const Vec3d& v1 = i == (int)border.size()-1 ? border[1] - border.back()
: border[i+1] - border[i];
int first_different_angle_idx = 0;
for (int i=0; i<int(border.size()); ++i) {
const Vec3d& v2 = border[i] - (i == 0 ? border[border.size()-1] : border[i-1]);
const Vec3d& v1 = (i == int(border.size()-1) ? border[0] : border[i+1]) - border[i];
double angle = atan2(-normal.dot(v1.cross(v2)), -v1.dot(v2)) + M_PI;
if (angle > M_PI)
angle = 2*M_PI - angle;
angles.push_back(angle);
lengths.push_back(v2.norm());
if (first_different_angle_idx == 0 && angles.size() > 1) {
if (! are_angles_same(angles.back(), angles[angles.size()-2]))
first_different_angle_idx = angles.size()-1;
}
}
assert(border.size() == angles.size());
assert(border.size() == lengths.size());
// First go around the border and pick what might be circular segments.
// Save pair of indices to where such potential segments start and end.
// Also remember the length of these segments.
int start_idx = -1;
bool circle = false;
bool first_iter = true;
std::vector<SurfaceFeature> circles;
std::vector<SurfaceFeature> edges;
std::vector<std::pair<int, int>> circles_idxs;
std::vector<double> circles_lengths;
for (int i=1; i<(int)angles.size(); ++i) {
if (Slic3r::is_approx(lengths[i], lengths[i-1])
&& Slic3r::is_approx(angles[i], angles[i-1])
&& i != (int)angles.size()-1 ) {
//std::vector<double> circles_lengths;
std::vector<Vec3d> single_circle; // could be in loop-scope, but reallocations
double single_circle_length = 0.;
int first_pt_idx = offset_to_index(first_different_angle_idx, 1);
int i = first_pt_idx;
while (i != first_pt_idx || first_iter) {
if (are_angles_same(angles[i], angles[offset_to_index(i,-1)])
&& i != offset_to_index(first_pt_idx, -1) // not the last point
&& i != start_idx ) {
// circle
if (! circle) {
circle = true;
start_idx = std::max(0, i-2);
single_circle.clear();
single_circle_length = 0.;
start_idx = offset_to_index(i, -2);
single_circle = { border[start_idx], border[offset_to_index(start_idx,1)] };
single_circle_length += lengths[offset_to_index(i, -1)];
}
single_circle.emplace_back(border[i]);
single_circle_length += lengths[i];
} else {
if (circle) {
const auto& [center, radius] = get_center_and_radius(border, start_idx, i, trafo);
if (circle && single_circle.size() >= 5) { // Less than 5 vertices? Not a circle.
single_circle.emplace_back(border[i]);
single_circle_length += lengths[i];
bool accept_circle = true;
{
// Check that lengths of internal (!!!) edges match.
int j = offset_to_index(start_idx, 3);
while (j != i) {
if (! are_lengths_same(lengths[offset_to_index(j,-1)], lengths[j])) {
accept_circle = false;
break;
}
j = offset_to_index(j, 1);
}
}
if (accept_circle) {
const auto& [center, radius] = get_center_and_radius(single_circle, trafo);
// Check that the fit went well. The tolerance is high, only to
// reject complete failures.
accept_circle &= circle_fit_is_ok(single_circle, center, radius);
// If the segment subtends less than 90 degrees, throw it away.
accept_circle &= single_circle_length / radius > 0.9*M_PI/2.;
if (accept_circle) {
// Add the circle and remember indices into borders.
circles_idxs.emplace_back(start_idx, i);
circles.emplace_back(SurfaceFeature(SurfaceFeatureType::Circle, center, plane.normal, std::nullopt, radius));
circles_lengths.emplace_back(std::accumulate(lengths.begin() + start_idx + 1, lengths.begin() + i + 1, 0.));
}
}
}
circle = false;
}
// Take care of the wrap around.
first_iter = false;
i = offset_to_index(i, 1);
}
}
// At this point we might need to merge the first and last segment, if the starting
// point happened to be inside the segment. The discrimination of too small segments
// will follow, so we need a complete picture before that.
if (circles_idxs.size() > 1
&& circles_idxs.back().second == angles.size()-1
&& circles_idxs.front().first == 0) {
// Possibly the same circle. Check that the angle and length criterion holds along the combined segment.
bool same = true;
double last_len = -1.;
double last_angle = 0.;
for (int i=circles_idxs.back().first + 1; i != circles_idxs.front().second; ++i) {
if (i == angles.size())
i = 1;
if (last_len == -1.) {
last_len = lengths[i];
last_angle = angles[i];
} else {
if (! Slic3r::is_approx(lengths[i], last_len) || ! Slic3r::is_approx(angles[i], last_angle)) {
same = false;
break;
}
}
}
if (same) {
// This seems to really be the same circle. Better apply ransac again. The parts can be small and inexact.
std::vector<Vec3d> points(border.begin() + circles_idxs.back().first, border.end());
points.insert(points.end(), border.begin(), border.begin() + circles_idxs.front().second+1);
auto [c, radius] = get_center_and_radius(points, 0, points.size()-1, trafo);
// Now replace the first circle with the combined one, remove the last circle.
// First index of the first circle is saved negative - we are going to pick edges
// from the border later, we will need to know where the merged in segment was.
// The sign simplifies the algorithm that picks the remaining edges - see below.
circles.front() = SurfaceFeature(SurfaceFeatureType::Circle, c, plane.normal, std::nullopt, radius);
circles_idxs.front().first = - circles_idxs.back().first;
circles_lengths.front() += circles_lengths.back();
circles.pop_back();
circles_idxs.pop_back();
circles_lengths.pop_back();
}
}
// Now throw away all circles that subtend less than 90 deg.
assert(circles.size() == circles_lengths.size());
for (int i=0; i<int(circles.size()); ++i) {
double r = std::get<1>(circles[i].get_circle());
if (circles_lengths[i] / r < 0.9*M_PI/2.) {
circles_lengths.erase(circles_lengths.begin() + i);
circles.erase(circles.begin() + i);
circles_idxs.erase(circles_idxs.begin() + i);
--i;
}
}
circles_lengths.clear(); // no longer needed, make it obvious
// Anything under 5 vertices shall not be considered a circle.
assert(circles_idxs.size() == circles.size());
for (int i=int(circles_idxs.size())-1; i>=0; --i) {
const auto& [start, end] = circles_idxs[i];
int N = start >= 0
? end - start + (start == 0 && end == border.size()-1 ? 0 : 1) // last point is the same as first
: end + (border.size() + start);
if (N < 5) {
circles.erase(circles.begin() + i);
circles_idxs.erase(circles_idxs.begin() + i);
} else if (N <= 8 && start == 0 && end == border.size()-1) {
// This is a regular 5-8 polygon. Add the edges as edges with a special
// point and remove the circle. Leave the indices in circles_idxs, so
// the edges are not picked up again later.
const Vec3d center = std::get<0>(circles[i].get_circle());
for (int j=1; j<=end; ++j)
edges.emplace_back(SurfaceFeature(SurfaceFeatureType::Edge,
border[j - 1], border[j], std::make_optional(center)));
circles.erase(circles.begin() + i);
}
}
// We have the circles. Now go around again and pick edges, while jumping over circles.
// If the first index of the first circle is negative, it means that it was merged
// with a segment that was originally at the back and is no longer there. Ressurect
// its pair of indices so that edges are not picked again.
if (! circles_idxs.empty() && circles_idxs.front().first < 0)
circles_idxs.emplace_back(-circles_idxs.front().first, int(border.size()));
int cidx = 0; // index of next circle to jump over
for (int i=1; i<int(border.size()); ++i) {
if (cidx < (int)circles_idxs.size() && i > (int)circles_idxs[cidx].first)
i = circles_idxs[cidx++].second;
else
if (circles_idxs.empty()) {
// Just add all edges.
for (int i=1; i<int(border.size()); ++i)
edges.emplace_back(SurfaceFeature(SurfaceFeatureType::Edge, border[i-1], border[i]));
edges.emplace_back(SurfaceFeature(SurfaceFeatureType::Edge, border[0], border[border.size()-1]));
} else if (circles_idxs.size() > 1 || circles_idxs.front().first != circles_idxs.front().second) {
// There is at least one circular segment. Start at its end and add edges until the start of the next one.
int i = circles_idxs.front().second;
int circle_idx = 1;
while (true) {
i = offset_to_index(i, 1);
edges.emplace_back(SurfaceFeature(SurfaceFeatureType::Edge, border[offset_to_index(i,-1)], border[i]));
if (circle_idx < int(circles_idxs.size()) && i == circles_idxs[circle_idx].first) {
i = circles_idxs[circle_idx].second;
++circle_idx;
}
if (i == circles_idxs.front().first)
break;
}
}
// Merge adjacent edges where needed.
@ -405,6 +462,7 @@ void MeasuringImpl::extract_features()
plane.surface_features.insert(plane.surface_features.end(), std::make_move_iterator(edges.begin()),
std::make_move_iterator(edges.end()));
}
}
// The last surface feature is the plane itself.
Vec3d cog = Vec3d::Zero();
@ -510,6 +568,10 @@ const std::vector<SurfaceFeature>& MeasuringImpl::get_plane_features(unsigned in
return m_planes[plane_id].surface_features;
}
const TriangleMesh& MeasuringImpl::get_mesh() const
{
return this->m_mesh;
}
@ -551,6 +613,11 @@ const std::vector<SurfaceFeature>& Measuring::get_plane_features(unsigned int pl
return priv->get_plane_features(plane_id);
}
const TriangleMesh& Measuring::get_mesh() const
{
return priv->get_mesh();
}
const AngleAndEdges AngleAndEdges::Dummy = { 0.0, Vec3d::Zero(), { Vec3d::Zero(), Vec3d::Zero() }, { Vec3d::Zero(), Vec3d::Zero() }, 0.0, true };
static AngleAndEdges angle_edge_edge(const std::pair<Vec3d, Vec3d>& e1, const std::pair<Vec3d, Vec3d>& e2)
@ -620,8 +687,8 @@ static AngleAndEdges angle_edge_edge(const std::pair<Vec3d, Vec3d>& e1, const st
static AngleAndEdges angle_edge_plane(const std::pair<Vec3d, Vec3d>& e, const std::tuple<int, Vec3d, Vec3d>& p)
{
const auto& [idx, normal, origin] = p;
const Vec3d e1e2_unit = edge_direction(e);
if (are_parallel(e1e2_unit, normal) || are_perpendicular(e1e2_unit, normal))
Vec3d e1e2_unit = edge_direction(e);
if (are_perpendicular(e1e2_unit, normal))
return AngleAndEdges::Dummy;
// ensure the edge is pointing away from the intersection
@ -633,8 +700,22 @@ static AngleAndEdges angle_edge_plane(const std::pair<Vec3d, Vec3d>& e, const st
// then verify edge direction and revert it, if needed
Vec3d e1 = e.first;
Vec3d e2 = e.second;
if ((e1 - inters).squaredNorm() > (e2 - inters).squaredNorm())
if ((e1 - inters).squaredNorm() > (e2 - inters).squaredNorm()) {
std::swap(e1, e2);
e1e2_unit = -e1e2_unit;
}
if (are_parallel(e1e2_unit, normal)) {
const std::array<Vec3d, 3> basis = orthonormal_basis(e1e2_unit);
const double radius = (0.5 * (e1 + e2) - inters).norm();
const Vec3d edge_on_plane_dir = (basis[1].dot(origin - inters) >= 0.0) ? basis[1] : -basis[1];
std::pair<Vec3d, Vec3d> edge_on_plane = std::make_pair(inters, inters + radius * edge_on_plane_dir);
if (!inters.isApprox(e1)) {
edge_on_plane.first += radius * edge_on_plane_dir;
edge_on_plane.second += radius * edge_on_plane_dir;
}
return AngleAndEdges(0.5 * double(PI), inters, std::make_pair(e1, e2), edge_on_plane, radius, inters.isApprox(e1));
}
const Vec3d e1e2 = e2 - e1;
const double e1e2_len = e1e2.norm();
@ -763,7 +844,8 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
} else if (f1.get_type() == SurfaceFeatureType::Edge) {
}
else if (f1.get_type() == SurfaceFeatureType::Edge) {
if (f2.get_type() == SurfaceFeatureType::Edge) {
std::vector<DistAndPoints> distances;
@ -890,21 +972,6 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
const Vec3d D = c1 - c0;
if (!are_parallel(n0, n1)) {
auto orthonormal_basis = [](const Vec3d& v) {
std::array<Vec3d, 3> ret;
ret[2] = v.normalized();
int index;
ret[2].maxCoeff(&index);
switch (index)
{
case 0: { ret[0] = Vec3d(ret[2].y(), -ret[2].x(), 0.0).normalized(); break; }
case 1: { ret[0] = Vec3d(0.0, ret[2].z(), -ret[2].y()).normalized(); break; }
case 2: { ret[0] = Vec3d(-ret[2].z(), 0.0, ret[2].x()).normalized(); break; }
}
ret[1] = ret[2].cross(ret[0]).normalized();
return ret;
};
// Get parameters for constructing the degree-8 polynomial phi.
const double one = 1.0;
const double two = 2.0;
@ -1149,27 +1216,6 @@ MeasurementResult get_measurement(const SurfaceFeature& a, const SurfaceFeature&
return result;
}
void DistAndPoints::transform(const Transform3d& trafo) {
from = trafo * from;
to = trafo * to;
dist = (to - from).norm();
}
void AngleAndEdges::transform(const Transform3d& trafo) {
const Vec3d old_e1 = e1.second - e1.first;
const Vec3d old_e2 = e2.second - e2.first;
center = trafo * center;
e1.first = trafo * e1.first;
e1.second = trafo * e1.second;
e2.first = trafo * e2.first;
e2.second = trafo * e2.second;
angle = std::acos(std::clamp(Measure::edge_direction(e1).dot(Measure::edge_direction(e2)), -1.0, 1.0));
const Vec3d new_e1 = e1.second - e1.first;
const Vec3d new_e2 = e2.second - e2.first;
const double average_scale = 0.5 * (new_e1.norm() / old_e1.norm() + new_e2.norm() / old_e2.norm());
radius = average_scale * radius;
}

View File

@ -12,6 +12,9 @@ struct indexed_triangle_set;
namespace Slic3r {
class TriangleMesh;
namespace Measure {
@ -87,8 +90,7 @@ class MeasuringImpl;
class Measuring {
public:
// Construct the measurement object on a given its. The its must remain
// valid and unchanged during the whole lifetime of the object.
// Construct the measurement object on a given its.
explicit Measuring(const indexed_triangle_set& its);
~Measuring();
@ -108,6 +110,9 @@ public:
// Returns the surface features of the plane with the given index
const std::vector<SurfaceFeature>& get_plane_features(unsigned int plane_id) const;
// Returns the mesh used for measuring
const TriangleMesh& get_mesh() const;
private:
std::unique_ptr<MeasuringImpl> priv;
};
@ -118,8 +123,6 @@ struct DistAndPoints {
double dist;
Vec3d from;
Vec3d to;
void transform(const Transform3d& trafo);
};
struct AngleAndEdges {
@ -132,8 +135,6 @@ struct AngleAndEdges {
double radius;
bool coplanar;
void transform(const Transform3d& trafo);
static const AngleAndEdges Dummy;
};
@ -150,17 +151,6 @@ struct MeasurementResult {
bool has_any_data() const {
return angle.has_value() || distance_infinite.has_value() || distance_strict.has_value() || distance_xyz.has_value();
}
void transform(const Transform3d& trafo) {
if (angle.has_value())
angle->transform(trafo);
if (distance_infinite.has_value())
distance_infinite->transform(trafo);
if (distance_strict.has_value()) {
distance_strict->transform(trafo);
distance_xyz = (distance_strict->to - distance_strict->from).cwiseAbs();
}
}
};
// Returns distance/angle between two SurfaceFeatures.

View File

@ -1279,6 +1279,14 @@ void ModelObject::invalidate_cut()
volume->invalidate_cut_info();
}
void ModelObject::delete_connectors()
{
for (int id = int(this->volumes.size()) - 1; id >= 0; id--) {
if (volumes[id]->is_cut_connector())
this->delete_volume(size_t(id));
}
}
void ModelObject::synchronize_model_after_cut()
{
for (ModelObject* obj : m_model->objects) {
@ -1994,6 +2002,14 @@ int ModelObject::get_repaired_errors_count(const int vol_idx /*= -1*/) const
stats.facets_reversed + stats.backwards_edges;
}
bool ModelObject::has_solid_mesh() const
{
for (const ModelVolume* volume : volumes)
if (volume->is_model_part())
return true;
return false;
}
void ModelVolume::set_material_id(t_model_material_id material_id)
{
m_material_id = material_id;

View File

@ -449,6 +449,8 @@ public:
void apply_cut_connectors(const std::string& name);
// invalidate cut state for this object and its connectors/volumes
void invalidate_cut();
// delete volumes which are marked as connector for this object
void delete_connectors();
void synchronize_model_after_cut();
void apply_cut_attributes(ModelObjectCutAttributes attributes);
void clone_for_cut(ModelObject **obj);
@ -482,6 +484,8 @@ public:
// Get count of errors in the mesh( or all object's meshes, if volume index isn't defined)
int get_repaired_errors_count(const int vol_idx = -1) const;
// Detect if object has at least one solid mash
bool has_solid_mesh() const;
bool is_cut() const { return cut_id.id().valid(); }
bool has_connectors() const;
@ -758,9 +762,7 @@ public:
// The triangular model.
const TriangleMesh& mesh() const { return *m_mesh.get(); }
#if ENABLE_RAYCAST_PICKING
std::shared_ptr<const TriangleMesh> mesh_ptr() const { return m_mesh; }
#endif // ENABLE_RAYCAST_PICKING
void set_mesh(const TriangleMesh &mesh) { m_mesh = std::make_shared<const TriangleMesh>(mesh); }
void set_mesh(TriangleMesh &&mesh) { m_mesh = std::make_shared<const TriangleMesh>(std::move(mesh)); }
void set_mesh(const indexed_triangle_set &mesh) { m_mesh = std::make_shared<const TriangleMesh>(mesh); }

View File

@ -4,6 +4,8 @@
#include <admesh/stl.h>
#include <libslic3r/TriangleMesh.hpp>
#include "boost/container/small_vector.hpp"
namespace Slic3r {
class TriangleMesh;
@ -115,11 +117,18 @@ public:
size_t degree(Vertex_index v) const
{
// In case the mesh is broken badly, the loop might end up to be infinite,
// never getting back to the first halfedge. Remember list of all half-edges
// and trip if any is encountered for the second time.
Halfedge_index h_first = halfedge(v);
boost::container::small_vector<Halfedge_index, 10> he_visited;
Halfedge_index h = next_around_target(h_first);
size_t degree = 2;
while (! h.is_invalid() && h != h_first) {
he_visited.emplace_back(h);
h = next_around_target(h);
if (std::find(he_visited.begin(), he_visited.end(), h) == he_visited.end())
return 0;
++degree;
}
return h.is_invalid() ? 0 : degree - 1;

View File

@ -28,6 +28,8 @@
#define DISABLE_GCODEVIEWER_INSTANCED_MODELS 1
// Enable Measure Gizmo debug window
#define ENABLE_MEASURE_GIZMO_DEBUG 0
// Enable scene raycast picking debug window
#define ENABLE_RAYCAST_PICKING_DEBUG 0
// Enable rendering of objects using environment map
@ -37,12 +39,12 @@
//====================
// 2.5.0.alpha1 techs
// 2.6.0.alpha1 techs
//====================
#define ENABLE_2_5_0_ALPHA1 1
#define ENABLE_2_6_0_ALPHA1 1
// Enable removal of legacy OpenGL calls
#define ENABLE_LEGACY_OPENGL_REMOVAL (1 && ENABLE_2_5_0_ALPHA1)
#define ENABLE_LEGACY_OPENGL_REMOVAL (1 && ENABLE_2_6_0_ALPHA1)
// Enable OpenGL ES
#define ENABLE_OPENGL_ES (0 && ENABLE_LEGACY_OPENGL_REMOVAL)
// Enable OpenGL core profile context (tested against Mesa 20.1.8 on Windows)
@ -52,18 +54,15 @@
// Shows an imgui dialog with GLModel statistics data
#define ENABLE_GLMODEL_STATISTICS (0 && ENABLE_LEGACY_OPENGL_REMOVAL)
// Enable rework of Reload from disk command
#define ENABLE_RELOAD_FROM_DISK_REWORK (1 && ENABLE_2_5_0_ALPHA1)
#define ENABLE_RELOAD_FROM_DISK_REWORK (1 && ENABLE_2_6_0_ALPHA1)
// Enable editing volumes transformation in world coordinates and instances in local coordinates
#define ENABLE_WORLD_COORDINATE (1 && ENABLE_2_5_0_ALPHA1)
#define ENABLE_WORLD_COORDINATE (1 && ENABLE_2_6_0_ALPHA1)
// Enable alternative version of file_wildcards()
#define ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR (1 && ENABLE_2_5_0_ALPHA1)
#define ENABLE_ALTERNATIVE_FILE_WILDCARDS_GENERATOR (1 && ENABLE_2_6_0_ALPHA1)
// Enable processing of gcode G2 and G3 lines
#define ENABLE_PROCESS_G2_G3_LINES (1 && ENABLE_2_5_0_ALPHA1)
#define ENABLE_PROCESS_G2_G3_LINES (1 && ENABLE_2_6_0_ALPHA1)
// Enable fix of used filament data exported to gcode file
#define ENABLE_USED_FILAMENT_POST_PROCESS (1 && ENABLE_2_5_0_ALPHA1)
// Enable picking using raytracing
#define ENABLE_RAYCAST_PICKING (1 && ENABLE_LEGACY_OPENGL_REMOVAL)
#define ENABLE_RAYCAST_PICKING_DEBUG (0 && ENABLE_RAYCAST_PICKING)
#define ENABLE_USED_FILAMENT_POST_PROCESS (1 && ENABLE_2_6_0_ALPHA1)
#endif // _prusaslicer_technologies_h_

View File

@ -252,10 +252,8 @@ bool Bed3D::set_shape(const Pointfs& bed_shape, const double max_print_height, c
m_axes.set_origin({ 0.0, 0.0, static_cast<double>(GROUND_Z) });
m_axes.set_stem_length(0.1f * static_cast<float>(m_build_volume.bounding_volume().max_size()));
#if ENABLE_RAYCAST_PICKING
// unregister from picking
wxGetApp().plater()->canvas3D()->remove_raycasters_for_picking(SceneRaycaster::EType::Bed);
#endif // ENABLE_RAYCAST_PICKING
// Let the calee to update the UI.
return true;
@ -309,11 +307,7 @@ void Bed3D::render_internal(GLCanvas3D& canvas, bool bottom, float scale_factor,
glsafe(::glEnable(GL_DEPTH_TEST));
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_model.model.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR);
#else
m_model.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR);
#endif // ENABLE_RAYCAST_PICKING
#else
m_model.set_color(-1, picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR);
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
@ -355,11 +349,7 @@ BoundingBoxf3 Bed3D::calc_extended_bounding_box() const
out.merge(out.min + Vec3d(-Axes::DefaultTipRadius, -Axes::DefaultTipRadius, out.max.z()));
#endif // ENABLE_WORLD_COORDINATE
// extend to contain model, if any
#if ENABLE_RAYCAST_PICKING
BoundingBoxf3 model_bb = m_model.model.get_bounding_box();
#else
BoundingBoxf3 model_bb = m_model.get_bounding_box();
#endif // ENABLE_RAYCAST_PICKING
if (model_bb.defined) {
model_bb.translate(m_model_offset);
out.merge(model_bb);
@ -409,16 +399,12 @@ void Bed3D::init_triangles()
init_data.add_triangle(vertices_counter - 3, vertices_counter - 2, vertices_counter - 1);
}
#if ENABLE_RAYCAST_PICKING
if (m_model.model.get_filename().empty() && m_model.mesh_raycaster == nullptr)
// register for picking
register_raycasters_for_picking(init_data, Transform3d::Identity());
#endif // ENABLE_RAYCAST_PICKING
m_triangles.init_from(std::move(init_data));
#if ENABLE_RAYCAST_PICKING
m_triangles.set_color(DEFAULT_MODEL_COLOR);
#endif // ENABLE_RAYCAST_PICKING
}
void Bed3D::init_gridlines()
@ -798,17 +784,9 @@ void Bed3D::render_model()
if (m_model_filename.empty())
return;
#if ENABLE_RAYCAST_PICKING
if (m_model.model.get_filename() != m_model_filename && m_model.model.init_from_file(m_model_filename)) {
#else
if (m_model.get_filename() != m_model_filename && m_model.init_from_file(m_model_filename)) {
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_model.model.set_color(DEFAULT_MODEL_COLOR);
#else
m_model.set_color(DEFAULT_MODEL_COLOR);
#endif // ENABLE_RAYCAST_PICKING
#else
m_model.set_color(-1, DEFAULT_MODEL_COLOR);
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
@ -816,20 +794,14 @@ void Bed3D::render_model()
// move the model so that its origin (0.0, 0.0, 0.0) goes into the bed shape center and a bit down to avoid z-fighting with the texture quad
m_model_offset = to_3d(m_build_volume.bounding_volume2d().center(), -0.03);
#if ENABLE_RAYCAST_PICKING
// register for picking
register_raycasters_for_picking(m_model.model.get_geometry(), Geometry::translation_transform(m_model_offset));
#endif // ENABLE_RAYCAST_PICKING
// update extended bounding box
m_extended_bounding_box = this->calc_extended_bounding_box();
}
#if ENABLE_RAYCAST_PICKING
if (!m_model.model.get_filename().empty()) {
#else
if (!m_model.get_filename().empty()) {
#endif // ENABLE_RAYCAST_PICKING
GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light");
if (shader != nullptr) {
shader->start_using();
@ -844,11 +816,7 @@ void Bed3D::render_model()
glsafe(::glPushMatrix());
glsafe(::glTranslated(m_model_offset.x(), m_model_offset.y(), m_model_offset.z()));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_model.model.render();
#else
m_model.render();
#endif // ENABLE_RAYCAST_PICKING
#if !ENABLE_LEGACY_OPENGL_REMOVAL
glsafe(::glPopMatrix());
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
@ -914,23 +882,14 @@ void Bed3D::render_default(bool bottom, bool picking, bool show_texture)
glsafe(::glEnable(GL_BLEND));
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
#if ENABLE_RAYCAST_PICKING
const bool has_model = !m_model.model.get_filename().empty();
#else
const bool has_model = !m_model.get_filename().empty();
#endif // ENABLE_RAYCAST_PICKING
if (!has_model && !bottom) {
// draw background
glsafe(::glDepthMask(GL_FALSE));
#if !ENABLE_RAYCAST_PICKING
m_triangles.set_color(picking ? PICKING_MODEL_COLOR : DEFAULT_MODEL_COLOR);
#endif // !ENABLE_RAYCAST_PICKING
m_triangles.render();
glsafe(::glDepthMask(GL_TRUE));
}
#if ENABLE_RAYCAST_PICKING
if (show_texture) {
// draw grid
#if ENABLE_GL_CORE_PROFILE
@ -942,19 +901,6 @@ void Bed3D::render_default(bool bottom, bool picking, bool show_texture)
}
else
render_contour(view_matrix, projection_matrix);
#else
if (!picking && show_texture) {
// draw grid
#if ENABLE_GL_CORE_PROFILE
if (!OpenGLManager::get_gl_info().is_core_profile())
#endif // ENABLE_GL_CORE_PROFILE
glsafe(::glLineWidth(1.5f * m_scale_factor));
m_gridlines.set_color(has_model && !bottom ? DEFAULT_SOLID_GRID_COLOR : DEFAULT_TRANSPARENT_GRID_COLOR);
m_gridlines.render();
}
else if (!show_texture)
render_contour(view_matrix, projection_matrix);
#endif // ENABLE_RAYCAST_PICKING
glsafe(::glDisable(GL_BLEND));
@ -1047,7 +993,6 @@ void Bed3D::release_VBOs()
}
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
void Bed3D::register_raycasters_for_picking(const GLModel::Geometry& geometry, const Transform3d& trafo)
{
assert(m_model.mesh_raycaster == nullptr);
@ -1066,7 +1011,6 @@ void Bed3D::register_raycasters_for_picking(const GLModel::Geometry& geometry, c
m_model.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
wxGetApp().plater()->canvas3D()->add_raycaster_for_picking(SceneRaycaster::EType::Bed, 0, *m_model.mesh_raycaster, trafo);
}
#endif // ENABLE_RAYCAST_PICKING
} // GUI
} // Slic3r

View File

@ -8,9 +8,7 @@
#else
#include "GLModel.hpp"
#endif // ENABLE_WORLD_COORDINATE
#if ENABLE_RAYCAST_PICKING
#include "MeshUtils.hpp"
#endif // ENABLE_RAYCAST_PICKING
#include "libslic3r/BuildVolume.hpp"
#if ENABLE_LEGACY_OPENGL_REMOVAL
@ -111,11 +109,7 @@ private:
GLTexture m_texture;
// temporary texture shown until the main texture has still no levels compressed
GLTexture m_temp_texture;
#if ENABLE_RAYCAST_PICKING
PickingModel m_model;
#else
GLModel m_model;
#endif // ENABLE_RAYCAST_PICKING
Vec3d m_model_offset{ Vec3d::Zero() };
#if !ENABLE_LEGACY_OPENGL_REMOVAL
unsigned int m_vbo_id{ 0 };
@ -205,9 +199,7 @@ private:
void release_VBOs();
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
void register_raycasters_for_picking(const GLModel::Geometry& geometry, const Transform3d& trafo);
#endif // ENABLE_RAYCAST_PICKING
};
} // GUI

View File

@ -807,27 +807,17 @@ int GLVolumeCollection::load_object_volume(
const ModelVolume *model_volume = model_object->volumes[volume_idx];
const int extruder_id = model_volume->extruder_id();
const ModelInstance *instance = model_object->instances[instance_idx];
#if ENABLE_RAYCAST_PICKING
std::shared_ptr<const TriangleMesh> mesh = model_volume->mesh_ptr();
#else
const TriangleMesh &mesh = model_volume->mesh();
#endif // ENABLE_RAYCAST_PICKING
this->volumes.emplace_back(new GLVolume());
GLVolume& v = *this->volumes.back();
v.set_color(color_from_model_volume(*model_volume));
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_SMOOTH_NORMALS
v.model.init_from(*mesh, true);
#if ENABLE_RAYCAST_PICKING
v.mesh_raycaster = std::make_unique<GUI::MeshRaycaster>(mesh);
#endif // ENABLE_RAYCAST_PICKING
#else
#if ENABLE_RAYCAST_PICKING
v.model.init_from(*mesh);
v.mesh_raycaster = std::make_unique<GUI::MeshRaycaster>(mesh);
#else
v.model.init_from(mesh);
#endif // ENABLE_RAYCAST_PICKING
#endif // ENABLE_SMOOTH_NORMALS
#else
#if ENABLE_SMOOTH_NORMALS
@ -886,13 +876,10 @@ int GLVolumeCollection::load_wipe_tower_preview(
depth = std::max(depth, 10.f);
float min_width = 30.f;
#if ENABLE_RAYCAST_PICKING
const float scaled_brim_height = 0.2f / height;
#endif // ENABLE_RAYCAST_PICKING
// We'll now create the box with jagged edge. y-coordinates of the pre-generated model
// are shifted so that the front edge has y=0 and centerline of the back edge has y=depth:
#if ENABLE_RAYCAST_PICKING
// We split the box in three main pieces,
// the two laterals are identical and the central is the one containing the jagged geometry
@ -993,22 +980,6 @@ int GLVolumeCollection::load_wipe_tower_preview(
tooth_mesh.merge(TriangleMesh(std::move(data)));
data = generate_lateral(61.547f, 100.0f);
tooth_mesh.merge(TriangleMesh(std::move(data)));
#else
float out_points_idx[][3] = { { 0, -depth, 0 }, { 0, 0, 0 }, { 38.453f, 0, 0 }, { 61.547f, 0, 0 }, { 100.0f, 0, 0 }, { 100.0f, -depth, 0 }, { 55.7735f, -10.0f, 0 }, { 44.2265f, 10.0f, 0 },
{ 38.453f, 0, 1 }, { 0, 0, 1 }, { 0, -depth, 1 }, { 100.0f, -depth, 1 }, { 100.0f, 0, 1 }, { 61.547f, 0, 1 }, { 55.7735f, -10.0f, 1 }, { 44.2265f, 10.0f, 1 } };
static constexpr const int out_facets_idx[][3] = {
{ 0, 1, 2 }, { 3, 4, 5 }, { 6, 5, 0 }, { 3, 5, 6 }, { 6, 2, 7 }, { 6, 0, 2 }, { 8, 9, 10 }, { 11, 12, 13 }, { 10, 11, 14 }, { 14, 11, 13 }, { 15, 8, 14 },
{ 8, 10, 14 }, { 3, 12, 4 }, { 3, 13, 12 }, { 6, 13, 3 }, { 6, 14, 13 }, { 7, 14, 6 }, { 7, 15, 14 }, { 2, 15, 7 }, { 2, 8, 15 }, { 1, 8, 2 }, { 1, 9, 8 },
{ 0, 9, 1 }, { 0, 10, 9 }, { 5, 10, 0 }, { 5, 11, 10 }, { 4, 11, 5 }, { 4, 12, 11 } };
indexed_triangle_set its;
for (int i = 0; i < 16; ++i)
its.vertices.emplace_back(out_points_idx[i][0] / (100.f / min_width),
out_points_idx[i][1] + depth, out_points_idx[i][2]);
its.indices.reserve(28);
for (const int *face : out_facets_idx)
its.indices.emplace_back(face);
TriangleMesh tooth_mesh(std::move(its));
#endif // ENABLE_RAYCAST_PICKING
// We have the mesh ready. It has one tooth and width of min_width. We will now
// append several of these together until we are close to the required width
@ -1016,14 +987,9 @@ int GLVolumeCollection::load_wipe_tower_preview(
size_t n = std::max(1, int(width / min_width)); // How many shall be merged?
for (size_t i = 0; i < n; ++i) {
mesh.merge(tooth_mesh);
#if ENABLE_RAYCAST_PICKING
tooth_mesh.translate(100.0f, 0.0f, 0.0f);
#else
tooth_mesh.translate(min_width, 0.f, 0.f);
#endif // ENABLE_RAYCAST_PICKING
}
#if ENABLE_RAYCAST_PICKING
// Now we add the caps along the X axis
const float scaled_brim_width_x = brim_width * n * width / min_width;
auto generate_negx_cap = [&]() {
@ -1098,20 +1064,10 @@ int GLVolumeCollection::load_wipe_tower_preview(
data = generate_posx_cap();
mesh.merge(TriangleMesh(std::move(data)));
mesh.scale(Vec3f(width / (n * 100.0f), 1.0f, height)); // Scaling to proper width
#else
mesh.scale(Vec3f(width / (n * min_width), 1.f, height)); // Scaling to proper width
#endif // ENABLE_RAYCAST_PICKING
}
else
mesh = make_cube(width, depth, height);
#if !ENABLE_RAYCAST_PICKING
// We'll make another mesh to show the brim (fixed layer height):
TriangleMesh brim_mesh = make_cube(width + 2.f * brim_width, depth + 2.f * brim_width, 0.2f);
brim_mesh.translate(-brim_width, -brim_width, 0.f);
mesh.merge(brim_mesh);
#endif // !ENABLE_RAYCAST_PICKING
volumes.emplace_back(new GLVolume(color));
GLVolume& v = *volumes.back();
#if ENABLE_LEGACY_OPENGL_REMOVAL
@ -1121,9 +1077,7 @@ int GLVolumeCollection::load_wipe_tower_preview(
#endif // ENABLE_OPENGL_ES
v.model.init_from(mesh);
v.model.set_color(color);
#if ENABLE_RAYCAST_PICKING
v.mesh_raycaster = std::make_unique<GUI::MeshRaycaster>(std::make_shared<const TriangleMesh>(mesh));
#endif // ENABLE_RAYCAST_PICKING
#else
v.indexed_vertex_array.load_mesh(mesh);
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
@ -1232,15 +1186,10 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab
#endif // ENABLE_GL_CORE_PROFILE
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
ScopeGuard transparent_sg;
if (type == ERenderType::Transparent) {
glsafe(::glEnable(GL_BLEND));
glsafe(::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
glsafe(::glDepthMask(false));
transparent_sg = ScopeGuard([]() {
glsafe(::glDisable(GL_BLEND));
glsafe(::glDepthMask(true));
});
}
glsafe(::glCullFace(GL_BACK));
@ -1368,6 +1317,11 @@ void GLVolumeCollection::render(GLVolumeCollection::ERenderType type, bool disab
if (disable_cullface)
glsafe(::glEnable(GL_CULL_FACE));
if (type == ERenderType::Transparent) {
glsafe(::glDisable(GL_BLEND));
glsafe(::glDepthMask(true));
}
}
bool GLVolumeCollection::check_outside_state(const BuildVolume &build_volume, ModelInstanceEPrintVolumeState *out_state) const

View File

@ -10,9 +10,7 @@
#include "libslic3r/Color.hpp"
#include "GLModel.hpp"
#if ENABLE_RAYCAST_PICKING
#include "MeshUtils.hpp"
#endif // ENABLE_RAYCAST_PICKING
#include <functional>
#include <optional>
@ -393,10 +391,8 @@ public:
#if ENABLE_LEGACY_OPENGL_REMOVAL
GUI::GLModel model;
#if ENABLE_RAYCAST_PICKING
// raycaster used for picking
std::unique_ptr<GUI::MeshRaycaster> mesh_raycaster;
#endif // ENABLE_RAYCAST_PICKING
#else
// Interleaved triangles & normals with indexed triangles & quads.
GLIndexedVertexArray indexed_vertex_array;

View File

@ -91,7 +91,6 @@ void Camera::select_view(const std::string& direction)
look_at(m_target + m_distance * Vec3d::UnitY(), m_target, Vec3d::UnitZ());
}
#if ENABLE_RAYCAST_PICKING
double Camera::get_near_left() const
{
switch (m_type)
@ -163,7 +162,6 @@ double Camera::get_near_height() const
return 2.0 / m_projection_matrix.matrix()(1, 1);
}
}
#endif // ENABLE_RAYCAST_PICKING
double Camera::get_fov() const
{
@ -177,7 +175,6 @@ double Camera::get_fov() const
};
}
#if ENABLE_RAYCAST_PICKING
void Camera::set_viewport(int x, int y, unsigned int w, unsigned int h)
{
#if ENABLE_LEGACY_OPENGL_REMOVAL
@ -191,17 +188,6 @@ void Camera::apply_viewport() const
{
glsafe(::glViewport(m_viewport[0], m_viewport[1], m_viewport[2], m_viewport[3]));
}
#else
void Camera::apply_viewport(int x, int y, unsigned int w, unsigned int h)
{
glsafe(::glViewport(0, 0, w, h));
#if ENABLE_LEGACY_OPENGL_REMOVAL
m_viewport = { 0, 0, int(w), int(h) };
#else
glsafe(::glGetIntegerv(GL_VIEWPORT, m_viewport.data()));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
}
#endif // ENABLE_RAYCAST_PICKING
#if !ENABLE_LEGACY_OPENGL_REMOVAL
void Camera::apply_view_matrix()
@ -260,37 +246,7 @@ void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double fa
}
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
apply_projection(-w, w, -h, h, m_frustrum_zs.first, m_frustrum_zs.second);
#else
switch (m_type)
{
default:
case EType::Ortho:
{
const double dz = m_frustrum_zs.second - m_frustrum_zs.first;
const double zz = m_frustrum_zs.first + m_frustrum_zs.second;
m_projection_matrix.matrix() << 1.0 / w, 0.0, 0.0, 0.0,
0.0, 1.0 / h, 0.0, 0.0,
0.0, 0.0, -2.0 / dz, -zz / dz,
0.0, 0.0, 0.0, 1.0;
break;
}
case EType::Perspective:
{
const double n = m_frustrum_zs.first;
const double f = m_frustrum_zs.second;
const double dz = f - n;
const double zz = n + f;
const double fn = n * f;
m_projection_matrix.matrix() << n / w, 0.0, 0.0, 0.0,
0.0, n / h, 0.0, 0.0,
0.0, 0.0, -zz / dz, -2.0 * fn / dz,
0.0, 0.0, -1.0, 0.0;
break;
}
}
#endif // ENABLE_RAYCAST_PICKING
#else
glsafe(::glMatrixMode(GL_PROJECTION));
glsafe(::glLoadIdentity());
@ -315,7 +271,6 @@ void Camera::apply_projection(const BoundingBoxf3& box, double near_z, double fa
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
}
#if ENABLE_RAYCAST_PICKING
void Camera::apply_projection(double left, double right, double bottom, double top, double near_z, double far_z)
{
assert(left != right && bottom != top && near_z != far_z);
@ -344,7 +299,6 @@ void Camera::apply_projection(double left, double right, double bottom, double t
}
}
}
#endif // ENABLE_RAYCAST_PICKING
void Camera::zoom_to_box(const BoundingBoxf3& box, double margin_factor)
{

View File

@ -89,33 +89,24 @@ public:
double get_far_z() const { return m_frustrum_zs.second; }
const std::pair<double, double>& get_z_range() const { return m_frustrum_zs; }
#if ENABLE_RAYCAST_PICKING
double get_near_left() const;
double get_near_right() const;
double get_near_top() const;
double get_near_bottom() const;
double get_near_width() const;
double get_near_height() const;
#endif // ENABLE_RAYCAST_PICKING
double get_fov() const;
#if ENABLE_RAYCAST_PICKING
void set_viewport(int x, int y, unsigned int w, unsigned int h);
void apply_viewport() const;
#else
void apply_viewport(int x, int y, unsigned int w, unsigned int h);
#endif // ENABLE_RAYCAST_PICKING
#if !ENABLE_LEGACY_OPENGL_REMOVAL
void apply_view_matrix();
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
// Calculates and applies the projection matrix tighting the frustrum z range around the given box.
// If larger z span is needed, pass the desired values of near and far z (negative values are ignored)
void apply_projection(const BoundingBoxf3& box, double near_z = -1.0, double far_z = -1.0);
#if ENABLE_RAYCAST_PICKING
void apply_projection(double left, double right, double bottom, double top, double near_z, double far_z);
#endif // ENABLE_RAYCAST_PICKING
void zoom_to_box(const BoundingBoxf3& box, double margin_factor = DefaultZoomToBoxMarginFactor);
void zoom_to_volumes(const GLVolumePtrs& volumes, double margin_factor = DefaultZoomToVolumesMarginFactor);

View File

@ -1346,19 +1346,23 @@ void GLCanvas3D::toggle_sla_auxiliaries_visibility(bool visible, const ModelObje
m_render_sla_auxiliaries = visible;
std::vector<std::shared_ptr<SceneRaycasterItem>>* raycasters = get_raycasters_for_picking(SceneRaycaster::EType::Volume);
for (GLVolume* vol : m_volumes.volumes) {
if ((mo == nullptr || m_model->objects[vol->composite_id.object_id] == mo)
&& (instance_idx == -1 || vol->composite_id.instance_id == instance_idx)
&& vol->composite_id.volume_id < 0)
&& vol->composite_id.volume_id < 0) {
vol->is_active = visible;
auto it = std::find_if(raycasters->begin(), raycasters->end(), [vol](std::shared_ptr<SceneRaycasterItem> item) { return item->get_raycaster() == vol->mesh_raycaster.get(); });
if (it != raycasters->end())
(*it)->set_active(vol->is_active);
}
}
}
void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject* mo, int instance_idx, const ModelVolume* mv)
{
#if ENABLE_RAYCAST_PICKING
std::vector<std::shared_ptr<SceneRaycasterItem>>* raycasters = get_raycasters_for_picking(SceneRaycaster::EType::Volume);
#endif // ENABLE_RAYCAST_PICKING
for (GLVolume* vol : m_volumes.volumes) {
if (vol->is_wipe_tower)
vol->is_active = (visible && mo == nullptr);
@ -1381,8 +1385,6 @@ void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject
|| gizmo_type == GLGizmosManager::Cut)
&& !vol->is_modifier) {
vol->force_neutral_color = true;
if (gizmo_type == GLGizmosManager::Cut)
vol->color.a(0.95f);
}
else if (gizmo_type == GLGizmosManager::MmuSegmentation)
vol->is_active = false;
@ -1391,11 +1393,10 @@ void GLCanvas3D::toggle_model_objects_visibility(bool visible, const ModelObject
}
}
}
#if ENABLE_RAYCAST_PICKING
auto it = std::find_if(raycasters->begin(), raycasters->end(), [vol](std::shared_ptr<SceneRaycasterItem> item) { return item->get_raycaster() == vol->mesh_raycaster.get(); });
if (it != raycasters->end())
(*it)->set_active(vol->is_active);
#endif // ENABLE_RAYCAST_PICKING
}
if (visible && !mo)
@ -1653,12 +1654,8 @@ void GLCanvas3D::render()
// and the viewport was set incorrectly, leading to tripping glAsserts further down
// the road (in apply_projection). That's why the minimum size is forced to 10.
Camera& camera = wxGetApp().plater()->get_camera();
#if ENABLE_RAYCAST_PICKING
camera.set_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height()));
camera.apply_viewport();
#else
camera.apply_viewport(0, 0, std::max(10u, (unsigned int)cnv_size.get_width()), std::max(10u, (unsigned int)cnv_size.get_height()));
#endif // ENABLE_RAYCAST_PICKING
if (camera.requires_zoom_to_bed) {
zoom_to_bed();
@ -2270,7 +2267,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
manip->set_dirty();
}
#if ENABLE_RAYCAST_PICKING
// refresh volume raycasters for picking
m_scene_raycaster.remove_raycasters(SceneRaycaster::EType::Volume);
for (size_t i = 0; i < m_volumes.volumes.size(); ++i) {
@ -2287,7 +2283,6 @@ void GLCanvas3D::reload_scene(bool refresh_immediately, bool force_full_scene_re
m_scene_raycaster.remove_raycasters(SceneRaycaster::EType::Gizmo);
if (curr_gizmo != nullptr && !m_selection.is_empty())
curr_gizmo->register_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
// and force this canvas to be redrawn.
m_dirty = true;
@ -2833,11 +2828,7 @@ void GLCanvas3D::on_key(wxKeyEvent& evt)
// set_cursor(Standard);
}
else if (keyCode == WXK_CONTROL) {
#if ENABLE_RAYCAST_PICKING
if (m_mouse.dragging && !m_moving) {
#else
if (m_mouse.dragging) {
#endif // ENABLE_RAYCAST_PICKING
// if the user releases CTRL while rotating the 3D scene
// prevent from moving the selected volume
m_mouse.drag.move_volume_idx = -1;
@ -3353,9 +3344,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
if (!evt.CmdDown())
m_mouse.drag.start_position_3D = m_mouse.scene_position;
m_sequential_print_clearance_first_displacement = true;
#if !ENABLE_RAYCAST_PICKING
m_moving = true;
#endif // !ENABLE_RAYCAST_PICKING
}
}
}
@ -3399,9 +3387,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
}
#if ENABLE_WORLD_COORDINATE
#if ENABLE_RAYCAST_PICKING
m_moving = true;
#endif // ENABLE_RAYCAST_PICKING
TransformationType trafo_type;
trafo_type.set_relative();
m_selection.translate(cur_pos - m_mouse.drag.start_position_3D, trafo_type);
@ -3432,9 +3418,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
// do not process the dragging if the left mouse was set down in another canvas
else if (evt.LeftIsDown()) {
// if dragging over blank area with left button, rotate
#if ENABLE_RAYCAST_PICKING
if (!m_moving) {
#endif // ENABLE_RAYCAST_PICKING
if ((any_gizmo_active || evt.CmdDown() || m_hover_volume_idxs.empty()) && m_mouse.is_start_position_3D_defined()) {
const Vec3d rot = (Vec3d(pos.x(), pos.y(), 0.0) - m_mouse.drag.start_position_3D) * (PI * TRACKBALLSIZE / 180.0);
if (wxGetApp().app_config->get("use_free_camera") == "1")
@ -3453,9 +3437,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
m_dirty = true;
}
m_mouse.drag.start_position_3D = Vec3d((double)pos.x(), (double)pos.y(), 0.0);
#if ENABLE_RAYCAST_PICKING
}
#endif // ENABLE_RAYCAST_PICKING
}
else if (evt.MiddleIsDown() || evt.RightIsDown()) {
// If dragging over blank area with right/middle button, pan.
@ -3480,9 +3462,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
}
}
else if (evt.LeftUp() || evt.MiddleUp() || evt.RightUp()) {
#if ENABLE_RAYCAST_PICKING
m_mouse.position = pos.cast<double>();
#endif // ENABLE_RAYCAST_PICKING
if (m_layers_editing.state != LayersEditing::Unknown) {
m_layers_editing.state = LayersEditing::Unknown;
@ -3508,9 +3488,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
deselect_all();
}
else if (evt.RightUp()) {
#if !ENABLE_RAYCAST_PICKING
m_mouse.position = pos.cast<double>();
#endif // !ENABLE_RAYCAST_PICKING
// forces a frame render to ensure that m_hover_volume_idxs is updated even when the user right clicks while
// the context menu is already shown
render();
@ -4501,12 +4478,8 @@ void GLCanvas3D::_render_thumbnail_internal(ThumbnailData& thumbnail_data, const
Camera camera;
camera.set_type(camera_type);
camera.set_scene_box(scene_bounding_box());
#if ENABLE_RAYCAST_PICKING
camera.set_viewport(0, 0, thumbnail_data.width, thumbnail_data.height);
camera.apply_viewport();
#else
camera.apply_viewport(0, 0, thumbnail_data.width, thumbnail_data.height);
#endif // ENABLE_RAYCAST_PICKING
camera.zoom_to_box(volumes_box);
#if ENABLE_LEGACY_OPENGL_REMOVAL
@ -4808,11 +4781,7 @@ void GLCanvas3D::_render_thumbnail_legacy(ThumbnailData& thumbnail_data, unsigne
#endif // ENABLE_THUMBNAIL_GENERATOR_DEBUG_OUTPUT
// restore the default framebuffer size to avoid flickering on the 3D scene
#if ENABLE_RAYCAST_PICKING
wxGetApp().plater()->get_camera().apply_viewport();
#else
wxGetApp().plater()->get_camera().apply_viewport(0, 0, cnv_size.get_width(), cnv_size.get_height());
#endif // ENABLE_RAYCAST_PICKING
}
bool GLCanvas3D::_init_toolbars()
@ -5279,7 +5248,6 @@ void GLCanvas3D::_refresh_if_shown_on_screen()
}
}
#if ENABLE_RAYCAST_PICKING
void GLCanvas3D::_picking_pass()
{
if (!m_picking_enabled || m_mouse.dragging || m_mouse.position == Vec2d(DBL_MAX, DBL_MAX) || m_gizmos.is_dragging()) {
@ -5365,12 +5333,17 @@ void GLCanvas3D::_picking_pass()
default: { break; }
}
auto add_strings_row_to_table = [&imgui](const std::string& col_1, const ImVec4& col_1_color, const std::string& col_2, const ImVec4& col_2_color) {
auto add_strings_row_to_table = [&imgui](const std::string& col_1, const ImVec4& col_1_color, const std::string& col_2, const ImVec4& col_2_color,
const std::string& col_3 = "", const ImVec4& col_3_color = ImGui::GetStyleColorVec4(ImGuiCol_Text)) {
ImGui::TableNextRow();
ImGui::TableSetColumnIndex(0);
imgui.text_colored(col_1_color, col_1.c_str());
ImGui::TableSetColumnIndex(1);
imgui.text_colored(col_2_color, col_2.c_str());
if (!col_3.empty()) {
ImGui::TableSetColumnIndex(2);
imgui.text_colored(col_3_color, col_3.c_str());
}
};
char buf[1024];
@ -5399,85 +5372,24 @@ void GLCanvas3D::_picking_pass()
add_strings_row_to_table("Gizmo elements", ImGuiWrapper::COL_ORANGE_LIGHT, std::string(buf), ImGui::GetStyleColorVec4(ImGuiCol_Text));
ImGui::EndTable();
}
std::vector<std::shared_ptr<SceneRaycasterItem>>* gizmo_raycasters = m_scene_raycaster.get_raycasters(SceneRaycaster::EType::Gizmo);
if (gizmo_raycasters != nullptr && !gizmo_raycasters->empty()) {
ImGui::Separator();
imgui.text("Gizmo raycasters IDs:");
if (ImGui::BeginTable("GizmoRaycasters", 3)) {
for (size_t i = 0; i < gizmo_raycasters->size(); ++i) {
add_strings_row_to_table(std::to_string(i), ImGuiWrapper::COL_ORANGE_LIGHT,
std::to_string(SceneRaycaster::decode_id(SceneRaycaster::EType::Gizmo, (*gizmo_raycasters)[i]->get_id())), ImGui::GetStyleColorVec4(ImGuiCol_Text),
to_string(Geometry::Transformation((*gizmo_raycasters)[i]->get_transform()).get_offset()), ImGui::GetStyleColorVec4(ImGuiCol_Text));
}
ImGui::EndTable();
}
}
imgui.end();
#endif // ENABLE_RAYCAST_PICKING_DEBUG
}
#else
void GLCanvas3D::_picking_pass()
{
if (m_picking_enabled && !m_mouse.dragging && m_mouse.position != Vec2d(DBL_MAX, DBL_MAX) && !m_gizmos.is_dragging()) {
m_hover_volume_idxs.clear();
// Render the object for picking.
// FIXME This cannot possibly work in a multi - sampled context as the color gets mangled by the anti - aliasing.
// Better to use software ray - casting on a bounding - box hierarchy.
if (m_multisample_allowed)
// This flag is often ignored by NVIDIA drivers if rendering into a screen buffer.
glsafe(::glDisable(GL_MULTISAMPLE));
glsafe(::glDisable(GL_BLEND));
glsafe(::glEnable(GL_DEPTH_TEST));
glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
#if !ENABLE_LEGACY_OPENGL_REMOVAL
m_camera_clipping_plane = m_gizmos.get_clipping_plane();
if (m_camera_clipping_plane.is_active()) {
::glClipPlane(GL_CLIP_PLANE0, (GLdouble*)m_camera_clipping_plane.get_data().data());
::glEnable(GL_CLIP_PLANE0);
}
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
_render_volumes_for_picking();
#if !ENABLE_LEGACY_OPENGL_REMOVAL
if (m_camera_clipping_plane.is_active())
::glDisable(GL_CLIP_PLANE0);
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_LEGACY_OPENGL_REMOVAL
const Camera& camera = wxGetApp().plater()->get_camera();
_render_bed_for_picking(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward());
#else
_render_bed_for_picking(!wxGetApp().plater()->get_camera().is_looking_downward());
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
m_gizmos.render_current_gizmo_for_picking_pass();
if (m_multisample_allowed)
glsafe(::glEnable(GL_MULTISAMPLE));
int volume_id = -1;
int gizmo_id = -1;
std::array<GLubyte, 4> color = { 0, 0, 0, 0 };
const Size& cnv_size = get_canvas_size();
bool inside = 0 <= m_mouse.position(0) && m_mouse.position(0) < cnv_size.get_width() && 0 <= m_mouse.position(1) && m_mouse.position(1) < cnv_size.get_height();
if (inside) {
glsafe(::glReadPixels(m_mouse.position(0), cnv_size.get_height() - m_mouse.position.y() - 1, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, (void*)color.data()));
if (picking_checksum_alpha_channel(color[0], color[1], color[2]) == color[3]) {
// Only non-interpolated colors are valid, those have their lowest three bits zeroed.
// we reserve color = (0,0,0) for occluders (as the printbed)
// volumes' id are shifted by 1
// see: _render_volumes_for_picking()
unsigned int id = picking_encode(color[0], color[1], color[2]);
volume_id = id - 1;
// gizmos' id are instead properly encoded by the color
gizmo_id = id;
}
}
if (0 <= volume_id && volume_id < (int)m_volumes.volumes.size()) {
// do not add the volume id if any gizmo is active and CTRL is pressed
if (m_gizmos.get_current_type() == GLGizmosManager::EType::Undefined || !wxGetKeyState(WXK_CONTROL))
m_hover_volume_idxs.emplace_back(volume_id);
m_gizmos.set_hover_id(-1);
}
else
m_gizmos.set_hover_id(inside && (unsigned int)gizmo_id <= GLGizmoBase::BASE_ID ? ((int)GLGizmoBase::BASE_ID - gizmo_id) : -1);
_update_volumes_hover_state();
}
}
#endif // ENABLE_RAYCAST_PICKING
void GLCanvas3D::_rectangular_selection_picking_pass()
{
@ -5486,7 +5398,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass()
std::set<int> idxs;
if (m_picking_enabled) {
#if ENABLE_RAYCAST_PICKING
const size_t width = std::max<size_t>(m_rectangle_selection.get_width(), 1);
const size_t height = std::max<size_t>(m_rectangle_selection.get_height(), 1);
@ -5540,7 +5451,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass()
use_framebuffer = false;
}
}
#endif // ENABLE_RAYCAST_PICKING
if (m_multisample_allowed)
// This flag is often ignored by NVIDIA drivers if rendering into a screen buffer.
@ -5551,7 +5461,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass()
glsafe(::glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));
#if ENABLE_RAYCAST_PICKING
const Camera& main_camera = wxGetApp().plater()->get_camera();
Camera framebuffer_camera;
framebuffer_camera.set_type(main_camera.get_type());
@ -5585,16 +5494,8 @@ void GLCanvas3D::_rectangular_selection_picking_pass()
}
_render_volumes_for_picking(*camera);
#else
_render_volumes_for_picking();
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
_render_bed_for_picking(camera->get_view_matrix(), camera->get_projection_matrix(), !camera->is_looking_downward());
#else
const Camera& camera = wxGetApp().plater()->get_camera();
_render_bed_for_picking(camera.get_view_matrix(), camera.get_projection_matrix(), !camera.is_looking_downward());
#endif // ENABLE_RAYCAST_PICKING
#else
_render_bed_for_picking(!wxGetApp().plater()->get_camera().is_looking_downward());
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
@ -5602,20 +5503,10 @@ void GLCanvas3D::_rectangular_selection_picking_pass()
if (m_multisample_allowed)
glsafe(::glEnable(GL_MULTISAMPLE));
#if ENABLE_RAYCAST_PICKING
const size_t px_count = width * height;
const size_t left = use_framebuffer ? 0 : (size_t)m_rectangle_selection.get_left();
const size_t top = use_framebuffer ? 0 : (size_t)get_canvas_size().get_height() - (size_t)m_rectangle_selection.get_top();
#else
int width = std::max((int)m_rectangle_selection.get_width(), 1);
int height = std::max((int)m_rectangle_selection.get_height(), 1);
int px_count = width * height;
int left = (int)m_rectangle_selection.get_left();
int top = get_canvas_size().get_height() - (int)m_rectangle_selection.get_top();
if (left >= 0 && top >= 0) {
#endif // ENABLE_RAYCAST_PICKING
#define USE_PARALLEL 1
#if USE_PARALLEL
struct Pixel
@ -5649,15 +5540,13 @@ void GLCanvas3D::_rectangular_selection_picking_pass()
std::vector<GLubyte> frame(4 * px_count);
glsafe(::glReadPixels(left, top, width, height, GL_RGBA, GL_UNSIGNED_BYTE, (void*)frame.data()));
for (int i = 0; i < px_count; ++i)
{
for (int i = 0; i < px_count; ++i) {
int px_id = 4 * i;
int volume_id = frame[px_id] + (frame[px_id + 1] << 8) + (frame[px_id + 2] << 16);
if (0 <= volume_id && volume_id < (int)m_volumes.volumes.size())
idxs.insert(volume_id);
}
#endif // USE_PARALLEL
#if ENABLE_RAYCAST_PICKING
if (camera != &main_camera)
main_camera.apply_viewport();
@ -5678,9 +5567,6 @@ void GLCanvas3D::_rectangular_selection_picking_pass()
if (render_tex != 0)
glsafe(::glDeleteTextures(1, &render_tex));
#else
}
#endif // ENABLE_RAYCAST_PICKING
}
m_hover_volume_idxs.assign(idxs.begin(), idxs.end());
@ -6083,11 +5969,7 @@ void GLCanvas3D::_render_overlays()
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
}
#if ENABLE_RAYCAST_PICKING
void GLCanvas3D::_render_volumes_for_picking(const Camera& camera) const
#else
void GLCanvas3D::_render_volumes_for_picking() const
#endif // ENABLE_RAYCAST_PICKING
{
#if ENABLE_LEGACY_OPENGL_REMOVAL
GLShaderProgram* shader = wxGetApp().get_shader("flat_clip");
@ -6103,11 +5985,7 @@ void GLCanvas3D::_render_volumes_for_picking() const
glsafe(::glEnableClientState(GL_NORMAL_ARRAY));
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
const Transform3d& view_matrix = camera.get_view_matrix();
#else
const Transform3d& view_matrix = wxGetApp().plater()->get_camera().get_view_matrix();
#endif // ENABLE_RAYCAST_PICKING
for (size_t type = 0; type < 2; ++ type) {
GLVolumeWithIdAndZList to_render = volumes_to_render(m_volumes.volumes, (type == 0) ? GLVolumeCollection::ERenderType::Opaque : GLVolumeCollection::ERenderType::Transparent, view_matrix);
for (const GLVolumeWithIdAndZ& volume : to_render)
@ -6119,12 +5997,7 @@ void GLCanvas3D::_render_volumes_for_picking() const
#if ENABLE_LEGACY_OPENGL_REMOVAL
volume.first->model.set_color(picking_decode(id));
shader->start_using();
#if ENABLE_RAYCAST_PICKING
shader->set_uniform("view_model_matrix", view_matrix * volume.first->world_matrix());
#else
const Camera& camera = wxGetApp().plater()->get_camera();
shader->set_uniform("view_model_matrix", camera.get_view_matrix() * volume.first->world_matrix());
#endif // ENABLE_RAYCAST_PICKING
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
shader->set_uniform("volume_world_matrix", volume.first->world_matrix());
shader->set_uniform("z_range", m_volumes.get_z_range());
@ -6692,7 +6565,6 @@ Vec3d GLCanvas3D::_mouse_to_3d(const Point& mouse_pos, float* z)
if (m_canvas == nullptr)
return Vec3d(DBL_MAX, DBL_MAX, DBL_MAX);
#if ENABLE_RAYCAST_PICKING
if (z == nullptr) {
const SceneRaycaster::HitResult hit = m_scene_raycaster.hit(mouse_pos.cast<double>(), wxGetApp().plater()->get_camera(), nullptr);
return hit.is_valid() ? hit.position.cast<double>() : _mouse_to_bed_3d(mouse_pos);
@ -6704,23 +6576,6 @@ Vec3d GLCanvas3D::_mouse_to_3d(const Point& mouse_pos, float* z)
igl::unproject(Vec3d(mouse_pos.x(), viewport[3] - mouse_pos.y(), *z), camera.get_view_matrix().matrix(), camera.get_projection_matrix().matrix(), viewport, out);
return out;
}
#else
const Camera& camera = wxGetApp().plater()->get_camera();
const Matrix4d modelview = camera.get_view_matrix().matrix();
const Matrix4d projection = camera.get_projection_matrix().matrix();
const Vec4i viewport(camera.get_viewport().data());
const int y = viewport[3] - mouse_pos.y();
float mouse_z;
if (z == nullptr)
glsafe(::glReadPixels(mouse_pos.x(), y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, (void*)&mouse_z));
else
mouse_z = *z;
Vec3d out;
igl::unproject(Vec3d(mouse_pos.x(), y, mouse_z), modelview, projection, viewport, out);
return out;
#endif // ENABLE_RAYCAST_PICKING
}
Vec3d GLCanvas3D::_mouse_to_bed_3d(const Point& mouse_pos)

View File

@ -16,9 +16,7 @@
#include "libslic3r/GCode/GCodeProcessor.hpp"
#include "GCodeViewer.hpp"
#include "Camera.hpp"
#if ENABLE_RAYCAST_PICKING
#include "SceneRaycaster.hpp"
#endif // ENABLE_RAYCAST_PICKING
#include "GUI_Utils.hpp"
#include "libslic3r/Slicing.hpp"
@ -483,9 +481,7 @@ public:
private:
wxGLCanvas* m_canvas;
wxGLContext* m_context;
#if ENABLE_RAYCAST_PICKING
SceneRaycaster m_scene_raycaster;
#endif // ENABLE_RAYCAST_PICKING
Bed3D &m_bed;
#if ENABLE_RETINA_GL
std::unique_ptr<RetinaHelper> m_retina_helper;
@ -669,7 +665,6 @@ public:
bool init();
void post_event(wxEvent &&event);
#if ENABLE_RAYCAST_PICKING
std::shared_ptr<SceneRaycasterItem> add_raycaster_for_picking(SceneRaycaster::EType type, int id, const MeshRaycaster& raycaster,
const Transform3d& trafo = Transform3d::Identity(), bool use_back_faces = false) {
return m_scene_raycaster.add_raycaster(type, id, raycaster, trafo, use_back_faces);
@ -688,7 +683,6 @@ public:
void set_raycaster_gizmos_on_top(bool value) {
m_scene_raycaster.set_gizmos_on_top(value);
}
#endif // ENABLE_RAYCAST_PICKING
void set_as_dirty();
void requires_check_outside_state() { m_requires_check_outside_state = true; }
@ -1008,11 +1002,7 @@ private:
#endif // ENABLE_RENDER_SELECTION_CENTER
void _check_and_update_toolbar_icon_scale();
void _render_overlays();
#if ENABLE_RAYCAST_PICKING
void _render_volumes_for_picking(const Camera& camera) const;
#else
void _render_volumes_for_picking() const;
#endif // ENABLE_RAYCAST_PICKING
void _render_current_gizmo() const;
void _render_gizmos_overlay();
void _render_main_toolbar();

View File

@ -30,21 +30,10 @@ namespace GUI {
m_end_corner = mouse_position;
}
#if ENABLE_RAYCAST_PICKING
std::vector<unsigned int> GLSelectionRectangle::contains(const std::vector<Vec3d>& points) const
#else
std::vector<unsigned int> GLSelectionRectangle::stop_dragging(const GLCanvas3D& canvas, const std::vector<Vec3d>& points)
#endif // ENABLE_RAYCAST_PICKING
{
std::vector<unsigned int> out;
#if !ENABLE_RAYCAST_PICKING
if (!is_dragging())
return out;
m_state = EState::Off;
#endif // !ENABLE_RAYCAST_PICKING
// bounding box created from the rectangle corners - will take care of order of the corners
const BoundingBox rectangle(Points{ Point(m_start_corner.cast<coord_t>()), Point(m_end_corner.cast<coord_t>()) });

View File

@ -26,15 +26,9 @@ public:
// To be called on mouse move.
void dragging(const Vec2d& mouse_position);
#if ENABLE_RAYCAST_PICKING
// Given a vector of points in world coordinates, the function returns indices of those
// that are in the rectangle.
std::vector<unsigned int> contains(const std::vector<Vec3d>& points) const;
#else
// Given a vector of points in world coordinates, the function returns indices of those
// that are in the rectangle. It then disables the rectangle.
std::vector<unsigned int> stop_dragging(const GLCanvas3D& canvas, const std::vector<Vec3d>& points);
#endif // ENABLE_RAYCAST_PICKING
// Disables the rectangle.
void stop_dragging();

View File

@ -1880,6 +1880,7 @@ bool ObjectList::del_subobject_item(wxDataViewItem& item)
wxDataViewItem parent = m_objects_model->GetParent(item);
InfoItemType item_info_type = m_objects_model->GetInfoItemType(item);
if (type & itSettings)
del_settings_from_config(parent);
else if (type & itInstanceRoot && obj_idx != -1)
@ -1889,7 +1890,7 @@ bool ObjectList::del_subobject_item(wxDataViewItem& item)
else if (type & itLayer && obj_idx != -1)
del_layer_from_object(obj_idx, m_objects_model->GetLayerRangeByItem(item));
else if (type & itInfo && obj_idx != -1)
del_info_item(obj_idx, m_objects_model->GetInfoItemType(item));
del_info_item(obj_idx, item_info_type);
else if (idx == -1 || !del_subobject_from_object(obj_idx, idx, type))
return false;
@ -1898,9 +1899,12 @@ bool ObjectList::del_subobject_item(wxDataViewItem& item)
const std::string& icon_name = get_warning_icon_name(object(obj_idx)->get_object_stl_stats());
m_objects_model->UpdateWarningIcon(parent, icon_name);
}
m_objects_model->Delete(item);
if (!(type & itInfo) || item_info_type != InfoItemType::CutConnectors) {
// Connectors Item is already updated/deleted inside the del_info_item()
m_objects_model->Delete(item);
update_info_items(obj_idx);
}
return true;
}
@ -1926,7 +1930,10 @@ void ObjectList::del_info_item(const int obj_idx, InfoItemType type)
break;
case InfoItemType::CutConnectors:
show_error(nullptr, _L("Connectors cannot be deleted from cut object."));
if (!del_from_cut_object(true)) {
// there is no need to post EVT_GLCANVAS_SCHEDULE_BACKGROUND_PROCESS if nothing was changed
return;
}
break;
case InfoItemType::MmuSegmentation:
@ -2018,6 +2025,38 @@ void ObjectList::del_layers_from_object(const int obj_idx)
changed_object(obj_idx);
}
bool ObjectList::del_from_cut_object(bool is_cut_connector, bool is_model_part/* = false*/, bool is_negative_volume/* = false*/)
{
const long buttons_style = is_cut_connector ? (wxYES | wxNO | wxCANCEL) : (wxYES | wxCANCEL);
const wxString title = is_cut_connector ? _L("Delete connector from object which is a part of cut") :
is_model_part ? _L("Delete solid part from object which is a part of cut") :
is_negative_volume ? _L("Delete negative volume from object which is a part of cut") : "";
const wxString msg_end = is_cut_connector ? ("\n" + _L("To save cut correspondence you can delete all connectors from all related objects.")) : "";
InfoDialog dialog(wxGetApp().plater(), title,
_L("This action will break a cut correspondence.\n"
"After that PrusaSlicer can't guarantee model consistency.\n"
"\n"
"To manipulate with solid parts or negative volumes you have to invalidate cut infornation first." + msg_end ),
false, buttons_style | wxCANCEL_DEFAULT | wxICON_WARNING);
dialog.SetButtonLabel(wxID_YES, _L("Invalidate cut info"));
if (is_cut_connector)
dialog.SetButtonLabel(wxID_NO, _L("Delete all connectors"));
const int answer = dialog.ShowModal();
if (answer == wxID_CANCEL)
return false;
if (answer == wxID_YES)
invalidate_cut_info_for_selection();
else if (answer == wxID_NO)
delete_all_connectors_for_selection();
return true;
}
bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, const int type)
{
assert(idx >= 0);
@ -2039,16 +2078,11 @@ bool ObjectList::del_subobject_from_object(const int obj_idx, const int idx, con
Slic3r::GUI::show_error(nullptr, _L("From Object List You can't delete the last solid part from object."));
return false;
}
if (object->is_cut()) {
if (volume->is_model_part()) {
Slic3r::GUI::show_error(nullptr, _L("Solid part cannot be deleted from cut object."));
if (object->is_cut() && (volume->is_model_part() || volume->is_negative_volume())) {
del_from_cut_object(volume->is_cut_connector(), volume->is_model_part(), volume->is_negative_volume());
// in any case return false to break the deletion
return false;
}
if (volume->is_negative_volume()) {
Slic3r::GUI::show_error(nullptr, _L("Negative volume cannot be deleted from cut object."));
return false;
}
}
take_snapshot(_L("Delete Subobject"));
@ -2489,6 +2523,7 @@ bool ObjectList::has_selected_cut_object() const
return false;
}
void ObjectList::invalidate_cut_info_for_selection()
{
const wxDataViewItem item = GetSelection();
@ -2499,27 +2534,61 @@ void ObjectList::invalidate_cut_info_for_selection()
}
}
void ObjectList::invalidate_cut_info_for_object(size_t obj_idx)
void ObjectList::invalidate_cut_info_for_object(int obj_idx)
{
ModelObject* init_obj = object(int(obj_idx));
ModelObject* init_obj = object(obj_idx);
if (!init_obj->is_cut())
return;
take_snapshot(_L("Invalidate cut info"));
auto invalidate_cut = [this](size_t obj_idx) {
object(int(obj_idx))->invalidate_cut();
update_info_items(obj_idx);
add_volumes_to_object_in_list(obj_idx);
};
const CutObjectBase cut_id = init_obj->cut_id;
// invalidate cut for related objects (which have the same cut_id)
for (size_t idx = 0; idx < m_objects->size(); idx++)
if (ModelObject* obj = object(idx); obj != init_obj && obj->cut_id.is_equal(init_obj->cut_id))
invalidate_cut(idx);
if (ModelObject* obj = object(int(idx)); obj->cut_id.is_equal(cut_id)) {
obj->invalidate_cut();
update_info_items(idx);
add_volumes_to_object_in_list(idx);
}
// invalidate own cut information
invalidate_cut(size_t(obj_idx));
update_lock_icons_for_model();
}
void ObjectList::delete_all_connectors_for_selection()
{
const wxDataViewItem item = GetSelection();
if (item) {
const int obj_idx = m_objects_model->GetObjectIdByItem(item);
if (obj_idx >= 0)
delete_all_connectors_for_object(size_t(obj_idx));
}
}
void ObjectList::delete_all_connectors_for_object(int obj_idx)
{
ModelObject* init_obj = object(obj_idx);
if (!init_obj->is_cut())
return;
take_snapshot(_L("Delete all connectors"));
const CutObjectBase cut_id = init_obj->cut_id;
// Delete all connectors for related objects (which have the same cut_id)
Model& model = wxGetApp().plater()->model();
for (int idx = int(m_objects->size())-1; idx >= 0; idx--)
if (ModelObject* obj = object(idx); obj->cut_id.is_equal(cut_id)) {
obj->delete_connectors();
if (obj->volumes.empty() || !obj->has_solid_mesh()) {
model.delete_object(idx);
m_objects_model->Delete(m_objects_model->GetItemById(idx));
continue;
}
update_info_items(idx);
add_volumes_to_object_in_list(idx);
changed_object(int(idx));
}
update_lock_icons_for_model();
}
@ -3044,6 +3113,7 @@ bool ObjectList::delete_from_model_and_list(const std::vector<ItemForDelete>& it
return false;
m_prevent_list_events = true;
ScopeGuard sg_prevent_list_events = ScopeGuard([this]() { m_prevent_list_events = false; });
std::set<size_t> modified_objects_ids;
for (std::vector<ItemForDelete>::const_reverse_iterator item = items_for_delete.rbegin(); item != items_for_delete.rend(); ++item) {
@ -3059,7 +3129,7 @@ bool ObjectList::delete_from_model_and_list(const std::vector<ItemForDelete>& it
}
else {
if (!del_subobject_from_object(item->obj_idx, item->sub_obj_idx, item->type))
continue;
return false;// continue;
if (item->type&itVolume) {
m_objects_model->Delete(m_objects_model->GetItemByVolumeId(item->obj_idx, item->sub_obj_idx));
ModelObject* obj = object(item->obj_idx);

View File

@ -266,6 +266,7 @@ public:
void del_instances_from_object(const int obj_idx);
void del_layer_from_object(const int obj_idx, const t_layer_height_range& layer_range);
void del_layers_from_object(const int obj_idx);
bool del_from_cut_object(bool is_connector, bool is_model_part = false, bool is_negative_volume = false);
bool del_subobject_from_object(const int obj_idx, const int idx, const int type);
void del_info_item(const int obj_idx, InfoItemType type);
void split();
@ -282,7 +283,9 @@ public:
bool can_split_instances();
bool has_selected_cut_object() const;
void invalidate_cut_info_for_selection();
void invalidate_cut_info_for_object(size_t obj_idx);
void invalidate_cut_info_for_object(int obj_idx);
void delete_all_connectors_for_selection();
void delete_all_connectors_for_object(int obj_idx);
bool can_merge_to_multipart_object() const;
bool can_merge_to_single_object() const;

View File

@ -18,29 +18,16 @@ const float GLGizmoBase::Grabber::SizeFactor = 0.05f;
const float GLGizmoBase::Grabber::MinHalfSize = 1.5f;
const float GLGizmoBase::Grabber::DraggingScaleFactor = 1.25f;
#if ENABLE_RAYCAST_PICKING
PickingModel GLGizmoBase::Grabber::s_cube;
PickingModel GLGizmoBase::Grabber::s_cone;
#else
GLModel GLGizmoBase::Grabber::s_cube;
GLModel GLGizmoBase::Grabber::s_cone;
#endif // ENABLE_RAYCAST_PICKING
GLGizmoBase::Grabber::~Grabber()
{
#if ENABLE_RAYCAST_PICKING
if (s_cube.model.is_initialized())
s_cube.model.reset();
if (s_cone.model.is_initialized())
s_cone.model.reset();
#else
if (s_cube.is_initialized())
s_cube.reset();
if (s_cone.is_initialized())
s_cone.reset();
#endif // ENABLE_RAYCAST_PICKING
}
float GLGizmoBase::Grabber::get_half_size(float size) const
@ -53,7 +40,6 @@ float GLGizmoBase::Grabber::get_dragging_half_size(float size) const
return get_half_size(size) * DraggingScaleFactor;
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoBase::Grabber::register_raycasters_for_picking(int id)
{
picking_id = id;
@ -66,13 +52,8 @@ void GLGizmoBase::Grabber::unregister_raycasters_for_picking()
picking_id = -1;
raycasters = { nullptr };
}
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_RAYCAST_PICKING
void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color)
#else
void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, bool picking)
#endif // ENABLE_RAYCAST_PICKING
{
#if ENABLE_LEGACY_OPENGL_REMOVAL
GLShaderProgram* shader = wxGetApp().get_current_shader();
@ -80,69 +61,41 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo
return;
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
if (!s_cube.model.is_initialized()) {
#else
if (!s_cube.is_initialized()) {
#endif // ENABLE_RAYCAST_PICKING
// This cannot be done in constructor, OpenGL is not yet
// initialized at that point (on Linux at least).
indexed_triangle_set its = its_make_cube(1.0, 1.0, 1.0);
its_translate(its, -0.5f * Vec3f::Ones());
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
s_cube.model.init_from(its);
s_cube.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
#else
s_cube.init_from(its);
#endif // ENABLE_RAYCAST_PICKING
#else
s_cube.init_from(its, BoundingBoxf3{ { -0.5, -0.5, -0.5 }, { 0.5, 0.5, 0.5 } });
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
}
#if ENABLE_RAYCAST_PICKING
if (!s_cone.model.is_initialized()) {
indexed_triangle_set its = its_make_cone(0.375, 1.5, double(PI) / 18.0);
s_cone.model.init_from(its);
s_cone.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
}
#else
if (!s_cone.is_initialized())
s_cone.init_from(its_make_cone(0.375, 1.5, double(PI) / 18.0));
#endif // ENABLE_RAYCAST_PICKING
const float half_size = dragging ? get_dragging_half_size(size) : get_half_size(size);
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
s_cube.model.set_color(render_color);
s_cone.model.set_color(render_color);
#else
s_cube.set_color(render_color);
s_cone.set_color(render_color);
#endif // ENABLE_RAYCAST_PICKING
const Camera& camera = wxGetApp().plater()->get_camera();
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
#if ENABLE_RAYCAST_PICKING
const Transform3d& view_matrix = camera.get_view_matrix();
const Matrix3d view_matrix_no_offset = view_matrix.matrix().block(0, 0, 3, 3);
std::vector<Transform3d> elements_matrices(GRABBER_ELEMENTS_MAX_COUNT, Transform3d::Identity());
elements_matrices[0] = matrix * Geometry::translation_transform(center) * Geometry::rotation_transform(angles) * Geometry::scale_transform(2.0 * half_size);
Transform3d view_model_matrix = view_matrix * elements_matrices[0];
#else
const Transform3d& view_matrix = camera.get_view_matrix();
const Transform3d model_matrix = matrix * Geometry::translation_transform(center) * Geometry::rotation_transform(angles) * Geometry::scale_transform(2.0 * half_size);
const Transform3d view_model_matrix = view_matrix * model_matrix;
#endif // ENABLE_RAYCAST_PICKING
shader->set_uniform("view_model_matrix", view_model_matrix);
#if ENABLE_RAYCAST_PICKING
Matrix3d view_normal_matrix = view_matrix_no_offset * elements_matrices[0].matrix().block(0, 0, 3, 3).inverse().transpose();
#else
const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
#endif // ENABLE_RAYCAST_PICKING
shader->set_uniform("view_normal_matrix", view_normal_matrix);
#else
s_cube.set_color(-1, render_color);
@ -154,7 +107,6 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo
glsafe(::glRotated(Geometry::rad2deg(angles.x()), 1.0, 0.0, 0.0));
glsafe(::glScaled(2.0 * half_size, 2.0 * half_size, 2.0 * half_size));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
s_cube.model.render();
auto render_extension = [&view_matrix, &view_matrix_no_offset, shader](const Transform3d& matrix) {
@ -164,64 +116,31 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo
shader->set_uniform("view_normal_matrix", view_normal_matrix);
s_cone.model.render();
};
#else
s_cube.render();
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_LEGACY_OPENGL_REMOVAL
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosX)) != 0) {
#if ENABLE_RAYCAST_PICKING
elements_matrices[1] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, 0.5 * double(PI), 0.0 });
render_extension(elements_matrices[1]);
#else
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, 0.5 * double(PI), 0.0 }));
s_cone.render();
#endif // ENABLE_RAYCAST_PICKING
}
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegX)) != 0) {
#if ENABLE_RAYCAST_PICKING
elements_matrices[2] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, -0.5 * double(PI), 0.0 });
render_extension(elements_matrices[2]);
#else
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(-Vec3d::UnitX()) * Geometry::rotation_transform({ 0.0, -0.5 * double(PI), 0.0 }));
s_cone.render();
#endif // ENABLE_RAYCAST_PICKING
}
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosY)) != 0) {
#if ENABLE_RAYCAST_PICKING
elements_matrices[3] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitY()) * Geometry::rotation_transform({ -0.5 * double(PI), 0.0, 0.0 });
render_extension(elements_matrices[3]);
#else
shader->set_uniform("view_model_matrix", view_model_matrix * Geometry::translation_transform(Vec3d::UnitY()) * Geometry::rotation_transform({ -0.5 * double(PI), 0.0, 0.0 }));
s_cone.render();
#endif // ENABLE_RAYCAST_PICKING
}
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegY)) != 0) {
#if ENABLE_RAYCAST_PICKING
elements_matrices[4] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitY()) * Geometry::rotation_transform({ 0.5 * double(PI), 0.0, 0.0 });
render_extension(elements_matrices[4]);
#else
shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(-Vec3d::UnitY())* Geometry::rotation_transform({ 0.5 * double(PI), 0.0, 0.0 }));
s_cone.render();
#endif // ENABLE_RAYCAST_PICKING
}
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosZ)) != 0) {
#if ENABLE_RAYCAST_PICKING
elements_matrices[5] = elements_matrices[0] * Geometry::translation_transform(Vec3d::UnitZ());
render_extension(elements_matrices[5]);
#else
shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(Vec3d::UnitZ()));
s_cone.render();
#endif // ENABLE_RAYCAST_PICKING
}
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::NegZ)) != 0) {
#if ENABLE_RAYCAST_PICKING
elements_matrices[6] = elements_matrices[0] * Geometry::translation_transform(-Vec3d::UnitZ()) * Geometry::rotation_transform({ double(PI), 0.0, 0.0 });
render_extension(elements_matrices[6]);
#else
shader->set_uniform("view_model_matrix", view_model_matrix* Geometry::translation_transform(-Vec3d::UnitZ())* Geometry::rotation_transform({ double(PI), 0.0, 0.0 }));
s_cone.render();
#endif // ENABLE_RAYCAST_PICKING
}
#else
if ((int(extensions) & int(GLGizmoBase::EGrabberExtension::PosX)) != 0) {
@ -270,7 +189,6 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo
glsafe(::glPopMatrix());
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
if (raycasters[0] == nullptr) {
GLCanvas3D& canvas = *wxGetApp().plater()->canvas3D();
raycasters[0] = canvas.add_raycaster_for_picking(SceneRaycaster::EType::Gizmo, picking_id, *s_cube.mesh_raycaster, elements_matrices[0]);
@ -293,7 +211,6 @@ void GLGizmoBase::Grabber::render(float size, const ColorRGBA& render_color, boo
raycasters[i]->set_transform(elements_matrices[i]);
}
}
#endif // ENABLE_RAYCAST_PICKING
}
GLGizmoBase::GLGizmoBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id)
@ -327,7 +244,6 @@ bool GLGizmoBase::update_items_state()
return res;
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoBase::register_grabbers_for_picking()
{
for (size_t i = 0; i < m_grabbers.size(); ++i) {
@ -341,16 +257,6 @@ void GLGizmoBase::unregister_grabbers_for_picking()
m_grabbers[i].unregister_raycasters_for_picking();
}
}
#else
ColorRGBA GLGizmoBase::picking_color_component(unsigned int id) const
{
id = BASE_ID - id;
if (m_group_id > -1)
id -= m_group_id;
return picking_decode(id);
}
#endif // ENABLE_RAYCAST_PICKING
void GLGizmoBase::render_grabbers(const BoundingBoxf3& box) const
{
@ -371,29 +277,6 @@ void GLGizmoBase::render_grabbers(float size) const
shader->stop_using();
}
#if !ENABLE_RAYCAST_PICKING
void GLGizmoBase::render_grabbers_for_picking(const BoundingBoxf3& box) const
{
#if ENABLE_LEGACY_OPENGL_REMOVAL
GLShaderProgram* shader = wxGetApp().get_shader("flat");
if (shader != nullptr) {
shader->start_using();
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
const float mean_size = float((box.size().x() + box.size().y() + box.size().z()) / 3.0);
for (unsigned int i = 0; i < (unsigned int)m_grabbers.size(); ++i) {
if (m_grabbers[i].enabled) {
m_grabbers[i].color = picking_color_component(i);
m_grabbers[i].render_for_picking(mean_size);
}
}
#if ENABLE_LEGACY_OPENGL_REMOVAL
shader->stop_using();
}
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
}
#endif // !ENABLE_RAYCAST_PICKING
// help function to process grabbers
// call start_dragging, stop_dragging, on_dragging
bool GLGizmoBase::use_grabbers(const wxMouseEvent &mouse_event) {

View File

@ -6,10 +6,8 @@
#include "slic3r/GUI/I18N.hpp"
#include "slic3r/GUI/GLModel.hpp"
#if ENABLE_RAYCAST_PICKING
#include "slic3r/GUI/MeshUtils.hpp"
#include "slic3r/GUI/SceneRaycaster.hpp"
#endif // ENABLE_RAYCAST_PICKING
#include <cereal/archives/binary.hpp>
@ -73,44 +71,26 @@ protected:
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
ColorRGBA color{ ColorRGBA::WHITE() };
EGrabberExtension extensions{ EGrabberExtension::None };
#if ENABLE_RAYCAST_PICKING
// the picking id shared by all the elements
int picking_id{ -1 };
std::array<std::shared_ptr<SceneRaycasterItem>, GRABBER_ELEMENTS_MAX_COUNT> raycasters = { nullptr };
#endif // ENABLE_RAYCAST_PICKING
Grabber() = default;
~Grabber();
#if ENABLE_RAYCAST_PICKING
void render(bool hover, float size) { render(size, hover ? complementary(color) : color); }
#else
void render(bool hover, float size) { render(size, hover ? complementary(color) : color, false); }
void render_for_picking(float size) { render(size, color, true); }
#endif // ENABLE_RAYCAST_PICKING
float get_half_size(float size) const;
float get_dragging_half_size(float size) const;
#if ENABLE_RAYCAST_PICKING
void register_raycasters_for_picking(int id);
void unregister_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
private:
#if ENABLE_RAYCAST_PICKING
void render(float size, const ColorRGBA& render_color);
#else
void render(float size, const ColorRGBA& render_color, bool picking);
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_RAYCAST_PICKING
static PickingModel s_cube;
static PickingModel s_cone;
#else
static GLModel s_cube;
static GLModel s_cone;
#endif // ENABLE_RAYCAST_PICKING
};
public:
@ -186,9 +166,6 @@ public:
bool update_items_state();
void render() { on_render(); }
#if !ENABLE_RAYCAST_PICKING
void render_for_picking() { on_render_for_picking(); }
#endif // !ENABLE_RAYCAST_PICKING
void render_input_window(float x, float y, float bottom_limit);
/// <summary>
@ -210,10 +187,8 @@ public:
/// <returns>Return True when use the information and don't want to propagate it otherwise False.</returns>
virtual bool on_mouse(const wxMouseEvent &mouse_event) { return false; }
#if ENABLE_RAYCAST_PICKING
void register_raycasters_for_picking() { register_grabbers_for_picking(); on_register_raycasters_for_picking(); }
void unregister_raycasters_for_picking() { unregister_grabbers_for_picking(); on_unregister_raycasters_for_picking(); }
#endif // ENABLE_RAYCAST_PICKING
virtual bool is_in_editing_mode() const { return false; }
virtual bool is_selection_rectangle_dragging() const { return false; }
@ -237,27 +212,15 @@ protected:
virtual void on_dragging(const UpdateData& data) {}
virtual void on_render() = 0;
#if !ENABLE_RAYCAST_PICKING
virtual void on_render_for_picking() = 0;
#endif // !ENABLE_RAYCAST_PICKING
virtual void on_render_input_window(float x, float y, float bottom_limit) {}
#if ENABLE_RAYCAST_PICKING
void register_grabbers_for_picking();
void unregister_grabbers_for_picking();
virtual void on_register_raycasters_for_picking() {}
virtual void on_unregister_raycasters_for_picking() {}
#else
// Returns the picking color for the given id, based on the BASE_ID constant
// No check is made for clashing with other picking color (i.e. GLVolumes)
ColorRGBA picking_color_component(unsigned int id) const;
#endif // ENABLE_RAYCAST_PICKING
void render_grabbers(const BoundingBoxf3& box) const;
void render_grabbers(float size) const;
#if !ENABLE_RAYCAST_PICKING
void render_grabbers_for_picking(const BoundingBoxf3& box) const;
#endif // !ENABLE_RAYCAST_PICKING
std::string format(float value, unsigned int decimals) const;

View File

@ -1901,14 +1901,15 @@ void GLGizmoCut3D::render_connectors()
m_has_invalid_connector = true;
render_color = CONNECTOR_ERR_COLOR;
}
else if (!m_connectors_editing)
else // default connector color
render_color = connector.attribs.type == CutConnectorType::Dowel ? DOWEL_COLOR : PLAG_COLOR;
if (!m_connectors_editing)
render_color = CONNECTOR_ERR_COLOR;
else if (size_t(m_hover_id - m_connectors_group_id) == i)
render_color = connector.attribs.type == CutConnectorType::Dowel ? HOVERED_DOWEL_COLOR : HOVERED_PLAG_COLOR;
else if (m_selected[i])
render_color = connector.attribs.type == CutConnectorType::Dowel ? SELECTED_DOWEL_COLOR : SELECTED_PLAG_COLOR;
else // neither hover nor picking
render_color = connector.attribs.type == CutConnectorType::Dowel ? DOWEL_COLOR : PLAG_COLOR;
const Camera& camera = wxGetApp().plater()->get_camera();
if (connector.attribs.type == CutConnectorType::Dowel &&
@ -2141,12 +2142,14 @@ bool GLGizmoCut3D::add_connector(CutConnectors& connectors, const Vec2d& mouse_p
std::pair<Vec3d, Vec3d> pos_and_normal;
Vec3d pos_world;
if (unproject_on_cut_plane(mouse_position.cast<double>(), pos_and_normal, pos_world)) {
const Vec3d& hit = pos_and_normal.first;
// check if pos is out of enabled clipping plane
if (m_c->object_clipper() && !m_c->object_clipper()->is_projection_inside_cut(pos_world))
return true;
Plater::TakeSnapshot snapshot(wxGetApp().plater(), _L("Add connector"), UndoRedo::SnapshotType::GizmoAction);
unselect_all_connectors();
connectors.emplace_back(hit, m_rotation_m,
connectors.emplace_back(pos_and_normal.first, m_rotation_m,
m_connector_size * 0.5f, m_connector_depth_ratio,
m_connector_size_tolerance, m_connector_depth_ratio_tolerance,
CutConnectorAttributes( CutConnectorType(m_connector_type),
@ -2241,8 +2244,20 @@ bool GLGizmoCut3D::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_posi
(action == SLAGizmoEventType::LeftDown || action == SLAGizmoEventType::LeftUp || action == SLAGizmoEventType::Moving) )
return process_cut_line(action, mouse_position);
if (!m_connectors_editing)
if (!m_connectors_editing) {
if (0 && action == SLAGizmoEventType::LeftDown) {
// disable / enable current contour
std::pair<Vec3d, Vec3d> pos_and_normal;
Vec3d pos_world;
if (unproject_on_cut_plane(mouse_position.cast<double>(), pos_and_normal, pos_world)) {
// Following would inform the clipper about the mouse click, so it can
// toggle the respective contour as disabled.
m_c->object_clipper()->pass_mouse_click(pos_world);
return true;
}
}
return false;
}
CutConnectors& connectors = m_c->selection_info()->model_object()->cut_connectors;

View File

@ -600,18 +600,12 @@ void GLGizmoEmboss::on_render() {
}
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoEmboss::on_register_raycasters_for_picking(){
m_rotate_gizmo.register_raycasters_for_picking();
}
void GLGizmoEmboss::on_unregister_raycasters_for_picking(){
m_rotate_gizmo.unregister_raycasters_for_picking();
}
#else // !ENABLE_RAYCAST_PICKING
void GLGizmoEmboss::on_render_for_picking() {
m_rotate_gizmo.render_for_picking();
}
#endif // ENABLE_RAYCAST_PICKING
#ifdef SHOW_FINE_POSITION
// draw suggested position of window

View File

@ -56,12 +56,8 @@ protected:
bool on_init() override;
std::string on_get_name() const override;
void on_render() override;
#if ENABLE_RAYCAST_PICKING
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
#else // !ENABLE_RAYCAST_PICKING
void on_render_for_picking() override;
#endif // ENABLE_RAYCAST_PICKING
void on_render_input_window(float x, float y, float bottom_limit) override;
bool on_is_activable() const override { return true; }
bool on_is_selectable() const override { return false; }

View File

@ -131,14 +131,9 @@ void GLGizmoFlatten::on_render()
update_planes();
for (int i = 0; i < (int)m_planes.size(); ++i) {
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_planes_casters[i]->set_transform(model_matrix);
m_planes[i].vbo.model.set_color(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR : DEFAULT_PLANE_COLOR);
m_planes[i].vbo.model.render();
#else
m_planes[i].vbo.set_color(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR : DEFAULT_PLANE_COLOR);
m_planes[i].vbo.render();
#endif // ENABLE_RAYCAST_PICKING
#else
glsafe(::glColor4fv(i == m_hover_id ? DEFAULT_HOVER_PLANE_COLOR.data() : DEFAULT_PLANE_COLOR.data()));
if (m_planes[i].vbo.has_VBOs())
@ -158,7 +153,6 @@ void GLGizmoFlatten::on_render()
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoFlatten::on_register_raycasters_for_picking()
{
// the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account
@ -183,66 +177,12 @@ void GLGizmoFlatten::on_unregister_raycasters_for_picking()
m_parent.set_raycaster_gizmos_on_top(false);
m_planes_casters.clear();
}
#else
void GLGizmoFlatten::on_render_for_picking()
{
const Selection& selection = m_parent.get_selection();
#if ENABLE_LEGACY_OPENGL_REMOVAL
GLShaderProgram* shader = wxGetApp().get_shader("flat");
if (shader == nullptr)
return;
shader->start_using();
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
glsafe(::glDisable(GL_DEPTH_TEST));
glsafe(::glDisable(GL_BLEND));
if (selection.is_single_full_instance() && !wxGetKeyState(WXK_CONTROL)) {
const Transform3d& m = selection.get_first_volume()->get_instance_transformation().get_matrix();
#if ENABLE_LEGACY_OPENGL_REMOVAL
const Camera& camera = wxGetApp().plater()->get_camera();
const Transform3d view_model_matrix = camera.get_view_matrix() *
Geometry::translation_transform(selection.get_first_volume()->get_sla_shift_z() * Vec3d::UnitZ()) * m;
shader->set_uniform("view_model_matrix", view_model_matrix);
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
#else
glsafe(::glPushMatrix());
glsafe(::glTranslatef(0.f, 0.f, selection.get_first_volume()->get_sla_shift_z()));
glsafe(::glMultMatrixd(m.data()));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
if (this->is_plane_update_necessary())
update_planes();
for (int i = 0; i < (int)m_planes.size(); ++i) {
#if ENABLE_LEGACY_OPENGL_REMOVAL
m_planes[i].vbo.set_color(picking_color_component(i));
#else
glsafe(::glColor4fv(picking_color_component(i).data()));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
m_planes[i].vbo.render();
}
#if !ENABLE_LEGACY_OPENGL_REMOVAL
glsafe(::glPopMatrix());
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
}
glsafe(::glEnable(GL_CULL_FACE));
#if ENABLE_LEGACY_OPENGL_REMOVAL
shader->stop_using();
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
}
#endif // ENABLE_RAYCAST_PICKING
void GLGizmoFlatten::set_flattening_data(const ModelObject* model_object)
{
if (model_object != m_old_model_object) {
m_planes.clear();
#if ENABLE_RAYCAST_PICKING
on_unregister_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
}
}
@ -259,9 +199,7 @@ void GLGizmoFlatten::update_planes()
}
ch = ch.convex_hull_3d();
m_planes.clear();
#if ENABLE_RAYCAST_PICKING
on_unregister_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_WORLD_COORDINATE
const Transform3d inst_matrix = mo->instances.front()->get_matrix_no_offset();
#else
@ -458,7 +396,6 @@ void GLGizmoFlatten::update_planes()
// the vertices in order, so triangulation is trivial.
for (auto& plane : m_planes) {
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
indexed_triangle_set its;
its.vertices.reserve(plane.vertices.size());
its.indices.reserve(plane.vertices.size() / 3);
@ -470,18 +407,6 @@ void GLGizmoFlatten::update_planes()
}
plane.vbo.model.init_from(its);
plane.vbo.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
#else
GLModel::Geometry init_data;
init_data.format = { GLModel::Geometry::EPrimitiveType::TriangleFan, GLModel::Geometry::EVertexLayout::P3N3 };
init_data.reserve_vertices(plane.vertices.size());
init_data.reserve_indices(plane.vertices.size());
// vertices + indices
for (size_t i = 0; i < plane.vertices.size(); ++i) {
init_data.add_vertex((Vec3f)plane.vertices[i].cast<float>(), (Vec3f)plane.normal.cast<float>());
init_data.add_index((unsigned int)i);
}
plane.vbo.init_from(std::move(init_data));
#endif // ENABLE_RAYCAST_PICKING
#else
plane.vbo.reserve(plane.vertices.size());
for (const auto& vert : plane.vertices)
@ -496,12 +421,9 @@ void GLGizmoFlatten::update_planes()
plane.vertices.shrink_to_fit();
}
#if ENABLE_RAYCAST_PICKING
on_register_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
}
bool GLGizmoFlatten::is_plane_update_necessary() const
{
const ModelObject* mo = m_c->selection_info()->model_object();

View File

@ -4,9 +4,7 @@
#include "GLGizmoBase.hpp"
#if ENABLE_LEGACY_OPENGL_REMOVAL
#include "slic3r/GUI/GLModel.hpp"
#if ENABLE_RAYCAST_PICKING
#include "slic3r/GUI/MeshUtils.hpp"
#endif // ENABLE_RAYCAST_PICKING
#else
#include "slic3r/GUI/3DScene.hpp"
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
@ -30,19 +28,13 @@ private:
struct PlaneData {
std::vector<Vec3d> vertices; // should be in fact local in update_planes()
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
PickingModel vbo;
#else
GLModel vbo;
#endif // ENABLE_RAYCAST_PICKING
#else
GLIndexedVertexArray vbo;
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
Vec3d normal;
float area;
#if ENABLE_RAYCAST_PICKING
int picking_id{ -1 };
#endif // ENABLE_RAYCAST_PICKING
};
// This holds information to decide whether recalculation is necessary:
@ -52,9 +44,7 @@ private:
Vec3d m_first_instance_mirror;
std::vector<PlaneData> m_planes;
#if ENABLE_RAYCAST_PICKING
std::vector<std::shared_ptr<SceneRaycasterItem>> m_planes_casters;
#endif // ENABLE_RAYCAST_PICKING
bool m_mouse_left_down = false; // for detection left_up of this gizmo
const ModelObject* m_old_model_object = nullptr;
@ -79,12 +69,8 @@ protected:
std::string on_get_name() const override;
bool on_is_activable() const override;
void on_render() override;
#if ENABLE_RAYCAST_PICKING
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
#else
void on_render_for_picking() override;
#endif // ENABLE_RAYCAST_PICKING
void on_set_state() override;
CommonGizmosDataID on_get_requirements() const override;
};

View File

@ -60,12 +60,10 @@ void GLGizmoHollow::data_changed()
update_volumes();
#if ENABLE_RAYCAST_PICKING
if (m_hole_raycasters.empty())
register_hole_raycasters_for_picking();
else
update_hole_raycasters_for_picking_transform();
#endif // ENABLE_RAYCAST_PICKING
m_c->instances_hider()->set_hide_full_scene(true);
}
@ -75,11 +73,6 @@ void GLGizmoHollow::data_changed()
void GLGizmoHollow::on_render()
{
#if !ENABLE_RAYCAST_PICKING
if (!m_cylinder.is_initialized())
m_cylinder.init_from(its_make_cylinder(1.0, 1.0));
#endif // !ENABLE_RAYCAST_PICKING
const Selection& selection = m_parent.get_selection();
const CommonGizmosDataObjects::SelectionInfo* sel_info = m_c->selection_info();
@ -94,12 +87,8 @@ void GLGizmoHollow::on_render()
glsafe(::glEnable(GL_BLEND));
glsafe(::glEnable(GL_DEPTH_TEST));
#if ENABLE_RAYCAST_PICKING
render_volumes();
render_points(selection);
#else
render_points(selection, false);
#endif // ENABLE_RAYCAST_PICKING
m_selection_rectangle.render(m_parent);
m_c->object_clipper()->render_cut();
@ -107,7 +96,6 @@ void GLGizmoHollow::on_render()
glsafe(::glDisable(GL_BLEND));
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoHollow::on_register_raycasters_for_picking()
{
register_hole_raycasters_for_picking();
@ -119,27 +107,11 @@ void GLGizmoHollow::on_unregister_raycasters_for_picking()
unregister_hole_raycasters_for_picking();
unregister_volume_raycasters_for_picking();
}
#else
void GLGizmoHollow::on_render_for_picking()
{
const Selection& selection = m_parent.get_selection();
glsafe(::glEnable(GL_DEPTH_TEST));
render_points(selection, true);
}
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_RAYCAST_PICKING
void GLGizmoHollow::render_points(const Selection& selection)
#else
void GLGizmoHollow::render_points(const Selection& selection, bool picking)
#endif // ENABLE_RAYCAST_PICKING
{
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light");
#else
GLShaderProgram* shader = picking ? wxGetApp().get_shader("flat") : wxGetApp().get_shader("gouraud_light");
#endif // ENABLE_RAYCAST_PICKING
if (shader == nullptr)
return;
@ -181,41 +153,19 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking)
const sla::DrainHole& drain_hole = drain_holes[i];
const bool point_selected = m_selected[i];
#if ENABLE_RAYCAST_PICKING
const bool clipped = is_mesh_point_clipped(drain_hole.pos.cast<double>());
m_hole_raycasters[i]->set_active(!clipped);
if (clipped)
continue;
#else
if (is_mesh_point_clipped(drain_hole.pos.cast<double>()))
continue;
#endif // ENABLE_RAYCAST_PICKING
// First decide about the color of the point.
#if !ENABLE_RAYCAST_PICKING
if (picking)
render_color = picking_color_component(i);
else {
#endif // !ENABLE_RAYCAST_PICKING
if (size_t(m_hover_id) == i)
render_color = ColorRGBA::CYAN();
// else if (m_c->hollowed_mesh() &&
// i < m_c->hollowed_mesh()->get_drainholes().size() &&
// m_c->hollowed_mesh()->get_drainholes()[i].failed) {
// render_color = { 1.0f, 0.0f, 0.0f, 0.5f };
// }
else
render_color = point_selected ? ColorRGBA(1.0f, 0.3f, 0.3f, 0.5f) : ColorRGBA(1.0f, 1.0f, 1.0f, 0.5f);
#if !ENABLE_RAYCAST_PICKING
}
#endif // !ENABLE_RAYCAST_PICKING
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_cylinder.model.set_color(render_color);
#else
m_cylinder.set_color(render_color);
#endif // ENABLE_RAYCAST_PICKING
// Inverse matrix of the instance scaling is applied so that the mark does not scale with the object.
const Transform3d hole_matrix = Geometry::translation_transform(drain_hole.pos.cast<double>()) * instance_scaling_matrix_inverse;
#else
@ -244,11 +194,7 @@ void GLGizmoHollow::render_points(const Selection& selection, bool picking)
glsafe(::glTranslated(0., 0., -drain_hole.height));
glsafe(::glScaled(drain_hole.radius, drain_hole.radius, drain_hole.height + sla::HoleStickOutLength));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_cylinder.model.render();
#else
m_cylinder.render();
#endif // ENABLE_RAYCAST_PICKING
if (vol->is_left_handed())
glsafe(::glFrontFace(GL_CCW));
@ -324,10 +270,8 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos
assert(m_selected.size() == mo->sla_drain_holes.size());
m_parent.set_as_dirty();
m_wait_for_up_event = true;
#if ENABLE_RAYCAST_PICKING
unregister_hole_raycasters_for_picking();
register_hole_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
}
else
return false;
@ -352,12 +296,8 @@ bool GLGizmoHollow::gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_pos
// Now ask the rectangle which of the points are inside.
std::vector<Vec3f> points_inside;
#if ENABLE_RAYCAST_PICKING
std::vector<unsigned int> points_idxs = m_selection_rectangle.contains(points);
m_selection_rectangle.stop_dragging();
#else
std::vector<unsigned int> points_idxs = m_selection_rectangle.stop_dragging(m_parent, points);
#endif // ENABLE_RAYCAST_PICKING
for (size_t idx : points_idxs)
points_inside.push_back(points[idx].cast<float>());
@ -451,10 +391,8 @@ void GLGizmoHollow::delete_selected_points()
}
}
#if ENABLE_RAYCAST_PICKING
unregister_hole_raycasters_for_picking();
register_hole_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
select_point(NoPoints);
}
@ -523,7 +461,6 @@ bool GLGizmoHollow::on_mouse(const wxMouseEvent &mouse_event)
return false;
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoHollow::register_hole_raycasters_for_picking()
{
assert(m_hole_raycasters.empty());
@ -572,7 +509,6 @@ void GLGizmoHollow::update_hole_raycasters_for_picking_transform()
}
}
}
#endif // ENABLE_RAYCAST_PICKING
std::vector<std::pair<const ConfigOption*, const ConfigOptionDef*>>
GLGizmoHollow::get_config_options(const std::vector<std::string>& keys) const
@ -851,7 +787,6 @@ RENDER_AGAIN:
m_c->object_clipper()->set_position_by_ratio(clp_dist, true);
m_imgui->disabled_end();
m_imgui->end();
@ -1038,7 +973,6 @@ void GLGizmoHollow::on_set_hover_id()
m_hover_id = -1;
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoHollow::init_cylinder_model()
{
if (!m_cylinder.model.is_initialized()) {
@ -1047,7 +981,6 @@ void GLGizmoHollow::init_cylinder_model()
m_cylinder.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
}
}
#endif // ENABLE_RAYCAST_PICKING

View File

@ -42,33 +42,19 @@ public:
protected:
bool on_init() override;
void on_render() override;
#if ENABLE_RAYCAST_PICKING
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
#else
void on_render_for_picking() override;
#endif // ENABLE_RAYCAST_PICKING
private:
#if ENABLE_RAYCAST_PICKING
void render_points(const Selection& selection);
#else
void render_points(const Selection& selection, bool picking = false);
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_RAYCAST_PICKING
void register_hole_raycasters_for_picking();
void unregister_hole_raycasters_for_picking();
void update_hole_raycasters_for_picking_transform();
#endif // ENABLE_RAYCAST_PICKING
ObjectID m_old_mo_id = -1;
#if ENABLE_RAYCAST_PICKING
PickingModel m_cylinder;
std::vector<std::shared_ptr<SceneRaycasterItem>> m_hole_raycasters;
#else
GLModel m_cylinder;
#endif // ENABLE_RAYCAST_PICKING
float m_new_hole_radius = 2.f; // Size of a new hole.
float m_new_hole_height = 6.f;
@ -123,9 +109,7 @@ protected:
void on_load(cereal::BinaryInputArchive& ar) override;
void on_save(cereal::BinaryOutputArchive& ar) const override;
#if ENABLE_RAYCAST_PICKING
void init_cylinder_model();
#endif // ENABLE_RAYCAST_PICKING
};

File diff suppressed because it is too large Load Diff

View File

@ -4,12 +4,12 @@
#include "GLGizmoBase.hpp"
#include "slic3r/GUI/GLModel.hpp"
#include "slic3r/GUI/GUI_Utils.hpp"
#include "slic3r/GUI/MeshUtils.hpp"
#include "libslic3r/Measure.hpp"
#include "libslic3r/Model.hpp"
namespace Slic3r {
class ModelVolume;
enum class ModelVolumeType : int;
namespace Measure { class Measuring; }
@ -24,20 +24,19 @@ class GLGizmoMeasure : public GLGizmoBase
enum class EMode : unsigned char
{
FeatureSelection,
PointSelection,
CenterSelection
PointSelection
};
struct SelectedFeatures
{
struct Item
{
std::string source;
bool is_center{ false };
std::optional<Measure::SurfaceFeature> source;
std::optional<Measure::SurfaceFeature> feature;
bool operator == (const Item& other) const {
if (this->source != other.source) return false;
return this->feature == other.feature;
return this->is_center == other.is_center && this->source == other.source && this->feature == other.feature;
}
bool operator != (const Item& other) const {
@ -45,7 +44,8 @@ class GLGizmoMeasure : public GLGizmoBase
}
void reset() {
source.clear();
is_center = false;
source.reset();
feature.reset();
}
};
@ -68,6 +68,21 @@ class GLGizmoMeasure : public GLGizmoBase
}
};
struct VolumeCacheItem
{
const ModelObject* object{ nullptr };
const ModelInstance* instance{ nullptr };
const ModelVolume* volume{ nullptr };
Transform3d world_trafo;
bool operator == (const VolumeCacheItem& other) const {
return this->object == other.object && this->instance == other.instance && this->volume == other.volume &&
this->world_trafo.isApprox(other.world_trafo);
}
};
std::vector<VolumeCacheItem> m_volumes_cache;
EMode m_mode{ EMode::FeatureSelection };
Measure::MeasurementResult m_measurement_result;
@ -85,10 +100,14 @@ class GLGizmoMeasure : public GLGizmoBase
};
Dimensioning m_dimensioning;
Transform3d m_volume_matrix{ Transform3d::Identity() };
// Uses a standalone raycaster and not the shared one because of the
// difference in how the mesh is updated
std::unique_ptr<MeshRaycaster> m_raycaster;
std::vector<GLModel> m_plane_models_cache;
std::map<int, std::shared_ptr<SceneRaycasterItem>> m_raycasters;
std::vector<std::shared_ptr<SceneRaycasterItem>> m_selection_raycasters;
// used to keep the raycasters for point/center spheres
std::vector<std::shared_ptr<SceneRaycasterItem>> m_selected_sphere_raycasters;
std::optional<Measure::SurfaceFeature> m_curr_feature;
std::optional<Vec3d> m_curr_point_on_feature_position;
struct SceneRaycasterState
@ -100,21 +119,14 @@ class GLGizmoMeasure : public GLGizmoBase
std::vector<SceneRaycasterState> m_scene_raycasters;
// These hold information to decide whether recalculation is necessary:
std::vector<Transform3d> m_volumes_matrices;
std::vector<ModelVolumeType> m_volumes_types;
Vec3d m_first_instance_scale{ Vec3d::Ones() };
Vec3d m_first_instance_mirror{ Vec3d::Ones() };
float m_last_inv_zoom{ 0.0f };
std::optional<Measure::SurfaceFeature> m_last_circle;
int m_last_plane_idx{ -1 };
bool m_mouse_left_down{ false }; // for detection left_up of this gizmo
const ModelObject* m_old_model_object{ nullptr };
const ModelVolume* m_old_model_volume{ nullptr };
Vec2d m_mouse_pos{ Vec2d::Zero() };
KeyAutoRepeatFilter m_ctrl_kar_filter;
KeyAutoRepeatFilter m_shift_kar_filter;
SelectedFeatures m_selected_features;
@ -147,17 +159,24 @@ public:
bool gizmo_event(SLAGizmoEventType action, const Vec2d& mouse_position, bool shift_down, bool alt_down, bool control_down);
bool wants_enter_leave_snapshots() const override { return true; }
std::string get_gizmo_entering_text() const override { return _u8L("Entering Measure gizmo"); }
std::string get_gizmo_leaving_text() const override { return _u8L("Leaving Measure gizmo"); }
std::string get_action_snapshot_name() override { return _u8L("Measure gizmo editing"); }
protected:
bool on_init() override;
std::string on_get_name() const override;
bool on_is_activable() const override;
void on_render() override;
void on_set_state() override;
CommonGizmosDataID on_get_requirements() const override;
virtual void on_render_input_window(float x, float y, float bottom_limit) override;
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
void remove_selected_sphere_raycaster(int id);
void update_measurement_result();
};
} // namespace GUI

View File

@ -362,7 +362,6 @@ void GLGizmoMove3D::on_render()
#endif // ENABLE_WORLD_COORDINATE
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoMove3D::on_register_raycasters_for_picking()
{
// the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account
@ -373,32 +372,6 @@ void GLGizmoMove3D::on_unregister_raycasters_for_picking()
{
m_parent.set_raycaster_gizmos_on_top(false);
}
#else
void GLGizmoMove3D::on_render_for_picking()
{
glsafe(::glDisable(GL_DEPTH_TEST));
#if ENABLE_WORLD_COORDINATE
#if ENABLE_LEGACY_OPENGL_REMOVAL
const Transform3d base_matrix = local_transform(m_parent.get_selection());
for (int i = 0; i < 3; ++i) {
m_grabbers[i].matrix = base_matrix;
}
#else
glsafe(::glPushMatrix());
transform_to_local(m_parent.get_selection());
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
render_grabbers_for_picking(m_bounding_box);
#if ENABLE_LEGACY_OPENGL_REMOVAL
#else
glsafe(::glPopMatrix());
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#else
const BoundingBoxf3& box = m_parent.get_selection().get_bounding_box();
render_grabbers_for_picking(box);
#endif // ENABLE_WORLD_COORDINATE
}
#endif // ENABLE_RAYCAST_PICKING
double GLGizmoMove3D::calc_projection(const UpdateData& data) const
{

View File

@ -62,12 +62,8 @@ protected:
void on_stop_dragging() override;
void on_dragging(const UpdateData& data) override;
void on_render() override;
#if ENABLE_RAYCAST_PICKING
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
#else
void on_render_for_picking() override;
#endif // ENABLE_RAYCAST_PICKING
private:
double calc_projection(const UpdateData& data) const;

View File

@ -138,9 +138,6 @@ private:
ObjectID m_old_mo_id;
size_t m_old_volumes_size = 0;
void on_render() override {}
#if !ENABLE_RAYCAST_PICKING
void on_render_for_picking() override {}
#endif // !ENABLE_RAYCAST_PICKING
public:
GLGizmoPainterBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id);

View File

@ -256,33 +256,6 @@ void GLGizmoRotate::on_render()
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
}
#if !ENABLE_RAYCAST_PICKING
void GLGizmoRotate::on_render_for_picking()
{
const Selection& selection = m_parent.get_selection();
glsafe(::glDisable(GL_DEPTH_TEST));
#if ENABLE_LEGACY_OPENGL_REMOVAL
m_grabbers.front().matrix = local_transform(selection);
#else
glsafe(::glPushMatrix());
transform_to_local(selection);
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_WORLD_COORDINATE
render_grabbers_for_picking(m_bounding_box);
#else
const BoundingBoxf3& box = selection.get_bounding_box();
render_grabbers_for_picking(box);
#endif // ENABLE_WORLD_COORDINATE
#if !ENABLE_LEGACY_OPENGL_REMOVAL
glsafe(::glPopMatrix());
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
}
#endif // !ENABLE_RAYCAST_PICKING
#if ENABLE_WORLD_COORDINATE
void GLGizmoRotate::init_data_from_selection(const Selection& selection)
{
@ -906,7 +879,6 @@ void GLGizmoRotate3D::on_render()
m_gizmos[Z].render();
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoRotate3D::on_register_raycasters_for_picking()
{
// the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account
@ -923,7 +895,6 @@ void GLGizmoRotate3D::on_unregister_raycasters_for_picking()
}
m_parent.set_raycaster_gizmos_on_top(false);
}
#endif // ENABLE_RAYCAST_PICKING
GLGizmoRotate3D::RotoptimzeWindow::RotoptimzeWindow(ImGuiWrapper * imgui,
State & state,

View File

@ -98,9 +98,6 @@ protected:
void on_start_dragging() override;
void on_dragging(const UpdateData &data) override;
void on_render() override;
#if !ENABLE_RAYCAST_PICKING
void on_render_for_picking() override;
#endif // !ENABLE_RAYCAST_PICKING
private:
#if ENABLE_LEGACY_OPENGL_REMOVAL
@ -189,16 +186,8 @@ protected:
void on_dragging(const UpdateData &data) override;
void on_render() override;
#if ENABLE_RAYCAST_PICKING
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
#else
void on_render_for_picking() override {
for (GLGizmoRotate& g : m_gizmos) {
g.render_for_picking();
}
}
#endif // ENABLE_RAYCAST_PICKING
void on_render_input_window(float x, float y, float bottom_limit) override;

View File

@ -650,7 +650,6 @@ void GLGizmoScale3D::on_render()
#endif // ENABLE_WORLD_COORDINATE
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoScale3D::on_register_raycasters_for_picking()
{
// the gizmo grabbers are rendered on top of the scene, so the raytraced picker should take it into account
@ -661,29 +660,6 @@ void GLGizmoScale3D::on_unregister_raycasters_for_picking()
{
m_parent.set_raycaster_gizmos_on_top(false);
}
#else
void GLGizmoScale3D::on_render_for_picking()
{
glsafe(::glDisable(GL_DEPTH_TEST));
#if ENABLE_WORLD_COORDINATE
#if ENABLE_LEGACY_OPENGL_REMOVAL
const Transform3d base_matrix = local_transform(m_parent.get_selection());
for (int i = 0; i < 10; ++i) {
m_grabbers[i].matrix = base_matrix;
}
#else
glsafe(::glPushMatrix());
transform_to_local(m_parent.get_selection());
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
render_grabbers_for_picking(m_bounding_box);
#if !ENABLE_LEGACY_OPENGL_REMOVAL
glsafe(::glPopMatrix());
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
#else
render_grabbers_for_picking(m_parent.get_selection().get_bounding_box());
#endif // ENABLE_WORLD_COORDINATE
}
#endif // !ENABLE_RAYCAST_PICKING
#if ENABLE_LEGACY_OPENGL_REMOVAL
void GLGizmoScale3D::render_grabbers_connection(unsigned int id_1, unsigned int id_2, const ColorRGBA& color)

View File

@ -94,12 +94,8 @@ protected:
virtual void on_stop_dragging() override;
virtual void on_dragging(const UpdateData& data) override;
virtual void on_render() override;
#if ENABLE_RAYCAST_PICKING
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
#else
virtual void on_render_for_picking() override;
#endif // ENABLE_RAYCAST_PICKING
private:
#if ENABLE_LEGACY_OPENGL_REMOVAL

View File

@ -38,9 +38,6 @@ protected:
// must implement
virtual bool on_init() override { return true;};
virtual void on_render() override;
#if !ENABLE_RAYCAST_PICKING
virtual void on_render_for_picking() override{};
#endif // !ENABLE_RAYCAST_PICKING
CommonGizmosDataID on_get_requirements() const override;

View File

@ -10,9 +10,7 @@ namespace Slic3r {
namespace GUI {
static const ColorRGBA DISABLED_COLOR = ColorRGBA::DARK_GRAY();
#if ENABLE_RAYCAST_PICKING
static const int VOLUME_RAYCASTERS_BASE_ID = (int)SceneRaycaster::EIdBase::Gizmo;
#endif // ENABLE_RAYCAST_PICKING
GLGizmoSlaBase::GLGizmoSlaBase(GLCanvas3D& parent, const std::string& icon_filename, unsigned int sprite_id, SLAPrintObjectStep min_step)
: GLGizmoBase(parent, icon_filename, sprite_id)
@ -87,9 +85,7 @@ void GLGizmoSlaBase::update_volumes()
}
}
#if ENABLE_RAYCAST_PICKING
register_volume_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
}
void GLGizmoSlaBase::render_volumes()
@ -111,7 +107,6 @@ void GLGizmoSlaBase::render_volumes()
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoSlaBase::register_volume_raycasters_for_picking()
{
for (size_t i = 0; i < m_volumes.volumes.size(); ++i) {
@ -127,7 +122,6 @@ void GLGizmoSlaBase::unregister_volume_raycasters_for_picking()
}
m_volume_raycasters.clear();
}
#endif // ENABLE_RAYCAST_PICKING
int GLGizmoSlaBase::last_completed_step(const SLAPrint& sla)
{

View File

@ -32,10 +32,8 @@ protected:
void update_volumes();
void render_volumes();
#if ENABLE_RAYCAST_PICKING
void register_volume_raycasters_for_picking();
void unregister_volume_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
bool is_input_enabled() const { return m_input_enabled; }
int get_min_sla_print_object_step() const { return m_min_sla_print_object_step; }
@ -48,9 +46,7 @@ private:
GLVolumeCollection m_volumes;
bool m_input_enabled{ false };
int m_min_sla_print_object_step{ -1 };
#if ENABLE_RAYCAST_PICKING
std::vector<std::shared_ptr<SceneRaycasterItem>> m_volume_raycasters;
#endif // ENABLE_RAYCAST_PICKING
};
} // namespace GUI

View File

@ -18,10 +18,8 @@
#include "libslic3r/PresetBundle.hpp"
#include "libslic3r/SLAPrint.hpp"
#if ENABLE_RAYCAST_PICKING
static const double CONE_RADIUS = 0.25;
static const double CONE_HEIGHT = 0.75;
#endif // ENABLE_RAYCAST_PICKING
namespace Slic3r {
namespace GUI {
@ -47,12 +45,6 @@ bool GLGizmoSlaSupports::on_init()
m_desc["clipping_of_view"] = _L("Clipping of view")+ ": ";
m_desc["reset_direction"] = _L("Reset direction");
#if !ENABLE_RAYCAST_PICKING
m_cone.init_from(its_make_cone(1., 1., 2 * PI / 24));
m_cylinder.init_from(its_make_cylinder(1., 1., 2 * PI / 24.));
m_sphere.init_from(its_make_sphere(1., (2 * M_PI) / 24.));
#endif // !ENABLE_RAYCAST_PICKING
return true;
}
@ -82,12 +74,10 @@ void GLGizmoSlaSupports::data_changed()
if (mo->sla_points_status == sla::PointsStatus::Generating)
get_data_from_backend();
#if ENABLE_RAYCAST_PICKING
if (m_point_raycasters.empty())
register_point_raycasters_for_picking();
else
update_point_raycasters_for_picking_transform();
#endif // ENABLE_RAYCAST_PICKING
}
// m_parent.toggle_model_objects_visibility(false);
@ -97,7 +87,6 @@ void GLGizmoSlaSupports::data_changed()
void GLGizmoSlaSupports::on_render()
{
#if ENABLE_RAYCAST_PICKING
if (!m_sphere.model.is_initialized()) {
indexed_triangle_set its = its_make_sphere(1.0, double(PI) / 12.0);
m_sphere.model.init_from(its);
@ -108,12 +97,6 @@ void GLGizmoSlaSupports::on_render()
m_cone.model.init_from(its);
m_cone.mesh_raycaster = std::make_unique<MeshRaycaster>(std::make_shared<const TriangleMesh>(std::move(its)));
}
#else
if (!m_cone.is_initialized())
m_cone.init_from(its_make_cone(1.0, 1.0, double(PI) / 12.0));
if (!m_sphere.is_initialized())
m_sphere.init_from(its_make_sphere(1.0, double(PI) / 12.0));
#endif // ENABLE_RAYCAST_PICKING
ModelObject* mo = m_c->selection_info()->model_object();
const Selection& selection = m_parent.get_selection();
@ -129,12 +112,8 @@ void GLGizmoSlaSupports::on_render()
glsafe(::glEnable(GL_BLEND));
glsafe(::glEnable(GL_DEPTH_TEST));
#if ENABLE_RAYCAST_PICKING
render_volumes();
render_points(selection);
#else
render_points(selection, false);
#endif // ENABLE_RAYCAST_PICKING
m_selection_rectangle.render(m_parent);
m_c->object_clipper()->render_cut();
@ -142,7 +121,6 @@ void GLGizmoSlaSupports::on_render()
glsafe(::glDisable(GL_BLEND));
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoSlaSupports::on_register_raycasters_for_picking()
{
register_point_raycasters_for_picking();
@ -154,20 +132,8 @@ void GLGizmoSlaSupports::on_unregister_raycasters_for_picking()
unregister_point_raycasters_for_picking();
unregister_volume_raycasters_for_picking();
}
#else
void GLGizmoSlaSupports::on_render_for_picking()
{
const Selection& selection = m_parent.get_selection();
//glsafe(::glEnable(GL_DEPTH_TEST));
render_points(selection, true);
}
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_RAYCAST_PICKING
void GLGizmoSlaSupports::render_points(const Selection& selection)
#else
void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
#endif // ENABLE_RAYCAST_PICKING
{
const size_t cache_size = m_editing_mode ? m_editing_cache.size() : m_normal_cache.size();
@ -176,11 +142,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
return;
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
GLShaderProgram* shader = wxGetApp().get_shader("gouraud_light");
#else
GLShaderProgram* shader = wxGetApp().get_shader(picking ? "flat" : "gouraud_light");
#endif // ENABLE_RAYCAST_PICKING
if (shader == nullptr)
return;
@ -220,7 +182,6 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
const sla::SupportPoint& support_point = m_editing_mode ? m_editing_cache[i].support_point : m_normal_cache[i];
const bool point_selected = m_editing_mode ? m_editing_cache[i].selected : false;
#if ENABLE_RAYCAST_PICKING
const bool clipped = is_mesh_point_clipped(support_point.pos.cast<double>());
if (i < m_point_raycasters.size()) {
m_point_raycasters[i].first->set_active(!clipped);
@ -228,17 +189,8 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
}
if (clipped)
continue;
#else
if (is_mesh_point_clipped(support_point.pos.cast<double>()))
continue;
#endif // ENABLE_RAYCAST_PICKING
// First decide about the color of the point.
#if !ENABLE_RAYCAST_PICKING
if (picking)
render_color = picking_color_component(i);
else {
#endif // !ENABLE_RAYCAST_PICKING
if (size_t(m_hover_id) == i && m_editing_mode) // ignore hover state unless editing mode is active
render_color = { 0.f, 1.f, 1.f, 1.f };
else { // neigher hover nor picking
@ -255,21 +207,10 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
else
render_color = { 0.5f, 0.5f, 0.5f, 1.f };
}
#if !ENABLE_RAYCAST_PICKING
}
#endif // !ENABLE_RAYCAST_PICKING
#if ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_cone.model.set_color(render_color);
m_sphere.model.set_color(render_color);
#else
m_cone.set_color(render_color);
m_sphere.set_color(render_color);
#endif // ENABLE_RAYCAST_PICKING
#if !ENABLE_RAYCAST_PICKING
if (!picking)
#endif // !ENABLE_RAYCAST_PICKING
#else
m_cone.set_color(-1, render_color);
m_sphere.set_color(-1, render_color);
@ -299,19 +240,10 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
Eigen::Quaterniond q;
q.setFromTwoVectors(Vec3d::UnitZ(), instance_scaling_matrix_inverse * m_editing_cache[i].normal.cast<double>());
const Eigen::AngleAxisd aa(q);
#if !ENABLE_RAYCAST_PICKING
const double cone_radius = 0.25; // mm
const double cone_height = 0.75;
#endif // !ENABLE_RAYCAST_PICKING
#if ENABLE_LEGACY_OPENGL_REMOVAL
const Transform3d model_matrix = vol->world_matrix() * support_matrix * Transform3d(aa.toRotationMatrix()) *
#if ENABLE_RAYCAST_PICKING
Geometry::translation_transform((CONE_HEIGHT + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ()) *
Geometry::rotation_transform({ double(PI), 0.0, 0.0 }) * Geometry::scale_transform({ CONE_RADIUS, CONE_RADIUS, CONE_HEIGHT });
#else
Geometry::translation_transform((cone_height + support_point.head_front_radius * RenderPointScale) * Vec3d::UnitZ()) *
Geometry::rotation_transform({ double(PI), 0.0, 0.0 }), * Geometry::scale_transform({ cone_radius, cone_radius, cone_height });
#endif // ENABLE_RAYCAST_PICKING
shader->set_uniform("view_model_matrix", view_matrix * model_matrix);
const Matrix3d view_normal_matrix = view_matrix.matrix().block(0, 0, 3, 3) * model_matrix.matrix().block(0, 0, 3, 3).inverse().transpose();
@ -323,11 +255,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
glsafe(::glRotated(180., 1., 0., 0.));
glsafe(::glScaled(cone_radius, cone_radius, cone_height));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_cone.model.render();
#else
m_cone.render();
#endif // ENABLE_RAYCAST_PICKING
#if !ENABLE_LEGACY_OPENGL_REMOVAL
glsafe(::glPopMatrix());
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
@ -343,11 +271,7 @@ void GLGizmoSlaSupports::render_points(const Selection& selection, bool picking)
glsafe(::glPushMatrix());
glsafe(::glScaled(radius, radius, radius));
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
#if ENABLE_RAYCAST_PICKING
m_sphere.model.render();
#else
m_sphere.render();
#endif // ENABLE_RAYCAST_PICKING
#if !ENABLE_LEGACY_OPENGL_REMOVAL
glsafe(::glPopMatrix());
#endif // !ENABLE_LEGACY_OPENGL_REMOVAL
@ -424,10 +348,8 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous
m_editing_cache.emplace_back(sla::SupportPoint(pos_and_normal.first, m_new_point_head_diameter/2.f, false), false, pos_and_normal.second);
m_parent.set_as_dirty();
m_wait_for_up_event = true;
#if ENABLE_RAYCAST_PICKING
unregister_point_raycasters_for_picking();
register_point_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
}
else
return false;
@ -452,12 +374,8 @@ bool GLGizmoSlaSupports::gizmo_event(SLAGizmoEventType action, const Vec2d& mous
// Now ask the rectangle which of the points are inside.
std::vector<Vec3f> points_inside;
#if ENABLE_RAYCAST_PICKING
std::vector<unsigned int> points_idxs = m_selection_rectangle.contains(points);
m_selection_rectangle.stop_dragging();
#else
std::vector<unsigned int> points_idxs = m_selection_rectangle.stop_dragging(m_parent, points);
#endif // ENABLE_RAYCAST_PICKING
for (size_t idx : points_idxs)
points_inside.push_back(points[idx].cast<float>());
@ -587,11 +505,8 @@ void GLGizmoSlaSupports::delete_selected_points(bool force)
}
}
#if ENABLE_RAYCAST_PICKING
unregister_point_raycasters_for_picking();
register_point_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
select_point(NoPoints);
}
@ -1260,9 +1175,7 @@ void GLGizmoSlaSupports::switch_to_editing_mode()
for (const sla::SupportPoint& sp : m_normal_cache)
m_editing_cache.emplace_back(sp);
select_point(NoPoints);
#if ENABLE_RAYCAST_PICKING
register_point_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
m_parent.set_as_dirty();
}
@ -1273,9 +1186,7 @@ void GLGizmoSlaSupports::disable_editing_mode()
m_editing_mode = false;
wxGetApp().plater()->leave_gizmos_stack();
m_parent.set_as_dirty();
#if ENABLE_RAYCAST_PICKING
unregister_point_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
}
wxGetApp().plater()->get_notification_manager()->close_notification_of_type(NotificationType::QuitSLAManualMode);
}
@ -1294,7 +1205,6 @@ bool GLGizmoSlaSupports::unsaved_changes() const
return false;
}
#if ENABLE_RAYCAST_PICKING
void GLGizmoSlaSupports::register_point_raycasters_for_picking()
{
assert(m_point_raycasters.empty());
@ -1345,7 +1255,6 @@ void GLGizmoSlaSupports::update_point_raycasters_for_picking_transform()
m_point_raycasters[i].first->set_transform(sphere_matrix);
}
}
#endif // ENABLE_RAYCAST_PICKING
SlaGizmoHelpDialog::SlaGizmoHelpDialog()
: wxDialog(nullptr, wxID_ANY, _L("SLA gizmo keyboard shortcuts"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER)

View File

@ -77,24 +77,14 @@ public:
private:
bool on_init() override;
void on_render() override;
#if ENABLE_RAYCAST_PICKING
virtual void on_register_raycasters_for_picking() override;
virtual void on_unregister_raycasters_for_picking() override;
#else
void on_render_for_picking() override;
#endif // ENABLE_RAYCAST_PICKING
#if ENABLE_RAYCAST_PICKING
void render_points(const Selection& selection);
#else
void render_points(const Selection& selection, bool picking = false);
#endif // ENABLE_RAYCAST_PICKING
bool unsaved_changes() const;
#if ENABLE_RAYCAST_PICKING
void register_point_raycasters_for_picking();
void unregister_point_raycasters_for_picking();
void update_point_raycasters_for_picking_transform();
#endif // ENABLE_RAYCAST_PICKING
bool m_lock_unique_islands = false;
bool m_editing_mode = false; // Is editing mode active?
@ -107,14 +97,9 @@ private:
std::vector<sla::SupportPoint> m_normal_cache; // to restore after discarding changes or undo/redo
ObjectID m_old_mo_id;
#if ENABLE_RAYCAST_PICKING
PickingModel m_sphere;
PickingModel m_cone;
std::vector<std::pair<std::shared_ptr<SceneRaycasterItem>, std::shared_ptr<SceneRaycasterItem>>> m_point_raycasters;
#else
GLModel m_cone;
GLModel m_sphere;
#endif // ENABLE_RAYCAST_PICKING
// This map holds all translated description texts, so they can be easily referenced during layout calculations
// etc. When language changes, GUI is recreated and this class constructed again, so the change takes effect.

View File

@ -249,8 +249,6 @@ void InstancesHider::render_cut() const
}
void Raycaster::on_update()
{
wxBusyCursor wait;
@ -291,11 +289,7 @@ void Raycaster::on_update()
if (force_raycaster_regeneration || meshes != m_old_meshes) {
m_raycasters.clear();
for (const TriangleMesh* mesh : meshes)
#if ENABLE_RAYCAST_PICKING
m_raycasters.emplace_back(new MeshRaycaster(std::make_shared<const TriangleMesh>(*mesh)));
#else
m_raycasters.emplace_back(new MeshRaycaster(*mesh));
#endif // ENABLE_RAYCAST_PICKING
m_old_meshes = meshes;
}
}

View File

@ -29,6 +29,7 @@ enum class SLAGizmoEventType : unsigned char {
ShiftDown,
ShiftUp,
AltUp,
Escape,
ApplyChanges,
DiscardChanges,
AutomaticGeneration,
@ -136,7 +137,6 @@ protected:
virtual void on_update() = 0;
CommonGizmosDataPool* get_pool() const { return m_common; }
private:
bool m_is_valid = false;
CommonGizmosDataPool* m_common = nullptr;

View File

@ -339,17 +339,6 @@ void GLGizmosManager::render_painter_gizmo()
gizmo->render_painter_gizmo();
}
#if !ENABLE_RAYCAST_PICKING
void GLGizmosManager::render_current_gizmo_for_picking_pass() const
{
if (! m_enabled || m_current == Undefined)
return;
m_gizmos[m_current]->render_for_picking();
}
#endif // !ENABLE_RAYCAST_PICKING
void GLGizmosManager::render_overlay()
{
if (!m_enabled)
@ -526,7 +515,10 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt)
case WXK_ESCAPE:
{
if (m_current != Undefined) {
if ((m_current != SlaSupports) || !gizmo_event(SLAGizmoEventType::DiscardChanges))
if (m_current == Measure && gizmo_event(SLAGizmoEventType::Escape)) {
// do nothing
}
else if (m_current != SlaSupports || !gizmo_event(SLAGizmoEventType::DiscardChanges))
reset_all_states();
processed = true;
@ -554,7 +546,7 @@ bool GLGizmosManager::on_char(wxKeyEvent& evt)
case WXK_BACK:
case WXK_DELETE:
{
if ((m_current == SlaSupports || m_current == Hollow || m_current == Cut) && gizmo_event(SLAGizmoEventType::Delete))
if ((m_current == SlaSupports || m_current == Hollow || m_current == Cut || m_current == Measure) && gizmo_event(SLAGizmoEventType::Delete))
processed = true;
break;
@ -1129,9 +1121,7 @@ bool GLGizmosManager::activate_gizmo(EType type)
if (old_gizmo.get_state() != GLGizmoBase::Off)
return false; // gizmo refused to be turned off, do nothing.
#if ENABLE_RAYCAST_PICKING
old_gizmo.unregister_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
if (!m_serializing && old_gizmo.wants_enter_leave_snapshots())
Plater::TakeSnapshot
@ -1162,9 +1152,7 @@ bool GLGizmosManager::activate_gizmo(EType type)
return false; // gizmo refused to be turned on.
}
#if ENABLE_RAYCAST_PICKING
new_gizmo.register_raycasters_for_picking();
#endif // ENABLE_RAYCAST_PICKING
// sucessful activation of gizmo
return true;

View File

@ -216,9 +216,6 @@ public:
bool is_hiding_instances() const;
void render_current_gizmo() const;
#if !ENABLE_RAYCAST_PICKING
void render_current_gizmo_for_picking_pass() const;
#endif // !ENABLE_RAYCAST_PICKING
void render_painter_gizmo();
void render_overlay();

View File

@ -165,8 +165,6 @@ void ArrangeJob::process(Ctl &ctl)
{
static const auto arrangestr = _u8L("Arranging");
ctl.update_status(0, arrangestr);
arrangement::ArrangeParams params;
Points bedpts;
ctl.call_on_main_thread([this, &params, &bedpts]{
@ -177,6 +175,11 @@ void ArrangeJob::process(Ctl &ctl)
auto count = unsigned(m_selected.size() + m_unprintable.size());
if (count == 0) // Should be taken care of by plater, but doesn't hurt
return;
ctl.update_status(0, arrangestr);
params.stopcondition = [&ctl]() { return ctl.was_canceled(); };
params.progressind = [this, count, &ctl](unsigned st) {

View File

@ -24,7 +24,7 @@ namespace GUI {
void MeshClipper::set_behaviour(bool fill_cut, double contour_width)
{
if (fill_cut != m_fill_cut || contour_width != m_contour_width)
if (fill_cut != m_fill_cut || is_approx(contour_width, m_contour_width))
m_result.reset();
m_fill_cut = fill_cut;
m_contour_width = contour_width;
@ -97,7 +97,7 @@ void MeshClipper::render_cut()
shader->set_uniform("view_model_matrix", camera.get_view_matrix());
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
for (CutIsland& isl : m_result->cut_islands) {
isl.model.set_color(isl.disabled ? ColorRGBA(1.f, 0.f, 0.f, 1.f) : color);
isl.model.set_color(isl.disabled ? ColorRGBA(0.5f, 0.5f, 0.5f, 1.f) : color);
isl.model.render();
}
shader->stop_using();
@ -132,7 +132,7 @@ void MeshClipper::render_contour()
shader->set_uniform("view_model_matrix", camera.get_view_matrix());
shader->set_uniform("projection_matrix", camera.get_projection_matrix());
for (CutIsland& isl : m_result->cut_islands) {
isl.model_expanded.set_color(color);
isl.model_expanded.set_color(isl.disabled ? ColorRGBA(1.f, 0.f, 0.f, 1.f) : color);
isl.model_expanded.render();
}
shader->stop_using();
@ -155,7 +155,7 @@ bool MeshClipper::is_projection_inside_cut(const Vec3d& point_in) const
for (const CutIsland& isl : m_result->cut_islands) {
if (isl.expoly_bb.contains(pt_2d) && isl.expoly.contains(pt_2d))
return true;
return !isl.disabled;
}
return false;
}
@ -370,13 +370,8 @@ Vec3f MeshRaycaster::get_triangle_normal(size_t facet_idx) const
return m_normals[facet_idx];
}
#if ENABLE_RAYCAST_PICKING
void MeshRaycaster::line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera,
Vec3d& point, Vec3d& direction)
#else
void MeshRaycaster::line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera,
Vec3d& point, Vec3d& direction)
#endif // ENABLE_RAYCAST_PICKING
{
Matrix4d modelview = camera.get_view_matrix().matrix();
Matrix4d projection= camera.get_projection_matrix().matrix();
@ -429,10 +424,10 @@ bool MeshRaycaster::unproject_on_mesh(const Vec2d& mouse_pos, const Transform3d&
// All hits are clipped.
return false;
}
if ((hits.size()-i) % 2 != 0) {
if (clipping_plane && (hits.size()-i) % 2 != 0) {
// There is an odd number of unclipped hits - meaning the nearest must be from inside the mesh.
// In that case, calculate intersection with the clipping place.
if (clipping_plane && was_clipping_plane_hit) {
if (was_clipping_plane_hit) {
direction = direction + point;
point = trafo * point; // transform to world coords
direction = trafo * direction - point;
@ -540,7 +535,6 @@ std::vector<unsigned> MeshRaycaster::get_unobscured_idxs(const Geometry::Transfo
return out;
}
#if ENABLE_RAYCAST_PICKING
bool MeshRaycaster::closest_hit(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera,
Vec3f& position, Vec3f& normal, const ClippingPlane* clipping_plane, size_t* facet_idx) const
{
@ -573,7 +567,6 @@ bool MeshRaycaster::closest_hit(const Vec2d& mouse_pos, const Transform3d& trafo
return true;
}
#endif // ENABLE_RAYCAST_PICKING
Vec3f MeshRaycaster::get_closest_point(const Vec3f& point, Vec3f* normal) const
{

View File

@ -15,9 +15,7 @@
#include <cfloat>
#include <optional>
#if ENABLE_RAYCAST_PICKING
#include <memory>
#endif // ENABLE_RAYCAST_PICKING
namespace Slic3r {
@ -61,10 +59,8 @@ public:
void set_offset(double offset) { m_data[3] = offset; }
double get_offset() const { return m_data[3]; }
Vec3d get_normal() const { return Vec3d(m_data[0], m_data[1], m_data[2]); }
#if ENABLE_RAYCAST_PICKING
void invert_normal() { m_data[0] *= -1.0; m_data[1] *= -1.0; m_data[2] *= -1.0; }
ClippingPlane inverted_normal() const { return ClippingPlane(-get_normal(), get_offset()); }
#endif // ENABLE_RAYCAST_PICKING
bool is_active() const { return m_data[3] != DBL_MAX; }
static ClippingPlane ClipsNothing() { return ClippingPlane(Vec3d(0., 0., 1.), DBL_MAX); }
const std::array<double, 4>& get_data() const { return m_data; }
@ -155,7 +151,6 @@ private:
// whether certain points are visible or obscured by the mesh etc.
class MeshRaycaster {
public:
#if ENABLE_RAYCAST_PICKING
explicit MeshRaycaster(std::shared_ptr<const TriangleMesh> mesh)
: m_mesh(std::move(mesh))
, m_emesh(*m_mesh, true) // calculate epsilon for triangle-ray intersection from an average edge length
@ -170,20 +165,6 @@ public:
static void line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera,
Vec3d& point, Vec3d& direction);
#else
// The class references extern TriangleMesh, which must stay alive
// during MeshRaycaster existence.
MeshRaycaster(const TriangleMesh& mesh)
: m_emesh(mesh, true) // calculate epsilon for triangle-ray intersection from an average edge length
, m_normals(its_face_normals(mesh.its))
{
}
static void line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera,
Vec3d& point, Vec3d& direction);
// void line_from_mouse_pos(const Vec2d& mouse_pos, const Transform3d& trafo, const Camera& camera,
// Vec3d& point, Vec3d& direction) const;
#endif // ENABLE_RAYCAST_PICKING
// Given a mouse position, this returns true in case it is on the mesh.
bool unproject_on_mesh(
@ -212,7 +193,6 @@ public:
const ClippingPlane* clipping_plane = nullptr // clipping plane (if active)
) const;
#if ENABLE_RAYCAST_PICKING
// Returns true if the ray, built from mouse position and camera direction, intersects the mesh.
// In this case, position and normal contain the position and normal, in model coordinates, of the intersection closest to the camera,
// depending on the position/orientation of the clipping_plane, if specified
@ -225,7 +205,6 @@ public:
const ClippingPlane* clipping_plane = nullptr, // clipping plane (if active)
size_t* facet_idx = nullptr // index of the facet hit
) const;
#endif // ENABLE_RAYCAST_PICKING
// Given a point in world coords, the method returns closest point on the mesh.
// The output is in mesh coords.
@ -238,14 +217,11 @@ public:
Vec3f get_triangle_normal(size_t facet_idx) const;
private:
#if ENABLE_RAYCAST_PICKING
std::shared_ptr<const TriangleMesh> m_mesh;
#endif // ENABLE_RAYCAST_PICKING
AABBMesh m_emesh;
std::vector<stl_normal> m_normals;
};
#if ENABLE_RAYCAST_PICKING
struct PickingModel
{
GLModel model;
@ -256,7 +232,6 @@ struct PickingModel
mesh_raycaster.reset();
}
};
#endif // ENABLE_RAYCAST_PICKING
} // namespace GUI
} // namespace Slic3r

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