@golemio/pid 6.0.1-dev.2896931404 → 6.0.1-dev.2912471131

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/output-gateway/vehicle-positions/data-access/helpers/PositionOutputMapper.d.ts +2 -1
  2. package/dist/output-gateway/vehicle-positions/data-access/helpers/PositionOutputMapper.js +99 -96
  3. package/dist/output-gateway/vehicle-positions/data-access/helpers/PositionOutputMapper.js.map +1 -1
  4. package/docs/architecture/diagrams/context.mmd +114 -0
  5. package/docs/architecture/diagrams/context.svg +1 -0
  6. package/docs/architecture/diagrams/platform-ingestion.mmd +94 -0
  7. package/docs/architecture/diagrams/platform-ingestion.svg +1 -0
  8. package/docs/architecture/diagrams/platform-serving.mmd +81 -0
  9. package/docs/architecture/diagrams/platform-serving.svg +1 -0
  10. package/docs/architecture/index.md +105 -0
  11. package/docs/assets/logos/README.md +38 -0
  12. package/docs/assets/logos/arriva.svg +9 -0
  13. package/docs/assets/logos/azure-blob-storage.svg +1 -0
  14. package/docs/assets/logos/azure-kubernetes-service.svg +1 -0
  15. package/docs/assets/logos/azure-table-storage.svg +1 -0
  16. package/docs/assets/logos/catch.png +0 -0
  17. package/docs/assets/logos/cd-telematika.png +0 -0
  18. package/docs/assets/logos/ceske-drahy.svg +15 -0
  19. package/docs/assets/logos/chaps.png +0 -0
  20. package/docs/assets/logos/citymove.png +0 -0
  21. package/docs/assets/logos/cloudflare.png +0 -0
  22. package/docs/assets/logos/dpp.svg +119 -0
  23. package/docs/assets/logos/envoy.svg +1 -0
  24. package/docs/assets/logos/golemio.svg +1 -0
  25. package/docs/assets/logos/google-maps.svg +78 -0
  26. package/docs/assets/logos/grafana-loki.png +0 -0
  27. package/docs/assets/logos/grafana.svg +57 -0
  28. package/docs/assets/logos/mikroelektronika.png +0 -0
  29. package/docs/assets/logos/nodejs.svg +39 -0
  30. package/docs/assets/logos/pid-litacka.svg +17 -0
  31. package/docs/assets/logos/pid.svg +1 -0
  32. package/docs/assets/logos/postgresql.svg +22 -0
  33. package/docs/assets/logos/rabbitmq.svg +54 -0
  34. package/docs/assets/logos/ropid.svg +1 -0
  35. package/docs/assets/logos/seznam.svg +115 -0
  36. package/docs/assets/logos/telmax.png +0 -0
  37. package/docs/assets/logos/typescript.svg +1 -0
  38. package/docs/assets/logos/valkey.svg +58 -0
  39. package/docs/assets/logos/varnish.svg +21 -0
  40. package/docs/asyncapi.yaml +5 -3
  41. package/docs/cache/types/redis.md +1 -1
  42. package/docs/implementation_documentation.md +40 -42
  43. package/docs/index.md +382 -0
  44. package/docs/jis/index.md +84 -94
  45. package/docs/openapi-input.yaml +3 -2
  46. package/docs/openapi-output.yaml +3 -1
  47. package/package.json +2 -2
  48. package/docs/architecture/pid_architecture_overview.drawio +0 -177
@@ -0,0 +1 @@
1
+ <svg id="my-svg" width="100%" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" class="flowchart" style="max-width: 1640.91px; background-color: white;" viewBox="0 -50 1640.9140625 1136.7352294921875" role="graphics-document document" aria-roledescription="flowchart-v2"><style>#my-svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#my-svg .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#my-svg .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#my-svg .error-icon{fill:#552222;}#my-svg .error-text{fill:#552222;stroke:#552222;}#my-svg .edge-thickness-normal{stroke-width:1px;}#my-svg .edge-thickness-thick{stroke-width:3.5px;}#my-svg .edge-pattern-solid{stroke-dasharray:0;}#my-svg .edge-thickness-invisible{stroke-width:0;fill:none;}#my-svg .edge-pattern-dashed{stroke-dasharray:3;}#my-svg .edge-pattern-dotted{stroke-dasharray:2;}#my-svg .marker{fill:#333333;stroke:#333333;}#my-svg .marker.cross{stroke:#333333;}#my-svg svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#my-svg p{margin:0;}#my-svg .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#my-svg .cluster-label text{fill:#333;}#my-svg .cluster-label span{color:#333;}#my-svg .cluster-label span p{background-color:transparent;}#my-svg .label text,#my-svg span{fill:#333;color:#333;}#my-svg .node rect,#my-svg .node circle,#my-svg .node ellipse,#my-svg .node polygon,#my-svg .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#my-svg .rough-node .label text,#my-svg .node .label text,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-anchor:middle;}#my-svg .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#my-svg .rough-node .label,#my-svg .node .label,#my-svg .image-shape .label,#my-svg .icon-shape .label{text-align:center;}#my-svg .node.clickable{cursor:pointer;}#my-svg .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#my-svg .arrowheadPath{fill:#333333;}#my-svg .edgePaths .path{stroke:#333333;stroke-width:1px;}#my-svg .flowchart-link{stroke:#333333;fill:none;}#my-svg .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#my-svg .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#my-svg .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#my-svg .cluster text{fill:#333;}#my-svg .cluster span{color:#333;}#my-svg .node .collapsed-indicator{fill:#aaaa33;stroke:none;opacity:0.6;}#my-svg .node .collapsed-separator{stroke:#aaaa33;stroke-width:0.75px;}#my-svg div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#my-svg .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#my-svg rect.text{fill:none;stroke-width:0;}#my-svg .icon-shape,#my-svg .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#my-svg .icon-shape p,#my-svg .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#my-svg .icon-shape .label rect,#my-svg .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#my-svg .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#my-svg .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#my-svg .node .neo-node{stroke:#9370DB;}#my-svg [data-look="neo"].node rect,#my-svg [data-look="neo"].cluster rect,#my-svg [data-look="neo"].node polygon{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].swimlane.cluster rect{filter:none;}#my-svg [data-look="neo"].node path{stroke:#9370DB;stroke-width:1px;}#my-svg [data-look="neo"].node .outer-path{filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node .neo-line path{stroke:#9370DB;filter:none;}#my-svg [data-look="neo"].node circle{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].node circle .state-start{fill:#000000;}#my-svg [data-look="neo"].icon-shape .icon{fill:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg [data-look="neo"].icon-shape .icon-neo path{stroke:#9370DB;filter:drop-shadow(1px 2px 2px rgba(185, 185, 185, 1));}#my-svg :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;}#my-svg .external rect{fill:rgb(253, 236, 234)!important;stroke:rgb(192, 57, 43)!important;color:rgb(31, 35, 40)!important;}#my-svg .external polygon{fill:rgb(253, 236, 234)!important;stroke:rgb(192, 57, 43)!important;color:rgb(31, 35, 40)!important;}#my-svg .external ellipse{fill:rgb(253, 236, 234)!important;stroke:rgb(192, 57, 43)!important;color:rgb(31, 35, 40)!important;}#my-svg .external circle{fill:rgb(253, 236, 234)!important;stroke:rgb(192, 57, 43)!important;color:rgb(31, 35, 40)!important;}#my-svg .external path{fill:rgb(253, 236, 234)!important;stroke:rgb(192, 57, 43)!important;color:rgb(31, 35, 40)!important;}#my-svg .external tspan{fill:rgb(31, 35, 40)!important;}#my-svg .golemio rect{fill:rgb(227, 238, 252)!important;stroke:rgb(29, 78, 216)!important;color:rgb(31, 35, 40)!important;}#my-svg .golemio polygon{fill:rgb(227, 238, 252)!important;stroke:rgb(29, 78, 216)!important;color:rgb(31, 35, 40)!important;}#my-svg .golemio ellipse{fill:rgb(227, 238, 252)!important;stroke:rgb(29, 78, 216)!important;color:rgb(31, 35, 40)!important;}#my-svg .golemio circle{fill:rgb(227, 238, 252)!important;stroke:rgb(29, 78, 216)!important;color:rgb(31, 35, 40)!important;}#my-svg .golemio path{fill:rgb(227, 238, 252)!important;stroke:rgb(29, 78, 216)!important;color:rgb(31, 35, 40)!important;}#my-svg .golemio tspan{fill:rgb(31, 35, 40)!important;}#my-svg .store rect{fill:rgb(238, 240, 243)!important;stroke:rgb(75, 85, 99)!important;color:rgb(31, 35, 40)!important;}#my-svg .store polygon{fill:rgb(238, 240, 243)!important;stroke:rgb(75, 85, 99)!important;color:rgb(31, 35, 40)!important;}#my-svg .store ellipse{fill:rgb(238, 240, 243)!important;stroke:rgb(75, 85, 99)!important;color:rgb(31, 35, 40)!important;}#my-svg .store circle{fill:rgb(238, 240, 243)!important;stroke:rgb(75, 85, 99)!important;color:rgb(31, 35, 40)!important;}#my-svg .store path{fill:rgb(238, 240, 243)!important;stroke:rgb(75, 85, 99)!important;color:rgb(31, 35, 40)!important;}#my-svg .store tspan{fill:rgb(31, 35, 40)!important;}#my-svg .consumer rect{fill:rgb(230, 246, 234)!important;stroke:rgb(21, 128, 61)!important;color:rgb(31, 35, 40)!important;}#my-svg .consumer polygon{fill:rgb(230, 246, 234)!important;stroke:rgb(21, 128, 61)!important;color:rgb(31, 35, 40)!important;}#my-svg .consumer ellipse{fill:rgb(230, 246, 234)!important;stroke:rgb(21, 128, 61)!important;color:rgb(31, 35, 40)!important;}#my-svg .consumer circle{fill:rgb(230, 246, 234)!important;stroke:rgb(21, 128, 61)!important;color:rgb(31, 35, 40)!important;}#my-svg .consumer path{fill:rgb(230, 246, 234)!important;stroke:rgb(21, 128, 61)!important;color:rgb(31, 35, 40)!important;}#my-svg .consumer tspan{fill:rgb(31, 35, 40)!important;}</style><g><marker id="my-svg_flowchart-v2-pointEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 0 L 10 5 L 0 10 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="4.5" refY="5" markerUnits="userSpaceOnUse" markerWidth="8" markerHeight="8" orient="auto"><path d="M 0 5 L 10 10 L 10 0 z" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointEnd-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="11.5" refY="7" markerUnits="userSpaceOnUse" markerWidth="10.5" markerHeight="14" orient="auto"><path d="M 0 0 L 11.5 7 L 0 14 z" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-pointStart-margin" class="marker flowchart-v2" viewBox="0 0 11.5 14" refX="1" refY="7" markerUnits="userSpaceOnUse" markerWidth="11.5" markerHeight="14" orient="auto"><polygon points="0,7 11.5,14 11.5,0" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd" class="marker flowchart-v2" viewBox="0 0 10 10" refX="11" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-1" refY="5" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 1; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleEnd-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refY="5" refX="12.25" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-circleStart-margin" class="marker flowchart-v2" viewBox="0 0 10 10" refX="-2" refY="5" markerUnits="userSpaceOnUse" markerWidth="14" markerHeight="14" orient="auto"><circle cx="5" cy="5" r="5" class="arrowMarkerPath" style="stroke-width: 0; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="12" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossStart" class="marker cross flowchart-v2" viewBox="0 0 11 11" refX="-1" refY="5.2" markerUnits="userSpaceOnUse" markerWidth="11" markerHeight="11" orient="auto"><path d="M 1,1 l 9,9 M 10,1 l -9,9" class="arrowMarkerPath" style="stroke-width: 2; stroke-dasharray: 1, 0;"/></marker><marker id="my-svg_flowchart-v2-crossEnd-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="17.7" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5;"/></marker><marker id="my-svg_flowchart-v2-crossStart-margin" class="marker cross flowchart-v2" viewBox="0 0 15 15" refX="-3.5" refY="7.5" markerUnits="userSpaceOnUse" markerWidth="12" markerHeight="12" orient="auto"><path d="M 1,1 L 14,14 M 1,14 L 14,1" class="arrowMarkerPath" style="stroke-width: 2.5; stroke-dasharray: 1, 0;"/></marker><g class="root"><g class="clusters"><g class="cluster" id="my-svg-clients" data-look="classic"><rect style="fill:#fafafa !important;stroke:#9ca3af !important" x="115.50390625" y="967.1352005004883" width="1383.765625" height="111.5999984741211"/><g class="cluster-label" transform="translate(762.61328125, 967.1352005004883)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Odběratelé</tspan></tspan></text></g></g></g><g class="cluster" id="my-svg-apiEdge" data-look="classic"><rect style="fill:#fafafa !important;stroke:#9ca3af !important" x="167.08984375" y="651.9352035522461" width="1283.17578125" height="212"/><g class="cluster-label" transform="translate(725.873046875, 651.9352035522461)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Veřejný</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> přístup</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> k</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> API</tspan></tspan></text></g></g></g><g class="cluster" id="my-svg-permissions" data-look="classic"><rect style="fill:#fafafa !important;stroke:#9ca3af !important" x="8" y="192" width="444.3671875" height="414.9352035522461"/><g class="cluster-label" transform="translate(160.49609375, 192)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Přístupová</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> vrstva</tspan></tspan></text></g></g></g><g class="cluster" id="my-svg-vp" data-look="classic"><rect style="fill:#f5f9ff !important;stroke:#1d4ed8 !important" x="820.7265625" y="192" width="761.83203125" height="257.835205078125"/><g class="cluster-label" transform="translate(1047.564453125, 192)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Dedikované</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> služby</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Polohy</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> vozidel</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (VP)</tspan></tspan></text></g></g></g><g class="cluster" id="my-svg-storage" data-look="classic"><rect style="fill:#fafafa !important;stroke:#9ca3af !important" x="966.796875" y="8" width="660.984375" height="116"/><g class="cluster-label" transform="translate(1221.96875, 8)"><g><rect class="background" style="stroke: none"/><text y="-10.1" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Databázová</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> vrstva</tspan></tspan></text></g></g></g></g><g class="edgePaths"><path d="M1117.365,102L1109.036,105.667C1100.708,109.333,1084.051,116.667,1075.723,126C1067.395,135.333,1067.395,146.667,1067.395,158C1067.395,169.333,1067.395,180.667,1067.395,190.883C1067.395,201.1,1067.395,210.2,1067.395,214.75L1067.395,219.3" id="my-svg-L_postgres_vpOg_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_postgres_vpOg_0" data-points="W3sieCI6MTExNy4zNjQ4MzAyODAxNzIzLCJ5IjoxMDJ9LHsieCI6MTA2Ny4zOTQ1MzEyNSwieSI6MTI0fSx7IngiOjEwNjcuMzk0NTMxMjUsInkiOjE1OH0seyJ4IjoxMDY3LjM5NDUzMTI1LCJ5IjoxOTJ9LHsieCI6MTA2Ny4zOTQ1MzEyNSwieSI6MjIzLjI5OTk5OTIzNzA2MDU1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1532.219,98L1532.135,102.333C1532.052,106.667,1531.885,115.333,1531.802,125.333C1531.719,135.333,1531.719,146.667,1531.719,158C1531.719,169.333,1531.719,180.667,1473.078,194.492C1414.436,208.317,1297.154,224.634,1238.513,232.793L1179.872,240.951" id="my-svg-L_valkey_vpOg_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_valkey_vpOg_0" data-points="W3sieCI6MTUzMi4yMTg3NSwieSI6OTh9LHsieCI6MTUzMS43MTg3NSwieSI6MTI0fSx7IngiOjE1MzEuNzE4NzUsInkiOjE1OH0seyJ4IjoxNTMxLjcxODc1LCJ5IjoxOTJ9LHsieCI6MTE3NS45MTAxNTYyNSwieSI6MjQxLjUwMjU1Mzc4NzEwODg3fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1277.003,96.53L1289.584,101.108C1302.166,105.686,1327.329,114.843,1339.911,125.088C1352.492,135.333,1352.492,146.667,1352.492,158C1352.492,169.333,1352.492,180.667,1352.492,197.1C1352.492,213.533,1352.492,235.067,1352.492,256.6C1352.492,278.133,1352.492,299.667,1352.492,314.936C1352.492,330.206,1352.492,339.212,1352.492,343.715L1352.492,348.218" id="my-svg-L_postgres_urlProxy_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_postgres_urlProxy_0" data-points="W3sieCI6MTI3Ny4wMDI2OTQ0MTE3ODc2LCJ5Ijo5Ni41Mjk3NDgwNTA5MjM5OH0seyJ4IjoxMzUyLjQ5MjE4NzUsInkiOjEyNH0seyJ4IjoxMzUyLjQ5MjE4NzUsInkiOjE1OH0seyJ4IjoxMzUyLjQ5MjE4NzUsInkiOjE5Mn0seyJ4IjoxMzUyLjQ5MjE4NzUsInkiOjI1Ni41OTk5OTg0NzQxMjExfSx7IngiOjEzNTIuNDkyMTg3NSwieSI6MzIxLjE5OTk5Njk0ODI0MjJ9LHsieCI6MTM1Mi40OTIxODc1LCJ5IjozNTIuMjE3NjAxNzc2MTIzMDV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1025.01,289.9L1018.371,295.117C1011.731,300.333,998.451,310.767,991.885,321.036C985.319,331.306,985.466,341.412,985.54,346.465L985.614,351.518" id="my-svg-L_vpOg_varnish_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_vpOg_varnish_0" data-points="W3sieCI6MTAyNS4wMTA0MDY1NTg1NTgzLCJ5IjoyODkuODk5OTk3NzExMTgxNjR9LHsieCI6OTg1LjE3MTg3NSwieSI6MzIxLjE5OTk5Njk0ODI0MjJ9LHsieCI6OTg1LjY3MTg3NDk5OTk5OTksInkiOjM1NS41MTc2MDEwMTMxODM3fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M985.672,416.518L985.589,422.071C985.505,427.623,985.339,438.729,863.826,449.949C742.313,461.169,499.453,472.502,378.023,483.169C256.594,493.835,256.594,503.835,256.594,508.835L256.594,513.835" id="my-svg-L_varnish_accessProxy_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_varnish_accessProxy_0" data-points="W3sieCI6OTg1LjY3MTg3NSwieSI6NDE2LjUxNzYwMTAxMzE4MzZ9LHsieCI6OTg1LjE3MTg3NSwieSI6NDQ5LjgzNTIwNTA3ODEyNX0seyJ4IjoyNTYuNTkzNzUsInkiOjQ4My44MzUyMDUwNzgxMjV9LHsieCI6MjU2LjU5Mzc1LCJ5Ijo1MTcuODM1MjA1MDc4MTI1fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1109.779,289.9L1116.418,295.117C1123.058,300.333,1136.338,310.767,1142.977,326.703C1149.617,342.639,1149.617,364.078,1149.617,385.518C1149.617,406.957,1149.617,428.396,1005.893,444.782C862.168,461.169,574.719,472.502,428.688,483.229C282.657,493.955,278.044,504.075,275.738,509.135L273.431,514.195" id="my-svg-L_vpOg_accessProxy_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_vpOg_accessProxy_0" data-points="W3sieCI6MTEwOS43Nzg2NTU5NDE0NDE3LCJ5IjoyODkuODk5OTk3NzExMTgxNjR9LHsieCI6MTE0OS42MTcxODc1LCJ5IjozMjEuMTk5OTk2OTQ4MjQyMn0seyJ4IjoxMTQ5LjYxNzE4NzUsInkiOjM4NS41MTc2MDEwMTMxODM2fSx7IngiOjExNDkuNjE3MTg3NSwieSI6NDQ5LjgzNTIwNTA3ODEyNX0seyJ4IjoyODcuMjY5NTMxMjUsInkiOjQ4My44MzUyMDUwNzgxMjV9LHsieCI6MjcxLjc3MjEwODE1NDU1MjgsInkiOjUxNy44MzUyMDUwNzgxMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1305.151,418.818L1297.802,423.987C1290.452,429.157,1275.753,439.496,1118.975,450.332C962.197,461.169,663.339,472.502,505.391,483.482C347.444,494.463,330.407,505.09,321.888,510.404L313.37,515.718" id="my-svg-L_urlProxy_accessProxy_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_urlProxy_accessProxy_0" data-points="W3sieCI6MTMwNS4xNTEwNDc3ODM5Njk1LCJ5Ijo0MTguODE3NjAwMjUwMjQ0MTR9LHsieCI6MTI2MS4wNTQ2ODc1LCJ5Ijo0NDkuODM1MjA1MDc4MTI1fSx7IngiOjM2NC40ODA0Njg3NSwieSI6NDgzLjgzNTIwNTA3ODEyNX0seyJ4IjozMDkuOTc2MDMzNjk2NzUyMSwieSI6NTE3LjgzNTIwNTA3ODEyNX1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M474.867,411.518L435.155,417.904C395.443,424.29,316.018,437.063,276.306,449.116C236.594,461.169,236.594,472.502,238.088,483.196C239.582,493.89,242.57,503.946,244.064,508.973L245.558,514.001" id="my-svg-L_otherGolemio_accessProxy_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_otherGolemio_accessProxy_0" data-points="W3sieCI6NDc0Ljg2NzE4NzUsInkiOjQxMS41MTc3NzMyMjMyODU2fSx7IngiOjIzNi41OTM3NSwieSI6NDQ5LjgzNTIwNTA3ODEyNX0seyJ4IjoyMzYuNTkzNzUsInkiOjQ4My44MzUyMDUwNzgxMjV9LHsieCI6MjQ2LjY5Nzc2MjAwMTYxNTksInkiOjUxNy44MzUyMDUwNzgxMjV9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M216.594,431.335L216.594,434.419C216.594,437.502,216.594,443.669,216.594,452.419C216.594,461.169,216.594,472.502,219.621,483.262C222.649,494.022,228.703,504.21,231.731,509.303L234.758,514.397" id="my-svg-L_permissionDb_accessProxy_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_permissionDb_accessProxy_0" data-points="W3sieCI6MjE2LjU5Mzc1LCJ5Ijo0MjcuMzM1MjA1MDc4MTI1fSx7IngiOjIxNi41OTM3NSwieSI6NDQ5LjgzNTIwNTA3ODEyNX0seyJ4IjoyMTYuNTkzNzUsInkiOjQ4My44MzUyMDUwNzgxMjV9LHsieCI6MjM2LjgwMTc3NDAwMzIzMTc3LCJ5Ijo1MTcuODM1MjA1MDc4MTI1fV0=" data-look="classic" marker-start="url(#my-svg_flowchart-v2-pointStart)" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M216.594,302.7L216.594,305.783C216.594,308.867,216.594,315.033,216.594,321.2C216.594,327.367,216.594,333.533,216.594,336.617L216.594,339.7" id="my-svg-L_permissionManagement_permissionDb_0" class="edge-thickness-normal edge-pattern-solid edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_permissionManagement_permissionDb_0" data-points="W3sieCI6MjE2LjU5Mzc1LCJ5IjoyOTguNjk5OTk2OTQ4MjQyMn0seyJ4IjoyMTYuNTkzNzUsInkiOjMyMS4xOTk5OTY5NDgyNDIyfSx7IngiOjIxNi41OTM3NSwieSI6MzQzLjY5OTk5Njk0ODI0MjJ9XQ==" data-look="classic" marker-start="url(#my-svg_flowchart-v2-pointStart)" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M256.594,584.435L256.594,588.185C256.594,591.935,256.594,599.435,256.594,606.935C256.594,614.435,256.594,621.935,256.594,629.435C256.594,636.935,256.594,644.435,351.456,656.888C446.318,669.34,636.043,686.744,730.905,695.447L825.768,704.149" id="my-svg-L_accessProxy_envoyHttp_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_accessProxy_envoyHttp_0" data-points="W3sieCI6MjU2LjU5Mzc1LCJ5Ijo1ODQuNDM1MjAzNTUyMjQ2MX0seyJ4IjoyNTYuNTkzNzUsInkiOjYwNi45MzUyMDM1NTIyNDYxfSx7IngiOjI1Ni41OTM3NSwieSI6NjI5LjQzNTIwMzU1MjI0NjF9LHsieCI6MjU2LjU5Mzc1LCJ5Ijo2NTEuOTM1MjAzNTUyMjQ2MX0seyJ4Ijo4MjkuNzUxMDkzNzUwMDAxLCJ5Ijo3MDQuNTE0NDgzNTg1NDAyNn1d" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M1357.67,418.818L1358.473,423.987C1359.277,429.157,1360.885,439.496,1361.688,450.332C1362.492,461.169,1362.492,472.502,1362.492,489.385C1362.492,506.269,1362.492,528.702,1362.492,549.219C1362.492,569.735,1362.492,588.335,1362.492,601.385C1362.492,614.435,1362.492,621.935,1362.492,629.435C1362.492,636.935,1362.492,644.435,1281.405,656.827C1200.318,669.218,1038.143,686.501,957.056,695.143L875.969,703.784" id="my-svg-L_urlProxy_envoyHttp_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_urlProxy_envoyHttp_0" data-points="W3sieCI6MTM1Ny42Njk2MTkwNDc4OTEzLCJ5Ijo0MTguODE3NjAwMjUwMjQ0MTR9LHsieCI6MTM2Mi40OTIxODc1LCJ5Ijo0NDkuODM1MjA1MDc4MTI1fSx7IngiOjEzNjIuNDkyMTg3NSwieSI6NDgzLjgzNTIwNTA3ODEyNX0seyJ4IjoxMzYyLjQ5MjE4NzUsInkiOjU1MS4xMzUyMDQzMTUxODU1fSx7IngiOjEzNjIuNDkyMTg3NSwieSI6NjA2LjkzNTIwMzU1MjI0NjF9LHsieCI6MTM2Mi40OTIxODc1LCJ5Ijo2MjkuNDM1MjAzNTUyMjQ2MX0seyJ4IjoxMzYyLjQ5MjE4NzUsInkiOjY1MS45MzUyMDM1NTIyNDYxfSx7IngiOjg3MS45OTEwOTM3NDk5OTksInkiOjcwNC4yMDgyMzAyNTY0NDA2fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M850.871,737.935L850.788,741.602C850.704,745.269,850.538,752.602,850.523,759.435C850.509,766.269,850.646,772.603,850.715,775.769L850.784,778.936" id="my-svg-L_envoyHttp_cloudflare_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_envoyHttp_cloudflare_0" data-points="W3sieCI6ODUwLjg3MTA5Mzc1LCJ5Ijo3MzcuOTM1MjAzNTUyMjQ2MX0seyJ4Ijo4NTAuMzcxMDkzNzUsInkiOjc1OS45MzUyMDM1NTIyNDYxfSx7IngiOjg1MC44NzEwOTM3NSwieSI6NzgyLjkzNTIwMzU1MjI0NTR9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M734.363,823.597L663.234,830.32C592.105,837.043,449.848,850.489,378.719,865.812C307.59,881.135,307.59,898.335,307.59,915.535C307.59,932.735,307.59,949.935,307.59,961.619C307.59,973.302,307.59,979.469,307.59,982.552L307.59,985.635" id="my-svg-L_cloudflare_apiClients_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_cloudflare_apiClients_0" data-points="W3sieCI6NzM0LjM2MzI4MTI1LCJ5Ijo4MjMuNTk2OTg2MDM4Mjg0NH0seyJ4IjozMDcuNTg5ODQzNzUsInkiOjg2My45MzUyMDM1NTIyNDYxfSx7IngiOjMwNy41ODk4NDM3NSwieSI6OTE1LjUzNTIwMjAyNjM2NzJ9LHsieCI6MzA3LjU4OTg0Mzc1LCJ5Ijo5NjcuMTM1MjAwNTAwNDg4M30seyJ4IjozMDcuNTg5ODQzNzUsInkiOjk4OS42MzUyMDA1MDA0ODgzfV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M739.945,841.935L725.761,845.602C711.576,849.269,683.208,856.602,669.024,868.869C654.84,881.135,654.84,898.335,654.84,915.535C654.84,932.735,654.84,949.935,654.84,963.085C654.84,976.235,654.84,985.335,654.84,989.885L654.84,994.435" id="my-svg-L_cloudflare_boards_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_cloudflare_boards_0" data-points="W3sieCI6NzM5Ljk0NDcxMTUzODQ2MTUsInkiOjg0MS45MzUyMDM1NTIyNDYxfSx7IngiOjY1NC44Mzk4NDM3NSwieSI6ODYzLjkzNTIwMzU1MjI0NjF9LHsieCI6NjU0LjgzOTg0Mzc1LCJ5Ijo5MTUuNTM1MjAyMDI2MzY3Mn0seyJ4Ijo2NTQuODM5ODQzNzUsInkiOjk2Ny4xMzUyMDA1MDA0ODgzfSx7IngiOjY1NC44Mzk4NDM3NSwieSI6OTk4LjQzNTE5OTczNzU0ODh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M912.698,840.034L921.726,844.017C930.753,848.001,948.808,855.968,957.836,868.552C966.863,881.135,966.863,898.335,966.863,915.535C966.863,932.735,966.863,949.935,966.863,963.085C966.863,976.235,966.863,985.335,966.863,989.885L966.863,994.435" id="my-svg-L_cloudflare_tabulator_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_cloudflare_tabulator_0" data-points="W3sieCI6OTEyLjY5ODIxMTU1MzcwMTEsInkiOjg0MC4wMzM3MDc3NTA1ODUxfSx7IngiOjk2Ni44NjMyODEyNSwieSI6ODYzLjkzNTIwMzU1MjI0NjF9LHsieCI6OTY2Ljg2MzI4MTI1LCJ5Ijo5MTUuNTM1MjAyMDI2MzY3Mn0seyJ4Ijo5NjYuODYzMjgxMjUsInkiOjk2Ny4xMzUyMDA1MDA0ODgzfSx7IngiOjk2Ni44NjMyODEyNSwieSI6OTk4LjQzNTE5OTczNzU0ODh9XQ==" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/><path d="M944.319,823.207L1003.848,829.995C1063.378,836.783,1182.437,850.359,1241.967,865.747C1301.496,881.135,1301.496,898.335,1301.496,915.535C1301.496,932.735,1301.496,949.935,1301.496,963.085C1301.496,976.235,1301.496,985.335,1301.496,989.885L1301.496,994.435" id="my-svg-L_cloudflare_vymi_0" class="edge-thickness-normal edge-pattern-dotted edge-thickness-normal edge-pattern-solid flowchart-link" style=";" data-edge="true" data-et="edge" data-id="L_cloudflare_vymi_0" data-points="W3sieCI6OTQ0LjMxODg1NDYyNTk4ODksInkiOjgyMy4yMDY2ODI3Nzc2MzAyfSx7IngiOjEzMDEuNDk2MDkzNzUsInkiOjg2My45MzUyMDM1NTIyNDYxfSx7IngiOjEzMDEuNDk2MDkzNzUsInkiOjkxNS41MzUyMDIwMjYzNjcyfSx7IngiOjEzMDEuNDk2MDkzNzUsInkiOjk2Ny4xMzUyMDA1MDA0ODgzfSx7IngiOjEzMDEuNDk2MDkzNzUsInkiOjk5OC40MzUxOTk3Mzc1NDg4fV0=" data-look="classic" marker-end="url(#my-svg_flowchart-v2-pointEnd)"/></g><g class="edgeLabels"><g class="edgeLabel" transform="translate(1067.39453125, 158)"><g class="label" data-id="L_postgres_vpOg_0" transform="translate(-0.0390625, -10.5)"><g><rect class="background" style="" x="-17.8359375" y="-1" width="35.75" height="23"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">SQL</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(1531.71875, 158)"><g class="label" data-id="L_valkey_vpOg_0" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-101.1953125" y="-1" width="202.390625" height="23"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">cache,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> GTFS-RT,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> pub/sub</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(1352.4921875, 256.5999984741211)"><g class="label" data-id="L_postgres_urlProxy_0" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-32.078125" y="-1" width="64.15625" height="23"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">presety</tspan></tspan></text></g></g></g><g class="edgeLabel"><g class="label" data-id="L_vpOg_varnish_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_varnish_accessProxy_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_vpOg_accessProxy_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel" transform="translate(807.60782, 467.03087)"><g class="label" data-id="L_urlProxy_accessProxy_0" transform="translate(-0.2734375, -10.5)"><g><rect class="background" style="" x="-56.9375" y="-1" width="114.421875" height="23"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">přesměrování</tspan></tspan></text></g></g></g><g class="edgeLabel"><g class="label" data-id="L_otherGolemio_accessProxy_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_permissionDb_accessProxy_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_permissionManagement_permissionDb_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_accessProxy_envoyHttp_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_urlProxy_envoyHttp_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel"><g class="label" data-id="L_envoyHttp_cloudflare_0" transform="translate(0, 0)"><text y="-10.1" text-anchor="middle"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"/></text></g></g><g><rect class="background" style="stroke: none"/></g><g class="edgeLabel" transform="translate(307.58984375, 915.5352020263672)"><g class="label" data-id="L_cloudflare_apiClients_0" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-27.5546875" y="-1" width="55.109375" height="23"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">HTTPS</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(654.83984375, 915.5352020263672)"><g class="label" data-id="L_cloudflare_boards_0" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-27.5546875" y="-1" width="55.109375" height="23"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">HTTPS</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(966.86328125, 915.5352020263672)"><g class="label" data-id="L_cloudflare_tabulator_0" transform="translate(0, -10.5)"><g><rect class="background" style="" x="-84.65625" y="-1" width="169.3125" height="23"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">HTTPS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> /v2/gtfs/stops</tspan></tspan></text></g></g></g><g class="edgeLabel" transform="translate(1301.49609375, 915.5352020263672)"><g class="label" data-id="L_cloudflare_vymi_0" transform="translate(0, -28.099998474121094)"><g><rect class="background" style="" x="-101.3125" y="-1" width="202.625" height="58.19999694824219"/><text y="-10.1" text-anchor="middle" style=""><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">HTTPS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> /v2/gtfs/routes,</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">/v2/gtfs/stops,</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em" text-anchor="middle"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">/v3/pid/departurepresets</tspan></tspan></text></g></g></g></g><g class="nodes"><g class="node default golemio" id="my-svg-flowchart-vpOg-4" data-look="classic" transform="translate(1067.39453125, 256.5999984741211)"><rect class="basic label-container" style="fill:#e3eefc !important;stroke:#1d4ed8 !important" x="-108.515625" y="-33.29999923706055" width="217.03125" height="66.5999984741211"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">VP</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Output</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Gateway</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(@golemio/pid)</tspan></tspan></text></g></g></g><g class="node default golemio" id="my-svg-flowchart-urlProxy-7" data-look="classic" transform="translate(1352.4921875, 385.5176010131836)"><rect class="basic label-container" style="fill:#e3eefc !important;stroke:#1d4ed8 !important" x="-180.375" y="-33.29999923706055" width="360.75" height="66.5999984741211"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">URL</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Proxy</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(zkracovač</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> URL</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> tabulí,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> @golemio/pid)</tspan></tspan></text></g></g></g><g class="node default golemio" id="my-svg-flowchart-accessProxy-8" data-look="classic" transform="translate(256.59375, 551.1352043151855)"><rect class="basic label-container" style="fill:#e3eefc !important;stroke:#1d4ed8 !important" x="-173.2734375" y="-33.29999923706055" width="346.546875" height="66.5999984741211"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Access</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Proxy</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(autentizace,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> autorizace,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> routování)</tspan></tspan></text></g></g></g><g class="node default golemio" id="my-svg-flowchart-permissionManagement-9" data-look="classic" transform="translate(216.59375, 256.5999984741211)"><rect class="basic label-container" style="fill:#e3eefc !important;stroke:#1d4ed8 !important" x="-186.09375" y="-42.099998474121094" width="372.1875" height="84.19999694824219"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -27.099998474121094)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Permission</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Management,</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">API</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Key</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Management</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (portál</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> API</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> klíčů),</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="2.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Admin</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> panel</tspan></tspan></text></g></g></g><g class="node default store" id="my-svg-flowchart-permissionDb-10" data-look="classic" transform="translate(216.59375, 385.5176010131836)"><path d="M0,16.548879170099934 a122.38671875,16.548879170099934 0,0,0 244.7734375,0 a122.38671875,16.548879170099934 0,0,0 -244.7734375,0 l0,50.54887917009994 a122.38671875,16.548879170099934 0,0,0 244.7734375,0 l0,-50.54887917009994" class="basic label-container outer-path" style="fill:#eef0f3 !important;stroke:#4b5563 !important" transform="translate(-122.38671875, -41.8233187551499)"/><g class="label" style="color:#1f2328 !important" transform="translate(-0.27734375, -0.5)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Databáze</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> a</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> cache</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> oprávnění</tspan></tspan></text></g></g></g><g class="node default golemio" id="my-svg-flowchart-otherGolemio-11" data-look="classic" transform="translate(636.546875, 385.5176010131836)"><rect class="basic label-container" style="fill:#e3eefc !important;stroke:#1d4ed8 !important" x="-161.6796875" y="-33.29999923706055" width="323.359375" height="66.5999984741211"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Ostatní</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> služby</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Golemio</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(IG,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> IE,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> OG</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> dalších</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> datových</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> sad)</tspan></tspan></text></g></g></g><g class="node default consumer" id="my-svg-flowchart-apiClients-16" data-look="classic" transform="translate(307.58984375, 1022.9351997375488)"><rect class="basic label-container" style="fill:#e6f6ea !important;stroke:#15803d !important" x="-169.5859375" y="-33.29999923706055" width="339.171875" height="66.5999984741211"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -18.299999237060547)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Aplikace</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> a</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> odběratelé</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> API</tspan></tspan><tspan class="text-outer-tspan row" x="0" y="1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">(PID</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Lítačka,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Mapa</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PID,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> GTFS-RT…)</tspan></tspan></text></g></g></g><g class="node default consumer" id="my-svg-flowchart-boards-17" data-look="classic" transform="translate(654.83984375, 1022.9351997375488)"><rect class="basic label-container" style="fill:#e6f6ea !important;stroke:#15803d !important" x="-152.6640625" y="-24.5" width="305.328125" height="49"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -9.5)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Odjezdové</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> tabule</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (krátké</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> URL)</tspan></tspan></text></g></g></g><g class="node default consumer" id="my-svg-flowchart-tabulator-18" data-look="classic" transform="translate(966.86328125, 1022.9351997375488)"><rect class="basic label-container" style="fill:#e6f6ea !important;stroke:#15803d !important" x="-134.359375" y="-24.5" width="268.71875" height="49"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -9.5)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Tabulátor</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (GTFS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> zastávky)</tspan></tspan></text></g></g></g><g class="node default consumer" id="my-svg-flowchart-vymi-19" data-look="classic" transform="translate(1301.49609375, 1022.9351997375488)"><rect class="basic label-container" style="fill:#e6f6ea !important;stroke:#15803d !important" x="-175.2734375" y="-24.5" width="350.546875" height="49"/><g class="label" style="color:#1f2328 !important" transform="translate(0, -9.5)"><rect/><g><rect class="background" style="stroke: none"/><text y="-10.1" style="fill:#1f2328 !important"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">VYMI</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (GTFS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> linky,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> zastávky,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> presety)</tspan></tspan></text></g></g></g><g class="image-shape default" id="my-svg-flowchart-postgres-0" data-look="classic" transform="translate(1194.91796875, 66)"><g transform="translate(0,-15.5)"><path d="M-19.393939393939394 -20 L19.393939393939394 -20 L19.393939393939394 20 L-19.393939393939394 20" stroke="none" stroke-width="0" fill="#eef0f3"/><path d="M-19.393939393939394 -20 C-7.8355528954207685 -20, 3.7228336030978575 -20, 19.393939393939394 -20 M-19.393939393939394 -20 C-7.510886867589942 -20, 4.37216565875951 -20, 19.393939393939394 -20 M19.393939393939394 -20 C19.393939393939394 -7.053334898402856, 19.393939393939394 5.893330203194289, 19.393939393939394 20 M19.393939393939394 -20 C19.393939393939394 -4.205811122942402, 19.393939393939394 11.588377754115196, 19.393939393939394 20 M19.393939393939394 20 C9.1355346418485 20, -1.1228701102423955 20, -19.393939393939394 20 M19.393939393939394 20 C9.649647203674858 20, -0.09464498658967813 20, -19.393939393939394 20 M-19.393939393939394 20 C-19.393939393939394 8.750693651891781, -19.393939393939394 -2.498612696216437, -19.393939393939394 -20 M-19.393939393939394 20 C-19.393939393939394 5.997733172308987, -19.393939393939394 -8.004533655382026, -19.393939393939394 -20" stroke="#4b5563" stroke-width="1.3" fill="none" stroke-dasharray="0 0"/></g><g class="label" style="color:#1f2328 !important" transform="translate(0,12.5)"><rect/><g style="fill:#1f2328 !important"><rect class="background" style="stroke: none" x="-138.6953125" y="-1" width="277.390625" height="23"/><text y="-10.1"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">PostgreSQL</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> +</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> PostGIS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (VP</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> cluster)</tspan></tspan></text></g></g><g><path d="M-138.6953125 -35.5 L138.6953125 -35.5 L138.6953125 35.5 L-138.6953125 35.5" stroke="none" stroke-width="0" fill="none"/></g><image href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIj8+CjwhRE9DVFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIKICAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KCjxzdmcgd2lkdGg9IjQzMi4wNzFwdCIgaGVpZ2h0PSI0NDUuMzgzcHQiIHZpZXdCb3g9IjAgMCA0MzIuMDcxIDQ0NS4zODMiIHhtbDpzcGFjZT0icHJlc2VydmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxnIGlkPSJvcmdpbmFsIiBzdHlsZT0iZmlsbC1ydWxlOm5vbnplcm87Y2xpcC1ydWxlOm5vbnplcm87c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLW1pdGVybGltaXQ6NDsiPgoJPC9nPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMyIgc3R5bGU9ImZpbGwtcnVsZTpub256ZXJvO2NsaXAtcnVsZTpub256ZXJvO2ZpbGw6bm9uZTtzdHJva2U6I0ZGRkZGRjtzdHJva2Utd2lkdGg6MTIuNDY1MTtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLW1pdGVybGltaXQ6NDsiPgo8cGF0aCBzdHlsZT0iZmlsbDojMDAwMDAwO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDozNy4zOTUzO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyOyIgZD0iTTMyMy4yMDUsMzI0LjIyN2MyLjgzMy0yMy42MDEsMS45ODQtMjcuMDYyLDE5LjU2My0yMy4yMzlsNC40NjMsMC4zOTJjMTMuNTE3LDAuNjE1LDMxLjE5OS0yLjE3NCw0MS41ODctN2MyMi4zNjItMTAuMzc2LDM1LjYyMi0yNy43LDEzLjU3Mi0yMy4xNDhjLTUwLjI5NywxMC4zNzYtNTMuNzU1LTYuNjU1LTUzLjc1NS02LjY1NWM1My4xMTEtNzguODAzLDc1LjMxMy0xNzguODM2LDU2LjE0OS0yMDMuMzIyICAgIEMzNTIuNTE0LTUuNTM0LDI2Mi4wMzYsMjYuMDQ5LDI2MC41MjIsMjYuODY5bC0wLjQ4MiwwLjA4OWMtOS45MzgtMi4wNjItMjEuMDYtMy4yOTQtMzMuNTU0LTMuNDk2Yy0yMi43NjEtMC4zNzQtNDAuMDMyLDUuOTY3LTUzLjEzMywxNS45MDRjMCwwLTE2MS40MDgtNjYuNDk4LTE1My44OTksODMuNjI4YzEuNTk3LDMxLjkzNiw0NS43NzcsMjQxLjY1NSw5OC40NywxNzguMzEgICAgYzE5LjI1OS0yMy4xNjMsMzcuODcxLTQyLjc0OCwzNy44NzEtNDIuNzQ4YzkuMjQyLDYuMTQsMjAuMzA3LDkuMjcyLDMxLjkxMiw4LjE0N2wwLjg5Ny0wLjc2NWMtMC4yODEsMi44NzYtMC4xNTcsNS42ODksMC4zNTksOS4wMTljLTEzLjU3MiwxNS4xNjctOS41ODQsMTcuODMtMzYuNzIzLDIzLjQxNmMtMjcuNDU3LDUuNjU5LTExLjMyNiwxNS43MzQtMC43OTcsMTguMzY3YzEyLjc2OCwzLjE5Myw0Mi4zMDUsNy43MTYsNjIuMjY4LTIwLjIyNCAgICBsLTAuNzk1LDMuMTg4YzUuMzI1LDQuMjYsNC45NjUsMzAuNjE5LDUuNzIsNDkuNDUyYzAuNzU2LDE4LjgzNCwyLjAxNywzNi40MDksNS44NTYsNDYuNzcxYzMuODM5LDEwLjM2LDguMzY5LDM3LjA1LDQ0LjAzNiwyOS40MDZjMjkuODA5LTYuMzg4LDUyLjYtMTUuNTgyLDU0LjY3Ny0xMDEuMTA3Ii8+CjxwYXRoIHN0eWxlPSJmaWxsOiMzMzY3OTE7c3Ryb2tlOm5vbmU7IiBkPSJNNDAyLjM5NSwyNzEuMjNjLTUwLjMwMiwxMC4zNzYtNTMuNzYtNi42NTUtNTMuNzYtNi42NTVjNTMuMTExLTc4LjgwOCw3NS4zMTMtMTc4Ljg0Myw1Ni4xNTMtMjAzLjMyNmMtNTIuMjctNjYuNzg1LTE0Mi43NTItMzUuMi0xNDQuMjYyLTM0LjM4bC0wLjQ4NiwwLjA4N2MtOS45MzgtMi4wNjMtMjEuMDYtMy4yOTItMzMuNTYtMy40OTZjLTIyLjc2MS0wLjM3My00MC4wMjYsNS45NjctNTMuMTI3LDE1LjkwMiAgICBjMCwwLTE2MS40MTEtNjYuNDk1LTE1My45MDQsODMuNjNjMS41OTcsMzEuOTM4LDQ1Ljc3NiwyNDEuNjU3LDk4LjQ3MSwxNzguMzEyYzE5LjI2LTIzLjE2MywzNy44NjktNDIuNzQ4LDM3Ljg2OS00Mi43NDhjOS4yNDMsNi4xNCwyMC4zMDgsOS4yNzIsMzEuOTA4LDguMTQ3bDAuOTAxLTAuNzY1Yy0wLjI4LDIuODc2LTAuMTUyLDUuNjg5LDAuMzYxLDkuMDE5Yy0xMy41NzUsMTUuMTY3LTkuNTg2LDE3LjgzLTM2LjcyMywyMy40MTYgICAgYy0yNy40NTksNS42NTktMTEuMzI4LDE1LjczNC0wLjc5NiwxOC4zNjdjMTIuNzY4LDMuMTkzLDQyLjMwNyw3LjcxNiw2Mi4yNjYtMjAuMjI0bC0wLjc5NiwzLjE4OGM1LjMxOSw0LjI2LDkuMDU0LDI3LjcxMSw4LjQyOCw0OC45NjljLTAuNjI2LDIxLjI1OS0xLjA0NCwzNS44NTQsMy4xNDcsNDcuMjU0YzQuMTkxLDExLjQsOC4zNjgsMzcuMDUsNDQuMDQyLDI5LjQwNmMyOS44MDktNi4zODgsNDUuMjU2LTIyLjk0Miw0Ny40MDUtNTAuNTU1ICAgIGMxLjUyNS0xOS42MzEsNC45NzYtMTYuNzI5LDUuMTk0LTM0LjI4bDIuNzY4LTguMzA5YzMuMTkyLTI2LjYxMSwwLjUwNy0zNS4xOTYsMTguODcyLTMxLjIwM2w0LjQ2MywwLjM5MmMxMy41MTcsMC42MTUsMzEuMjA4LTIuMTc0LDQxLjU5MS03YzIyLjM1OC0xMC4zNzYsMzUuNjE4LTI3LjcsMTMuNTczLTIzLjE0OHoiLz4KPHBhdGggZD0iTTIxNS44NjYsMjg2LjQ4NGMtMS4zODUsNDkuNTE2LDAuMzQ4LDk5LjM3Nyw1LjE5MywxMTEuNDk1YzQuODQ4LDEyLjExOCwxNS4yMjMsMzUuNjg4LDUwLjksMjguMDQ1YzI5LjgwNi02LjM5LDQwLjY1MS0xOC43NTYsNDUuMzU3LTQ2LjA1MWMzLjQ2Ni0yMC4wODIsMTAuMTQ4LTc1Ljg1NCwxMS4wMDUtODcuMjgxIi8+CjxwYXRoIGQ9Ik0xNzMuMTA0LDM4LjI1NmMwLDAtMTYxLjUyMS02Ni4wMTYtMTU0LjAxMiw4NC4xMDljMS41OTcsMzEuOTM4LDQ1Ljc3OSwyNDEuNjY0LDk4LjQ3MywxNzguMzE2YzE5LjI1Ni0yMy4xNjYsMzYuNjcxLTQxLjMzNSwzNi42NzEtNDEuMzM1Ii8+CjxwYXRoIGQ9Ik0yNjAuMzQ5LDI2LjIwN2MtNS41OTEsMS43NTMsODkuODQ4LTM0Ljg4OSwxNDQuMDg3LDM0LjQxN2MxOS4xNTksMjQuNDg0LTMuMDQzLDEyNC41MTktNTYuMTUzLDIwMy4zMjkiLz4KPHBhdGggc3R5bGU9InN0cm9rZS1saW5lam9pbjpiZXZlbDsiIGQ9Ik0zNDguMjgyLDI2My45NTNjMCwwLDMuNDYxLDE3LjAzNiw1My43NjQsNi42NTNjMjIuMDQtNC41NTIsOC43NzYsMTIuNzc0LTEzLjU3NywyMy4xNTVjLTE4LjM0NSw4LjUxNC01OS40NzQsMTAuNjk2LTYwLjE0Ni0xLjA2OWMtMS43MjktMzAuMzU1LDIxLjY0Ny0yMS4xMzMsMTkuOTYtMjguNzM5Yy0xLjUyNS02Ljg1LTExLjk3OS0xMy41NzMtMTguODk0LTMwLjMzOCAgICBjLTYuMDM3LTE0LjYzMy04Mi43OTYtMTI2Ljg0OSwyMS4yODctMTEwLjE4M2MzLjgxMy0wLjc4OS0yNy4xNDYtOTkuMDAyLTEyNC41NTMtMTAwLjU5OWMtOTcuMzg1LTEuNTk3LTk0LjE5LDExOS43NjItOTQuMTksMTE5Ljc2MiIvPgo8cGF0aCBkPSJNMTg4LjYwNCwyNzQuMzM0Yy0xMy41NzcsMTUuMTY2LTkuNTg0LDE3LjgyOS0zNi43MjMsMjMuNDE3Yy0yNy40NTksNS42Ni0xMS4zMjYsMTUuNzMzLTAuNzk3LDE4LjM2NWMxMi43NjgsMy4xOTUsNDIuMzA3LDcuNzE4LDYyLjI2Ni0yMC4yMjljNi4wNzgtOC41MDktMC4wMzYtMjIuMDg2LTguMzg1LTI1LjU0N2MtNC4wMzQtMS42NzEtOS40MjgtMy43NjUtMTYuMzYxLDMuOTk0eiIvPgo8cGF0aCBkPSJNMTg3LjcxNSwyNzQuMDY5Yy0xLjM2OC04LjkxNywyLjkzLTE5LjUyOCw3LjUzNi0zMS45NDJjNi45MjItMTguNjI2LDIyLjg5My0zNy4yNTUsMTAuMTE3LTk2LjMzOWMtOS41MjMtNDQuMDI5LTczLjM5Ni05LjE2My03My40MzYtMy4xOTNjLTAuMDM5LDUuOTY4LDIuODg5LDMwLjI2LTEuMDY3LDU4LjU0OGMtNS4xNjIsMzYuOTEzLDIzLjQ4OCw2OC4xMzIsNTYuNDc5LDY0LjkzOCIvPgo8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGO3N0cm9rZS13aWR0aDo0LjE1NTtzdHJva2UtbGluZWNhcDpidXR0O3N0cm9rZS1saW5lam9pbjptaXRlcjsiIGQ9Ik0xNzIuNTE3LDE0MS43Yy0wLjI4OCwyLjAzOSwzLjczMyw3LjQ4LDguOTc2LDguMjA3YzUuMjM0LDAuNzMsOS43MTQtMy41MjIsOS45OTgtNS41NTljMC4yODQtMi4wMzktMy43MzItNC4yODUtOC45NzctNS4wMTVjLTUuMjM3LTAuNzMxLTkuNzE5LDAuMzMzLTkuOTk2LDIuMzY3eiIvPgo8cGF0aCBzdHlsZT0iZmlsbDojRkZGRkZGO3N0cm9rZS13aWR0aDoyLjA3NzU7c3Ryb2tlLWxpbmVjYXA6YnV0dDtzdHJva2UtbGluZWpvaW46bWl0ZXI7IiBkPSJNMzMxLjk0MSwxMzcuNTQzYzAuMjg0LDIuMDM5LTMuNzMyLDcuNDgtOC45NzYsOC4yMDdjLTUuMjM4LDAuNzMtOS43MTgtMy41MjItMTAuMDA1LTUuNTU5Yy0wLjI3Ny0yLjAzOSwzLjc0LTQuMjg1LDguOTc5LTUuMDE1YzUuMjM5LTAuNzMsOS43MTgsMC4zMzMsMTAuMDAyLDIuMzY4eiIvPgo8cGF0aCBkPSJNMzUwLjY3NiwxMjMuNDMyYzAuODYzLDE1Ljk5NC0zLjQ0NSwyNi44ODgtMy45ODgsNDMuOTE0Yy0wLjgwNCwyNC43NDgsMTEuNzk5LDUzLjA3NC03LjE5MSw4MS40MzUiLz4KPHBhdGggc3R5bGU9InN0cm9rZS13aWR0aDozOyIgZD0iTTAsNjAuMjMyIi8+CjwvZz4KPC9zdmc+" width="38.78787878787879" height="40" preserveAspectRatio="none" transform="translate(-19.393939393939394,-35.5)"/></g><g class="image-shape default" id="my-svg-flowchart-valkey-2" data-look="classic" transform="translate(1531.71875, 66)"><g transform="translate(0,-15.5)"><path d="M-47.524752475247524 -16 L47.524752475247524 -16 L47.524752475247524 16 L-47.524752475247524 16" stroke="none" stroke-width="0" fill="#eef0f3"/><path d="M-47.524752475247524 -16 C-19.34483085493607 -16, 8.835090765375384 -16, 47.524752475247524 -16 M-47.524752475247524 -16 C-20.661451801124226 -16, 6.201848872999072 -16, 47.524752475247524 -16 M47.524752475247524 -16 C47.524752475247524 -6.6219152382456645, 47.524752475247524 2.756169523508671, 47.524752475247524 16 M47.524752475247524 -16 C47.524752475247524 -3.501537593799137, 47.524752475247524 8.996924812401726, 47.524752475247524 16 M47.524752475247524 16 C9.786067798154093 16, -27.952616878939338 16, -47.524752475247524 16 M47.524752475247524 16 C11.395130711253188 16, -24.73449105274115 16, -47.524752475247524 16 M-47.524752475247524 16 C-47.524752475247524 6.229485519638413, -47.524752475247524 -3.5410289607231746, -47.524752475247524 -16 M-47.524752475247524 16 C-47.524752475247524 7.71577651053674, -47.524752475247524 -0.5684469789265201, -47.524752475247524 -16" stroke="#4b5563" stroke-width="1.3" fill="none" stroke-dasharray="0 0"/></g><g class="label" style="color:#1f2328 !important" transform="translate(0,8.5)"><rect/><g style="fill:#1f2328 !important"><rect class="background" style="stroke: none" x="-73.5625" y="-1" width="147.125" height="23"/><text y="-10.1"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Valkey</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (Redis</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> API)</tspan></tspan></text></g></g><g><path d="M-73.5625 -31.5 L73.5625 -31.5 L73.5625 31.5 L-73.5625 31.5" stroke="none" stroke-width="0" fill="none"/></g><image href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnN2Zz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDE4Ny45IDYzLjUiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGZpbGw6ICMxYTIwMjY7CiAgICAgIH0KCiAgICAgIC5jbHMtMiB7CiAgICAgICAgZmlsbDogIzY5ODNmZjsKICAgICAgICBmaWxsLXJ1bGU6IGV2ZW5vZGQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9kZWZzPgogIDwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyOC42LjAsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiAxLjIuMCBCdWlsZCA3MDkpICAtLT4KICA8Zz4KICAgIDxnIGlkPSJzdmcyNDU1Ij4KICAgICAgPHNvZGlwb2RpOm5hbWVkdmlldyBpZD0ibmFtZWR2aWV3MjQ1NyIgYm9yZGVyY29sb3I9IiMwMDAwMDAiIGJvcmRlcm9wYWNpdHk9IjAuMjUiIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9ImxheWVyMSIgaW5rc2NhcGU6Y3g9IjExNy4xNDcyNyIgaW5rc2NhcGU6Y3k9Ijg3LjE2Nzk5NSIgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQxIiBpbmtzY2FwZTpkb2N1bWVudC11bml0cz0ibW0iIGlua3NjYXBlOnBhZ2VjaGVja2VyYm9hcmQ9IjAiIGlua3NjYXBlOnBhZ2VvcGFjaXR5PSIwLjAiIGlua3NjYXBlOnNob3dwYWdlc2hhZG93PSIyIiBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSI3NTgiIGlua3NjYXBlOndpbmRvdy1tYXhpbWl6ZWQ9IjAiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTM2OCIgaW5rc2NhcGU6d2luZG93LXg9IjAiIGlua3NjYXBlOndpbmRvdy15PSIxMzIiIGlua3NjYXBlOnpvb209IjMuMDY4Nzg2OSIgcGFnZWNvbG9yPSIjZmZmZmZmIiBzaG93Z3JpZD0iZmFsc2UiIHNob3dndWlkZXM9InRydWUiPgogICAgICAgIDxzb2RpcG9kaTpndWlkZSBpZD0iZ3VpZGU0NTkxIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249Ijg1Ljg4NDUxLC04OC4zMDY2NzEiLz4KICAgICAgICA8c29kaXBvZGk6Z3VpZGUgaWQ9Imd1aWRlNDU5MyIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIgb3JpZW50YXRpb249IjAsLTEiIHBvc2l0aW9uPSIxNTIuNDA3OTEsLTc5LjMwMTA4MSIvPgogICAgICAgIDxzb2RpcG9kaTpndWlkZSBpZD0iZ3VpZGU2MDUzIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249Ijg0LjkwMzMxOCwtMTA4LjAxNDY5Ii8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTYwNTUiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIwLC0xIiBwb3NpdGlvbj0iODguNDkyNTIxLC0xMjEuOTU3MzYiLz4KICAgICAgICA8c29kaXBvZGk6Z3VpZGUgaWQ9Imd1aWRlNzUyMSIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIgb3JpZW50YXRpb249IjAsLTEiIHBvc2l0aW9uPSI4MC4wNzE3MDEsLTEzMC4zNzgxNyIvPgogICAgICAgIDxzb2RpcG9kaTpndWlkZSBpZD0iZ3VpZGU3NTIzIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249Ijc5LjkzMzY1NSwtMTQ4LjYwMDI4Ii8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTc1MjUiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIxLDAiIHBvc2l0aW9uPSI5MC45NzczNSwtMTAxLjI1MDQyIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTc1ODMiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIxLDAiIHBvc2l0aW9uPSIxNTcuNTE1NjIsLTEwOS41MzMyIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTExNTk4IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249IjkyLjcyNDgzNywtMTgwLjY3MTAzIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTExNzgyIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249Ijc0Ljk2NjYxNCwtNTcuMTM5ODExIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTExNzg0IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249IjEwNi4zNTMyMSwtNDAuNDc1NzgiLz4KICAgICAgICA8c29kaXBvZGk6Z3VpZGUgaWQ9Imd1aWRlMTE3ODYiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIxLDAiIHBvc2l0aW9uPSI3OS42NTg0MjMsLTUwLjUwNjU1Ii8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTEyMDExIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249Ii03LjYzMDU5NjEsMTUuNTY4NjExIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTEyMDEzIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249IjkuNTk5MzgxOSw2LjUyNTkyMTEiLz4KICAgICAgICA8c29kaXBvZGk6Z3VpZGUgaWQ9Imd1aWRlMTIwMTUiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIxLDAiIHBvc2l0aW9uPSIxNi4wNzU4OTksMTUuODEzMDAxIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTEyMDE3IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMSwwIiBwb3NpdGlvbj0iMTguMDMxMDc0LC0wLjMxNzE5OTA3Ii8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTEyMDIzIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMSwwIiBwb3NpdGlvbj0iMjAuMDg4NjkyLDAuNTE3MzEwOTUiLz4KICAgICAgICA8c29kaXBvZGk6Z3VpZGUgaWQ9Imd1aWRlMTIwMjUiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIxLDAiIHBvc2l0aW9uPSIxLjk4MzAwMzgsMTAuNjkwOTgxIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTEyMDI3IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMSwwIiBwb3NpdGlvbj0iLTIuNDM1NDcxOWUtMDgsMjEuMzgxOTYxIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTEyMDI5IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMSwwIiBwb3NpdGlvbj0iNjQuMjMyMDg4LDI1LjY5MjgzMiIvPgogICAgICAgIDxzb2RpcG9kaTpndWlkZSBpZD0iZ3VpZGUxMjAzMSIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIgb3JpZW50YXRpb249IjEsMCIgcG9zaXRpb249IjY2LjMwMTMwOSwzNS45NTI3MjIiLz4KICAgICAgICA8c29kaXBvZGk6Z3VpZGUgaWQ9Imd1aWRlMTIwMzMiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIwLC0xIiBwb3NpdGlvbj0iOC40NDkzMjA5LDEuODk2NzkxIi8+CiAgICAgICAgPHNvZGlwb2RpOmd1aWRlIGlkPSJndWlkZTEyMDM1IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIiBvcmllbnRhdGlvbj0iMCwtMSIgcG9zaXRpb249IjcuNzU5NTgwOSwtMC4wODYyMDkwNjYiLz4KICAgICAgICA8c29kaXBvZGk6Z3VpZGUgaWQ9Imd1aWRlMTIwMzciIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiIG9yaWVudGF0aW9uPSIwLC0xIiBwb3NpdGlvbj0iMTIuMDcwNDU5LDIwLjM0NzM1MSIvPgogICAgICAgIDxzb2RpcG9kaTpndWlkZSBpZD0iZ3VpZGUxMjAzOSIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIgb3JpZW50YXRpb249IjAsLTEiIHBvc2l0aW9uPSIxMS44MTE4MDYsMjIuNDE2NTcyIi8+CiAgICAgIDwvc29kaXBvZGk6bmFtZWR2aWV3PgogICAgICA8ZyBpZD0ibGF5ZXIxIiBpbmtzY2FwZTpncm91cG1vZGU9ImxheWVyIiBpbmtzY2FwZTpsYWJlbD0iTGF5ZXIgMSI+CiAgICAgICAgPHBhdGggaWQ9InBhdGgxMTk0OSIgY2xhc3M9ImNscy0yIiBkPSJNMTUuMiw1MGwtOS40LTUuOXYtMjVMMjguOCw2bDIyLjMsMTMuMXYyNi4zbC0yMi43LDEyLjgtNy45LTQuOXYtMTJsLTQuMy0yLjd2LTEzLjZsMTIuNC03LjEsMTIuMSw3LjF2MTQuMmwtOS42LDUuNHYtNS43YzIuOS0xLjEsNC45LTMuOSw0LjktNy4zcy0zLjQtNy44LTcuNi03LjgtNy42LDMuNS03LjYsNy44LDIuMSw2LjIsNC45LDcuM3YxMC45bDIuNywxLjcsMTYuOC05LjV2LTE5LjdsLTE2LjYtOS44LTE3LjEsOS44djE4LjVsMy42LDIuM3Y2LjhaTTI4LjUsMjguMWMxLjksMCwzLjQsMS42LDMuNCwzLjZzLTEuNSwzLjYtMy40LDMuNi0zLjQtMS42LTMuNC0zLjYsMS41LTMuNiwzLjQtMy42WiIvPgogICAgICAgIDxnIGlkPSJ0ZXh0MTE5NTMiPgogICAgICAgICAgPHBhdGggaWQ9InBhdGg0MDE1MCIgY2xhc3M9ImNscy0xIiBkPSJNODUuMiwxMS40bC0xMi4xLDMzLjhoLTRsLTEyLjEtMzMuOGg0LjFsNy45LDIyLjNjLjMuOS42LDEuOC45LDIuNi4zLjguNSwxLjYuNywyLjQuMi44LjQsMS41LjUsMi4yLjItLjcuMy0xLjQuNS0yLjIuMi0uOC40LTEuNi43LTIuNC4zLS44LjYtMS43LjktMi42bDcuOS0yMi4yaDQuMloiLz4KICAgICAgICAgIDxwYXRoIGlkPSJwYXRoNDAxNTIiIGNsYXNzPSJjbHMtMSIgZD0iTTk0LDE5LjVjMywwLDUuMy43LDYuNywyLDEuNSwxLjQsMi4yLDMuNSwyLjIsNi41djE3LjJoLTIuOGwtLjctMy43aC0uMmMtLjcuOS0xLjQsMS43LTIuMiwyLjMtLjguNi0xLjcsMS4xLTIuNywxLjQtMSwuMy0yLjIuNS0zLjcuNXMtMi45LS4zLTQuMS0uOGMtMS4yLS41LTIuMS0xLjQtMi44LTIuNS0uNy0xLjEtMS0yLjUtMS00LjIsMC0yLjUsMS00LjUsMy01LjgsMi0xLjQsNS4xLTIuMSw5LjItMi4ybDQuNC0uMnYtMS41YzAtMi4yLS41LTMuNy0xLjQtNC42LS45LS45LTIuMy0xLjMtNC0xLjMtMS4zLDAtMi42LjItMy44LjYtMS4yLjQtMi4zLjgtMy40LDEuNGwtMS4yLTIuOWMxLjEtLjYsMi41LTEuMSwzLjktMS41LDEuNS0uNCwzLS42LDQuNy0uNmgwWk05OS4xLDMyLjhsLTMuOS4yYy0zLjIuMS01LjQuNi02LjcsMS41cy0xLjksMi4yLTEuOSwzLjkuNCwyLjUsMS4zLDMuMmMuOS43LDIsMSwzLjUsMSwyLjMsMCw0LjEtLjYsNS41LTEuOXMyLjItMy4xLDIuMi01LjZ2LTIuM1oiLz4KICAgICAgICAgIDxwYXRoIGlkPSJwYXRoNDAxNTQiIGNsYXNzPSJjbHMtMSIgZD0iTTExMi4xLDQ1LjNoLTMuOVY5LjNoMy45djM2WiIvPgogICAgICAgICAgPHBhdGggaWQ9InBhdGg0MDE1NiIgY2xhc3M9ImNscy0xIiBkPSJNMTIxLjMsOS4zdjE4LjdjMCwuNiwwLDEuNCwwLDIuMywwLC45LDAsMS43LS4xLDIuM2guMmMuMy0uNC44LTEsMS40LTEuOC42LS44LDEuMi0xLjQsMS42LTEuOWw4LjQtOWg0LjVsLTEwLjIsMTAuOCwxMC45LDE0LjVoLTQuNmwtOS0xMi0zLjEsMi44djkuMmgtMy44VjkuM2gzLjhaIi8+CiAgICAgICAgICA8cGF0aCBpZD0icGF0aDQwMTU4IiBjbGFzcz0iY2xzLTEiIGQ9Ik0xNDguMiwxOS40YzIuMiwwLDQsLjUsNS42LDEuNCwxLjUsMSwyLjcsMi4zLDMuNSw0LC44LDEuNywxLjIsMy43LDEuMiw2djIuNGgtMTcuNWMwLDMsLjgsNS4yLDIuMiw2LjhzMy41LDIuMyw2LjEsMi4zLDMtLjEsNC4zLS40YzEuMi0uMywyLjUtLjcsMy44LTEuM3YzLjRjLTEuMy42LTIuNiwxLTMuOCwxLjItMS4yLjMtMi43LjQtNC40LjQtMi40LDAtNC42LS41LTYuNC0xLjUtMS44LTEtMy4yLTIuNS00LjItNC40LTEtMS45LTEuNS00LjMtMS41LTcuMSwwLTIuNy41LTUuMSwxLjQtNy4xLjktMiwyLjItMy41LDMuOS00LjYsMS43LTEuMSwzLjctMS42LDUuOS0xLjZoMFpNMTQ4LjIsMjIuNmMtMi4xLDAtMy43LjctNC45LDItMS4yLDEuMy0xLjksMy4yLTIuMiw1LjZoMTMuNGMwLTEuNS0uMy0yLjgtLjctNC0uNC0xLjItMS4xLTIuMS0yLjEtMi43LS45LS42LTIuMS0xLTMuNi0xWiIvPgogICAgICAgICAgPHBhdGggaWQ9InBhdGg0MDE2MCIgY2xhc3M9ImNscy0xIiBkPSJNMTU4LjQsMTkuOWg0LjFsNS42LDE0LjdjLjMuOS42LDEuNy45LDIuNS4zLjguNSwxLjUuNywyLjMuMi43LjQsMS40LjUsMi4xaC4yYy4yLS44LjUtMS44LjktMywuNC0xLjMuOC0yLjYsMS4zLTMuOWw1LjMtMTQuN2g0LjFsLTExLDI5LjFjLS42LDEuNi0xLjMsMi45LTIuMSw0LjEtLjgsMS4yLTEuNywyLTIuOCwyLjctMS4xLjYtMi41LjktNCwuOXMtMS40LDAtMS45LS4xYy0uNiwwLTEtLjItMS40LS4zdi0zLjFjLjMsMCwuNy4xLDEuMi4yLjUsMCwxLDAsMS41LDAsMSwwLDEuOC0uMiwyLjUtLjYuNy0uNCwxLjMtLjksMS44LTEuNi41LS43LjktMS41LDEuMy0yLjVsMS40LTMuNi0xMC4yLTI1LjRaIi8+CiAgICAgICAgPC9nPgogICAgICA8L2c+CiAgICA8L2c+CiAgPC9nPgo8L3N2Zz4=" width="95.04950495049505" height="32" preserveAspectRatio="none" transform="translate(-47.524752475247524,-31.5)"/></g><g class="image-shape default" id="my-svg-flowchart-varnish-5" data-look="classic" transform="translate(985.171875, 385.5176010131836)"><g transform="translate(0,-15.5)"><path d="M-34.61538461538461 -15 L34.61538461538461 -15 L34.61538461538461 15 L-34.61538461538461 15" stroke="none" stroke-width="0" fill="#e3eefc"/><path d="M-34.61538461538461 -15 C-15.946233710782721 -15, 2.722917193819171 -15, 34.61538461538461 -15 M-34.61538461538461 -15 C-7.173905335284594 -15, 20.267573944815425 -15, 34.61538461538461 -15 M34.61538461538461 -15 C34.61538461538461 -3.7128165146476064, 34.61538461538461 7.574366970704787, 34.61538461538461 15 M34.61538461538461 -15 C34.61538461538461 -7.48206857984672, 34.61538461538461 0.03586284030656017, 34.61538461538461 15 M34.61538461538461 15 C13.55599838546528 15, -7.503387844454053 15, -34.61538461538461 15 M34.61538461538461 15 C15.437786615520572 15, -3.7398113843434686 15, -34.61538461538461 15 M-34.61538461538461 15 C-34.61538461538461 3.2414161256422194, -34.61538461538461 -8.517167748715561, -34.61538461538461 -15 M-34.61538461538461 15 C-34.61538461538461 6.322541227093332, -34.61538461538461 -2.3549175458133362, -34.61538461538461 -15" stroke="#1d4ed8" stroke-width="1.3" fill="none" stroke-dasharray="0 0"/></g><g class="label" style="color:#1f2328 !important" transform="translate(0,7.5)"><rect/><g style="fill:#1f2328 !important"><rect class="background" style="stroke: none" x="-141.9453125" y="-1" width="283.890625" height="23"/><text y="-10.1"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Varnish</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> cache</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (vybrané</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> endpointy)</tspan></tspan></text></g></g><g><path d="M-141.9453125 -30.5 L141.9453125 -30.5 L141.9453125 30.5 L-141.9453125 30.5" stroke="none" stroke-width="0" fill="none"/></g><image href="data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iTGF5ZXJfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCAzNDQuNiAxNDkuNyI+CiAgPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDMwLjAuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDIuMS4xIEJ1aWxkIDEyMykgIC0tPgogIDxwYXRoIGQ9Ik01Ny41NCw2MC45aDguNTRsNi40OSwzOC45NiwyMC4yNi0zOC45Nmg4Ljg5bC0yNS45MSw0OS40MWgtOS43NGwtOC41NC00OS40MWguMDFaIi8+CiAgPHBhdGggZD0iTTEzNS4xNiwxMTAuMzFoLTguNDdsLTEuODMtMTEuNThoLTE5LjU1bC01LjkzLDExLjU4aC04Ljg5bDI1LjkxLTQ5LjQxaDEwLjI0bDguNTQsNDkuNDFoLS4wMlpNMTA4Ljk3LDkxLjQ3aDE0LjY4bC0zLjUzLTIxLjY3LTExLjE1LDIxLjY3WiIvPgogIDxwYXRoIGQ9Ik0xNDguNDgsNjAuOWgyMC4zM2M5Ljg4LDAsMTQuMzMsNC42NiwxMy45MSwxMi44NS0uMzUsOS41My00Ljk0LDE1LjQ2LTEyLjIxLDE3Ljg2bDYuNDksMTguNzFoLTguNzVsLTYuMDctMTcuNThoLTEwLjg3bC0zLjExLDE3LjU4aC04LjRsOC42OC00OS40MWgwWk0xNTIuNTgsODUuNGgxMS4xNWM0Ljg3LDAsOS43NC0yLjI2LDEwLjE3LTEwLjIzLjQyLTQuNjYtMS44My02LjkyLTYuNjQtNi45MmgtMTEuNzJsLTIuOTYsMTcuMTVoMFoiLz4KICA8cGF0aCBkPSJNMTk5Ljg1LDc2LjI5bC02LDM0LjAyaC04LjRsOC42OC00OS40MWg3LjgzbDE1Ljg4LDM0LjAyLDYtMzQuMDJoOC40bC04LjY4LDQ5LjQxaC03LjgzbC0xNS44OC0zNC4wMmgwWiIvPgogIDxwYXRoIGQ9Ik0yNDMuMjIsNjAuOWg4LjRsLTguNjgsNDkuNDFoLTguNHM4LjY4LTQ5LjQxLDguNjgtNDkuNDFaIi8+CiAgPHBhdGggZD0iTTI3Ny4yMSw5MC4xM2wtOC40Ny0xLjU1Yy03LjgzLTEuNDgtMTAuOC01LjcyLTEwLjgtMTEuMDgsMC04LjY4LDUuOTMtMTcuMjksMjAuNjEtMTcuMjksMTEuNDQsMCwxNy44Niw1LjAxLDE1Ljk1LDE1Ljg4aC04LjRjMS4wNi02LTEuOTgtOC41NC04LjMzLTguNTRzLTEwLjk0LDIuNDctMTAuOTQsOC4xOWMwLDIuNDcsMS42Miw0LjQ1LDUuMjksNS4xNWw4LjQ3LDEuNTVjOC4xMiwxLjU1LDEwLjgsNS43OSwxMC44LDEwLjg3LDAsOS40Ni02LjQyLDE3LjcyLTIwLjc1LDE3LjcyLTExLjQ0LDAtMTguMTQtNS4wMS0xNi4yNC0xNS44OGg4LjRjLTEuMDYsNiwyLjE5LDguNTQsOC41NCw4LjU0czExLjE1LTIuNDcsMTEuMTUtOC40N2MwLTIuNC0xLjU1LTQuMzgtNS4yOS01LjA4aDBaIi8+CiAgPHBhdGggZD0iTTMzMS4xOSw4OS4yOGgtMjEuMzJsLTMuNjcsMjEuMDRoLTguNGw4LjY4LTQ5LjQxaDguNGwtMy43NCwyMS4wNGgyMS4zMmwzLjc0LTIxLjA0aDguNGwtOC42OCw0OS40MWgtOC40czMuNjctMjEuMDQsMy42Ny0yMS4wNFoiLz4KICA8cGF0aCBkPSJNMzEuODgsMzQuMTFjNC43NywxMy4yMiwxOS4zNywyMC4wNiwzMi41OCwxNS4yOSwxMy4yMi00Ljc4LDIwLjA2LTE5LjM2LDE1LjI5LTMyLjU4Qzc0Ljk3LDMuNTksNjAuMzgtMy4yNSw0Ny4xNiwxLjUyYy0xMy4yMiw0Ljc4LTIwLjA2LDE5LjM3LTE1LjI5LDMyLjU5aC4wMVoiIGZpbGw9IiMwMDcyY2UiLz4KICA8cGF0aCBkPSJNMTEuMzEsNzcuNDJjLTQuOTksOC44NC0xLjg4LDIwLjA1LDYuOTYsMjUuMDQsOC44NCw1LDIwLjA1LDEuODgsMjUuMDUtNi45NSw0Ljk5LTguODQsMS44OC0yMC4wNS02Ljk2LTI1LjA0LTguODQtNC45OS0yMC4wNS0xLjg4LTI1LjA0LDYuOTZoMFoiIGZpbGw9IiMwMDcyY2UiLz4KICA8cGF0aCBkPSJNLjIxLDQ1LjYyYy0xLjE2LDUuNzYsMi41NywxMS4zNyw4LjMzLDEyLjU0LDUuNzYsMS4xNiwxMS4zNy0yLjU2LDEyLjUzLTguMzIsMS4xNy01Ljc2LTIuNTYtMTEuMzgtOC4zMi0xMi41NC01Ljc2LTEuMTctMTEuMzcsMi41Ni0xMi41NCw4LjMyWiIgZmlsbD0iIzAwNzJjZSIvPgogIDxnPgogICAgPHBhdGggZD0iTTgxLDE0MC42M2MtLjM5LDMuNTItMi43Niw2LjYxLTEwLjQxLDYuNjEtNi43NCwwLTkuMDEtMi42Mi05LjAxLTUuNywwLS4zLjA0LS42OS4wOS0xLjA3bDIuMDYtMTYuNDdjLjQ0LTMuNTIsMi43MS02LjYxLDEwLjM3LTYuNjEsNi42OSwwLDkuMDEsMi41Nyw5LjAxLDUuNywwLC4zLS4wNC42OS0uMDksMS4wN2wtLjIyLDEuOTNjLS4wOS42LS4zMS44Ni0uODcuODZoLTIuNThjLS42MSwwLS43OS0uMzQtLjctLjg2bC4xNy0xLjI0Yy4wNC0uMjYuMDQtLjYuMDQtLjgyLDAtMS45My0xLjQ0LTMuMDktNS4wMy0zLjA5LTMuOTQsMC01LjYsMS40Mi01LjkxLDMuNzNsLTEuODgsMTUuMDZjLS4wNC4zLS4wNC42LS4wNC44MiwwLDEuOTcsMS40NCwzLjEzLDQuOTksMy4xMywzLjk0LDAsNS42OS0xLjQyLDUuOTUtMy43M2wuMjItMi4wMmMuMDQtLjU2LjMxLS44Mi45Mi0uODJoMi41NGMuNjYsMCwuNzQuMzQuNy44MmwtLjMxLDIuN1oiLz4KICAgIDxwYXRoIGQ9Ik05OC42OCwxMTcuNzNjLjU3LDAsLjgzLjI2LjkyLjgxbDUuMDgsMjcuNTRjLjA5LjUxLS4xMy44Mi0uNy44MmgtMi43MWMtLjU3LDAtLjgzLS4zLS45Mi0uODJsLTEuMTgtNi42NWgtOS4yM2wtMi44OSw2LjY1Yy0uMjIuNTEtLjQ0LjgyLTEuMDUuODJoLTIuNTRjLS42MSwwLS43NC0uMy0uNTMtLjgybDExLjktMjcuNTRjLjI2LS41Ni41Ny0uODEsMS4xNC0uODFoMi43MVpNOTcuMTksMTI4LjI4Yy0uMzUtMS44NC0uNDQtNi4zNS0uNDQtNi4zNS0uMTMuMzktMS4yMyw0LjU1LTEuOTcsNi4yNmwtMy40Niw3Ljg5aDcuMzFsLTEuNDQtNy44MVoiLz4KICAgIDxwYXRoIGQ9Ik0xMjcuNjQsMTQwLjYzYy0uNCwzLjUyLTIuNzYsNi42MS0xMC40MSw2LjYxLTYuNzQsMC05LjAxLTIuNjItOS4wMS01LjcsMC0uMy4wNC0uNjkuMDktMS4wN2wyLjA2LTE2LjQ3Yy40NC0zLjUyLDIuNzEtNi42MSwxMC4zNy02LjYxLDYuNywwLDkuMDEsMi41Nyw5LjAxLDUuNywwLC4zLS4wNC42OS0uMDksMS4wN2wtLjIyLDEuOTNjLS4wOS42LS4zMS44Ni0uODguODZoLTIuNThjLS42MSwwLS43OS0uMzQtLjctLjg2bC4xNy0xLjI0Yy4wNC0uMjYuMDQtLjYuMDQtLjgyLDAtMS45My0xLjQ0LTMuMDktNS4wMy0zLjA5LTMuOTQsMC01LjYsMS40Mi01LjkxLDMuNzNsLTEuODgsMTUuMDZjLS4wNC4zLS4wNC42LS4wNC44MiwwLDEuOTcsMS40NCwzLjEzLDQuOTksMy4xMywzLjk0LDAsNS42OS0xLjQyLDUuOTUtMy43M2wuMjItMi4wMmMuMDQtLjU2LjMxLS44Mi45Mi0uODJoMi41NGMuNjYsMCwuNzQuMzQuNy44MmwtLjMxLDIuN1oiLz4KICAgIDxwYXRoIGQ9Ik0xMzguNDMsMTI5Ljg2aDExLjMzbDEuNC0xMS4yOGMuMDktLjYuMzUtLjg2Ljk2LS44NmgyLjY3Yy41NywwLC43NC4yNi42Ni44NmwtMy40NiwyNy40NWMtLjA5LjYtLjI2Ljg2LS44My44NmgtMi42N2MtLjYxLDAtLjgzLS4zLS43NC0uODZsMS41Ny0xMi42MWgtMTEuMzNsLTEuNjIsMTIuNjFjLS4wOS41Ni0uMjYuODYtLjg4Ljg2aC0yLjY3Yy0uNTcsMC0uODMtLjI2LS43NC0uODZsMy40Ni0yNy40NWMuMDktLjYuMzUtLjg2LjkyLS44NmgyLjY3Yy42MSwwLC43OS4yNi43Ljg2bC0xLjQsMTEuMjhaIi8+CiAgICA8cGF0aCBkPSJNMTU5LjI0LDE0Ni44OWMtLjU3LDAtLjgzLS4yNi0uNzQtLjg2bDMuNDYtMjcuNDVjLjA5LS42LjM1LS44Ni45Mi0uODZoMTQuOTZjLjU3LDAsLjgzLjIxLjc0LjgxbC0uMjYsMS45M2MtLjA5LjYtLjM1LjgxLS45Mi44MWgtMTEuNDZsLTEuMDksOC42NmgxMC43MmMuNTcsMCwuNzkuMjEuNy44MWwtLjIyLDEuODRjLS4wOS41Ni0uMzUuODItLjkyLjgyaC0xMC43MmwtMS4yNyw5LjkxaDExLjk0Yy42MSwwLC44OC4xNy43OS43N2wtLjI2LDEuOTdjLS4wOS42LS4zMS44Mi0uOTIuODJoLTE1LjQ0WiIvPgogIDwvZz4KPC9zdmc+" width="69.23076923076923" height="30" preserveAspectRatio="none" transform="translate(-34.61538461538461,-30.5)"/></g><g class="image-shape default" id="my-svg-flowchart-envoyHttp-12" data-look="classic" transform="translate(850.37109375, 705.9352035522461)"><g transform="translate(0,-15.5)"><path d="M-21.12 -16 L21.12 -16 L21.12 16 L-21.12 16" stroke="none" stroke-width="0" fill="#e3eefc"/><path d="M-21.12 -16 C-6.665912155222214 -16, 7.7881756895555725 -16, 21.12 -16 M-21.12 -16 C-4.937722342089316 -16, 11.24455531582137 -16, 21.12 -16 M21.12 -16 C21.12 -8.001492931237241, 21.12 -0.0029858624744818485, 21.12 16 M21.12 -16 C21.12 -9.480516797022702, 21.12 -2.9610335940454053, 21.12 16 M21.12 16 C9.61400415205834 16, -1.8919916958833198 16, -21.12 16 M21.12 16 C6.786317850842627 16, -7.547364298314747 16, -21.12 16 M-21.12 16 C-21.12 4.814776293023371, -21.12 -6.370447413953258, -21.12 -16 M-21.12 16 C-21.12 4.6808012119085785, -21.12 -6.638397576182843, -21.12 -16" stroke="#1d4ed8" stroke-width="1.3" fill="none" stroke-dasharray="0 0"/></g><g class="label" style="color:#1f2328 !important" transform="translate(0,8.5)"><rect/><g style="fill:#1f2328 !important"><rect class="background" style="stroke: none" x="-98.7109375" y="-1" width="197.421875" height="23"/><text y="-10.1"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Envoy</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> Gateway</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (HTTPS)</tspan></tspan></text></g></g><g><path d="M-98.7109375 -31.5 L98.7109375 -31.5 L98.7109375 31.5 L-98.7109375 31.5" stroke="none" stroke-width="0" fill="none"/></g><image href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHJvbGU9ImltZyIgdmlld0JveD0iLTQuMjEgNDkuNTQgNDM5LjkyIDMzMi42NyI+PHN0eWxlPnN2ZyB7ZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCA0MzIgNDMyfTwvc3R5bGU+PHBhdGggZmlsbD0iI2IzMWFhYiIgZD0iTTEwOS44IDIxMC42bC42IDI1LjQgMjYuOCAxNi42LS42LTI1LjR6bTY1LjQgMTA1LjhsLS42LTI0LjktMjMuNS0xNC42Yy0uMy0uMi0uNy0uNS0xLS43bC42IDI1IDI0LjUgMTUuMnpNOTEuNSAzNTBsLTYxLjMtMzgtMS41LTYzLjcgMzAuMS0xMy0uNi0yNS41LTQ4IDIwLjdjLTMuNyAxLjYtNS45IDUtNS44IDguOWwxLjggNzYuNWMuMSAzLjkgMi41IDcuOCA2LjMgMTAuMkw4NiAzNzEuN2MzLjQgMi4xIDcuNiAyLjcgMTEgMS42LjQtLjEuNy0uMiAxLS40bDQ1LjEtMTkuNC0yNC41LTE1LjJMOTEuNSAzNTB6Ii8+PHBhdGggZmlsbD0iI2QxNjNjZSIgZD0iTTI4OS42IDIwOS4xYy0uMS00LjYtMi45LTkuMS03LjMtMTEuOUwxOTMgMTQxLjlsLTIuOCAxLjIuNiAyNi44IDcwLjcgNDMuOCAxLjcgNzEuNiAyNyAxNi43IDEuNS0uNi0yLjEtOTIuM3pNMTgyLjcgMzM0LjhsLTgyLjktNTEuNC0yLTg2LjMgMzcuOC0xNi4zLS43LTI5LjctNTguNyAyNS4zYy00LjMgMS45LTYuOSA1LjgtNi44IDEwLjRMNzEuNyAyODhjLjEgNC42IDIuOSA5LjEgNy4zIDExLjhsOTcuMiA2MC4zYzQgMi41IDguOCAzLjEgMTIuOSAxLjkuNC0uMS44LS4zIDEuMi0uNWw1Ny40LTI0LjctMjguNi0xNy43LTM2LjQgMTUuN3oiLz48cGF0aCBmaWxsPSIjZTEzZWFmIiBkPSJNNDE1LjkgMTM4LjNMMjkxLjMgNjFjLTQuNi0yLjgtMTAuMS0zLjYtMTQuOC0yLjEtLjUuMS0uOS4zLTEuNC41bC0xMjEuNiA1Mi40Yy00LjkgMi4xLTcuOSA2LjYtNy44IDExLjlsMy4xIDEyOS42Yy4xIDUuMyAzLjMgMTAuNCA4LjQgMTMuNUwyODEuOCAzNDRjNC42IDIuOCAxMC4xIDMuNiAxNC43IDIuMS41LS4xLjktLjMgMS40LS41bDEyMS42LTUyLjRjNC45LTIuMSA3LjktNi43IDcuOC0xMS45bC0zLTEyOS42Yy0uMS01LjEtMy4zLTEwLjMtOC40LTEzLjR6TTI4OS4zIDMxNS4yTDE4MSAyNDguMWwtMi43LTExMi43IDEwNS42LTQ1LjVMMzkyLjIgMTU3bDIuNyAxMTIuNy0xMDUuNiA0NS41eiIvPjwvc3ZnPg==" width="42.24" height="32" preserveAspectRatio="none" transform="translate(-21.12,-31.5)"/></g><g class="image-shape default" id="my-svg-flowchart-cloudflare-14" data-look="classic" transform="translate(850.37109375, 811.9352035522461)"><g transform="translate(0,-15.5)"><path d="M-41.433526011560694 -14.000000000000002 L41.433526011560694 -14.000000000000002 L41.433526011560694 14.000000000000002 L-41.433526011560694 14.000000000000002" stroke="none" stroke-width="0" fill="#e3eefc"/><path d="M-41.433526011560694 -14.000000000000002 C-24.271931241868618 -14.000000000000002, -7.110336472176542 -14.000000000000002, 41.433526011560694 -14.000000000000002 M-41.433526011560694 -14.000000000000002 C-22.8556455844085 -14.000000000000002, -4.2777651572563045 -14.000000000000002, 41.433526011560694 -14.000000000000002 M41.433526011560694 -14.000000000000002 C41.433526011560694 -7.616719272489104, 41.433526011560694 -1.2334385449782062, 41.433526011560694 14.000000000000002 M41.433526011560694 -14.000000000000002 C41.433526011560694 -4.226534145822514, 41.433526011560694 5.546931708354974, 41.433526011560694 14.000000000000002 M41.433526011560694 14.000000000000002 C13.61551215679657 14.000000000000002, -14.202501697967556 14.000000000000002, -41.433526011560694 14.000000000000002 M41.433526011560694 14.000000000000002 C21.631706656497173 14.000000000000002, 1.8298873014336507 14.000000000000002, -41.433526011560694 14.000000000000002 M-41.433526011560694 14.000000000000002 C-41.433526011560694 4.303281095048817, -41.433526011560694 -5.393437809902368, -41.433526011560694 -14.000000000000002 M-41.433526011560694 14.000000000000002 C-41.433526011560694 7.293345540728298, -41.433526011560694 0.5866910814565944, -41.433526011560694 -14.000000000000002" stroke="#1d4ed8" stroke-width="1.3" fill="none" stroke-dasharray="0 0"/></g><g class="label" style="color:#1f2328 !important" transform="translate(0,6.500000000000002)"><rect/><g style="fill:#1f2328 !important"><rect class="background" style="stroke: none" x="-116.5078125" y="-1" width="233.015625" height="23"/><text y="-10.1"><tspan class="text-outer-tspan row" x="0" y="-0.1em" dy="1.1em"><tspan font-style="normal" class="text-inner-tspan" font-weight="normal">Cloudflare</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> (CDN,</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> DNS</tspan><tspan font-style="normal" class="text-inner-tspan" font-weight="normal"> proxy)</tspan></tspan></text></g></g><g><path d="M-116.5078125 -29.5 L116.5078125 -29.5 L116.5078125 29.5 L-116.5078125 29.5" stroke="none" stroke-width="0" fill="none"/></g><image href="data:image/png;base64,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zUySBPwTwFPD+OQ//xhpITwCA1auVPKCnYalslo9BoXBDZVysNCyChYvAeRgRTNFEgiIwDYB2aEZEgiDQAGv0mttZLg8a9xUPOBnx0Y6eVmGly0u5ghAXtY28yQB/wQ4AdA/Q1oIj0BXd9+eVyw7elg9c9xoXMYqOS7MZ+Un7ADkc8UzaxIgARLIGoH2tVrVCrekCpa6zW1ZHusxEvIOOwB5XPPMmQQMCdil1L/+1DBjqqeQwGK3dwJ0zx77Lcxh4SWsmpVaUYXX2QGoAcKvJEACLgTWwQtRWUggyQRs9aRreLZ1oeuynC7oU+7+kB2AnK58pk0CJEACmSJgqfud8umePW4y6jdxWpbjuqVKdS9iByDHWwBTJwFtAssURlBZSCC5BFpb1Uyn6Cxbne9Un+c6/DO/ZR35Qic7AHneCpg7CWgSsEpqlaYq1UggDgKvWmer5fWO7d+PHY5rV2Pr6/P+G0zmCwN2APK+JTB/EiABEkg5AZzl3+WUQne3+r5TPeusecKAHQBuCSRAAroE3tRVpB4JREmgrNRv6/3J2ystZZ1UX8/fShXLHT0dJnYAuDWQAAloEcDeVN6cxkICiSKA69kf91eq14t9umaPm4hAhyQq2GQE8xGu//c8L4GPAk7GCmEUJJB4Ap0t6uQ+XT0vW9kYwVYSHzADzDoBmZi6AjeoHoM5Kr22xz4tbS+Uu9sfxVssBxXs3suzDqd3fhaulNirirb1rd7LWEMCJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACJEACeSJgBZys2BsB6bPGrvxeBvlozW9+RE9gMFwOhNhrXJfx+S5EPllIgARIgARySsBvB2AHcJsE2RuyC6Q/xK28hwV/gfwRci/kHUhU5Wg46tRwVoTOM5CXNXSTqDIMQX0VcgBkd4h0xtxKBxbMhzwMuQvyNKTaScDX0ItsKwdBdHwWoPcB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" width="82.86705202312139" height="28.000000000000004" preserveAspectRatio="none" transform="translate(-41.433526011560694,-29.5)"/></g></g></g></g><defs><filter id="my-svg-drop-shadow" height="130%" width="130%"><feDropShadow dx="4" dy="4" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><defs><filter id="my-svg-drop-shadow-small" height="150%" width="150%"><feDropShadow dx="2" dy="2" stdDeviation="0" flood-opacity="0.06" flood-color="#000000"/></filter></defs><text text-anchor="middle" x="820.45703125" y="-25" class="flowchartTitleText">PID Polohy – poskytování dat</text></svg>
@@ -0,0 +1,105 @@
1
+ # Architektura PID Polohy
2
+
3
+ PID Polohy je souhrnné označení služeb datové platformy [Golemio](https://golemio.cz/) (provozuje Operátor ICT, a.s.), které přijímají, zpracovávají a publikují data Pražské integrované dopravy: polohy vozidel v reálném čase (RT), jízdní řády (GTFS), odjezdové a přestupní tabule, výluky a infotexty. Doménovou logiku obsahuje modul `@golemio/pid` (tento repozitář). Modul běží v dedikovaných službách Polohy vozidel (VP): VP Input Gateway, VP Integration Engine, VP Output Gateway a URL Proxy. Data Proxy a TCP Input Gateway, které přijímají RT data, modul neobsahují. Tyto služby využívají i sdílené části platformy Golemio, zejména přístupovou vrstvu, frontu RabbitMQ a monitoring.
4
+
5
+ Stránka obsahuje tři diagramy: kontext a dva pohledy na komponenty platformy (příjem a zpracování dat, poskytování dat). Kontextový diagram zobrazuje Golemio jako jeden celek; diagramy 2 a 3 tento celek rozkreslují na stranu příjmu a zpracování a stranu poskytování dat, které sdílejí jen PostgreSQL a Valkey. Názvy komponent odpovídají [architektuře platformy Golemio](https://operator-ict.gitlab.io/golemio/documentation/cs/architektura/architektura/) a [architektuře systému](https://operator-ict.gitlab.io/golemio/documentation/cs/architektura/architektura-systemu/): vstupní rozhraní (Input Gateway), přístupová vrstva (Access Proxy), fronta (RabbitMQ), integrační vrstva (Integration Engine), databázová vrstva, výstupní rozhraní (Output Gateway) a správa časově řízených úkonů (Cron Tasks).
6
+
7
+ Zdrojem pravdy jsou textové soubory Mermaid (`*.mmd`) v adresáři [`diagrams/`](./diagrams/). Obrázky `*.svg` se z nich generují (viz [Úprava a vykreslení diagramů](#úprava-a-vykreslení-diagramů)).
8
+
9
+ ## Legenda
10
+
11
+ | Prvek | Význam |
12
+ | --- | --- |
13
+ | Červený rámeček | Externí zdroj dat (vozidla, systémy dopravců, ROPID, VYMI, Tabulátor, statická data) |
14
+ | Oranžový rámeček | Zprostředkující systém (MPVnet) |
15
+ | Modrý rámeček | Komponenta platformy Golemio (vč. použitých cloudových služeb) |
16
+ | Šedý válec nebo šedý uzel | Úložiště dat (databáze, cache, úložiště souborů) |
17
+ | Světle šedá oblast s nadpisem | Seskupení prvků (vrstva, skupina zdrojů nebo odběratelů) |
18
+ | Zelený rámeček | Odběratel dat |
19
+ | Plná šipka | Odesílatel data aktivně posílá (push) |
20
+ | Přerušovaná šipka | Příjemce si data sám stahuje (pull), např. dotazem na API nebo čtením z úložiště |
21
+ | Obousměrná plná šipka | Čtení i zápis (např. Integration Engine a databáze) |
22
+ | Směr šipky | Směr toku dat (ne směr navázání spojení); výjimkou je šipka s popiskem „retence“, která značí mazání starých dat |
23
+ | Popisek šipky | Protokol a formát (např. `TCP XML`, `HTTP JSON`, `GTFS-RT`) nebo název dat |
24
+ | Logo | Technologie nebo organizace, které prvek patří; vlastníci a zdroje log viz [README log](../assets/logos/README.md) |
25
+
26
+ ## 1. Kontextový diagram
27
+
28
+ [![Kontextový diagram PID Polohy](./diagrams/context.svg)](./diagrams/context.svg)
29
+
30
+ Zdroj: [`diagrams/context.mmd`](./diagrams/context.mmd)
31
+
32
+ Vozidla posílají polohy do palubních a dispečerských systémů dopravců. Autobusy mimo DPP (včetně Arriva City), vlaky a přívozy jdou přes servery dopravců a telematiky (Mikroelektronika, Telmax, ČD Telematika a další) do systému MPVnet (ROPID, dodavatel CHAPS), který je Golemiu předává po HTTP. Data tramvají z dispečinku DORIS a autobusů a trolejbusů z dispečinku AUDIS DPP posílá po TCP přímo Golemiu, které je přeposílá do MPVnetu. Data metra přicházejí do MPVnetu po UDP a jeho proxy je Golemiu předává po TCP (metro totiž posílá UDP jumbo pakety, které nepřijmou běžní cloudoví poskytovatelé). Statická data (GTFS, CIS a oběhy z ROPID FTPS, kolejové obvody metra, ukazatele směru), popis vozidel ze Seznamu autobusů, události a infotexty z VYMI a logy požadavků na presety tabulí z Grafana Loki si Golemio stahuje. VYMI navíc změny aktivně posílá. Presety odjezdových tabulí posílá aplikace Tabulátor při každé změně. Výstupy odebírají odjezdové a přestupní tabule, Mapa PID, aplikace PID Lítačka, Google Maps, Jízdní řády Seznam.cz (dříve PubTran), Škoda Citymove nebo Catch (GTFS-RT), dále také interní aplikace (GTFS data odebírají VYMI i Tabulátor). Logy odjezdových tabulí se také posílají na dohledové centrum ROPID (DCIP). Přímá integrace TCP zpráv Telmax (Arriva City) v kódu existuje, ale v produkci je vypnutá.
33
+
34
+ ## 2. Příjem a zpracování dat
35
+
36
+ [![Příjem a zpracování dat](./diagrams/platform-ingestion.svg)](./diagrams/platform-ingestion.svg)
37
+
38
+ Zdroj: [`diagrams/platform-ingestion.mmd`](./diagrams/platform-ingestion.mmd)
39
+
40
+ RT data přijímá Data Proxy (TCP toky jdou přes Envoy Gateway). TCP zprávy předává do TCP Input Gateway a toky tramvají a autobusů DPP zároveň přeposílá do MPVnetu. HTTP zprávy předává přes Access Proxy do VP Input Gateway, kam posílá změny i VYMI a presety odjezdových tabulí Tabulátor. Vstupní brány ukládají surová data do Azure Table Storage (TCP) a Azure Blob Storage (HTTP) a zprávy posílají do RabbitMQ (exchange `vehicle-positions`), kam služba [Cron Tasks](https://gitlab.com/operator-ict/golemio/code/cron-tasks) posílá i časově řízené úlohy. Workery modulu pid ve VP Integration Engine zprávy zpracovávají, stahují data z ROPID FTPS, Seznamu autobusů, VYMI, Blob Storage (statická data) a Grafana Loki a výsledky ukládají do PostgreSQL (s PostGIS) a Valkey (Redis API). Surová TCP data starší než měsíc maže z Azure Table Storage retenční task. Workery, tasky a fronty popisuje [implementační dokumentace](../implementation_documentation.md#zpracování-dat-transformace), párování na spoje, určení stavu vozidla a výpočet zpoždění [dokumentace zpracování RT dat](../processing/index.md).
41
+
42
+ ## 3. Poskytování dat
43
+
44
+ [![Poskytování dat](./diagrams/platform-serving.svg)](./diagrams/platform-serving.svg)
45
+
46
+ Zdroj: [`diagrams/platform-serving.mmd`](./diagrams/platform-serving.mmd)
47
+
48
+ VP Output Gateway čte z PostgreSQL a z Valkey (cache, GTFS-RT feedy, pub/sub) a vybrané endpointy cachuje Varnish. Požadavky odběratelů procházejí přes Cloudflare, Envoy Gateway a Access Proxy, která ověřuje API klíče a role spravované v Permission Management, API Key Management a Admin panelu. Stejnou přístupovou vrstvu sdílejí ostatní služby Golemio. URL Proxy překládá krátké URL odjezdových tabulí (presety z PostgreSQL) na volání API. Po vygenerování GTFS-RT feedů maže VP Integration Engine jejich cache v Cloudflare. Endpointy popisuje [OpenAPI výstupního API](../openapi-output.yaml), klíče ve Valkey [dokumentace cache](../cache/index.md).
49
+
50
+ ## Běhové prostředí a monitoring
51
+
52
+ Tyto části platformy se týkají všech služeb, proto nejsou zakreslené v diagramech.
53
+
54
+ - <img src="../assets/logos/azure-kubernetes-service.svg" alt="" height="20"> **Azure Kubernetes Service:** všechny služby běží jako kontejnery v Kubernetes.
55
+ - <img src="../assets/logos/nodejs.svg" alt="" height="20"> <img src="../assets/logos/typescript.svg" alt="" height="20"> **Node.js, TypeScript:** runtime a jazyk aplikačních služeb.
56
+ - <img src="../assets/logos/grafana.svg" alt="" height="20"> <img src="../assets/logos/grafana-loki.png" alt="" height="20"> **Grafana, Loki, Tempo, Azure Managed Prometheus:** služby posílají logy (Loki), trasování (Tempo) a metriky (Azure Managed Prometheus), Grafana je zobrazuje.
57
+
58
+ ## Použité technologie
59
+
60
+ | Technologie | Použití |
61
+ | --- | --- |
62
+ | Node.js, TypeScript | runtime a jazyk všech služeb (Input Gateway, Integration Engine, Output Gateway, Data Proxy, URL Proxy, Access Proxy) |
63
+ | RabbitMQ | fronta zpráv mezi vstupními branami, Cron Tasks a Integration Engine (AMQP) |
64
+ | PostgreSQL + PostGIS | hlavní databáze modulu pid (schéma `pid`); provozováno v Kubernetes (CloudNativePG) |
65
+ | Valkey (Redis API) | cache pro zpracování RT dat, výstupní cache, GTFS-RT soubory, pub/sub |
66
+ | Azure Blob Storage, Azure Table Storage | archiv surových vstupních dat, soubory statických dat |
67
+ | Azure Kubernetes Service | běhové prostředí všech služeb (kontejnery) |
68
+ | Envoy Gateway | ingress do clusteru (HTTP i TCP) |
69
+ | Cloudflare | CDN a DNS proxy před veřejným API; modul po vygenerování GTFS-RT feedů maže jejich cache |
70
+ | Varnish | HTTP cache před vybranými endpointy VP Output Gateway |
71
+ | Grafana, Loki, Tempo, Azure Managed Prometheus | monitoring: dashboardy, logy, trasování, metriky; z Loki modul navíc čte logy požadavků URL Proxy |
72
+ | GTFS, GTFS Realtime (Protocol Buffers) | formát jízdních řádů a RT výstupů |
73
+
74
+ ## Související dokumentace
75
+
76
+ - [Implementační dokumentace](../implementation_documentation.md): vstupní data, workery, tasky, fronty, tabulky, endpointy
77
+ - [Zpracování RT dat](../processing/index.md): vstupní formáty podle zdroje, určení stavu a polohy, párování na GTFS, trip context
78
+ - [Cache](../cache/index.md): Redis (Valkey), in-memory a PostgreSQL cache
79
+ - [Integrace VYMI (JIS)](../jis/index.md): události a infotexty
80
+ - [OpenAPI výstupního API](../openapi-output.yaml), [OpenAPI vstupního API](../openapi-input.yaml), [AsyncAPI](../asyncapi.yaml)
81
+ - ERD diagramy databáze: [GTFS JŘ](../assets/pid_scheduled_erd.png), [předpočítané tabulky](../assets/pid_precomputed_erd.png), [presety a statická data](../assets/pid_preset_logs_and_static_erd.png), [polohy vozů (tabulky)](../assets/pid_vp_erd.png), [polohy vozů (pohledy)](../assets/pid_vp_view_erd.png), [historie spojů](../assets/pid_vp_st_hist_erd.png), [popis vozidel](../assets/pid_vp_desc_erd.png), [zastávky RT spojů](../assets/pid_vp_cis_erd.jpg), [JIS](../assets/pid_jis_erd.png)
82
+ - Architektura platformy Golemio: [přehled](https://operator-ict.gitlab.io/golemio/documentation/cs/architektura/architektura/), [architektura systému](https://operator-ict.gitlab.io/golemio/documentation/cs/architektura/architektura-systemu/)
83
+
84
+ ## Úprava a vykreslení diagramů
85
+
86
+ 1. Upravte zdrojový soubor `diagrams/*.mmd` (Mermaid flowchart). Loga se odkazují relativní cestou `../../assets/logos/<soubor>.svg` (nebo `.png`) ve tvaru uzlu `@{ img: ... }`.
87
+ 2. Vykreslete SVG příkazem níže (bash, spustit z kořene repozitáře). Skript v dočasné kopii nahradí cesty k logům data URI, takže výsledné SVG nemá žádné externí odkazy. To je nutné, protože GitLab zobrazuje SVG přes `<img>`, který externí zdroje nenačte. Konfigurace `htmlLabels: false` v hlavičce každého `.mmd` zajistí, že popisky jsou čistý SVG text bez `<foreignObject>`. Zvýšený limit `maxTextSize` je potřeba kvůli vloženým logům (výchozí limit je 50 000 znaků) a nelze ho nastavit v hlavičce `.mmd`, proto se předává přes `-c`.
88
+ 3. Commitněte `.mmd` i vygenerované `.svg`.
89
+
90
+ ```bash
91
+ cd docs/architecture/diagrams
92
+ tmp=$(mktemp -d)
93
+ echo '{"maxTextSize": 1000000}' > "$tmp/config.json"
94
+ for src in *.mmd; do
95
+ cp "$src" "$tmp/$src"
96
+ for logo in $(grep -oE '\.\./\.\./assets/logos/[a-z0-9-]+\.(svg|png)' "$src" | sort -u); do
97
+ case "$logo" in *.svg) mime=image/svg+xml ;; *) mime=image/png ;; esac
98
+ sed -i "s|$logo|data:$mime;base64,$(base64 -w0 "$logo")|g" "$tmp/$src"
99
+ done
100
+ npx -y @mermaid-js/mermaid-cli@11.17.0 -i "$tmp/$src" -o "${src%.mmd}.svg" -b white -c "$tmp/config.json"
101
+ done
102
+ rm -rf "$tmp"
103
+ ```
104
+
105
+ mermaid-cli pro vykreslení používá Chrome přes Puppeteer. Pokud prohlížeč chybí, nainstalujte ho příkazem `npx -y @puppeteer/browsers install chrome-headless-shell@<verze z chybové hlášky>`.
@@ -0,0 +1,38 @@
1
+ # Loga v diagramech architektury
2
+
3
+ Soubory v tomto adresáři jsou loga a ochranné známky jejich vlastníků. **Licence MIT tohoto repozitáře se na ně nevztahuje.** Používají se pouze k označení technologií a organizací v [diagramech architektury](../../architecture/index.md) a jejich použití neznamená, že vlastníci Golemio podporují nebo s ním spolupracují.
4
+
5
+ The files in this directory are logos and trademarks of their respective owners. **The MIT license of this repository does not apply to them.**
6
+
7
+ Každý soubor je převzatý beze změny z oficiálního webu, brand kitu nebo repozitáře vlastníka.
8
+
9
+ | Soubor | Vlastník | Oficiální zdroj | Podmínky použití |
10
+ | --- | --- | --- | --- |
11
+ | `arriva.svg` | ARRIVA TRANSPORT ČESKÁ REPUBLIKA a.s. | <https://arriva.cz/img/logo-arriva.svg> (web <https://arriva.cz/>) | nezveřejněny |
12
+ | `azure-blob-storage.svg` | Microsoft Corporation | [Azure architecture icons](https://learn.microsoft.com/en-us/azure/architecture/icons/), balík V24, `general/10780-icon-service-Blob-Block.svg` | povoleno v architektonických diagramech a dokumentaci |
13
+ | `azure-kubernetes-service.svg` | Microsoft Corporation | [Azure architecture icons](https://learn.microsoft.com/en-us/azure/architecture/icons/), balík V24, `containers/10023-icon-service-Kubernetes-Services.svg` | povoleno v architektonických diagramech a dokumentaci |
14
+ | `azure-table-storage.svg` | Microsoft Corporation | [Azure architecture icons](https://learn.microsoft.com/en-us/azure/architecture/icons/), balík V24, `general/10841-icon-service-Table.svg` | povoleno v architektonických diagramech a dokumentaci |
15
+ | `catch.png` | Vibe Fellows | ikona webu <https://mojemhd.cz/catch-app-icon.png> (web <https://mojemhd.cz/>) | nezveřejněny |
16
+ | `cd-telematika.png` | ČD - Telematika a.s. | <https://www.cdt.cz/static/img/logo-rgb.png> (web <https://www.cdt.cz/>) | nezveřejněny |
17
+ | `ceske-drahy.svg` | České dráhy, a.s. | <https://www.cd.cz/images/rrcd/cd-logo-full.svg> (web <https://www.cd.cz/>) | [brand manuál](https://www.ceskedrahy.cz/pro-media) není veřejně přístupný |
18
+ | `chaps.png` | CHAPS spol. s r.o. | <https://www.chaps.cz/Images/logoPrint.png> (web <https://www.chaps.cz/>) | nezveřejněny |
19
+ | `citymove.png` | ŠKODA AUTO a.s. (ŠKODA X / DigiLab) | logo v záhlaví <https://www.citymove.app/> (`LogoCItymove.png`) | nezveřejněny |
20
+ | `cloudflare.png` | Cloudflare, Inc. | [Press kit](https://www.cloudflare.com/press/press-kit/), balík <https://www.cloudflare.com/logo/>, `CF-Logo 1.png` | [press kit](https://www.cloudflare.com/press/press-kit/): použití loga vyžaduje písemný souhlas |
21
+ | `dpp.svg` | Dopravní podnik hl. m. Prahy, akciová společnost | [Loga ke stažení](https://www.dpp.cz/spolecnost/pro-media/loga-ke-stazeni), `DP_logo_horiz_CMYK.svg` | nezveřejněny |
22
+ | `envoy.svg` | The Linux Foundation (CNCF) | [cncf/artwork](https://github.com/cncf/artwork/tree/main/projects/envoy), `icon/color/envoy-icon-color.svg` | [Linux Foundation trademark usage](https://www.linuxfoundation.org/legal/trademark-usage) |
23
+ | `golemio.svg` | Operátor ICT, a.s. | logo v záhlaví <https://golemio.cz/> | nezveřejněny |
24
+ | `google-maps.svg` | Google LLC | [Google Maps attribution assets](https://developers.google.com/static/maps/documentation/images/Google_Maps_Attribution_Assets.zip), `GoogleMaps_Logo_WithLightOutline.svg` | [Google brand guidelines](https://partnermarketinghub.withgoogle.com/brands/google/branding-guidelines/how-to-show-googles-brand/) |
25
+ | `grafana-loki.png` | Grafana Labs | [grafana/loki](https://github.com/grafana/loki), `docs/sources/logo.png` | [Grafana Labs trademark policy](https://grafana.com/trademark-policy/) |
26
+ | `grafana.svg` | Grafana Labs | [grafana/grafana](https://github.com/grafana/grafana), `public/img/grafana_icon.svg` | [Grafana Labs trademark policy](https://grafana.com/trademark-policy/) |
27
+ | `mikroelektronika.png` | MIKROELEKTRONIKA spol. s r.o. | ikona webu <https://www.mikroelektronika.cz/> (`apple-touch-icon.png`) | nezveřejněny |
28
+ | `nodejs.svg` | OpenJS Foundation | [Node.js branding](https://nodejs.org/en/about/branding), `nodejsDark.svg` | [OpenJS Foundation Trademark Policy](https://trademark-policy.openjsf.org/) |
29
+ | `pid-litacka.svg` | Operátor ICT, a.s. | ikona webu <https://pidlitacka.cz/favicon.svg> | nezveřejněny; obsahuje značku PID (ROPID) |
30
+ | `pid.svg` | ROPID | [Loga PID a ROPID](https://pid.cz/o-systemu/loga-pid-ropid/), balík `Logo-PID.zip`, `logo PID screen.svg` | [pid.cz](https://pid.cz/o-systemu/loga-pid-ropid/): veřejné použití vyžaduje souhlas ROPID |
31
+ | `postgresql.svg` | PostgreSQL Community Association of Canada | [PostgreSQL logo](https://wiki.postgresql.org/wiki/Logo), `PostgreSQL_logo.3colors.svg` | [PostgreSQL trademark policy](https://www.postgresql.org/about/policies/trademarks/) |
32
+ | `rabbitmq.svg` | Broadcom Inc. | [rabbitmq/rabbitmq-website](https://github.com/rabbitmq/rabbitmq-website), `static/img/rabbitmq-logo.svg` | [RabbitMQ trademark guidelines](https://www.rabbitmq.com/trademark-guidelines) |
33
+ | `ropid.svg` | ROPID | [Loga PID a ROPID](https://pid.cz/o-systemu/loga-pid-ropid/), balík `Logo-ROPID.zip`, `logo ROPID screen.svg` | [pid.cz](https://pid.cz/o-systemu/loga-pid-ropid/): veřejné použití vyžaduje souhlas ROPID |
34
+ | `seznam.svg` | Seznam.cz, a.s. | [Loga Seznam.cz](https://o-seznam.cz/ke-stazeni/loga/seznam-cz/), balík `seznam-cz-logo.zip`, `seznam-cz-logo-rgb.svg` | [o-seznam.cz](https://o-seznam.cz/ke-stazeni/loga/seznam-cz/): použití vyžaduje souhlas Seznam.cz |
35
+ | `telmax.png` | TELMAX s.r.o. | <https://www.telmax.eu/assets/img/logo.png> (web <https://www.telmax.eu/>) | nezveřejněny |
36
+ | `typescript.svg` | Microsoft Corporation | [TypeScript branding](https://www.typescriptlang.org/branding/), `ts-logo-128.svg` | podle stránky TypeScript branding |
37
+ | `valkey.svg` | LF Projects, LLC | <https://valkey.io/img/valkey-horizontal.svg> (web <https://valkey.io/>) | [LF Projects trademark policy](https://lfprojects.org/policies/trademark-policy/) |
38
+ | `varnish.svg` | Varnish Software AB | <https://www.varnish.org/images/varnish-cache-logo.svg> (web <https://www.varnish.org/>) | [Varnish Software branding](https://www.varnish-software.com/branding/) |
@@ -0,0 +1,9 @@
1
+ <svg width="172" height="50" viewBox="0 0 172 50" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <g fill="#00becd">
3
+ <path d="M133.876 32.07L125.89 12.96H121.815L131.565 35.818C132.063 37.031 132.801 37.581 133.888 37.581C134.975 37.581 135.788 37.007 136.275 35.821L146.011 12.961H141.913L133.877 32.071L133.876 32.07ZM98.644 21.37V37.58C100.982 37.468 102.369 36.093 102.369 33.844V21.16C102.369 18.022 104.529 15.835 107.617 15.835C109.129 15.835 109.917 16.247 110.917 17.147L113.127 14.51C111.491 13.023 109.879 12.41 107.617 12.41C102.343 12.41 98.657 16.097 98.657 21.37H98.644ZM83.385 21.37V37.58C85.722 37.468 87.109 36.093 87.109 33.844V21.16C87.109 18.022 89.269 15.835 92.357 15.835C93.869 15.835 94.644 16.247 95.657 17.147L97.869 14.51C96.231 13.023 94.619 12.41 92.357 12.41C87.083 12.41 83.397 16.097 83.397 21.37H83.385ZM158.87 12.41C151.647 12.41 146.21 17.822 146.21 24.995C146.21 32.169 151.66 37.581 158.87 37.581C161.946 37.581 164.957 36.419 167.37 34.321L167.807 33.945L167.894 34.507C168.182 36.332 169.557 37.469 171.619 37.569V24.983C171.619 17.923 166.019 12.398 158.883 12.398L158.87 12.41ZM158.87 34.156C153.86 34.156 149.923 30.132 149.923 24.996C149.923 19.859 153.847 15.836 158.871 15.836C163.896 15.836 167.883 19.859 167.883 24.996C167.883 30.132 163.921 34.156 158.873 34.156H158.87ZM65.763 12.41C58.539 12.41 53.103 17.822 53.103 24.995C53.103 32.169 58.553 37.581 65.763 37.581C68.838 37.581 71.849 36.419 74.261 34.321L74.761 33.881L74.787 34.545C74.85 36.307 76.3 37.469 78.512 37.569V24.983C78.512 17.923 72.914 12.398 65.777 12.398L65.765 12.41H65.763ZM65.763 34.156C60.751 34.156 56.815 30.132 56.815 24.996C56.815 19.859 60.739 15.836 65.763 15.836C70.787 15.836 74.773 19.859 74.773 24.996C74.773 30.132 70.813 34.156 65.763 34.156ZM115.54 37.58C117.88 37.468 119.266 36.093 119.266 33.844V12.974H115.541L115.54 37.58ZM117.416 4.82401C116.77 4.8248 116.15 5.08181 115.694 5.53866C115.237 5.99552 114.98 6.61492 114.979 7.26101C114.979 8.59901 116.089 9.624 117.415 9.624C118.041 9.62242 118.641 9.37306 119.083 8.93044C119.526 8.48782 119.775 7.88796 119.777 7.26201C119.777 5.98801 118.69 4.82601 117.415 4.82601L117.416 4.82401ZM27.57 25.758C29.67 26.295 31.582 26.87 33.28 27.445C33.98 28.807 34.62 30.082 35.244 31.395C36.406 31.432 37.606 31.432 38.768 31.345C38.431 30.619 38.093 29.945 37.743 29.207C38.905 29.745 39.993 30.294 41.03 31.044C43.642 30.482 43.63 29.607 42.705 28.744C39.118 25.444 30.045 23.008 25.583 22.009C26.033 22.845 27.27 25.169 27.57 25.744V25.758ZM4.87399 23.533C5.6779 23.3689 6.49216 23.2603 7.31099 23.208C7.88645 22.1473 8.47416 21.0932 9.07399 20.046C5.94999 20.134 4.38799 20.659 3.67399 21.084C2.89999 21.559 3.24999 22.371 4.86399 23.534L4.87399 23.533Z" />
4
+ <path d="M22.483 31.12C18.633 30.343 0.837 25.907 2 21.283C1.65 22.02 1.387 23.67 1.3 24.37C1.2 25.108 1.462 25.945 1.725 26.345C2.425 27.42 3.875 28.37 5.749 29.282C4.373 32.107 0.286 40.968 0.15 45.48C0.1 47.303 0.525 47.39 1.8 46.59C2.175 46.352 2.824 45.802 3.2 45.44C4.012 40.69 7.286 33.642 8.736 30.58C10.561 31.28 12.398 31.93 14.272 32.467C12.585 35.341 7.636 43.352 3.762 46.739C1.712 48.529 0.725 48.629 0 48.291C0.262 48.615 1.65 49.391 2.112 49.601C2.962 50.001 3.612 50.141 4.399 49.827C8.422 48.253 15.021 37.892 17.583 33.367C21.02 34.305 24.12 34.917 27.843 35.393C29.819 38.443 34.555 45.878 38.353 48.928C39.853 50.126 40.679 50.188 41.753 49.676C42.791 49.176 43.353 48.764 43.866 48.326C43.504 48.426 42.891 48.439 41.854 47.802C38.367 45.665 33.094 37.416 32.056 35.866C33.843 36.041 35.58 36.066 37.38 35.991C38.605 38.841 39.83 41.903 40.543 44.927C41.068 45.464 41.78 46.239 42.893 46.889C43.493 47.239 43.679 47.076 43.717 46.426C43.88 43.588 41.53 37.852 40.655 35.69C42.53 35.302 43.467 34.577 43.892 33.402C44.142 32.702 44.592 30.965 44.579 30.128C43.504 35.002 25.519 31.753 22.469 31.14L22.482 31.115L22.483 31.12Z" />
5
+ <path d="M7.79994 25.158C8.78594 25.633 9.80994 26.045 10.8229 26.445C11.3979 25.358 11.9349 24.333 12.5479 23.258C14.0849 23.358 15.7219 23.533 17.4219 23.758C17.9089 22.771 18.3969 21.771 18.8589 20.758C17.3482 20.535 15.8308 20.3602 14.3089 20.234C15.2952 18.5877 16.329 16.9704 17.4089 15.384C18.0235 16.8349 18.669 18.2726 19.3449 19.696C19.9478 18.3703 20.5147 17.0284 21.0449 15.672C19.5449 12.185 17.5449 7.674 16.8579 3.587C16.6699 2.475 16.4949 0.712 17.5319 0C16.8069 0.262 15.4819 1.025 14.9079 1.45C14.2699 1.925 13.9329 2.712 13.9079 3.462C13.8329 5.586 14.9329 8.948 15.9579 11.785C12.8709 16.035 10.2339 20.521 7.78394 25.17L7.79694 25.158H7.79994Z" />
6
+ <path d="M25.008 6.58599C24.695 11.011 21.171 19.946 16.584 28.306C17.534 28.596 18.822 28.932 19.821 29.156C20.564 27.7679 21.2774 26.3643 21.961 24.946C22.897 26.746 23.821 28.446 24.821 30.219C26.184 30.469 27.583 30.681 28.958 30.869C27.871 29.019 24.598 23.195 23.684 21.219C24.5852 19.1859 25.4065 17.1183 26.146 15.021C27.459 17.071 28.833 19.321 30.271 21.857C31.758 22.27 33.221 22.72 34.681 23.232C32.421 19.046 30.008 14.984 27.346 11.035C27.646 9.78499 27.921 8.47199 27.846 7.17299C27.796 6.39799 27.559 5.57299 26.884 5.07299C26.246 4.58599 24.872 3.83599 24.247 3.61099C25.084 4.29799 25.084 5.62299 25.009 6.59799V6.58399L25.008 6.58599Z" />
7
+ <path d="M19.297 7.61C19.471 8.174 20.347 10.536 20.571 11.085C21.147 10.373 21.671 9.748 22.159 9.211C22.409 9.549 22.672 9.899 22.934 10.261C23.222 9.224 23.709 7.301 23.722 6.211C23.735 4.425 23.422 4.101 21.886 5.188C20.923 5.875 20.098 6.738 19.311 7.612H19.298L19.297 7.61ZM18.472 4.774C18.734 5.049 19.009 5.337 19.297 5.661C20.034 4.925 20.821 4.201 21.747 3.701C20.997 2.888 20.197 2.051 19.259 1.451C18.359 0.876003 18.046 0.838003 18.083 2.288C18.108 2.988 18.321 4.088 18.483 4.775H18.471L18.472 4.774Z" />
8
+ </g>
9
+ </svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><defs><linearGradient id="a9c62307-1cd0-400c-911b-17ec6a9110ce" x1="9" y1="15.834" x2="9" y2="5.788" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#32bedd" /><stop offset="0.775" stop-color="#32d4f5" /></linearGradient></defs><title>MsPortalFx.base.images-7</title><g id="f31d214e-f09e-49e3-b3d2-7c5d55682d09"><g><path d="M.5,5.788h17a0,0,0,0,1,0,0v9.478a.568.568,0,0,1-.568.568H1.068A.568.568,0,0,1,.5,15.266V5.788A0,0,0,0,1,.5,5.788Z" fill="url(#a9c62307-1cd0-400c-911b-17ec6a9110ce)" /><path d="M1.071,2.166H16.929a.568.568,0,0,1,.568.568V5.788a0,0,0,0,1,0,0H.5a0,0,0,0,1,0,0V2.734A.568.568,0,0,1,1.071,2.166Z" fill="#0078d4" /><rect x="2.328" y="7.049" width="6.281" height="3.408" rx="0.283" fill="#0078d4" /><rect x="9.336" y="7.049" width="6.281" height="3.408" rx="0.283" fill="#fff" /><rect x="2.296" y="11.128" width="6.281" height="3.408" rx="0.283" fill="#0078d4" /><rect x="9.304" y="11.128" width="6.281" height="3.408" rx="0.283" fill="#0078d4" /></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg id="af6a2c42-bd48-4857-a479-aecf8b3de4f6" xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><defs><linearGradient id="b70c9cf1-bab8-47e0-bbdb-ce1cd664d268" x1="2.94" y1="3.74" x2="8.67" y2="3.74" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b77af4" /><stop offset="1" stop-color="#773adc" /></linearGradient><linearGradient id="beb69953-bd96-4515-8843-ac12546af936" x1="9.13" y1="3.79" x2="14.85" y2="3.79" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b77af4" /><stop offset="1" stop-color="#773adc" /></linearGradient><linearGradient id="a39c76e8-547e-4eb4-bc25-d81c0f8cda62" x1="0.01" y1="9.12" x2="5.73" y2="9.12" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b77af4" /><stop offset="1" stop-color="#773adc" /></linearGradient><linearGradient id="f0a2a491-17dc-4bb8-bbfc-ee58a5cf47da" x1="6.18" y1="9.08" x2="11.9" y2="9.08" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b77af4" /><stop offset="1" stop-color="#773adc" /></linearGradient><linearGradient id="efc6a56d-8585-417d-931a-1dac2114ccd0" x1="12.35" y1="9.13" x2="18.08" y2="9.13" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b77af4" /><stop offset="1" stop-color="#773adc" /></linearGradient><linearGradient id="e399aa93-341f-4df2-9c02-603b82b484c2" x1="2.87" y1="14.56" x2="8.6" y2="14.56" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b77af4" /><stop offset="1" stop-color="#773adc" /></linearGradient><linearGradient id="a152bba0-ba2b-483a-b8c1-0ae7de355990" x1="9.05" y1="14.6" x2="14.78" y2="14.6" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#b77af4" /><stop offset="1" stop-color="#773adc" /></linearGradient></defs><title>Icon-compute-23</title><polygon points="5.8 1.22 2.94 1.75 2.94 5.65 5.8 6.26 8.67 5.11 8.67 2.2 5.8 1.22" fill="url(#b70c9cf1-bab8-47e0-bbdb-ce1cd664d268)" /><path d="M5.91,6.2,8.53,5.14A.2.2,0,0,0,8.65,5V2.36a.21.21,0,0,0-.13-.18l-2.65-.9H5.75l-2.6.48A.2.2,0,0,0,3,1.94V5.47a.19.19,0,0,0,.15.19l2.63.55A.32.32,0,0,0,5.91,6.2Z" fill="none" /><path d="M2.94,1.75v3.9l2.89.61v-5Zm1.22,3.6-.81-.16v-3l.81-.13Zm1.26.23-.93-.15V2l.93-.16Z" fill="#341a6e" /><polygon points="11.99 1.27 9.13 1.8 9.13 5.7 11.99 6.31 14.85 5.15 14.85 2.25 11.99 1.27" fill="url(#beb69953-bd96-4515-8843-ac12546af936)" /><path d="M9.13,1.8V5.7L12,6.31v-5Zm1.21,3.6-.81-.16v-3l.81-.13Zm1.26.23-.93-.15V2.05l.93-.17Z" fill="#341a6e" /><polygon points="2.87 6.6 0.01 7.13 0.01 11.03 2.87 11.64 5.74 10.49 5.74 7.58 2.87 6.6" fill="url(#a39c76e8-547e-4eb4-bc25-d81c0f8cda62)" /><path d="M0,7.13V11l2.89.61v-5Zm1.21,3.61-.81-.17v-3l.81-.14ZM2.48,11l-.93-.15V7.38l.93-.16Z" fill="#341a6e" /><polygon points="9.04 6.56 6.18 7.09 6.18 10.99 9.04 11.61 11.9 10.45 11.9 7.54 9.04 6.56" fill="url(#f0a2a491-17dc-4bb8-bbfc-ee58a5cf47da)" /><path d="M6.18,7.09V11l2.88.61v-5ZM7.39,10.7l-.81-.17v-3l.81-.14Zm1.26.22-.93-.15V7.34l.93-.16Z" fill="#341a6e" /><polygon points="15.21 6.61 12.35 7.14 12.35 11.04 15.21 11.65 18.08 10.5 18.08 7.59 15.21 6.61" fill="url(#efc6a56d-8585-417d-931a-1dac2114ccd0)" /><path d="M12.35,7.14V11l2.89.61v-5Zm1.22,3.61-.81-.17v-3l.81-.14Zm1.26.22-.93-.15V7.39l.93-.16Z" fill="#341a6e" /><polygon points="5.73 12.04 2.87 12.56 2.87 16.46 5.73 17.08 8.6 15.92 8.6 13.02 5.73 12.04" fill="url(#e399aa93-341f-4df2-9c02-603b82b484c2)" /><path d="M5.84,17,8.45,16a.18.18,0,0,0,.12-.18v-2.6A.2.2,0,0,0,8.44,13L5.8,12.1a.17.17,0,0,0-.12,0l-2.6.47a.19.19,0,0,0-.16.19v3.54a.19.19,0,0,0,.15.19L5.7,17A.23.23,0,0,0,5.84,17Z" fill="none" /><path d="M2.87,12.56v3.9l2.89.62V12Zm1.22,3.61L3.28,16V13l.81-.14Zm1.26.23-.93-.15V12.81l.93-.16Z" fill="#341a6e" /><polygon points="11.91 12.08 9.05 12.61 9.05 16.51 11.91 17.12 14.78 15.97 14.78 13.06 11.91 12.08" fill="url(#a152bba0-ba2b-483a-b8c1-0ae7de355990)" /><path d="M9.05,12.61v3.9l2.89.61v-5Zm1.22,3.61-.81-.17v-3l.81-.14Zm1.26.22-.93-.15V12.86l.93-.16Z" fill="#341a6e" /></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 18 18"><defs><linearGradient id="fc742b2b-5750-4864-b8dc-cdccaac6f13c" x1="9" y1="15.834" x2="9" y2="5.788" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#0078d4" /><stop offset="0.502" stop-color="#4093e6" /><stop offset="0.775" stop-color="#5ea0ef" /></linearGradient></defs><title>MsPortalFx.base.images-4</title><g id="fb33f902-6783-4db3-88ea-a4524e356c77"><g><path d="M.5,5.788h17a0,0,0,0,1,0,0v9.478a.568.568,0,0,1-.568.568H1.068A.568.568,0,0,1,.5,15.266V5.788A0,0,0,0,1,.5,5.788Z" fill="url(#fc742b2b-5750-4864-b8dc-cdccaac6f13c)" /><path d="M1.071,2.166H16.929a.568.568,0,0,1,.568.568V5.788a0,0,0,0,1,0,0H.5a0,0,0,0,1,0,0V2.734A.568.568,0,0,1,1.071,2.166Z" fill="#0078d4" /><rect x="2.304" y="7.121" width="3.65" height="1.85" rx="0.283" fill="#fff" opacity="0.9" /><rect x="7.2" y="7.095" width="3.65" height="1.85" rx="0.283" fill="#fff" opacity="0.9" /><rect x="12.096" y="7.095" width="3.65" height="1.85" rx="0.283" fill="#fff" opacity="0.9" /><rect x="2.358" y="9.767" width="3.65" height="1.85" rx="0.283" fill="#fff" opacity="0.9" /><rect x="7.254" y="9.741" width="3.65" height="1.85" rx="0.283" fill="#ffd400" /><rect x="12.15" y="9.741" width="3.65" height="1.85" rx="0.283" fill="#ffd400" /><rect x="2.358" y="12.439" width="3.65" height="1.85" rx="0.283" fill="#ffd400" /><rect x="7.254" y="12.413" width="3.65" height="1.85" rx="0.283" fill="#ffd400" /><rect x="12.15" y="12.413" width="3.65" height="1.85" rx="0.283" fill="#ffd400" /></g></g></svg>
Binary file
@@ -0,0 +1,15 @@
1
+ <svg width="152" height="26" viewBox="0 0 152 26" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M80.171 7.43604V14.3174L82.7143 10.92H85.7098L82.3659 15.1494L86.2671 20.072H82.8013L80.171 16.2933V20.072H77.3495V7.43604H80.171Z" fill="#009FDA"/>
3
+ <path d="M145.068 20.0719L141.898 10.9199H144.911L146.496 16.3453L146.879 17.8359L147.333 16.3453L149.161 10.9199H152L147.507 23.7466H144.824L146.078 20.0719H145.068Z" fill="#009FDA"/>
4
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M52.7917 8.06003C54.5507 8.06003 55.5955 8.38934 56.4841 8.78801L55.7351 10.8507C54.6028 10.5387 54.1329 10.4174 52.8266 10.4174C50.6666 10.3827 49.1686 11.5787 49.1686 14.0573C49.1686 16.536 50.7536 17.8534 53.1574 17.8534C54.3241 17.8534 55.0038 17.7667 55.9268 17.524L56.519 19.6733C55.3867 20.0893 54.3939 20.2453 52.8615 20.2453C48.507 20.2453 46.2601 18.1133 46.2601 14.2307C46.2601 10.1054 48.4721 8.06003 52.7917 8.06003ZM49.3431 6.04939L50.3182 4.28137L52.5479 5.28669L54.7944 4.28137L55.7872 6.04939L52.5479 7.67868L49.3431 6.04939Z" fill="#009FDA"/>
5
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M62.284 10.712C65.1753 10.712 66.2899 12.584 66.2899 15.34V16.3453H60.3334C60.3161 17.784 61.4657 18.0614 62.9283 18.0614C63.5382 18.0614 64.5831 17.8533 65.5409 17.6973L65.9592 19.812C64.9487 20.124 63.6252 20.28 62.5106 20.28C59.4974 20.28 57.5291 19.2747 57.5291 15.6347C57.5291 11.908 59.5146 10.712 62.284 10.712ZM62.0402 12.688C61.0824 12.688 60.4729 13.364 60.4203 14.56H63.4163C63.4511 13.4507 62.9632 12.688 62.0402 12.688Z" fill="#009FDA"/>
6
+ <path d="M68.1535 17.7839C69.3557 17.94 70.3135 18.0266 70.9229 18.0266C72.3511 18.0266 72.5079 17.6626 72.5079 17.3853C72.5079 16.3973 67.8926 16.8652 67.8926 13.5893C67.8926 11.6133 69.7562 10.6946 71.7589 10.6946C72.8736 10.6946 73.884 10.8853 74.8419 11.2146L74.3716 13.2426C73.4835 13.0346 72.7866 12.8959 71.8459 12.8959C70.8881 12.8959 70.6964 13.2599 70.6964 13.4506C70.6964 14.4906 75.2945 14.2133 75.2945 17.2813C75.2945 19.6906 72.7517 20.2799 71.2016 20.2799C69.8781 20.2799 68.7983 20.1586 67.8577 19.8813L68.1535 17.7839Z" fill="#009FDA"/>
7
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M91.5796 10.712C94.4709 10.712 95.5856 12.5839 95.5856 15.34V16.3453H89.629C89.6116 17.7839 90.7437 18.0613 92.2067 18.0613C92.8339 18.0613 93.8787 17.8533 94.8366 17.6973L95.2548 19.812C94.2272 20.124 92.9209 20.28 91.8062 20.28C88.7753 20.28 86.8247 19.2746 86.8247 15.6346C86.8247 11.908 88.793 10.712 91.5796 10.712ZM93.2344 6.29199L94.1402 8.25067L90.0296 9.98395L89.2285 8.31995L93.2344 6.29199ZM91.3359 12.688C90.378 12.688 89.7509 13.3639 89.716 14.5599H92.6943C92.7291 13.4506 92.2416 12.688 91.3359 12.688Z" fill="#009FDA"/>
8
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M107.116 10.6947C107.621 10.6947 108.039 10.764 108.335 10.7987V7.43604H111.14V20.072H108.335V19.4134C107.917 19.7427 107.412 20.2107 106.245 20.2107C104.399 20.2107 102.117 19.3093 102.117 15.34V15.34C102.117 12.22 104.329 10.6947 107.116 10.6947ZM108.335 13.0174C108.039 12.9654 107.673 12.896 107.168 12.896C105.566 12.896 104.921 13.8147 104.921 15.392C104.921 17.3853 105.81 17.888 106.802 17.888C107.308 17.888 107.917 17.7666 108.335 17.5934V17.5934V13.0174Z" fill="#009FDA"/>
9
+ <path d="M116.399 10.9199V12.1506C116.852 11.5612 117.705 10.7466 118.768 10.7466C119.273 10.7466 119.639 10.7813 120.039 10.9026L119.656 13.1906C119.116 13.0866 118.942 13.0866 118.437 13.0866C117.601 13.0866 116.765 13.4679 116.399 13.8666V20.0719H113.595V10.9199H116.399Z" fill="#009FDA"/>
10
+ <path fill-rule="evenodd" clip-rule="evenodd" d="M124.289 14.6813H125.874V14.1093C125.874 13.312 125.352 13.0693 124.22 13.0693C123.314 13.0693 122.339 13.2773 121.468 13.468L120.928 11.44C121.955 11.0413 123.175 10.712 124.638 10.712C127.477 10.712 128.626 11.5093 128.626 13.572V17.6453C128.626 17.94 128.922 18.0093 129.445 18.0266L129.358 20.1413C129.131 20.1586 128.905 20.1586 128.696 20.1586C127.581 20.1586 126.415 19.968 126.153 19.188C125.474 19.708 124.516 20.228 123.506 20.228C121.486 20.228 120.353 19.2746 120.353 17.4546L120.353 17.4546C120.353 15.1493 122.461 14.6813 124.289 14.6813ZM126.693 6.29199L127.599 8.25067L123.471 9.98395L122.687 8.31995L126.693 6.29199ZM125.874 16.2933L124.499 16.328C123.68 16.3453 123.07 16.6226 123.07 17.2986C123.07 17.8186 123.593 18.0613 124.098 18.0613C124.638 18.0613 125.282 17.9052 125.874 17.7493V17.7493V16.2933Z" fill="#009FDA"/>
11
+ <path d="M134.548 7.43604V11.856C135.105 11.4227 136.325 10.66 137.544 10.66C140.418 10.66 140.627 12.2547 140.627 14.3347V20.072H137.823V14.56C137.823 13.3121 137.544 13.0867 136.603 13.0867C135.767 13.0867 135.001 13.364 134.548 13.5894V20.072H131.744V7.43604H134.548Z" fill="#009FDA"/>
12
+ <path d="M28.1285 7.21066H31.7513C32.9357 7.21066 32.9183 7.85202 32.9183 8.78798C32.9008 9.65464 32.7615 10.92 32.3958 12.688C32.0126 14.4213 31.6468 15.6867 31.2811 16.588C31.0024 17.264 30.7411 17.732 30.5147 18.044C30.1663 18.4946 29.9748 18.5986 29.7483 18.6853C29.5219 18.7546 29.1736 18.7893 28.6336 18.7893H8.6735C7.52396 18.7893 7.29754 18.512 7.29754 17.6973C7.29754 17.1773 7.38463 16.432 7.5936 15.444C7.82006 14.3866 7.95939 14.144 8.23806 13.572C8.65605 12.7226 9.02185 12.4107 9.35275 12.22C9.7011 12.0466 10.1365 11.96 10.7809 11.96H16.9815L17.6259 8.92666H10.7809C10.1888 8.92666 9.56177 8.97867 8.89991 9.16933C8.41223 9.30804 7.90715 9.53334 7.43687 9.84535C6.72277 10.348 6.11315 11.0587 5.64287 11.96C5.17264 12.8787 4.91137 13.4333 4.61527 14.82C4.37144 15.9293 4.24951 16.8653 4.24951 17.6973C4.24951 18.3907 4.3366 19.0147 4.56302 19.604C4.73719 20.0373 4.99846 20.4533 5.32936 20.7826C5.83449 21.268 6.44406 21.528 7.01883 21.6493C7.5762 21.788 8.13357 21.8054 8.6735 21.8227C11.2512 21.8227 26.0211 21.8227 28.6336 21.8227C29.1387 21.8054 29.7657 21.8054 30.4624 21.632C31.0024 21.4933 31.5597 21.216 32.0474 20.8173C32.7964 20.1934 33.406 19.3267 33.9285 18.1307C34.451 16.9347 34.9213 15.3921 35.3741 13.3121C35.7747 11.4227 35.9489 9.96672 35.9489 8.78805C35.9489 7.92137 35.8618 7.19339 35.6354 6.53474C35.4612 6.04943 35.1999 5.61606 34.869 5.25209C34.3639 4.71474 33.702 4.42007 33.1621 4.31607C32.6048 4.1947 32.1345 4.1947 31.7513 4.1947H25.812H24.5754L21.8235 17.0733H24.9238L27.0313 7.21066H28.1285Z" fill="#002664"/>
13
+ <path d="M37.3948 1.69866C36.2975 0.832 35.0783 0.415992 33.981 0.207996C32.8837 0.0173214 31.8735 0 31.142 0H25.7775H22.4856H21.2664L17.6088 17.0733H20.7265L23.7223 3.03333H31.142C31.7516 3.03333 32.4657 3.03333 33.1624 3.1547C33.6849 3.22406 34.19 3.36271 34.6429 3.55337C35.3396 3.86536 35.8969 4.29871 36.3498 5.07868C36.8026 5.84136 37.1684 7.02003 37.1684 8.85735C37.1684 9.91472 37.0465 11.1974 36.7503 12.7227C36.2278 15.4614 35.5834 17.472 34.8867 18.928C34.3642 20.02 33.8243 20.7827 33.2843 21.32C32.4831 22.1347 31.6994 22.516 30.7588 22.7413C29.8357 22.9493 28.7733 22.984 27.6063 22.9667H8.11642C6.82755 22.984 5.52128 22.6373 4.63299 21.892C4.18013 21.5107 3.79696 21.06 3.51828 20.4013C3.23961 19.76 3.04802 18.928 3.04802 17.836C3.04802 17.1427 3.11768 16.328 3.30928 15.4267C3.69245 13.468 4.07563 12.532 4.6504 11.4227C5.50383 9.74135 6.44435 8.90936 7.38492 8.40671C8.32544 7.92135 9.35304 7.76533 10.4155 7.76533H17.8701L18.5145 4.73204H10.4155C9.52722 4.73204 8.53446 4.81874 7.5068 5.11337C5.97412 5.54669 4.38914 6.50001 3.11768 8.16401C1.82881 9.82801 0.957945 11.596 0.313509 14.8374C0.104502 15.912 0 16.9173 0 17.836C0 19.2747 0.261257 20.54 0.731523 21.6147C1.42821 23.244 2.64742 24.388 3.98855 25.064C5.32966 25.74 6.7753 26 8.11642 26H27.6063C28.6688 26 29.8009 26 31.0201 25.7746C31.9084 25.6013 32.8489 25.3067 33.7372 24.7867C35.0957 24.0067 36.3149 22.724 37.3077 20.8693C38.3179 19.0147 39.1191 16.5707 39.7461 13.2773C40.0596 11.6134 40.2164 10.1574 40.2164 8.85735C40.2164 6.88135 39.8681 5.28669 39.2236 4.00404V4.00399C38.7533 3.03333 38.1089 2.27067 37.3948 1.69866Z" fill="#002664"/>
14
+ <path d="M6.39221 0L5.7478 3.03333H16.1633C19.368 3.03333 19.7861 0 19.7861 0H6.39221Z" fill="#002664"/>
15
+ </svg>
Binary file
Binary file
Binary file