Skip to content
Snippets Groups Projects
Commit 604f3d86 authored by adrian_egli's avatar adrian_egli
Browse files

Merge branch 'adrian' into 'master'

Adrian

See merge request flatland/flatland!80
parents 9bb10186 0681ac7b
No related branches found
No related tags found
No related merge requests found
...@@ -73,6 +73,11 @@ class PILGL(GraphicsLayer): ...@@ -73,6 +73,11 @@ class PILGL(GraphicsLayer):
"#64dd17#aeea00#ffd600#ffab00#ff6d00#ff3d00#5d4037#455a64" "#64dd17#aeea00#ffd600#ffab00#ff6d00#ff3d00#5d4037#455a64"
self.ltAgentColors = [self.rgb_s2i(sColor) for sColor in sColors.split("#")] self.ltAgentColors = [self.rgb_s2i(sColor) for sColor in sColors.split("#")]
permute = np.random.permutation(len(self.ltAgentColors))
tmp = []
for p in permute:
tmp.append(self.ltAgentColors[p])
self.ltAgentColors = tmp
self.nAgentColors = len(self.ltAgentColors) self.nAgentColors = len(self.ltAgentColors)
self.window_root = None self.window_root = None
...@@ -373,6 +378,11 @@ class PILSVG(PILGL): ...@@ -373,6 +378,11 @@ class PILSVG(PILGL):
dPilTargetFiles = self.loadSVGs(dTargetFiles, rotate=False, agent_colors=self.ltAgentColors, dPilTargetFiles = self.loadSVGs(dTargetFiles, rotate=False, agent_colors=self.ltAgentColors,
backgroundImage="Background_rail.svg", backgroundImage="Background_rail.svg",
whitefilter="Background_white_filter.svg") whitefilter="Background_white_filter.svg")
# Load station and recolorize them
station = self.pilFromSvgFile("svg", "Bahnhof_#d50000_target.svg")
self.ltStationColors = self.recolorImage(station, [0, 0, 0], self.ltAgentColors, False)
# Merge them with the regular rails. # Merge them with the regular rails.
# https://stackoverflow.com/questions/38987/how-to-merge-two-dictionaries-in-a-single-expression # https://stackoverflow.com/questions/38987/how-to-merge-two-dictionaries-in-a-single-expression
self.dPilRail = {**dPilRailFiles, **dPilTargetFiles} self.dPilRail = {**dPilRailFiles, **dPilTargetFiles}
...@@ -429,49 +439,48 @@ class PILSVG(PILGL): ...@@ -429,49 +439,48 @@ class PILSVG(PILGL):
return dPil return dPil
def setRailAt(self, row, col, binTrans, iTarget=None, isSelected=False): def setRailAt(self, row, col, binTrans, iTarget=None, isSelected=False):
if iTarget is None: if binTrans in self.dPilRail:
if binTrans in self.dPilRail: pilTrack = self.dPilRail[binTrans]
pilTrack = self.dPilRail[binTrans] if iTarget is not None:
pilTrack = Image.alpha_composite(pilTrack, self.ltStationColors[iTarget % len(self.ltStationColors)])
if binTrans == 0:
if self.background_grid[col][row] < 4: if binTrans == 0:
a = int(self.background_grid[col][row]) if self.background_grid[col][row] < 4:
a = a % len(self.dBuildings) a = int(self.background_grid[col][row])
if (col + row) % 10 > 7: a = a % len(self.dBuildings)
pilTrack = self.dScenery[0] if (col + row) % 10 > 7:
else: pilTrack = self.dScenery[0]
if (col + row + col * row) % 3 == 0: else:
a = (a + (col + row + col * row)) % len(self.dBuildings) if (col + row + col * row) % 3 == 0:
pilTrack = self.dBuildings[a] a = (a + (col + row + col * row)) % len(self.dBuildings)
elif (self.background_grid[col][row] > 4) or ((col ** 3 + row ** 2 + col * row) % 10 == 0): pilTrack = self.dBuildings[a]
a = int(self.background_grid[col][row]) - 4 elif (self.background_grid[col][row] > 4) or ((col ** 3 + row ** 2 + col * row) % 10 == 0):
a = (a + (col + row + col * row + col ** 3 + row ** 4)) % len(self.dScenery) a = int(self.background_grid[col][row]) - 4
if (col + row + col * row) % 10 > 2: a = (a + (col + row + col * row + col ** 3 + row ** 4)) % len(self.dScenery)
a = 0 if (col + row + col * row) % 10 > 2:
pilTrack = self.dScenery[a] a = 0
pilTrack = self.dScenery[a]
self.drawImageRC(pilTrack, (row, col))
else: self.drawImageRC(pilTrack, (row, col))
print("Illegal rail:", row, col, format(binTrans, "#018b")[2:], binTrans)
else: else:
if (binTrans, iTarget) in self.dPilRail: print("Illegal rail:", row, col, format(binTrans, "#018b")[2:], binTrans)
pilTrack = self.dPilRail[(binTrans, iTarget)]
self.drawImageRC(pilTrack, (row, col))
else:
print("Illegal target rail:", row, col, format(binTrans, "#018b")[2:], (binTrans, iTarget))
if iTarget is not None:
if isSelected: if isSelected:
svgBG = self.pilFromSvgFile("svg", "Selected_Target.svg") svgBG = self.pilFromSvgFile("svg", "Selected_Target.svg")
self.clear_layer(3, 0) self.clear_layer(3, 0)
self.drawImageRC(svgBG, (row, col), layer=3) self.drawImageRC(svgBG, (row, col), layer=3)
def recolorImage(self, pil, a3BaseColor, ltColors): def recolorImage(self, pil, a3BaseColor, ltColors, invert=False):
rgbaImg = array(pil) rgbaImg = array(pil)
lPils = [] lPils = []
for iColor, tnColor in enumerate(ltColors): for iColor, tnColor in enumerate(ltColors):
# find the pixels which match the base paint color # find the pixels which match the base paint color
xy_color_mask = np.all(rgbaImg[:, :, 0:3] - a3BaseColor == 0, axis=2) if invert:
xy_color_mask = np.all(rgbaImg[:, :, 0:3] - a3BaseColor != 0, axis=2)
else:
xy_color_mask = np.all(rgbaImg[:, :, 0:3] - a3BaseColor == 0, axis=2)
rgbaImg2 = np.copy(rgbaImg) rgbaImg2 = np.copy(rgbaImg)
# Repaint the base color with the new color # Repaint the base color with the new color
......
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
# Railway Scene Editor # Railway Scene Editor
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from IPython.core.display import display, HTML from IPython.core.display import display, HTML
display(HTML("<style>.container { width:95% !important; }</style>")) display(HTML("<style>.container { width:95% !important; }</style>"))
``` ```
%% Output
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
from flatland.utils.editor import EditorMVC from flatland.utils.editor import EditorMVC
mvc = EditorMVC(sGL="PILSVG" ) mvc = EditorMVC(sGL="PILSVG" )
``` ```
%% Cell type:markdown id: tags: %% Cell type:markdown id: tags:
## Instructions ## Instructions
- Drag to draw (improved dead-ends) - Drag to draw (improved dead-ends)
- ctrl-click to add agent or select agent - ctrl-click to add agent or select agent
- if agent is selected: - if agent is selected:
- ctrl-click to move agent position - ctrl-click to move agent position
- use rotate agent to rotate 90° - use rotate agent to rotate 90°
- ctrl-shift-click to set target for selected agent - ctrl-shift-click to set target for selected agent
- target can be moved by repeating - target can be moved by repeating
- to Resize the env (cannot preserve work): - to Resize the env (cannot preserve work):
- select "Regen" tab, set regen size slider, click regenerate. - select "Regen" tab, set regen size slider, click regenerate.
- alt-click remove all rails from cell - alt-click remove all rails from cell
Demo Scene: complex_scene.pkl Demo Scene: complex_scene.pkl
%% Cell type:code id: tags: %% Cell type:code id: tags:
``` python ``` python
mvc.view.display() mvc.view.display()
``` ```
%% Output
......
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 23.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
id="Ebene_1"
x="0px"
y="0px"
viewBox="0 0 240 240"
style="enable-background:new 0 0 240 240;"
xml:space="preserve"
sodipodi:docname="Bahnhof_#d50000_target.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"><metadata
id="metadata165"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title></dc:title></cc:Work></rdf:RDF></metadata>
<defs
id="defs163"/>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1017"
id="namedview161"
showgrid="false"
inkscape:zoom="3.5"
inkscape:cx="120"
inkscape:cy="111.85562"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="Ebene_1"/>
<style
type="text/css"
id="style2">
.st0{fill:#D50000;}
.st1{fill:#E20613;}
.st2{fill:#FFFFFF;}
.st3{fill:#585858;}
.st4{fill:#1D1D1B;}
.st5{fill:#858B8A;}
.st6{fill:none;}
</style>
<g
id="g16">
<path
class="st0"
d="M146.27,104.75c1.07,0,1.94,0.87,1.94,1.94s-0.87,1.94-1.94,1.94c-0.42,0-0.8-0.13-1.12-0.36v7.88h25.42v-4.08 v-7.44H69.53v11.52h25.08v-7.88c-0.32,0.22-0.7,0.36-1.12,0.36c-1.07,0-1.94-0.87-1.94-1.94s0.87-1.94,1.94-1.94h1.12h2.33h0.7 h1.63h1.12c1.07,0,1.94,0.87,1.94,1.94s-0.87,1.94-1.94,1.94c-0.42,0-0.8-0.13-1.12-0.36v7.88h6.9v-0.64h16.75h10.9v0.64h6.68 v-7.88c-0.32,0.22-0.7,0.36-1.12,0.36c-1.07,0-1.94-0.87-1.94-1.94s0.87-1.94,1.94-1.94h1.12h2.33h0.7h1.63H146.27z"
id="path4"/>
<path
class="st0"
d="M89.76,124.67v12.52v1.38H76.18v-1.38v-12.52v-0.68h-6.66H20.73v65.53h48.79H92.1v-2.29h0.98v-1.05h1.52 v-33.72c-0.32,0.22-0.7,0.36-1.12,0.36c-1.07,0-1.94-0.87-1.94-1.94c0-1.07,0.87-1.94,1.94-1.94h-3.15v-2.71v-2.71h1.76v-0.47h0.98 v-1.05h1.52v-18h-4.85V124.67z M42.78,166.43v1.38v12.52v1.38H29.2v-1.38v-12.52v-1.38v-7.09h8.22h5.35V166.43z M42.78,135.58v1.38 v12.52v1.38H29.2v-1.38v-12.52v-1.38v-7.09h8.22h5.35V135.58z M62.28,166.43v1.38v12.52v1.38H48.71v-1.38v-12.52v-1.38v-7.09h8.22 h5.35V166.43z M62.28,135.58v1.38v12.52v1.38H48.71v-1.38v-12.52v-1.38v-7.09h8.22h5.35V135.58z M89.76,154.13v1.38v12.52v1.38 H76.18v-1.38v-12.52v-1.38v-7.09h8.22h5.35V154.13z"
id="path6"/>
<polygon
class="st0"
points="133.81,136.5 133.81,137.88 106.17,137.88 106.17,136.5 106.17,123.99 99.27,123.99 99.27,141.99 100.79,141.99 100.79,143.04 101.78,143.04 101.78,143.51 137.98,143.51 137.98,143.04 138.97,143.04 138.97,141.99 140.49,141.99 140.49,123.99 133.81,123.99 "
id="polygon8"/>
<path
class="st0"
d="M170.57,123.99h-6.66v0.68v12.52v1.38h-13.58v-1.38v-12.52v-0.68h-5.18v18h1.52v1.05h0.98v0.47h1.76v2.71v2.71 h-3.15c1.07,0,1.94,0.87,1.94,1.94c0,1.07-0.87,1.94-1.94,1.94c-0.42,0-0.8-0.13-1.12-0.36v33.72h1.52v1.05h0.98v2.29h22.91h48.79 v-65.53H170.57z M163.91,154.13v1.38v12.52v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V154.13z M191.58,166.43v1.38v12.52 v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V166.43z M191.58,135.58v1.38v12.52v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22 h5.35V135.58z M211.09,166.43v1.38v12.52v1.38h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V166.43z M211.09,135.58v1.38v12.52v1.38 h-13.58v-1.38v-12.52v-1.38v-7.09h8.22h5.35V135.58z"
id="path10"/>
<path
class="st0"
d="M137.43,150.87c0-1.07,0.87-1.94,1.94-1.94h-38.99c1.07,0,1.94,0.87,1.94,1.94c0,1.07-0.87,1.94-1.94,1.94 c-0.42,0-0.8-0.13-1.12-0.36v33.72h1.52v1.05h0.98v2.29h18.67h17.54v-2.29h0.98v-1.05h1.52v-33.72c-0.32,0.22-0.7,0.36-1.12,0.36 C138.3,152.82,137.43,151.95,137.43,150.87z M135.51,189.46h-0.59h-14.47h-0.59h-15.02h-0.04h-0.55v-32.71h0.55h0.04h15.02h0.59 h14.47h0.59V189.46z"
id="path12"/>
<path
class="st0"
d="M176.97,96.4L120.29,62L64.55,96.38v3.45h112.42V96.4z M120.76,93.18c-5.68,0-10.28-4.6-10.28-10.28 c0-5.68,4.6-10.28,10.28-10.28c5.68,0,10.28,4.6,10.28,10.28C131.04,88.58,126.44,93.18,120.76,93.18z"
id="path14"/>
</g>
<path
class="st1"
d="M135.6,34.49l-14.76,3.47v11.26l14.76-3.47V34.49z M132.01,42.11l-2.69,0.6v2.72l-2.19,0.63V43.2l-2.69,0.6 V41.6l2.69-0.6v-2.72l2.19-0.63v2.86l2.69-0.6V42.11z"
id="path18"/>
<g
id="g76">
<polygon
class="st2"
points="76.18,124.67 76.18,137.19 79.06,137.19 89.76,137.19 89.76,124.67 82.25,124.67 "
id="polygon20"/>
<polygon
class="st2"
points="76.18,116.2 76.18,123.29 82.6,123.29 89.76,123.29 89.76,116.2 84.41,116.2 "
id="polygon22"/>
<polygon
class="st2"
points="150.33,124.67 150.33,137.19 153.2,137.19 163.91,137.19 163.91,124.67 156.4,124.67 "
id="polygon24"/>
<polygon
class="st2"
points="150.33,116.2 150.33,123.29 156.75,123.29 163.91,123.29 163.91,116.2 158.56,116.2 "
id="polygon26"/>
<polygon
class="st2"
points="76.18,147.04 76.18,154.13 82.6,154.13 89.76,154.13 89.76,147.04 84.41,147.04 "
id="polygon28"/>
<polygon
class="st2"
points="76.18,155.51 76.18,168.04 79.06,168.04 89.76,168.04 89.76,155.51 82.25,155.51 "
id="polygon30"/>
<polygon
class="st2"
points="150.33,155.51 150.33,168.04 153.2,168.04 163.91,168.04 163.91,155.51 156.4,155.51 "
id="polygon32"/>
<polygon
class="st2"
points="150.33,147.04 150.33,154.13 156.75,154.13 163.91,154.13 163.91,147.04 158.56,147.04 "
id="polygon34"/>
<path
class="st2"
d="M120.45,158.37v6.38v22.81h14.47v-29.18h-11.87H120.45z M123.78,173.75v1.09h-1.86v-1.09H123.78z"
id="path36"/>
<path
class="st2"
d="M104.84,187.55h6.33h8.69V166.2v-7.83h-15.02V187.55z M116.53,173.75h0.26h1.6v1.09h-1.87v-0.44V173.75z"
id="path38"/>
<polygon
class="st2"
points="48.71,128.5 48.71,135.58 55.12,135.58 62.28,135.58 62.28,128.5 56.93,128.5 "
id="polygon40"/>
<polygon
class="st2"
points="48.71,136.97 48.71,149.49 51.58,149.49 62.28,149.49 62.28,136.97 54.77,136.97 "
id="polygon42"/>
<polygon
class="st2"
points="48.71,167.81 48.71,180.33 51.58,180.33 62.28,180.33 62.28,167.81 54.77,167.81 "
id="polygon44"/>
<polygon
class="st2"
points="48.71,159.34 48.71,166.43 55.12,166.43 62.28,166.43 62.28,159.34 56.93,159.34 "
id="polygon46"/>
<polygon
class="st2"
points="29.2,136.97 29.2,149.49 32.07,149.49 42.78,149.49 42.78,136.97 35.26,136.97 "
id="polygon48"/>
<polygon
class="st2"
points="29.2,128.5 29.2,135.58 35.62,135.58 42.78,135.58 42.78,128.5 37.42,128.5 "
id="polygon50"/>
<polygon
class="st2"
points="29.2,159.34 29.2,166.43 35.62,166.43 42.78,166.43 42.78,159.34 37.42,159.34 "
id="polygon52"/>
<polygon
class="st2"
points="29.2,167.81 29.2,180.33 32.07,180.33 42.78,180.33 42.78,167.81 35.26,167.81 "
id="polygon54"/>
<polygon
class="st2"
points="197.51,136.97 197.51,149.49 200.38,149.49 211.09,149.49 211.09,136.97 203.58,136.97 "
id="polygon56"/>
<polygon
class="st2"
points="197.51,159.34 197.51,166.43 203.93,166.43 211.09,166.43 211.09,159.34 205.74,159.34 "
id="polygon58"/>
<polygon
class="st2"
points="197.51,167.81 197.51,180.33 200.38,180.33 211.09,180.33 211.09,167.81 203.58,167.81 "
id="polygon60"/>
<polygon
class="st2"
points="178.01,136.97 178.01,149.49 180.88,149.49 191.58,149.49 191.58,136.97 184.07,136.97 "
id="polygon62"/>
<polygon
class="st2"
points="178.01,128.5 178.01,135.58 184.42,135.58 191.58,135.58 191.58,128.5 186.23,128.5 "
id="polygon64"/>
<polygon
class="st2"
points="178.01,159.34 178.01,166.43 184.42,166.43 191.58,166.43 191.58,159.34 186.23,159.34 "
id="polygon66"/>
<polygon
class="st2"
points="178.01,167.81 178.01,180.33 180.88,180.33 191.58,180.33 191.58,167.81 184.07,167.81 "
id="polygon68"/>
<polygon
class="st2"
points="133.81,122.59 133.81,116.15 133.81,115.51 122.91,115.51 106.17,115.51 106.17,116.15 106.17,122.59 119.23,122.59 "
id="polygon70"/>
<polygon
class="st2"
points="133.81,136.5 133.81,123.99 133.81,123.98 118.52,123.98 106.17,123.98 106.17,123.99 106.17,136.5 112.02,136.5 "
id="polygon72"/>
<polygon
class="st2"
points="205.74,128.5 197.51,128.5 197.51,135.58 203.93,135.58 211.09,135.58 211.09,128.5 "
id="polygon74"/>
</g>
<g
id="g136">
<polygon
class="st3"
points="133.81,136.5 112.02,136.5 106.17,136.5 106.17,137.88 133.81,137.88 "
id="polygon78"/>
<polygon
class="st3"
points="76.18,137.19 76.18,138.58 89.76,138.58 89.76,137.19 79.06,137.19 "
id="polygon80"/>
<polygon
class="st3"
points="150.33,137.19 150.33,138.58 163.91,138.58 163.91,137.19 153.2,137.19 "
id="polygon82"/>
<polygon
class="st3"
points="76.18,168.04 76.18,169.42 89.76,169.42 89.76,168.04 79.06,168.04 "
id="polygon84"/>
<polygon
class="st3"
points="150.33,168.04 150.33,169.42 163.91,169.42 163.91,168.04 153.2,168.04 "
id="polygon86"/>
<path
class="st3"
d="M120.45,156.75h-0.59h-15.02h-0.04h-0.55v32.71h0.55h0.04h15.02h0.59h14.47h0.59v-32.71h-0.59H120.45z M119.86,166.2v21.35h-8.69h-6.33v-29.18h15.02V166.2z M134.92,187.55h-14.47v-22.81v-6.38h2.6h11.87V187.55z"
id="path88"/>
<polygon
class="st3"
points="118.39,173.75 116.79,173.75 116.53,173.75 116.53,174.39 116.53,174.84 118.39,174.84 "
id="polygon90"/>
<rect
x="121.92"
y="173.75"
class="st3"
width="1.86"
height="1.09"
id="rect92"/>
<polygon
class="st3"
points="178.01,180.33 178.01,181.72 191.58,181.72 191.58,180.33 180.88,180.33 "
id="polygon94"/>
<polygon
class="st3"
points="48.71,149.49 48.71,150.87 62.28,150.87 62.28,149.49 51.58,149.49 "
id="polygon96"/>
<polygon
class="st3"
points="48.71,180.33 48.71,181.72 62.28,181.72 62.28,180.33 51.58,180.33 "
id="polygon98"/>
<polygon
class="st3"
points="29.2,149.49 29.2,150.87 42.78,150.87 42.78,149.49 32.07,149.49 "
id="polygon100"/>
<polygon
class="st3"
points="29.2,180.33 29.2,181.72 42.78,181.72 42.78,180.33 32.07,180.33 "
id="polygon102"/>
<polygon
class="st3"
points="197.51,149.49 197.51,150.87 211.09,150.87 211.09,149.49 200.38,149.49 "
id="polygon104"/>
<polygon
class="st3"
points="197.51,180.33 197.51,181.72 211.09,181.72 211.09,180.33 200.38,180.33 "
id="polygon106"/>
<polygon
class="st3"
points="178.01,149.49 178.01,150.87 191.58,150.87 191.58,149.49 180.88,149.49 "
id="polygon108"/>
<polygon
class="st3"
points="133.81,123.98 133.81,122.59 119.23,122.59 106.17,122.59 106.17,123.98 118.52,123.98 "
id="polygon110"/>
<polygon
class="st3"
points="76.18,123.29 76.18,123.99 76.18,124.67 82.25,124.67 89.76,124.67 89.76,123.99 89.76,123.29 82.6,123.29 "
id="polygon112"/>
<polygon
class="st3"
points="150.33,123.29 150.33,123.99 150.33,124.67 156.4,124.67 163.91,124.67 163.91,123.99 163.91,123.29 156.75,123.29 "
id="polygon114"/>
<polygon
class="st3"
points="76.18,154.13 76.18,155.51 82.25,155.51 89.76,155.51 89.76,154.13 82.6,154.13 "
id="polygon116"/>
<polygon
class="st3"
points="150.33,154.13 150.33,155.51 156.4,155.51 163.91,155.51 163.91,154.13 156.75,154.13 "
id="polygon118"/>
<polygon
class="st3"
points="178.01,166.43 178.01,167.81 184.07,167.81 191.58,167.81 191.58,166.43 184.42,166.43 "
id="polygon120"/>
<polygon
class="st3"
points="48.71,135.58 48.71,136.97 54.77,136.97 62.28,136.97 62.28,135.58 55.12,135.58 "
id="polygon122"/>
<polygon
class="st3"
points="48.71,166.43 48.71,167.81 54.77,167.81 62.28,167.81 62.28,166.43 55.12,166.43 "
id="polygon124"/>
<polygon
class="st3"
points="29.2,135.58 29.2,136.97 35.26,136.97 42.78,136.97 42.78,135.58 35.62,135.58 "
id="polygon126"/>
<polygon
class="st3"
points="29.2,166.43 29.2,167.81 35.26,167.81 42.78,167.81 42.78,166.43 35.62,166.43 "
id="polygon128"/>
<polygon
class="st3"
points="203.93,135.58 197.51,135.58 197.51,136.97 203.58,136.97 211.09,136.97 211.09,135.58 "
id="polygon130"/>
<polygon
class="st3"
points="197.51,166.43 197.51,167.81 203.58,167.81 211.09,167.81 211.09,166.43 203.93,166.43 "
id="polygon132"/>
<polygon
class="st3"
points="178.01,135.58 178.01,136.97 184.07,136.97 191.58,136.97 191.58,135.58 184.42,135.58 "
id="polygon134"/>
</g>
<path
class="st2"
d="M120.76,72.62c-5.68,0-10.28,4.6-10.28,10.28c0,5.68,4.6,10.28,10.28,10.28c5.68,0,10.28-4.6,10.28-10.28 C131.04,77.22,126.44,72.62,120.76,72.62z M120.76,92.04c-5.04,0-9.13-4.1-9.13-9.13c0-5.04,4.1-9.13,9.13-9.13 c5.04,0,9.13,4.1,9.13,9.13C129.89,87.94,125.8,92.04,120.76,92.04z"
id="path138"/>
<path
class="st2"
d="M120.76,74.82c-4.46,0-8.09,3.63-8.09,8.09c0,4.46,3.63,8.09,8.09,8.09c4.46,0,8.09-3.63,8.09-8.09 C128.85,78.44,125.22,74.82,120.76,74.82z M126.97,82.9c0,0.29-0.23,0.52-0.52,0.52h-5.69c-0.29,0-0.52-0.23-0.52-0.52v-6.2 c0-0.29,0.23-0.52,0.52-0.52c0.29,0,0.52,0.23,0.52,0.52v5.67h5.17C126.74,82.38,126.97,82.61,126.97,82.9z"
id="path140"/>
<g
id="g146">
<path
class="st4"
d="M120.76,73.77c-5.04,0-9.13,4.1-9.13,9.13c0,5.04,4.1,9.13,9.13,9.13c5.04,0,9.13-4.1,9.13-9.13 C129.89,77.87,125.8,73.77,120.76,73.77z M120.76,90.99c-4.46,0-8.09-3.63-8.09-8.09c0-4.46,3.63-8.09,8.09-8.09 c4.46,0,8.09,3.63,8.09,8.09C128.85,87.36,125.22,90.99,120.76,90.99z"
id="path142"/>
<path
class="st4"
d="M126.45,82.38h-5.17V76.7c0-0.29-0.23-0.52-0.52-0.52c-0.29,0-0.52,0.23-0.52,0.52v6.2 c0,0.29,0.23,0.52,0.52,0.52h5.69c0.29,0,0.52-0.23,0.52-0.52C126.97,82.61,126.74,82.38,126.45,82.38z"
id="path144"/>
</g>
<g
id="g152">
<path
class="st5"
d="M170.57,104.96h9.66V93.08l-59.4-36.22v-18.9h-1.51v19.17L61.3,93.08v11.87h8.23H170.57z M64.55,96.38 L120.29,62l56.68,34.39v3.44H64.55V96.38z"
id="path148"/>
<path
class="st5"
d="M163.91,123.99h6.66h48.79h2.54v-7.84h-51.33h-25.42v-7.88c0.32,0.22,0.7,0.36,1.12,0.36 c1.07,0,1.94-0.87,1.94-1.94s-0.87-1.94-1.94-1.94h-1.12h-1.63h-0.7h-2.33h-1.12c-1.07,0-1.94,0.87-1.94,1.94s0.87,1.94,1.94,1.94 c0.42,0,0.8-0.13,1.12-0.36v7.88h-6.68v6.45v1.38v0.01h6.68v18h-1.52v1.05h-0.98v0.47h-36.21v-0.47h-0.98v-1.05h-1.52v-18h6.9 v-0.01v-1.38v-6.45h-6.9v-7.88c0.32,0.22,0.7,0.36,1.12,0.36c1.07,0,1.94-0.87,1.94-1.94s-0.87-1.94-1.94-1.94h-1.12h-1.63h-0.7 h-2.33h-1.12c-1.07,0-1.94,0.87-1.94,1.94s0.87,1.94,1.94,1.94c0.42,0,0.8-0.13,1.12-0.36v7.88H69.53H18.19v7.84h2.54h48.79h6.66 v-0.7v-7.09h8.22h5.35v7.09v0.7h4.85v18h-1.52v1.05H92.1v0.47h-1.76v2.71v2.71h3.15c-1.07,0-1.94,0.87-1.94,1.94 c0,1.07,0.87,1.94,1.94,1.94c0.42,0,0.8-0.13,1.12-0.36v33.72h-1.52v1.05H92.1v2.29H69.53H20.73h-2.54v3.99H221.9v-3.99h-2.54 h-48.79h-22.91v-2.29h-0.98v-1.05h-1.52v-33.72c0.32,0.22,0.7,0.36,1.12,0.36c1.07,0,1.94-0.87,1.94-1.94 c0-1.07-0.87-1.94-1.94-1.94h3.15v-2.71v-2.71h-1.76v-0.47h-0.98v-1.05h-1.52v-18h5.18v-0.7v-7.09h8.22h5.35v7.09V123.99z M101.78,189.52v-2.29h-0.98v-1.05h-1.52v-33.72c0.32,0.22,0.7,0.36,1.12,0.36c1.07,0,1.94-0.87,1.94-1.94 c0-1.07-0.87-1.94-1.94-1.94h38.99c-1.07,0-1.94,0.87-1.94,1.94c0,1.07,0.87,1.94,1.94,1.94c0.42,0,0.8-0.13,1.12-0.36v33.72h-1.52 v1.05h-0.98v2.29h-17.54H101.78z"
id="path150"/>
</g>
<polygon
class="st2"
points="129.32,37.65 127.12,38.28 127.12,41 124.43,41.6 124.43,43.8 127.12,43.2 127.12,46.06 129.32,45.43 129.32,42.71 132.01,42.11 132.01,39.92 129.32,40.52 "
id="polygon154"/>
<g
id="g158">
<rect
class="st6"
width="240"
height="240"
id="rect156"/>
</g>
<rect
style="fill:#000000;fill-opacity:1"
id="rect972"
width="197.95059"
height="37.642857"
x="21.047144"
y="197.5"
ry="18.535713"/></svg>
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment