Compare commits

..

10 Commits

Author SHA1 Message Date
Eric Espie
063e75b01d Cron extensibility 2026-04-01 09:16:30 +02:00
jf-cbd
1a9e4bd5ad Reformat ormDocumentTest.php 2026-03-31 17:51:06 +02:00
jf-cbd
36891e441b Merge remote-tracking branch 'origin/support/3.2' into develop
# Conflicts:
#	datamodels/2.x/itop-hub-connector/ajax.php
2026-03-31 16:43:48 +02:00
jf-cbd
a6295f1b14 Duplicate try-catch to avoid finally statement in case of uncorrrecth auth 2026-03-31 16:39:05 +02:00
Stephen Abello
ba6b3da238 N°9231 - Fix unit test for 3.3.0 2026-03-31 16:28:19 +02:00
Stephen Abello
2674e9c47f Merge branch 'support/3.2' into develop
# Conflicts:
#	tests/php-unit-tests/unitary-tests/core/ormDocumentTest.php
2026-03-31 15:51:27 +02:00
Stephen Abello
e467ca83cf N°8532 - Apply filters on all DBSearch classes (#848)
Co-authored-by: Molkobain <lajarige.guillaume@free.fr>
Co-authored-by: Thomas Casteleyn <thomas.casteleyn@super-visions.com>
2026-03-31 15:41:28 +02:00
Anne-Cath
f7b73717b4 Rollback N°2364 - API : remove old linkedset persistance 2026-03-31 10:37:36 +02:00
v-dumas
0d9b34a879 N°9063 - Add ev_autoresolve on Approved UserRequest in Simple Ticket 2026-03-30 17:13:14 +02:00
Stephen Abello
7791585387 N°9231 - Make OrmDocument apply same safety to attachments and regular documents (#860) 2026-03-30 15:25:52 +02:00
60 changed files with 554 additions and 2149 deletions

View File

@@ -1740,6 +1740,14 @@ class Config
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'security.disable_joined_classes_filter' => [
'type' => 'bool',
'description' => 'If true, scope filters aren\'t applied to joined classes or union classes not directly listed in the SELECT clause.',
'default' => true,
'value' => true,
'source_of_value' => '',
'show_in_conf_sample' => false,
],
'security.hide_administrators' => [
'type' => 'bool',
'description' => 'If true, non-administrator users will not be able to see the administrator accounts, the Administrator profile and the links between the administrator accounts and their profiles.',

View File

@@ -1932,4 +1932,37 @@ class DBObjectSearch extends DBSearch
{
return $this->GetCriteria()->ListParameters();
}
/**
* @inheritDoc
* @return DBObjectSearch
*/
protected function ApplyDataFilters(): DBObjectSearch
{
if ($this->IsAllDataAllowed() || $this->IsDataFiltered()) {
return $this;
}
$oSearch = $this;
$aClassesToFilter = $this->GetSelectedClasses();
// Opt-in for joined classes filtering, otherwise only filter the selected class(es)
if (MetaModel::GetConfig()->Get('security.disable_joined_classes_filter') === false) {
$aClassesToFilter = $this->GetJoinedClasses();
}
// Apply filter (this is similar to the one in DBSearch but the factorization could make it less readable)
foreach ($aClassesToFilter as $sClassAlias => $sClass) {
$oVisibleObjects = UserRights::GetSelectFilter($sClass, $this->GetModifierProperties('UserRightsGetSelectFilter'));
if ($oVisibleObjects === false) {
$oVisibleObjects = DBObjectSearch::FromEmptySet($sClass);
}
if (is_object($oVisibleObjects)) {
$oVisibleObjects->AllowAllData();
$oSearch = $oSearch->Filter($sClassAlias, $oVisibleObjects);
$oSearch->SetDataFiltered();
}
}
return $oSearch;
}
}

View File

@@ -1048,21 +1048,7 @@ abstract class DBSearch
*/
protected function GetSQLQuery($aOrderBy, $aArgs, $aAttToLoad, $aExtendedDataSpec, $iLimitCount, $iLimitStart, $bGetCount, $aGroupByExpr = null, $aSelectExpr = null)
{
$oSearch = $this;
if (!$this->IsAllDataAllowed() && !$this->IsDataFiltered()) {
foreach ($this->GetSelectedClasses() as $sClassAlias => $sClass) {
$oVisibleObjects = UserRights::GetSelectFilter($sClass, $this->GetModifierProperties('UserRightsGetSelectFilter'));
if ($oVisibleObjects === false) {
// Make sure this is a valid search object, saying NO for all
$oVisibleObjects = DBObjectSearch::FromEmptySet($sClass);
}
if (is_object($oVisibleObjects)) {
$oVisibleObjects->AllowAllData();
$oSearch = $oSearch->Filter($sClassAlias, $oVisibleObjects);
$oSearch->SetDataFiltered();
}
}
}
$oSearch = $this->ApplyDataFilters();
if (is_array($aGroupByExpr)) {
foreach ($aGroupByExpr as $sAlias => $oGroupByExp) {
@@ -1524,4 +1510,33 @@ abstract class DBSearch
* @return array{\VariableExpression}
*/
abstract public function GetExpectedArguments(): array;
/**
* Apply data filters to the search, if needed
*
* @return DBSearch
* @throws CoreException
*/
protected function ApplyDataFilters(): DBSearch
{
if ($this->IsAllDataAllowed() || $this->IsDataFiltered()) {
return $this;
}
$oSearch = $this;
$aClassesToFilter = $this->GetSelectedClasses();
foreach ($aClassesToFilter as $sClassAlias => $sClass) {
$oVisibleObjects = UserRights::GetSelectFilter($sClass, $this->GetModifierProperties('UserRightsGetSelectFilter'));
if ($oVisibleObjects === false) {
$oVisibleObjects = DBObjectSearch::FromEmptySet($sClass);
}
if (is_object($oVisibleObjects)) {
$oVisibleObjects->AllowAllData();
$oSearch = $oSearch->Filter($sClassAlias, $oVisibleObjects);
$oSearch->SetDataFiltered();
}
}
return $oSearch;
}
}

View File

@@ -673,4 +673,30 @@ class DBUnionSearch extends DBSearch
return $aVariableCriteria;
}
/**
* @inheritDoc
* @return DBUnionSearch
*/
protected function ApplyDataFilters(): DBUnionSearch
{
if ($this->IsAllDataAllowed() || $this->IsDataFiltered()) {
return $this;
}
// Opt-in for joined classes filtering, otherwise fallback on DBSearch filtering
if (MetaModel::GetConfig()->Get('security.disable_joined_classes_filter') === true) {
return parent::ApplyDataFilters();
}
// Apply filters per sub-search
$aFilteredSearches = [];
foreach ($this->GetSearches() as $oSubSearch) {
// Recursively call ApplyDataFilters on sub-searches
$aFilteredSearches[] = $oSubSearch->ApplyDataFilters();
}
$oSearch = new DBUnionSearch($aFilteredSearches);
return $oSearch;
}
}

View File

@@ -350,15 +350,18 @@ class ormDocument
if (!is_object($oObj)) {
// If access to the document is not granted, check if the access to the host object is allowed
$oObj = MetaModel::GetObject($sClass, $id, false, true);
$bHasHostRights = false;
if ($oObj instanceof Attachment) {
$sItemClass = $oObj->Get('item_class');
$sItemId = $oObj->Get('item_id');
$oHost = MetaModel::GetObject($sItemClass, $sItemId, false, false);
if (!is_object($oHost)) {
$oObj = null;
if (is_object($oHost)) {
$bHasHostRights = true;
}
}
if (!is_object($oObj)) {
// We could neither read the object nor get a host object matching our rights
if ($bHasHostRights !== true) {
throw new Exception("Invalid id ($id) for class '$sClass' - the object does not exist or you are not allowed to view it");
}
}

View File

@@ -470,17 +470,6 @@ class ormLinkSet implements iDBObjectSetIterator, Iterator, SeekableIterator
|| ($this->oOriginalSet->GetFilter()->ToOQL() == $oFellow->oOriginalSet->GetFilter()->ToOQL())) {
$bUpdateFromDelta = true;
}
} else {
//@since 3.2.2 N°2364 - API : remove old linkedset persistance
/* Goo pattern to use:
* $oCISet = $oTicket->Get(functioncis_list);
* $oCISet->AddItem(MetaModel::NewObject(lnkFunctionCIToTicket, array(ci_id=> 12345));
* $oCISet->RemoveItem(123456);
* $oTicket->Set(functionalcis_list, $oCISet);
*/
if (!ContextTag::Check(ContextTag::TAG_SETUP)) {
DeprecatedCallsLog::NotifyDeprecatedPhpMethod('old pattern - please get previous value of the linked set, modify it and set it back to the host object');
}
}
if ($bUpdateFromDelta) {

View File

@@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
version="1.1"
id="acer"
x="0px"
y="0px"
width="83"
height="83"
viewBox="0 0 83 83"
xml:space="preserve"
sodipodi:docname="icon-acer.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:svg="http://www.w3.org/2000/svg"><svg:defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="10.483071"
inkscape:cx="75.78886"
inkscape:cy="35.676568"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="acer"><sodipodi:guide
position="40.307919,41.220214"
orientation="0,-1"
id="guide1"
inkscape:locked="false" /></sodipodi:namedview>
<svg:path
id="acer-logo"
style="fill:#80c343"
d="m 82.85,32.760893 c -0.29,-0.42 -0.62,-0.7 -2.04,-0.81 -0.37,-0.03 -1.6,-0.07 -3.66,-0.07 -5.42,0 -9.1,1.65 -10.98,4.91 0.52,-3.28 -2.67,-4.92 -9.55,-4.92 -8.09,0 -13.14,3.27 -15.15,9.81 -0.74,1.91 -0.82,4.02 -0.23,5.98 l -1.91,0.13 c -1.49,0.11 -3.46,0.22 -4.66,0.22 -2.96,0 -4.8,-0.5 -5.51,-1.5 -0.64,-0.9 -0.57,-2.56 0.17,-4.98 1.23,-4.02 4.29,-5.82 9.18,-5.82 2.53,0 5,0.27 5,0.27 0.3,-0.05 0.51,-0.33 0.46,-0.64 0,-0.01 0,-0.02 -0.01,-0.03 l -0.05,-0.38 -0.17,-1.35 c -0.11,-0.89 -0.77,-1.41 -1.97,-1.57 -1.1,-0.07 -1.91,-0.13 -3.12,-0.13 h -0.07 c -6.39,0.01 -10.84,2.12 -13.36,6.32 0.92,-4.21 -2.04,-6.32 -8.87,-6.32 -2.73,-0.05 -5.46,0.06 -8.18,0.33 -1.03,-0.03 -1.96,0.61 -2.33,1.57 l -0.54,1.73 c -0.1,0.32 0.05,0.48 0.46,0.48 h 0.01 c 0.3,-0.04 1.46,-0.15 3.44,-0.31 2.62,-0.21 4.55,-0.32 5.83,-0.32 3.77,0 5.35,0.95 4.76,2.84 -0.11,0.4 -0.44,0.71 -0.85,0.78 -3.56,0.59 -6.39,1.02 -8.48,1.28 -5.89,0.75 -9.29,2.59 -10.2,5.52 -1.25,4.03 1.89,6.04 9.44,6.04 3.17,0.04 6.34,-0.18 9.48,-0.65 1.47,-0.25 2.22,-0.63 2.51,-1.58 l 1.41,-4.49 c -0.15,4.49 2.99,6.75 9.41,6.75 2.23,0.04 4.45,-0.06 6.66,-0.31 1.32,-0.23 1.95,-0.52 2.24,-1.51 l 0.28,-1.41 c 1.37,2.14 4.37,3.21 9.01,3.21 4.89,0 7.74,-0.14 8.55,-0.41 0.57,-0.12 1.04,-0.52 1.25,-1.06 0.03,-0.09 0.05,-0.19 0.06,-0.28 l 0.59,-1.91 c 0.1,-0.33 -0.05,-0.49 -0.45,-0.48 l -3.13,0.15 c -2.09,0.12 -3.72,0.18 -4.9,0.17 -1.54,0.08 -3.08,-0.07 -4.58,-0.46 -1.2,-0.41 -1.94,-1.61 -1.77,-2.86 l 9.91,-1.27 c 4.44,-0.57 7.42,-1.94 8.92,-4.12 l -3.37,11.73 c -0.07,0.18 -0.04,0.38 0.07,0.53 0.18,0.17 0.41,0.25 0.65,0.22 h 4.1 c 0.47,0.07 0.93,-0.22 1.06,-0.68 l 3.62,-12.67 c 0.48,-1.67 2,-2.48 4.67,-2.48 2.41,0 4.22,0.02 5.38,0.07 0.03,0 0.06,0 0.09,0 0.39,0 0.74,-0.26 0.84,-0.63 l 0.63,-1.74 c 0.15,-0.3 0.12,-0.63 -0.05,-0.89 m -66.12,15.24 c -1.83,0.23 -3.68,0.33 -5.52,0.3 -4.17,0 -5.99,-0.84 -5.46,-2.53 0.38,-1.21 1.47,-1.94 3.28,-2.19 l 9.48,-1.28 z m 43.83,-10.27 c -0.4,1.3 -2.25,2.19 -5.56,2.67 l -7.9,1.13 0.2,-0.65 c 0.39,-1.74 1.37,-3.28 2.79,-4.37 1.2,-0.77 3.15,-1.16 5.86,-1.16 3.56,0 5.1,0.8 4.61,2.38" />
</svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -1,124 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
width="108"
height="108"
viewBox="0 0 108 108"
role="img"
version="1.1"
id="svg11"
sodipodi:docname="icon-cisco.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<sodipodi:namedview
id="namedview11"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="6.8229602"
inkscape:cx="48.879078"
inkscape:cy="51.737075"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg11">
<sodipodi:guide
position="16.939587,53.376303"
orientation="0,-1"
id="guide11"
inkscape:locked="false" />
</sodipodi:namedview>
<title
id="fw-c-header__logo-title">Cisco.com France</title>
<defs
id="defs1">
<path
d="m 0,22.769 a 2.348,2.348 0 0 0 3.935,1.545 c 0.434,-0.403 0.7,-0.955 0.744,-1.545 v -5.2 a 2.34,2.34 0 0 0 -4.679,0 v 5.2"
id="bar_short"
class="bar" />
<path
d="m 12.95,22.769 a 2.349,2.349 0 0 0 2.34,2.171 2.346,2.346 0 0 0 2.339,-2.171 V 11.112 a 2.341,2.341 0 0 0 -4.679,0 V 22.77"
id="bar_tall"
class="bar" />
<path
d="m 25.832,27.464 a 2.345,2.345 0 0 0 4.678,0 V 2.249 a 2.342,2.342 0 0 0 -4.678,0 v 25.215"
id="bar_grande"
class="bar" />
<path
d="m 24.026,56.277 v -5.002 l -0.098,0.043 a 9.253,9.253 0 0 1 -3.605,0.915 5.303,5.303 0 0 1 -3.63,-1.07 4.644,4.644 0 0 1 -1.58,-2.244 5.395,5.395 0 0 1 -0.106,-3 4.6,4.6 0 0 1 1.609,-2.566 4.823,4.823 0 0 1 2.528,-1.09 8.332,8.332 0 0 1 4.774,0.895 l 0.108,0.056 v -5.03 l -0.228,-0.061 a 12.78,12.78 0 0 0 -4.552,-0.596 10.534,10.534 0 0 0 -4.065,0.93 9.29,9.29 0 0 0 -3.329,2.572 10.014,10.014 0 0 0 -0.182,12.18 9.546,9.546 0 0 0 5.292,3.403 c 2.211,0.538 4.528,0.456 6.697,-0.234 l 0.367,-0.101"
id="cisco_c" />
</defs>
<g
fill="#02c8ff"
fill-rule="evenodd"
id="g11"
transform="translate(-0.09466859,26.234946)">
<use
href="#cisco_c"
id="use1" />
<use
href="#cisco_c"
x="49.5"
id="use2" />
<path
d="m 41.69,52.125 -0.019,4.308 0.315,0.054 c 0.989,0.185 1.987,0.313 2.99,0.385 a 18.1,18.1 0 0 0 2.642,0.051 c 0.842,-0.06 1.675,-0.218 2.48,-0.468 a 6.862,6.862 0 0 0 2.573,-1.371 5.19,5.19 0 0 0 1.498,-2.148 5.912,5.912 0 0 0 -0.03,-4.324 4.852,4.852 0 0 0 -1.343,-1.862 5.568,5.568 0 0 0 -1.97,-1.147 l -3.25,-1.206 a 1.742,1.742 0 0 1 -0.887,-0.845 1.107,1.107 0 0 1 0.036,-0.986 1.29,1.29 0 0 1 0.217,-0.291 1.75,1.75 0 0 1 0.48,-0.347 c 0.363,-0.18 0.755,-0.293 1.158,-0.337 a 6.76,6.76 0 0 1 2.072,0.022 c 0.81,0.088 1.613,0.231 2.402,0.43 l 0.168,0.037 v -3.974 l -0.31,-0.067 a 21.14,21.14 0 0 0 -2.444,-0.435 12.545,12.545 0 0 0 -3.213,-0.014 6.945,6.945 0 0 0 -3.699,1.488 4.908,4.908 0 0 0 -1.58,2.178 5.984,5.984 0 0 0 -0.003,4.05 c 0.242,0.65 0.63,1.237 1.136,1.714 0.437,0.422 0.932,0.78 1.47,1.065 0.708,0.38 1.458,0.675 2.235,0.878 0.257,0.077 0.512,0.158 0.766,0.243 l 0.385,0.141 0.11,0.045 c 0.38,0.136 0.726,0.35 1.018,0.628 0.202,0.19 0.358,0.423 0.455,0.683 0.06,0.237 0.061,0.485 0.003,0.723 a 1.536,1.536 0 0 1 -0.744,0.892 3.691,3.691 0 0 1 -1.239,0.387 9,9 0 0 1 -1.92,0.097 21.973,21.973 0 0 1 -2.507,-0.334 c -0.433,-0.09 -0.864,-0.19 -1.291,-0.303 z m -11.144,4.482 h 4.73 V 37.846 h -4.73 z M 85.305,43.386 a 4.934,4.934 0 1 1 6.157,7.711 4.934,4.934 0 0 1 -6.157,-7.71 m -6.867,3.848 a 9.87,9.87 0 0 0 12.002,9.485 9.629,9.629 0 0 0 3.157,-17.729 9.934,9.934 0 0 0 -15.16,8.244"
id="path2" />
<use
href="#bar_short"
x="0"
id="use3" />
<use
href="#bar_tall"
x="0"
id="use4" />
<use
href="#bar_grande"
x="0"
id="use5" />
<use
href="#bar_tall"
x="25.875"
id="use6" />
<use
href="#bar_short"
x="51.75"
id="use7" />
<use
href="#bar_tall"
x="51.75"
id="use8" />
<use
href="#bar_grande"
x="51.75"
id="use9" />
<use
href="#bar_tall"
x="77.625"
id="use10" />
<use
href="#bar_short"
x="103.375"
id="use11" />
</g>
<metadata
id="metadata11">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:title>Cisco.com France</dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
</svg>

Before

Width:  |  Height:  |  Size: 4.9 KiB

View File

@@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 29.5.1, SVG Export Plug-In . SVG Version: 9.03 Build 0) -->
<svg
version="1.0"
id="katman_1"
x="0px"
y="0px"
viewBox="0 0 630 630"
xml:space="preserve"
sodipodi:docname="icon-hpe.svg"
width="630"
height="630"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs2" /><sodipodi:namedview
id="namedview2"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="0.6905515"
inkscape:cx="-217.94175"
inkscape:cy="275.1424"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="katman_1"><sodipodi:guide
position="197.66244,314.48848"
orientation="0,-1"
id="guide2"
inkscape:locked="false" /></sodipodi:namedview>
<style
type="text/css"
id="style1">
.st0{fill:none;stroke:#000000;stroke-width:36;}
.st1{fill:none;stroke:#03A883;stroke-width:36;}
</style>
<path
class="st0"
d="m 18.511987,405.93012 v -180 m 154.000003,180 v -180 m -154.000003,89 H 155.51199 m 95,91 v -180 m 0,18 h 102 c 27.6,0 50,22.4 50,50 0,27.6 -22.4,50 -50,50 h -102 m 222,-67 v -33 h 158"
id="path1" />
<path
class="st1"
d="m 630.51199,387.93012 h -158 v -76 h 158"
id="path2" />
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -1,56 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 231 231"
preserveAspectRatio="xMinYMid"
version="1.1"
id="svg4"
xml:space="preserve"
width="231"
height="231"
sodipodi:docname="icon-oracle-linux.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="7.5332891"
inkscape:cx="107.05815"
inkscape:cy="90.796993"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg4"><sodipodi:guide
position="41.763589,115.468"
orientation="0,-1"
id="guide1"
inkscape:locked="false" /></sodipodi:namedview><defs
id="defs8"><rect
x="-138.24641"
y="81.567238"
width="382.3674"
height="240.21156"
id="rect495" /><rect
x="-17.612623"
y="104.35898"
width="171.05238"
height="197.31444"
id="rect291" /></defs><g
id="g1407"
transform="translate(0.61321542,76.835533)"><path
d="m 99.59,19.52 h 15.24 L 106.78,6.52 91.98,30 h -6.73 l 18,-28.17 a 4.29,4.29 0 0 1 7,-0.05 L 128.3,30 h -6.73 l -3.17,-5.25 h -15.42 l -3.36,-5.23 m 69.93,5.23 V 0.28 h -5.72 v 26.88 a 2.76,2.76 0 0 0 0.85,2 2.89,2.89 0 0 0 2.08,0.87 h 26 l 3.39,-5.25 h -26.63 m -94.54,-4.4 a 10.05,10.05 0 0 0 0,-20.1 h -25 V 30 h 5.71 V 5.54 h 18.94 a 4.81,4.81 0 0 1 0,9.62 H 58.52 L 75.58,30 h 8.29 L 72.41,20.38 h 2.57 M 14.86,30 h 17.27 a 14.86,14.86 0 0 0 0,-29.71 H 14.86 a 14.86,14.86 0 1 0 0,29.71 m 16.88,-5.23 h -16.5 a 9.62,9.62 0 0 1 0,-19.23 h 16.5 a 9.62,9.62 0 1 1 0,19.23 M 140.23,30 h 17.63 l 3.34,-5.23 h -20.58 a 9.62,9.62 0 1 1 0,-19.23 h 16.75 l 3.38,-5.25 h -20.52 a 14.86,14.86 0 1 0 0,29.71 m 69.87,-5.23 a 9.62,9.62 0 0 1 -9.26,-7 h 24.42 l 3.36,-5.24 h -27.78 a 9.61,9.61 0 0 1 9.26,-7 h 16.76 l 3.35,-5.25 h -20.5 a 14.86,14.86 0 0 0 0,29.71 h 17.63 l 3.35,-5.23 h -20.6"
style="fill:#c74634"
id="path2" /><path
id="rect749"
style="fill:#c74634;fill-opacity:1;stroke-width:5.2519;stroke-linecap:square;paint-order:stroke fill markers"
d="m 25.391517,47.930871 h 4.980863 v 3.830025 h -4.980863 z m 61.5008,18.557061 -7.24,-10.240002 h 4.96 l 4.64,7.080002 h 0.24 l 4.76,-7.080002 h 4.72 l -7.28,10.160002 7.64,10.88 h -4.96 l -5.08,-7.72 h -0.24 l -5.12,7.72 h -4.72 z m -21.599998,11.28 q -6.68,0 -6.68,-7.24 V 56.24793 h 4.12 v 13.760002 q 0,2.36 1.04,3.32 1.08,0.92 3.12,0.92 1.4,0 2.6,-0.68 1.2,-0.72 1.88,-2 0.72,-1.28 0.72,-2.96 V 56.24793 h 4.12 v 21.040002 h -3.32 l -0.4,-2.8 h -0.28 q -1.16,1.6 -2.92,2.44 -1.76,0.84 -4,0.84 z M 35.81232,56.24793 h 3.320001 l 0.4,2.800002 h 0.28 q 1.12,-1.600002 2.88,-2.440002 1.8,-0.84 4.04,-0.84 6.68,0 6.68,7.240002 v 14.28 h -4.12 v -13.76 q 0,-2.36 -1.08,-3.28 -1.04,-0.96 -3.08,-0.96 -1.4,0 -2.6,0.72 -1.2,0.68 -1.92,1.96 -0.68,1.28 -0.68,2.96 v 12.36 H 35.81232 Z M 3.61239,47.930871 h 4.44 v 25.517061 h 14.28 v 3.84 h -18.72 z M 26.256768,59.46395 V 77.287932 H 30.37238 V 56.275464 h -6.387612 v 1.825681 z" /></g></svg>

Before

Width:  |  Height:  |  Size: 3.5 KiB

View File

@@ -1,52 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 1280 1280"
version="1.1"
id="svg1"
sodipodi:docname="icon-sony.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
width="1280"
height="1280"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="0.63418639"
inkscape:cx="-462.79769"
inkscape:cy="225.48576"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g4"
showguides="true">
<sodipodi:guide
position="173.37108,641.89024"
orientation="0,-1"
id="guide1"
inkscape:locked="false" />
</sodipodi:namedview>
<svg:defs
id="defs1" />
<svg:g
id="Layer_2">
<svg:g
id="g4"
inkscape:label="logo">
<svg:path
d="m 456.0129,751.74687 c -46.41279,0 -89.42079,-13.82399 -118.09279,-39.60319 a 96.895989,96.895989 0 0 1 -32.12799,-73.19039 98.329588,98.329588 0 0 1 32.12799,-72.9344 c 26.624,-24.19199 73.728,-39.55199 118.09279,-39.55199 49.07519,0 88.37119,12.3648 118.39999,39.60319 a 97.407989,97.407989 0 0 1 31.69279,72.8832 101.52959,101.52959 0 0 1 -31.69279,73.19039 c -27.9808,25.9328 -71.9104,39.60319 -118.39999,39.60319 v -29.64479 c 24.6016,0 47.43679,-8.4992 63.38559,-24.3712 15.9488,-15.872 23.1936,-35.1232 23.1936,-58.87999 0,-22.6816 -7.9616,-43.8784 -23.1936,-58.88 -15.744,-15.48799 -39.11679,-24.21759 -63.38559,-24.21759 -24.2688,0 -47.74399,8.6528 -63.48799,24.21759 -15.1808,15.0272 -23.04,36.3008 -23.04,58.88 a 82.35519,82.35519 0 0 0 23.04,58.87999 c 15.744,15.6928 39.06559,24.3712 63.48799,24.3712 z M 117.12014,526.4669 c -24.806392,0 -52.991989,4.6592 -76.799986,15.36 C 18.099355,551.7597 1.575e-4,567.70849 1.575e-4,594.15329 a 54.220794,54.220794 0 0 0 14.7199985,37.2736 c 6.425599,5.9392 16.793599,16.0256 43.878396,21.9648 12.108798,2.55999 37.990395,6.68159 63.769588,9.39519 25.7792,2.7136 50.7648,5.12 61.0048,7.8592 8.1408,2.0736 21.83679,4.8896 21.83679,20.2496 0,15.36 -14.41279,19.968 -16.92159,20.9664 -2.5088,0.9984 -19.8144,8.9344 -50.8928,8.9344 a 216.42237,216.42237 0 0 1 -60.59519,-10.4192 c -11.596799,-4.1472 -23.756797,-9.6 -35.097596,-23.4496 a 40.268795,40.268795 0 0 1 -7.295999,-22.2208 H 6.2465567 v 78.84799 H 37.529754 v -10.67519 a 4.4543995,4.4543995 0 0 1 6.7584,-3.84 246.42557,246.42557 0 0 0 45.772794,14.79679 c 16.435202,3.4304 27.059192,5.9136 47.487992,5.9136 a 202.62398,202.62398 0 0 0 63.6416,-8.9856 111.07839,111.07839 0 0 0 37.81119,-18.66239 51.814394,51.814394 0 0 0 20.24959,-41.4976 58.060793,58.060793 0 0 0 -16.35839,-40.80639 72.012792,72.012792 0 0 0 -20.1728,-13.7984 148.60798,148.60798 0 0 0 -24.88319,-8.6784 c -16.2304,-3.968 -52.6848,-8.9344 -70.1184,-10.6752 -18.27839,-1.8944 -49.99679,-4.5312 -62.668789,-8.448 -3.839999,-1.2032 -11.673599,-4.9152 -11.673599,-14.0032 0,-6.4768 3.584,-11.9552 10.649599,-16.384 C 75.26415,560.7709 97.945747,556.3933 121.60014,556.3933 a 166.98878,166.98878 0 0 1 66.7136,13.03039 72.857591,72.857591 0 0 1 15.87199,9.472 47.718394,47.718394 0 0 1 15.6416,26.1632 h 25.2672 V 536.4253 h -28.16 v 7.9616 c 0,2.56 -2.56,5.9392 -7.68,3.1488 -12.69759,-6.6048 -48.38399,-20.8896 -92.13439,-21.0688 z m 618.21433,12.5952 137.62558,124.18558 -1.408,-83.60959 c -0.1536,-10.9824 -2.1504,-15.56479 -14.0288,-15.56479 h -25.85599 v -25.0112 h 117.75998 v 25.0112 h -25.26719 c -12.0832,0 -12.8,3.89119 -13.0048,15.56479 l 2.1248,159.76959 h -40.32 L 714.41927,597.94209 v 100.37759 c 0.128,10.9312 0.64,16.0768 11.8784,16.0768 h 28.16 v 25.0112 H 639.02728 v -25.0112 h 27.0336 c 10.08639,0 9.67679,-9.6256 9.67679,-16.64 V 580.58529 c 0,-7.68 -1.0752,-16.48639 -16.89599,-16.48639 h -21.9136 V 539.0621 Z M 1083.776,714.34528 a 55.859193,55.859193 0 0 0 6.9632,-0.4352 8.627199,8.627199 0 0 0 5.4272,-4.8128 28.006397,28.006397 0 0 0 0.5376,-5.4016 v -39.552 c 0,-1.3312 0,-1.3568 -1.6896,-3.456 -1.6896,-2.0992 -72.0896,-81.91999 -75.2896,-85.50399 -3.9936,-4.352 -11.008,-11.08479 -21.6832,-11.08479 h -24.44796 v -25.0368 h 137.98396 v 24.9856 h -16.64 c -3.84,0 -6.4,3.66079 -3.1232,7.67999 0,0 46.4384,55.552 46.8736,56.1408 0.4352,0.5888 0.8192,0.7168 1.408,0.1792 0.5888,-0.5376 47.5904,-55.808 47.9488,-56.32 a 4.7871994,4.7871994 0 0 0 -4.096,-7.67999 h -17.0752 V 539.0621 H 1280 v 25.0368 h -25.2672 c -9.1648,0 -12.8,1.68959 -19.7888,9.47199 l -76.16,86.88639 a 5.3759994,5.3759994 0 0 0 -0.9216,3.6864 v 39.5264 a 28.159997,28.159997 0 0 0 0.5632,5.4016 8.524799,8.524799 0 0 0 5.4016,4.8128 50.611194,50.611194 0 0 0 6.912,0.4352 h 25.8304 v 25.0368 h -137.2672 v -25.0368 z"
id="path1"
fill="#000000"
style="stroke-width:2.56" />
</svg:g>
</svg:g>
</svg>

Before

Width:  |  Height:  |  Size: 5.1 KiB

View File

@@ -1,281 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 96 96"
width="96"
height="96"
version="1.1"
id="svg25"
sodipodi:docname="icons8-acess-point-3.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs25" />
<sodipodi:namedview
id="namedview25"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="2.0255663"
inkscape:cx="-53.071578"
inkscape:cy="-106.14316"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg25">
<sodipodi:guide
position="-127.86548,48.359002"
orientation="0,-1"
id="guide25"
inkscape:locked="false" />
<sodipodi:guide
position="47.76442,140.92571"
orientation="1,0"
id="guide26"
inkscape:locked="false" />
<sodipodi:guide
position="44.611364,71.852727"
orientation="1,0"
id="guide27"
inkscape:locked="false" />
</sodipodi:namedview>
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXa"
x1="34.117001"
x2="33.909"
y1="30.451"
y2="11.826"
gradientTransform="matrix(2.2111455,0,0,-2.2111455,-5.0805451,101.8257)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#737b80"
id="stop1" />
<stop
offset=".714"
stop-color="#737b80"
id="stop2" />
<stop
offset=".756"
stop-color="#737b80"
id="stop3" />
<stop
offset=".863"
stop-color="#656c71"
id="stop4" />
<stop
offset="1"
stop-color="#575c61"
id="stop5" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXa)"
d="m 63.464964,82.168622 c -0.210059,0 -0.42454,-0.03096 -0.636811,-0.09287 -1.169694,-0.351572 -1.83525,-1.58318 -1.483677,-2.752875 L 74.611348,35.09997 c 0.351573,-1.169696 1.585392,-1.835252 2.752877,-1.483679 1.169696,0.351571 1.83525,1.583179 1.483677,2.752876 L 65.581031,80.592076 c -0.285238,0.959638 -1.163063,1.576547 -2.116067,1.576546 z"
id="path5"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXa);stroke-width:2.21115" />
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXb"
x1="14.121"
x2="13.913"
y1="30.719"
y2="12.094"
gradientTransform="matrix(2.2111455,0,0,-2.2111455,-5.0805451,101.8257)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#737b80"
id="stop6" />
<stop
offset=".773"
stop-color="#737b80"
id="stop7" />
<stop
offset="1"
stop-color="#575c61"
id="stop8" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXb)"
d="m 32.508927,82.168622 c -0.950793,0 -1.828617,-0.619122 -2.118278,-1.576548 L 17.123777,36.369165 c -0.351573,-1.169696 0.313983,-2.401304 1.483679,-2.752876 1.167483,-0.344938 2.401305,0.313984 2.752875,1.483679 l 13.266874,44.22291 c 0.351572,1.169696 -0.313982,2.401304 -1.483679,2.752875 -0.21227,0.06191 -0.42454,0.09287 -0.634599,0.09287 z"
id="path8"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXb);stroke-width:2.21115" />
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXc"
x1="24"
x2="24"
y1="14.614"
y2="-2.0710001"
gradientTransform="matrix(2.2111455,0,0,-2.2111455,-5.0805451,101.8257)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#899198"
id="stop9" />
<stop
offset="1"
stop-color="#787e85"
id="stop10" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXc)"
d="M 85.576419,88.802058 H 10.397473 c -2.4433136,0 -4.4222888,-1.978974 -4.4222888,-4.42229 V 68.901749 c 0,-2.443315 1.9789752,-4.422291 4.4222888,-4.422291 h 75.178946 c 2.443316,0 4.422291,1.978976 4.422291,4.422291 v 15.478019 c 0,2.443316 -1.978975,4.42229 -4.422291,4.42229 z"
id="path10"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXc);stroke-width:2.21115" />
<rect
width="75.178947"
height="15.478019"
x="10.397472"
y="68.901749"
fill="#737b80"
id="rect10"
style="stroke-width:2.21115" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXd"
cx="36.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.2111455,0,0,-2.2111455,-5.0805451,101.8257)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop11" />
<stop
offset="1"
stop-opacity="0"
id="stop12" />
</radialGradient>
<circle
cx="75.626282"
cy="76.640755"
r="5.5278635"
fill="url(#sQy7OvPXH0t2mKfqk7XuXd)"
id="circle12"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXd);stroke-width:2.21115" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXe"
cx="30.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.2111455,0,0,-2.2111455,-5.0805451,101.8257)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop13" />
<stop
offset="1"
stop-opacity="0"
id="stop14" />
</radialGradient>
<circle
cx="62.359394"
cy="76.640755"
r="5.5278635"
fill="url(#sQy7OvPXH0t2mKfqk7XuXe)"
id="circle14"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXe);stroke-width:2.21115" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXf"
cx="24.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.2111455,0,0,-2.2111455,-5.0805451,101.8257)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop15" />
<stop
offset="1"
stop-opacity="0"
id="stop16" />
</radialGradient>
<circle
cx="49.092525"
cy="76.640755"
r="5.5278635"
fill="url(#sQy7OvPXH0t2mKfqk7XuXf)"
id="circle16"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXf);stroke-width:2.21115" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXg"
cx="11.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.2111455,0,0,-2.2111455,-5.0805451,101.8257)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop17" />
<stop
offset="1"
stop-opacity="0"
id="stop18" />
</radialGradient>
<circle
cx="20.347635"
cy="76.640755"
r="5.5278635"
fill="url(#sQy7OvPXH0t2mKfqk7XuXg)"
id="circle18"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXg);stroke-width:2.21115" />
<circle
cx="75.626282"
cy="76.640755"
r="3.3167181"
fill="#50e6ff"
id="circle19"
style="stroke-width:2.21115" />
<circle
cx="62.359394"
cy="76.640755"
r="3.3167181"
fill="#50e6ff"
id="circle20"
style="stroke-width:2.21115" />
<circle
cx="49.092525"
cy="76.640755"
r="3.3167181"
fill="#50e6ff"
id="circle21"
style="stroke-width:2.21115" />
<circle
cx="20.347635"
cy="76.640755"
r="3.3167181"
fill="#50e6ff"
id="circle22"
style="stroke-width:2.21115" />
<path
fill="#0078d4"
d="M 76.06186,21.738016 71.411821,26.423432 47.942723,17.974646 24.495735,26.403533 19.894342,21.766761 C 19.049684,20.913259 19.012095,19.504758 19.863382,18.65789 27.279564,11.290354 37.453044,6.9542994 47.942718,6.9476659 c 10.421129,-0.011054 20.76929,4.3272091 28.154515,11.6881131 0.849081,0.844657 0.809281,2.250946 -0.03538,3.102237 z"
id="path22"
style="stroke-width:2.21115" />
<path
fill="#199be2"
d="m 71.414032,26.425643 -0.455497,0.442231 -5.757821,5.757823 -17.253569,-5.819736 -17.233669,5.797623 -5.757823,-5.73571 -0.455494,-0.464341 c 5.779935,-6.507401 14.146909,-10.6334 23.446986,-10.6334 9.319978,0 17.684742,4.123788 23.466887,10.65551 z"
id="path23"
style="stroke-width:2.21115" />
<path
fill="#35c1f1"
d="m 65.198502,32.623485 -0.999438,0.992804 -5.216091,5.207248 -11.04025,-3.192894 -11.018139,3.192894 -5.216092,-5.207248 -0.999437,-1.014916 c 4.194543,-4.897687 10.36585,-8.008769 17.233668,-8.008769 6.889929,0.0023 13.061235,3.111082 17.255779,8.030881 z"
id="path24"
style="stroke-width:2.21115" />
<path
fill="#50e6ff"
d="m 58.982973,38.823537 -1.629615,1.631826 -7.862833,7.907056 c -0.844658,0.85129 -2.208935,0.85129 -3.055803,0.0045 l -7.902635,-7.911521 -1.607503,-1.631824 c 2.587041,-3.287976 6.56268,-5.40404 11.018139,-5.40404 4.477569,-0.0023 8.453208,2.116064 11.04025,5.40404 z"
id="path25"
style="stroke-width:2.21115" />
</svg>

Before

Width:  |  Height:  |  Size: 8.8 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0,0,256,256" width="48px" height="48px" fill-rule="nonzero"><g fill="#0088cc" fill-rule="nonzero" stroke="none" stroke-width="1" stroke-linecap="butt" stroke-linejoin="miter" stroke-miterlimit="10" stroke-dasharray="" stroke-dashoffset="0" font-family="none" font-weight="none" font-size="none" text-anchor="none" style="mix-blend-mode: normal"><g transform="scale(5.33333,5.33333)"><path d="M28.465,38.611c0.419,-1.105 0.664,-2.365 0.664,-3.714c0,-4.133 -2.211,-7.494 -4.929,-7.494c-2.741,0 -4.951,3.361 -4.951,7.494c0,1.326 0.221,2.586 0.641,3.669c-9.041,0.951 -15.407,4.731 -17.993,6.432c4.355,-6.278 8.909,-13.638 13.262,-22.105c1.083,-2.101 2.101,-4.178 3.05,-6.211c0.375,0.243 0.751,0.509 1.171,0.775c1.945,1.215 3.759,1.879 5.084,2.233c-0.973,-0.73 -2.033,-1.613 -3.116,-2.697c-0.817,-0.817 -1.547,-1.637 -2.167,-2.433c1.835,-4.022 3.427,-7.891 4.819,-11.56c2.32,6.144 5.217,12.842 8.841,19.893c2.343,4.531 4.731,8.754 7.117,12.644c-0.685,-0.375 -1.437,-0.73 -2.233,-1.039c-1.371,-0.53 -2.652,-0.862 -3.759,-1.06c1.503,0.751 3.25,1.747 5.084,3.073c1.194,0.885 2.254,1.769 3.161,2.631c0.021,0.021 0.021,0.021 0.045,0.045c1.26,2.056 2.565,3.957 3.846,5.813c-2.541,-1.681 -8.796,-5.395 -17.637,-6.389z"></path></g></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1,123 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0,0,256,256"
width="64px"
height="64px"
fill-rule="nonzero"
version="1.1"
id="svg13"
sodipodi:docname="icons8-asus (1).svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview13"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="17.1875"
inkscape:cx="31.970909"
inkscape:cy="32"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g13" />
<defs
id="defs10">
<radialGradient
cx="34.625"
cy="31.875"
r="23.206"
gradientUnits="userSpaceOnUse"
id="color-1">
<stop
offset="0"
stop-color="#f4e9c3"
id="stop1" />
<stop
offset="0.219"
stop-color="#f8eecd"
id="stop2" />
<stop
offset="0.644"
stop-color="#fdf4dc"
id="stop3" />
<stop
offset="1"
stop-color="#fff6e1"
id="stop4" />
</radialGradient>
<linearGradient
x1="0.365"
y1="32.5"
x2="64"
y2="32.5"
gradientUnits="userSpaceOnUse"
id="color-2">
<stop
offset="0.053"
stop-color="#000000"
id="stop5" />
<stop
offset="1"
stop-color="#000000"
id="stop6" />
</linearGradient>
<radialGradient
cx="34.625"
cy="31.875"
r="23.206"
gradientUnits="userSpaceOnUse"
id="color-3">
<stop
offset="0"
stop-color="#f4e9c3"
id="stop7" />
<stop
offset="0.219"
stop-color="#f8eecd"
id="stop8" />
<stop
offset="0.644"
stop-color="#fdf4dc"
id="stop9" />
<stop
offset="1"
stop-color="#fff6e1"
id="stop10" />
</radialGradient>
</defs>
<g
fill="none"
fill-rule="nonzero"
stroke="none"
stroke-width="1"
stroke-linecap="butt"
stroke-linejoin="miter"
stroke-miterlimit="10"
stroke-dasharray=""
stroke-dashoffset="0"
font-family="none"
font-weight="none"
font-size="none"
text-anchor="none"
style="mix-blend-mode: normal"
id="g13">
<g
transform="scale(4,4)"
id="g12">
<path
d="M6.156,29.243l-5.723,9.919c-0.192,0.333 0.048,0.75 0.433,0.75h2.764c0.356,0 0.686,-0.19 0.865,-0.498l5.629,-9.701zM6.299,29.005c0,0 0.815,-1.486 1.625,-2.92c0.354,-0.628 1.019,-1.014 1.74,-1.014c1.408,0.001 3.757,0.003 5.086,0.004c0.552,0 0.995,0.448 0.995,1.001v2.61c0,0 0.323,-1.386 0.891,-2.043c0.534,-0.619 1.246,-1.478 2.872,-1.592h10.963c0.552,0 1,0.448 1,1v1.955c0,0.552 -0.448,1 -1,1zM64,28.008v-1.958c0,-0.552 -0.448,-1 -1,-1h-11.8c-1.622,0.114 -2.337,0.972 -2.872,1.592c-0.569,0.657 -0.89,2.043 -0.89,2.043v0.318l15.562,0.005c0.552,0 1,-0.448 1,-1zM33.095,25.07h1.578c0.552,0 1,0.448 1,1v2.935h-3.578v-2.935c0,-0.552 0.448,-1 1,-1zM44.839,25.07h1.574c0.552,0 1,0.448 1,1v2.935h-3.574v-2.935c0,-0.552 0.447,-1 1,-1zM47.413,30.425l-3.514,-0.233v4.566c0,0 -0.01,1.314 -1.158,1.314c-1.138,0 -6.039,0 -6.039,0c0,0 -1.023,-0.093 -1.023,-1.303c0,-1.207 0,-5.196 0,-5.196l-3.549,-0.285v7.001c0.574,3.359 3.311,3.617 3.311,3.617c0,0 0.278,0.022 0.324,0.026h8.156c0,0 3.491,-0.311 3.491,-4.023c0.001,-3.713 0.001,-5.484 0.001,-5.484zM13.111,39.914h15.73c2.914,-0.647 3.218,-3.577 3.218,-3.577c0.136,-0.871 0.057,-1.574 0.057,-1.574c-0.088,-0.588 -1.094,-3.178 -3.281,-3.405c-1.304,-0.134 -12.91,-1.155 -12.91,-1.155c0.225,1.288 0.748,1.938 1.094,2.311c0.805,0.857 2.087,1.099 2.087,1.099c0.309,0.033 8.945,0.824 8.945,0.824c0.274,0.017 0.797,0.093 0.79,0.849c0,0.091 -0.075,0.757 -0.738,0.757h-12.014c-0.276,0 -0.5,-0.224 -0.5,-0.5v-5.373l-3.478,-0.281v9.027c0,0.55 0.448,0.998 1,0.998zM47.444,37.017c0.001,-0.552 0.448,-0.998 1,-0.998h11.429c0.286,0 0.595,-0.187 0.595,-0.187c0.13,-0.129 0.235,-0.364 0.235,-0.591c0,-0.753 -0.561,-0.786 -0.843,-0.803c0,0 -8.732,-0.808 -9.036,-0.834c0,0 -1.211,-0.207 -2.017,-1.068c-0.351,-0.369 -0.815,-0.771 -1.161,-2.099c0,0 11.671,0.763 12.968,0.897c2.189,0.232 3.215,2.632 3.308,3.43c0,0 0.093,0.722 -0.02,1.607c0,0 -0.454,3.374 -3.664,3.579h-11.797c-0.553,0 -1.001,-0.449 -1,-1.002z"
fill="url(#color-2)"
id="path11" />
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 4.7 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#E91E63" d="M26.763,24.548c-0.614,0.01,0.117,0.317,0.918,0.44c0.22-0.172,0.419-0.348,0.6-0.515C27.781,24.592,27.274,24.594,26.763,24.548 M30.054,23.727c0.364-0.5,0.631-1.055,0.723-1.624c-0.082,0.405-0.303,0.755-0.51,1.128c-1.146,0.721-0.108-0.43,0-0.865C29.035,23.913,30.098,23.293,30.054,23.727 M31.269,20.568c0.073-1.105-0.219-0.756-0.317-0.336C31.068,20.294,31.156,21.013,31.269,20.568 M24.439,5.478c0.327,0.058,0.706,0.104,0.653,0.183C25.449,5.582,25.531,5.51,24.439,5.478 M25.093,5.66l-0.232,0.047l0.215-0.017L25.093,5.66 M35.294,20.986c0.038,0.991-0.29,1.472-0.585,2.322l-0.529,0.266c-0.435,0.841,0.041,0.535-0.268,1.202c-0.679,0.603-2.055,1.883-2.496,2.004c-0.321-0.009,0.218-0.382,0.289-0.526c-0.906,0.62-0.728,0.934-2.113,1.313l-0.041-0.09c-3.419,1.607-8.166-1.576-8.103-5.928c-0.037,0.275-0.104,0.209-0.18,0.32c-0.175-2.237,1.033-4.486,3.073-5.403c1.995-0.987,4.335-0.58,5.763,0.75c-0.785-1.028-2.348-2.119-4.199-2.017c-1.814,0.029-3.51,1.182-4.077,2.434c-0.929,0.585-1.038,2.256-1.441,2.563c-0.545,4.003,1.024,5.733,3.68,7.768c0.417,0.282,0.118,0.326,0.175,0.541c-0.883-0.412-1.69-1.037-2.354-1.801c0.353,0.517,0.733,1.017,1.223,1.41c-0.831-0.279-1.942-2.013-2.267-2.084c1.435,2.567,5.818,4.502,8.113,3.541c-1.062,0.04-2.412,0.021-3.604-0.42c-0.501-0.257-1.183-0.791-1.062-0.893c3.133,1.171,6.369,0.887,9.078-1.286c0.689-0.537,1.443-1.449,1.662-1.464c-0.327,0.493,0.057,0.239-0.197,0.674c0.688-1.109-0.299-0.449,0.711-1.913l0.373,0.512c-0.139-0.917,1.143-2.033,1.012-3.489c0.291-0.445,0.326,0.478,0.015,1.502c0.434-1.136,0.113-1.317,0.224-2.254c0.121,0.315,0.279,0.648,0.359,0.981c-0.281-1.097,0.289-1.848,0.433-2.485c-0.142-0.063-0.435,0.485-0.503-0.812c0.01-0.562,0.156-0.295,0.214-0.435c-0.111-0.064-0.4-0.496-0.577-1.323c0.127-0.193,0.342,0.506,0.516,0.533c-0.112-0.655-0.304-1.159-0.313-1.665c-0.51-1.061-0.181,0.143-0.592-0.458c-0.543-1.687,0.449-0.39,0.514-1.156c0.82,1.188,1.289,3.029,1.504,3.792c-0.164-0.93-0.428-1.832-0.752-2.704c0.249,0.108-0.401-1.911,0.324-0.575c-0.772-2.848-3.314-5.511-5.65-6.76c0.286,0.262,0.646,0.591,0.517,0.642c-1.163-0.69-0.959-0.745-1.124-1.041c-0.946-0.383-1.01,0.034-1.636,0c-1.786-0.943-2.129-0.845-3.772-1.437l0.078,0.349c-1.184-0.394-1.379,0.146-2.657,0.002c-0.078-0.062,0.41-0.219,0.811-0.278c-1.143,0.15-1.09-0.228-2.208,0.042c0.277-0.197,0.566-0.322,0.861-0.486c-0.932,0.059-2.226,0.542-1.825,0.103c-1.521,0.676-4.22,1.63-5.735,3.051l-0.047-0.322c-0.694,0.835-3.028,2.492-3.215,3.57l-0.185,0.043c-0.361,0.613-0.595,1.305-0.881,1.935c-0.474,0.806-0.692,0.311-0.626,0.436c-0.929,1.883-1.39,3.467-1.79,4.768c0.284,0.424,0.007,2.558,0.113,4.264c-0.467,8.429,5.916,16.609,12.891,18.5c1.023,0.365,2.542,0.354,3.836,0.39c-1.525-0.438-1.722-0.232-3.209-0.749c-1.074-0.506-1.308-1.082-2.066-1.74l0.3,0.53c-1.49-0.526-0.867-0.652-2.078-1.034l0.321-0.424c-0.482-0.032-1.279-0.811-1.497-1.241l-0.528,0.021c-0.634-0.783-0.972-1.348-0.948-1.785l-0.17,0.305c-0.194-0.332-2.335-2.937-1.224-2.33c-0.207-0.188-0.481-0.307-0.779-0.85l0.227-0.258c-0.535-0.686-0.983-1.568-0.949-1.86c0.284,0.384,0.482,0.454,0.679,0.522c-1.351-3.349-1.426-0.187-2.448-3.409l0.216-0.019c-0.166-0.246-0.265-0.521-0.399-0.785l0.094-0.938c-0.972-1.125-0.272-4.781-0.132-6.783c0.097-0.816,0.811-1.684,1.354-3.045l-0.332-0.055c0.632-1.104,3.612-4.433,4.99-4.26c0.669-0.841-0.132-0.002-0.263-0.215c1.469-1.52,1.93-1.073,2.92-1.349c1.068-0.633-0.917,0.251-0.41-0.239c1.848-0.473,1.31-1.073,3.718-1.311c0.254,0.145-0.59,0.223-0.8,0.41c1.538-0.753,4.87-0.584,7.034,0.417c2.511,1.173,5.33,4.642,5.443,7.904l0.126,0.035c-0.063,1.298,0.198,2.798-0.257,4.175L35.294,20.986 M20.072,25.389l-0.086,0.431c0.403,0.547,0.724,1.142,1.237,1.567C20.853,26.664,20.577,26.364,20.072,25.389 M21.023,25.353c-0.213-0.237-0.34-0.518-0.48-0.802c0.135,0.495,0.411,0.922,0.669,1.357L21.023,25.353 M37.877,21.688l-0.088,0.226c-0.166,1.174-0.523,2.332-1.068,3.412C37.324,24.189,37.714,22.947,37.877,21.688 M24.56,5.185C24.974,5.031,25.579,5.101,26.019,5c-0.573,0.048-1.144,0.079-1.706,0.151L24.56,5.185 M10.007,12.923c0.095,0.882-0.667,1.229,0.167,0.644C10.623,12.562,10,13.286,10.007,12.923 M9.028,17.016c0.191-0.592,0.226-0.943,0.3-1.285C8.797,16.41,9.084,16.553,9.028,17.016"/></svg>

Before

Width:  |  Height:  |  Size: 4.2 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#0288d1" d="M24,4C12.956,4,4,12.956,4,24s8.956,20,20,20s20-8.956,20-20S35.044,4,24,4z M24,41c-9.391,0-17-7.609-17-17S14.609,7,24,7s17,7.609,17,17S33.391,41,24,41z"/><path fill="#0288d1" d="M35.641,25.563l2.84,0.004l-0.004,2.395l-5.691-0.012l0.012-8.172l2.855,0.004L35.641,25.563z M26.34,25.102l-4.699,3.684l-4.285-3.379c-0.621,1.484-2.109,2.52-3.836,2.516l-3.664-0.004l0.008-8.172l3.668,0.004c1.926,0.004,3.309,1.223,3.828,2.531l4.297-3.367l1.586,1.25l-3.934,3.086l0.754,0.594l3.934-3.086l1.59,1.254l-3.934,3.082l0.75,0.594l3.941-3.082l0.004-2.836l2.852,0.004l-0.008,5.781l2.84,0.004l-0.004,2.391l-5.691-0.008L26.34,25.102z M15.012,23.84c0-1.113-0.73-1.742-1.77-1.742h-0.637l-0.004,3.477h0.621C14.184,25.574,15.012,25.051,15.012,23.84"/></svg>

Before

Width:  |  Height:  |  Size: 843 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><linearGradient id="TGbgz7YIIasADw2jo2LPPa" x1="24" x2="24" y1="44.346" y2="13.335" gradientTransform="matrix(1 0 0 -1 0 48)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#f44f5a"/><stop offset=".443" stop-color="#ee3d4a"/><stop offset=".651" stop-color="#ed3b48"/><stop offset=".726" stop-color="#eb3442"/><stop offset=".779" stop-color="#e82938"/><stop offset=".804" stop-color="#e52030"/></linearGradient><path fill="url(#TGbgz7YIIasADw2jo2LPPa)" d="M21.62,6.991c-0.013-0.046-0.02-0.126-0.02-0.186C21.6,6.36,21.958,6,22.4,6 c0.188,0,0.319,0.071,0.371,0.091c0.978,0.384,7.697,3.572,6.143,12.787C31.17,17.51,30.211,15,31.116,15 c0.277,0,0.39,0.104,0.56,0.348C34.144,18.892,36,22.973,36,26.927C36,33.595,30.628,39,24,39c-7.288,0-12-6.176-12-12.073 C12,17.118,23.49,15.307,21.62,6.991z"/><linearGradient id="TGbgz7YIIasADw2jo2LPPb" x1="23.5" x2="23.5" y1="30.346" y2="17.849" gradientTransform="matrix(1 0 0 -1 0 48)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fed100"/><stop offset=".353" stop-color="#fdcf00"/><stop offset=".523" stop-color="#fcc700"/><stop offset=".655" stop-color="#f9ba00"/><stop offset=".766" stop-color="#f4a800"/><stop offset=".865" stop-color="#ee9001"/><stop offset=".954" stop-color="#e77201"/><stop offset="1" stop-color="#e36001"/></linearGradient><path fill="url(#TGbgz7YIIasADw2jo2LPPb)" d="M23.225,18.152c0,0-0.182-0.152-0.446-0.152c-0.398,0-0.722,0.317-0.722,0.708 c0.722,4.25-4.329,5.667-4.329,10.625c0,3.13,2.584,5.667,5.772,5.667s5.772-2.537,5.772-5.667 C29.272,25.295,25.65,19.906,23.225,18.152z"/><path fill="#64717c" d="M30,42h-4l-5.5-1L15,42h-4l-5-5v-4l11.667-5H22l5,1l6-1h4l5,5v4L30,42z"/><linearGradient id="TGbgz7YIIasADw2jo2LPPc" x1="19.087" x2="29.046" y1="22.239" y2="3.511" gradientTransform="matrix(1 0 0 -1 0 48)" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#bec5c8"/><stop offset=".968" stop-color="#b9c1c4"/></linearGradient><path fill="url(#TGbgz7YIIasADw2jo2LPPc)" d="M27,41c0,0.552-0.448,1-1,1H15c-0.552,0-1-0.448-1-1v-4c0-0.552,0.448-1,1-1h11 c0.552,0,1,0.448,1,1V41z M42,41c0,0.552-0.448,1-1,1H30c-0.552,0-1-0.448-1-1v-4c0-0.552,0.448-1,1-1h11c0.552,0,1,0.448,1,1V41z M33,33c0,0.552-0.448,1-1,1H21c-0.552,0-1-0.448-1-1v-4c0-0.552,0.448-1,1-1h11c0.552,0,1,0.448,1,1V33z M6,33c0,0.552,0.448,1,1,1 h10c0.552,0,1-0.448,1-1v-4c0-0.552-0.448-1-1-1H7c-0.552,0-1,0.448-1,1V33z M41,28h-5c-0.552,0-1,0.448-1,1v4c0,0.552,0.448,1,1,1 h6v-5C42,28.448,41.552,28,41,28z M11,36H6v5c0,0.552,0.448,1,1,1h4c0.552,0,1-0.448,1-1v-4C12,36.448,11.552,36,11,36z"/></svg>

Before

Width:  |  Height:  |  Size: 2.6 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#fff" d="M24 4A20 20 0 1 0 24 44A20 20 0 1 0 24 4Z"/><path fill="#1976d2" d="M24,43.997c-0.199,0-0.652,0.006-0.85,0l4-10.999h5.625c0.987,0,2.071-0.759,2.409-1.686l4.748-12.687c0.725-1.995-0.417-3.626-2.539-3.626h-7.804l-6.518,18.257h-0.002l-3.712,10.198C10.55,41.361,4,33.445,4,23.999c0-9.174,6.178-16.905,14.6-19.261l-3.83,10.526h-0.001L8.15,32.998h4.239l5.576-14.999h3.185l-5.576,14.999l3.919,0.001l5.438-14.374c0.726-1.995-0.416-3.626-2.536-3.626H19.15l3.951-10.978C23.399,4.008,23.699,4,24,4c11.046,0,20,8.953,20,19.999S35.046,43.997,24,43.997z M36.15,17.999h-3.185l-4.509,11.999h3.185L36.15,17.999z"/></svg>

Before

Width:  |  Height:  |  Size: 712 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#3f51b5" d="M48 16L48 14 40.469 14 39.809 16zM33 31L33 29 29 29 27 29 27 31zM39.766 28L40.51 26 34.51 26 35.266 28zM29 26H33V28H29zM29 23H33V25H29zM42 29L42 31 48 31 48 29 46 29zM36.181 19L35.521 17 27 17 27 19 29 19zM37.17 22L36.51 20 29 20 29 22zM33.378 23L34.133 25 40.883 25 41.628 23zM42 23H46V25H42zM27 32H33V34H27zM35.191 16L34.531 14 27 14 27 16zM36.776 32L37.531 34 38.276 32zM42 32H48V34H42zM39.479 17L38.819 19 46 19 48 19 48 17zM39.393 29L35.643 29 36.398 31 38.648 31zM42 26H46V28H42zM38.49 20L37.83 22 46 22 46 20zM0 14H8V16H0zM0 17H8V19H0zM2 20H6V22H2zM2 23H6V25H2zM2 26H6V28H2zM0 29H8V31H0zM0 32H8V34H0zM10 17H18V19H10zM24.977 16c-.913-1.208-2.347-2-3.977-2H10v2h7.023H24.977z"/><path fill="#3f51b5" d="M25.578 17h-9.131C16.171 17.613 16 18.283 16 19h10C26 18.288 25.846 17.613 25.578 17zM23.975 23H12v2h11.973c-.833-.62-1.854-1-2.973-1C22.119 24 23.142 23.621 23.975 23zM17.023 32H10v2h11c1.63 0 3.065-.792 3.977-2H17.023zM18 29h-2-6v2h6.447H18h7.578C25.846 30.387 26 29.712 26 29H18zM21 20c0 0 0 .083 0 1s-1 1-1 1h4.979c.441-.584.77-1.257.921-2H21zM12 20H17V22H12z"/><g><path fill="#3f51b5" d="M21 28h4.885c-.156-.738-.467-1.418-.907-2H20c0 0 1 .167 1 1S21 28 21 28zM12 26H17V28H12z"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><rect width="48" height="16" y="16" fill="#ff1744"/><path fill="#fff" d="M11.935,26.062c0.37,0.341,0.782,0.45,1.227,0.478c0.645,0.039,1.217-0.156,1.724-0.546 c0.124-0.096,0.163-0.126,0.163-0.126s0.777,0.609,1.097,0.855c-0.261,0.309-0.567,0.521-0.901,0.692 c-1.103,0.565-2.249,0.687-3.424,0.264c-1.346-0.485-2.131-1.693-2.059-3.117c0.073-1.441,1.005-2.608,2.392-2.944 c1.064-0.257,2.084-0.143,2.98,0.539c0.651,0.496,1.001,1.28,1.147,2.068c0,0-2.595,1.11-3.795,1.606 C12.313,25.903,12.141,25.975,11.935,26.062z M11.472,24.928c0.969-0.401,1.935-0.801,2.901-1.201 c-0.334-0.722-1.096-1.017-1.866-0.748C11.758,23.24,11.28,24.124,11.472,24.928z"/><path fill="#fff" d="M27.076,27.934c-1.632-0.017-2.956-1.068-3.261-2.6c-0.37-1.852,0.969-3.633,2.86-3.808 c1.281-0.118,2.373,0.254,3.155,1.3c1.451,1.941,0.22,4.757-2.193,5.055C27.45,27.905,27.263,27.917,27.076,27.934z M27.11,26.434 c0.929,0.002,1.622-0.723,1.628-1.704c0.006-0.97-0.724-1.742-1.649-1.745c-0.936-0.003-1.631,0.734-1.628,1.726 C25.465,25.675,26.189,26.432,27.11,26.434z"/><path fill="#fff" d="M40.624,27.934c-1.632-0.017-2.956-1.068-3.261-2.6c-0.37-1.852,0.969-3.633,2.86-3.808 c1.281-0.118,2.373,0.254,3.155,1.3c1.451,1.941,0.22,4.757-2.193,5.055C40.998,27.905,40.811,27.917,40.624,27.934z M40.658,26.434c0.929,0.002,1.623-0.723,1.628-1.704c0.006-0.97-0.724-1.742-1.649-1.745c-0.936-0.003-1.631,0.734-1.628,1.726 C39.013,25.675,39.737,26.432,40.658,26.434z"/><path fill="#fff" d="M21.377,27.987c0-0.095,0.001-2.587,0-3.663c-0.001-0.759-0.605-1.327-1.414-1.331 c-0.794-0.005-1.383,0.56-1.384,1.332c-0.001,1.076,0,3.679,0,3.679l-1.741,0.002l0.007-6.378c0,0,1.168-0.018,1.722-0.018 c0,0.264-0.006,0.832-0.006,0.832s0.138-0.128,0.181-0.171c1.157-1.174,3.226-0.973,4.031,0.391 c0.223,0.378,0.338,0.789,0.34,1.223c0.008,1.264,0.003,4.104,0.003,4.104S21.964,27.987,21.377,27.987z"/><path fill="#fff" d="M30.164,21.608c0.642,0,1.964,0.015,1.964,0.015s1.478,4.024,1.526,4.149 c0.115-0.311,1.208-3.29,1.521-4.174c0.646,0.018,1.288,0.01,1.97,0.01c-0.029,0.084-2.562,6.398-2.562,6.398l-1.876-0.003 C31.905,26.042,30.191,21.692,30.164,21.608z"/><path fill="#fff" d="M5.767,26.393c0.104,0,3.868,0.011,3.868,0.011l-0.002,1.581L4,27.989v-8.073h1.77 C5.77,19.916,5.767,26.284,5.767,26.393z"/></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1,395 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 96 96"
width="96"
height="96"
version="1.1"
id="svg16"
sodipodi:docname="icons8-loadbalancer-6.svg"
xml:space="preserve"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg"><defs
id="defs16"><linearGradient
id="rgtybR5fDU8R4IgIFkOP5b"
x1="19.388"
x2="28.413"
y1="-9.9449997"
y2="52.098999"
gradientTransform="matrix(0,-0.49311513,-0.49311513,0,46.019494,43.995025)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#1ea2e4"
id="stop7-6" /><stop
offset="1"
stop-color="#32bdef"
id="stop8-2" /></linearGradient><linearGradient
id="rgtybR5fDU8R4IgIFkOP5a"
x1="477.17899"
x2="472.772"
y1="522.18701"
y2="522.18701"
gradientTransform="matrix(-0.34868505,0.34868505,0.34868505,0.34868505,23.783091,-306.66044)"
gradientUnits="userSpaceOnUse"><stop
offset=".365"
stop-color="#199ae0"
id="stop1" /><stop
offset=".699"
stop-color="#1898de"
id="stop2" /><stop
offset=".819"
stop-color="#1691d8"
id="stop3-9" /><stop
offset=".905"
stop-color="#1186cc"
id="stop4-1" /><stop
offset=".974"
stop-color="#0a75bc"
id="stop5-2" /><stop
offset="1"
stop-color="#076cb3"
id="stop6-7" /></linearGradient><linearGradient
id="ArtDYZ2lT75vkabREsTDEb"
x1="10.443"
x2="34.894001"
y1="35.985001"
y2="11.533"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.73295303,0,0,0.73295303,60.409094,29.991812)"><stop
offset="0"
stop-color="#32bdef"
id="stop7-3" /><stop
offset="1"
stop-color="#1ea2e4"
id="stop8-7" /></linearGradient><linearGradient
id="ArtDYZ2lT75vkabREsTDEa"
x1="37"
x2="37"
y1="41.555"
y2="28.030001"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.73295303,0,0,0.73295303,60.409094,29.991812)"><stop
offset=".365"
stop-color="#199ae0"
id="stop1-5" /><stop
offset=".699"
stop-color="#1898de"
id="stop2-9" /><stop
offset=".819"
stop-color="#1691d8"
id="stop3-2" /><stop
offset=".905"
stop-color="#1186cc"
id="stop4-2" /><stop
offset=".974"
stop-color="#0a75bc"
id="stop5-8" /><stop
offset="1"
stop-color="#076cb3"
id="stop6-9" /></linearGradient><linearGradient
id="901RIHcLyz6dZPGSvSf1Xc"
x1="33.436001"
x2="38.157001"
y1="21.563999"
y2="16.843"
gradientTransform="matrix(-1,0,0,1,121.71219,17.368129)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#ae4cd5"
id="stop5-6" /><stop
offset="1"
stop-color="#ac4ad5"
id="stop6-1" /></linearGradient><linearGradient
id="901RIHcLyz6dZPGSvSf1Xb"
x1="694.97601"
x2="717.71802"
y1="35.709"
y2="12.967"
gradientTransform="translate(-606.28782,17.368129)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#ae4cd5"
id="stop3-29" /><stop
offset="1"
stop-color="#ac4ad5"
id="stop4-3" /></linearGradient><linearGradient
id="901RIHcLyz6dZPGSvSf1Xa"
x1="36.25"
x2="36.25"
y1="38.042999"
y2="23.006001"
gradientTransform="matrix(-1,0,0,1,121.71219,17.368129)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#912fbd"
id="stop1-1" /><stop
offset="1"
stop-color="#9332bf"
id="stop2-94" /></linearGradient><linearGradient
inkscape:collect="always"
xlink:href="#ArtDYZ2lT75vkabREsTDEa"
id="linearGradient24"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.73295303,-0.73295303,0,65.635592,60.153515)"
x1="37"
y1="41.555"
x2="37"
y2="28.030001" /><linearGradient
inkscape:collect="always"
xlink:href="#ArtDYZ2lT75vkabREsTDEb"
id="linearGradient25"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0,0.73295303,-0.73295303,0,65.635592,60.153515)"
x1="10.443"
y1="35.985001"
x2="34.894001"
y2="11.533" /><linearGradient
inkscape:collect="always"
xlink:href="#ArtDYZ2lT75vkabREsTDEb"
id="linearGradient26"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.51827606,0.51827606,-0.51827606,0.51827606,65.099589,38.283295)"
x1="10.443"
y1="35.985001"
x2="34.894001"
y2="11.533" /><linearGradient
inkscape:collect="always"
xlink:href="#ArtDYZ2lT75vkabREsTDEa"
id="linearGradient27"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.51827606,0.51827606,-0.51827606,0.51827606,65.099589,38.283295)"
x1="37"
y1="41.555"
x2="37"
y2="28.030001" /><linearGradient
inkscape:collect="always"
xlink:href="#ArtDYZ2lT75vkabREsTDEa"
id="linearGradient28"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.51827606,0.51827606,0.51827606,0.51827606,31.063993,38.239101)"
x1="37"
y1="41.555"
x2="37"
y2="28.030001" /><linearGradient
inkscape:collect="always"
xlink:href="#ArtDYZ2lT75vkabREsTDEb"
id="linearGradient29"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(-0.51827606,0.51827606,0.51827606,0.51827606,31.063993,38.239101)"
x1="10.443"
y1="35.985001"
x2="34.894001"
y2="11.533" /><linearGradient
id="901RIHcLyz6dZPGSvSf1Xc-8"
x1="33.436001"
x2="38.157001"
y1="21.563999"
y2="16.843"
gradientTransform="matrix(0,0.78639422,0.78639422,0,28.708615,-1.1133533)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#ae4cd5"
id="stop5-84" /><stop
offset="1"
stop-color="#ac4ad5"
id="stop6-3" /></linearGradient><linearGradient
id="901RIHcLyz6dZPGSvSf1Xb-1"
x1="694.97601"
x2="717.71802"
y1="35.709"
y2="12.967"
gradientTransform="matrix(0,-0.78639422,0.78639422,0,28.708615,571.38165)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#ae4cd5"
id="stop3-4" /><stop
offset="1"
stop-color="#ac4ad5"
id="stop4-9" /></linearGradient><linearGradient
id="901RIHcLyz6dZPGSvSf1Xa-2"
x1="36.25"
x2="36.25"
y1="38.042999"
y2="23.006001"
gradientTransform="matrix(0,0.78639422,0.78639422,0,28.708615,-1.1133533)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#912fbd"
id="stop1-0" /><stop
offset="1"
stop-color="#9332bf"
id="stop2-6" /></linearGradient></defs><sodipodi:namedview
id="namedview16"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="5.6568543"
inkscape:cx="45.343222"
inkscape:cy="30.405592"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg16"><sodipodi:guide
position="19.559789,143.73834"
orientation="1,0"
id="guide17"
inkscape:locked="false" /><sodipodi:guide
position="24.084469,98.224212"
orientation="0,-1"
id="guide18"
inkscape:locked="false" /><sodipodi:guide
position="19.845169,116.43962"
orientation="0,-1"
id="guide19"
inkscape:locked="false" /><sodipodi:guide
position="48.041504,83.46582"
orientation="1,0"
id="guide20"
inkscape:locked="false" /><sodipodi:guide
position="78.25,47.75"
orientation="0,-1"
id="guide21"
inkscape:locked="false" /><sodipodi:guide
position="50.394457,65.316468"
orientation="0,-1"
id="guide29"
inkscape:locked="false" /><sodipodi:guide
position="67.605347,21.060837"
orientation="0,-1"
id="guide30"
inkscape:locked="false" /></sodipodi:namedview><linearGradient
id="6fSOUPa~CP8tcsIx_Wvufa"
x1="22.011"
x2="26.212"
y1="785.79102"
y2="789.99298"
gradientTransform="translate(0,-781.78)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#33bef0"
id="stop3" /><stop
offset="1"
stop-color="#0a85d9"
id="stop4" /></linearGradient><linearGradient
id="6fSOUPa~CP8tcsIx_Wvufb"
x1="6.0110002"
x2="10.213"
y1="794.79102"
y2="798.992"
gradientTransform="translate(0,-781.78)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#33bef0"
id="stop5" /><stop
offset="1"
stop-color="#0a85d9"
id="stop6" /></linearGradient><linearGradient
id="6fSOUPa~CP8tcsIx_Wvufc"
x1="6.0110002"
x2="10.213"
y1="812.79102"
y2="816.992"
gradientTransform="translate(0,-781.78)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#33bef0"
id="stop7" /><stop
offset="1"
stop-color="#0a85d9"
id="stop8" /></linearGradient><linearGradient
id="6fSOUPa~CP8tcsIx_Wvufd"
x1="38.011002"
x2="42.212002"
y1="794.79102"
y2="798.992"
gradientTransform="translate(0,-781.78)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#33bef0"
id="stop9" /><stop
offset="1"
stop-color="#0a85d9"
id="stop10" /></linearGradient><linearGradient
id="6fSOUPa~CP8tcsIx_Wvufe"
x1="38.011002"
x2="42.212002"
y1="812.79102"
y2="816.992"
gradientTransform="translate(0,-781.78)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#33bef0"
id="stop11" /><stop
offset="1"
stop-color="#0a85d9"
id="stop12" /></linearGradient><linearGradient
id="6fSOUPa~CP8tcsIx_Wvuff"
x1="22.011"
x2="26.212"
y1="821.79102"
y2="825.992"
gradientTransform="translate(0,-781.78)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#33bef0"
id="stop13" /><stop
offset="1"
stop-color="#0a85d9"
id="stop14" /></linearGradient><linearGradient
id="6fSOUPa~CP8tcsIx_Wvufg"
x1="22.389999"
x2="25.51"
y1="27.841"
y2="20.184"
gradientTransform="matrix(2.2750649,0,0,-2.2750649,-6.4704976,71.078659)"
gradientUnits="userSpaceOnUse"><stop
offset="0"
stop-color="#2aa4f4"
id="stop15" /><stop
offset="1"
stop-color="#007ad9"
id="stop16" /></linearGradient><circle
cx="48.13105"
cy="16.727356"
fill="url(#6fSOUPa~CP8tcsIx_Wvufg)"
id="circle16"
style="fill:url(#6fSOUPa~CP8tcsIx_Wvufg);stroke-width:2.27506"
r="11.375324" /><path
fill="url(#ArtDYZ2lT75vkabREsTDEa)"
d="m 76.856164,73.706426 v -3.471413 c 10e-7,-0.668576 -0.541598,-1.210175 -1.210175,-1.210175 l -10.028123,-2.236361 -6.633415,6.633416 c -0.551964,0.551964 -0.161185,1.495226 0.61934,1.495226 h 16.04168 c 0.668577,0 1.210694,-0.542117 1.210693,-1.210693 z"
id="path6-7"
style="fill:url(#linearGradient27);stroke-width:0.732953" /><path
fill="url(#ArtDYZ2lT75vkabREsTDEb)"
d="m 76.856164,73.706426 v -16.04168 c 0,-0.780525 -0.943262,-1.171304 -1.495226,-0.61934 L 69.764074,62.642269 51.794199,45.172393 c -0.580717,-0.564559 -1.893097,0.66519 -1.791854,1.46875 l 0.702843,5.578407 c 0.101243,0.80356 -0.159842,1.087631 0.40625,1.666854 l 20.207465,20.676214 c 0.216702,0.221729 0.521385,0.354501 0.855673,0.353982 h 3.471413 c 0.668059,5.19e-4 1.210176,-0.541598 1.210175,-1.210174 z"
id="path8-3"
style="fill:url(#linearGradient26);stroke-width:0.732953"
sodipodi:nodetypes="csscsssssccc" /><path
fill="url(#ArtDYZ2lT75vkabREsTDEa)"
d="m 19.307418,73.662232 v -3.471413 c -10e-7,-0.668576 0.541598,-1.210175 1.210175,-1.210175 l 10.028123,-2.236361 6.633415,6.633416 c 0.551964,0.551964 0.161185,1.495226 -0.61934,1.495226 h -16.04168 c -0.668577,0 -1.210694,-0.542117 -1.210693,-1.210693 z"
id="path6-7-8"
style="fill:url(#linearGradient28);stroke-width:0.732953"
sodipodi:nodetypes="ssccssss" /><path
fill="url(#ArtDYZ2lT75vkabREsTDEb)"
d="m 19.307418,73.662232 v -16.04168 c 0,-0.780525 0.943262,-1.171304 1.495226,-0.61934 l 5.596864,5.596863 19.219875,-19.032376 c 0.575495,-0.569881 0.534597,1.292441 0.416854,2.09375 l -0.952843,6.484657 c -0.117743,0.801309 0.507099,1.40358 -0.0625,1.979354 L 24.844679,74.518424 c -0.218045,0.220409 -0.521385,0.354501 -0.855673,0.353982 h -3.471413 c -0.668059,5.19e-4 -1.210176,-0.541598 -1.210175,-1.210174 z"
id="path8-3-6"
style="fill:url(#linearGradient29);stroke-width:0.732953"
sodipodi:nodetypes="csscsssssccc" /><path
fill="url(#ArtDYZ2lT75vkabREsTDEa)"
d="m 48.900809,93.514605 2.45466,-2.45466 c 0.472755,-0.472754 0.472755,-1.23869 0,-1.711445 l -5.509608,-8.6723 h -9.381066 c -0.780595,0 -1.171259,0.94331 -0.619345,1.495224 l 11.343181,11.343181 c 0.472755,0.472755 1.239424,0.472755 1.712178,0 z"
id="path6-7-4"
style="fill:url(#linearGradient24);stroke-width:0.732953" /><path
fill="url(#ArtDYZ2lT75vkabREsTDEb)"
d="M 48.900809,93.514605 60.24399,82.171424 C 60.795904,81.61951 60.40524,80.6762 59.624645,80.6762 h -7.91516 l 0.02115,-50.103052 C 51.730977,29.763235 51.240112,29.301365 50.4302,29.30223 l -4.396838,0.0047 c -0.809912,8.64e-4 -1.649447,0.452869 -1.6495,1.262781 l -0.0039,59.634887 c -2e-5,0.310039 0.118005,0.619345 0.354749,0.855356 l 2.45466,2.45466 c 0.472022,0.472755 1.238691,0.472755 1.711445,0 z"
id="path8-3-5"
style="fill:url(#linearGradient25);stroke-width:0.732953"
sodipodi:nodetypes="ssscsssssccs" /></svg>

Before

Width:  |  Height:  |  Size: 14 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#0883d9" d="M36.232,23.985c0-5.865,4.766-8.51,4.966-8.636c-2.596-3.993-6.79-4.467-8.362-4.468 c-3.643,0-6.863,2.022-8.585,2.022c-1.797,0-4.418-2.121-7.363-2.022c-3.843,0.075-7.363,2.346-9.334,5.691 c-1.397,2.396-1.947,5.217-1.896,8.087c0.002,0.113,0.017,0.228,0.02,0.341H36.32C36.279,24.671,36.243,24.337,36.232,23.985z"/><path fill="#0883d9" d="M30.565,7.063C32.261,5.191,33.21,2.621,33.06,0c-2.346,0-5.066,1.372-6.788,3.394 c-1.348,1.672-2.795,4.293-2.271,6.913C26.422,10.607,29.043,9.085,30.565,7.063z"/><path fill="#0370c8" d="M17.511,45c2.771,0,3.794-1.848,7.413-1.848c3.37,0,4.418,1.848,7.338,1.848 c3.07,0,5.092-2.795,6.913-5.567c2.295-3.218,3.07-6.288,3.169-6.414c-0.094,0-5.287-2.112-6.026-8.019H5.678 c0.157,5.311,2.228,10.79,4.671,14.309C12.27,42.055,14.441,45,17.511,45z"/></svg>

Before

Width:  |  Height:  |  Size: 891 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 6.9 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -1,309 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 96 96"
width="96"
height="96"
version="1.1"
id="svg25"
sodipodi:docname="icons8-router-4g.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs25">
<linearGradient
id="eww6fSHXLG3h4YeAqg9u_a"
x1="17.59"
x2="32.07"
y1="25.934999"
y2="48.230999"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.1618717,0,0,1.1618717,20.507254,2.1916049)">
<stop
offset="0"
stop-color="#85929e"
id="stop1-3" />
<stop
offset="1"
stop-color="#6d7882"
id="stop2-6" />
</linearGradient>
</defs>
<sodipodi:namedview
id="namedview25"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="8.1022652"
inkscape:cx="21.413765"
inkscape:cy="37.396949"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg25"
showguides="true">
<sodipodi:guide
position="9.8178562,30.140718"
orientation="1,0"
id="guide1"
inkscape:locked="false" />
<sodipodi:guide
position="86.470802,38.181968"
orientation="1,0"
id="guide2"
inkscape:locked="false" />
<sodipodi:guide
position="46.258636,9.4810232"
orientation="0,-1"
id="guide3"
inkscape:locked="false" />
<sodipodi:guide
position="53.641442,101.298"
orientation="0,-1"
id="guide4"
inkscape:locked="false" />
</sodipodi:namedview>
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXa"
x1="34.117001"
x2="33.909"
y1="30.451"
y2="11.826"
gradientTransform="matrix(2.0151121,0,0,-2.0151121,-0.28283295,98.172694)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#737b80"
id="stop1" />
<stop
offset=".714"
stop-color="#737b80"
id="stop2" />
<stop
offset=".756"
stop-color="#737b80"
id="stop3" />
<stop
offset=".863"
stop-color="#656c71"
id="stop4" />
<stop
offset="1"
stop-color="#575c61"
id="stop5" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXa)"
d="m 62.185641,80.258348 c -0.191435,0 -0.386902,-0.02821 -0.580352,-0.08463 -1.065993,-0.3204 -1.672543,-1.44282 -1.35214,-2.508817 L 72.343823,37.362659 c 0.320404,-1.065994 1.444834,-1.672543 2.508815,-1.35214 1.06599,0.320402 1.672539,1.442821 1.352141,2.508814 L 64.114104,78.821578 c -0.25995,0.874555 -1.05995,1.43677 -1.928463,1.43677 z"
id="path5"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXa);stroke-width:2.01511" />
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXb"
x1="14.121"
x2="13.913"
y1="30.719"
y2="12.094"
gradientTransform="matrix(2.0151121,0,0,-2.0151121,-0.28283295,98.172694)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#737b80"
id="stop6" />
<stop
offset=".773"
stop-color="#737b80"
id="stop7" />
<stop
offset="1"
stop-color="#575c61"
id="stop8" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXb)"
d="m 33.974071,80.258348 c -0.866497,0 -1.666498,-0.564231 -1.930475,-1.43677 L 19.952922,38.519333 c -0.320404,-1.065993 0.286146,-2.188412 1.352141,-2.508814 1.063979,-0.314357 2.188411,0.286146 2.508815,1.35214 l 12.090671,40.302239 c 0.320402,1.065996 -0.286146,2.188417 -1.352139,2.508815 -0.193452,0.05643 -0.386902,0.08463 -0.578339,0.08463 z"
id="path8"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXb);stroke-width:2.01511" />
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXc"
x1="24"
x2="24"
y1="14.614"
y2="-2.0710001"
gradientTransform="matrix(2.0151121,0,0,-2.0151121,-0.28283295,98.172694)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#899198"
id="stop9" />
<stop
offset="1"
stop-color="#787e85"
id="stop10" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXc)"
d="M 82.336765,86.303689 H 13.822951 c -2.226698,0 -4.0302237,-1.803531 -4.0302237,-4.030227 V 68.167678 c 0,-2.226699 1.8035257,-4.030225 4.0302237,-4.030225 h 68.513814 c 2.226696,0 4.030221,1.803526 4.030221,4.030225 v 14.105784 c 0,2.226696 -1.803525,4.030227 -4.030221,4.030227 z"
id="path10"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXc);stroke-width:2.01511" />
<rect
width="68.513809"
height="14.105785"
x="13.822952"
y="68.167671"
fill="#737b80"
id="rect10"
style="stroke-width:2.01511" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXd"
cx="36.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0151121,0,0,-2.0151121,-0.28283295,98.172694)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop11" />
<stop
offset="1"
stop-opacity="0"
id="stop12" />
</radialGradient>
<circle
cx="73.268753"
cy="75.220573"
fill="url(#sQy7OvPXH0t2mKfqk7XuXd)"
id="circle12"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXd);stroke-width:2.01511"
r="5.0377803" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXe"
cx="30.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0151121,0,0,-2.0151121,-0.28283295,98.172694)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop13" />
<stop
offset="1"
stop-opacity="0"
id="stop14" />
</radialGradient>
<circle
cx="61.178082"
cy="75.220573"
fill="url(#sQy7OvPXH0t2mKfqk7XuXe)"
id="circle14"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXe);stroke-width:2.01511"
r="5.0377803" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXf"
cx="24.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0151121,0,0,-2.0151121,-0.28283295,98.172694)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop15" />
<stop
offset="1"
stop-opacity="0"
id="stop16" />
</radialGradient>
<circle
cx="49.087414"
cy="75.220573"
fill="url(#sQy7OvPXH0t2mKfqk7XuXf)"
id="circle16"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXf);stroke-width:2.01511"
r="5.0377803" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXg"
cx="11.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0151121,0,0,-2.0151121,-0.28283295,98.172694)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop17" />
<stop
offset="1"
stop-opacity="0"
id="stop18" />
</radialGradient>
<circle
cx="22.890959"
cy="75.220573"
fill="url(#sQy7OvPXH0t2mKfqk7XuXg)"
id="circle18"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXg);stroke-width:2.01511"
r="5.0377803" />
<circle
cx="73.268753"
cy="75.220573"
fill="#50e6ff"
id="circle19"
style="stroke-width:2.01511"
r="3.0226684" />
<circle
cx="61.178082"
cy="75.220573"
fill="#50e6ff"
id="circle20"
style="stroke-width:2.01511"
r="3.0226684" />
<circle
cx="49.087414"
cy="75.220573"
fill="#50e6ff"
id="circle21"
style="stroke-width:2.01511"
r="3.0226684" />
<circle
cx="22.890959"
cy="75.220573"
fill="#50e6ff"
id="circle22"
style="stroke-width:2.01511"
r="3.0226684" />
<path
fill="url(#eww6fSHXLG3h4YeAqg9u_a)"
d="m 43.111467,33.670197 v 13.078026 h 2.488729 v 3.414741 h -2.488729 v 4.252451 H 38.944994 V 50.162964 H 29.90331 v -3.573917 c 0.800529,-0.895805 1.630105,-1.877584 2.488727,-2.943021 0.858624,-1.065436 1.688201,-2.162243 2.488731,-3.291582 0.80053,-1.129339 1.545288,-2.263326 2.23544,-3.40777 0.690152,-1.14212 1.275736,-2.235441 1.757913,-3.276477 z m -9.113722,13.078026 h 4.947249 V 39.50163 c -0.338105,0.626248 -0.704093,1.26063 -1.09913,1.901984 -0.396198,0.642514 -0.809826,1.273412 -1.244364,1.896174 -0.433377,0.621602 -0.872566,1.224614 -1.316401,1.807871 -0.443835,0.5821 -0.872565,1.12934 -1.287354,1.640564 z m 31.783001,6.278754 c -2.025142,1.167682 -4.542919,1.750943 -7.552166,1.750943 -3.336895,0 -5.967374,-0.923688 -7.891433,-2.771064 -1.924059,-1.846217 -2.884927,-4.389553 -2.884927,-7.630013 0,-3.260212 1.050332,-5.917413 3.15332,-7.971602 2.102987,-2.054189 4.899612,-3.081283 8.391037,-3.081283 2.199423,0 4.137424,0.304411 5.816329,0.91207 v 4.38258 c -1.602219,-0.926013 -3.558812,-1.388439 -5.874422,-1.388439 -1.939165,0 -3.516984,0.629736 -4.738114,1.888044 -1.219964,1.258306 -1.829947,2.938371 -1.829947,5.04136 0,2.132036 0.548404,3.78073 1.642887,4.948413 1.093321,1.166518 2.572384,1.750938 4.433702,1.750938 1.11772,0 2.005392,-0.160341 2.661848,-0.477529 v -4.050283 h -4.153692 v -3.733095 h 8.825578 z"
id="path2"
style="fill:url(#eww6fSHXLG3h4YeAqg9u_a);stroke-width:1.16187" />
<path
fill="#50e6ff"
d="m 57.257255,26.846523 -7.640468,4.790396 c -0.755219,0.474043 -1.716086,0.472883 -2.471302,-0.0012 l -7.618393,-4.789237 c 1.90547,-3.020866 5.298135,-4.903098 8.865081,-4.903098 3.566947,0 6.959613,1.882232 8.865082,4.903098 z"
id="path3"
style="stroke-width:1.16187" />
<path
fill="#199be2"
d="m 67.09947,20.682792 -6.889897,4.321002 c -5.566528,-8.816284 -18.25533,-8.485148 -23.634798,0 l -3.937581,-2.468977 -2.953479,-1.852025 v -0.0012 C 38.31526,6.9435901 58.429584,6.8971154 67.09947,20.682792 Z"
id="path4"
style="stroke-width:1.16187" />
<path
fill="#0078d4"
d="m 70.217935,16.986879 c 0.470557,0.66343 0.306733,1.58247 -0.382256,2.013525 l -3.706371,2.321418 v -0.0012 c -8.033182,-12.7817497 -27.063479,-13.3533905 -35.470782,0 v 0.0012 L 26.952155,19.000404 C 26.263165,18.569349 26.099343,17.650309 26.568739,16.986879 31.539224,9.9749835 39.7676,5.67722 48.392173,5.67722 c 8.624576,0 16.85295,4.2977635 21.825762,11.309659 z"
id="path5-7"
style="stroke-width:1.16187" />
<path
fill="#35c1f1"
d="m 61.193677,24.386841 -4.921689,3.08593 c -3.750521,-5.917413 -12.175255,-5.624621 -15.759629,0 l -4.921687,-3.08593 0.0024,-0.0034 c 5.810521,-9.21132 19.531064,-9.569176 25.596034,-0.0034 z"
id="path6"
style="stroke-width:1.16187" />
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,284 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
viewBox="0 0 96 96"
width="96"
height="96"
version="1.1"
id="svg25"
sodipodi:docname="icons8-router.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs25" />
<sodipodi:namedview
id="namedview25"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="11.458333"
inkscape:cx="69.905457"
inkscape:cy="51.490911"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg25"
showguides="true">
<sodipodi:guide
position="9.9968182,23.832614"
orientation="0,-1"
id="guide25"
inkscape:locked="false" />
<sodipodi:guide
position="46.36841,50.879999"
orientation="0,-1"
id="guide1"
inkscape:locked="false" />
<sodipodi:guide
position="4.1706847,29.588569"
orientation="1,0"
id="guide2"
inkscape:locked="false" />
<sodipodi:guide
position="9.9808125,20.062033"
orientation="1,0"
id="guide3"
inkscape:locked="false" />
<sodipodi:guide
position="86.185391,34.472066"
orientation="1,0"
id="guide4"
inkscape:locked="false" />
<sodipodi:guide
position="32.72426,12.415637"
orientation="0,-1"
id="guide5"
inkscape:locked="false" />
</sodipodi:namedview>
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXa"
x1="34.117001"
x2="33.909"
y1="30.451"
y2="11.826"
gradientTransform="matrix(2.0049622,0,0,-2.0493466,-0.02712327,82.339673)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#737b80"
id="stop1" />
<stop
offset=".714"
stop-color="#737b80"
id="stop2" />
<stop
offset=".756"
stop-color="#737b80"
id="stop3" />
<stop
offset=".863"
stop-color="#656c71"
id="stop4" />
<stop
offset="1"
stop-color="#575c61"
id="stop5" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXa)"
d="m 62.126702,64.120983 c -0.190473,0 -0.384955,-0.02869 -0.57743,-0.08608 -1.060625,-0.325845 -1.664117,-1.467333 -1.345331,-2.551435 L 72.233716,20.496545 c 0.318787,-1.084107 1.437558,-1.700958 2.496177,-1.375114 1.060625,0.325846 1.664119,1.467334 1.345331,2.551437 L 64.04545,62.659803 c -0.25864,0.889415 -1.05461,1.461184 -1.918748,1.461184 z"
id="path5"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXa);stroke-width:2.02704" />
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXb"
x1="14.121"
x2="13.913"
y1="30.719"
y2="12.094"
gradientTransform="matrix(2.0049622,0,0,-2.0493466,-0.02712327,82.339673)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#737b80"
id="stop6" />
<stop
offset=".773"
stop-color="#737b80"
id="stop7" />
<stop
offset="1"
stop-color="#575c61"
id="stop8" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXb)"
d="m 34.05723,64.120983 c -0.862132,0 -1.658104,-0.573816 -1.920752,-1.461182 L 20.106705,21.672866 c -0.318788,-1.084103 0.284706,-2.225591 1.34533,-2.551437 1.058621,-0.319698 2.177389,0.291007 2.496178,1.375114 l 12.02977,40.986932 c 0.31879,1.084103 -0.284702,2.225591 -1.345328,2.551436 -0.192476,0.05738 -0.384952,0.08608 -0.575425,0.08608 z"
id="path8"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXb);stroke-width:2.02704" />
<linearGradient
id="sQy7OvPXH0t2mKfqk7XuXc"
x1="24"
x2="24"
y1="14.614"
y2="-2.0710001"
gradientTransform="matrix(2.0049622,0,0,-2.0493466,-0.02712327,82.339673)"
gradientUnits="userSpaceOnUse">
<stop
offset="0"
stop-color="#899198"
id="stop9" />
<stop
offset="1"
stop-color="#787e85"
id="stop10" />
</linearGradient>
<path
fill="url(#sQy7OvPXH0t2mKfqk7XuXc)"
d="M 82.176323,70.269024 H 14.007611 c -2.215484,0 -4.0099252,-1.834165 -4.0099252,-4.098693 V 51.824905 c 0,-2.264529 1.7944412,-4.098694 4.0099252,-4.098694 h 68.168712 c 2.215484,0 4.009924,1.834165 4.009924,4.098694 v 14.345426 c 0,2.264528 -1.79444,4.098693 -4.009924,4.098693 z"
id="path10"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXc);stroke-width:2.02704" />
<rect
width="68.168709"
height="14.345426"
x="14.007612"
y="51.824905"
fill="#737b80"
id="rect10"
style="stroke-width:2.02704" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXd"
cx="36.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0049622,0,0,-2.0493466,-0.02712327,82.339673)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop11" />
<stop
offset="1"
stop-opacity="0"
id="stop12" />
</radialGradient>
<ellipse
cx="73.153992"
cy="58.997623"
fill="url(#sQy7OvPXH0t2mKfqk7XuXd)"
id="circle12"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXd);stroke-width:2.02704"
rx="5.0124054"
ry="5.1233664" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXe"
cx="30.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0049622,0,0,-2.0493466,-0.02712327,82.339673)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop13" />
<stop
offset="1"
stop-opacity="0"
id="stop14" />
</radialGradient>
<ellipse
cx="61.124226"
cy="58.997623"
fill="url(#sQy7OvPXH0t2mKfqk7XuXe)"
id="circle14"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXe);stroke-width:2.02704"
rx="5.0124054"
ry="5.1233664" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXf"
cx="24.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0049622,0,0,-2.0493466,-0.02712327,82.339673)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop15" />
<stop
offset="1"
stop-opacity="0"
id="stop16" />
</radialGradient>
<ellipse
cx="49.094448"
cy="58.997623"
fill="url(#sQy7OvPXH0t2mKfqk7XuXf)"
id="circle16"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXf);stroke-width:2.02704"
rx="5.0124054"
ry="5.1233664" />
<radialGradient
id="sQy7OvPXH0t2mKfqk7XuXg"
cx="11.5"
cy="11.39"
r="2.5"
gradientTransform="matrix(2.0049622,0,0,-2.0493466,-0.02712327,82.339673)"
gradientUnits="userSpaceOnUse">
<stop
offset=".582"
stop-opacity=".2"
id="stop17" />
<stop
offset="1"
stop-opacity="0"
id="stop18" />
</radialGradient>
<ellipse
cx="23.029943"
cy="58.997623"
fill="url(#sQy7OvPXH0t2mKfqk7XuXg)"
id="circle18"
style="fill:url(#sQy7OvPXH0t2mKfqk7XuXg);stroke-width:2.02704"
rx="5.0124054"
ry="5.1233664" />
<ellipse
cx="73.153992"
cy="58.997623"
fill="#50e6ff"
id="circle19"
rx="3.0074432"
ry="3.0740201"
style="stroke-width:2.02704" />
<ellipse
cx="61.124226"
cy="58.997623"
fill="#50e6ff"
id="circle20"
rx="3.0074432"
ry="3.0740201"
style="stroke-width:2.02704" />
<ellipse
cx="49.094448"
cy="58.997623"
fill="#50e6ff"
id="circle21"
rx="3.0074432"
ry="3.0740201"
style="stroke-width:2.02704" />
<ellipse
cx="23.029943"
cy="58.997623"
fill="#50e6ff"
id="circle22"
rx="3.0074432"
ry="3.0740201"
style="stroke-width:2.02704" />
</svg>

Before

Width:  |  Height:  |  Size: 7.9 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#0d47a1" d="M47.97,19.826c0.654,3.747-9.547,8.655-22.788,10.96c-13.238,2.306-24.5,1.136-25.153-2.613 c-0.653-3.747,9.551-8.654,22.79-10.958C36.059,14.907,47.318,16.078,47.97,19.826z"/><polygon fill="#fafafa" points="35.51,25.388 35.442,21.492 36.671,21.492 36.671,26.403 34.905,26.403 33.678,22.373 33.652,22.373 33.72,26.403 32.499,26.403 32.499,21.492 34.342,21.492 35.483,25.388"/><polygon fill="#fafafa" points="13.177,21.952 12.497,26.455 11.157,26.455 12.076,21.492 14.284,21.492 15.201,26.455 13.865,26.455 13.204,21.952"/><polygon fill="#fafafa" points="18.964,25.286 19.577,21.492 21.601,21.492 21.708,26.455 20.468,26.455 20.435,21.993 20.409,21.993 19.58,26.455 18.321,26.455 17.49,21.993 17.464,21.993 17.433,26.455 16.19,26.455 16.3,21.492 18.325,21.492 18.937,25.286"/><path fill="#fafafa" d="M9.067,25.055c0.049,0.12,0.034,0.275,0.011,0.368c-0.042,0.165-0.154,0.333-0.483,0.333 c-0.312,0-0.5-0.179-0.5-0.45v-0.48H6.763L6.762,25.21c0,1.106,0.871,1.441,1.805,1.441c0.898,0,1.637-0.307,1.754-1.134 c0.061-0.429,0.015-0.709-0.005-0.816c-0.209-1.039-2.093-1.349-2.233-1.93c-0.024-0.099-0.017-0.205-0.005-0.262 c0.035-0.158,0.143-0.332,0.453-0.332c0.29,0,0.461,0.18,0.461,0.45c0,0.091,0,0.307,0,0.307h1.237v-0.348 c0-1.081-0.97-1.25-1.673-1.25c-0.883,0-1.604,0.292-1.736,1.099c-0.036,0.223-0.041,0.422,0.011,0.671 C7.049,24.118,8.811,24.412,9.067,25.055z"/><path fill="#fafafa" d="M25.204,25.046c0.049,0.119,0.033,0.27,0.011,0.363c-0.041,0.165-0.152,0.33-0.479,0.33 c-0.307,0-0.494-0.179-0.494-0.444l-0.001-0.476h-1.318l-0.002,0.379c0,1.095,0.863,1.426,1.787,1.426 c0.888,0,1.62-0.303,1.736-1.122c0.061-0.426,0.018-0.702-0.004-0.807c-0.208-1.029-2.073-1.336-2.211-1.912 c-0.024-0.099-0.017-0.203-0.005-0.257c0.036-0.16,0.142-0.329,0.449-0.329c0.288,0,0.455,0.175,0.455,0.444 c0,0.09,0,0.304,0,0.304h1.228v-0.345c0-1.07-0.962-1.237-1.659-1.237c-0.873,0-1.588,0.288-1.717,1.09 c-0.036,0.22-0.04,0.415,0.012,0.663C23.206,24.118,24.951,24.41,25.204,25.046z"/><path fill="#fafafa" d="M29.372,25.713c0.344,0,0.451-0.238,0.475-0.36c0.01-0.054,0.013-0.125,0.012-0.19V21.49h1.255 v3.56c0.003,0.091-0.006,0.279-0.011,0.325c-0.088,0.927-0.821,1.227-1.732,1.227c-0.913,0-1.646-0.301-1.733-1.227 c-0.004-0.047-0.013-0.235-0.011-0.325v-3.56h1.254v3.672c0,0.064,0.002,0.137,0.012,0.19 C28.921,25.473,29.025,25.713,29.372,25.713z"/><path fill="#fafafa" d="M39.725,25.66c0.359,0,0.485-0.227,0.508-0.359c0.009-0.057,0.012-0.126,0.011-0.189v-0.72 h-0.509v-0.724h1.76V25c-0.001,0.093-0.003,0.162-0.018,0.327c-0.082,0.903-0.866,1.225-1.745,1.225 c-0.881,0-1.663-0.322-1.747-1.225c-0.014-0.166-0.016-0.234-0.018-0.327l0.001-2.089c0-0.088,0.011-0.244,0.021-0.327 c0.11-0.928,0.862-1.226,1.743-1.226c0.88,0,1.651,0.297,1.742,1.226c0.016,0.158,0.011,0.327,0.011,0.327v0.166h-1.251v-0.278 c0.001,0.001-0.002-0.118-0.016-0.189c-0.021-0.11-0.116-0.362-0.495-0.362c-0.362,0-0.467,0.238-0.494,0.362 c-0.015,0.065-0.021,0.154-0.021,0.234v2.27c-0.001,0.063,0.003,0.132,0.013,0.189C39.241,25.433,39.366,25.66,39.725,25.66z"/></svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#fff" d="M40,24c0,8.8-7.2,16-16,16S8,32.8,8,24S15.2,8,24,8S40,15.2,40,24z"/><path fill="#e64a19" d="M30 24c0 3.3-2.7 6-6 6-3.3 0-6-2.7-6-6s2.7-6 6-6C27.3 18 30 20.7 30 24zM12 21.5c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5S9.5 25.4 9.5 24 10.6 21.5 12 21.5M12 20.5c-1.9 0-3.5 1.6-3.5 3.5s1.6 3.5 3.5 3.5 3.5-1.6 3.5-3.5S13.9 20.5 12 20.5zM30 31.5c1.4 0 2.5 1.1 2.5 2.5s-1.1 2.5-2.5 2.5-2.5-1.1-2.5-2.5S28.6 31.5 30 31.5M30 30.5c-1.9 0-3.5 1.6-3.5 3.5s1.6 3.5 3.5 3.5 3.5-1.6 3.5-3.5S31.9 30.5 30 30.5z"/><path fill="#e64a19" d="M24,4C13,4,4,13,4,24s9,20,20,20s20-9,20-20S35,4,24,4z M32.5,34c0,1.4-1.1,2.5-2.5,2.5 s-2.5-1.1-2.5-2.5c0-0.2,0-0.5,0.1-0.7C26.5,33.8,25.3,34,24,34c-5.1,0-9.2-3.8-9.9-8.7c-0.4,0.7-1.2,1.2-2.1,1.2 c-1.4,0-2.5-1.1-2.5-2.5s1.1-2.5,2.5-2.5c0.9,0,1.7,0.5,2.1,1.2c0.7-4.9,4.8-8.7,9.9-8.7c1.3,0,2.5,0.2,3.6,0.7 c-0.1-0.2-0.1-0.4-0.1-0.7c0-1.4,1.1-2.5,2.5-2.5s2.5,1.1,2.5,2.5c0,1.2-0.8,2.2-2,2.4C32.7,18.3,34,21,34,24s-1.3,5.7-3.5,7.6 C31.7,31.8,32.5,32.8,32.5,34z"/><path fill="#e64a19" d="M30 11.5c1.4 0 2.5 1.1 2.5 2.5 0 1.4-1.1 2.5-2.5 2.5s-2.5-1.1-2.5-2.5C27.5 12.6 28.6 11.5 30 11.5M30 10.5c-1.9 0-3.5 1.6-3.5 3.5s1.6 3.5 3.5 3.5 3.5-1.6 3.5-3.5S31.9 10.5 30 10.5zM24 24c-2.6-4.1-5.2-8.1-7.8-12.2"/><path fill="#e64a19" d="M19.1 10.7H21.1V25.1H19.1z" transform="rotate(-32.467 20.127 17.911)"/><path fill="#e64a19" d="M24 23H38.4V25H24z"/><g><path fill="#e64a19" d="M24,24c-2.7,4-5.3,8-8,12"/><path fill="#e64a19" d="M12.8 29H27.200000000000003V31H12.8z" transform="rotate(-56.312 19.998 30.006)"/></g></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#00b0ff" d="M20 25.026L5.011 25 5.012 37.744 20 39.818zM22 25.03L22 40.095 42.995 43 43 25.066zM20 8.256L5 10.38 5.014 23 20 23zM22 7.973L22 23 42.995 23 42.995 5z"/></svg>

Before

Width:  |  Height:  |  Size: 272 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px"><path fill="#1976d2" d="M6,6h17v17H6V6z"/><path fill="#1976d2" d="M25.042,22.958V6H42v16.958H25.042z"/><path fill="#1976d2" d="M6,25h17v17H6V25z"/><path fill="#1976d2" d="M25,42V25h17v17H25z"/></svg>

Before

Width:  |  Height:  |  Size: 287 B

View File

@@ -1,40 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xml:space="preserve"
width="800"
height="800"
version="1.0"
viewBox="0 0 800 800.01969"
id="svg1"
sodipodi:docname="logo-toshiba.svg"
inkscape:version="1.4.3 (0d15f75042, 2025-12-25)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:svg="http://www.w3.org/2000/svg"><svg:defs
id="defs1" /><sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
showguides="true"
inkscape:zoom="1.538125"
inkscape:cx="378.70784"
inkscape:cy="288.013"
inkscape:window-width="2560"
inkscape:window-height="1360"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="svg1"><sodipodi:guide
position="227.31716,399.38542"
orientation="0,-1"
id="guide1"
inkscape:locked="false" /></sodipodi:namedview>
<svg:path
fill="#e61e1e"
d="m 766.10016,459.7136 h 34.55 l -35.65,-117.66 -49.1,-0.002 -35.65,117.66 h 34.56 l 6.3,-21.78 h 38.66 l 6.33,21.78 m -37.51,-47.943 11.76,-40.651 h 0.2 l 11.76,40.651 z m -555.46,50.055 c 35.48,0 52.63,-6.25 55.06,-38.265 0.58,-7.618 0.69,-15.439 0.69,-22.689 0.01,-7.225 -0.11,-15.054 -0.69,-22.671 -2.43,-32.025 -19.58,-38.265 -55.06,-38.265 -35.48,0 -52.62,6.24 -55.04,38.265 -0.59,7.617 -0.71,15.446 -0.71,22.671 0.01,7.25 0.12,15.071 0.71,22.689 2.42,32.015 19.56,38.265 55.04,38.265 m -22.31,-60.954 c 0,-6.461 0.16,-10.28 0.3,-13.114 0.9,-18.161 8.07,-20.278 22.01,-20.278 13.95,0 21.12,2.117 22.01,20.278 0.14,2.833 0.31,6.652 0.31,13.114 0,6.482 -0.17,10.308 -0.31,13.135 -0.89,18.164 -8.06,20.285 -22.01,20.285 -13.94,0 -21.11,-2.121 -22.01,-20.285 -0.14,-2.827 -0.3,-6.653 -0.3,-13.135 z M 0.65015822,342.1056 v 29.331 H 35.822158 v 88.327 h 35.185 v -88.327 h 35.173002 v -29.331 H 0.65015822 M 540.50016,459.7136 v -117.662 h -33.39 v 117.662 h 33.39 m -134.35,-74.703 v -42.959 h -33.2 v 117.662 h 33.2 v -45.372 h 38.58 v 45.372 h 33.19 v -117.662 h -33.19 v 42.959 h -38.58 m 244.17,13.206 c 14.79,-3.781 19.13,-12.616 19.13,-25.386 0,-25.859 -16.27,-30.78 -39.4,-30.78 h -59.95 v 117.66 h 62.92 c 28.97,0 38.71,-12.48 38.71,-31.675 0,-13.383 -3.06,-25.191 -21.41,-29.822 m -47.03,13.169 h 23.02 c 9.3,0 11.24,4.074 11.24,10.7 0,6.632 -3.64,10.717 -11.24,10.717 h -23.02 z m 0,-42.425 h 23.02 c 6.01,0 9.73,2.851 9.73,9.708 0,5.878 -3.68,9.496 -9.73,9.496 h -23.02 z m -355.06,52.143 h 31.65 c 0.03,5.708 0.76,9.523 3.53,11.63 3.15,2.374 5.97,3.158 15.32,3.158 9,0 18.86,0 18.86,-11.085 0,-8.742 -5.51,-10.737 -15.68,-11.279 -25.22,-1.336 -34.34,-2.049 -43.73,-9.025 -6.4,-4.757 -9.72,-14.018 -9.72,-26.542 0,-21.297 7.43,-28.768 18.15,-33.981 11.06,-5.381 54.47,-5.381 66.15,0 14.69,6.768 15.12,21.42 15.12,35.011 h -31.57 c -0.06,-6.929 -1.62,-8.886 -2.89,-10.175 -3.28,-2.908 -7.95,-3.522 -14.69,-3.522 -8.16,0 -17.6,0.368 -17.6,10.277 0,7.56 3.27,10.72 11.85,11.276 11.79,0.754 35.02,1.497 43.3,6.383 11.61,6.867 14.62,16.159 14.62,31.319 0,21.908 -7.84,28.338 -18.75,33.158 -12.59,5.56 -54.64,5.56 -68.31,-0.43 -15.3,-6.67 -15.61,-19.964 -15.61,-36.173"
id="path1" />
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -10,7 +10,7 @@
<location_id>1</location_id>
<status>production</status>
<brand_id>10</brand_id>
<model_id>5</model_id>
<model_id>0</model_id>
<asset_number></asset_number>
<purchase_date></purchase_date>
<end_of_warranty></end_of_warranty>

View File

@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<Brand alias="Brand" id="6">
<Brand alias="Brand" id="1">
<name>Acer</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icon-acer.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmc6c3ZnIHhtbG5zOmlua3NjYXBlPSJodHRwOi8vd3d3Lmlua3NjYXBlLm9yZy9uYW1lc3BhY2VzL2lua3NjYXBlIiB4bWxuczpzb2RpcG9kaT0iaHR0cDovL3NvZGlwb2RpLnNvdXJjZWZvcmdlLm5ldC9EVEQvc29kaXBvZGktMC5kdGQiIHhtbG5zOnN2Zz0iaH
R0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgaWQ9ImFjZXIiIHg9IjBweCIgeT0iMHB4IiB3aWR0aD0iODMiIGhlaWdodD0iODMiIHZpZXdCb3g9IjAgMCA4MyA4MyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSIgc29kaXBvZGk6ZG9jbmFtZT0iaWNvbi1hY2VyLnN2ZyIgaW5rc2NhcGU6dmVyc2lvbj0iMS40LjMgKDBkMTVmNzUwNDIsIDIwMjUtMTItMjUpIj48c3ZnOmRlZnMgaWQ9ImRlZnMxIi8+PHNvZGlwb2RpOm5hbWVkdmlldyBpZD0ibmFtZWR2
@@ -45,7 +45,7 @@
<finalclass>Brand</finalclass>
<friendlyname>Asus</friendlyname>
</Brand>
<Brand alias="Brand" id="10">
<Brand alias="Brand" id="4">
<name>Cisco</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icon-cisco.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d
3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIgd2lkdGg9IjEwOCIgaGVpZ2h0PSIxMDgiIHZpZXdCb3g9IjAgMCAxMDggMTA4IiByb2xlPSJpbWciIHZlcnNpb24
@@ -74,7 +74,7 @@
<finalclass>Brand</finalclass>
<friendlyname>Dell</friendlyname>
</Brand>
<Brand alias="Brand" id="7">
<Brand alias="Brand" id="6">
<name>HP Inc</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icons8-hp.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0yNCA0QTIwIDIwIDAgMSAwIDI0IDQ0QTIwIDIwIDAgMSAwIDI0IDRaIi8+PHBhdGggZmlsbD0iIzE5NzZkMiIgZD0iTTI0LDQzLj
k5N2MtMC4xOTksMC0wLjY1MiwwLjAwNi0wLjg1LDBsNC0xMC45OTloNS42MjVjMC45ODcsMCwyLjA3MS0wLjc1OSwyLjQwOS0xLjY4Nmw0Ljc0OC0xMi42ODdjMC43MjUtMS45OTUtMC40MTctMy42MjYtMi41MzktMy42MjZoLTcuODA0bC02LjUxOCwxOC4yNTdoLTAuMDAybC0zLjcxMiwxMC4xOThDMTAuNTUsNDEuMzYxLDQsMzMuNDQ1LDQsMjMuOTk5YzAtOS4xNzQsNi4xNzgtMTYuOTA1LDE0LjYtMTkuMjYxbC0zLjgzLDEwLjUyNmgtMC4wMDFMOC4xNSwzMi45OTho
@@ -82,7 +82,7 @@
<finalclass>Brand</finalclass>
<friendlyname>HP Inc</friendlyname>
</Brand>
<Brand alias="Brand" id="1">
<Brand alias="Brand" id="7">
<name>HPE</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icon-hpe.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sbnM9Imh0dHA6Ly93d3c
udzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjAiIGlkPSJrYXRtYW5fMSIgeD0iMHB4IiB5PSIwcHgiIHZpZXdCb3g9IjAgMCA2MzAgNjMwIiB4bWw6c3BhY2U9InByZXNlcnZlIiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uLWhwZS5zdmciIHdpZHRoPSI2MzAiIGhlaWdodD0iNjMwIiBpbmtzY2FwZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzM
@@ -117,7 +117,7 @@
<finalclass>Brand</finalclass>
<friendlyname>Lenovo</friendlyname>
</Brand>
<Brand alias="Brand" id="4">
<Brand alias="Brand" id="10">
<name>Razer</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icons8-razer.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgNDggNDgiIHdpZHRoPSI0OHB4IiBoZWlnaHQ9IjQ4cHgiPjxwYXRoIGZpbGw9IiM2NGRkMTciIGQ9Ik0yNiwyMGMwLjEsMCwwLjIsMCwwLjMsMGMwLjMtMC4xLDAuNS0wLjMsMC42LTAuNWMwLjEtMC4yLDAuMS0wLjUsMC4xLTA
uOGMtMC4yLTAuNi0xLTEuOC0yLTIuNCBjMCwwLjcsMCwxLjMsMCwxLjljMCwwLjUsMCwxLDAsMS4yYzAuMSwwLjIsMC4zLDAuNCwwLjUsMC42QzI1LjcsMjAsMjUuOCwyMCwyNiwyMCBNMjkuNCwyM2MwLjcsMCwxLjYtMC4xLDIuMy0wLjUgYy0wLjUtMC4zLTEtMC42LTEuNS0wLjljLTAuNC0wLjMtMC45LTAuNi0xLjEtMC42YzAsMC0wLjEsMC0wLjEsMGMtMC4yLDAtMC40LDAuMS0wLjYsMC4yYy0wLjIsMC4xLTAuNCwwLjQtMC40LDAuNiBjLTAuMSwwLjUsMC4zLDEuM

View File

@@ -1,256 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Set>
<NetworkDeviceType alias="NetworkDeviceType" id="1">
<name>Firewall</name>
<logo><mimetype>image/png</mimetype><filename>firewall.png</filename><data>iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAABmJLR0QA/wD/AP+gvaeTAAAIdUlEQVR4nO2bXWwc1RXH/3f2a3bXiXHiJM4HCVRqBXEqHG8SlGRJtgGS2okLJjhNRHmoWvJQJKQgtahVK0VVRamqqlVppSK1AlW8IJ6gUkMlxEsAKbHBJHZQCyLB2EqMwd71bryza+/e04dknV3veHbufOzswv1J98E7c885c/537tx7ZgxIJBKJRCKRSCQSiUQikUi+LjCvAxAh3ff9hxixfwA0xoj+HI3Qy+zVV4tex2UHxesARGCcngbx1SDqJuCl61l2Pn34+B6v47JDUwlAHCkioKx1g/jb6Z5jz9Hp0011LSWaKmgGXAYISxoDo2cyg5f+lXz44du8jVCcphKAg1+uzv/NxtGr5ANvpftOtHsZoyhNJYAClseSOai8MaLtrLDwxlRioMXrWM3SVAIQaKX+8L/ViCimqvRPapIVXlMJAM7bDG6Askb96UNHn/Q6XDM0lQAEutdE9kvtd8neR7Z4HXMtmkYA6ukJETGRNX9EKeA51wJyiKYRIFMM9TCisMAdABAdSx88epfXsRvRNAIQZ0+L5R4ggsI5nfI6diOaYqUw80B/XAGdtdh9tjWQX8fOnMk7GpRDNPwdQImEX6HiX0SHfllrzcyrD3p9HcvR8AKkfa2/ALF7aiz/DVuR6JAXsZvB73UARqQO9B0gol/ZtcMY7XAiHjdo2GdA8kDvFpB/EMAau7YYkGttD7U04ruDhrwD0om+ds5xhkC2kw8ABKhzM/l2AJ87Yc9JGu4ZMN3Ts7IIeoNAd1ue9HXaAucdJR+p/UeeSCaOTM7u79tZvyvTp6EEuJJIqErW9xoIMQdzDxDAimx1mat+ENZx0MvjuwfC9bk6fRpGAEok/K08+goRJYgIjjeFeMkXJ7rn5u/figayv/byuhtCAMJpJUnRFwF8zz0frAAAqX19dwLYUHboVCrR69kqqSEESO47/zw4/cDGZqt2TaLANQDgVHx0yTEf53iePFoRer4Mnbmv91kAP3fbT8GH9X7/vIZ8cBTApqXHGfDDtrP/fsntOJbi6R0wEz/8DASTrz5wGa1/+A8ij10E/Lx2hxvk13wRnaH5wIvQST4AEPDs1VhfRCQWJ/BMgJl47wkw+q1ov+DecbBQEcHdE2h56hxYdN5Mt3Sybe5NRqzf4Jz1oSj/iWg8dvFkCkrdd6ibk3IWgPCIa/npu/BvmV38uzixEtf/dC8o58ie8ssiBb6x5p3XM04YM0Pd74DZ3YdWcVJeg4Xk6+HblEb0yUGwoCNVhnaFFZ5wwpBZ6i5A0af8FcvMw2ZgrfmqfZbvzhTCj404Eh8DPUUDAz5HjJmgrgJM7+09RsBxqxtatkqDcltO13Ygdg3BfWNObJq3TF/NPOT4xS9D3QS4kkioYPR7OzYCsWuGmQv3/7fi+WAVprAf2TZikroJsGIhcgrAZqv9mVpA6DufGp/k5wg/fkFkeaoP4eDknoNr7RkxR10EuBrrizAUf2ZnJ6v2fAylJV9z/vCtnYP64Cd2d87+oKI8Wo/c1EWAoLowADDLXy77N88iFB8DOEw19f7L8HVctxUzEQ7bMmCSugjAAMtzKgsVoD5+EaSQ+QHs4wgd+chu2PupcyBo10gtXBdgKtHbASButX/4+Ch8q+dMj/5SC2ydgu+OlJ3Qo8m2zC47BszgugC++UIcRMzKXBzaO4bAtyeFk784FX33I1vPAiq6/zLf9XfCnGMPAwn3890+i1DP/0AF6759d8xA2ZhCcbzVUn/GcLd17+ZwXQBGfLtwJ4Wg9n8IAgdsCAAAwV3j0D5bYakvJ2y15702rgtAnITX08H4GJQ1GVujv4SvcxJ4/ZtWi3Xr7UdgjPufpXBaJXI6i84jGL8CMlVlNhUA/Fs/x8LQhtqnVmNt7hLA/TugWGgTOT/Q/RmIiiAHP6VVNn8JOmdpY/tVEECsTKzcNQXu2Oi/aXNjCsQLAAm//nD9Szr3BSgUMwBCZs5VVmmgYA7FrNNRFMBWZ8Ano6IdXX8xIzwk3nrn3GGAXgCw0clACpnreHd4BBNT0xW/b1y/Dju3b0M4rArbNFz80o2j83NZXBi6gE+mkxWHN3SsXfRrZhFNwISP8ZP3x+NnRGK0sBGjv8Hh5AOAf0ULYju7qn7f0SWe/FJtTv8gLSYfAILRCDp36fjdvg2qyeQDACPaxDl7QShQWJuCLL/NMoIARMLVXwlGIuaTb2bE66Hn17TolXZvN9fpFp5/Hb0YvkGCTNvQPWjdrrFTZ+x6JoATia+wU3XAvF2hCAzsWrmSugsgE19J3QSQidfH/X1AxR8uzPNNmvgSrgrQSA9YJ5LmxuPcFQGcmm6Wd9D8iS8hvBHLZvU/jALKNkBLNjumbWuasT8Bu4absSofOn61nJANqwgLcO79i1Ui2E08AMxpGs6/V/154eDwyI0EuZB4ECGb1TA0PFrt9
4NRaNryg80phGtBPz71S7cHRVPz9z/+RiinDfEvSl9npAAeIwXwGOFl6Imj5r7Yy2ZzOD88gmuTUxW/b1ha3xd4uJryq+UwNDyCa5NfVPrtWIsdXZ1QLbxXuBUELRuLpuUw9MElYZOu3QGRiIqd3duqfl+s7wsuKU37VUPY0VXtN
2Yn+WWxLhdLOKwi1tUpbNrVjZhufT8cciXx5TYjOom28kat3KaZWPT81sJRAZxanzpVs7EXhPGIdwpHBGikxNuOpU6JL2FbgK9MlbLOiS9hWQCZeGcQFkAm3lnsPwMEH4IihTLbNgzsep34EvYEcGMF4nLibdtxGPGNGGHC7CZKt
75vVOI1WNmIJE3Ph1af+v64aAdhARjDSQATtc6b0zQMvl9dZx8aHq1O0DKCWklYVsvhPd36/iW36/vjxOmkmw4kEolEIpFIJBKJRCKRSCTNzf8B9DlMYsFrhfAAAAAASUVORK5CYII=</data><downloads_count>0</downloads_count></logo>
</NetworkDeviceType>
<NetworkDeviceType alias="NetworkDeviceType" id="2">
<name>Load Balancer</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icons8-loadbalancer-6.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+Cjxzdmcg
eG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIg
eG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgdmlld0JveD0iMCAw
IDk2IDk2IiB3aWR0aD0iOTYiIGhlaWdodD0iOTYiIHZlcnNpb249IjEuMSIgaWQ9InN2ZzE2IiBzb2RpcG9kaTpkb2NuYW1lPSJpY29uczgtbG9hZGJhbGFuY2VyLTYuc3ZnIiB4bWw6c3BhY2U9InByZXNlcnZlIiBpbmtzY2Fw
ZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzMTYiPjxsaW5lYXJHcmFkaWVudCBpZD0icmd0eWJSNWZEVThSNElnSUZrT1A1YiIgeDE9IjE5LjM4OCIgeDI9IjI4LjQxMyIg
eTE9Ii05Ljk0NDk5OTciIHkyPSI1Mi4wOTg5OTkiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCwtMC40OTMxMTUxMywtMC40OTMxMTUxMywwLDQ2LjAxOTQ5NCw0My45OTUwMjUpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3Bh
Y2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMWVhMmU0IiBpZD0ic3RvcDctNiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzMyYmRlZiIgaWQ9InN0b3A4LTIiLz48L2xpbmVhckdyYWRpZW50
PjxsaW5lYXJHcmFkaWVudCBpZD0icmd0eWJSNWZEVThSNElnSUZrT1A1YSIgeDE9IjQ3Ny4xNzg5OSIgeDI9IjQ3Mi43NzIiIHkxPSI1MjIuMTg3MDEiIHkyPSI1MjIuMTg3MDEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgo
LTAuMzQ4Njg1MDUsMC4zNDg2ODUwNSwwLjM0ODY4NTA1LDAuMzQ4Njg1MDUsMjMuNzgzMDkxLC0zMDYuNjYwNDQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuMzY1IiBzdG9wLWNvbG9y
PSIjMTk5YWUwIiBpZD0ic3RvcDEiLz48c3RvcCBvZmZzZXQ9Ii42OTkiIHN0b3AtY29sb3I9IiMxODk4ZGUiIGlkPSJzdG9wMiIvPjxzdG9wIG9mZnNldD0iLjgxOSIgc3RvcC1jb2xvcj0iIzE2OTFkOCIgaWQ9InN0b3AzLTki
Lz48c3RvcCBvZmZzZXQ9Ii45MDUiIHN0b3AtY29sb3I9IiMxMTg2Y2MiIGlkPSJzdG9wNC0xIi8+PHN0b3Agb2Zmc2V0PSIuOTc0IiBzdG9wLWNvbG9yPSIjMGE3NWJjIiBpZD0ic3RvcDUtMiIvPjxzdG9wIG9mZnNldD0iMSIg
c3RvcC1jb2xvcj0iIzA3NmNiMyIgaWQ9InN0b3A2LTciLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iQXJ0RFlaMmxUNzV2a2FiUkVzVERFYiIgeDE9IjEwLjQ0MyIgeDI9IjM0Ljg5NDAwMSIgeTE9IjM1
Ljk4NTAwMSIgeTI9IjExLjUzMyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC43MzI5NTMwMywwLDAsMC43MzI5NTMwMyw2MC40MDkwOTQsMjkuOTkxODEyKSI+PHN0
b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzJiZGVmIiBpZD0ic3RvcDctMyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzFlYTJlNCIgaWQ9InN0b3A4LTciLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFk
aWVudCBpZD0iQXJ0RFlaMmxUNzV2a2FiUkVzVERFYSIgeDE9IjM3IiB4Mj0iMzciIHkxPSI0MS41NTUiIHkyPSIyOC4wMzAwMDEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0
cml4KDAuNzMyOTUzMDMsMCwwLDAuNzMyOTUzMDMsNjAuNDA5MDk0LDI5Ljk5MTgxMikiPjxzdG9wIG9mZnNldD0iLjM2NSIgc3RvcC1jb2xvcj0iIzE5OWFlMCIgaWQ9InN0b3AxLTUiLz48c3RvcCBvZmZzZXQ9Ii42OTkiIHN0
b3AtY29sb3I9IiMxODk4ZGUiIGlkPSJzdG9wMi05Ii8+PHN0b3Agb2Zmc2V0PSIuODE5IiBzdG9wLWNvbG9yPSIjMTY5MWQ4IiBpZD0ic3RvcDMtMiIvPjxzdG9wIG9mZnNldD0iLjkwNSIgc3RvcC1jb2xvcj0iIzExODZjYyIg
aWQ9InN0b3A0LTIiLz48c3RvcCBvZmZzZXQ9Ii45NzQiIHN0b3AtY29sb3I9IiMwYTc1YmMiIGlkPSJzdG9wNS04Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDc2Y2IzIiBpZD0ic3RvcDYtOSIvPjwvbGluZWFy
R3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSI5MDFSSUhjTHl6NmRaUEdTdlNmMVhjIiB4MT0iMzMuNDM2MDAxIiB4Mj0iMzguMTU3MDAxIiB5MT0iMjEuNTYzOTk5IiB5Mj0iMTYuODQzIiBncmFkaWVudFRyYW5zZm9ybT0i
bWF0cml4KC0xLDAsMCwxLDEyMS43MTIxOSwxNy4zNjgxMjkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYWU0Y2Q1IiBpZD0ic3RvcDUtNiIvPjxzdG9wIG9m
ZnNldD0iMSIgc3RvcC1jb2xvcj0iI2FjNGFkNSIgaWQ9InN0b3A2LTEiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iOTAxUklIY0x5ejZkWlBHU3ZTZjFYYiIgeDE9IjY5NC45NzYwMSIgeDI9IjcxNy43
MTgwMiIgeTE9IjM1LjcwOSIgeTI9IjEyLjk2NyIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgtNjA2LjI4NzgyLDE3LjM2ODEyOSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAi
IHN0b3AtY29sb3I9IiNhZTRjZDUiIGlkPSJzdG9wMy0yOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI2FjNGFkNSIgaWQ9InN0b3A0LTMiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iOTAx
UklIY0x5ejZkWlBHU3ZTZjFYYSIgeDE9IjM2LjI1IiB4Mj0iMzYuMjUiIHkxPSIzOC4wNDI5OTkiIHkyPSIyMy4wMDYwMDEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTEsMCwwLDEsMTIxLjcxMjE5LDE3LjM2ODEyOSki
IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MTJmYmQiIGlkPSJzdG9wMS0xIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjOTMzMmJmIiBpZD0ic3Rv
cDItOTQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIHhsaW5rOmhyZWY9IiNBcnREWVoybFQ3NXZrYWJSRXNUREVhIiBpZD0ibGluZWFyR3JhZGllbnQyNCIgZ3Jh
ZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCwwLjczMjk1MzAzLC0wLjczMjk1MzAzLDAsNjUuNjM1NTkyLDYwLjE1MzUxNSkiIHgxPSIzNyIgeTE9IjQxLjU1NSIgeDI9IjM3
IiB5Mj0iMjguMDMwMDAxIi8+PGxpbmVhckdyYWRpZW50IGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgeGxpbms6aHJlZj0iI0FydERZWjJsVDc1dmthYlJFc1RERWIiIGlkPSJsaW5lYXJHcmFkaWVudDI1IiBncmFkaWVudFVu
aXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLDAuNzMyOTUzMDMsLTAuNzMyOTUzMDMsMCw2NS42MzU1OTIsNjAuMTUzNTE1KSIgeDE9IjEwLjQ0MyIgeTE9IjM1Ljk4NTAwMSIgeDI9IjM0
Ljg5NDAwMSIgeTI9IjExLjUzMyIvPjxsaW5lYXJHcmFkaWVudCBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIHhsaW5rOmhyZWY9IiNBcnREWVoybFQ3NXZrYWJSRXNUREViIiBpZD0ibGluZWFyR3JhZGllbnQyNiIgZ3JhZGll
bnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMC41MTgyNzYwNiwwLjUxODI3NjA2LC0wLjUxODI3NjA2LDAuNTE4Mjc2MDYsNjUuMDk5NTg5LDM4LjI4MzI5NSkiIHgxPSIxMC40NDMi
IHkxPSIzNS45ODUwMDEiIHgyPSIzNC44OTQwMDEiIHkyPSIxMS41MzMiLz48bGluZWFyR3JhZGllbnQgaW5rc2NhcGU6Y29sbGVjdD0iYWx3YXlzIiB4bGluazpocmVmPSIjQXJ0RFlaMmxUNzV2a2FiUkVzVERFYSIgaWQ9Imxp
bmVhckdyYWRpZW50MjciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAuNTE4Mjc2MDYsMC41MTgyNzYwNiwtMC41MTgyNzYwNiwwLjUxODI3NjA2LDY1LjA5OTU4OSwz
OC4yODMyOTUpIiB4MT0iMzciIHkxPSI0MS41NTUiIHgyPSIzNyIgeTI9IjI4LjAzMDAwMSIvPjxsaW5lYXJHcmFkaWVudCBpbmtzY2FwZTpjb2xsZWN0PSJhbHdheXMiIHhsaW5rOmhyZWY9IiNBcnREWVoybFQ3NXZrYWJSRXNU
REVhIiBpZD0ibGluZWFyR3JhZGllbnQyOCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoLTAuNTE4Mjc2MDYsMC41MTgyNzYwNiwwLjUxODI3NjA2LDAuNTE4Mjc2MDYs
MzEuMDYzOTkzLDM4LjIzOTEwMSkiIHgxPSIzNyIgeTE9IjQxLjU1NSIgeDI9IjM3IiB5Mj0iMjguMDMwMDAxIi8+PGxpbmVhckdyYWRpZW50IGlua3NjYXBlOmNvbGxlY3Q9ImFsd2F5cyIgeGxpbms6aHJlZj0iI0FydERZWjJs
VDc1dmthYlJFc1RERWIiIGlkPSJsaW5lYXJHcmFkaWVudDI5IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgtMC41MTgyNzYwNiwwLjUxODI3NjA2LDAuNTE4Mjc2MDYs
MC41MTgyNzYwNiwzMS4wNjM5OTMsMzguMjM5MTAxKSIgeDE9IjEwLjQ0MyIgeTE9IjM1Ljk4NTAwMSIgeDI9IjM0Ljg5NDAwMSIgeTI9IjExLjUzMyIvPjxsaW5lYXJHcmFkaWVudCBpZD0iOTAxUklIY0x5ejZkWlBHU3ZTZjFY
Yy04IiB4MT0iMzMuNDM2MDAxIiB4Mj0iMzguMTU3MDAxIiB5MT0iMjEuNTYzOTk5IiB5Mj0iMTYuODQzIiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDAsMC43ODYzOTQyMiwwLjc4NjM5NDIyLDAsMjguNzA4NjE1LC0xLjEx
MzM1MzMpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjYWU0Y2Q1IiBpZD0ic3RvcDUtODQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNhYzRhZDUi
IGlkPSJzdG9wNi0zIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjkwMVJJSGNMeXo2ZFpQR1N2U2YxWGItMSIgeDE9IjY5NC45NzYwMSIgeDI9IjcxNy43MTgwMiIgeTE9IjM1LjcwOSIgeTI9IjEyLjk2
NyIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgwLC0wLjc4NjM5NDIyLDAuNzg2Mzk0MjIsMCwyOC43MDg2MTUsNTcxLjM4MTY1KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3Rv
cC1jb2xvcj0iI2FlNGNkNSIgaWQ9InN0b3AzLTQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiNhYzRhZDUiIGlkPSJzdG9wNC05Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjkwMVJJSGNM
eXo2ZFpQR1N2U2YxWGEtMiIgeDE9IjM2LjI1IiB4Mj0iMzYuMjUiIHkxPSIzOC4wNDI5OTkiIHkyPSIyMy4wMDYwMDEiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMCwwLjc4NjM5NDIyLDAuNzg2Mzk0MjIsMCwyOC43MDg2
MTUsLTEuMTEzMzUzMykiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM5MTJmYmQiIGlkPSJzdG9wMS0wIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIj
OTMzMmJmIiBpZD0ic3RvcDItNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9Im5hbWVkdmlldzE2IiBwYWdlY29sb3I9IiNmZmZmZmYiIGJvcmRlcmNvbG9yPSIjMDAwMDAwIiBib3Jk
ZXJvcGFjaXR5PSIwLjI1IiBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIgaW5rc2NhcGU6ZGVza2NvbG9yPSIjZDFkMWQx
IiBzaG93Z3VpZGVzPSJ0cnVlIiBpbmtzY2FwZTp6b29tPSI1LjY1Njg1NDMiIGlua3NjYXBlOmN4PSI0NS4zNDMyMjIiIGlua3NjYXBlOmN5PSIzMC40MDU1OTIiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIgaW5rc2Nh
cGU6d2luZG93LWhlaWdodD0iMTM2MCIgaW5rc2NhcGU6d2luZG93LXg9IjAiIGlua3NjYXBlOndpbmRvdy15PSIwIiBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcxNiI+
PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSIxOS41NTk3ODksMTQzLjczODM0IiBvcmllbnRhdGlvbj0iMSwwIiBpZD0iZ3VpZGUxNyIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIvPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0i
MjQuMDg0NDY5LDk4LjIyNDIxMiIgb3JpZW50YXRpb249IjAsLTEiIGlkPSJndWlkZTE4IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSIxOS44NDUxNjksMTE2LjQzOTYyIiBvcmll
bnRhdGlvbj0iMCwtMSIgaWQ9Imd1aWRlMTkiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiLz48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249IjQ4LjA0MTUwNCw4My40NjU4MiIgb3JpZW50YXRpb249IjEsMCIgaWQ9Imd1aWRlMjAi
IGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiLz48c29kaXBvZGk6Z3VpZGUgcG9zaXRpb249Ijc4LjI1LDQ3Ljc1IiBvcmllbnRhdGlvbj0iMCwtMSIgaWQ9Imd1aWRlMjEiIGlua3NjYXBlOmxvY2tlZD0iZmFsc2UiLz48c29kaXBv
ZGk6Z3VpZGUgcG9zaXRpb249IjUwLjM5NDQ1Nyw2NS4zMTY0NjgiIG9yaWVudGF0aW9uPSIwLC0xIiBpZD0iZ3VpZGUyOSIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIvPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0iNjcuNjA1
MzQ3LDIxLjA2MDgzNyIgb3JpZW50YXRpb249IjAsLTEiIGlkPSJndWlkZTMwIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+PGxpbmVhckdyYWRpZW50IGlkPSI2ZlNPVVBhfkNQOHRjc0l4
X1d2dWZhIiB4MT0iMjIuMDExIiB4Mj0iMjYuMjEyIiB5MT0iNzg1Ljc5MTAyIiB5Mj0iNzg5Ljk5Mjk4IiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9u
VXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wMyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0b3A0Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFy
R3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmIiIHgxPSI2LjAxMTAwMDIiIHgyPSIxMC4yMTMiIHkxPSI3OTQuNzkxMDIiIHkyPSI3OTguOTkyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43
OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wNSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0
b3A2Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmMiIHgxPSI2LjAxMTAwMDIiIHgyPSIxMC4yMTMiIHkxPSI4MTIuNzkxMDIiIHkyPSI4MTYuOTkyIiBncmFkaWVu
dFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wNyIvPjxzdG9wIG9mZnNldD0i
MSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0b3A4Ii8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmQiIHgxPSIzOC4wMTEwMDIiIHgyPSI0Mi4yMTIwMDIiIHkx
PSI3OTQuNzkxMDIiIHkyPSI3OTguOTkyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMz
M2JlZjAiIGlkPSJzdG9wOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzBhODVkOSIgaWQ9InN0b3AxMCIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSI2ZlNPVVBhfkNQOHRjc0l4X1d2dWZl
IiB4MT0iMzguMDExMDAyIiB4Mj0iNDIuMjEyMDAyIiB5MT0iODEyLjc5MTAyIiB5Mj0iODE2Ljk5MiIgZ3JhZGllbnRUcmFuc2Zvcm09InRyYW5zbGF0ZSgwLC03ODEuNzgpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVz
ZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMzNiZWYwIiBpZD0ic3RvcDExIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMGE4NWQ5IiBpZD0ic3RvcDEyIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFy
R3JhZGllbnQgaWQ9IjZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmYiIHgxPSIyMi4wMTEiIHgyPSIyNi4yMTIiIHkxPSI4MjEuNzkxMDIiIHkyPSI4MjUuOTkyIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTc4MS43OCki
IGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzM2JlZjAiIGlkPSJzdG9wMTMiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwYTg1ZDkiIGlkPSJzdG9w
MTQiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0iNmZTT1VQYX5DUDh0Y3NJeF9XdnVmZyIgeDE9IjIyLjM4OTk5OSIgeDI9IjI1LjUxIiB5MT0iMjcuODQxIiB5Mj0iMjAuMTg0IiBncmFkaWVudFRyYW5z
Zm9ybT0ibWF0cml4KDIuMjc1MDY0OSwwLDAsLTIuMjc1MDY0OSwtNi40NzA0OTc2LDcxLjA3ODY1OSkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMyYWE0ZjQi
IGlkPSJzdG9wMTUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMwMDdhZDkiIGlkPSJzdG9wMTYiLz48L2xpbmVhckdyYWRpZW50PjxjaXJjbGUgY3g9IjQ4LjEzMTA1IiBjeT0iMTYuNzI3MzU2IiBmaWxsPSJ1cmwo
IzZmU09VUGF+Q1A4dGNzSXhfV3Z1ZmcpIiBpZD0iY2lyY2xlMTYiIHN0eWxlPSJmaWxsOnVybCgjNmZTT1VQYX5DUDh0Y3NJeF9XdnVmZyk7c3Ryb2tlLXdpZHRoOjIuMjc1MDYiIHI9IjExLjM3NTMyNCIvPjxwYXRoIGZpbGw9
InVybCgjQXJ0RFlaMmxUNzV2a2FiUkVzVERFYSkiIGQ9Im0gNzYuODU2MTY0LDczLjcwNjQyNiB2IC0zLjQ3MTQxMyBjIDEwZS03LC0wLjY2ODU3NiAtMC41NDE1OTgsLTEuMjEwMTc1IC0xLjIxMDE3NSwtMS4yMTAxNzUgbCAt
MTAuMDI4MTIzLC0yLjIzNjM2MSAtNi42MzM0MTUsNi42MzM0MTYgYyAtMC41NTE5NjQsMC41NTE5NjQgLTAuMTYxMTg1LDEuNDk1MjI2IDAuNjE5MzQsMS40OTUyMjYgaCAxNi4wNDE2OCBjIDAuNjY4NTc3LDAgMS4yMTA2OTQs
LTAuNTQyMTE3IDEuMjEwNjkzLC0xLjIxMDY5MyB6IiBpZD0icGF0aDYtNyIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI3KTtzdHJva2Utd2lkdGg6MC43MzI5NTMiLz48cGF0aCBmaWxsPSJ1cmwoI0FydERZWjJs
VDc1dmthYlJFc1RERWIpIiBkPSJtIDc2Ljg1NjE2NCw3My43MDY0MjYgdiAtMTYuMDQxNjggYyAwLC0wLjc4MDUyNSAtMC45NDMyNjIsLTEuMTcxMzA0IC0xLjQ5NTIyNiwtMC42MTkzNCBMIDY5Ljc2NDA3NCw2Mi42NDIyNjkg
NTEuNzk0MTk5LDQ1LjE3MjM5MyBjIC0wLjU4MDcxNywtMC41NjQ1NTkgLTEuODkzMDk3LDAuNjY1MTkgLTEuNzkxODU0LDEuNDY4NzUgbCAwLjcwMjg0Myw1LjU3ODQwNyBjIDAuMTAxMjQzLDAuODAzNTYgLTAuMTU5ODQyLDEu
MDg3NjMxIDAuNDA2MjUsMS42NjY4NTQgbCAyMC4yMDc0NjUsMjAuNjc2MjE0IGMgMC4yMTY3MDIsMC4yMjE3MjkgMC41MjEzODUsMC4zNTQ1MDEgMC44NTU2NzMsMC4zNTM5ODIgaCAzLjQ3MTQxMyBjIDAuNjY4MDU5LDUuMTll
LTQgMS4yMTAxNzYsLTAuNTQxNTk4IDEuMjEwMTc1LC0xLjIxMDE3NCB6IiBpZD0icGF0aDgtMyIgc3R5bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI2KTtzdHJva2Utd2lkdGg6MC43MzI5NTMiIHNvZGlwb2RpOm5vZGV0
eXBlcz0iY3NzY3Nzc3NzY2NjIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREVhKSIgZD0ibSAxOS4zMDc0MTgsNzMuNjYyMjMyIHYgLTMuNDcxNDEzIGMgLTEwZS03LC0wLjY2ODU3NiAwLjU0MTU5OCwt
MS4yMTAxNzUgMS4yMTAxNzUsLTEuMjEwMTc1IGwgMTAuMDI4MTIzLC0yLjIzNjM2MSA2LjYzMzQxNSw2LjYzMzQxNiBjIDAuNTUxOTY0LDAuNTUxOTY0IDAuMTYxMTg1LDEuNDk1MjI2IC0wLjYxOTM0LDEuNDk1MjI2IGggLTE2
LjA0MTY4IGMgLTAuNjY4NTc3LDAgLTEuMjEwNjk0LC0wLjU0MjExNyAtMS4yMTA2OTMsLTEuMjEwNjkzIHoiIGlkPSJwYXRoNi03LTgiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyOCk7c3Ryb2tlLXdpZHRoOjAu
NzMyOTUzIiBzb2RpcG9kaTpub2RldHlwZXM9InNzY2Nzc3NzIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREViKSIgZD0ibSAxOS4zMDc0MTgsNzMuNjYyMjMyIHYgLTE2LjA0MTY4IGMgMCwtMC43ODA1
MjUgMC45NDMyNjIsLTEuMTcxMzA0IDEuNDk1MjI2LC0wLjYxOTM0IGwgNS41OTY4NjQsNS41OTY4NjMgMTkuMjE5ODc1LC0xOS4wMzIzNzYgYyAwLjU3NTQ5NSwtMC41Njk4ODEgMC41MzQ1OTcsMS4yOTI0NDEgMC40MTY4NTQs
Mi4wOTM3NSBsIC0wLjk1Mjg0Myw2LjQ4NDY1NyBjIC0wLjExNzc0MywwLjgwMTMwOSAwLjUwNzA5OSwxLjQwMzU4IC0wLjA2MjUsMS45NzkzNTQgTCAyNC44NDQ2NzksNzQuNTE4NDI0IGMgLTAuMjE4MDQ1LDAuMjIwNDA5IC0w
LjUyMTM4NSwwLjM1NDUwMSAtMC44NTU2NzMsMC4zNTM5ODIgaCAtMy40NzE0MTMgYyAtMC42NjgwNTksNS4xOWUtNCAtMS4yMTAxNzYsLTAuNTQxNTk4IC0xLjIxMDE3NSwtMS4yMTAxNzQgeiIgaWQ9InBhdGg4LTMtNiIgc3R5
bGU9ImZpbGw6dXJsKCNsaW5lYXJHcmFkaWVudDI5KTtzdHJva2Utd2lkdGg6MC43MzI5NTMiIHNvZGlwb2RpOm5vZGV0eXBlcz0iY3NzY3Nzc3NzY2NjIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREVh
KSIgZD0ibSA0OC45MDA4MDksOTMuNTE0NjA1IDIuNDU0NjYsLTIuNDU0NjYgYyAwLjQ3Mjc1NSwtMC40NzI3NTQgMC40NzI3NTUsLTEuMjM4NjkgMCwtMS43MTE0NDUgbCAtNS41MDk2MDgsLTguNjcyMyBoIC05LjM4MTA2NiBj
IC0wLjc4MDU5NSwwIC0xLjE3MTI1OSwwLjk0MzMxIC0wLjYxOTM0NSwxLjQ5NTIyNCBsIDExLjM0MzE4MSwxMS4zNDMxODEgYyAwLjQ3Mjc1NSwwLjQ3Mjc1NSAxLjIzOTQyNCwwLjQ3Mjc1NSAxLjcxMjE3OCwwIHoiIGlkPSJw
YXRoNi03LTQiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyNCk7c3Ryb2tlLXdpZHRoOjAuNzMyOTUzIi8+PHBhdGggZmlsbD0idXJsKCNBcnREWVoybFQ3NXZrYWJSRXNUREViKSIgZD0iTSA0OC45MDA4MDksOTMu
NTE0NjA1IDYwLjI0Mzk5LDgyLjE3MTQyNCBDIDYwLjc5NTkwNCw4MS42MTk1MSA2MC40MDUyNCw4MC42NzYyIDU5LjYyNDY0NSw4MC42NzYyIGggLTcuOTE1MTYgbCAwLjAyMTE1LC01MC4xMDMwNTIgQyA1MS43MzA5NzcsMjku
NzYzMjM1IDUxLjI0MDExMiwyOS4zMDEzNjUgNTAuNDMwMiwyOS4zMDIyMyBsIC00LjM5NjgzOCwwLjAwNDcgYyAtMC44MDk5MTIsOC42NGUtNCAtMS42NDk0NDcsMC40NTI4NjkgLTEuNjQ5NSwxLjI2Mjc4MSBsIC0wLjAwMzks
NTkuNjM0ODg3IGMgLTJlLTUsMC4zMTAwMzkgMC4xMTgwMDUsMC42MTkzNDUgMC4zNTQ3NDksMC44NTUzNTYgbCAyLjQ1NDY2LDIuNDU0NjYgYyAwLjQ3MjAyMiwwLjQ3Mjc1NSAxLjIzODY5MSwwLjQ3Mjc1NSAxLjcxMTQ0NSww
IHoiIGlkPSJwYXRoOC0zLTUiIHN0eWxlPSJmaWxsOnVybCgjbGluZWFyR3JhZGllbnQyNSk7c3Ryb2tlLXdpZHRoOjAuNzMyOTUzIiBzb2RpcG9kaTpub2RldHlwZXM9InNzc2Nzc3Nzc2NjcyIvPjwvc3ZnPgo=</data><downloads_count>0</downloads_count></logo>
</NetworkDeviceType>
<NetworkDeviceType alias="NetworkDeviceType" id="10">
<name>Router</name>
<logo><mimetype>image/png</mimetype><filename>icons8-collect-96.png</filename><data>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</data><downloads_count>0</downloads_count></logo>
</NetworkDeviceType>
<NetworkDeviceType alias="NetworkDeviceType" id="4">
<name>Router 4G</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icons8-router-4g.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+CjxzdmcgeG1sb
nM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIgeG1sb
nM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgOTYgOTYiIHdpZHRoPSI5NiIgaGVpZ2h0PSI5NiIgdmVyc2lvbj0iMS4xIiBpZ
D0ic3ZnMjUiIHNvZGlwb2RpOmRvY25hbWU9Imljb25zOC1yb3V0ZXItNGcuc3ZnIiBpbmtzY2FwZTp2ZXJzaW9uPSIxLjQuMyAoMGQxNWY3NTA0MiwgMjAyNS0xMi0yNSkiPjxkZWZzIGlkPSJkZWZzMjUiPjxsaW5lYXJHcmFka
WVudCBpZD0iZXd3NmZTSFhMRzNoNFllQXFnOXVfYSIgeDE9IjE3LjU5IiB4Mj0iMzIuMDciIHkxPSIyNS45MzQ5OTkiIHkyPSI0OC4yMzA5OTkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZ
m9ybT0ibWF0cml4KDEuMTYxODcxNywwLDAsMS4xNjE4NzE3LDIwLjUwNzI1NCwyLjE5MTYwNDkpIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4NTkyOWUiIGlkPSJzdG9wMS0zIi8+PHN0b3Agb2Zmc2V0PSIxIiBzd
G9wLWNvbG9yPSIjNmQ3ODgyIiBpZD0ic3RvcDItNiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxzb2RpcG9kaTpuYW1lZHZpZXcgaWQ9Im5hbWVkdmlldzI1IiBwYWdlY29sb3I9IiNmZmZmZmYiIGJvcmRlcmNvbG9yPSIjM
DAwMDAwIiBib3JkZXJvcGFjaXR5PSIwLjI1IiBpbmtzY2FwZTpzaG93cGFnZXNoYWRvdz0iMiIgaW5rc2NhcGU6cGFnZW9wYWNpdHk9IjAuMCIgaW5rc2NhcGU6cGFnZWNoZWNrZXJib2FyZD0iMCIgaW5rc2NhcGU6ZGVza2Nvb
G9yPSIjZDFkMWQxIiBpbmtzY2FwZTp6b29tPSI4LjEwMjI2NTIiIGlua3NjYXBlOmN4PSIyMS40MTM3NjUiIGlua3NjYXBlOmN5PSIzNy4zOTY5NDkiIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMjU2MCIgaW5rc2NhcGU6d2luZ
G93LWhlaWdodD0iMTM2MCIgaW5rc2NhcGU6d2luZG93LXg9IjAiIGlua3NjYXBlOndpbmRvdy15PSIwIiBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIiBpbmtzY2FwZTpjdXJyZW50LWxheWVyPSJzdmcyNSIgc2hvd2d1a
WRlcz0idHJ1ZSI+PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSI5LjgxNzg1NjIsMzAuMTQwNzE4IiBvcmllbnRhdGlvbj0iMSwwIiBpZD0iZ3VpZGUxIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PHNvZGlwb2RpOmd1aWRlI
HBvc2l0aW9uPSI4Ni40NzA4MDIsMzguMTgxOTY4IiBvcmllbnRhdGlvbj0iMSwwIiBpZD0iZ3VpZGUyIiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PHNvZGlwb2RpOmd1aWRlIHBvc2l0aW9uPSI0Ni4yNTg2MzYsOS40ODEwM
jMyIiBvcmllbnRhdGlvbj0iMCwtMSIgaWQ9Imd1aWRlMyIgaW5rc2NhcGU6bG9ja2VkPSJmYWxzZSIvPjxzb2RpcG9kaTpndWlkZSBwb3NpdGlvbj0iNTMuNjQxNDQyLDEwMS4yOTgiIG9yaWVudGF0aW9uPSIwLC0xIiBpZD0iZ
3VpZGU0IiBpbmtzY2FwZTpsb2NrZWQ9ImZhbHNlIi8+PC9zb2RpcG9kaTpuYW1lZHZpZXc+PGxpbmVhckdyYWRpZW50IGlkPSJzUXk3T3ZQWEgwdDJtS2ZxazdYdVhhIiB4MT0iMzQuMTE3MDAxIiB4Mj0iMzMuOTA5IiB5MT0iM
zAuNDUxIiB5Mj0iMTEuODI2IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDE1MTEyMSwwLDAsLTIuMDE1MTEyMSwtMC4yODI4MzI5NSw5OC4xNzI2OTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b
3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNzM3YjgwIiBpZD0ic3RvcDEiLz48c3RvcCBvZmZzZXQ9Ii43MTQiIHN0b3AtY29sb3I9IiM3MzdiODAiIGlkPSJzdG9wMiIvPjxzdG9wIG9mZnNldD0iLjc1NiIgc3RvcC1jb2xvc
j0iIzczN2I4MCIgaWQ9InN0b3AzIi8+PHN0b3Agb2Zmc2V0PSIuODYzIiBzdG9wLWNvbG9yPSIjNjU2YzcxIiBpZD0ic3RvcDQiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1NzVjNjEiIGlkPSJzdG9wNSIvPjwvb
GluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhhKSIgZD0ibSA2Mi4xODU2NDEsODAuMjU4MzQ4IGMgLTAuMTkxNDM1LDAgLTAuMzg2OTAyLC0wLjAyODIxIC0wLjU4MDM1MiwtMC4wO
DQ2MyAtMS4wNjU5OTMsLTAuMzIwNCAtMS42NzI1NDMsLTEuNDQyODIgLTEuMzUyMTQsLTIuNTA4ODE3IEwgNzIuMzQzODIzLDM3LjM2MjY1OSBjIDAuMzIwNDA0LC0xLjA2NTk5NCAxLjQ0NDgzNCwtMS42NzI1NDMgMi41MDg4M
TUsLTEuMzUyMTQgMS4wNjU5OSwwLjMyMDQwMiAxLjY3MjUzOSwxLjQ0MjgyMSAxLjM1MjE0MSwyLjUwODgxNCBMIDY0LjExNDEwNCw3OC44MjE1NzggYyAtMC4yNTk5NSwwLjg3NDU1NSAtMS4wNTk5NSwxLjQzNjc3IC0xLjkyO
DQ2MywxLjQzNjc3IHoiIGlkPSJwYXRoNSIgc3R5bGU9ImZpbGw6dXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhhKTtzdHJva2Utd2lkdGg6Mi4wMTUxMSIvPjxsaW5lYXJHcmFkaWVudCBpZD0ic1F5N092UFhIMHQybUtmcWs3W
HVYYiIgeDE9IjE0LjEyMSIgeDI9IjEzLjkxMyIgeTE9IjMwLjcxOSIgeTI9IjEyLjA5NCIgZ3JhZGllbnRUcmFuc2Zvcm09Im1hdHJpeCgyLjAxNTExMjEsMCwwLC0yLjAxNTExMjEsLTAuMjgyODMyOTUsOTguMTcyNjk0KSIgZ
3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzczN2I4MCIgaWQ9InN0b3A2Ii8+PHN0b3Agb2Zmc2V0PSIuNzczIiBzdG9wLWNvbG9yPSIjNzM3YjgwIiBpZD0ic3Rvc
DciLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1NzVjNjEiIGlkPSJzdG9wOCIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhiKSIgZD0ibSAzMy45NzQwNzEsO
DAuMjU4MzQ4IGMgLTAuODY2NDk3LDAgLTEuNjY2NDk4LC0wLjU2NDIzMSAtMS45MzA0NzUsLTEuNDM2NzcgTCAxOS45NTI5MjIsMzguNTE5MzMzIGMgLTAuMzIwNDA0LC0xLjA2NTk5MyAwLjI4NjE0NiwtMi4xODg0MTIgMS4zN
TIxNDEsLTIuNTA4ODE0IDEuMDYzOTc5LC0wLjMxNDM1NyAyLjE4ODQxMSwwLjI4NjE0NiAyLjUwODgxNSwxLjM1MjE0IGwgMTIuMDkwNjcxLDQwLjMwMjIzOSBjIDAuMzIwNDAyLDEuMDY1OTk2IC0wLjI4NjE0NiwyLjE4ODQxN
yAtMS4zNTIxMzksMi41MDg4MTUgLTAuMTkzNDUyLDAuMDU2NDMgLTAuMzg2OTAyLDAuMDg0NjMgLTAuNTc4MzM5LDAuMDg0NjMgeiIgaWQ9InBhdGg4IiBzdHlsZT0iZmlsbDp1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGIpO
3N0cm9rZS13aWR0aDoyLjAxNTExIi8+PGxpbmVhckdyYWRpZW50IGlkPSJzUXk3T3ZQWEgwdDJtS2ZxazdYdVhjIiB4MT0iMjQiIHgyPSIyNCIgeTE9IjE0LjYxNCIgeTI9Ii0yLjA3MTAwMDEiIGdyYWRpZW50VHJhbnNmb3JtP
SJtYXRyaXgoMi4wMTUxMTIxLDAsMCwtMi4wMTUxMTIxLC0wLjI4MjgzMjk1LDk4LjE3MjY5NCkiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiM4OTkxOTgiIGlkP
SJzdG9wOSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzc4N2U4NSIgaWQ9InN0b3AxMCIvPjwvbGluZWFyR3JhZGllbnQ+PHBhdGggZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhjKSIgZD0iTSA4Mi4zM
zY3NjUsODYuMzAzNjg5IEggMTMuODIyOTUxIGMgLTIuMjI2Njk4LDAgLTQuMDMwMjIzNywtMS44MDM1MzEgLTQuMDMwMjIzNywtNC4wMzAyMjcgViA2OC4xNjc2NzggYyAwLC0yLjIyNjY5OSAxLjgwMzUyNTcsLTQuMDMwMjI1I
DQuMDMwMjIzNywtNC4wMzAyMjUgaCA2OC41MTM4MTQgYyAyLjIyNjY5NiwwIDQuMDMwMjIxLDEuODAzNTI2IDQuMDMwMjIxLDQuMDMwMjI1IHYgMTQuMTA1Nzg0IGMgMCwyLjIyNjY5NiAtMS44MDM1MjUsNC4wMzAyMjcgLTQuM
DMwMjIxLDQuMDMwMjI3IHoiIGlkPSJwYXRoMTAiIHN0eWxlPSJmaWxsOnVybCgjc1F5N092UFhIMHQybUtmcWs3WHVYYyk7c3Ryb2tlLXdpZHRoOjIuMDE1MTEiLz48cmVjdCB3aWR0aD0iNjguNTEzODA5IiBoZWlnaHQ9IjE0L
jEwNTc4NSIgeD0iMTMuODIyOTUyIiB5PSI2OC4xNjc2NzEiIGZpbGw9IiM3MzdiODAiIGlkPSJyZWN0MTAiIHN0eWxlPSJzdHJva2Utd2lkdGg6Mi4wMTUxMSIvPjxyYWRpYWxHcmFkaWVudCBpZD0ic1F5N092UFhIMHQybUtmc
Ws3WHVYZCIgY3g9IjM2LjUiIGN5PSIxMS4zOSIgcj0iMi41IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDE1MTEyMSwwLDAsLTIuMDE1MTEyMSwtMC4yODI4MzI5NSw5OC4xNzI2OTQpIiBncmFkaWVudFVuaXRzPSJ1c
2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuNTgyIiBzdG9wLW9wYWNpdHk9Ii4yIiBpZD0ic3RvcDExIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiIGlkPSJzdG9wMTIiLz48L3JhZGlhbEdyYWRpZW50P
jxjaXJjbGUgY3g9IjczLjI2ODc1MyIgY3k9Ijc1LjIyMDU3MyIgZmlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhkKSIgaWQ9ImNpcmNsZTEyIiBzdHlsZT0iZmlsbDp1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGQpO
3N0cm9rZS13aWR0aDoyLjAxNTExIiByPSI1LjAzNzc4MDMiLz48cmFkaWFsR3JhZGllbnQgaWQ9InNReTdPdlBYSDB0Mm1LZnFrN1h1WGUiIGN4PSIzMC41IiBjeT0iMTEuMzkiIHI9IjIuNSIgZ3JhZGllbnRUcmFuc2Zvcm09I
m1hdHJpeCgyLjAxNTExMjEsMCwwLC0yLjAxNTExMjEsLTAuMjgyODMyOTUsOTguMTcyNjk0KSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iLjU4MiIgc3RvcC1vcGFjaXR5PSIuMiIgaWQ9I
nN0b3AxMyIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1vcGFjaXR5PSIwIiBpZD0ic3RvcDE0Ii8+PC9yYWRpYWxHcmFkaWVudD48Y2lyY2xlIGN4PSI2MS4xNzgwODIiIGN5PSI3NS4yMjA1NzMiIGZpbGw9InVybCgjc1F5N092U
FhIMHQybUtmcWs3WHVYZSkiIGlkPSJjaXJjbGUxNCIgc3R5bGU9ImZpbGw6dXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhlKTtzdHJva2Utd2lkdGg6Mi4wMTUxMSIgcj0iNS4wMzc3ODAzIi8+PHJhZGlhbEdyYWRpZW50IGlkP
SJzUXk3T3ZQWEgwdDJtS2ZxazdYdVhmIiBjeD0iMjQuNSIgY3k9IjExLjM5IiByPSIyLjUiIGdyYWRpZW50VHJhbnNmb3JtPSJtYXRyaXgoMi4wMTUxMTIxLDAsMCwtMi4wMTUxMTIxLC0wLjI4MjgzMjk1LDk4LjE3MjY5NCkiI
GdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9Ii41ODIiIHN0b3Atb3BhY2l0eT0iLjIiIGlkPSJzdG9wMTUiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3Atb3BhY2l0eT0iMCIgaWQ9InN0b3AxNiIvP
jwvcmFkaWFsR3JhZGllbnQ+PGNpcmNsZSBjeD0iNDkuMDg3NDE0IiBjeT0iNzUuMjIwNTczIiBmaWxsPSJ1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGYpIiBpZD0iY2lyY2xlMTYiIHN0eWxlPSJmaWxsOnVybCgjc1F5N092U
FhIMHQybUtmcWs3WHVYZik7c3Ryb2tlLXdpZHRoOjIuMDE1MTEiIHI9IjUuMDM3NzgwMyIvPjxyYWRpYWxHcmFkaWVudCBpZD0ic1F5N092UFhIMHQybUtmcWs3WHVYZyIgY3g9IjExLjUiIGN5PSIxMS4zOSIgcj0iMi41IiBnc
mFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDIuMDE1MTEyMSwwLDAsLTIuMDE1MTEyMSwtMC4yODI4MzI5NSw5OC4xNzI2OTQpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIuNTgyIiBzdG9wL
W9wYWNpdHk9Ii4yIiBpZD0ic3RvcDE3Ii8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLW9wYWNpdHk9IjAiIGlkPSJzdG9wMTgiLz48L3JhZGlhbEdyYWRpZW50PjxjaXJjbGUgY3g9IjIyLjg5MDk1OSIgY3k9Ijc1LjIyMDU3MyIgZ
mlsbD0idXJsKCNzUXk3T3ZQWEgwdDJtS2ZxazdYdVhnKSIgaWQ9ImNpcmNsZTE4IiBzdHlsZT0iZmlsbDp1cmwoI3NReTdPdlBYSDB0Mm1LZnFrN1h1WGcpO3N0cm9rZS13aWR0aDoyLjAxNTExIiByPSI1LjAzNzc4MDMiLz48Y
2lyY2xlIGN4PSI3My4yNjg3NTMiIGN5PSI3NS4yMjA1NzMiIGZpbGw9IiM1MGU2ZmYiIGlkPSJjaXJjbGUxOSIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48Y2lyY2xlIGN4PSI2MS4xNzgwO
DIiIGN5PSI3NS4yMjA1NzMiIGZpbGw9IiM1MGU2ZmYiIGlkPSJjaXJjbGUyMCIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48Y2lyY2xlIGN4PSI0OS4wODc0MTQiIGN5PSI3NS4yMjA1NzMiI
GZpbGw9IiM1MGU2ZmYiIGlkPSJjaXJjbGUyMSIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48Y2lyY2xlIGN4PSIyMi44OTA5NTkiIGN5PSI3NS4yMjA1NzMiIGZpbGw9IiM1MGU2ZmYiIGlkP
SJjaXJjbGUyMiIgc3R5bGU9InN0cm9rZS13aWR0aDoyLjAxNTExIiByPSIzLjAyMjY2ODQiLz48cGF0aCBmaWxsPSJ1cmwoI2V3dzZmU0hYTEczaDRZZUFxZzl1X2EpIiBkPSJtIDQzLjExMTQ2NywzMy42NzAxOTcgdiAxMy4wN
zgwMjYgaCAyLjQ4ODcyOSB2IDMuNDE0NzQxIGggLTIuNDg4NzI5IHYgNC4yNTI0NTEgSCAzOC45NDQ5OTQgViA1MC4xNjI5NjQgSCAyOS45MDMzMSB2IC0zLjU3MzkxNyBjIDAuODAwNTI5LC0wLjg5NTgwNSAxLjYzMDEwNSwtM
S44Nzc1ODQgMi40ODg3MjcsLTIuOTQzMDIxIDAuODU4NjI0LC0xLjA2NTQzNiAxLjY4ODIwMSwtMi4xNjIyNDMgMi40ODg3MzEsLTMuMjkxNTgyIDAuODAwNTMsLTEuMTI5MzM5IDEuNTQ1Mjg4LC0yLjI2MzMyNiAyLjIzNTQ0L
C0zLjQwNzc3IDAuNjkwMTUyLC0xLjE0MjEyIDEuMjc1NzM2LC0yLjIzNTQ0MSAxLjc1NzkxMywtMy4yNzY0NzcgeiBtIC05LjExMzcyMiwxMy4wNzgwMjYgaCA0Ljk0NzI0OSBWIDM5LjUwMTYzIGMgLTAuMzM4MTA1LDAuNjI2M
jQ4IC0wLjcwNDA5MywxLjI2MDYzIC0xLjA5OTEzLDEuOTAxOTg0IC0wLjM5NjE5OCwwLjY0MjUxNCAtMC44MDk4MjYsMS4yNzM0MTIgLTEuMjQ0MzY0LDEuODk2MTc0IC0wLjQzMzM3NywwLjYyMTYwMiAtMC44NzI1NjYsMS4yM
jQ2MTQgLTEuMzE2NDAxLDEuODA3ODcxIC0wLjQ0MzgzNSwwLjU4MjEgLTAuODcyNTY1LDEuMTI5MzQgLTEuMjg3MzU0LDEuNjQwNTY0IHogbSAzMS43ODMwMDEsNi4yNzg3NTQgYyAtMi4wMjUxNDIsMS4xNjc2ODIgLTQuNTQyO
TE5LDEuNzUwOTQzIC03LjU1MjE2NiwxLjc1MDk0MyAtMy4zMzY4OTUsMCAtNS45NjczNzQsLTAuOTIzNjg4IC03Ljg5MTQzMywtMi43NzEwNjQgLTEuOTI0MDU5LC0xLjg0NjIxNyAtMi44ODQ5MjcsLTQuMzg5NTUzIC0yLjg4N
DkyNywtNy42MzAwMTMgMCwtMy4yNjAyMTIgMS4wNTAzMzIsLTUuOTE3NDEzIDMuMTUzMzIsLTcuOTcxNjAyIDIuMTAyOTg3LC0yLjA1NDE4OSA0Ljg5OTYxMiwtMy4wODEyODMgOC4zOTEwMzcsLTMuMDgxMjgzIDIuMTk5NDIzL
DAgNC4xMzc0MjQsMC4zMDQ0MTEgNS44MTYzMjksMC45MTIwNyB2IDQuMzgyNTggYyAtMS42MDIyMTksLTAuOTI2MDEzIC0zLjU1ODgxMiwtMS4zODg0MzkgLTUuODc0NDIyLC0xLjM4ODQzOSAtMS45MzkxNjUsMCAtMy41MTY5O
DQsMC42Mjk3MzYgLTQuNzM4MTE0LDEuODg4MDQ0IC0xLjIxOTk2NCwxLjI1ODMwNiAtMS44Mjk5NDcsMi45MzgzNzEgLTEuODI5OTQ3LDUuMDQxMzYgMCwyLjEzMjAzNiAwLjU0ODQwNCwzLjc4MDczIDEuNjQyODg3LDQuOTQ4N
DEzIDEuMDkzMzIxLDEuMTY2NTE4IDIuNTcyMzg0LDEuNzUwOTM4IDQuNDMzNzAyLDEuNzUwOTM4IDEuMTE3NzIsMCAyLjAwNTM5MiwtMC4xNjAzNDEgMi42NjE4NDgsLTAuNDc3NTI5IHYgLTQuMDUwMjgzIGggLTQuMTUzNjkyI
HYgLTMuNzMzMDk1IGggOC44MjU1NzggeiIgaWQ9InBhdGgyIiBzdHlsZT0iZmlsbDp1cmwoI2V3dzZmU0hYTEczaDRZZUFxZzl1X2EpO3N0cm9rZS13aWR0aDoxLjE2MTg3Ii8+PHBhdGggZmlsbD0iIzUwZTZmZiIgZD0ibSA1N
y4yNTcyNTUsMjYuODQ2NTIzIC03LjY0MDQ2OCw0Ljc5MDM5NiBjIC0wLjc1NTIxOSwwLjQ3NDA0MyAtMS43MTYwODYsMC40NzI4ODMgLTIuNDcxMzAyLC0wLjAwMTIgbCAtNy42MTgzOTMsLTQuNzg5MjM3IGMgMS45MDU0NywtM
y4wMjA4NjYgNS4yOTgxMzUsLTQuOTAzMDk4IDguODY1MDgxLC00LjkwMzA5OCAzLjU2Njk0NywwIDYuOTU5NjEzLDEuODgyMjMyIDguODY1MDgyLDQuOTAzMDk4IHoiIGlkPSJwYXRoMyIgc3R5bGU9InN0cm9rZS13aWR0aDoxL
jE2MTg3Ii8+PHBhdGggZmlsbD0iIzE5OWJlMiIgZD0ibSA2Ny4wOTk0NywyMC42ODI3OTIgLTYuODg5ODk3LDQuMzIxMDAyIGMgLTUuNTY2NTI4LC04LjgxNjI4NCAtMTguMjU1MzMsLTguNDg1MTQ4IC0yMy42MzQ3OTgsMCBsI
C0zLjkzNzU4MSwtMi40Njg5NzcgLTIuOTUzNDc5LC0xLjg1MjAyNSB2IC0wLjAwMTIgQyAzOC4zMTUyNiw2Ljk0MzU5MDEgNTguNDI5NTg0LDYuODk3MTE1NCA2Ny4wOTk0NywyMC42ODI3OTIgWiIgaWQ9InBhdGg0IiBzdHlsZ
T0ic3Ryb2tlLXdpZHRoOjEuMTYxODciLz48cGF0aCBmaWxsPSIjMDA3OGQ0IiBkPSJtIDcwLjIxNzkzNSwxNi45ODY4NzkgYyAwLjQ3MDU1NywwLjY2MzQzIDAuMzA2NzMzLDEuNTgyNDcgLTAuMzgyMjU2LDIuMDEzNTI1IGwgL
TMuNzA2MzcxLDIuMzIxNDE4IHYgLTAuMDAxMiBjIC04LjAzMzE4MiwtMTIuNzgxNzQ5NyAtMjcuMDYzNDc5LC0xMy4zNTMzOTA1IC0zNS40NzA3ODIsMCB2IDAuMDAxMiBMIDI2Ljk1MjE1NSwxOS4wMDA0MDQgQyAyNi4yNjMxN
jUsMTguNTY5MzQ5IDI2LjA5OTM0MywxNy42NTAzMDkgMjYuNTY4NzM5LDE2Ljk4Njg3OSAzMS41MzkyMjQsOS45NzQ5ODM1IDM5Ljc2NzYsNS42NzcyMiA0OC4zOTIxNzMsNS42NzcyMiBjIDguNjI0NTc2LDAgMTYuODUyOTUsN
C4yOTc3NjM1IDIxLjgyNTc2MiwxMS4zMDk2NTkgeiIgaWQ9InBhdGg1LTciIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xNjE4NyIvPjxwYXRoIGZpbGw9IiMzNWMxZjEiIGQ9Im0gNjEuMTkzNjc3LDI0LjM4Njg0MSAtNC45MjE2O
DksMy4wODU5MyBjIC0zLjc1MDUyMSwtNS45MTc0MTMgLTEyLjE3NTI1NSwtNS42MjQ2MjEgLTE1Ljc1OTYyOSwwIGwgLTQuOTIxNjg3LC0zLjA4NTkzIDAuMDAyNCwtMC4wMDM0IGMgNS44MTA1MjEsLTkuMjExMzIgMTkuNTMxMDY0LC05LjU2OTE3NiAyNS41OTYwMzQsLTAuMDAzNCB6IiBpZD0icGF0aDYiIHN0eWxlPSJzdHJva2Utd2lkdGg6MS4xNjE4NyIvPjwvc3ZnPgo=</data><downloads_count>0</downloads_count></logo>
</NetworkDeviceType>
<NetworkDeviceType alias="NetworkDeviceType" id="11">
<name>Switch</name>
<logo><mimetype>image/svg+xml</mimetype><filename>icons8-switch.svg</filename><data>PD94bWwgdmVyc2lvbj0iMS4wIj8+CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3
Qm94PSIwIDAgNDggNDgiIHdpZHRoPSIyNDBweCIgaGVpZ2h0PSIyNDBweCI+PGxpbmVhckdyYWRpZW50IGlkPSJGcnRMVXlMNHo1VUU5blBZQV9HelFhIiB4MT0iMTEuMjM1IiB4Mj0iNDIuNzIxIiB5MT0iNDEuMjk3IiB5Mj0i
LTEuNjM5IiBncmFkaWVudFRyYW5zZm9ybT0ibWF0cml4KDEgMCAwIC0xIDAgNDcuODkpIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjMjFhZDY0Ii8+PHN0b3Ag
b2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDg4MjQyIi8+PC9saW5lYXJHcmFkaWVudD48cGF0aCBmaWxsPSJ1cmwoI0ZydExVeUw0ejVVRTluUFlBX0d6UWEpIiBkPSJNMzgsNDJIMTBjLTIuMiwwLTQtMS44LTQtNFYxMGMwLTIu
MiwxLjgtNCw0LTRoMjhjMi4yLDAsNCwxLjgsNCw0djI4QzQyLDQwLjIsNDAuMiw0MiwzOCw0MnoiLz48cGF0aCBkPSJNMTQuOTMsMjZjLTAuNDE5LDAtMC44MTUtMC4xNjItMS4xMTctMC40NTVMOS42MzIsMjEuNDkgQzkuMjI1
LDIxLjA5Myw5LDIwLjU2NCw5LDIwczAuMjI1LTEuMDkzLDAuNjMyLTEuNDg5bDQuMTgxLTQuMDU3QzE0LjExNSwxNC4xNjEsMTQuNTEyLDE0LDE0LjkzLDE0YzAuODg1LDAsMS42MDQsMC43MSwxLjYwNCwxLjU4MyBWMTdoNC43
MTZjMC45NjUsMCwxLjc1LDAuNzc1LDEuNzUsMS43Mjh2Mi41NDVDMjMsMjIuMjI1LDIyLjIxNSwyMywyMS4yNSwyM2gtNC43MTZ2MS40MTdjMCwwLjQ0OS0wLjE4MywwLjg2Mi0wLjUxNSwxLjE2NCBDMTUuNzIxLDI1Ljg1MSwx
NS4zMzQsMjYsMTQuOTMsMjZ6IiBvcGFjaXR5PSIuMDUiLz48cGF0aCBkPSJNMTQuOTMsMjUuNWMtMC4yODcsMC0wLjU2MS0wLjExMS0wLjc2OS0wLjMxM0w5Ljk4LDIxLjEzMSBDOS42NzEsMjAuODMsOS41LDIwLjQyOCw5LjUs
MjBzMC4xNzEtMC44MywwLjQ4LTEuMTNsNC4xODEtNC4wNTdjMC4yMDgtMC4yMDIsMC40ODEtMC4zMTMsMC43NjktMC4zMTMgYzAuNjA5LDAsMS4xMDQsMC40ODYsMS4xMDQsMS4wODNWMTcuNWg1LjIxNmMwLjY4OSwwLDEuMjUs
MC41NTEsMS4yNSwxLjIyOHYyLjU0NWMwLDAuNjc3LTAuNTYxLDEuMjI4LTEuMjUsMS4yMjhoLTUuMjE2djEuOTE3IGMwLDAuMzA3LTAuMTI1LDAuNTg5LTAuMzUxLDAuNzk0QzE1LjQ3OCwyNS4zOTcsMTUuMjEsMjUuNSwxNC45
MywyNS41TDE0LjkzLDI1LjV6IiBvcGFjaXR5PSIuMDciLz48cGF0aCBmaWxsPSIjZmZmIiBkPSJNMTUuNTM0LDI0LjQxN1YyMmg1LjcxNmMwLjQxNCwwLDAuNzUtMC4zMjYsMC43NS0wLjcyOHYtMi41NDRDMjIsMTguMzI2LDIx
LjY2NCwxOCwyMS4yNSwxOGgtNS43MTYgdi0yLjQxN2MwLTAuNTE5LTAuNjQ2LTAuNzc4LTEuMDI0LTAuNDEybC00LjE4LDQuMDU2Yy0wLjQzOSwwLjQyNi0wLjQzOSwxLjExOCwwLDEuNTQ0bDQuMTgsNC4wNTYgQzE0Ljg4OCwy
NS4xOTUsMTUuNTM0LDI0LjkzNSwxNS41MzQsMjQuNDE3eiIvPjxwYXRoIGQ9Ik0xNC45MywzOWMtMC40MTksMC0wLjgxNS0wLjE2Mi0xLjExNy0wLjQ1NUw5LjYzMiwzNC40OSBDOS4yMjUsMzQuMDkzLDksMzMuNTY0LDksMzNz
MC4yMjUtMS4wOTMsMC42MzItMS40ODlsNC4xODEtNC4wNTdDMTQuMTE1LDI3LjE2MSwxNC41MTIsMjcsMTQuOTMsMjdjMC44ODUsMCwxLjYwNCwwLjcxLDEuNjA0LDEuNTgzIFYzMGg0LjcxNmMwLjk2NSwwLDEuNzUsMC43NzUs
MS43NSwxLjcyOHYyLjU0NUMyMywzNS4yMjUsMjIuMjE1LDM2LDIxLjI1LDM2aC00LjcxNnYxLjQxN2MwLDAuNDQ5LTAuMTgzLDAuODYyLTAuNTE1LDEuMTY0IEMxNS43MjEsMzguODUxLDE1LjMzNCwzOSwxNC45MywzOXoiIG9w
YWNpdHk9Ii4wNSIvPjxwYXRoIGQ9Ik0xNC45MywzOC41Yy0wLjI4NywwLTAuNTYxLTAuMTExLTAuNzY5LTAuMzEzTDkuOTgsMzQuMTMxIEM5LjY3MSwzMy44Myw5LjUsMzMuNDI4LDkuNSwzM3MwLjE3MS0wLjgzLDAuNDgtMS4x
M2w0LjE4MS00LjA1N2MwLjIwOC0wLjIwMiwwLjQ4MS0wLjMxMywwLjc2OS0wLjMxMyBjMC42MDksMCwxLjEwNCwwLjQ4NiwxLjEwNCwxLjA4M1YzMC41aDUuMjE2YzAuNjg5LDAsMS4yNSwwLjU1MSwxLjI1LDEuMjI4djIuNTQ1
YzAsMC42NzctMC41NjEsMS4yMjgtMS4yNSwxLjIyOGgtNS4yMTZ2MS45MTcgYzAsMC4zMDctMC4xMjUsMC41ODktMC4zNTEsMC43OTRDMTUuNDc4LDM4LjM5NywxNS4yMSwzOC41LDE0LjkzLDM4LjVMMTQuOTMsMzguNXoiIG9w
YWNpdHk9Ii4wNyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xNS41MzQsMzcuNDE3VjM1aDUuNzE2YzAuNDE0LDAsMC43NS0wLjMyNiwwLjc1LTAuNzI4di0yLjU0NEMyMiwzMS4zMjYsMjEuNjY0LDMxLDIxLjI1LDMxaC01Ljcx
NiB2LTIuNDE3YzAtMC41MTktMC42NDYtMC43NzgtMS4wMjQtMC40MTJsLTQuMTgsNC4wNTZjLTAuNDM5LDAuNDI2LTAuNDM5LDEuMTE4LDAsMS41NDRsNC4xOCw0LjA1NiBDMTQuODg4LDM4LjE5NSwxNS41MzQsMzcuOTM1LDE1
LjUzNCwzNy40MTd6Ii8+PHBhdGggZD0iTTMzLjA3LDM0Yy0wLjg4NSwwLTEuNjA0LTAuNzEtMS42MDQtMS41ODNWMzFIMjYuNzUgQzI1Ljc4NSwzMSwyNSwzMC4yMjUsMjUsMjkuMjcydi0yLjU0NUMyNSwyNS43NzUsMjUuNzg1
LDI1LDI2Ljc1LDI1aDQuNzE2di0xLjQxN2MwLTAuODczLDAuNzItMS41ODMsMS42MDQtMS41ODMgYzAuNDE5LDAsMC44MTUsMC4xNjIsMS4xMTcsMC40NTVsNC4xODEsNC4wNTVDMzguNzc1LDI2LjkwNywzOSwyNy40MzYsMzks
MjhzLTAuMjI1LDEuMDkzLTAuNjMyLDEuNDg5bC00LjE4MSw0LjA1NyBDMzMuODg1LDMzLjgzOSwzMy40ODgsMzQsMzMuMDcsMzR6IiBvcGFjaXR5PSIuMDUiLz48cGF0aCBkPSJNMzMuMDcsMzMuNWMtMC42MDksMC0xLjEwNC0w
LjQ4Ni0xLjEwNC0xLjA4M1YzMC41SDI2Ljc1IGMtMC42ODksMC0xLjI1LTAuNTUxLTEuMjUtMS4yMjh2LTIuNTQ1YzAtMC42NzcsMC41NjEtMS4yMjgsMS4yNS0xLjIyOGg1LjIxNnYtMS45MTdjMC0wLjU5OCwwLjQ5NS0xLjA4
MywxLjEwNC0xLjA4MyBjMC4yODcsMCwwLjU2MSwwLjExMSwwLjc2OSwwLjMxM2w0LjE4MSw0LjA1NmMwLjMxLDAuMzAxLDAuNDgsMC43MDMsMC40OCwxLjEzMXMtMC4xNzEsMC44My0wLjQ4LDEuMTNsLTQuMTgxLDQuMDU3IEMz
My42MzEsMzMuMzg5LDMzLjM1NywzMy41LDMzLjA3LDMzLjVMMzMuMDcsMzMuNXoiIG9wYWNpdHk9Ii4wNyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0zMi40NjYsMjMuNTgzVjI2SDI2Ljc1QzI2LjMzNiwyNiwyNiwyNi4zMjYs
MjYsMjYuNzI4djIuNTQ0QzI2LDI5LjY3NCwyNi4zMzYsMzAsMjYuNzUsMzBoNS43MTYgdjIuNDE3YzAsMC41MTksMC42NDYsMC43NzgsMS4wMjQsMC40MTJsNC4xOC00LjA1NmMwLjQzOS0wLjQyNiwwLjQzOS0xLjExOCwwLTEu
NTQ0bC00LjE4LTQuMDU2IEMzMy4xMTIsMjIuODA1LDMyLjQ2NiwyMy4wNjUsMzIuNDY2LDIzLjU4M3oiLz48cGF0aCBkPSJNMzMuMDcsMjFjLTAuODg1LDAtMS42MDQtMC43MS0xLjYwNC0xLjU4M1YxOEgyNi43NSBDMjUuNzg1
LDE4LDI1LDE3LjIyNSwyNSwxNi4yNzJ2LTIuNTQ1QzI1LDEyLjc3NSwyNS43ODUsMTIsMjYuNzUsMTJoNC43MTZ2LTEuNDE3QzMxLjQ2Niw5LjcxLDMyLjE4Niw5LDMzLjA3LDkgYzAuNDE5LDAsMC44MTUsMC4xNjIsMS4xMTcs
MC40NTVsNC4xODEsNC4wNTVDMzguNzc1LDEzLjkwNywzOSwxNC40MzYsMzksMTVzLTAuMjI1LDEuMDkzLTAuNjMyLDEuNDg5bC00LjE4MSw0LjA1NyBDMzMuODg1LDIwLjgzOSwzMy40ODgsMjEsMzMuMDcsMjF6IiBvcGFjaXR5
PSIuMDUiLz48cGF0aCBkPSJNMzMuMDcsMjAuNWMtMC42MDksMC0xLjEwNC0wLjQ4Ni0xLjEwNC0xLjA4M1YxNy41SDI2Ljc1IGMtMC42ODksMC0xLjI1LTAuNTUxLTEuMjUtMS4yMjh2LTIuNTQ1YzAtMC42NzcsMC41NjEtMS4y
MjgsMS4yNS0xLjIyOGg1LjIxNnYtMS45MTdjMC0wLjU5OCwwLjQ5NS0xLjA4MywxLjEwNC0xLjA4MyBjMC4yODcsMCwwLjU2MSwwLjExMSwwLjc2OSwwLjMxM2w0LjE4MSw0LjA1NmMwLjMxLDAuMzAxLDAuNDgsMC43MDMsMC40
OCwxLjEzMXMtMC4xNzEsMC44My0wLjQ4LDEuMTNsLTQuMTgxLDQuMDU3IEMzMy42MzEsMjAuMzg5LDMzLjM1NywyMC41LDMzLjA3LDIwLjVMMzMuMDcsMjAuNXoiIG9wYWNpdHk9Ii4wNyIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9
Ik0zMi40NjYsMTAuNTgzVjEzSDI2Ljc1QzI2LjMzNiwxMywyNiwxMy4zMjYsMjYsMTMuNzI4djIuNTQ0QzI2LDE2LjY3NCwyNi4zMzYsMTcsMjYuNzUsMTdoNS43MTYgdjIuNDE3YzAsMC41MTksMC42NDYsMC43NzgsMS4wMjQs
MC40MTJsNC4xOC00LjA1NmMwLjQzOS0wLjQyNiwwLjQzOS0xLjExOCwwLTEuNTQ0bC00LjE4LTQuMDU2IEMzMy4xMTIsOS44MDUsMzIuNDY2LDEwLjA2NSwzMi40NjYsMTAuNTgzeiIvPjwvc3ZnPgo=</data><downloads_count>0</downloads_count></logo>
</NetworkDeviceType>
<NetworkDeviceType alias="NetworkDeviceType" id="12">
<name>Wireless Access Point</name>
<logo><mimetype>image/png</mimetype><filename>icons8-wi-fi-router-96.png</filename><data>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</data><downloads_count>0</downloads_count></logo>
</NetworkDeviceType>
</Set>

View File

@@ -1283,39 +1283,7 @@
</items>
</summary>
</presentation>
<methods>
<method id="GetIcon">
<comment> /**
* Overrides the GetIcon method to return the logo of the associated NetworkDeviceType if any, otherwise the default icon of the class will be returned
*
*/</comment>
<static>false</static>
<access>public</access>
<type>Custom</type>
<code><![CDATA[ public function GetIcon($bImgTag = true)
{
$sIconClass = 'NetworkDeviceType'; // the class storing the image which will be used as icon for the current object
$sExtKeyCode = 'networkdevicetype_id'; // the external key attribute code pointing to the class storing the image attribute
$sIconAttCode = 'logo'; // the attribute code of the image in the IconClass
$iObj = $this->Get($sExtKeyCode);
if ($iObj > 0) {
$oObj = MetaModel::GetObject($sIconClass, $iObj, true, true);
$oImage = $oObj->Get($sIconAttCode);
$sIconUrl = $oImage->IsEmpty() ? '' : $oImage->GetDisplayURL($sIconClass, $iObj, $sIconAttCode);
if (strlen($sIconUrl) > 0) {
if ($bImgTag) {
return "<img src=\"$sIconUrl\" alt=''/>";
} else {
return $sIconUrl;
}
}
}
// Return the default image
return parent::GetIcon($bImgTag);
}]]></code>
</method>
</methods>
<methods/>
<relations>
<relation id="impacts">
<neighbours>
@@ -5345,13 +5313,6 @@
</reconciliation>
</properties>
<fields>
<field id="logo" xsi:type="AttributeImage">
<display_max_width>96</display_max_width>
<display_max_height>96</display_max_height>
<storage_max_width>128</storage_max_width>
<storage_max_height>128</storage_max_height>
<is_null_allowed>true</is_null_allowed>
</field>
<field id="networkdevicesdevices_list" xsi:type="AttributeLinkedSet">
<linked_class>NetworkDevice</linked_class>
<ext_key_to_me>networkdevicetype_id</ext_key_to_me>
@@ -5368,11 +5329,8 @@
<item id="name">
<rank>10</rank>
</item>
<item id="logo">
<rank>20</rank>
</item>
<item id="networkdevicesdevices_list">
<rank>30</rank>
<rank>20</rank>
</item>
</items>
</details>
@@ -5385,7 +5343,7 @@
</search>
<list>
<items>
<item id="logo">
<item id="name">
<rank>10</rank>
</item>
</items>

View File

@@ -1160,8 +1160,6 @@ Dict::Add('CS CZ', 'Czech', 'Čeština', [
Dict::Add('CS CZ', 'Czech', 'Čeština', [
'Class:NetworkDeviceType' => 'Typ síťového zařízení',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Síťová zařízení',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Všechna síťová zařízení odpovídající tomuto typu',
]);

View File

@@ -1159,8 +1159,6 @@ Dict::Add('DA DA', 'Danish', 'Dansk', [
Dict::Add('DA DA', 'Danish', 'Dansk', [
'Class:NetworkDeviceType' => 'Netværksenhed type',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netværks enheder',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~',
]);

View File

@@ -1159,8 +1159,6 @@ Dict::Add('DE DE', 'German', 'Deutsch', [
Dict::Add('DE DE', 'German', 'Deutsch', [
'Class:NetworkDeviceType' => 'Netzwerkgerätetyp',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netzwerkgeräte',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Alle Netzwerkgeräte, die diesem Typ entsprechen',
]);

View File

@@ -1167,8 +1167,6 @@ Dict::Add('EN US', 'English', 'English', [
Dict::Add('EN US', 'English', 'English', [
'Class:NetworkDeviceType' => 'Network Device Type',
'Class:NetworkDeviceType+' => 'Typology. The possible values for the "Type" of a Network Device (e.g. Router, Switch, Firewall, etc.).',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Network devices',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type',
]);

View File

@@ -1158,8 +1158,6 @@ Dict::Add('EN GB', 'British English', 'British English', [
Dict::Add('EN GB', 'British English', 'British English', [
'Class:NetworkDeviceType' => 'Network Device Type',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Network devices',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type',
]);

View File

@@ -1156,8 +1156,6 @@ Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
Dict::Add('ES CR', 'Spanish', 'Español, Castellano', [
'Class:NetworkDeviceType' => 'Tipo Dispositivo de Red',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivos de Red',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Dispositivos de Red',
]);

View File

@@ -1312,8 +1312,6 @@ Dict::Add('FR FR', 'French', 'Français', [
Dict::Add('FR FR', 'French', 'Français', [
'Class:NetworkDeviceType' => 'Type d\'équipement réseau',
'Class:NetworkDeviceType+' => 'Typologie. Valeurs possibles pour le type dun équipement réseau (ex : Routeur, Switch, Firewall, etc.).',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo',
'Class:NetworkDeviceType/Attribute:logo+' => 'Utilisé comme icône pour les équipement réseau de ce Type lors de leur affichage (détails, aperçu et graphe d\'analyse d\'impact)',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Equipements réseaux',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Tous les équipements réseaux correspondant à ce type',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list/UI:Links:Create:Button+' => 'Créer un %4$s',

View File

@@ -1158,8 +1158,6 @@ Dict::Add('HU HU', 'Hungarian', 'Magyar', [
Dict::Add('HU HU', 'Hungarian', 'Magyar', [
'Class:NetworkDeviceType' => 'Hálózati eszköz típus',
'Class:NetworkDeviceType+' => '~~',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Hálózati eszközök',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Ilyen típusú hálózati eszközök',
]);

View File

@@ -1179,8 +1179,6 @@ Dict::Add('IT IT', 'Italian', 'Italiano', [
Dict::Add('IT IT', 'Italian', 'Italiano', [
'Class:NetworkDeviceType' => 'Tipo di Dispositivo di Rete',
'Class:NetworkDeviceType+' => '~~',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivi di Rete',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Tutti i dispositivi di rete corrispondenti a questo tipo',
]);

View File

@@ -1158,8 +1158,6 @@ Dict::Add('JA JP', 'Japanese', '日本語', [
Dict::Add('JA JP', 'Japanese', '日本語', [
'Class:NetworkDeviceType' => 'ネットワークデバイスタイプ',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'ネットワークデバイス',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~',
]);

View File

@@ -1160,8 +1160,6 @@ Dict::Add('NL NL', 'Dutch', 'Nederlands', [
Dict::Add('NL NL', 'Dutch', 'Nederlands', [
'Class:NetworkDeviceType' => 'Soort netwerkapparaat',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Netwerkapparaten',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Alle netwerkapparaten van deze soort',
]);

View File

@@ -1158,8 +1158,6 @@ Dict::Add('PL PL', 'Polish', 'Polski', [
Dict::Add('PL PL', 'Polish', 'Polski', [
'Class:NetworkDeviceType' => 'Typ urządzenia sieciowego',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Urządzenia sieciowe',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Wszystkie urządzenia sieciowe odpowiadające temu typowi',
]);

View File

@@ -1158,8 +1158,6 @@ Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
Dict::Add('PT BR', 'Brazilian', 'Brazilian', [
'Class:NetworkDeviceType' => 'Tipo de dispositivo de rede',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Dispositivos de rede',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Todos os Dispositivos de rede correspondentes a este Tipo',
]);

View File

@@ -1159,8 +1159,6 @@ Dict::Add('RU RU', 'Russian', 'Русский', [
Dict::Add('RU RU', 'Russian', 'Русский', [
'Class:NetworkDeviceType' => 'Тип сетевого устройства',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Устройства',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Все сетевые устройства этого типа',
]);

View File

@@ -1158,8 +1158,6 @@ Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
Dict::Add('SK SK', 'Slovak', 'Slovenčina', [
'Class:NetworkDeviceType' => 'Typ sieťového zariadenia',
'Class:NetworkDeviceType+' => '~~',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Sieťové zariadenia',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'All the network devices corresponding to this type~~',
]);

View File

@@ -1159,8 +1159,6 @@ Dict::Add('TR TR', 'Turkish', 'Türkçe', [
Dict::Add('TR TR', 'Turkish', 'Türkçe', [
'Class:NetworkDeviceType' => 'Ağ Cihazı Tipi',
'Class:NetworkDeviceType+' => '~~',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => 'Ağ Aygıtları',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => 'Bu türde karşılık gelen tüm ağ aygıtları',
]);

View File

@@ -1175,8 +1175,6 @@ Dict::Add('ZH CN', 'Chinese', '简体中文', [
Dict::Add('ZH CN', 'Chinese', '简体中文', [
'Class:NetworkDeviceType' => '网络设备类型',
'Class:NetworkDeviceType+' => '',
'Class:NetworkDeviceType/Attribute:logo' => 'Logo~~',
'Class:NetworkDeviceType/Attribute:logo+' => 'Used as icon for all Network Device of this type, when displayed in console (details, summary card and impact analysis graphs)~~',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list' => '网络设备',
'Class:NetworkDeviceType/Attribute:networkdevicesdevices_list+' => '此类型的所有网络设备',
]);

View File

@@ -26,7 +26,6 @@ SetupWebPage::AddModule(
],
'data.struct' => [
'data/en_us.data.itop-brand.xml',
'data/en_us.data.itop-networkdevicetype.xml',
'data/en_us.data.itop-osfamily.xml',
'data/en_us.data.itop-osversion.xml',
],

View File

@@ -279,11 +279,24 @@ try {
$oRuntimeEnv = new RunTimeEnvironment('production', true);
try {
SetupLog::Info('Move to production starts...');
$sAuthent = utils::ReadParam('authent', '', false, 'raw_data');
if (!file_exists(utils::GetDataPath().'hub/compile_authent') || $sAuthent !== file_get_contents(utils::GetDataPath().'hub/compile_authent')) {
throw new SecurityException(Dict::S('iTopHub:FailAuthent'));
}
} catch (Exception $e) {
if (file_exists(APPROOT.'data/hub/compile_authent')) {
unlink(APPROOT.'data/hub/compile_authent');
}
// Note: at this point, the dictionnary is not necessarily loaded
SetupLog::Error(get_class($e).': '.Dict::S('iTopHub:ConfigurationSafelyReverted')."\n".$e->getMessage());
SetupLog::Error('Debug trace: '.$e->getTraceAsString());
ReportError($e->getMessage(), $e->getCode());
break;
}
try {
SetupLog::Info('Move to production starts...');
unlink(utils::GetDataPath().'hub/compile_authent');
// Load the "production" config file to clone & update it
$oConfig = new Config(APPCONF.'production/'.ITOP_CONFIG_FILE);

View File

@@ -1041,6 +1041,29 @@
</action>
</actions>
</transition>
<transition id="ev_autoresolve">
<target>resolved</target>
<actions>
<action>
<verb>SetCurrentDate</verb>
<params>
<param xsi:type="attcode">resolution_date</param>
</params>
</action>
<action>
<verb>SetElapsedTime</verb>
<params>
<param xsi:type="attcode">time_spent</param>
<param xsi:type="attcode">start_date</param>
<param xsi:type="string">DefaultWorkingTimeComputer</param>
</params>
</action>
<action>
<verb>ResolveChildTickets</verb>
<params/>
</action>
</actions>
</transition>
</transitions>
</state>
<state id="rejected">

View File

@@ -0,0 +1,12 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Application\Cron;
class CronProcessesManagementException extends \Exception
{
}

View File

@@ -0,0 +1,12 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Application\Cron;
class CronProcessesNotStoppedException extends CronProcessesManagementException
{
}

View File

@@ -0,0 +1,63 @@
<?php
/*
* @copyright Copyright (C) 2010-2026 Combodo SAS
* @license http://opensource.org/licenses/AGPL-3.0
*/
namespace Combodo\iTop\Application\Cron;
/**
* Interface for managing cron processes, providing methods to retrieve and set
* the number of allowed processes, as well as enabling or disabling cron functionality.
*
* @api
* @since 3.x.0
*/
interface iCronProcessesManagement
{
/**
* @return array
*/
public function GetRunningProcesses(): array;
/**
* Get the current running cron processes count
*
* @return int Number of cron processes currently running
*/
public function GetRunningProcessesCount(): int;
/**
* Get the maximum number of processes allowed in parallel
*
* @return int The maximum number of processes allowed in parallel
*/
public function GetMaxRunningProcesses(): int;
/**
* Set the maximum number of processes allowed in parallel
*
* @param int $iMaxRunningProcesses The max number of parallel cron allowed
*/
public function SetMaxRunningProcesses(int $iMaxRunningProcesses): void;
/**
* Stop the cron on all servers.
* The method only returns when all the processes are stopped even if
* multiple calls are done to this method on multiple servers.
*
* @param int $iWaitLimitInSec Max time in seconds to wait for termination
*
* @return void
* @throws \Combodo\iTop\Application\Cron\CronProcessesNotStoppedException when "wait time limit" is exceeded
*/
public function StopAndWaitCronTermination(int $iWaitLimitInSec): void;
/**
* Enables the cron processes to run.
*
* @return void
*/
public function StartCron(): void;
}

View File

@@ -0,0 +1,193 @@
<?php
namespace Combodo\iTop\Test\UnitTest\Core;
use CMDBSource;
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
use DBObjectSearch;
use DBObjectSet;
use DBSearch;
use lnkFunctionalCIToTicket;
use MetaModel;
use ormLinkSet;
use UserRequest;
use UserRights;
class DBSearchFilterJoinTest extends ItopDataTestCase
{
private const RESTRICTED_PROFILE = 'Configuration Manager';
private $aData = [];
protected function setUp(): void
{
parent::setUp();
$this->RequireOnceItopFile('application/startup.inc.php');
$this->aData = $this->CreateDBSearchFilterTestData();
DBSearch::EnableQueryCache(false, false);
$this->LoginRestrictedUser($this->aData['allowed_org_id'], self::RESTRICTED_PROFILE);
}
protected function tearDown(): void
{
parent::tearDown();
}
/**
* @dataProvider JoinedAndNestedOqlProvider
*/
public function testDBSearchFilterAppliedToJoinsWhenEnabled(string $sOql, int $iExpectedCount): void
{
$this->EnableJoinFilterConfig(true);
$oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]);
$oSet = new \DBObjectSet($oSearch);
CMDBSource::TestQuery($oSearch->MakeSelectQuery());
$this->assertEquals($iExpectedCount, $oSet->Count());
}
/**
* @dataProvider JoinedAndNestedOqlProvider
*/
public function testDBSearchFilterAppliedToJoinsWhenDisabled(string $sOql, int $iExpectedCount, int $iExpectedDisabledCount): void
{
$this->EnableJoinFilterConfig(false);
$oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]);
$oSet = new \DBObjectSet($oSearch);
CMDBSource::TestQuery($oSearch->MakeSelectQuery());
$this->assertEquals($iExpectedDisabledCount, $oSet->Count());
}
/**
* @dataProvider JoinedAndNestedOqlProvider
*/
public function testAllowAllDataBypassesDBSearchFilterWhenEnabled(string $sOql, int $iExpectedCount, int $iExpectedDisabledCount): void
{
$this->EnableJoinFilterConfig(true);
$oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]);
$oSearch->AllowAllData();
$oSet = new \DBObjectSet($oSearch);
CMDBSource::TestQuery($oSearch->MakeSelectQuery());
$this->assertEquals($iExpectedDisabledCount, $oSet->Count());
}
/**
* @dataProvider JoinedAndNestedOqlProvider
*/
public function testAllowAllDataBypassesDBSearchFilterWhenDisabled(string $sOql, int $iExpectedCount, int $iExpectedDisabledCount): void
{
$this->EnableJoinFilterConfig(false);
$oSearch = DBObjectSearch::FromOQL($sOql, ['denied_org' => $this->aData['denied_org_name'], 'allowed_org' => $this->aData['allowed_org_name']]);
$oSearch->AllowAllData();
$oSet = new \DBObjectSet($oSearch);
CMDBSource::TestQuery($oSearch->MakeSelectQuery());
$this->assertEquals($iExpectedDisabledCount, $oSet->Count());
}
public function JoinedAndNestedOqlProvider(): array
{
return [
'join-filter-on-org' => [
'oql' => "SELECT OSF FROM OSFamily AS OSF JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF.id JOIN Organization AS O ON VM.org_id = O.id WHERE O.name = :denied_org",
'expected_filtered_count' => 0,
'expected_unfiltered_count' => 1,
],
'nested-in-select' => [
'oql' => "SELECT OSF FROM OSFamily AS OSF WHERE OSF.id IN (SELECT OSF1 FROM OSFamily AS OSF1 JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF1.id JOIN Organization AS O ON VM.org_id = O.id WHERE O.name = :denied_org)",
'expected_filtered_count' => 0,
'expected_unfiltered_count' => 1,
],
'userrequest-join-person-org' => [
'oql' => "SELECT OSF FROM OSFamily AS OSF JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF.id JOIN lnkFunctionalCIToTicket AS L ON L.functionalci_id = VM.id JOIN UserRequest AS UR ON L.ticket_id = UR.id JOIN Person AS P ON UR.caller_id = P.id JOIN Organization AS O ON P.org_id = O.id WHERE O.name = :denied_org",
'expected_filtered_count' => 0,
'expected_unfiltered_count' => 1,
],
'union-join-filter-on-org' => [
'oql' => "SELECT OSF FROM OSFamily AS OSF JOIN VirtualMachine AS VM ON VM.osfamily_id = OSF.id JOIN Organization AS O ON VM.org_id = O.id WHERE O.name = :denied_org UNION SELECT OSF2 FROM OSFamily AS OSF2 JOIN VirtualMachine AS VM2 ON VM2.osfamily_id = OSF2.id JOIN Organization AS O2 ON VM2.org_id = O2.id WHERE O2.name = :allowed_org",
'expected_filtered_count' => 1,
'expected_unfiltered_count' => 2,
],
];
}
private function EnableJoinFilterConfig(bool $bEnabled): void
{
$oConfig = MetaModel::GetConfig();
$oConfig->Set('security.disable_joined_classes_filter', !$bEnabled);
}
private function CreateDBSearchFilterTestData(): array
{
$sSuffix = 'DBSearchFilterJoinTest';
$sAllowedOrgName = 'DBSearchFilterAllowedOrg-'.$sSuffix;
$iAllowedOrgId = $this->GivenObjectInDB('Organization', [
'name' => $sAllowedOrgName,
]);
$this->debug("Org allowed id: $iAllowedOrgId");
$sDeniedOrgName = 'DBSearchFilterDeniedOrg-'.$sSuffix;
$iDeniedOrgId = $this->GivenObjectInDB('Organization', [
'name' => $sDeniedOrgName,
]);
$this->debug("Org denied id: $iDeniedOrgId");
$iDeniedOsFamilyId = $this->GivenObjectInDB('OSFamily', [
'name' => 'DBSearchFilterOsFamilyDenied-'.$sSuffix,
]);
$iAllowedOsFamilyId = $this->GivenObjectInDB('OSFamily', [
'name' => 'DBSearchFilterOsFamilyAllowed-'.$sSuffix,
]);
$iDeniedVMId = $this->GivenObjectInDB('VirtualMachine', [
'name' => 'DBSearchFilterVmDenied-'.$sSuffix,
'org_id' => $iDeniedOrgId,
'osfamily_id' => $iDeniedOsFamilyId,
'virtualhost_id' => 1,
]);
$iVirtualHostId = $this->GivenObjectInDB('Hypervisor', [
'name' => 'DBSearchFilterVHost-'.$sSuffix,
'org_id' => $iAllowedOrgId,
]);
$this->GivenObjectInDB('VirtualMachine', [
'name' => 'DBSearchFilterVmAllowed-'.$sSuffix,
'org_id' => $iAllowedOrgId,
'osfamily_id' => $iAllowedOsFamilyId,
'virtualhost_id' => $iVirtualHostId,
]);
$oDeniedPerson = $this->CreatePerson('Denied-'.$sSuffix, $iDeniedOrgId);
$oUserRequest = $this->CreateUserRequest('Denied'.$sSuffix, [
'caller_id' => $oDeniedPerson->GetKey(),
'org_id' => $iDeniedOrgId,
]);
// Add Virtual Machine to UserRequest lnk
$oLinkSet = new ormLinkSet(UserRequest::class, 'functionalcis_list', DBObjectSet::FromScratch(lnkFunctionalCIToTicket::class));
$oLink = MetaModel::NewObject(lnkFunctionalCIToTicket::class, ['functionalci_id' => $iDeniedVMId]);
$oLinkSet->AddItem($oLink);
$oUserRequest->Set('functionalcis_list', $oLinkSet);
$oUserRequest->DBUpdate();
return [
'allowed_org_id' => $iAllowedOrgId,
'allowed_org_name' => $sAllowedOrgName,
'denied_org_name' => $sDeniedOrgName,
];
}
private function LoginRestrictedUser(int $iAllowedOrgId, string $sProfileName): void
{
$sLogin = $this->GivenUserRestrictedToAnOrganizationInDB($iAllowedOrgId, self::$aURP_Profiles[$sProfileName]);
UserRights::Login($sLogin);
}
}

View File

@@ -7,14 +7,36 @@
namespace Combodo\iTop\Test\UnitTest\Core;
use Combodo\iTop\Application\WebPage\CaptureWebPage;
use Combodo\iTop\Test\UnitTest\ItopDataTestCase;
use ormDocument;
use UserRights;
/**
* Tests of the ormDocument class
*/
class ormDocumentTest extends ItopDataTestCase
{
private const RESTRICTED_PROFILE = 'Configuration Manager';
private int $iUserOrg;
private int $iOrgDifferentFromUser;
protected function setUp(): void
{
parent::setUp();
$this->iUserOrg = $this->GivenObjectInDB('Organization', [
'name' => 'UserOrg',
]);
$this->iOrgDifferentFromUser = $this->GivenObjectInDB('Organization', [
'name' => 'OrgDifferentFromUser',
]);
$this->LoginRestrictedUser($this->iUserOrg, self::RESTRICTED_PROFILE);
$this->ResetMetaModelQueyCacheGetObject();
}
/**
* @inheritDoc
*/
@@ -248,4 +270,107 @@ class ormDocumentTest extends ItopDataTestCase
$this->assertGreaterThanOrEqual($iMaxHeight, $aActualDimensions['height'], 'The new height should not be 0');
}
/**
* Test that DownloadDocument enforces rights for documents
*
* @dataProvider DownloadDocumentRightsProvider
*/
public function testDownloadDocumentDifferentOrg(string $sTargetClass, string $sAttCode, string $sData, string $sFileName, ?string $sHostClass)
{
$iDeniedDocumentId = $this->CreateDownloadTargetInOrg($sTargetClass, $sAttCode, $this->iOrgDifferentFromUser, $sData, $sFileName, $sHostClass);
$oPageDenied = new CaptureWebPage();
ormDocument::DownloadDocument($oPageDenied, $sTargetClass, $iDeniedDocumentId, $sAttCode);
$sDeniedHtml = (string) $oPageDenied->GetHtml();
$this->assertStringContainsString(
'the object does not exist or you are not allowed to view it',
$sDeniedHtml,
'Expected error message when rights are missing.'
);
$this->assertStringNotContainsString($sData, $sDeniedHtml, 'Unexpected file data present when rights are missing.');
}
/**
* Test that DownloadDocument allows to retrieve document with the same org (or host object org)
*
* @dataProvider DownloadDocumentRightsProvider
*/
public function testDownloadDocumentSameOrg(string $sTargetClass, string $sAttCode, string $sData, string $sFileName, ?string $sHostClass)
{
$iAllowedDocumentId = $this->CreateDownloadTargetInOrg($sTargetClass, $sAttCode, $this->iUserOrg, $sData, $sFileName, $sHostClass);
$oPageAllowed = new CaptureWebPage();
ormDocument::DownloadDocument($oPageAllowed, $sTargetClass, $iAllowedDocumentId, $sAttCode);
$sAllowedHtml = (string) $oPageAllowed->GetHtml();
$this->assertStringContainsString($sData, $sAllowedHtml, 'Expected file data present when rights are sufficient.');
$this->assertStringNotContainsString('the object does not exist or you are not allowed to view it', $sAllowedHtml, 'Unexpected error message when rights are sufficient.');
}
public function DownloadDocumentRightsProvider(): array
{
return [
'DocumentFile' => [
'class' => 'DocumentFile',
'data_attribute_id' => 'file',
'data' => 'document_data',
'file_name' => 'document.txt',
'host_class' => null],
'Attachment' => [
'class' => 'Attachment',
'data_attribute_id' => 'contents',
'data' => 'attachment_data',
'file_name' => 'attachment.txt',
'host_class' => 'UserRequest'],
];
}
/**
* Helper to avoid duplicating object creation in tests
* Created objects and host objects depending on the Document class
* @param string $sTargetClass
* @param string $sAttCode
* @param int $iOrgId
* @param string $sData
* @param string $sFileName
* @param string|null $sHostClass
* @return int
* @throws \Exception
*/
private function CreateDownloadTargetInOrg(string $sTargetClass, string $sAttCode, int $iOrgId, string $sData, string $sFileName, ?string $sHostClass): int
{
if ($sTargetClass === 'DocumentFile') {
return $this->GivenObjectInDB($sTargetClass, [
'name' => 'UnitTestDocFile_'.uniqid(),
'org_id' => $iOrgId,
$sAttCode => new ormDocument($sData, 'text/plain', $sFileName),
]);
}
if ($sTargetClass === 'Attachment') {
$iHostId = $this->GivenObjectInDB($sHostClass, [
'title' => 'UnitTestUserRequest_'.uniqid(),
'org_id' => $iOrgId,
'description' => 'A user request for testing attachment download rights',
]);
return $this->GivenObjectInDB('Attachment', [
'item_class' => $sHostClass,
'item_id' => $iHostId,
'item_org_id' => $iOrgId,
$sAttCode => new ormDocument($sData, 'text/plain', $sFileName),
]);
}
throw new \Exception("Unsupported target class: $sTargetClass");
}
private function LoginRestrictedUser(int $iAllowedOrgId, string $sProfileName): void
{
if (UserRights::IsLoggedIn()) {
UserRights::Logoff();
}
$sLogin = $this->GivenUserRestrictedToAnOrganizationInDB($iAllowedOrgId, self::$aURP_Profiles[$sProfileName]);
UserRights::Login($sLogin);
}
}