summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSelvasundaram <selvam@gluster.com>2011-07-20 20:57:09 +0530
committerSelvasundaram <selvam@gluster.com>2011-07-20 20:57:09 +0530
commit9ef0e377687ad77bae6018202dcb7772880bcea6 (patch)
tree1ce07d062988e69b67a951cbefda354d4c658312 /src
parent3ee5ef2d7f86d9b0ebd70391375d05330b23da21 (diff)
parent467d023dfbccc7ff10c5fe29fe7992e6c798875a (diff)
Merge branch 'master' of github.com:gluster/console
Diffstat (limited to 'src')
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java20
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java28
-rw-r--r--src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java38
-rw-r--r--src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant2
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/offline-server.pngbin0 -> 823 bytes
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.pngbin0 -> 713 bytes
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/16x16/volume.pngbin697 -> 774 bytes
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.pngbin0 -> 1267 bytes
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg10
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-pause.pngbin0 -> 481 bytes
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-start.pngbin0 -> 1028 bytes
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-stop.pngbin0 -> 571 bytes
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg10
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.svg2590
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg124
-rw-r--r--src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg466
-rw-r--r--src/com.gluster.storage.management.gui/plugin.xml108
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java11
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java34
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java2
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java199
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java38
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java23
-rw-r--r--src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java37
-rw-r--r--src/com.gluster.storage.management.server.scripts/src/DiskUtils.py73
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/get_brick_status.py45
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/get_server_status.py25
-rwxr-xr-xsrc/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py17
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java49
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java7
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java4
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java19
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java3
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java6
-rw-r--r--src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java54
-rw-r--r--src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml15
37 files changed, 3753 insertions, 306 deletions
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
index 64a9a653..45d75bba 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/AbstractClient.java
@@ -207,8 +207,7 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchResource(MultivaluedMap<String, String> queryParams, Class responseClass) {
+ protected <T> T fetchResource(MultivaluedMap<String, String> queryParams, Class<T> responseClass) {
return fetchResource(resource, queryParams, responseClass);
}
@@ -220,10 +219,8 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchResource(Class responseClass) {
- Object response = fetchResource(resource, NO_PARAMS, responseClass);
- return response;
+ protected <T> T fetchResource(Class<T> responseClass) {
+ return fetchResource(resource, NO_PARAMS, responseClass);
}
/**
@@ -236,8 +233,7 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request on the sub-resource
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchSubResource(String subResourceName, Class responseClass) {
+ protected <T> T fetchSubResource(String subResourceName, Class<T> responseClass) {
return fetchResource(resource.path(subResourceName), NO_PARAMS, responseClass);
}
@@ -257,9 +253,8 @@ public abstract class AbstractClient {
* Expected class of the response
* @return Object of responseClass received as a result of the GET request on the sub-resource
*/
- @SuppressWarnings("rawtypes")
- protected Object fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
- Class responseClass) {
+ protected <T> T fetchSubResource(String subResourceName, MultivaluedMap<String, String> queryParams,
+ Class<T> responseClass) {
return fetchResource(resource.path(subResourceName), queryParams, responseClass);
}
@@ -280,8 +275,7 @@ public abstract class AbstractClient {
* the Object to be submitted
* @return Object of given class received as response
*/
- @SuppressWarnings({ "unchecked", "rawtypes" })
- protected Object postObject(Class responseClass, Object requestObject) {
+ protected <T> T postObject(Class<T> responseClass, Object requestObject) {
return resource.type(MediaType.APPLICATION_XML).header(HTTP_HEADER_AUTH, authHeader)
.accept(MediaType.APPLICATION_XML).post(responseClass, requestObject);
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java
index 31809c75..0185084c 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/ClustersClient.java
@@ -71,32 +71,4 @@ public class ClustersClient extends AbstractClient {
public void deleteCluster(String clusterName) {
deleteSubResource(clusterName);
}
-
- public static void main(String args[]) {
- UsersClient usersClient = new UsersClient();
-
- try {
- usersClient.authenticate("gluster", "gluster");
- } catch(Exception e) {
- e.printStackTrace();
- }
-
- ClustersClient client = new ClustersClient();
- client.setSecurityToken(usersClient.getSecurityToken());
- System.out.println(client.getClusterNames());
- try {
- client.createCluster("test1");
- } catch (GlusterRuntimeException e) {
- System.out.println(e.getMessage());
- }
-
- System.out.println(client.getClusterNames());
-
- try {
- client.deleteCluster("test1");
- } catch (GlusterRuntimeException e) {
- System.out.println(e.getMessage());
- }
- System.out.println(client.getClusterNames());
- }
}
diff --git a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
index 0abccda5..8be5beac 100644
--- a/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
+++ b/src/com.gluster.storage.management.client/src/com/gluster/storage/management/client/GlusterServersClient.java
@@ -24,12 +24,17 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR
import java.net.URI;
import java.util.List;
+import javax.ws.rs.core.MultivaluedMap;
+
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.core.model.ServerStats;
+import com.gluster.storage.management.core.model.ServerStatsRow;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.utils.GlusterCoreUtil;
import com.sun.jersey.api.representation.Form;
+import com.sun.jersey.core.util.MultivaluedMapImpl;
public class GlusterServersClient extends AbstractClient {
@@ -64,9 +69,9 @@ public class GlusterServersClient extends AbstractClient {
return server;
}
- public void addServer(Server discoveredServer) {
+ public void addServer(String serverName) {
Form form = new Form();
- form.add(RESTConstants.FORM_PARAM_SERVER_NAME, discoveredServer.getName());
+ form.add(RESTConstants.FORM_PARAM_SERVER_NAME, serverName);
postRequest(form);
}
@@ -79,23 +84,16 @@ public class GlusterServersClient extends AbstractClient {
public void removeServer(String serverName) {
deleteSubResource(serverName);
}
-
- public static void main(String[] args) {
- UsersClient usersClient = new UsersClient();
- try {
- usersClient.authenticate("gluster", "gluster");
- GlusterServersClient glusterServersClient = new GlusterServersClient(usersClient.getSecurityToken(), "cluster1");
- List<GlusterServer> glusterServers = glusterServersClient.getServers();
- for (GlusterServer server : glusterServers) {
- System.out.println(server.getName());
- }
-
- // Add server
- Server srv = new Server();
- srv.setName("server3");
- glusterServersClient.addServer(srv);
- } catch(Exception e) {
- e.printStackTrace();
- }
+
+ public ServerStats getCPUStats(String serverName) {
+ MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
+ queryParams.add(RESTConstants.QUERY_PARAM_TYPE, RESTConstants.STATISTICS_TYPE_CPU);
+ return fetchSubResource(serverName + "/" + RESTConstants.RESOURCE_STATISTICS, queryParams, ServerStats.class);
+ }
+
+ public ServerStats getAggregatedCPUStats() {
+ MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
+ queryParams.add(RESTConstants.QUERY_PARAM_TYPE, RESTConstants.STATISTICS_TYPE_CPU);
+ return fetchSubResource(RESTConstants.RESOURCE_STATISTICS, queryParams, ServerStats.class);
}
}
diff --git a/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant b/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant
index e7baaa03..6b0152f6 100644
--- a/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant
+++ b/src/com.gluster.storage.management.gui.feature.webstart/build/glustermc.ant
@@ -12,7 +12,7 @@
</target>
<target name="sign">
- <signjar alias="gluster" storepass="gluster" keypass="gluster" keystore="build/gluster.keystore">
+ <signjar alias="gluster" storepass="gluster" keypass="gluster" keystore="/var/lib/jenkins/gmc/gluster.keystore">
<fileset dir="${export.dir}/plugins">
<include name="*.jar" />
</fileset>
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/offline-server.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/offline-server.png
new file mode 100644
index 00000000..adc25b98
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/icons/tango/16x16/offline-server.png
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.png
new file mode 100644
index 00000000..d7665cb7
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume-options.png
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png
index 5234eab4..41376404 100644
--- a/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png
+++ b/src/com.gluster.storage.management.gui/icons/tango/16x16/volume.png
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.png b/src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.png
new file mode 100644
index 00000000..4e522b23
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/icons/tango/22x22/system-search.png
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg
index 529f8565..64937917 100644
--- a/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/add-brick.svg
@@ -1870,8 +1870,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="9.2824013"
- inkscape:cy="16.108807"
+ inkscape:cx="24.116083"
+ inkscape:cy="-2.4900366"
inkscape:current-layer="g11558"
showgrid="true"
inkscape:grid-bbox="true"
@@ -1913,7 +1913,7 @@
id="g22509"
transform="matrix(1.0204873,0,0,1.0204873,0.36082365,-0.16713985)">
<g
- transform="matrix(2.1020507,1.4790115e-8,-1.4790115e-8,2.1020507,-27.127897,-26.141782)"
+ transform="matrix(2.1020507,1.4790115e-8,-1.4790115e-8,2.1020507,-27.127897,-22.076424)"
id="g17815">
<path
style="color:#000000;fill:url(#linearGradient22532);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient22534);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
@@ -1946,7 +1946,7 @@
</g>
<g
id="g9244"
- transform="matrix(-0.68651744,0.09667386,0.09667386,0.68651744,11.446606,-4.5967804)">
+ transform="matrix(-0.68651744,0.09667386,0.09667386,0.68651744,11.446606,-0.53142226)">
<path
sodipodi:type="arc"
style="fill:#49a916;fill-opacity:1;stroke:#2f5f03;stroke-width:1.45800674;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
@@ -1997,7 +1997,7 @@
style="fill:#eeeeec;fill-opacity:1;stroke:none" />
</g>
<g
- transform="matrix(-1.0430096,0,0,1.0430096,-150.61257,9.1000985)"
+ transform="matrix(-1.0430096,0,0,1.0430096,-150.61257,7.046974)"
id="g29170">
<g
transform="matrix(1.1778767,0,0,1.1778767,-54.008084,-10.426102)"
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-pause.png b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-pause.png
new file mode 100644
index 00000000..1e9f4d53
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-pause.png
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-start.png b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-start.png
new file mode 100644
index 00000000..66f32d89
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-start.png
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-stop.png b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-stop.png
new file mode 100644
index 00000000..a0947879
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/media-playback-stop.png
Binary files differ
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg
index c9ee7a84..56d7675f 100644
--- a/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/remove-brick.svg
@@ -2478,8 +2478,8 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="8.8372997"
- inkscape:cy="20.553985"
+ inkscape:cx="17.88131"
+ inkscape:cy="7.350446"
inkscape:current-layer="g11558"
showgrid="true"
inkscape:grid-bbox="true"
@@ -2516,10 +2516,10 @@
id="g11558">
<g
id="g40635"
- transform="matrix(1.0168709,0,0,1.0168709,0.00574705,-0.39576072)">
+ transform="matrix(1.0168709,0,0,1.0168709,0.00574705,-2.3356667)">
<g
id="g17815"
- transform="matrix(2.145116,1.5093124e-8,-1.5093124e-8,2.145116,-26.990644,-26.777223)">
+ transform="matrix(2.145116,1.5093124e-8,-1.5093124e-8,2.145116,-26.990644,-20.941585)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="zsszssz"
@@ -2606,7 +2606,7 @@
</g>
</g>
<g
- transform="translate(0,16.717963)"
+ transform="translate(0,22.553601)"
id="g32196">
<g
id="g32184"
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.svg
new file mode 100644
index 00000000..af969359
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/reset-volume-option.svg
@@ -0,0 +1,2590 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="32px"
+ height="32px"
+ id="svg10057"
+ version="1.1"
+ inkscape:version="0.48.1 "
+ sodipodi:docname="reset_volume_option.svg">
+ <defs
+ id="defs10059">
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient9029">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop9031" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop9033" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9814">
+ <stop
+ style="stop-color:#193a04;stop-opacity:1;"
+ offset="0"
+ id="stop9816" />
+ <stop
+ style="stop-color:#193b04;stop-opacity:1;"
+ offset="1"
+ id="stop9818" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9804">
+ <stop
+ style="stop-color:#193a04;stop-opacity:1;"
+ offset="0"
+ id="stop9806" />
+ <stop
+ id="stop9808"
+ offset="0.25000000"
+ style="stop-color:#52be1a;stop-opacity:1" />
+ <stop
+ id="stop9810"
+ offset="0.45037496"
+ style="stop-color:#52be1c;stop-opacity:1" />
+ <stop
+ style="stop-color:#2f6d07;stop-opacity:1"
+ offset="1"
+ id="stop9812" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9798">
+ <stop
+ style="stop-color:#590303;stop-opacity:1;"
+ offset="0"
+ id="stop9800" />
+ <stop
+ style="stop-color:#660404;stop-opacity:1;"
+ offset="1"
+ id="stop9802" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient9782">
+ <stop
+ style="stop-color:#2c568c;stop-opacity:1"
+ offset="0"
+ id="stop9784" />
+ <stop
+ id="stop9786"
+ offset="0.25000000"
+ style="stop-color:#ca0202;stop-opacity:1" />
+ <stop
+ id="stop9788"
+ offset="0.45037496"
+ style="stop-color:#df0000;stop-opacity:1" />
+ <stop
+ style="stop-color:#850505;stop-opacity:1;"
+ offset="1"
+ id="stop9790" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6488">
+ <stop
+ id="stop6490"
+ offset="0"
+ style="stop-color:#38a111;stop-opacity:1;" />
+ <stop
+ id="stop6492"
+ offset="1"
+ style="stop-color:#baff76;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6359">
+ <stop
+ style="stop-color:#50980a;stop-opacity:1"
+ offset="0"
+ id="stop6361" />
+ <stop
+ style="stop-color:#a5f263;stop-opacity:1"
+ offset="1"
+ id="stop6363" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6367">
+ <stop
+ style="stop-color:#a5f263;stop-opacity:1"
+ offset="0"
+ id="stop6369" />
+ <stop
+ style="stop-color:#73d336;stop-opacity:1"
+ offset="1"
+ id="stop6371" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7721">
+ <stop
+ id="stop7723"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1" />
+ <stop
+ id="stop7725"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4134-9">
+ <stop
+ id="stop4136-4"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8" />
+ <stop
+ id="stop4138-2"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4206-4">
+ <stop
+ id="stop4208-5"
+ offset="0.0000000"
+ style="stop-color:#2b558c;stop-opacity:1" />
+ <stop
+ id="stop4210-5"
+ offset="1.0000000"
+ style="stop-color:#2c568c;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4176"
+ inkscape:collect="always">
+ <stop
+ id="stop4178"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7210">
+ <stop
+ id="stop7212"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214"
+ offset="1.0000000"
+ style="stop-color:#bfbebf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient6924"
+ inkscape:collect="always">
+ <stop
+ id="stop6926"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2316-0">
+ <stop
+ id="stop2318-7"
+ offset="0"
+ style="stop-color:#a48600;stop-opacity:1;" />
+ <stop
+ id="stop2320-5"
+ offset="1"
+ style="stop-color:#c4a000;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2326-1">
+ <stop
+ id="stop2328-8"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop2330-5"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6385-1"
+ id="linearGradient10359"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)"
+ x1="-25.812988"
+ y1="6.046875"
+ x2="-20.421724"
+ y2="6.0895195" />
+ <linearGradient
+ id="linearGradient6385-1">
+ <stop
+ id="stop6387-7"
+ offset="0"
+ style="stop-color:#fbfbfb;stop-opacity:1;" />
+ <stop
+ id="stop6389-40"
+ offset="1"
+ style="stop-color:#3566a5;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6529-9"
+ id="linearGradient10361"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0020655,0,0,0.6996656,-43.395568,4.4430794)"
+ x1="-14.515251"
+ y1="6.407763"
+ x2="-14.468635"
+ y2="15.969822" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient6529-9">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop6531-48" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop6533-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6529-9"
+ id="linearGradient10363"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0020655,0,0,0.69986921,-43.395568,4.440002)"
+ x1="-14.515251"
+ y1="6.410296"
+ x2="-14.468635"
+ y2="15.969573" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6529-9"
+ id="linearGradient10365"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0020655,0,0,1,-43.395568,0.92382652)"
+ x1="-14.515251"
+ y1="8.0025444"
+ x2="-14.468635"
+ y2="15.969822" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6385-1"
+ id="linearGradient10367"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)"
+ x1="-25.812988"
+ y1="6.046875"
+ x2="-20.421724"
+ y2="6.0895195" />
+ <linearGradient
+ id="linearGradient4245">
+ <stop
+ id="stop4247"
+ offset="0"
+ style="stop-color:#fbfbfb;stop-opacity:1;" />
+ <stop
+ id="stop4249"
+ offset="1"
+ style="stop-color:#3566a5;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6385-1"
+ id="linearGradient10369"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)"
+ x1="-25.812988"
+ y1="6.046875"
+ x2="-20.421724"
+ y2="6.0895195" />
+ <linearGradient
+ id="linearGradient4252">
+ <stop
+ id="stop4254"
+ offset="0"
+ style="stop-color:#fbfbfb;stop-opacity:1;" />
+ <stop
+ id="stop4256"
+ offset="1"
+ style="stop-color:#3566a5;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6385-1"
+ id="linearGradient10371"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0363443,0,0,1.0363443,122.11453,-0.09055374)"
+ x1="-25.812988"
+ y1="6.046875"
+ x2="-20.421724"
+ y2="6.0895195" />
+ <linearGradient
+ id="linearGradient4259">
+ <stop
+ id="stop4261"
+ offset="0"
+ style="stop-color:#fbfbfb;stop-opacity:1;" />
+ <stop
+ id="stop4263"
+ offset="1"
+ style="stop-color:#3566a5;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5"
+ id="linearGradient6925"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-5">
+ <stop
+ id="stop4136-4-7"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2" />
+ <stop
+ id="stop4138-2-3"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7"
+ id="linearGradient6927"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-7">
+ <stop
+ id="stop4208-5-9"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3"
+ id="linearGradient6929"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-3"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-8"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-1"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7"
+ id="linearGradient6931"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-7">
+ <stop
+ id="stop7212-33"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0"
+ offset="1.0000000"
+ style="stop-color:#bfbebf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6"
+ id="linearGradient6933"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-6"
+ inkscape:collect="always">
+ <stop
+ id="stop6926-8"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-76"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ y2="30"
+ x2="15.785715"
+ y1="19.5"
+ x1="16.07143"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient13350"
+ xlink:href="#linearGradient6924-6"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9"
+ id="linearGradient13420"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.88340971,0,0,0.88340971,41.850823,-2.8039326)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4"
+ id="linearGradient13422"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.88340971,0,0,0.88340971,41.850823,-2.8039326)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176"
+ id="linearGradient13424"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.8488726,0,0,0.8488726,42.68195,-1.9724202)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210"
+ id="linearGradient13426"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924"
+ id="linearGradient13428"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.88340971,0,0,0.88340971,42.072914,-0.86102988)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient6649"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="28.158247"
+ y1="13.121862"
+ x2="21.283247"
+ y2="4.670352" />
+ <linearGradient
+ id="linearGradient6214">
+ <stop
+ style="stop-color:#38a111;stop-opacity:1"
+ offset="0"
+ id="stop6216" />
+ <stop
+ style="stop-color:#baff76;stop-opacity:1"
+ offset="1"
+ id="stop6218" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient6651"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ id="linearGradient6230">
+ <stop
+ style="stop-color:#b4fb71;stop-opacity:1"
+ offset="0"
+ id="stop6232" />
+ <stop
+ style="stop-color:#3fa617;stop-opacity:1"
+ offset="1"
+ id="stop6234" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient6653"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="28.158247"
+ y1="13.121862"
+ x2="21.283247"
+ y2="4.670352" />
+ <linearGradient
+ id="linearGradient15141">
+ <stop
+ style="stop-color:#38a111;stop-opacity:1"
+ offset="0"
+ id="stop15143" />
+ <stop
+ style="stop-color:#baff76;stop-opacity:1"
+ offset="1"
+ id="stop15145" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient6655"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ id="linearGradient15148">
+ <stop
+ style="stop-color:#b4fb71;stop-opacity:1"
+ offset="0"
+ id="stop15150" />
+ <stop
+ style="stop-color:#3fa617;stop-opacity:1"
+ offset="1"
+ id="stop15152" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient6657"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="28.158247"
+ y1="13.121862"
+ x2="21.283247"
+ y2="4.670352" />
+ <linearGradient
+ id="linearGradient15155">
+ <stop
+ style="stop-color:#38a111;stop-opacity:1"
+ offset="0"
+ id="stop15157" />
+ <stop
+ style="stop-color:#baff76;stop-opacity:1"
+ offset="1"
+ id="stop15159" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient6659"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ id="linearGradient15162">
+ <stop
+ style="stop-color:#b4fb71;stop-opacity:1"
+ offset="0"
+ id="stop15164" />
+ <stop
+ style="stop-color:#3fa617;stop-opacity:1"
+ offset="1"
+ id="stop15166" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5-1"
+ id="linearGradient6639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-5-1">
+ <stop
+ id="stop4136-4-7-7"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9-4" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2-0" />
+ <stop
+ id="stop4138-2-3-9"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7-4"
+ id="linearGradient6641"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-7-4">
+ <stop
+ id="stop4208-5-9-8"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3-8"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-2"
+ id="linearGradient6643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-3-2"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-8-4"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-1-5"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7-5"
+ id="linearGradient6645"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-7-5">
+ <stop
+ id="stop7212-33-1"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0-7"
+ offset="1.0000000"
+ style="stop-color:#bfbebf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-1"
+ id="linearGradient6647"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-6-1"
+ inkscape:collect="always">
+ <stop
+ id="stop6926-8-1"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-76-5"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ y2="30"
+ x2="15.785715"
+ y1="19.5"
+ x1="16.07143"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient15211"
+ xlink:href="#linearGradient6924-6-1"
+ inkscape:collect="always" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5-1"
+ id="linearGradient15381"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7-4"
+ id="linearGradient15383"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-2"
+ id="linearGradient15385"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7-5"
+ id="linearGradient15387"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-1"
+ id="linearGradient15389"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient15391"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="28.158247"
+ y1="13.121862"
+ x2="21.283247"
+ y2="4.670352" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient15393"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient15395"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="28.158247"
+ y1="13.121862"
+ x2="21.283247"
+ y2="4.670352" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient15397"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient15399"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="28.158247"
+ y1="13.121862"
+ x2="21.283247"
+ y2="4.670352" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient15401"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient15424"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="30.138733"
+ y1="16.429234"
+ x2="19.538534"
+ y2="5.0010891" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient15426"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient15428"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="29.091856"
+ y1="14.925975"
+ x2="20.082891"
+ y2="5.4053607" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient15430"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient15432"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="29.855806"
+ y1="16.145744"
+ x2="19.302763"
+ y2="5.1428337" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient15434"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath15437">
+ <path
+ clip-path="none"
+ style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.00492704;marker:none;visibility:visible;display:block;overflow:visible"
+ d="m 437.13691,15.199953 c 0,3.922069 -8.57373,7.385024 -19.14997,7.385024 -10.57623,0 -19.14997,-3.462955 -19.14997,-7.385024 0,-2.453311 -2.97639,-9.3396375 2.1246,-10.6154265 3.05388,-0.7637939 13.06472,-4.48610797 17.02537,-4.48610797 4.65593,0 15.23964,3.20196207 18.55878,4.22641197 4.22049,1.302653 0.59119,8.6796495 0.59119,10.8751225 z"
+ id="path15439"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sssssss" />
+ </clipPath>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5"
+ id="linearGradient16236"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7"
+ id="linearGradient16238"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3"
+ id="linearGradient16240"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7"
+ id="linearGradient16242"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6"
+ id="linearGradient16244"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient16246"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="30.138733"
+ y1="16.429234"
+ x2="19.538534"
+ y2="5.0010891" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient16248"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient16250"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="29.091856"
+ y1="14.925975"
+ x2="20.082891"
+ y2="5.4053607" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient16252"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6214"
+ id="linearGradient16254"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(394,0)"
+ x1="29.855806"
+ y1="16.145744"
+ x2="19.302763"
+ y2="5.1428337" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6230"
+ id="linearGradient16256"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1,0,0,3.0700325,-442,-31.270668)"
+ x1="19.120131"
+ y1="20.965828"
+ x2="28.07798"
+ y2="14.630604" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-6"
+ id="linearGradient17825"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-6">
+ <stop
+ id="stop4136-4-9"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-6" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-9" />
+ <stop
+ id="stop4138-2-8"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-8"
+ id="linearGradient17827"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-8">
+ <stop
+ id="stop4208-5-3"
+ offset="0.0000000"
+ style="stop-color:#2b558c;stop-opacity:1" />
+ <stop
+ id="stop4210-5-8"
+ offset="1.0000000"
+ style="stop-color:#2c568c;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-9"
+ id="linearGradient17829"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-9"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-6"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-7"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-8"
+ id="linearGradient17831"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-8">
+ <stop
+ id="stop7212-7"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-5"
+ offset="1.0000000"
+ style="stop-color:#bfbebf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-1"
+ id="linearGradient17833"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-1"
+ inkscape:collect="always">
+ <stop
+ id="stop6926-3"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-9"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5-6"
+ id="linearGradient17805"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-5-6">
+ <stop
+ id="stop4136-4-7-0"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9-9" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2-2" />
+ <stop
+ id="stop4138-2-3-3"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7-7"
+ id="linearGradient17807"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-7-7">
+ <stop
+ id="stop4208-5-9-9"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3-6"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-7"
+ id="linearGradient17809"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-3-7"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-8-8"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-1-8"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7-1"
+ id="linearGradient17811"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-7-1">
+ <stop
+ id="stop7212-33-7"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0-1"
+ offset="1.0000000"
+ style="stop-color:#bfbebf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-5"
+ id="linearGradient17813"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-6-5"
+ inkscape:collect="always">
+ <stop
+ id="stop6926-8-2"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-76-3"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-6-2"
+ id="linearGradient17825-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-6-2">
+ <stop
+ id="stop4136-4-9-1"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-6-9" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-9-7" />
+ <stop
+ id="stop4138-2-8-2"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-8-2"
+ id="linearGradient17827-8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-8-2">
+ <stop
+ id="stop4208-5-3-8"
+ offset="0.0000000"
+ style="stop-color:#2b558c;stop-opacity:1" />
+ <stop
+ id="stop4210-5-8-2"
+ offset="1.0000000"
+ style="stop-color:#2c568c;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-9-0"
+ id="linearGradient17829-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-9-0"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-6-7"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-7-9"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-8-1"
+ id="linearGradient17831-4"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-8-1">
+ <stop
+ id="stop7212-7-8"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-5-6"
+ offset="1"
+ style="stop-color:#fffeff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-1-0"
+ id="linearGradient17833-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-1-0"
+ inkscape:collect="always">
+ <stop
+ id="stop6926-3-7"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-9-8"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5-6-5"
+ id="linearGradient17805-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-5-6-5">
+ <stop
+ id="stop4136-4-7-1"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9-9-8" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2-2-4" />
+ <stop
+ id="stop4138-2-3-1"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7-47"
+ id="linearGradient17807-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-7-47">
+ <stop
+ id="stop4208-5-9-5"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3-7"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-3"
+ id="linearGradient17809-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-3-3"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-8-0"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-1-4"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7-1-9"
+ id="linearGradient17811-4"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-7-1-9">
+ <stop
+ id="stop7212-33-5"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0-0"
+ offset="1.0000000"
+ style="stop-color:#bfbebf;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-4"
+ id="linearGradient17813-7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-6-4"
+ inkscape:collect="always">
+ <stop
+ id="stop6926-8-9"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-76-6"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7903">
+ <stop
+ style="stop-color:#ff0000;stop-opacity:1;"
+ offset="0"
+ id="stop7905" />
+ <stop
+ id="stop7907"
+ offset="0.25000000"
+ style="stop-color:#cc0000;stop-opacity:1" />
+ <stop
+ id="stop7909"
+ offset="0.45037496"
+ style="stop-color:#f30000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#910000;stop-opacity:1;"
+ offset="1"
+ id="stop7911" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7913">
+ <stop
+ style="stop-color:#810000;stop-opacity:1;"
+ offset="0"
+ id="stop7915" />
+ <stop
+ style="stop-color:#810000;stop-opacity:1"
+ offset="1.0000000"
+ id="stop7917" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8687">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop8689" />
+ <stop
+ style="stop-color:#fffeff;stop-opacity:1"
+ offset="1.0000000"
+ id="stop8691" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8738">
+ <stop
+ style="stop-color:#225000;stop-opacity:1;"
+ offset="0"
+ id="stop8740" />
+ <stop
+ id="stop8742"
+ offset="0.25000000"
+ style="stop-color:#52be19;stop-opacity:1" />
+ <stop
+ id="stop8744"
+ offset="0.45037496"
+ style="stop-color:#57bc2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#3c8a12;stop-opacity:1;"
+ offset="1"
+ id="stop8746" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8760">
+ <stop
+ style="stop-color:#265906;stop-opacity:1"
+ offset="0.0000000"
+ id="stop8762" />
+ <stop
+ style="stop-color:#295f06;stop-opacity:1"
+ offset="1.0000000"
+ id="stop8764" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7210-7-1-8">
+ <stop
+ id="stop7212-33-6"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0-6"
+ offset="1"
+ style="stop-color:#fffeff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4134-9-5-6-6">
+ <stop
+ id="stop4136-4-7-1-3"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9-9-5" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2-02" />
+ <stop
+ id="stop4138-2-3-6"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4206-4-7-8">
+ <stop
+ id="stop4208-5-9-9-4"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3-6-1"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient8998">
+ <stop
+ id="stop9000"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop9002"
+ offset="1"
+ style="stop-color:#fffeff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9804"
+ id="linearGradient9732"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-20.05894,6.8263032)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9814"
+ id="linearGradient9734"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-20.05894,6.8263032)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-9-0"
+ id="linearGradient9736"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.614349,7.2711048)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-8-1"
+ id="linearGradient9738"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-1-0"
+ id="linearGradient9740"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.940138,7.8656218)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9782"
+ id="linearGradient9752"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9798"
+ id="linearGradient9754"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-9-0"
+ id="linearGradient9756"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-8-1"
+ id="linearGradient9758"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-1-0"
+ id="linearGradient9760"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-6-2"
+ id="linearGradient9762"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-8-2"
+ id="linearGradient9764"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-9-0"
+ id="linearGradient9766"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-8-1"
+ id="linearGradient9768"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-1-0"
+ id="linearGradient9770"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-6-2"
+ id="linearGradient9772"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-8-2"
+ id="linearGradient9774"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-9-0"
+ id="linearGradient9776"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-8-1"
+ id="linearGradient9778"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-1-0"
+ id="linearGradient9780"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-6-2"
+ id="linearGradient10366"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-8-2"
+ id="linearGradient10368"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-9-0"
+ id="linearGradient10370"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-8-1"
+ id="linearGradient10372"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-1-0"
+ id="linearGradient10374"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)"
+ x1="15.972866"
+ y1="16.641634"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5-6-56"
+ id="linearGradient8805-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-5-6-56">
+ <stop
+ id="stop4136-4-7-1-8"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9-9-89" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2-02-1" />
+ <stop
+ id="stop4138-2-3-6-4"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7-8-0"
+ id="linearGradient8807-7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-7-8-0">
+ <stop
+ id="stop4208-5-9-9-45"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3-6-5"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-2-47"
+ id="linearGradient8809-5"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0802618,20.160914,4.6630501)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-3-2-47"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-8-5-5"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-1-8-2"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7-1-8-8"
+ id="linearGradient8811-9"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-7-1-8-8">
+ <stop
+ id="stop7212-33-6-0"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0-6-2"
+ offset="1"
+ style="stop-color:#fffeff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-1-5"
+ id="linearGradient8813-6"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0802618,20.006284,7.5180332)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-6-1-5"
+ inkscape:collect="always">
+ <stop
+ id="stop6926-8-6-2"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-76-7-5"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-1-5"
+ id="linearGradient8803-8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.77837104,0,0,0.77682625,33.356259,-10.318064)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7-1-8-8"
+ id="linearGradient8801-9"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient11600">
+ <stop
+ id="stop11602"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop11604"
+ offset="1"
+ style="stop-color:#fffeff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-2-47"
+ id="linearGradient8799-9"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.77837104,0,0,0.77682625,33.467463,-12.371109)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8738-6"
+ id="linearGradient8795-8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.77837104,0,0,0.7743413,33.467463,-12.272873)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient8738-6">
+ <stop
+ style="stop-color:#225000;stop-opacity:1;"
+ offset="0"
+ id="stop8740-3" />
+ <stop
+ id="stop8742-0"
+ offset="0.25000000"
+ style="stop-color:#52be19;stop-opacity:1" />
+ <stop
+ id="stop8744-0"
+ offset="0.45037496"
+ style="stop-color:#57bc2d;stop-opacity:1" />
+ <stop
+ style="stop-color:#3c8a12;stop-opacity:1;"
+ offset="1"
+ id="stop8746-1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8760-8"
+ id="linearGradient8797-3"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.77837104,0,0,0.7743413,33.467463,-12.272873)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient8760-8">
+ <stop
+ style="stop-color:#265906;stop-opacity:1"
+ offset="0.0000000"
+ id="stop8762-6" />
+ <stop
+ style="stop-color:#295f06;stop-opacity:1"
+ offset="1.0000000"
+ id="stop8764-8" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-1-5"
+ id="linearGradient8793-8"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.78944609,0,0,0.78787933,57.219345,-10.382854)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient8687-5"
+ id="linearGradient8791-2"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient8687-5">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1.0000000;"
+ offset="0.0000000"
+ id="stop8689-9" />
+ <stop
+ style="stop-color:#fffeff;stop-opacity:1"
+ offset="1.0000000"
+ id="stop8691-7" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-2-47"
+ id="linearGradient8789-1"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(0.78944609,0,0,0.78787933,57.332123,-12.46511)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7903-2"
+ id="linearGradient8785-4"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient7903-2">
+ <stop
+ style="stop-color:#ff0000;stop-opacity:1;"
+ offset="0"
+ id="stop7905-0" />
+ <stop
+ id="stop7907-9"
+ offset="0.25000000"
+ style="stop-color:#cc0000;stop-opacity:1" />
+ <stop
+ id="stop7909-8"
+ offset="0.45037496"
+ style="stop-color:#f30000;stop-opacity:1;" />
+ <stop
+ style="stop-color:#910000;stop-opacity:1;"
+ offset="1"
+ id="stop7911-1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7913-6"
+ id="linearGradient8787-7"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient7913-6">
+ <stop
+ style="stop-color:#810000;stop-opacity:1;"
+ offset="0"
+ id="stop7915-5" />
+ <stop
+ style="stop-color:#810000;stop-opacity:1"
+ offset="1.0000000"
+ id="stop7917-6" />
+ </linearGradient>
+ <linearGradient
+ y2="31.09375"
+ x2="37.077564"
+ y1="31.09375"
+ x1="9.9747334"
+ gradientTransform="matrix(0.78944609,0,0,0.78535902,57.332123,-12.365477)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11664"
+ xlink:href="#linearGradient7903-2"
+ inkscape:collect="always" />
+ <linearGradient
+ y2="25.428572"
+ x2="25.207588"
+ y1="21.857143"
+ x1="25.064732"
+ gradientTransform="matrix(0.78944609,0,0,0.78535902,57.332123,-12.365477)"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient11666"
+ xlink:href="#linearGradient7913-6"
+ inkscape:collect="always" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2616"
+ id="radialGradient2622"
+ cx="26.030092"
+ cy="24.22681"
+ fx="26.030092"
+ fy="24.22681"
+ r="11.629837"
+ gradientTransform="matrix(2.110988,0,0,2.53493,-28.91913,-38.04383)"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient2616">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop2618" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop2620" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4134-9-5-6-8"
+ id="linearGradient14635"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)"
+ x1="9.9747334"
+ y1="31.09375"
+ x2="37.077564"
+ y2="31.09375" />
+ <linearGradient
+ id="linearGradient4134-9-5-6-8">
+ <stop
+ id="stop4136-4-7-1-4"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9-9-87" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2-02-6" />
+ <stop
+ id="stop4138-2-3-6-5"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4206-4-7-8-2"
+ id="linearGradient14637"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0768062,20.160914,4.7996577)"
+ x1="25.064732"
+ y1="21.857143"
+ x2="25.207588"
+ y2="25.428572" />
+ <linearGradient
+ id="linearGradient4206-4-7-8-2">
+ <stop
+ id="stop4208-5-9-9-8"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3-6-18"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4176-3-2-3"
+ id="linearGradient14639"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0802618,20.160914,4.6630501)"
+ x1="17.160095"
+ y1="14.004482"
+ x2="37.969398"
+ y2="56.575912" />
+ <linearGradient
+ id="linearGradient4176-3-2-3"
+ inkscape:collect="always">
+ <stop
+ id="stop4178-8-5"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop4180-1-8-0"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7210-7-1-8-9"
+ id="linearGradient14641"
+ gradientUnits="userSpaceOnUse"
+ x1="24"
+ y1="16.525082"
+ x2="24"
+ y2="13.284962" />
+ <linearGradient
+ id="linearGradient7210-7-1-8-9">
+ <stop
+ id="stop7212-33-6-9"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0-6-1"
+ offset="1"
+ style="stop-color:#fffeff;stop-opacity:1;" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6924-6-1-1"
+ id="linearGradient14643"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.08241,0,0,1.0802618,20.006284,7.5180332)"
+ x1="16.07143"
+ y1="19.5"
+ x2="15.785715"
+ y2="30" />
+ <linearGradient
+ id="linearGradient6924-6-1-1">
+ <stop
+ id="stop6926-8-6"
+ offset="0"
+ style="stop-color:#ffffff;stop-opacity:1;" />
+ <stop
+ id="stop6928-76-7"
+ offset="1"
+ style="stop-color:#ffffff;stop-opacity:0;" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath15195">
+ <g
+ transform="matrix(0.99984537,0,0,1.0018336,465.23582,0.77363774)"
+ id="g15197">
+ <path
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="zsszssz"
+ id="path15199"
+ d="m 12.130891,15.147861 c -7.8408972,0 -14.3101716,3.619546 -14.3101716,6.957128 0,0.239494 0.9420581,17.266498 0.937645,17.515883 -0.044201,2.497774 7.2722068,5.378759 13.2787626,5.378759 6.006556,0 15.689217,-1.978656 15.689217,-5.316249 0,-0.197554 -0.09376,-15.472174 -0.09376,-17.547138 0,-3.337592 -7.660785,-6.988383 -15.501693,-6.988383 z"
+ style="color:#000000;fill:url(#linearGradient15201);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.98276949;marker:none;visibility:visible;display:block;overflow:visible" />
+ </g>
+ </clipPath>
+ <linearGradient
+ id="linearGradient15101">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1"
+ offset="0"
+ id="stop15103" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0"
+ offset="1"
+ id="stop15105" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient2616-5">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop2618-8" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop2620-6" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient15101"
+ id="linearGradient16193"
+ gradientUnits="userSpaceOnUse"
+ x1="474.67822"
+ y1="34.551914"
+ x2="478.07663"
+ y2="47.935841" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient2616-5"
+ id="radialGradient16195"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.0146001,1.6866793,-1.6214284,0.97923212,487.66453,-26.601732)"
+ cx="23.424841"
+ cy="22.232161"
+ fx="23.424841"
+ fy="22.232161"
+ r="11.629837" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7563"
+ id="linearGradient7561"
+ gradientUnits="userSpaceOnUse"
+ x1="487.55292"
+ y1="45.00568"
+ x2="490.83395"
+ y2="42.079308" />
+ <linearGradient
+ id="linearGradient7563"
+ inkscape:collect="always">
+ <stop
+ id="stop7565"
+ offset="0"
+ style="stop-color:#5dd71d;stop-opacity:1" />
+ <stop
+ id="stop7567"
+ offset="1"
+ style="stop-color:#5dd71d;stop-opacity:0" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7551"
+ id="linearGradient7557"
+ x1="496.04224"
+ y1="45.052803"
+ x2="490.11029"
+ y2="25.657177"
+ gradientUnits="userSpaceOnUse" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient7551">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop7553" />
+ <stop
+ style="stop-color:#5dd71d;stop-opacity:1"
+ offset="1"
+ id="stop7555" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7563"
+ id="linearGradient9003"
+ gradientUnits="userSpaceOnUse"
+ x1="487.55292"
+ y1="45.00568"
+ x2="490.83395"
+ y2="42.079308" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7551"
+ id="linearGradient9007"
+ gradientUnits="userSpaceOnUse"
+ x1="496.09894"
+ y1="46.003174"
+ x2="490.11029"
+ y2="25.657177" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7563"
+ id="linearGradient9013"
+ gradientUnits="userSpaceOnUse"
+ x1="487.55292"
+ y1="45.00568"
+ x2="490.83395"
+ y2="42.079308" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient7551"
+ id="linearGradient9015"
+ gradientUnits="userSpaceOnUse"
+ x1="496.09894"
+ y1="46.003174"
+ x2="490.11029"
+ y2="25.657177" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient9029"
+ id="linearGradient9035"
+ x1="120.82211"
+ y1="11.07972"
+ x2="108.18844"
+ y2="-8.2957277"
+ gradientUnits="userSpaceOnUse" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="11.313708"
+ inkscape:cx="20.28441"
+ inkscape:cy="22.412402"
+ inkscape:current-layer="g10328"
+ showgrid="true"
+ inkscape:grid-bbox="true"
+ inkscape:document-units="px"
+ inkscape:window-width="1600"
+ inkscape:window-height="838"
+ inkscape:window-x="-8"
+ inkscape:window-y="-8"
+ inkscape:window-maximized="1" />
+ <metadata
+ id="metadata10062">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ <dc:title></dc:title>
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ id="layer1"
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer">
+ <g
+ id="g10328"
+ transform="translate(0,1.5)">
+ <g
+ transform="matrix(1.5088326,1.0616208e-8,-1.0616208e-8,1.5088326,29.02371,-10.078669)"
+ id="g17815">
+ <path
+ style="color:#000000;fill:url(#linearGradient10366);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient10368);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ d="m -8.5725348,11.035069 c -3.7140732,0 -6.7340192,1.324361 -6.7340192,2.953519 0,0.116904 0,8.443456 0,8.565206 0,1.629164 3.019946,2.953519 6.7340192,2.953519 3.714079,0 6.854278,-1.324355 6.854278,-2.953519 0,-0.09643 0,-8.468774 0,-8.565206 0,-1.629164 -3.140199,-2.953519 -6.854278,-2.953519 z"
+ id="path17817"
+ sodipodi:nodetypes="zsszssz"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="zsszssz"
+ id="path17819"
+ d="m -8.5662708,11.669209 c -3.3274462,0 -6.0330192,1.186496 -6.0330192,2.646065 0,0.104736 0,7.667759 0,7.776834 0,1.459568 2.705573,2.646065 6.0330192,2.646065 3.327452,0 6.140765,-1.186497 6.14076,-2.646065 0,-0.08639 0,-7.690444 0,-7.776834 0,-1.459569 -2.813308,-2.646065 -6.14076,-2.646065 z"
+ style="opacity:0.8982301;color:#000000;fill:none;stroke:url(#linearGradient10370);stroke-width:0.66884732;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient10372);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ id="path17821"
+ sodipodi:cx="24"
+ sodipodi:cy="14.071428"
+ sodipodi:rx="12.857142"
+ sodipodi:ry="5.5"
+ d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z"
+ transform="matrix(0.47968295,0,0,0.44145226,-20.055386,7.7366328)" />
+ <path
+ style="opacity:0.64159324;color:#000000;fill:url(#linearGradient10374);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
+ d="m -13.251088,15.932946 -0.04081,5.569491 2.253444,0.607585 0.04895,-5.535743 c 0,0 0.978881,0 2.5653472,-0.101262 -2.4647692,-0.110142 -5.2848492,-1.169439 -6.2445852,-1.856499 0.669573,0.988686 1.41769,1.316428 1.41769,1.316428 z"
+ id="path17823"
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ <g
+ clip-path="url(#clipPath15195)"
+ id="g15109"
+ transform="matrix(0.66785821,0,0,0.66653279,-303.04091,-4.0460057)">
+ <path
+ inkscape:connector-curvature="0"
+ style="color:#000000;fill:url(#linearGradient16193);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.9999997;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 477.93299,29.5221 c -0.23338,0.01816 -0.46021,0.04751 -0.70016,0.09354 l -0.90622,0.935469 2.91334,2.735983 0.16338,2.455431 -2.21718,2.011115 -2.61392,-0.280621 -2.70729,-2.548971 -0.95688,0.935402 c -0.4412,4.22152 3.96757,7.997687 8.49527,5.472102 l 8.84534,9.073399 0,-7.763837 -4.90111,-5.261636 c 1.58848,-4.421236 -1.38044,-8.171358 -5.41457,-7.857376 z"
+ id="path2140-8"
+ sodipodi:nodetypes="cccccccccccccc" />
+ <path
+ style="color:#000000;fill:url(#radialGradient16195);fill-opacity:1;fill-rule:nonzero;stroke:#4b4b44;stroke-width:2.19875693;stroke-miterlimit:4;stroke-opacity:0;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible"
+ d="m 477.81143,28.717245 c -0.24814,0.0193 -0.49489,0.045 -0.75,0.09394 l -1.84375,1.941353 3.25,2.974653 0.15625,1.75348 -1.59375,1.502983 -2.15625,-0.219185 -2.9375,-2.818093 -1.59375,1.502983 c -1.03157,4.864044 4.09242,9.354677 8.90625,6.669486 l 8.84375,9.111833 0.0625,-0.908052 -8.75,-8.986585 c -4.5277,2.525586 -8.9412,-1.258104 -8.5,-5.479624 l 0.96875,-0.939364 2.6875,2.567595 2.625,0.281809 2.21875,-2.035289 -0.15625,-2.442347 -2.92456,-2.729528 0.89331,-0.933992 c 0.23995,-0.04603 0.48537,-0.07578 0.71875,-0.09394 4.03413,-0.313981 6.99473,3.438112 5.40625,7.859348 l 4.90625,5.260439 0,6.638174 0.5625,-7.045232 -4.6875,-5.166503 c 1.68889,-4.700632 -2.02345,-8.694167 -6.3125,-8.360342 z m 10.4375,20.572076 -0.0937,1.033301 0.0937,0.09394 z"
+ id="path15088"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cccccccccccccccccccccccccccccccc"
+ clip-path="none" />
+ </g>
+ <path
+ sodipodi:nodetypes="ssssccsssscccccss"
+ inkscape:connector-curvature="0"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:none;stroke:#214302;stroke-width:1.22333801;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="M 15.13957,0.65781345 C 13.09813,0.75943387 11.15863,1.8343018 10.02422,3.7134422 8.64484,5.9983774 9.06348,8.6433514 10.38637,10.390557 c 0.67426,0.890533 1.56721,1.536055 2.4445,1.969183 0.8773,0.433127 1.66996,0.683124 2.48977,0.565857 l -0.24897,-1.765474 c -0.0603,0.0086 -0.78073,-0.100319 -1.4486,-0.430052 C 12.9552,10.400339 12.26107,9.896785 11.81233,9.3041111 10.88921,8.0849002 10.5785,6.2954849 11.56335,4.6640822 c 1.31294,-2.1748825 4.07467,-2.8505778 6.24707,-1.5391315 1.67169,1.0091734 2.53642,3.0356731 2.21708,4.839977 l -2.21494,-0.7873652 1.35701,5.8126415 c 0,0 3.07396,-3.1580077 4.38996,-4.2066815 L 21.72615,8.2855682 C 22.22969,5.7277604 21.11936,2.9868581 18.76106,1.5631849 17.63264,0.88197667 16.36443,0.59684117 15.13957,0.65781345 z"
+ id="path5484" />
+ <path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#5dd71d;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1.68900001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="m 15.13957,0.612545 c -2.05429,0.10226 -3.99837,1.190509 -5.13798,3.078263 -1.38836,2.299794 -0.99407,4.961063 0.33951,6.722383 0.68167,0.900322 1.58908,1.535678 2.46714,1.969183 0.6528,0.322291 1.23305,0.49009 1.78811,0.543223 l 0.76956,0.0679 -0.0905,-0.769566 -0.0905,-0.656394 -0.0679,-0.407417 -0.40742,-0.09054 C 14.59277,11.044 14.58127,11.04318 14.59642,11.04695 14.32768,10.98017 13.97939,10.872141 13.64578,10.707436 12.98316,10.380297 12.30713,9.875101 11.85767,9.281476 10.94565,8.076926 10.61279,6.298932 11.58606,4.686715 c 1.29897,-2.151749 4.05388,-2.835794 6.20179,-1.539131 1.6423,0.991433 2.44453,2.917262 2.15026,4.68851 C 19.06284,7.583293 18.55616,7.3395518 17.83312,7.131219 l 1.46257,5.513705 4.37708,-3.861402 C 23.04194,8.5989395 22.40701,8.4301523 21.77149,8.262933 22.26714,5.696059 21.14996,2.968991 18.78376,1.540552 17.65034,0.85632 16.37723,0.55094 15.13964,0.612546 z"
+ id="path7541"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="cssscccccccsssscccccscc" />
+ <path
+ sodipodi:type="inkscape:offset"
+ inkscape:radius="-0.36691996"
+ inkscape:original="M 115.125 0.625 C 113.07071 0.72726 111.13961 1.799746 110 3.6875 C 108.61164 5.987294 109.01017 8.64493 110.34375 10.40625 C 111.02542 11.306572 111.93444 11.941495 112.8125 12.375 C 113.4653 12.697291 114.03869 12.884367 114.59375 12.9375 L 115.375 13 L 115.28125 12.21875 L 115.1875 11.5625 L 115.125 11.15625 L 114.71875 11.0625 C 114.60193 11.03692 114.5786 11.05873 114.59375 11.0625 C 114.32501 10.99572 113.98986 10.883455 113.65625 10.71875 C 112.99363 10.391611 112.29321 9.874875 111.84375 9.28125 C 110.93173 8.0767 110.62048 6.299717 111.59375 4.6875 C 112.89272 2.535751 115.63334 1.859587 117.78125 3.15625 C 119.42355 4.147683 120.23177 6.072502 119.9375 7.84375 C 119.06223 7.590949 118.56679 7.3333328 117.84375 7.125 L 119.28125 12.65625 L 123.6875 8.78125 C 123.05667 8.5966675 122.41677 8.4172193 121.78125 8.25 C 122.2769 5.683126 121.14745 2.959689 118.78125 1.53125 C 117.64783 0.847018 116.36259 0.563394 115.125 0.625 z "
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;opacity:0.78761058;color:#000000;fill:none;stroke:url(#linearGradient9035);stroke-width:0.58899999;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ id="path9027"
+ d="m 115.15625,1 c -1.93846,0.096494 -3.76714,1.0916106 -4.84375,2.875 -1.30767,2.1661277 -0.93509,4.6647482 0.3125,6.3125 0.63702,0.841353 1.50307,1.428702 2.34375,1.84375 0.62686,0.309486 1.15865,0.483618 1.65625,0.53125 l 0.3125,0.03125 -0.0312,-0.3125 0,-0.03125 -0.0937,-0.625 -0.0312,-0.1875 -0.0937,-0.03125 a 0.36695666,0.36695666 0 0 1 -0.0312,0 0.36695666,0.36695666 0 0 1 -0.15625,0 c -0.29285,-0.07277 -0.63827,-0.165161 -1,-0.34375 -0.70811,-0.349599 -1.43916,-0.904314 -1.9375,-1.5625 -0.9926,-1.3109763 -1.33406,-3.2560303 -0.28125,-5 1.3994,-2.3181172 4.37305,-3.0534486 6.6875,-1.65625 1.77658,1.0724988 2.66287,3.1417062 2.34375,5.0625 a 0.36695666,0.36695666 0 0 1 -0.46875,0.28125 c -0.64541,-0.1864124 -1.05026,-0.3368939 -1.5,-0.5 l 1.125,4.3125 3.46875,-3.0625 c -0.41433,-0.1174866 -0.83619,-0.2348673 -1.25,-0.34375 A 0.36695666,0.36695666 0 0 1 121.40625,8.1875 C 121.87307,5.7699443 120.82752,3.1922459 118.59375,1.84375 117.52699,1.1997586 116.32539,0.94180137 115.15625,1 z"
+ transform="translate(-100,0)" />
+ </g>
+ </g>
+</svg>
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg
index 5a2a9555..dfc0655f 100644
--- a/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/stop-volume.svg
@@ -1808,6 +1808,57 @@
y1="15.80225"
x2="24.30225"
y2="35.05225" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4837"
+ id="linearGradient4874"
+ gradientUnits="userSpaceOnUse"
+ x1="65.359879"
+ y1="30.570919"
+ x2="93.35183"
+ y2="62.862644" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4837">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4839" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4841" />
+ </linearGradient>
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4859"
+ id="linearGradient4876"
+ gradientUnits="userSpaceOnUse"
+ x1="64.432518"
+ y1="31.433016"
+ x2="71.064438"
+ y2="40.353905" />
+ <linearGradient
+ inkscape:collect="always"
+ id="linearGradient4859">
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="0"
+ id="stop4861" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:0;"
+ offset="1"
+ id="stop4863" />
+ </linearGradient>
+ <linearGradient
+ y2="40.353905"
+ x2="71.064438"
+ y1="31.433016"
+ x1="64.432518"
+ gradientUnits="userSpaceOnUse"
+ id="linearGradient4902"
+ xlink:href="#linearGradient4859"
+ inkscape:collect="always" />
</defs>
<sodipodi:namedview
id="base"
@@ -1817,9 +1868,9 @@
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="1"
- inkscape:cx="31.212003"
- inkscape:cy="20.62781"
- inkscape:current-layer="g18476"
+ inkscape:cx="17.328991"
+ inkscape:cy="5.1864773"
+ inkscape:current-layer="g4867"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
@@ -1836,7 +1887,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -1918,33 +1969,44 @@
sodipodi:nodetypes="ccccccc"
inkscape:connector-curvature="0" />
</g>
- <g
- transform="matrix(1.0116783,0,0,1.0116782,-3.76602,-0.90833374)"
- id="g15335">
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccc"
- id="path9480-4"
- d="m 315.90023,6.2395127 17.0853,0 12.82128,13.1205033 0,17.929227 -12.6486,12.040795 -17.43034,0 -12.92426,-12.864195 0,-17.228377 13.09662,-12.9979533 z"
- style="fill:url(#linearGradient13346);fill-opacity:1;fill-rule:evenodd;stroke:#720000;stroke-width:4.06781816;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="ccccccccc"
- id="path9482-6"
- d="m 316.99041,8.9492062 14.88502,0 11.23436,11.4170598 0,15.729261 -10.87672,10.524138 -15.38062,0 -11.33826,-11.28539 0,-15.038877 11.47621,-11.3461918 z"
- style="fill:none;stroke:url(#linearGradient13348);stroke-width:1.81394053;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccc"
- id="path2241-4"
- d="m 316.62886,7.7446708 -11.95364,11.8616862 0,15.738431 2.71411,2.690577 c 15.4878,0.05329 15.22413,-12.052567 36.55389,-10.993756 l 0,-7.319528 -11.72265,-11.9774102 -15.59171,0 z"
- style="opacity:0.28977272;fill:url(#radialGradient13350);fill-opacity:1;fill-rule:evenodd;stroke:none" />
- <path
- inkscape:connector-curvature="0"
- id="path2787-1"
- d="m 317.07639,16.267493 -4.26717,4.275661 7.53508,7.550058 -7.53508,7.550059 4.26717,4.275662 7.53508,-7.55006 7.53508,7.55006 4.26717,-4.275662 -7.53508,-7.550059 7.53508,-7.550058 -4.26717,-4.275661 -7.53508,7.550059 -7.53508,-7.550059 z"
- style="fill:url(#radialGradient13352);fill-opacity:1;fill-rule:evenodd;stroke:url(#linearGradient13354);stroke-width:1.00099337;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
- </g>
+ </g>
+ <g
+ id="g4867"
+ transform="matrix(0.8183337,0,0,0.8183337,-38.604276,6.5194524)">
+ <path
+ inkscape:connector-curvature="0"
+ style="opacity:0.98999999000000005;fill:none;stroke:#720000;stroke-width:7.03366761;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="m 442.82271,11.575463 c -14.58752,0 -26.41304,11.849035 -26.41304,26.465559 0,14.616525 11.82552,26.465559 26.41304,26.465559 14.58752,0 26.41304,-11.849034 26.41304,-26.465559 0,-14.616524 -11.82552,-26.465559 -26.41304,-26.465559 z m 0,9.205412 c 3.79969,0 7.29572,1.268104 10.14414,3.35614 l -26.12594,20.424507 c -0.81869,-2.010624 -1.24409,-4.214903 -1.24409,-6.5205 0,-9.532517 7.71229,-17.260147 17.22589,-17.260147 z m 16.2689,11.506765 c 0.629,1.792241 0.95699,3.745679 0.95699,5.753382 0,9.532517 -7.71229,17.260147 -17.22589,17.260147 -3.49182,0 -6.76001,-1.087496 -9.47424,-2.876691 L 459.09161,32.28764 z"
+ id="path4855" />
+ <path
+ id="path4043"
+ d="m 71.59375,28.375 c -4.763456,0 -8.625,3.861544 -8.625,8.625 0,4.763456 3.861544,8.625 8.625,8.625 4.763456,0 8.625,-3.861544 8.625,-8.625 0,-4.763456 -3.861544,-8.625 -8.625,-8.625 z m 0,3 c 1.240764,0 2.382367,0.413269 3.3125,1.09375 L 66.375,39.125 C 66.107661,38.469747 65.96875,37.751383 65.96875,37 c 0,-3.106602 2.518398,-5.625 5.625,-5.625 z m 5.3125,3.75 c 0.205395,0.584083 0.3125,1.220699 0.3125,1.875 0,3.106602 -2.518398,5.625 -5.625,5.625 -1.14023,0 -2.207437,-0.35441 -3.09375,-0.9375 l 8.40625,-6.5625 z"
+ style="opacity:0.98999999000000005;fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none"
+ inkscape:connector-curvature="0"
+ transform="matrix(3.062381,0,0,3.0684706,223.57537,-75.49239)" />
+ <path
+ sodipodi:nodetypes="sssccssccsscsscc"
+ inkscape:connector-curvature="0"
+ style="opacity:0.28761062;fill:url(#linearGradient4902);fill-opacity:1;fill-rule:evenodd;stroke:none"
+ d="m 71.59375,28.375 c -4.763456,0 -8.625,3.861544 -8.625,8.625 0,0.831085 0.117546,1.634717 0.33692,2.395175 0.265084,0.918914 0.678852,1.774788 1.21357,2.53989 5.297927,-4.824334 9.518373,-6.795001 15.138117,-8.002486 C 78.420715,30.683545 75.276827,28.375 71.59375,28.375 z m 0,3 c 1.240764,0 2.382367,0.413269 3.3125,1.09375 L 66.375,39.125 C 66.107661,38.469747 65.96875,37.751383 65.96875,37 c 0,-3.106602 2.518398,-5.625 5.625,-5.625 z m 5.3125,3.75 c 0.205395,0.584083 0.3125,1.220699 0.3125,1.875 0,3.106602 -2.518398,5.625 -5.625,5.625 -1.14023,0 -2.207437,-0.35441 -3.09375,-0.9375 z"
+ transform="matrix(3.062381,0,0,3.0684706,223.57537,-75.49239)"
+ id="path4857" />
+ <path
+ transform="matrix(3.1655984,0,0,3.1718933,215.59532,-79.907296)"
+ d="m 79.53125,37.125 a 7.78125,7.78125 0 1 1 -15.5625,0 7.78125,7.78125 0 1 1 15.5625,0 z"
+ sodipodi:ry="7.78125"
+ sodipodi:rx="7.78125"
+ sodipodi:cy="37.125"
+ sodipodi:cx="71.75"
+ id="path4835"
+ style="fill:none;stroke:url(#linearGradient4874);stroke-width:1.01625024999999990;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;opacity:0.80088496"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="cc"
+ inkscape:connector-curvature="0"
+ id="path4845"
+ d="M 427.6737,45.685665 453.84279,25.234867"
+ style="opacity:0.82300885;fill:none;stroke:#ffffff;stroke-width:2.88664961000000010;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
</g>
</g>
</g>
diff --git a/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg b/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg
index 109e2f35..df76f865 100644
--- a/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg
+++ b/src/com.gluster.storage.management.gui/icons/tango/32x32/volume-rebalance.svg
@@ -15,10 +15,32 @@
id="svg10057"
version="1.1"
inkscape:version="0.48.1 "
- sodipodi:docname="volume_rebalance.svg">
+ sodipodi:docname="volume_rebalance_1.svg">
<defs
id="defs10059">
<linearGradient
+ id="linearGradient6336">
+ <stop
+ id="stop6338"
+ offset="0"
+ style="stop-color:#5a3015;stop-opacity:1" />
+ <stop
+ id="stop6340"
+ offset="1"
+ style="stop-color:#5a3015;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5713">
+ <stop
+ id="stop5715"
+ offset="0"
+ style="stop-color:#ad8c1e;stop-opacity:1" />
+ <stop
+ id="stop5717"
+ offset="1"
+ style="stop-color:#ffdb51;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
id="linearGradient6488">
<stop
id="stop6490"
@@ -1444,9 +1466,148 @@
style="stop-color:#ffffff;stop-opacity:0;" />
</linearGradient>
<linearGradient
+ id="linearGradient4684">
+ <stop
+ style="stop-color:#a48318;stop-opacity:1"
+ offset="0"
+ id="stop4686" />
+ <stop
+ style="stop-color:#ffdb51;stop-opacity:1"
+ offset="1"
+ id="stop4688" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4704">
+ <stop
+ style="stop-color:#fff164;stop-opacity:1"
+ offset="0"
+ id="stop4706" />
+ <stop
+ style="stop-color:#b19020;stop-opacity:1"
+ offset="1"
+ id="stop4708" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4714">
+ <stop
+ style="stop-color:#ad8c1e;stop-opacity:1"
+ offset="0"
+ id="stop4716" />
+ <stop
+ style="stop-color:#ffdb51;stop-opacity:1"
+ offset="1"
+ id="stop4718" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5475">
+ <stop
+ style="stop-color:#ad8c1e;stop-opacity:1"
+ offset="0"
+ id="stop5477" />
+ <stop
+ style="stop-color:#f6d24b;stop-opacity:1"
+ offset="1"
+ id="stop5479" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4816">
+ <stop
+ style="stop-color:#6c4019;stop-opacity:1;"
+ offset="0"
+ id="stop4818" />
+ <stop
+ style="stop-color:#ffdf61;stop-opacity:1"
+ offset="1"
+ id="stop4820" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4796">
+ <stop
+ id="stop4798"
+ offset="0"
+ style="stop-color:#fbfbc8;stop-opacity:1" />
+ <stop
+ id="stop4800"
+ offset="1"
+ style="stop-color:#d3a550;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5490">
+ <stop
+ style="stop-color:#6c4019;stop-opacity:1;"
+ offset="0"
+ id="stop5492" />
+ <stop
+ style="stop-color:#ffdf61;stop-opacity:1"
+ offset="1"
+ id="stop5494" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient5497">
+ <stop
+ id="stop5499"
+ offset="0"
+ style="stop-color:#fbfbc8;stop-opacity:1" />
+ <stop
+ id="stop5501"
+ offset="1"
+ style="stop-color:#d3a550;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4134-9-5-6-53">
+ <stop
+ id="stop4136-4-7-1-2"
+ offset="0"
+ style="stop-color:#4f79a6;stop-opacity:1;" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.25000000"
+ id="stop4148-8-9-9-3" />
+ <stop
+ style="stop-color:#7fa8d3;stop-opacity:1"
+ offset="0.45037496"
+ id="stop4142-8-2-02" />
+ <stop
+ id="stop4138-2-3-6"
+ offset="1"
+ style="stop-color:#547ba6;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4206-4-7-8">
+ <stop
+ id="stop4208-5-9-9-9"
+ offset="0.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ <stop
+ id="stop4210-5-3-6-5"
+ offset="1.0000000"
+ style="stop-color:#3465a4;stop-opacity:1" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient7210-7-1-8">
+ <stop
+ id="stop7212-33-6"
+ offset="0.0000000"
+ style="stop-color:#ffffff;stop-opacity:1.0000000;" />
+ <stop
+ id="stop7214-0-6"
+ offset="1.0000000"
+ style="stop-color:#bfbebf;stop-opacity:1" />
+ </linearGradient>
+ <clipPath
+ clipPathUnits="userSpaceOnUse"
+ id="clipPath5709">
+ <path
+ inkscape:connector-curvature="0"
+ id="path5711"
+ d="m 92.915818,17.576508 c 0.126718,1.520614 0.624046,3.904687 0.624046,3.904687 0,0 -12.194539,6.854446 -14.107407,6.535635 -1.91287,-0.318811 -8.687614,-13.390081 -8.687614,-13.390081 0,0 2.789599,-17.2158217 3.188115,-17.2158217 0.398514,0 20.483637,-3.506926 20.483637,-3.506926 l 13.788595,1.7534626 10.83959,17.5346331 -0.0399,6.216823 -8.06947,1.734361 c 0,0 -0.0321,-5.835461 -0.0321,-6.863003 0,-1.833054 0.001,-3.264149 -3.14068,-5.1058011 -2.46769,-1.4464453 -6.02276,-2.0505478 -6.02276,-2.0505478 l -3.338151,5.1914349 2.151981,3.905441 c 0,0 0.16619,0.656882 0.16619,1.248609 0,0 -3.159292,0.331411 -4.46337,0.335806 -1.304077,0.0045 -3.340702,-0.228712 -3.340702,-0.228712 z"
+ style="fill:#000000;fill-opacity:1;stroke:none"
+ sodipodi:nodetypes="ccscscccccsscccczc" />
+ </clipPath>
+ <linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4134-9-5-6-5"
- id="linearGradient13263"
+ id="linearGradient6296"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
x1="9.9747334"
@@ -1456,7 +1617,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4206-4-7-47"
- id="linearGradient13265"
+ id="linearGradient6298"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4954152,0,0,1.4906315,382.15258,-11.973727)"
x1="25.064732"
@@ -1466,7 +1627,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4176-3-3"
- id="linearGradient13267"
+ id="linearGradient6300"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4954152,0,0,1.4954152,382.15258,-12.162834)"
x1="17.160095"
@@ -1476,7 +1637,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7210-7-1-9"
- id="linearGradient13269"
+ id="linearGradient6302"
gradientUnits="userSpaceOnUse"
x1="24"
y1="16.525082"
@@ -1485,7 +1646,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6924-6-4"
- id="linearGradient13271"
+ id="linearGradient6304"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(1.4954152,0,0,1.4954152,381.93895,-8.2106577)"
x1="16.07143"
@@ -1495,7 +1656,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4134-9-6-2"
- id="linearGradient13273"
+ id="linearGradient6306"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
x1="9.9747334"
@@ -1505,7 +1666,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4206-4-8-2"
- id="linearGradient13275"
+ id="linearGradient6308"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.884513,6.8263032)"
x1="25.064732"
@@ -1515,7 +1676,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient4176-9-0"
- id="linearGradient13277"
+ id="linearGradient6310"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.45408812,0,0,0.45408812,-19.439922,7.2711048)"
x1="17.160095"
@@ -1525,7 +1686,7 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient7210-8-1"
- id="linearGradient13279"
+ id="linearGradient6312"
gradientUnits="userSpaceOnUse"
x1="24"
y1="16.525082"
@@ -1534,13 +1695,84 @@
<linearGradient
inkscape:collect="always"
xlink:href="#linearGradient6924-1-0"
- id="linearGradient13281"
+ id="linearGradient6314"
gradientUnits="userSpaceOnUse"
gradientTransform="matrix(0.47256308,0,0,0.47256308,-19.765711,7.8656218)"
x1="15.972866"
y1="16.641634"
x2="15.785715"
y2="30" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4684"
+ id="linearGradient6316"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(32.75,0)"
+ x1="62.583221"
+ y1="10.427506"
+ x2="64.085831"
+ y2="10.471701" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient5713"
+ id="linearGradient6318"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="translate(32.75,-1.2398857)"
+ x1="56.51981"
+ y1="4.3342433"
+ x2="56.788395"
+ y2="5.7337985" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4714"
+ id="linearGradient6320"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(-1,0,0,1,160.8125,-1.1703683)"
+ x1="58.437366"
+ y1="2.0533557"
+ x2="58.1987"
+ y2="3.7583599" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient6336"
+ id="linearGradient6322"
+ gradientUnits="userSpaceOnUse"
+ x1="-54.460457"
+ y1="25.724014"
+ x2="-71.006821"
+ y2="25.636955" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4796"
+ id="radialGradient6324"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4439539,-0.05910147,0.02926065,1.1133991,24.891287,-3.506969)"
+ cx="-54.242531"
+ cy="20.513599"
+ fx="-54.242531"
+ fy="20.513599"
+ r="8.1875" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4796"
+ id="radialGradient6328"
+ gradientUnits="userSpaceOnUse"
+ gradientTransform="matrix(1.4439539,-0.05910147,0.02926065,1.1133991,24.891287,-3.506969)"
+ cx="-54.242531"
+ cy="20.513599"
+ fx="-54.242531"
+ fy="20.513599"
+ r="8.1875" />
+ <radialGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient4704"
+ id="radialGradient6330"
+ gradientUnits="userSpaceOnUse"
+ cx="23.9375"
+ cy="3.4375"
+ fx="23.9375"
+ fy="3.4375"
+ r="2.4114759" />
</defs>
<sodipodi:namedview
id="base"
@@ -1549,9 +1781,9 @@
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
- inkscape:zoom="1"
- inkscape:cx="20.825544"
- inkscape:cy="-3.3360974"
+ inkscape:zoom="16"
+ inkscape:cx="7.2182752"
+ inkscape:cy="32.547276"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
@@ -1569,7 +1801,7 @@
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- <dc:title />
+ <dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
@@ -1578,88 +1810,180 @@
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
- id="g13248"
- transform="translate(0,2.8980016)">
+ id="g6267"
+ transform="translate(60.192465,0)">
<g
- id="g17793"
- transform="matrix(-0.44348417,0.06245045,0.06245045,0.44348417,52.856902,5.0209674)">
+ transform="translate(-60,2.8980016)"
+ id="g13248">
+ <g
+ transform="matrix(-0.44348417,0.06245045,0.06245045,0.44348417,52.856902,5.0209674)"
+ id="g17793">
+ <g
+ id="g17795"
+ transform="matrix(-1.0837219,0.15260732,0.15230446,1.0815712,533.59674,-76.67915)">
+ <path
+ style="color:#000000;fill:url(#linearGradient6296);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6298);stroke-width:1.49302125;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ d="m 417.94908,1.3022136 c -11.7531,0 -21.30966,4.1775019 -21.30966,9.3164454 0,0.368755 0,26.633651 0,27.017694 0,5.138961 9.55656,9.316446 21.30966,9.316446 11.75311,0 21.6902,-4.177485 21.6902,-9.316446 0,-0.304179 0,-26.713514 0,-27.017694 0,-5.1389604 -9.93709,-9.3164454 -21.6902,-9.3164454 z"
+ id="path17797"
+ sodipodi:nodetypes="zsszssz"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:nodetypes="zsszssz"
+ id="path17799"
+ d="m 417.96197,2.3211206 c -10.95803,0 -19.86811,3.9074022 -19.86811,8.7140914 0,0.34492 0,25.251673 0,25.61088 0,4.80669 8.91008,8.714092 19.86811,8.714092 10.95804,0 20.22293,-3.907402 20.22291,-8.714092 0,-0.284505 0,-25.326375 0,-25.61088 0,-4.8066892 -9.26487,-8.7140914 -20.22291,-8.7140914 z"
+ style="opacity:0.70796461;color:#000000;fill:none;stroke:url(#linearGradient6300);stroke-width:1.49541509;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ inkscape:connector-curvature="0" />
+ <path
+ sodipodi:type="arc"
+ style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6302);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ id="path17801"
+ sodipodi:cx="24"
+ sodipodi:cy="14.071428"
+ sodipodi:rx="12.857142"
+ sodipodi:ry="5.5"
+ d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z"
+ transform="matrix(1.5511807,0,0,1.5116482,380.81421,-10.643499)" />
+ <path
+ style="opacity:0.49367083;color:#000000;fill:url(#linearGradient6304);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
+ d="m 402.55432,17.318206 0.53407,17.62453 6.8362,1.922689 -0.21365,-17.517733 c 0,0 3.09765,0 8.11798,-0.320442 -7.7997,-0.348543 -16.72378,-3.700664 -19.76084,-5.874849 2.11884,3.128674 4.48624,4.165805 4.48624,4.165805 z"
+ id="path17803"
+ sodipodi:nodetypes="ccccccc"
+ inkscape:connector-curvature="0" />
+ </g>
+ </g>
<g
- transform="matrix(-1.0837219,0.15260732,0.15230446,1.0815712,533.59674,-76.67915)"
- id="g17795">
+ id="g17815"
+ transform="matrix(1.5088326,1.0616208e-8,-1.0616208e-8,1.5088326,29.21121,-11.49056)">
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="zsszssz"
- id="path17797"
- d="m 417.94908,1.3022136 c -11.7531,0 -21.30966,4.1775019 -21.30966,9.3164454 0,0.368755 0,26.633651 0,27.017694 0,5.138961 9.55656,9.316446 21.30966,9.316446 11.75311,0 21.6902,-4.177485 21.6902,-9.316446 0,-0.304179 0,-26.713514 0,-27.017694 0,-5.1389604 -9.93709,-9.3164454 -21.6902,-9.3164454 z"
- style="color:#000000;fill:url(#linearGradient13263);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13265);stroke-width:1.49302125;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" />
+ id="path17817"
+ d="m -8.5725348,11.035069 c -3.7140732,0 -6.7340192,1.324361 -6.7340192,2.953519 0,0.116904 0,8.443456 0,8.565206 0,1.629164 3.019946,2.953519 6.7340192,2.953519 3.714079,0 6.854278,-1.324355 6.854278,-2.953519 0,-0.09643 0,-8.468774 0,-8.565206 0,-1.629164 -3.140199,-2.953519 -6.854278,-2.953519 z"
+ style="color:#000000;fill:url(#linearGradient6306);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6308);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible" />
<path
inkscape:connector-curvature="0"
- style="opacity:0.70796461;color:#000000;fill:none;stroke:url(#linearGradient13267);stroke-width:1.49541509;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m 417.96197,2.3211206 c -10.95803,0 -19.86811,3.9074022 -19.86811,8.7140914 0,0.34492 0,25.251673 0,25.61088 0,4.80669 8.91008,8.714092 19.86811,8.714092 10.95804,0 20.22293,-3.907402 20.22291,-8.714092 0,-0.284505 0,-25.326375 0,-25.61088 0,-4.8066892 -9.26487,-8.7140914 -20.22291,-8.7140914 z"
- id="path17799"
+ style="opacity:0.8982301;color:#000000;fill:none;stroke:url(#linearGradient6310);stroke-width:0.66884732;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ d="m -8.5662708,11.669209 c -3.3274462,0 -6.0330192,1.186496 -6.0330192,2.646065 0,0.104736 0,7.667759 0,7.776834 0,1.459568 2.705573,2.646065 6.0330192,2.646065 3.327452,0 6.140765,-1.186497 6.14076,-2.646065 0,-0.08639 0,-7.690444 0,-7.776834 0,-1.459569 -2.813308,-2.646065 -6.14076,-2.646065 z"
+ id="path17819"
sodipodi:nodetypes="zsszssz" />
<path
- transform="matrix(1.5511807,0,0,1.5116482,380.81421,-10.643499)"
+ transform="matrix(0.47968295,0,0,0.44145226,-20.055386,7.7366328)"
d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z"
sodipodi:ry="5.5"
sodipodi:rx="12.857142"
sodipodi:cy="14.071428"
sodipodi:cx="24"
- id="path17801"
- style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13269);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
+ id="path17821"
+ style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient6312);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
sodipodi:type="arc" />
<path
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccccccc"
- id="path17803"
- d="m 402.55432,17.318206 0.53407,17.62453 6.8362,1.922689 -0.21365,-17.517733 c 0,0 3.09765,0 8.11798,-0.320442 -7.7997,-0.348543 -16.72378,-3.700664 -19.76084,-5.874849 2.11884,3.128674 4.48624,4.165805 4.48624,4.165805 z"
- style="opacity:0.49367083;color:#000000;fill:url(#linearGradient13271);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" />
+ id="path17823"
+ d="m -13.251088,15.932946 -0.04081,5.569491 2.253444,0.607585 0.04895,-5.535743 c 0,0 0.978881,0 2.5653472,-0.101262 -2.4647692,-0.110142 -5.2848492,-1.169439 -6.2445852,-1.856499 0.669573,0.988686 1.41769,1.316428 1.41769,1.316428 z"
+ style="opacity:0.64159324;color:#000000;fill:url(#linearGradient6314);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible" />
</g>
</g>
<g
- transform="matrix(1.5088326,1.0616208e-8,-1.0616208e-8,1.5088326,29.21121,-11.49056)"
- id="g17815">
+ clip-path="url(#clipPath5709)"
+ transform="matrix(0.76529224,0,0,0.76529224,-117.78229,2.535801)"
+ id="g4849">
+ <rect
+ style="fill:url(#linearGradient6316);fill-opacity:1;fill-rule:evenodd;stroke:#3b2400;stroke-width:0.30000001;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="rect3914"
+ width="2.2980971"
+ height="20.064156"
+ x="95.068062"
+ y="0.43962353" />
+ <path
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:url(#linearGradient6318);fill-opacity:1;stroke:#3b2400;stroke-width:0.43523332;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans"
+ d="m 96.0625,1.0726143 -13.6875,4.78125 0.15625,0.21875 13.625,-1.1480137 z"
+ id="path4722"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccccc" />
+ <path
+ sodipodi:nodetypes="ccccc"
+ inkscape:connector-curvature="0"
+ id="path4740"
+ d="m 97.5,1.1421317 10.15273,0.791973 -0.15625,0.21875 -10.09023,2.6723063 z"
+ style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:url(#linearGradient6320);fill-opacity:1;stroke:#3b2400;stroke-width:0.43523332;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate;font-family:Sans;-inkscape-font-specification:Sans" />
+ <g
+ id="g4824"
+ transform="translate(162.3125,-1.9898857)">
+ <path
+ sodipodi:nodetypes="ssscscs"
+ inkscape:connector-curvature="0"
+ id="path4802"
+ d="m -50.5625,24.125 c 3e-6,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-0.288458 6.19e-4,-1.277147 6.19e-4,-1.798402 0.914867,-1.425173 4.378027,-1.514098 8.186878,-1.514098 3.789172,0 7.257999,0.08728 8.191601,1.501237 0,0.430812 -0.0041,1.514844 -0.0041,1.811263 z"
+ style="fill:url(#linearGradient6322);fill-opacity:1;stroke:none"
+ transform="matrix(0.98826267,0,0,0.70355867,-20.770245,4.1911619)" />
+ <path
+ transform="matrix(0.98826267,0,0,0.70355867,-20.770245,2.9095309)"
+ d="m -50.5625,24.125 c 0,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-1.829443 3.665669,-3.3125 8.1875,-3.3125 4.521831,0 8.1875,1.483057 8.1875,3.3125 z"
+ sodipodi:ry="3.3125"
+ sodipodi:rx="8.1875"
+ sodipodi:cy="24.125"
+ sodipodi:cx="-58.75"
+ id="path4744"
+ style="fill:url(#radialGradient6324);fill-opacity:1;stroke:none"
+ sodipodi:type="arc" />
+ <path
+ sodipodi:nodetypes="sscssscss"
+ inkscape:connector-curvature="0"
+ id="path4807"
+ d="m -78.875,17.545028 c -4.46876,0 -8.0625,1.056629 -8.0625,2.34375 0,1.154067 2.89539,2.095489 6.71875,2.28125 -3.54471,-0.190528 -5.90625,-0.871964 -5.90625,-1.859375 0,-1.12847 4.04758,-2 7.46875,-2.046875 4.295765,-0.05886 7.78125,0.77778 7.78125,1.90625 0,0.02962 0.0048,0.06444 0,0.09375 0.06968,-0.123038 0.09375,-0.246288 0.09375,-0.375 0,-1.287121 -3.624993,-2.34375 -8.09375,-2.34375 z"
+ style="fill:#6c4019;fill-opacity:1;stroke:none" />
+ </g>
<path
- style="color:#000000;fill:url(#linearGradient13273);fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13275);stroke-width:0.77058458;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -8.5725348,11.035069 c -3.7140732,0 -6.7340192,1.324361 -6.7340192,2.953519 0,0.116904 0,8.443456 0,8.565206 0,1.629164 3.019946,2.953519 6.7340192,2.953519 3.714079,0 6.854278,-1.324355 6.854278,-2.953519 0,-0.09643 0,-8.468774 0,-8.565206 0,-1.629164 -3.140199,-2.953519 -6.854278,-2.953519 z"
- id="path17817"
- sodipodi:nodetypes="zsszssz"
- inkscape:connector-curvature="0" />
+ style="fill:none;stroke:#3b2400;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ d="M 75.671875,17.820767 82.227252,6.2846152 91.265625,17.789517"
+ id="path4833"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ccc" />
+ <g
+ transform="translate(187.76834,-6.038009)"
+ id="g4835">
+ <path
+ transform="matrix(0.98826267,0,0,0.70355867,-20.770245,4.1911619)"
+ style="fill:#5a3015;fill-opacity:1;stroke:none"
+ d="m -50.5625,24.125 c 3e-6,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-0.288458 6.19e-4,-1.277147 6.19e-4,-1.798402 0.914867,-1.425173 4.378027,-1.514098 8.186878,-1.514098 3.789172,0 7.257999,0.08728 8.191601,1.501237 0,0.430812 -0.0041,1.514844 -0.0041,1.811263 z"
+ id="path4837"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="ssscscs" />
+ <path
+ sodipodi:type="arc"
+ style="fill:url(#radialGradient6328);fill-opacity:1;stroke:none"
+ id="path4839"
+ sodipodi:cx="-58.75"
+ sodipodi:cy="24.125"
+ sodipodi:rx="8.1875"
+ sodipodi:ry="3.3125"
+ d="m -50.5625,24.125 c 0,1.829443 -3.665669,3.3125 -8.1875,3.3125 -4.521831,0 -8.1875,-1.483057 -8.1875,-3.3125 0,-1.829443 3.665669,-3.3125 8.1875,-3.3125 4.521831,0 8.1875,1.483057 8.1875,3.3125 z"
+ transform="matrix(0.98826267,0,0,0.70355867,-20.770245,2.9095309)" />
+ <path
+ style="fill:#6c4019;fill-opacity:1;stroke:none"
+ d="m -78.875,17.545028 c -4.46876,0 -8.0625,1.056629 -8.0625,2.34375 0,1.154067 2.89539,2.095489 6.71875,2.28125 -3.54471,-0.190528 -5.90625,-0.871964 -5.90625,-1.859375 0,-1.12847 4.04758,-2 7.46875,-2.046875 4.295765,-0.05886 7.78125,0.77778 7.78125,1.90625 0,0.02962 0.0048,0.06444 0,0.09375 0.06968,-0.123038 0.09375,-0.246288 0.09375,-0.375 0,-1.287121 -3.624993,-2.34375 -8.09375,-2.34375 z"
+ id="path4841"
+ inkscape:connector-curvature="0"
+ sodipodi:nodetypes="sscssscss" />
+ </g>
<path
- sodipodi:nodetypes="zsszssz"
- id="path17819"
- d="m -8.5662708,11.669209 c -3.3274462,0 -6.0330192,1.186496 -6.0330192,2.646065 0,0.104736 0,7.667759 0,7.776834 0,1.459568 2.705573,2.646065 6.0330192,2.646065 3.327452,0 6.140765,-1.186497 6.14076,-2.646065 0,-0.08639 0,-7.690444 0,-7.776834 0,-1.459569 -2.813308,-2.646065 -6.14076,-2.646065 z"
- style="opacity:0.8982301;color:#000000;fill:none;stroke:url(#linearGradient13277);stroke-width:0.66884732;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- inkscape:connector-curvature="0" />
+ sodipodi:nodetypes="ccc"
+ inkscape:connector-curvature="0"
+ id="path4843"
+ d="M 101.12772,13.772644 107.6831,2.2364919 116.72147,13.741394"
+ style="fill:none;stroke:#3b2400;stroke-width:0.60000002;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none" />
<path
sodipodi:type="arc"
- style="color:#000000;fill:#3a3a3a;fill-opacity:1;fill-rule:nonzero;stroke:url(#linearGradient13279);stroke-width:1.00492704;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;marker:none;visibility:visible;display:block;overflow:visible"
- id="path17821"
- sodipodi:cx="24"
- sodipodi:cy="14.071428"
- sodipodi:rx="12.857142"
- sodipodi:ry="5.5"
- d="m 36.857142,14.071428 c 0,3.037566 -5.756338,5.5 -12.857142,5.5 -7.100804,0 -12.857142,-2.462434 -12.857142,-5.5 0,-3.037566 5.756338,-5.4999997 12.857142,-5.4999997 7.100804,0 12.857142,2.4624337 12.857142,5.4999997 z"
- transform="matrix(0.47968295,0,0,0.44145226,-20.055386,7.7366328)" />
- <path
- style="opacity:0.64159324;color:#000000;fill:url(#linearGradient13281);fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:1;marker:none;visibility:visible;display:block;overflow:visible"
- d="m -13.251088,15.932946 -0.04081,5.569491 2.253444,0.607585 0.04895,-5.535743 c 0,0 0.978881,0 2.5653472,-0.101262 -2.4647692,-0.110142 -5.2848492,-1.169439 -6.2445852,-1.856499 0.669573,0.988686 1.41769,1.316428 1.41769,1.316428 z"
- id="path17823"
- sodipodi:nodetypes="ccccccc"
- inkscape:connector-curvature="0" />
+ style="fill:url(#radialGradient6330);fill-opacity:1;fill-rule:evenodd;stroke:#3b2400;stroke-width:0.40000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+ id="path4694"
+ sodipodi:cx="23.4375"
+ sodipodi:cy="3.9375"
+ sodipodi:rx="2.2114758"
+ sodipodi:ry="2.2114758"
+ d="m 25.648976,3.9375 c 0,1.2213644 -0.990112,2.2114758 -2.211476,2.2114758 -1.221364,0 -2.211476,-0.9901114 -2.211476,-2.2114758 0,-1.2213644 0.990112,-2.2114758 2.211476,-2.2114758 1.221364,0 2.211476,0.9901114 2.211476,2.2114758 z"
+ transform="translate(72.731694,-4.7362221)" />
</g>
- <path
- inkscape:connector-curvature="0"
- style="fill:#ecffd9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:0.5550853;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:0.41618497;stroke-dasharray:none"
- d="m 13.061558,19.736689 -5.125142,0 0,0.631043 6.133525,0 0.835439,-3.066073 2.057523,7.10244 1.906715,-5.610232 1.720026,3.065389 2.309744,-1.821027 1.864218,0 0,-1.067967 -2.12632,0 -1.883831,1.627946 -1.946374,-3.452905 -1.788534,4.238849 -1.942255,-6.670126 z"
- id="path3684"
- sodipodi:nodetypes="ccccccccccccccccc" />
- <path
- inkscape:connector-curvature="0"
- sodipodi:nodetypes="cccccccccccccccccc"
- id="path3686"
- d="m 12.541608,19.258112 -4.605192,0 0,1.580838 6.653475,-0.06481 0.389767,-1.577671 1.987494,6.589529 2.125302,-5.94568 1.49719,2.808356 2.53258,-2.130382 1.641382,-0.06481 0.0075,-2.027174 -2.133773,-0.06481 -1.809553,1.645241 -2.020652,-4.039484 -1.565698,3.597829 -2.090813,-6.362556 -2.608962,6.055599 z"
- style="opacity:0.38068183;fill:#e1f9c9;fill-opacity:1;fill-rule:evenodd;stroke:#c3ea9b;stroke-width:0.55508548;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:0.41618497;stroke-dasharray:none" />
</g>
</g>
</svg>
diff --git a/src/com.gluster.storage.management.gui/plugin.xml b/src/com.gluster.storage.management.gui/plugin.xml
index f4af7238..3c87ffe1 100644
--- a/src/com.gluster.storage.management.gui/plugin.xml
+++ b/src/com.gluster.storage.management.gui/plugin.xml
@@ -99,7 +99,7 @@
allowMultiple="false"
category="com.gluster.storage.management.gui.category"
class="com.gluster.storage.management.gui.views.VolumeOptionsView"
- icon="icons/tango/16x16/settings.png"
+ icon="icons/tango/16x16/volume-options.png"
id="com.gluster.storage.management.gui.views.VolumeOptionsView"
name="Volume Options"
restorable="true">
@@ -462,6 +462,20 @@
toolbarPath="Normal"
tooltip="Create a new Volume">
</action>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ definitionId="com.gluster.storage.management.gui.commands.ServerAddition"
+ id="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ label="Add Server"
+ menubarPath="com.gluster.storage.management.gui.actionsets.volumes/volumes"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ tooltip="Manual Server Addition">
+ </action>
<menu
id="com.gluster.storage.management.gui.actionsets.volumes"
label="&amp;Gluster"
@@ -530,7 +544,7 @@
allowLabelUpdate="false"
class="com.gluster.storage.management.gui.actions.ResetVolumeOptionsAction"
definitionId="com.gluster.storage.management.gui.commands.ResetVolumeOptions"
- icon="icons/tango/16x16/settings.png"
+ icon="icons/tango/32x32/reset-volume-option.svg"
id="com.gluster.storage.management.gui.actions.ResetVolumeOptionsAction"
label="Reset &amp;Options"
menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
@@ -631,6 +645,20 @@
toolbarPath="Normal"
tooltip="Create a new Volume">
</action>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ definitionId="com.gluster.storage.management.gui.commands.ServerAddition"
+ id="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ label="Add Server"
+ menubarPath="com.gluster.storage.management.gui.menu.volume/volume"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ tooltip="Manual Server Addition">
+ </action>
<menu
id="com.gluster.storage.management.gui.menu.volume"
label="&amp;Gluster"
@@ -675,6 +703,20 @@
toolbarPath="Normal"
tooltip="Create a new Volume">
</action>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ definitionId="com.gluster.storage.management.gui.commands.ServerAddition"
+ id="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ label="Add Server"
+ menubarPath="com.gluster.storage.management.gui.menu.servers/servers"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ tooltip="Manual Server Addition">
+ </action>
<menu
id="com.gluster.storage.management.gui.menu.servers"
label="&amp;Gluster"
@@ -719,6 +761,20 @@
toolbarPath="Normal"
tooltip="Create a new Volume">
</action>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ definitionId="com.gluster.storage.management.gui.commands.ServerAddition"
+ id="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ label="Add Server"
+ menubarPath="com.gluster.storage.management.gui.menu.glusterserver/glusterserver"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ tooltip="Manual Server Addition">
+ </action>
<menu
id="com.gluster.storage.management.gui.menu.glusterserver"
label="&amp;Gluster"
@@ -763,6 +819,20 @@
toolbarPath="Normal"
tooltip="Create a new Volume">
</action>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ definitionId="com.gluster.storage.management.gui.commands.ServerAddition"
+ id="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ label="Add Server"
+ menubarPath="com.gluster.storage.management.gui.menu.discoveredservers/discoveredservers"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ tooltip="Manual Server Addition">
+ </action>
<menu
id="com.gluster.storage.management.gui.menu.discoveredservers"
label="&amp;Gluster"
@@ -807,6 +877,20 @@
toolbarPath="Normal"
tooltip="Create a new Volume">
</action>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ definitionId="com.gluster.storage.management.gui.commands.ServerAddition"
+ id="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ label="Add Server"
+ menubarPath="com.gluster.storage.management.gui.menu.discoveredserver/discoveredserver"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ tooltip="Manual Server Addition">
+ </action>
<menu
id="com.gluster.storage.management.gui.menu.discoveredserver"
label="&amp;Gluster"
@@ -855,7 +939,7 @@
allowLabelUpdate="false"
class="com.gluster.storage.management.gui.actions.StopTaskAction"
definitionId="com.gluster.storage.management.gui.commands.Stop"
- icon="icons/stop_task.png"
+ icon="icons/tango/32x32/media-playback-stop.png"
id="com.gluster.storage.management.gui.actions.Stop"
label="&amp;Stop Task"
menubarPath="com.gluster.storage.management.gui.menu.task/task"
@@ -870,7 +954,7 @@
allowLabelUpdate="false"
class="com.gluster.storage.management.gui.actions.ResumeTaskAction"
definitionId="com.gluster.storage.management.gui.commands.Pause"
- icon="icons/start_task.gif"
+ icon="icons/tango/32x32/media-playback-start.png"
id="com.gluster.storage.management.gui.actions.Resume"
label="&amp;Resume Task"
menubarPath="com.gluster.storage.management.gui.menu.task/task"
@@ -885,7 +969,7 @@
allowLabelUpdate="false"
class="com.gluster.storage.management.gui.actions.PauseTaskAction"
definitionId="com.gluster.storage.management.gui.commands.Pause"
- icon="icons/pause_task.png"
+ icon="icons/tango/32x32/media-playback-pause.png"
id="com.gluster.storage.management.gui.actions.Pause"
label="&amp;Pause Task"
menubarPath="com.gluster.storage.management.gui.menu.task/task"
@@ -939,6 +1023,20 @@
toolbarPath="Normal"
tooltip="Create a new Volume">
</action>
+ <action
+ allowLabelUpdate="false"
+ class="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ definitionId="com.gluster.storage.management.gui.commands.ServerAddition"
+ id="com.gluster.storage.management.gui.actions.ServerAdditionAction"
+ label="Add Server"
+ menubarPath="com.gluster.storage.management.gui.menu.gluster/gluster"
+ mode="FORCE_TEXT"
+ pulldown="false"
+ retarget="false"
+ state="false"
+ style="push"
+ tooltip="Manual Server Addition">
+ </action>
<menu
id="com.gluster.storage.management.gui.menu.gluster"
label="&amp;Gluster"
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java
index c0187667..764401a1 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/IImageKeys.java
@@ -33,6 +33,9 @@ public interface IImageKeys {
public static final String CREATE_VOLUME = "icons/tango/32x32/create-volume.svg";
public static final String START_VOLUME = "icons/tango/32x32/start-volume.svg";
public static final String STOP_VOLUME = "icons/tango/32x32/stop-volume.svg";
+ public static final String RESET_VOLUME_OPTIONS = "icons/tango/32x32/reset-volume-option.svg";
+ public static final String VOLUME_OPTIONS = "icons/tango/16x16/volume-options.png";
+ public static final String SERVER_OFFLINE = "icons/tango/16x16/offline-server.png";
public static final String CREATE_VOLUME_BIG = "icons/tango/48x48/create-volume.svg";
public static final String REMOVE_VOLUME = "icons/tango/32x32/remove-volume.svg";
@@ -50,7 +53,7 @@ public interface IImageKeys {
public static final String DISK = "icons/tango/16x16/disk.svg";
public static final String DISKS = "icons/tango/16x16/disk.svg";
public static final String DISK_UNINITIALIZED = "icons/disk-uninitialized.png";
- public static final String SEARCH = "icons/search.png";
+ public static final String SEARCH = "icons/tango/22x22/system-search.png";
public static final String ARROW_UP = "icons/arrow-up.png";
public static final String ARROW_DOWN = "icons/arrow-down.png";
public static final String VOLUME_REBALANCE = "icons/tango/32x32/volume-rebalance.svg";
@@ -63,9 +66,9 @@ public interface IImageKeys {
public static final String bricks = "icons/tango/16x16/bricks.png";
- public static final String PAUSE_TASK = "icons/pause_task.gif";
- public static final String RESUME_TASK = "icons/resume_task.gif";
- public static final String STOP_TASK = "icons/stop_task.gif";
+ public static final String PAUSE_TASK = "icons/tango/32x32/media-playback-pause.png";
+ public static final String RESUME_TASK = "icons/tango/32x32/media-playback-start.png";
+ public static final String STOP_TASK = "icons/tango/32x32/media-playback-stop.png";
public static final String CLEAR_TASK = "icons/close_task.gif";
public static final String OVERLAY_OFFLINE = "icons/status-offline-small.png";
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
index 81661942..6d21e537 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/AddServerAction.java
@@ -52,7 +52,7 @@ public class AddServerAction extends AbstractActionDelegate {
guiHelper.setStatusMessage("Adding server [" + server.getName() + "]...");
try {
- glusterServersClient.addServer(server);
+ glusterServersClient.addServer(server.getName());
modelManager.addGlusterServer(glusterServersClient.getGlusterServer(server.getName()));
successServers.add(server);
} catch (Exception e) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java
new file mode 100644
index 00000000..d94d7277
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/actions/ServerAdditionAction.java
@@ -0,0 +1,34 @@
+package com.gluster.storage.management.gui.actions;
+
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.IWorkbenchWindowActionDelegate;
+
+import com.gluster.storage.management.gui.dialogs.ChangePasswordDialog;
+import com.gluster.storage.management.gui.dialogs.ServerAdditionDialog;
+
+public class ServerAdditionAction extends AbstractActionDelegate {
+
+ @Override
+ public void dispose() {
+ // TODO Auto-generated method stub
+
+ }
+
+ @Override
+ protected void performAction(IAction action) {
+
+ try {
+ // To open a dialog for server addition
+ ServerAdditionDialog dialog = new ServerAdditionDialog(getShell());
+ dialog.open();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ }
+
+
+
+}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java
index bb700de5..5fce27e4 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/InitializeDiskTypeSelection.java
@@ -56,7 +56,7 @@ public class InitializeDiskTypeSelection extends Dialog {
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
- newShell.setText("Gluster Management Console - Select Cluster");
+ newShell.setText("Gluster Management Console - Select FS Type");
addEscapeListener(newShell);
}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java
new file mode 100644
index 00000000..ca9a0058
--- /dev/null
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/dialogs/ServerAdditionDialog.java
@@ -0,0 +1,199 @@
+/**
+ * ServerAdditionDialog.java
+ *
+ * Copyright (c) 2011 Gluster, Inc. <http://www.gluster.com>
+ * This file is part of Gluster Management Console.
+ *
+ * Gluster Management Console is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Gluster Management Console is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+ * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License
+ * for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see
+ * <http://www.gnu.org/licenses/>.
+ */
+package com.gluster.storage.management.gui.dialogs;
+
+import org.eclipse.core.databinding.DataBindingContext;
+import org.eclipse.core.databinding.UpdateValueStrategy;
+import org.eclipse.core.databinding.beans.PojoProperties;
+import org.eclipse.core.databinding.validation.ValidationStatus;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.databinding.swt.SWTObservables;
+import org.eclipse.jface.databinding.swt.WidgetProperties;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.TraverseEvent;
+import org.eclipse.swt.events.TraverseListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import com.gluster.storage.management.client.GlusterServersClient;
+import com.gluster.storage.management.client.UsersClient;
+import com.gluster.storage.management.core.constants.CoreConstants;
+import com.gluster.storage.management.core.model.ConnectionDetails;
+import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.gui.IImageKeys;
+import com.gluster.storage.management.gui.utils.GUIHelper;
+import com.gluster.storage.management.gui.validators.StringRequiredValidator;
+
+public class ServerAdditionDialog extends Dialog {
+ public static final int RETURN_CODE_ERROR = 2;
+ private Text serverName;
+ private Button addButton;
+
+ private final GUIHelper guiHelper = GUIHelper.getInstance();
+ private Composite composite;
+
+ public ServerAdditionDialog(Shell shell) {
+ super(shell);
+ }
+
+ @Override
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+
+ newShell.setText("Gluster Management Console - Add Server");
+ addEscapeListener(newShell);
+ }
+
+ private void addEscapeListener(Shell shell) {
+ shell.addTraverseListener(new TraverseListener() {
+
+ @Override
+ public void keyTraversed(TraverseEvent e) {
+ if (e.keyCode == SWT.ESC) {
+ cancelPressed();
+ }
+ }
+ });
+ }
+
+ /**
+ * Overriding to make sure that the dialog is centered in screen
+ */
+ @Override
+ protected void initializeBounds() {
+ super.initializeBounds();
+
+ guiHelper.centerShellInScreen(getShell());
+ }
+
+ private void configureDialogLayout(Composite composite) {
+ GridLayout layout = (GridLayout) composite.getLayout();
+ layout.numColumns = 2;
+ layout.marginLeft = 20;
+ layout.marginRight = 20;
+ layout.marginTop = 20;
+ layout.horizontalSpacing = 20;
+ layout.verticalSpacing = 20;
+ }
+
+ // ------------------------------------------
+
+ private void createLabel(Composite composite, String label) {
+ Label passwordLabel = new Label(composite, SWT.NONE);
+ passwordLabel.setText(label);
+ passwordLabel.setLayoutData(new GridData(GridData.END, GridData.CENTER, false, false));
+ }
+
+ private Text createServerNameText(Composite composite) {
+ Text field = new Text(composite, SWT.BORDER );
+ GridData layoutData = new GridData(SWT.FILL, GridData.FILL, true, false);
+ layoutData.widthHint = convertWidthInCharsToPixels(32);
+ field.setLayoutData(layoutData);
+ return field;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+// parent.setBackgroundImage(guiHelper.getImage(IImageKeys.DIALOG_SPLASH_IMAGE));
+ parent.setBackgroundMode(SWT.INHERIT_FORCE);
+
+ composite = (Composite) super.createDialogArea(parent);
+ configureDialogLayout(composite);
+
+ createLabel(composite, "Server Name:");
+ serverName = createServerNameText(composite);
+
+ createListeners();
+
+ return composite;
+ }
+
+ private void createListeners() {
+ ModifyListener listener = new ModifyListener() {
+
+ @Override
+ public void modifyText(ModifyEvent e) {
+ updateButtonStatus();
+ }
+ };
+
+ serverName.addModifyListener(listener);
+ }
+
+ private void updateButtonStatus() {
+ if(serverName.getText().isEmpty()) {
+ addButton.setEnabled(false);
+ return;
+ }
+
+ addButton.setEnabled(true);
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent) {
+ addButton = createButton(parent, IDialogConstants.OK_ID, "&Add Server", true);
+ addButton.setEnabled(false);
+ createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false);
+
+ setupDataBinding();
+ }
+
+ private void setupDataBinding() {
+ DataBindingContext dataBindingContext = new DataBindingContext(SWTObservables.getRealm(Display.getCurrent()));
+ UpdateValueStrategy serverNameBindingStrategy = new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
+
+ // The Validator shows error decoration and disables OK button on
+ // validation failure
+ serverNameBindingStrategy.setBeforeSetValidator(new StringRequiredValidator("Please enter server name!",
+ guiHelper.createErrorDecoration(serverName), null));
+
+ dataBindingContext.bindValue(WidgetProperties.text(SWT.Modify).observe(serverName),
+ PojoProperties.value("serverName").observe(serverName.getText()), serverNameBindingStrategy,
+ serverNameBindingStrategy);
+
+ }
+
+ protected void okPressed() {
+ GlusterServersClient serversClient = new GlusterServersClient();
+ try {
+ serversClient.addServer(serverName.getText());
+
+ MessageDialog.openInformation(getShell(), "Add Server", "Server added successfully!");
+ } catch (Exception e) {
+ MessageDialog.openError(getShell(), "Server addition Failed", e.getMessage());
+ setReturnCode(RETURN_CODE_ERROR);
+ }
+ this.close();
+ }
+}
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java
index bf81b3aa..54e289bc 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/ClusterSummaryView.java
@@ -20,6 +20,7 @@
*/
package com.gluster.storage.management.gui.views;
+import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -40,6 +41,7 @@ import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;
import com.gluster.storage.management.client.GlusterDataModelManager;
+import com.gluster.storage.management.client.GlusterServersClient;
import com.gluster.storage.management.core.model.Alert;
import com.gluster.storage.management.core.model.Cluster;
import com.gluster.storage.management.core.model.EntityGroup;
@@ -47,6 +49,8 @@ import com.gluster.storage.management.core.model.GlusterDataModel;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
import com.gluster.storage.management.core.model.Server;
+import com.gluster.storage.management.core.model.ServerStats;
+import com.gluster.storage.management.core.model.ServerStatsRow;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.core.utils.NumberUtil;
import com.gluster.storage.management.gui.IImageKeys;
@@ -160,7 +164,7 @@ public class ClusterSummaryView extends ViewPart {
alertImage = guiHelper.getImage(IImageKeys.LOW_DISK_SPACE);
break;
case OFFLINE_SERVERS_ALERT:
- alertImage = guiHelper.getImage(IImageKeys.STATUS_OFFLINE);
+ alertImage = guiHelper.getImage(IImageKeys.SERVER_OFFLINE);
break;
case MEMORY_USAGE_ALERT:
alertImage = guiHelper.getImage(IImageKeys.MEMORY_USAGE_ALERT);
@@ -229,24 +233,26 @@ public class ClusterSummaryView extends ViewPart {
toolkit.createLabel(section, "This section will be populated after at least\none server is added to the storage cloud.");
return;
}
- //toolkit.createLabel(section, "Historical CPU Usage graph aggregated across\nall servers will be displayed here.");
+
+ ServerStats stats = new GlusterServersClient().getAggregatedCPUStats();
+ List<Calendar> timestamps = new ArrayList<Calendar>();
+ List<Double> data = new ArrayList<Double>();
+ for(ServerStatsRow row : stats.getRows()) {
+ timestamps.add(new CDateTime(row.getTimestamp() * 1000));
+ // in case of CPU usage, there are three elements in usage data: user, system and total. we use total.
+ data.add(row.getUsageData().get(2));
+ }
-// Date[] timestamps = new Date[] { new Date(1310468100), new Date(1310468400), new Date(1310468700),
-// new Date(1310469000), new Date(1310469300), new Date(1310469600), new Date(1310469900),
-// new Date(1310470200), new Date(1310470500), new Date(1310470800), new Date(1310471100),
-// new Date(1310471400), new Date(1310471700), new Date(1310472000), new Date(1310472300),
-// new Date(1310472600), new Date(1310472900), new Date(1310473200), new Date(1310473500),
-// new Date(1310473800) };
- Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700),
- new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900),
- new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100),
- new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300),
- new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500),
- new CDateTime(1000l*1310473800) };
+// Calendar[] timestamps = new Calendar[] { new CDateTime(1000l*1310468100), new CDateTime(1000l*1310468400), new CDateTime(1000l*1310468700),
+// new CDateTime(1000l*1310469000), new CDateTime(1000l*1310469300), new CDateTime(1000l*1310469600), new CDateTime(1000l*1310469900),
+// new CDateTime(1000l*1310470200), new CDateTime(1000l*1310470500), new CDateTime(1000l*1310470800), new CDateTime(1000l*1310471100),
+// new CDateTime(1000l*1310471400), new CDateTime(1000l*1310471700), new CDateTime(1000l*1310472000), new CDateTime(1000l*1310472300),
+// new CDateTime(1000l*1310472600), new CDateTime(1000l*1310472900), new CDateTime(1000l*1310473200), new CDateTime(1000l*1310473500),
+// new CDateTime(1000l*1310473800) };
//String[] timestampsarr = new String[] {"t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20"};
- Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 89.31d, 57.39d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 21.43d, 16.45d, 14.86d, 15.27d };
- createLineChart(section, timestamps, values);
+ //Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 89.31d, 57.39d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 21.43d, 16.45d, 14.86d, 15.27d };
+ createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0]));
}
private void createNetworkUsageSection() {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
index 50da72ff..1a89ae7e 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/GlusterServerSummaryView.java
@@ -23,6 +23,7 @@ package com.gluster.storage.management.gui.views;
import java.util.ArrayList;
import java.util.List;
+import org.eclipse.birt.chart.util.CDateTime;
import org.eclipse.jface.layout.TableColumnLayout;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ColumnWeightData;
@@ -42,18 +43,21 @@ import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.part.ViewPart;
import com.gluster.storage.management.client.GlusterDataModelManager;
+import com.gluster.storage.management.client.GlusterServersClient;
import com.gluster.storage.management.core.model.ClusterListener;
import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.Event;
import com.gluster.storage.management.core.model.GlusterServer;
+import com.gluster.storage.management.core.model.ServerStatsRow;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
+import com.gluster.storage.management.core.model.ServerStats;
import com.gluster.storage.management.core.utils.NumberUtil;
import com.gluster.storage.management.gui.IImageKeys;
import com.gluster.storage.management.gui.NetworkInterfaceTableLabelProvider;
import com.gluster.storage.management.gui.toolbar.GlusterToolbarManager;
import com.gluster.storage.management.gui.utils.ChartViewerComposite;
-import com.gluster.storage.management.gui.utils.ChartViewerComposite.CHART_TYPE;
import com.gluster.storage.management.gui.utils.GUIHelper;
+import com.ibm.icu.util.Calendar;
import com.richclientgui.toolbox.gauges.CoolGauge;
public class GlusterServerSummaryView extends ViewPart {
@@ -101,7 +105,7 @@ public class GlusterServerSummaryView extends ViewPart {
GlusterDataModelManager.getInstance().removeClusterListener(serverChangedListener);
}
- private void createLineChart(Composite section, String timestamps[], Double values[]) {
+ private void createLineChart(Composite section, Calendar timestamps[], Double values[]) {
ChartViewerComposite chartViewerComposite = new ChartViewerComposite(section, SWT.NONE, timestamps, values);
GridData data = new GridData(SWT.FILL, SWT.FILL, false, false);
data.widthHint = 450;
@@ -119,9 +123,18 @@ public class GlusterServerSummaryView extends ViewPart {
Composite section = guiHelper.createSection(form, toolkit, "CPU Usage (aggregated)", null, 1, false);
//toolkit.createLabel(section, "Historical CPU Usage graph aggregated across\nall servers will be displayed here.");
- String[] timestamps = new String[] {"t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20"};
- Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 20.31d, 19.63d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 40d, 10d, 90d, 40d };
- createLineChart(section, timestamps, values);
+// String[] timestamps = new String[] {"t1", "t2", "t3", "t4", "t5", "t6", "t7", "t8", "t9", "t10", "t11", "t12", "t13", "t14", "t15", "t16", "t17", "t18", "t19", "t20"};
+// Double[] values = new Double[] { 10d, 11.23d, 17.92d, 18.69d, 78.62d, 89.11d, 92.43d, 20.31d, 19.63d, 18.46d, 10.44d, 16.28d, 13.51d, 17.53d, 12.21, 20d, 40d, 10d, 90d, 40d };
+ ServerStats stats = new GlusterServersClient().getAggregatedCPUStats();
+ List<Calendar> timestamps = new ArrayList<Calendar>();
+ List<Double> data = new ArrayList<Double>();
+ for(ServerStatsRow row : stats.getRows()) {
+ timestamps.add(new CDateTime(row.getTimestamp() * 1000));
+ // in case of CPU usage, there are three elements in usage data: user, system and total. we use total.
+ data.add(row.getUsageData().get(2));
+ }
+
+ createLineChart(section, timestamps.toArray(new Calendar[0]), data.toArray(new Double[0]));
}
private void createSections(Composite parent) {
diff --git a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java
index 447524a4..1c63e1c3 100644
--- a/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java
+++ b/src/com.gluster.storage.management.gui/src/com/gluster/storage/management/gui/views/pages/AbstractDisksPage.java
@@ -42,11 +42,14 @@ import org.eclipse.ui.forms.widgets.ImageHyperlink;
import com.gluster.storage.management.client.GlusterDataModelManager;
import com.gluster.storage.management.client.GlusterServersClient;
import com.gluster.storage.management.client.TasksClient;
+import com.gluster.storage.management.core.model.ClusterListener;
+import com.gluster.storage.management.core.model.DefaultClusterListener;
import com.gluster.storage.management.core.model.Device;
import com.gluster.storage.management.core.model.Device.DEVICE_STATUS;
import com.gluster.storage.management.core.model.Disk;
import com.gluster.storage.management.core.model.Entity;
import com.gluster.storage.management.core.model.Partition;
+import com.gluster.storage.management.core.model.Status;
import com.gluster.storage.management.core.model.TaskInfo;
import com.gluster.storage.management.gui.Application;
import com.gluster.storage.management.gui.IEntityListener;
@@ -70,7 +73,11 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
Application.getApplication().addEntityListener(this);
}
- private void createInitializeLink(final TreeItem item, final int rowNum, final Device device) {
+ protected ClusterListener createClusterListener() {
+ return new DefaultClusterListener();
+ }
+
+ private void createInitializeLink(final TreeItem item, final int rowNum, final Device uninitializedDevice) {
final Tree tree = treeViewer.getTree();
final TreeEditor editor = new TreeEditor(tree);
editor.grabHorizontal = true;
@@ -82,7 +89,7 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
private ImageHyperlink myLink = null;
private TreeEditor myEditor = null;
- private void createLinkFor(Device device, TreeItem item1, int rowNum1) {
+ private void createLinkFor(Device uninitializedDevice, TreeItem item1, int rowNum1) {
myItem = item1;
myRowNum = rowNum1;
@@ -93,7 +100,7 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
myLink = toolkit.createImageHyperlink(tree, SWT.NONE);
// link.setImage(guiHelper.getImage(IImageKeys.DISK_UNINITIALIZED));
myLink.setText("Initialize");
- myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, treeViewer, device));
+ myLink.addHyperlinkListener(new StatusLinkListener(myLink, myEditor, treeViewer, uninitializedDevice));
myEditor.setEditor(myLink, item1, getStatusColumnIndex());
@@ -111,14 +118,15 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
int itemCount = tree.getItemCount();
// Find the table item corresponding to our disk
- Disk disk = null;
+
+ Device device = null;
int rowNum1 = -1;
TreeItem item1 = null;
for (int i = 0; i < itemCount; i++) {
item1 = tree.getItem(i);
- disk = (Disk) item1.getData();
- if (disk != null && disk == device) {
+ device = (Device) item1.getData();
+ if (device != null && device == uninitializedDevice) {
// this is an uninitialized "disk"
rowNum1 = i;
break;
@@ -129,10 +137,11 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
TreeItem partitionItem = item1.getItem(j);
// check each partition
Device partition = (Device)partitionItem.getData();
- if(partition != null && partition == device) {
+ if(partition != null && partition == uninitializedDevice) {
// this is an uninitialized "partition"
rowNum1 = i + j;
item1 = partitionItem;
+ device = (Device) partitionItem.getData();
break;
}
}
@@ -147,14 +156,14 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
// item visible, and
// either editor never created, OR
// old item disposed. create the link for it
- createLinkFor(disk, item1, rowNum1);
+ createLinkFor(device, item1, rowNum1);
}
if (rowNum1 != myRowNum) {
// disk visible, but at a different row num. re-create the link
myLink.dispose();
myEditor.dispose();
- createLinkFor(disk, item1, rowNum1);
+ createLinkFor(device, item1, rowNum1);
}
myEditor.layout(); // IMPORTANT. Without this, the link location goes for a toss on maximize + restore
@@ -219,14 +228,22 @@ public abstract class AbstractDisksPage extends AbstractTableTreeViewerPage<Disk
GlusterServersClient serversClient = new GlusterServersClient();
try {
+
URI uri = serversClient.initializeDisk(device.getServerName(), device.getName(), formatDialog.getFSType());
TasksClient taskClient = new TasksClient();
TaskInfo taskInfo = taskClient.getTaskInfo(uri);
+
if (taskInfo != null && taskInfo instanceof TaskInfo) {
GlusterDataModelManager.getInstance().getModel().getCluster().addTaskInfo(taskInfo);
}
- updateStatus(DEVICE_STATUS.INITIALIZING, true);
+
+ if (taskInfo.getStatus().getCode() == Status.STATUS_CODE_RUNNING) {
+ updateStatus(DEVICE_STATUS.INITIALIZING, true);
+ } else if(taskInfo.getStatus().getCode() == Status.STATUS_CODE_SUCCESS) {
+ updateStatus(DEVICE_STATUS.INITIALIZED, true);
+ }
+
} catch (Exception e1) {
MessageDialog.openError(getShell(), "Error: Initialize disk", e1.getMessage());
}
diff --git a/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py b/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py
index e796f479..bffbe940 100644
--- a/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py
+++ b/src/com.gluster.storage.management.server.scripts/src/DiskUtils.py
@@ -101,6 +101,17 @@ def getDiskPartitionLabel(device):
return False
+def readFile(fileName):
+ lines = None
+ try:
+ fp = open(fileName)
+ lines = fp.readlines()
+ fp.close()
+ except IOError, e:
+ Utils.log("failed to read file %s: %s" % (file, str(e)))
+ return lines
+
+
def getRootPartition(fsTabFile=Globals.FSTAB_FILE):
fsTabEntryList = readFsTab(fsTabFile)
for fsTabEntry in fsTabEntryList:
@@ -162,7 +173,7 @@ def getRaidDisk():
if not rv["Stderr"]:
words = rv["Stdout"].strip().split()
if words:
- raid['Type'] = "INITIALIZED"
+ raid['Status'] = "INITIALIZED"
if len(words) > 2:
raid['Uuid'] = words[1].split("UUID=")[-1].split('"')[1]
raid['FsType'] = words[2].split("TYPE=")[-1].split('"')[1]
@@ -307,7 +318,7 @@ def getDiskInfo(diskDeviceList=None):
partition["SpaceInUse"] = used
if partition["MountPoint"] or isDataDiskPartitionFormatted(partitionDevice):
partition["Init"] = True
- #partition["Status"] = "INITIALIZED"
+ partition["Status"] = "INITIALIZED"
if partition["MountPoint"]:
if "/export/" in partition["MountPoint"]:
partition["Type"] = "DATA"
@@ -323,6 +334,32 @@ def getDiskInfo(diskDeviceList=None):
disk["SpaceInUse"] = diskSpaceInUse
diskList.append(disk)
diskInfo["disks"] = diskList
+ if diskList:
+ return diskInfo
+ for line in readFile("/proc/partitions")[2:]:
+ disk = {}
+ tokens = line.split()
+ if tokens[3].startswith("md"):
+ continue
+ disk["Device"] = tokens[3]
+ ## if diskDeviceList and disk["Device"] not in diskDeviceList:
+ ## continue
+ disk["Description"] = None
+ disk["Size"] = long(tokens[2]) / 1024
+ disk["Status"] = None
+ disk["Interface"] = None
+ disk["DriveType"] = None
+ disk["Uuid"] = None
+ disk["Init"] = False
+ disk["Type"] = None
+ disk["FsType"] = None
+ disk["FsVersion"] = None
+ disk["MountPoint"] = None
+ disk["ReadOnlyAccess"] = None
+ disk["SpaceInUse"] = None
+ disk["Partitions"] = []
+ diskList.append(disk)
+ diskInfo["disks"] = diskList
return diskInfo
def getDiskList(diskDeviceList=None):
@@ -515,12 +552,12 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None):
diskTag.appendChild(diskDom.createTag("status", disk["Status"]))
diskTag.appendChild(diskDom.createTag("interface", disk["Interface"]))
- if not disk["Partitions"]:
- diskTag.appendChild(diskDom.createTag("type", disk["Type"]))
- #diskTag.appendChild(diskDom.createTag("init", str(disk["Init"]).lower()))
- diskTag.appendChild(diskDom.createTag("fsType", disk["FsType"]))
- diskTag.appendChild(diskDom.createTag("fsVersion", disk["FsVersion"]))
- diskTag.appendChild(diskDom.createTag("mountPoint", disk["MountPoint"]))
+ #if not disk["Partitions"]:
+ diskTag.appendChild(diskDom.createTag("type", disk["Type"]))
+ #diskTag.appendChild(diskDom.createTag("init", str(disk["Init"]).lower()))
+ diskTag.appendChild(diskDom.createTag("fsType", disk["FsType"]))
+ diskTag.appendChild(diskDom.createTag("fsVersion", disk["FsVersion"]))
+ diskTag.appendChild(diskDom.createTag("mountPoint", disk["MountPoint"]))
diskTag.appendChild(diskDom.createTag("size", disk["Size"]))
diskTag.appendChild(diskDom.createTag("spaceInUse", disk["SpaceInUse"]))
@@ -528,7 +565,9 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None):
if raidPartitions.has_key(diskDevice):
rdList = {}
rdList[diskDevice] = [deepcopy(diskTag)]
- raidDisks[raidPartitions[diskDevice]] = rdList
+ if not raidDisks.has_key(raidPartitions[diskDevice]):
+ raidDisks[raidPartitions[diskDevice]] = []
+ raidDisks[raidPartitions[diskDevice]] += [rdList]
continue
for partition in disk["Partitions"]:
partitionTag = diskDom.createTag("partition", None)
@@ -549,16 +588,17 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None):
tempPartitionTag = diskDom.createTag("partitions", None)
if raidDisks.has_key(raidPartitions[device]):
rdList = raidDisks[raidPartitions[device]]
- if not rdList.has_key(diskDevice):
- rdList[diskDevice] = [deepcopy(diskTag), tempPartitionTag]
- rdList[diskDevice][0].appendChild(tempPartitionTag)
- rdList[diskDevice][-1].appendChild(partitionTag)
+ for rdItem in rdList:
+ if not rdItem.has_key(diskDevice):
+ rdItem[diskDevice] = [deepcopy(diskTag), tempPartitionTag]
+ rdItem[diskDevice][0].appendChild(tempPartitionTag)
+ rdItem[diskDevice][-1].appendChild(partitionTag)
continue
rdList = {}
rdList[diskDevice] = [deepcopy(diskTag), tempPartitionTag]
tempPartitionTag.appendChild(partitionTag)
rdList[diskDevice][0].appendChild(tempPartitionTag)
- raidDisks[raidPartitions[device]] = rdList
+ raidDisks[raidPartitions[device]] = [rdList]
continue
partitionsTag.appendChild(partitionTag)
diskTag.appendChild(partitionsTag)
@@ -579,8 +619,9 @@ def getDiskDom(diskDeviceList=None, bootPartition=None, skipDisk=None):
raidDiskTag.appendChild(diskDom.createTag("spaceInUse", raidDisk[rdisk]['SpaceInUse']))
raidDisksTag = diskDom.createTag("raidDisks", None)
if raidDisks.has_key(rdisk):
- for diskTag in raidDisks[rdisk].values():
- raidDisksTag.appendChild(diskTag[0])
+ for item in raidDisks[rdisk]:
+ for diskTag in item.values():
+ raidDisksTag.appendChild(diskTag[0])
raidDiskTag.appendChild(raidDisksTag)
disksTag.appendChild(raidDiskTag)
diskDom.addTag(disksTag)
diff --git a/src/com.gluster.storage.management.server.scripts/src/get_brick_status.py b/src/com.gluster.storage.management.server.scripts/src/get_brick_status.py
new file mode 100755
index 00000000..8d827bd2
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/get_brick_status.py
@@ -0,0 +1,45 @@
+#!/usr/bin/python
+# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
+# This file is part of Gluster Management Console.
+#
+
+import os
+import sys
+import Utils
+from XmlHandler import ResponseXml
+
+def main():
+ if len(sys.argv) != 3:
+ sys.stderr.write("usage: %s VOLUME_NAME BRICK_NAME\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ volumeName = sys.argv[1]
+ brickName = sys.argv[2]
+ pidFile = "/etc/glusterd/vols/%s/run/%s.pid" % (volumeName, brickName.replace(":", "-").replace("/", "-"))
+
+ responseDom = ResponseXml()
+ responseDom.appendTagRoute("volumeName", volumeName)
+ responseDom.appendTagRoute("brickName", brickName)
+ if not os.path.exists(pidFile):
+ responseDom.appendTagRoute("brickStatus", "OFFLINE")
+ else:
+ try:
+ fp = open(pidFile)
+ pidString = fp.readline()
+ fp.close()
+ os.getpgid(int(pidString))
+ responseDom.appendTagRoute("brickStatus", "ONLINE")
+ except IOError, e:
+ Utils.log("failed to open file %s: %s" % (pidFile, str(e)))
+ responseDom.appendTagRoute("brickStatus", "UNKNOWN")
+ except ValueError, e:
+ Utils.log("invalid pid %s in file %s: %s" % (pidString, pidFile, str(e)))
+ responseDom.appendTagRoute("brickStatus", "UNKNOWN")
+ except OSError, e:
+ #Utils.log("failed to get process detail of pid %s: %s" % (pidString, str(e)))
+ responseDom.appendTagRoute("brickStatus", "OFFLINE")
+ print responseDom.toxml()
+ sys.exit(0)
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/get_server_status.py b/src/com.gluster.storage.management.server.scripts/src/get_server_status.py
new file mode 100755
index 00000000..4e089b4b
--- /dev/null
+++ b/src/com.gluster.storage.management.server.scripts/src/get_server_status.py
@@ -0,0 +1,25 @@
+#!/usr/bin/python
+# Copyright (C) 2011 Gluster, Inc. <http://www.gluster.com>
+# This file is part of Gluster Management Console.
+#
+
+import os
+import sys
+import Utils
+from XmlHandler import ResponseXml
+
+def main():
+ if len(sys.argv) != 1:
+ sys.stderr.write("usage: %s\n" % os.path.basename(sys.argv[0]))
+ sys.exit(-1)
+
+ responseDom = ResponseXml()
+ if Utils.runCommand("pidof glusterd") == 0:
+ responseDom.appendTagRoute("serverStatus", "ONLINE")
+ else:
+ responseDom.appendTagRoute("serverStatus", "OFFLINE")
+ print responseDom.toxml()
+ sys.exit(0)
+
+if __name__ == "__main__":
+ main()
diff --git a/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py b/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py
index 89d7df38..a3b2776d 100755
--- a/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py
+++ b/src/com.gluster.storage.management.server.scripts/src/gluster_provision_block_wrapper.py
@@ -89,26 +89,15 @@ def main():
writeStatus(deviceFormatStatusFile, "Device format failed\n")
sys.exit(5)
- ## try:
- ## process = subprocess.Popen(command,
- ## stdout=fptr,
- ## stderr=subprocess.PIPE,
- ## stdin=subprocess.PIPE,
- ## close_fds=True)
- ## status = process.wait()
- ## except OSError:
- ## os.unlink(deviceFormatOutputFile)
- ## Utils.log(syslog.LOG_ERR, "formatting disk command failed. command: %s" % str(command))
- ## writeStatus(deviceFormatStatusFile, "Formatting disk command failed\n")
- ## removeLockFile()
- ## sys.exit(-5)
-
if status != 0:
Utils.removeFile(deviceFormatOutputFile)
Utils.removeFile(deviceFormatLockFile)
writeStatus(deviceFormatStatusFile, "Device format failed\n")
sys.exit(6)
+ if Utils.runCommand("/sbin/udevtrigger") != 0:
+ Utils.log("failed running /sbin/udevtrigger")
+
if Utils.runCommand("/usr/bin/lshal") != 0:
Utils.log("failed running /usr/bin/lshal")
writeStatus(deviceFormatStatusFile, "Completed\n")
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
index 431de952..45125513 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/ClustersResource.java
@@ -37,8 +37,10 @@ import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
+import org.apache.log4j.Logger;
import org.springframework.stereotype.Component;
+import com.gluster.storage.management.core.exceptions.GlusterValidationException;
import com.gluster.storage.management.core.response.ClusterNameListResponse;
import com.gluster.storage.management.server.data.ClusterInfo;
import com.gluster.storage.management.server.services.ClusterService;
@@ -54,6 +56,7 @@ import com.sun.jersey.spi.resource.Singleton;
public class ClustersResource extends AbstractResource {
@InjectParam
private ClusterService clusterService;
+ private static final Logger logger = Logger.getLogger(ClustersResource.class);
@GET
@Produces(MediaType.APPLICATION_XML)
@@ -69,73 +72,55 @@ public class ClustersResource extends AbstractResource {
@POST
public Response createCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName) {
if(clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
+ throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
}
if(clusterService.getCluster(clusterName) != null) {
- return badRequestResponse("Cluster [" + clusterName + "] already exists!");
+ throw new GlusterValidationException("Cluster [" + clusterName + "] already exists!");
}
- try {
- clusterService.createCluster(clusterName);
- return createdResponse(clusterName);
- } catch (Exception e) {
- // TODO: Log the exception
- return errorResponse("Exception while trying to save cluster [" + clusterName + "]: [" + e.getMessage()
- + "]");
- }
+ clusterService.createCluster(clusterName);
+ return createdResponse(clusterName);
}
@PUT
public Response registerCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName,
@FormParam(FORM_PARAM_SERVER_NAME) String knownServer) {
if(clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
+ throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
}
if(knownServer == null || knownServer.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_SERVER_NAME + "] is missing in request!");
+ throw new GlusterValidationException("Parameter [" + FORM_PARAM_SERVER_NAME + "] is missing in request!");
}
if(clusterService.getCluster(clusterName) != null) {
- return badRequestResponse("Cluster [" + clusterName + "] already exists!");
+ throw new GlusterValidationException("Cluster [" + clusterName + "] already exists!");
}
ClusterInfo mappedCluster = clusterService.getClusterForServer(knownServer);
if(mappedCluster != null) {
- return badRequestResponse("Server [" + knownServer + "] is already present in cluster ["
+ throw new GlusterValidationException("Server [" + knownServer + "] is already present in cluster ["
+ mappedCluster.getName() + "]!");
}
- try {
- clusterService.registerCluster(clusterName, knownServer);
- return noContentResponse(clusterName);
- } catch(Exception e) {
- // TODO: Log the exception
- return errorResponse("Exception while trying to register cluster [" + clusterName + "] using server ["
- + knownServer + "]: [" + e.getMessage() + "]");
- }
+ clusterService.registerCluster(clusterName, knownServer);
+ return noContentResponse(clusterName);
}
@Path("{" + PATH_PARAM_CLUSTER_NAME + "}")
@DELETE
public Response unregisterCluster(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
if(clusterName == null || clusterName.isEmpty()) {
- return badRequestResponse("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
+ throw new GlusterValidationException("Parameter [" + FORM_PARAM_CLUSTER_NAME + "] is missing in request!");
}
ClusterInfo cluster = clusterService.getCluster(clusterName);
if(cluster == null) {
- return badRequestResponse("Cluster [" + clusterName + "] does not exist!");
+ throw new GlusterValidationException("Cluster [" + clusterName + "] does not exist!");
}
- try {
- clusterService.unregisterCluster(cluster);
- return noContentResponse();
- } catch (Exception e) {
- // TODO: Log the exception
- return errorResponse("Exception while trying to unregister cluster [" + clusterName + "]: ["
- + e.getMessage() + "]");
- }
+ clusterService.unregisterCluster(cluster);
+ return noContentResponse();
}
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
index 09391841..271161b9 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/GlusterServersResource.java
@@ -31,8 +31,8 @@ import static com.gluster.storage.management.core.constants.RESTConstants.RESOUR
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_STATISTICS;
import static com.gluster.storage.management.core.constants.RESTConstants.RESOURCE_TASKS;
import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_CPU;
-import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_NETWORK;
import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_MEMORY;
+import static com.gluster.storage.management.core.constants.RESTConstants.STATISTICS_TYPE_NETWORK;
import java.util.ArrayList;
import java.util.List;
@@ -56,9 +56,9 @@ import com.gluster.storage.management.core.constants.CoreConstants;
import com.gluster.storage.management.core.constants.RESTConstants;
import com.gluster.storage.management.core.exceptions.ConnectionException;
import com.gluster.storage.management.core.exceptions.GlusterRuntimeException;
-import com.gluster.storage.management.core.model.ServerStats;
import com.gluster.storage.management.core.model.GlusterServer;
import com.gluster.storage.management.core.model.GlusterServer.SERVER_STATUS;
+import com.gluster.storage.management.core.model.TaskStatus;
import com.gluster.storage.management.core.response.GlusterServerListResponse;
import com.gluster.storage.management.core.response.ServerNameListResponse;
import com.gluster.storage.management.server.data.ClusterInfo;
@@ -455,6 +455,9 @@ public class GlusterServersResource extends AbstractServersResource {
InitializeDiskTask initializeTask = new InitializeDiskTask(clusterService, clusterName, serverName, diskName, fsType);
try {
initializeTask.start();
+ // Check the initialize disk status
+ TaskStatus taskStatus = initializeTask.checkStatus();
+ initializeTask.getTaskInfo().setStatus(taskStatus);
taskResource.addTask(initializeTask);
return acceptedResponse(RESTConstants.RESOURCE_PATH_CLUSTERS + "/" + clusterName + "/" + RESOURCE_TASKS + "/"
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java
index b455a255..0fa49dc3 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/resources/v1_0/TasksResource.java
@@ -122,8 +122,8 @@ public class TasksResource extends AbstractResource {
private Task checkTaskStatus(String taskId) {
Task task = getTask(taskId);
// No status check required if the task already complete or failure
- if (task.getTaskInfo().getStatus() == Status.STATUS_FAILURE
- || task.getTaskInfo().getStatus() == Status.STATUS_SUCCESS) {
+ if (task.getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_FAILURE
+ || task.getTaskInfo().getStatus().getCode() == Status.STATUS_CODE_SUCCESS) {
return task;
}
task.getTaskInfo().setStatus(task.checkStatus());
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java
index b622c3a1..59cb185b 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/services/ClusterService.java
@@ -29,6 +29,7 @@ import javax.persistence.EntityTransaction;
import javax.ws.rs.FormParam;
import javax.ws.rs.PathParam;
+import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@@ -67,6 +68,8 @@ public class ClusterService {
private LRUCache<String, GlusterServer> onlineServerCache = new LRUCache<String, GlusterServer>(3);
+ private static final Logger logger = Logger.getLogger(ClusterService.class);
+
public void addOnlineServer(String clusterName, GlusterServer server) {
onlineServerCache.put(clusterName, server);
}
@@ -142,7 +145,7 @@ public class ClusterService {
return servers.get(0).getCluster();
}
- public void createCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName) {
+ public void createCluster(String clusterName) {
EntityTransaction txn = clusterDao.startTransaction();
ClusterInfo cluster = new ClusterInfo();
cluster.setName(clusterName);
@@ -152,12 +155,12 @@ public class ClusterService {
txn.commit();
} catch (RuntimeException e) {
txn.rollback();
+ logger.error("Exception while trying to save cluster [" + clusterName + "] : [" + e.getMessage() + "]", e);
throw e;
}
}
- public void registerCluster(@FormParam(FORM_PARAM_CLUSTER_NAME) String clusterName,
- @FormParam(FORM_PARAM_SERVER_NAME) String knownServer) {
+ public void registerCluster(String clusterName, String knownServer) {
EntityTransaction txn = clusterDao.startTransaction();
ClusterInfo cluster = new ClusterInfo();
cluster.setName(clusterName);
@@ -180,7 +183,9 @@ public class ClusterService {
clusterDao.save(cluster);
txn.commit();
} catch(RuntimeException e) {
+ logger.error("Error in registering cluster [" + clusterName + "] : " + e.getMessage(), e);
txn.rollback();
+ logger.error("Error in registering cluster [" + clusterName + "] : " + e.getMessage(), e);
throw e;
}
}
@@ -203,7 +208,7 @@ public class ClusterService {
sshUtil.installPublicKey(serverName);
}
- public void unregisterCluster(@PathParam(PATH_PARAM_CLUSTER_NAME) String clusterName) {
+ public void unregisterCluster(String clusterName) {
ClusterInfo cluster = getCluster(clusterName);
if (cluster == null) {
@@ -216,9 +221,15 @@ public class ClusterService {
public void unregisterCluster(ClusterInfo cluster) {
EntityTransaction txn = clusterDao.startTransaction();
try {
+ for(ServerInfo server : cluster.getServers()) {
+ clusterDao.delete(server);
+ }
+ cluster.getServers().clear();
+ clusterDao.update(cluster);
clusterDao.delete(cluster);
txn.commit();
} catch (RuntimeException e) {
+ logger.error("Error in unregistering cluster [" + cluster.getName() + "] : " + e.getMessage(), e);
txn.rollback();
throw e;
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
index 2fe2373b..4f168d66 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/tasks/InitializeDiskTask.java
@@ -53,6 +53,7 @@ public class InitializeDiskTask extends Task {
setServerName(serverName);
setDiskName(diskName);
setFsType(fsType);
+ taskInfo.setName(getId());
init();
}
@@ -134,7 +135,7 @@ public class InitializeDiskTask extends Task {
public TaskStatus checkStatus() {
try {
- return glusterUtil.checkInitializeDiskStatus(serverName, getDiskName());
+ return glusterUtil.getInitializingDeviceStatus(serverName, getDiskName());
} catch(ConnectionException e) {
// online server might have gone offline. update the failure status
return new TaskStatus(new Status(Status.STATUS_CODE_FAILURE, e.getMessage()));
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
index a32c4f18..9878f223 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/GlusterUtil.java
@@ -578,7 +578,7 @@ public class GlusterUtil {
}
}
- public TaskStatus checkInitializeDiskStatus(String serverName, String diskName) {
+ public TaskStatus getInitializingDeviceStatus(String serverName, String diskName) {
Object response = serverUtil.executeOnServer(true, serverName, INITIALIZE_DISK_STATUS_SCRIPT + " " + diskName,
InitDiskStatusResponse.class);
@@ -597,8 +597,10 @@ public class GlusterUtil {
taskStatus.setCode(Status.STATUS_CODE_RUNNING);
taskStatus.setPercentCompleted(Math.round(initDiskStatusResponse.getCompletedBlocks()
/ initDiskStatusResponse.getTotalBlocks() * 100));
+ } else if(initDiskStatusResponse.getFormatStatus() == FORMAT_STATUS.NOT_RUNNING) {
+ taskStatus.setCode(Status.STATUS_CODE_FAILURE);
}
-
+
taskStatus.setMessage(initDiskStatusResponse.getMessage());
return taskStatus;
}
diff --git a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
index 55be59b4..775ca221 100644
--- a/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
+++ b/src/com.gluster.storage.management.server/src/com/gluster/storage/management/server/utils/ServerUtil.java
@@ -21,6 +21,7 @@
package com.gluster.storage.management.server.utils;
import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -29,6 +30,7 @@ import java.util.List;
import javax.servlet.ServletContext;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.apache.log4j.Logger;
@@ -225,7 +227,7 @@ public class ServerUtil {
}
public ServerStats fetchCPUUsageData(String serverName) {
- String cpuUsageData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> <xport> <meta> <start>1310468100</start> <step>300</step> <end>1310471700</end> <rows>13</rows> <columns>3</columns> <legend> <entry>user</entry> <entry>system</entry> <entry>total</entry> </legend> </meta> <data> <row><t>1310468100</t><v>NaN</v><v>4.3747778209e-01</v><v>6.6128073384e-01</v></row> <row><t>1310468400</t><v>2.3387347338e-01</v><v>4.4642717442e-01</v><v>6.8030064780e-01</v></row> <row><t>1310468700</t><v>5.5043873220e+00</v><v>6.2462376636e+00</v><v>1.1750624986e+01</v></row> <row><t>1310469000</t><v>2.4350593653e+01</v><v>2.6214585217e+01</v><v>5.0565178869e+01</v></row> <row><t>1310469300</t><v>4.0786489953e+01</v><v>4.6784713828e+01</v><v>8.7571203781e+01</v></row> <row><t>1310469600</t><v>4.1459955508e+01</v><v>5.2546309044e+01</v><v>9.4006264551e+01</v></row> <row><t>1310469900</t><v>4.2312286165e+01</v><v>5.2390588332e+01</v><v>9.4702874497e+01</v></row> <row><t>1310470200</t><v>4.2603794982e+01</v><v>5.1598861493e+01</v><v>9.4202656475e+01</v></row> <row><t>1310470500</t><v>3.8238751290e+01</v><v>4.5312089966e+01</v><v>8.3550841256e+01</v></row> <row><t>1310470800</t><v>1.7949961224e+01</v><v>2.1282058418e+01</v><v>3.9232019642e+01</v></row> <row><t>1310471100</t><v>1.2330371421e-01</v><v>4.6347832868e-01</v><v>5.8678204289e-01</v></row> <row><t>1310471400</t><v>1.6313260492e-01</v><v>5.4088119561e-01</v><v>7.0401380052e-01</v></row> <row><t>1310471700</t><v>NaN</v><v>NaN</v><v>NaN</v></row> </data> </xport>";
+ String cpuUsageData = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> <xport> <meta> <start>1310468100</start> <step>300</step> <end>1310471700</end> <rows>13</rows> <columns>3</columns> <legend> <entry>user</entry> <entry>system</entry> <entry>total</entry> </legend> </meta> <data> <row><t>1310468100</t><v>2.23802952e-1</v><v>4.3747778209e-01</v><v>6.6128073384e-01</v></row> <row><t>1310468400</t><v>2.3387347338e-01</v><v>4.4642717442e-01</v><v>6.8030064780e-01</v></row> <row><t>1310468700</t><v>5.5043873220e+00</v><v>6.2462376636e+00</v><v>1.1750624986e+01</v></row> <row><t>1310469000</t><v>2.4350593653e+01</v><v>2.6214585217e+01</v><v>5.0565178869e+01</v></row> <row><t>1310469300</t><v>4.0786489953e+01</v><v>4.6784713828e+01</v><v>8.7571203781e+01</v></row> <row><t>1310469600</t><v>4.1459955508e+01</v><v>5.2546309044e+01</v><v>9.4006264551e+01</v></row> <row><t>1310469900</t><v>4.2312286165e+01</v><v>5.2390588332e+01</v><v>9.4702874497e+01</v></row> <row><t>1310470200</t><v>4.2603794982e+01</v><v>5.1598861493e+01</v><v>9.4202656475e+01</v></row> <row><t>1310470500</t><v>3.8238751290e+01</v><v>4.5312089966e+01</v><v>8.3550841256e+01</v></row> <row><t>1310470800</t><v>1.7949961224e+01</v><v>2.1282058418e+01</v><v>3.9232019642e+01</v></row> <row><t>1310471100</t><v>1.2330371421e-01</v><v>4.6347832868e-01</v><v>5.8678204289e-01</v></row> <row><t>1310471400</t><v>1.6313260492e-01</v><v>5.4088119561e-01</v><v>7.0401380052e-01</v></row> <row><t>1310471700</t><v>NaN</v><v>NaN</v><v>NaN</v></row> </data> </xport>";
Object output = unmarshal(ServerStats.class, cpuUsageData, false);
if(output instanceof Status) {
throw new GlusterRuntimeException(((Status)output).toString());
@@ -240,6 +242,7 @@ public class ServerUtil {
if(removeOnlineServer) {
serverNames.remove(serverName);
}
+ return stats;
} catch(Exception e) {
// server might be offline - continue with next one
logger.warn("Couldn't fetch CPU stats from server [" + serverName + "]!", e);
@@ -252,7 +255,7 @@ public class ServerUtil {
throw new GlusterRuntimeException("All servers offline!");
}
- public Object fetchAggregatedCPUStats(List<String> serverNames) {
+ public ServerStats fetchAggregatedCPUStats(List<String> serverNames) {
if(serverNames == null || serverNames.size() == 0) {
throw new GlusterRuntimeException("No server names passed to fetchAggregaredCPUUsageData!");
}
@@ -265,21 +268,29 @@ public class ServerUtil {
}
private void aggregateCPUStats(List<String> serverNames, ServerStats aggregatedStats) {
- int[][] dataCount = new int[aggregatedStats.getMetadata().getRowCount()][aggregatedStats.getMetadata()
- .getLegend().size()];
+ if(serverNames.isEmpty()) {
+ return;
+ }
+
+ int rowCount = aggregatedStats.getMetadata().getRowCount();
+ int columnCount = aggregatedStats.getMetadata().getLegend().size();
+ int[][] dataCount = initDataCountArray(rowCount, columnCount);
for (String serverName : serverNames) {
- ServerStats serverStats;
try {
- serverStats = fetchCPUUsageData(serverName);
+ // fetch the stats and add to aggregated stats
+ addServerStats(fetchCPUUsageData(serverName), aggregatedStats, dataCount);
} catch(Exception e) {
// server might be offline - continue with next one
logger.warn("Couldn't fetch CPU stats from server [" + serverName + "]!", e);
continue;
}
- List<ServerStatsRow> serverStatsRows = addServerStats(serverStats, aggregatedStats, dataCount);
}
+ averageAggregatedStats(aggregatedStats, dataCount);
+ }
+
+ private void averageAggregatedStats(ServerStats aggregatedStats, int[][] dataCount) {
List<ServerStatsRow> rows = aggregatedStats.getRows();
for(int rowNum = 0; rowNum < rows.size(); rowNum++) {
List<Double> data = rows.get(rowNum).getUsageData();
@@ -289,6 +300,17 @@ public class ServerUtil {
}
}
+ private int[][] initDataCountArray(int rowCount, int columnCount) {
+ int[][] dataCount = new int[rowCount][columnCount];
+ // initialize all data counts to 1
+ for(int rowNum = 0; rowNum < rowCount; rowNum++) {
+ for(int columnNum = 0; columnNum < columnCount; columnNum++) {
+ dataCount[rowNum][columnNum] = 1;
+ }
+ }
+ return dataCount;
+ }
+
/**
*
* @param statsToBeAdded
@@ -320,6 +342,22 @@ public class ServerUtil {
public static void main(String[] args) {
ServerStats stats = new ServerUtil().fetchCPUUsageData("s1");
- System.out.println(stats.getMetadata().getLegend());
+ for(ServerStatsRow row : stats.getRows()) {
+ System.out.println(row.getUsageData().get(2));
+ }
+ JAXBContext context;
+ try {
+ context = JAXBContext.newInstance(ServerStats.class);
+ Marshaller m = context.createMarshaller();
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ m.marshal(stats, out);
+ ServerStats stats1 = (ServerStats)new ServerUtil().unmarshal(ServerStats.class, out.toString(), false);
+ for(ServerStatsRow row : stats1.getRows()) {
+ System.out.println(row.getUsageData().get(2));
+ }
+ } catch (JAXBException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
}
}
diff --git a/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml b/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml
index 6f3ad72f..abcd8c05 100644
--- a/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml
+++ b/src/com.gluster.storage.management.server/src/spring/gluster-server-security.xml
@@ -11,16 +11,13 @@
">
<http auto-config="true" use-expressions="true">
- <!-- intercept-url pattern="/1.0/*"
- access="hasRole('ROLE_ADMIN') and fullyAuthenticated" />
- <intercept-url pattern="/*" access="permitAll" /-->
-
<!-- SSL Protection -->
- <intercept-url pattern="/*" access="hasRole('ROLE_ADMIN') and fullyAuthenticated" requires-channel="https" />
- <!-- intercept-url pattern="/*" access="permitAll" requires-channel="any" /-->
- <port-mappings>
- <port-mapping http="8080" https="8443" />
- </port-mappings>
+ <intercept-url pattern="/1.0/**" access="hasRole('ROLE_ADMIN') and fullyAuthenticated" requires-channel="https" />
+ <intercept-url pattern="*.jnlp" access="hasRole('ROLE_ADMIN') and fullyAuthenticated" requires-channel="any" />
+ <!-- intercept-url pattern="/*" access="permitAll" requires-channel="any" / -->
+ <port-mappings>
+ <port-mapping http="8080" https="8443" />
+ </port-mappings>
<!-- HTTP basic authentication -->
<http-basic />