Просмотр исходного кода

Update documentation

Add logo, and some documentation.
master
TheoryOfNekomata 1 год назад
Родитель
Сommit
52088285d1
4 измененных файлов: 121 добавлений и 34 удалений
  1. +38
    -34
      README.md
  2. +39
    -0
      docs/00-rationale.md
  3. +6
    -0
      docs/01-notes.md
  4. +38
    -0
      docs/assets/formxtra.svg

+ 38
- 34
README.md Просмотреть файл

@@ -1,41 +1,10 @@
# formxtra

_(read "form extra")_
![formxtra logo](./docs/assets/formxtra.svg)

Extract and set form values through the DOM.

## Motivation

Forms are used to package related data, typically sent to an external location or processed internally. In the browser,
the default behavior of submitting form data is not always preferred, as this is done through loading or reloading a
document as soon as the form is submitted. In addition, [applications have limited control over how the data are
formatted on submission](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-fs-enctype) with
this approach. This is why the new way of sending form data is done through AJAX/fetch requests, wherein the data are
serialized into formats like JSON. To turn form data into a specific format requires access to the elements holding the
values to each field in the form.

Libraries made for extracting form values query field elements in the DOM, which is inefficient since they need to
traverse the DOM tree in some way, using methods such as `document.getElementsByTagName()` and
`document.querySelector()`. This is the same case with setting each form values for, say, prefilling values to save
time. It might be a simple improvement to the user experience, but the logic behind can be unwieldy as there may be
inconsistencies in setting up each field value depending on the form library being used.
**The companion for Web forms!**

Upon retrieving the field values somehow, some libraries attempt to duplicate the values of the fields as they change,
for instance by attaching event listeners and storing the new values into some internal object or map. This is then
retrieved by some other exposed function or mechanism within that library. This is common with reactive frameworks,
where changes to the document are essential to establish functionality and improved user experience.

---

With `formxtra`, there is no need to traverse elements for individual fields to get and set their values, provided they are:

* Associated to the form (either as a descendant of the `<form>` element or [associated through the `form=""`
attribute](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fae-form))
* Has a valid `name`

The values of these fields can be easily extracted and set, using the `form.elements` attribute built-in to the DOM.
With this, only the reference to the form is needed. The current state of the field elements is already stored in the
DOM, waiting to be accessed.
Extract and set form values through the DOM.

## Installation

@@ -122,3 +91,38 @@ form.addEventListener('submit', async e => {
## Tests

The library has been tested on the static DOM using JSDOM, and the real dynamic DOM using Cypress.

## Motivation

Forms are used to package related data, typically sent to an external location or processed internally. In the browser,
the default behavior of submitting form data is not always preferred, as this is done through loading or reloading a
document as soon as the form is submitted. In addition, [applications have limited control over how the data are
formatted on submission](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#dom-fs-enctype) with
this approach. This is why the new way of sending form data is done through AJAX/fetch requests, wherein the data are
serialized into formats like JSON. To turn form data into a specific format requires access to the elements holding the
values to each field in the form.

Libraries made for extracting form values query field elements in the DOM, which is inefficient since they need to
traverse the DOM tree in some way, using methods such as `document.getElementsByTagName()` and
`document.querySelector()`. This is the same case with setting each form values for, say, prefilling values to save
time. It might be a simple improvement to the user experience, but the logic behind can be unwieldy as there may be
inconsistencies in setting up each field value depending on the form library being used.

Upon retrieving the field values somehow, some libraries attempt to duplicate the values of the fields as they change,
for instance by attaching event listeners and storing the new values into some internal object or map. This is then
retrieved by some other exposed function or mechanism within that library. This is common with reactive frameworks,
where changes to the document are essential to establish functionality and improved user experience.

---

With `formxtra`, there is no need to traverse elements for individual fields to get and set their values, provided they are:

* Associated to the form (either as a descendant of the `<form>` element or [associated through the `form=""`
attribute](https://html.spec.whatwg.org/multipage/form-control-infrastructure.html#attr-fae-form))
* Has a valid `name`

The values of these fields can be easily extracted and set, using the `form.elements` attribute built-in to the DOM.
With this, only the reference to the form is needed. The current state of the field elements is already stored in the
DOM, waiting to be accessed.

Additional documentation can be found on the [`docs` directory](./docs).

+ 39
- 0
docs/00-rationale.md Просмотреть файл

@@ -0,0 +1,39 @@
# Rationale

**Why the need for another form library?**

Let us set some facts about existing form libraries:

* Form libraries, especially framework-specific ones have verbose syntax.
* Please go to your form library of choice and compare the syntax yourself.
* Form libraries are dependent on the architecture of the framework (such as [React Hook Form](https://www.npmjs.com/package/react-hook-form) and [Formik](https://www.npmjs.com/package/formik)) and
requires using their features.
* Form libraries have differing ways on how to manage state, usually piggybacking on the data flow of the framework they
are dependent on.
* Form libraries are relatively complex to what they are supposed to be doing such as providing wrappers to custom
components, in which compatibility should be in the hands of the component author.

**What does `formxtra` offer?**

* `formxtra` aims to simplify the syntax to just invoking two functions - `getFormValues()` and `setFormValues()`.
* `formxtra` is not dependent to any library and is highly interoperable.
* `formxtra` is dependent only to the DOM. Since accessing the DOM is fully synchronous, the same can be said for the
entire operation of `formxtra`.
* There are no other paradigms introduced by `formxtra`. For the library to do its intentions, it only requires
respecting the HTML DOM spec, such as providing names to inputs and binding them correctly to forms, which is what
all (data-driven) websites should do anyway.
* `formxtra` is lightweight, even smaller than [React Hook Form](https://www.npmjs.com/package/react-hook-form) and [Formik](https://www.npmjs.com/package/formik).
* `formxtra` is already type-safe, being written in TypeScript and providing types, thanks to [pridepack](https://www.npmjs.com/package/pridepack) as a scaffold.

**What does `formxtra` not offer?**

* `formxtra` is not a validation library, nor does it provide utility functions for validation.
* However, one could use `formxtra` in tandem with other validation libraries
such as `ajv` or `yup` for instance, by validating the values returned by `getFormValues()`.
* `formxtra` does not provide compatibility to custom components.
* Because custom components have different
implementations that mostly favor user experience over compliance, `formxtra` does not guarantee it can work with them
out of the box.
* However, the solution for this is to provide a corresponding `<input type="hidden">` element for each custom\
component, which should always get the latter's serializable value. In return, this can also simplify the submission
of the form as the custom components' values are already in the form.

+ 6
- 0
docs/01-notes.md Просмотреть файл

@@ -0,0 +1,6 @@
# Notes

* In Safari, the `submitter` attribute in the form submit event object does not work. To fix this, install the [event-submitter-polyfill package](https://www.npmjs.com/package/event-submitter-polyfill).
* `formxtra` is not yet tested on older browsers. If you want to help, please create a PR.
* The `<input type="file">` element does not support setting of values by design. As such, the logic for
`setFormValues()` with file uploads do nothing.

+ 38
- 0
docs/assets/formxtra.svg Просмотреть файл

@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="256px" height="64px" version="1.1" shape-rendering="geometricPrecision" text-rendering="geometricPrecision" image-rendering="optimizeQuality" fill-rule="evenodd" clip-rule="evenodd"
viewBox="0 0 256 64">
<path fill="white" fill-rule="nonzero" d="M12.001 2.998l40 0c2.475,0 4.727,1.013 6.357,2.643 1.63,1.629 2.643,3.88 2.643,6.357l0 40c0,2.476 -1.013,4.727 -2.643,6.357 -1.63,1.63 -3.882,2.643 -6.357,2.643l-40 0c-2.477,0 -4.728,-1.013 -6.357,-2.643 -1.63,-1.63 -2.643,-3.881 -2.643,-6.357l0 -40c0,-2.477 1.013,-4.728 2.643,-6.357 1.629,-1.63 3.88,-2.643 6.357,-2.643zm40 2.002l-40 0c-1.925,0 -3.675,0.789 -4.942,2.056 -1.267,1.267 -2.056,3.017 -2.056,4.942l0 40c0,1.924 0.789,3.675 2.056,4.942 1.267,1.267 3.017,2.056 4.942,2.056l40 0c1.923,0 3.675,-0.789 4.942,-2.056 1.267,-1.267 2.056,-3.018 2.056,-4.942l0 -40c0,-1.925 -0.789,-3.675 -2.056,-4.942 -1.267,-1.267 -3.019,-2.056 -4.942,-2.056zm0 4l-40 0c-0.404,0 -0.791,0.082 -1.139,0.227 -0.359,0.149 -0.695,0.378 -0.975,0.657 -0.279,0.28 -0.508,0.616 -0.657,0.975 -0.145,0.348 -0.227,0.735 -0.227,1.139l0 40c0,0.403 0.082,0.79 0.227,1.138 0.149,0.36 0.378,0.695 0.657,0.975 0.28,0.28 0.616,0.508 0.975,0.658 0.348,0.145 0.735,0.227 1.139,0.227l40 0c0.405,0 0.792,-0.082 1.138,-0.227 0.36,-0.15 0.696,-0.378 0.975,-0.658 0.281,-0.281 0.508,-0.615 0.658,-0.975 0.145,-0.348 0.227,-0.735 0.227,-1.138l0 -40c0,-0.404 -0.082,-0.791 -0.227,-1.139 -0.15,-0.359 -0.377,-0.694 -0.658,-0.975 -0.279,-0.279 -0.615,-0.508 -0.975,-0.657 -0.346,-0.145 -0.733,-0.227 -1.138,-0.227zm-40 -2.002l40 0c0.666,0 1.313,0.138 1.903,0.384 0.612,0.256 1.166,0.628 1.625,1.087 0.458,0.458 0.832,1.013 1.087,1.625 0.247,0.59 0.384,1.237 0.384,1.904l0 40c0,0.666 -0.137,1.313 -0.384,1.903 -0.255,0.612 -0.629,1.167 -1.087,1.625 -0.459,0.46 -1.013,0.832 -1.625,1.087 -0.59,0.247 -1.237,0.384 -1.903,0.384l-40 0c-0.667,0 -1.314,-0.137 -1.904,-0.384 -0.612,-0.255 -1.167,-0.629 -1.625,-1.087 -0.458,-0.458 -0.831,-1.013 -1.087,-1.625 -0.246,-0.59 -0.384,-1.237 -0.384,-1.903l0 -40c0,-0.667 0.138,-1.314 0.384,-1.904 0.256,-0.612 0.629,-1.167 1.087,-1.625 0.458,-0.458 1.013,-0.831 1.625,-1.087 0.59,-0.246 1.237,-0.384 1.904,-0.384z"/>
<path fill="#333333" d="M12.001 3.999l40 0c4.401,0 7.999,3.598 7.999,7.999l0 40c0,4.401 -3.598,7.999 -7.999,7.999l-40 0c-4.401,0 -7.999,-3.598 -7.999,-7.999l0 -40c0,-4.401 3.598,-7.999 7.999,-7.999zm40 4l-40 0c-1.095,0 -2.096,0.452 -2.821,1.178 -0.726,0.725 -1.178,1.726 -1.178,2.821l0 40c0,1.094 0.452,2.095 1.178,2.821 0.725,0.725 1.726,1.177 2.821,1.177l40 0c1.094,0 2.095,-0.452 2.821,-1.177 0.725,-0.726 1.177,-1.727 1.177,-2.821l0 -40c0,-1.095 -0.452,-2.096 -1.177,-2.821 -0.726,-0.726 -1.727,-1.178 -2.821,-1.178z"/>
<path fill="white" fill-rule="nonzero" d="M20 15.003l23.999 0c0.666,0 1.312,0.138 1.901,0.383 0.61,0.254 1.163,0.627 1.621,1.084 0.464,0.459 0.841,1.011 1.095,1.617 0.246,0.595 0.384,1.243 0.384,1.914 0,0.667 -0.138,1.314 -0.383,1.905 -0.255,0.619 -0.629,1.172 -1.084,1.627 -0.468,0.46 -1.025,0.83 -1.633,1.083 -0.589,0.246 -1.236,0.384 -1.901,0.384l-23.999 0c-0.667,0 -1.312,-0.138 -1.902,-0.383 -0.609,-0.254 -1.163,-0.627 -1.621,-1.084 -0.465,-0.461 -0.84,-1.011 -1.094,-1.618 -0.247,-0.594 -0.384,-1.242 -0.384,-1.914 0,-0.666 0.137,-1.313 0.382,-1.904 0.256,-0.619 0.629,-1.172 1.084,-1.627 0.469,-0.46 1.025,-0.83 1.633,-1.083 0.59,-0.246 1.235,-0.384 1.902,-0.384zm23.999 2.002l-23.999 0c-0.402,0 -0.791,0.082 -1.137,0.225 -0.367,0.15 -0.703,0.377 -0.984,0.653 -0.275,0.279 -0.502,0.613 -0.653,0.975 -0.144,0.348 -0.226,0.737 -0.226,1.143 0,0.407 0.082,0.796 0.226,1.14 0.157,0.372 0.384,0.705 0.657,0.977 0.277,0.275 0.613,0.502 0.98,0.655 0.346,0.143 0.733,0.225 1.137,0.225l23.999 0c0.403,0 0.79,-0.082 1.136,-0.225 0.368,-0.15 0.703,-0.377 0.985,-0.654 0.275,-0.278 0.502,-0.612 0.653,-0.975 0.143,-0.347 0.225,-0.736 0.225,-1.143 0,-0.406 -0.082,-0.793 -0.225,-1.139 -0.156,-0.371 -0.384,-0.705 -0.658,-0.977 -0.275,-0.275 -0.612,-0.502 -0.98,-0.655 -0.346,-0.143 -0.733,-0.225 -1.136,-0.225z"/>
<path fill="gray" fill-rule="nonzero" d="M20 16.004l23.999 0c1.094,0 2.095,0.452 2.819,1.173 0.729,0.721 1.181,1.725 1.181,2.824 0,1.1 -0.452,2.103 -1.173,2.825 -0.732,0.721 -1.733,1.173 -2.827,1.173l-23.999 0c-1.095,0 -2.095,-0.452 -2.82,-1.173 -0.728,-0.722 -1.18,-1.725 -1.18,-2.825 0,-1.099 0.452,-2.103 1.173,-2.824 0.732,-0.721 1.732,-1.173 2.827,-1.173z"/>
<path fill="white" fill-rule="nonzero" d="M20 27.003l23.999 0c0.666,0 1.312,0.137 1.901,0.382 0.61,0.254 1.163,0.628 1.621,1.084 0.464,0.46 0.841,1.012 1.095,1.618 0.246,0.594 0.384,1.243 0.384,1.914 0,0.666 -0.138,1.314 -0.383,1.905 -0.257,0.62 -0.63,1.173 -1.084,1.626 -0.468,0.46 -1.025,0.83 -1.633,1.083 -0.589,0.246 -1.236,0.384 -1.901,0.384l-23.999 0c-0.667,0 -1.312,-0.138 -1.902,-0.383 -0.609,-0.254 -1.163,-0.627 -1.621,-1.084 -0.464,-0.459 -0.84,-1.011 -1.094,-1.617 -0.247,-0.594 -0.384,-1.243 -0.384,-1.914 0,-0.667 0.137,-1.314 0.382,-1.905 0.256,-0.618 0.629,-1.172 1.084,-1.627 0.469,-0.459 1.025,-0.83 1.633,-1.082 0.59,-0.247 1.235,-0.384 1.902,-0.384zm23.999 2.001l-23.999 0c-0.402,0 -0.791,0.082 -1.137,0.226 -0.367,0.149 -0.703,0.376 -0.984,0.653 -0.275,0.278 -0.502,0.612 -0.653,0.975 -0.144,0.348 -0.226,0.736 -0.226,1.143 0,0.406 0.082,0.793 0.226,1.14 0.155,0.37 0.384,0.704 0.657,0.976 0.277,0.275 0.613,0.502 0.98,0.655 0.346,0.144 0.733,0.225 1.137,0.225l23.999 0c0.403,0 0.79,-0.081 1.136,-0.225 0.368,-0.15 0.703,-0.377 0.985,-0.653 0.275,-0.278 0.502,-0.612 0.653,-0.975 0.143,-0.348 0.225,-0.737 0.225,-1.143 0,-0.407 -0.082,-0.794 -0.225,-1.14 -0.156,-0.371 -0.384,-0.705 -0.658,-0.977 -0.275,-0.275 -0.612,-0.502 -0.98,-0.654 -0.346,-0.144 -0.733,-0.226 -1.136,-0.226z"/>
<path fill="gray" fill-rule="nonzero" d="M20 28.003l23.999 0c1.094,0 2.095,0.453 2.819,1.174 0.729,0.721 1.181,1.725 1.181,2.824 0,1.099 -0.452,2.103 -1.173,2.824 -0.732,0.721 -1.733,1.173 -2.827,1.173l-23.999 0c-1.095,0 -2.095,-0.452 -2.82,-1.173 -0.728,-0.721 -1.18,-1.725 -1.18,-2.824 0,-1.099 0.452,-2.103 1.173,-2.824 0.732,-0.721 1.732,-1.174 2.827,-1.174z"/>
<path fill="white" fill-rule="nonzero" d="M43.997 38.999c0.67,0 1.317,0.138 1.908,0.382 0.62,0.256 1.173,0.629 1.628,1.084 0.455,0.456 0.829,1.009 1.084,1.624 0.245,0.594 0.383,1.241 0.383,1.908 0,0.671 -0.138,1.318 -0.383,1.908 -0.257,0.617 -0.63,1.17 -1.084,1.624 -0.467,0.458 -1.02,0.831 -1.631,1.084 -0.591,0.245 -1.237,0.382 -1.9,0.382 -0.669,0 -1.314,-0.136 -1.905,-0.382 -0.607,-0.251 -1.158,-0.625 -1.619,-1.084 -0.466,-0.467 -0.841,-1.021 -1.095,-1.629 -0.246,-0.589 -0.384,-1.236 -0.384,-1.903 0,-0.665 0.138,-1.312 0.384,-1.905 0.252,-0.606 0.624,-1.156 1.084,-1.614 0.458,-0.465 1.01,-0.841 1.621,-1.095 0.589,-0.246 1.236,-0.384 1.909,-0.384zm1.146 2.225c-0.348,-0.142 -0.736,-0.223 -1.146,-0.223 -0.408,0 -0.797,0.081 -1.144,0.226 -0.363,0.152 -0.694,0.375 -0.965,0.65 -0.283,0.283 -0.508,0.614 -0.661,0.98 -0.145,0.349 -0.226,0.736 -0.226,1.14 0,0.404 0.081,0.791 0.226,1.138 0.153,0.365 0.38,0.7 0.66,0.98 0.276,0.277 0.61,0.502 0.975,0.653 0.347,0.145 0.734,0.226 1.14,0.226 0.405,0 0.792,-0.082 1.141,-0.226 0.364,-0.151 0.697,-0.375 0.977,-0.653 0.275,-0.278 0.502,-0.612 0.653,-0.975 0.143,-0.346 0.225,-0.736 0.225,-1.143 0,-0.407 -0.082,-0.795 -0.224,-1.143 -0.152,-0.363 -0.379,-0.697 -0.656,-0.973 -0.277,-0.277 -0.611,-0.504 -0.975,-0.657z"/>
<path fill="#9900CC" fill-rule="nonzero" d="M43.997 40c1.104,0 2.108,0.452 2.829,1.173 0.721,0.721 1.173,1.725 1.173,2.824 0,1.102 -0.452,2.103 -1.173,2.824 -0.729,0.723 -1.731,1.173 -2.824,1.173 -1.098,0 -2.096,-0.449 -2.821,-1.173 -0.732,-0.733 -1.181,-1.731 -1.181,-2.824 0,-1.093 0.45,-2.095 1.178,-2.819 0.716,-0.726 1.717,-1.178 2.819,-1.178z"/>
<path fill="white" fill-rule="nonzero" d="M31.996 38.999c0.67,0 1.319,0.138 1.91,0.382 0.62,0.256 1.173,0.629 1.628,1.084 0.455,0.456 0.828,1.009 1.084,1.624 0.245,0.594 0.382,1.241 0.382,1.908 0,0.671 -0.137,1.318 -0.382,1.908 -0.257,0.617 -0.631,1.17 -1.084,1.624 -0.467,0.458 -1.021,0.831 -1.631,1.084 -0.591,0.245 -1.237,0.382 -1.901,0.382 -0.668,0 -1.315,-0.136 -1.906,-0.382 -0.606,-0.251 -1.158,-0.625 -1.619,-1.084 -0.466,-0.467 -0.841,-1.021 -1.095,-1.629 -0.246,-0.589 -0.384,-1.236 -0.384,-1.903 0,-0.665 0.138,-1.312 0.384,-1.905 0.253,-0.606 0.625,-1.156 1.084,-1.614 0.458,-0.465 1.01,-0.841 1.621,-1.095 0.589,-0.246 1.236,-0.384 1.909,-0.384zm1.148 2.225c-0.348,-0.142 -0.738,-0.223 -1.148,-0.223 -0.408,0 -0.797,0.081 -1.144,0.226 -0.363,0.152 -0.694,0.375 -0.965,0.65 -0.282,0.283 -0.508,0.614 -0.66,0.98 -0.146,0.349 -0.227,0.736 -0.227,1.14 0,0.404 0.081,0.791 0.227,1.138 0.152,0.365 0.379,0.7 0.659,0.98 0.276,0.277 0.61,0.502 0.975,0.653 0.348,0.145 0.736,0.226 1.141,0.226 0.405,0 0.792,-0.082 1.142,-0.226 0.364,-0.151 0.697,-0.375 0.976,-0.653 0.275,-0.278 0.502,-0.612 0.653,-0.975 0.144,-0.346 0.226,-0.736 0.226,-1.143 0,-0.407 -0.082,-0.795 -0.224,-1.143 -0.153,-0.363 -0.38,-0.697 -0.656,-0.973 -0.277,-0.277 -0.611,-0.504 -0.975,-0.657z"/>
<path fill="gray" fill-rule="nonzero" d="M31.996 40c1.105,0 2.109,0.452 2.83,1.173 0.721,0.721 1.174,1.725 1.174,2.824 0,1.102 -0.453,2.103 -1.174,2.824 -0.728,0.723 -1.731,1.173 -2.824,1.173 -1.099,0 -2.097,-0.449 -2.822,-1.173 -0.732,-0.733 -1.181,-1.731 -1.181,-2.824 0,-1.093 0.45,-2.095 1.178,-2.819 0.716,-0.726 1.717,-1.178 2.819,-1.178z"/>
<path fill="white" fill-rule="nonzero" d="M76.001 2.998l40 0c2.475,0 4.727,1.013 6.357,2.643 1.63,1.629 2.643,3.88 2.643,6.357l0 40c0,2.476 -1.013,4.727 -2.643,6.357 -1.63,1.63 -3.882,2.643 -6.357,2.643l-40 0c-2.477,0 -4.728,-1.013 -6.357,-2.643 -1.63,-1.63 -2.643,-3.881 -2.643,-6.357l0 -40c0,-2.477 1.013,-4.728 2.643,-6.357 1.629,-1.63 3.88,-2.643 6.357,-2.643zm40 2.002l-40 0c-1.925,0 -3.675,0.789 -4.942,2.056 -1.267,1.267 -2.056,3.017 -2.056,4.942l0 40c0,1.924 0.789,3.675 2.056,4.942 1.267,1.267 3.017,2.056 4.942,2.056l40 0c1.923,0 3.675,-0.789 4.942,-2.056 1.267,-1.267 2.056,-3.018 2.056,-4.942l0 -40c0,-1.925 -0.789,-3.675 -2.056,-4.942 -1.267,-1.267 -3.019,-2.056 -4.942,-2.056zm0 4l-40 0c-0.404,0 -0.791,0.082 -1.139,0.227 -0.359,0.149 -0.695,0.378 -0.975,0.657 -0.279,0.28 -0.508,0.616 -0.657,0.975 -0.145,0.348 -0.227,0.735 -0.227,1.139l0 40c0,0.403 0.082,0.79 0.227,1.138 0.149,0.36 0.378,0.695 0.657,0.975 0.28,0.28 0.616,0.508 0.975,0.658 0.348,0.145 0.735,0.227 1.139,0.227l40 0c0.405,0 0.792,-0.082 1.138,-0.227 0.36,-0.15 0.696,-0.378 0.975,-0.658 0.281,-0.281 0.508,-0.615 0.658,-0.975 0.145,-0.348 0.227,-0.735 0.227,-1.138l0 -40c0,-0.404 -0.082,-0.791 -0.227,-1.139 -0.15,-0.359 -0.377,-0.694 -0.658,-0.975 -0.279,-0.279 -0.615,-0.508 -0.975,-0.657 -0.346,-0.145 -0.733,-0.227 -1.138,-0.227zm-40 -2.002l40 0c0.666,0 1.313,0.138 1.903,0.384 0.612,0.256 1.166,0.628 1.625,1.087 0.458,0.458 0.832,1.013 1.087,1.625 0.247,0.59 0.384,1.237 0.384,1.904l0 40c0,0.666 -0.137,1.313 -0.384,1.903 -0.255,0.612 -0.629,1.167 -1.087,1.625 -0.459,0.46 -1.013,0.832 -1.625,1.087 -0.59,0.247 -1.237,0.384 -1.903,0.384l-40 0c-0.667,0 -1.314,-0.137 -1.904,-0.384 -0.612,-0.255 -1.167,-0.629 -1.625,-1.087 -0.458,-0.458 -0.831,-1.013 -1.087,-1.625 -0.246,-0.59 -0.384,-1.237 -0.384,-1.903l0 -40c0,-0.667 0.138,-1.314 0.384,-1.904 0.256,-0.612 0.629,-1.167 1.087,-1.625 0.458,-0.458 1.013,-0.831 1.625,-1.087 0.59,-0.246 1.237,-0.384 1.904,-0.384z"/>
<path fill="#333333" d="M76.001 3.999l40 0c4.401,0 7.999,3.598 7.999,7.999l0 40c0,4.401 -3.598,7.999 -7.999,7.999l-40 0c-4.401,0 -7.999,-3.598 -7.999,-7.999l0 -40c0,-4.401 3.598,-7.999 7.999,-7.999zm40 4l-40 0c-1.095,0 -2.096,0.452 -2.821,1.178 -0.726,0.725 -1.178,1.726 -1.178,2.821l0 40c0,1.094 0.452,2.095 1.178,2.821 0.725,0.725 1.726,1.177 2.821,1.177l40 0c1.094,0 2.095,-0.452 2.821,-1.177 0.725,-0.726 1.177,-1.727 1.177,-2.821l0 -40c0,-1.095 -0.452,-2.096 -1.177,-2.821 -0.726,-0.726 -1.727,-1.178 -2.821,-1.178z"/>
<path fill="white" fill-rule="nonzero" d="M140.001 2.998l40 0c2.476,0 4.727,1.013 6.357,2.643 1.63,1.629 2.643,3.88 2.643,6.357l0 40c0,2.476 -1.013,4.727 -2.643,6.357 -1.63,1.63 -3.881,2.643 -6.357,2.643l-40 0c-2.475,0 -4.728,-1.013 -6.357,-2.643 -1.63,-1.63 -2.643,-3.881 -2.643,-6.357l0 -40c0,-2.477 1.013,-4.728 2.643,-6.357 1.629,-1.63 3.882,-2.643 6.357,-2.643zm40 2.002l-40 0c-1.923,0 -3.675,0.789 -4.942,2.056 -1.267,1.267 -2.056,3.017 -2.056,4.942l0 40c0,1.924 0.789,3.675 2.056,4.942 1.267,1.267 3.019,2.056 4.942,2.056l40 0c1.924,0 3.675,-0.789 4.942,-2.056 1.267,-1.267 2.056,-3.018 2.056,-4.942l0 -40c0,-1.925 -0.789,-3.675 -2.056,-4.942 -1.267,-1.267 -3.018,-2.056 -4.942,-2.056zm0 4l-40 0c-0.405,0 -0.792,0.082 -1.139,0.227 -0.359,0.149 -0.695,0.378 -0.975,0.657 -0.281,0.281 -0.508,0.616 -0.657,0.975 -0.145,0.348 -0.227,0.735 -0.227,1.139l0 40c0,0.403 0.082,0.79 0.227,1.138 0.149,0.36 0.376,0.694 0.657,0.975 0.28,0.28 0.616,0.508 0.975,0.658 0.347,0.145 0.734,0.227 1.139,0.227l40 0c0.403,0 0.79,-0.082 1.138,-0.227 0.36,-0.15 0.696,-0.378 0.975,-0.658 0.28,-0.28 0.508,-0.615 0.658,-0.975 0.145,-0.348 0.227,-0.735 0.227,-1.138l0 -40c0,-0.404 -0.082,-0.791 -0.227,-1.139 -0.15,-0.359 -0.378,-0.695 -0.658,-0.975 -0.279,-0.279 -0.615,-0.508 -0.975,-0.657 -0.348,-0.145 -0.735,-0.227 -1.138,-0.227zm-40 -2.002l40 0c0.666,0 1.313,0.138 1.903,0.384 0.612,0.256 1.167,0.629 1.625,1.087 0.458,0.458 0.832,1.013 1.087,1.625 0.247,0.59 0.384,1.237 0.384,1.904l0 40c0,0.666 -0.137,1.313 -0.384,1.903 -0.255,0.612 -0.629,1.167 -1.087,1.625 -0.458,0.458 -1.013,0.832 -1.625,1.087 -0.59,0.247 -1.237,0.384 -1.903,0.384l-40 0c-0.667,0 -1.314,-0.137 -1.904,-0.384 -0.612,-0.255 -1.165,-0.627 -1.625,-1.087 -0.458,-0.458 -0.831,-1.013 -1.087,-1.625 -0.246,-0.59 -0.384,-1.237 -0.384,-1.903l0 -40c0,-0.667 0.138,-1.314 0.384,-1.904 0.256,-0.612 0.629,-1.167 1.087,-1.625 0.46,-0.459 1.013,-0.831 1.625,-1.087 0.59,-0.246 1.237,-0.384 1.904,-0.384z"/>
<path fill="#333333" d="M140.001 3.999l40 0c4.401,0 7.999,3.598 7.999,7.999l0 40c0,4.401 -3.598,7.999 -7.999,7.999l-40 0c-4.401,0 -7.999,-3.598 -7.999,-7.999l0 -40c0,-4.401 3.598,-7.999 7.999,-7.999zm40 4l-40 0c-1.095,0 -2.096,0.452 -2.821,1.178 -0.726,0.725 -1.178,1.726 -1.178,2.821l0 40c0,1.094 0.452,2.095 1.178,2.821 0.725,0.725 1.726,1.177 2.821,1.177l40 0c1.094,0 2.095,-0.452 2.821,-1.177 0.725,-0.726 1.177,-1.727 1.177,-2.821l0 -40c0,-1.095 -0.452,-2.096 -1.177,-2.821 -0.726,-0.726 -1.727,-1.178 -2.821,-1.178z"/>
<path fill="white" fill-rule="nonzero" d="M204.002 2.998l40 0c2.477,0 4.728,1.013 6.357,2.643 1.63,1.629 2.643,3.88 2.643,6.357l0 40c0,2.476 -1.013,4.727 -2.643,6.357 -1.629,1.63 -3.88,2.643 -6.357,2.643l-40 0c-2.474,0 -4.727,-1.013 -6.357,-2.643 -1.63,-1.63 -2.643,-3.881 -2.643,-6.357l0 -40c0,-2.477 1.013,-4.728 2.643,-6.357 1.63,-1.63 3.883,-2.643 6.357,-2.643zm40 2.002l-40 0c-1.923,0 -3.675,0.789 -4.942,2.056 -1.267,1.267 -2.056,3.017 -2.056,4.942l0 40c0,1.924 0.789,3.675 2.056,4.942 1.267,1.267 3.019,2.056 4.942,2.056l40 0c1.925,0 3.675,-0.789 4.942,-2.056 1.267,-1.267 2.056,-3.018 2.056,-4.942l0 -40c0,-1.925 -0.789,-3.675 -2.056,-4.942 -1.267,-1.267 -3.017,-2.056 -4.942,-2.056zm0 4l-40 0c-0.405,0 -0.792,0.082 -1.138,0.227 -0.36,0.149 -0.695,0.378 -0.975,0.657 -0.281,0.281 -0.508,0.616 -0.658,0.975 -0.145,0.348 -0.227,0.735 -0.227,1.139l0 40c0,0.403 0.082,0.79 0.227,1.138 0.15,0.36 0.377,0.694 0.658,0.975 0.28,0.28 0.615,0.508 0.975,0.658 0.346,0.145 0.733,0.227 1.138,0.227l40 0c0.404,0 0.791,-0.082 1.139,-0.227 0.359,-0.15 0.695,-0.378 0.975,-0.658 0.279,-0.28 0.508,-0.615 0.657,-0.975 0.145,-0.348 0.227,-0.735 0.227,-1.138l0 -40c0,-0.404 -0.082,-0.791 -0.227,-1.139 -0.149,-0.359 -0.378,-0.695 -0.657,-0.975 -0.28,-0.279 -0.616,-0.508 -0.975,-0.657 -0.348,-0.145 -0.735,-0.227 -1.139,-0.227zm-40 -2.002l40 0c0.667,0 1.314,0.138 1.904,0.384 0.612,0.256 1.167,0.629 1.625,1.087 0.458,0.458 0.831,1.013 1.087,1.625 0.246,0.59 0.384,1.237 0.384,1.904l0 40c0,0.666 -0.138,1.313 -0.384,1.903 -0.256,0.612 -0.629,1.167 -1.087,1.625 -0.458,0.458 -1.013,0.832 -1.625,1.087 -0.59,0.247 -1.237,0.384 -1.904,0.384l-40 0c-0.666,0 -1.313,-0.137 -1.903,-0.384 -0.612,-0.255 -1.166,-0.627 -1.625,-1.087 -0.458,-0.458 -0.832,-1.013 -1.087,-1.625 -0.247,-0.59 -0.384,-1.237 -0.384,-1.903l0 -40c0,-0.667 0.137,-1.314 0.384,-1.904 0.255,-0.612 0.629,-1.167 1.087,-1.625 0.459,-0.459 1.013,-0.831 1.625,-1.087 0.59,-0.246 1.237,-0.384 1.903,-0.384z"/>
<path fill="#333333" d="M204.002 3.999l40 0c4.401,0 7.999,3.598 7.999,7.999l0 40c0,4.401 -3.598,7.999 -7.999,7.999l-40 0c-4.401,0 -7.999,-3.598 -7.999,-7.999l0 -40c0,-4.401 3.598,-7.999 7.999,-7.999zm40 4l-40 0c-1.094,0 -2.095,0.452 -2.821,1.178 -0.725,0.725 -1.177,1.726 -1.177,2.821l0 40c0,1.094 0.452,2.095 1.177,2.821 0.726,0.725 1.727,1.177 2.821,1.177l40 0c1.095,0 2.096,-0.452 2.821,-1.177 0.726,-0.726 1.178,-1.727 1.178,-2.821l0 -40c0,-1.095 -0.452,-2.096 -1.178,-2.821 -0.725,-0.726 -1.726,-1.178 -2.821,-1.178z"/>
<path fill="white" fill-rule="nonzero" d="M84 15.003l23.999 0c0.666,0 1.312,0.138 1.901,0.383 0.61,0.254 1.163,0.627 1.621,1.084 0.464,0.459 0.841,1.011 1.095,1.617 0.246,0.595 0.384,1.243 0.384,1.914 0,0.667 -0.138,1.314 -0.383,1.905 -0.255,0.619 -0.629,1.172 -1.084,1.627 -0.468,0.46 -1.025,0.83 -1.633,1.083 -0.589,0.246 -1.236,0.384 -1.901,0.384l-23.999 0c-0.667,0 -1.312,-0.138 -1.902,-0.383 -0.609,-0.254 -1.163,-0.627 -1.621,-1.084 -0.465,-0.461 -0.84,-1.011 -1.094,-1.618 -0.247,-0.594 -0.384,-1.242 -0.384,-1.914 0,-0.666 0.137,-1.313 0.382,-1.904 0.256,-0.619 0.629,-1.172 1.084,-1.627 0.469,-0.46 1.025,-0.83 1.633,-1.083 0.59,-0.246 1.235,-0.384 1.902,-0.384zm23.999 2.002l-23.999 0c-0.402,0 -0.791,0.082 -1.137,0.225 -0.367,0.15 -0.703,0.377 -0.984,0.653 -0.275,0.279 -0.502,0.613 -0.653,0.975 -0.144,0.348 -0.226,0.737 -0.226,1.143 0,0.407 0.082,0.796 0.226,1.14 0.157,0.372 0.384,0.705 0.657,0.977 0.277,0.275 0.613,0.502 0.98,0.655 0.346,0.143 0.733,0.225 1.137,0.225l23.999 0c0.403,0 0.79,-0.082 1.136,-0.225 0.368,-0.15 0.703,-0.377 0.985,-0.654 0.275,-0.278 0.502,-0.612 0.653,-0.975 0.143,-0.347 0.225,-0.736 0.225,-1.143 0,-0.406 -0.082,-0.793 -0.225,-1.139 -0.156,-0.371 -0.384,-0.705 -0.658,-0.977 -0.275,-0.275 -0.612,-0.502 -0.98,-0.655 -0.346,-0.143 -0.733,-0.225 -1.136,-0.225z"/>
<path fill="#FFCC00" fill-rule="nonzero" d="M84 16.004l23.999 0c1.094,0 2.095,0.452 2.819,1.173 0.729,0.721 1.181,1.725 1.181,2.824 0,1.1 -0.452,2.103 -1.173,2.825 -0.732,0.721 -1.733,1.173 -2.827,1.173l-23.999 0c-1.095,0 -2.095,-0.452 -2.82,-1.173 -0.728,-0.722 -1.18,-1.725 -1.18,-2.825 0,-1.099 0.452,-2.103 1.173,-2.824 0.732,-0.721 1.732,-1.173 2.827,-1.173z"/>
<path fill="white" fill-rule="nonzero" d="M95.995 26.998l12.008 0c0.664,0 1.312,0.138 1.904,0.383 0.618,0.255 1.171,0.629 1.626,1.084 0.46,0.468 0.83,1.022 1.083,1.631 0.246,0.589 0.384,1.234 0.384,1.9 0,0.667 -0.138,1.311 -0.383,1.901 -0.254,0.607 -0.627,1.161 -1.084,1.619 -0.456,0.461 -1.007,0.837 -1.616,1.091 -0.591,0.25 -1.241,0.387 -1.914,0.387l-12.008 0c-0.664,0 -1.313,-0.137 -1.904,-0.382 -0.618,-0.256 -1.171,-0.629 -1.626,-1.084 -0.46,-0.469 -0.83,-1.022 -1.083,-1.631 -0.246,-0.59 -0.384,-1.234 -0.384,-1.901 0,-0.666 0.138,-1.311 0.383,-1.9 0.254,-0.608 0.627,-1.161 1.084,-1.619 0.456,-0.461 1.006,-0.838 1.616,-1.092 0.591,-0.249 1.241,-0.387 1.914,-0.387zm12.008 2.002l-12.008 0c-0.402,0 -0.791,0.081 -1.14,0.228 -0.369,0.153 -0.702,0.378 -0.975,0.655 -0.275,0.276 -0.502,0.612 -0.655,0.978 -0.144,0.346 -0.225,0.733 -0.225,1.135 0,0.402 0.081,0.789 0.225,1.136 0.15,0.367 0.376,0.701 0.653,0.982 0.278,0.275 0.612,0.502 0.975,0.653 0.348,0.144 0.737,0.226 1.142,0.226l12.008 0c0.402,0 0.791,-0.082 1.14,-0.229 0.369,-0.152 0.702,-0.378 0.975,-0.654 0.275,-0.277 0.502,-0.613 0.655,-0.978 0.143,-0.347 0.225,-0.734 0.225,-1.136 0,-0.402 -0.082,-0.789 -0.225,-1.135 -0.15,-0.368 -0.377,-0.702 -0.653,-0.983 -0.279,-0.275 -0.613,-0.502 -0.975,-0.653 -0.348,-0.144 -0.737,-0.225 -1.142,-0.225z"/>
<path fill="#FFCC00" fill-rule="nonzero" d="M95.995 27.999l12.008 0c1.096,0 2.102,0.452 2.823,1.173 0.721,0.732 1.173,1.731 1.173,2.824 0,1.093 -0.452,2.093 -1.173,2.817 -0.721,0.728 -1.727,1.18 -2.823,1.18l-12.008 0c-1.096,0 -2.102,-0.452 -2.823,-1.173 -0.721,-0.731 -1.173,-1.731 -1.173,-2.824 0,-1.093 0.452,-2.092 1.173,-2.816 0.721,-0.729 1.727,-1.181 2.823,-1.181z"/>
<path fill="white" fill-rule="nonzero" d="M83.998 26.998c0.67,0 1.319,0.136 1.911,0.383 0.613,0.254 1.167,0.627 1.624,1.084 0.454,0.453 0.827,1.006 1.084,1.623 0.245,0.594 0.383,1.24 0.383,1.91l0 12.002c0,0.67 -0.138,1.315 -0.383,1.907 -0.257,0.619 -0.63,1.173 -1.084,1.626 -0.457,0.457 -1.011,0.83 -1.624,1.084 -0.592,0.247 -1.239,0.383 -1.909,0.383 -0.665,0 -1.312,-0.136 -1.903,-0.383 -0.607,-0.251 -1.159,-0.624 -1.62,-1.084 -0.465,-0.467 -0.84,-1.02 -1.094,-1.628 -0.247,-0.593 -0.384,-1.238 -0.384,-1.905l0 -12.002c0,-0.665 0.136,-1.311 0.382,-1.902 0.251,-0.606 0.625,-1.158 1.084,-1.619 0.467,-0.466 1.021,-0.841 1.628,-1.095 0.593,-0.246 1.239,-0.384 1.905,-0.384zm1.146 2.227c-0.347,-0.145 -0.736,-0.225 -1.146,-0.225 -0.403,0 -0.792,0.081 -1.14,0.227 -0.364,0.152 -0.699,0.379 -0.979,0.659 -0.277,0.276 -0.502,0.61 -0.653,0.975 -0.145,0.348 -0.226,0.733 -0.226,1.137l0 12.002c0,0.404 0.082,0.792 0.227,1.14 0.153,0.364 0.38,0.7 0.659,0.98 0.277,0.276 0.611,0.502 0.976,0.653 0.347,0.145 0.734,0.225 1.138,0.225 0.408,0 0.797,-0.08 1.144,-0.225 0.362,-0.15 0.696,-0.377 0.974,-0.655 0.277,-0.277 0.503,-0.611 0.655,-0.973 0.143,-0.348 0.225,-0.737 0.225,-1.145l0 -12.002c0,-0.408 -0.082,-0.797 -0.224,-1.145 -0.153,-0.363 -0.379,-0.697 -0.656,-0.973 -0.278,-0.279 -0.612,-0.505 -0.974,-0.655z"/>
<path fill="#FFCC00" fill-rule="nonzero" d="M83.998 27.999c1.103,0 2.103,0.449 2.828,1.173 0.721,0.721 1.173,1.725 1.173,2.826l0 12.002c0,1.101 -0.452,2.105 -1.173,2.826 -0.725,0.724 -1.725,1.173 -2.826,1.173 -1.095,0 -2.094,-0.449 -2.82,-1.173 -0.731,-0.734 -1.18,-1.733 -1.18,-2.826l0 -12.002c0,-1.093 0.449,-2.093 1.173,-2.818 0.733,-0.732 1.732,-1.181 2.825,-1.181z"/>
<path fill="white" fill-rule="nonzero" d="M147.998 15.003l4.007 0c0.669,0 1.317,0.138 1.906,0.383 0.615,0.255 1.169,0.629 1.624,1.084 0.458,0.467 0.831,1.02 1.084,1.631 0.245,0.591 0.382,1.237 0.382,1.9 0,0.666 -0.137,1.313 -0.384,1.905 -0.252,0.607 -0.626,1.157 -1.084,1.615 -0.456,0.461 -1.01,0.841 -1.62,1.095 -0.59,0.246 -1.237,0.384 -1.908,0.384l-4.007 0c-0.669,0 -1.316,-0.137 -1.909,-0.383 -0.612,-0.254 -1.167,-0.627 -1.624,-1.084 -0.455,-0.455 -0.828,-1.008 -1.084,-1.624 -0.245,-0.589 -0.382,-1.236 -0.382,-1.908 0,-0.671 0.137,-1.318 0.382,-1.908 0.257,-0.616 0.631,-1.17 1.084,-1.623 0.457,-0.457 1.012,-0.83 1.624,-1.084 0.593,-0.247 1.24,-0.383 1.909,-0.383zm4.007 2.002l-4.007 0c-0.408,0 -0.796,0.08 -1.144,0.225 -0.361,0.15 -0.695,0.377 -0.974,0.655 -0.276,0.277 -0.503,0.611 -0.654,0.973 -0.144,0.347 -0.226,0.737 -0.226,1.143 0,0.407 0.082,0.797 0.226,1.143 0.151,0.363 0.378,0.697 0.654,0.974 0.279,0.278 0.613,0.505 0.974,0.655 0.348,0.145 0.736,0.225 1.144,0.225l4.007 0c0.406,0 0.795,-0.082 1.143,-0.227 0.363,-0.151 0.694,-0.376 0.964,-0.65 0.283,-0.283 0.508,-0.614 0.661,-0.98 0.145,-0.349 0.227,-0.736 0.227,-1.14 0,-0.405 -0.082,-0.792 -0.226,-1.141 -0.151,-0.364 -0.375,-0.697 -0.653,-0.977 -0.278,-0.275 -0.612,-0.502 -0.975,-0.653 -0.346,-0.143 -0.736,-0.225 -1.141,-0.225z"/>
<path fill="#33CC33" fill-rule="nonzero" d="M147.998 16.004l4.007 0c1.099,0 2.101,0.452 2.822,1.173 0.723,0.729 1.173,1.731 1.173,2.824 0,1.093 -0.45,2.096 -1.177,2.82 -0.717,0.726 -1.719,1.178 -2.818,1.178l-4.007 0c-1.1,0 -2.101,-0.449 -2.825,-1.173 -0.721,-0.722 -1.173,-1.722 -1.173,-2.825 0,-1.102 0.452,-2.103 1.173,-2.824 0.724,-0.724 1.725,-1.173 2.825,-1.173z"/>
<path fill="white" fill-rule="nonzero" d="M159.999 22.998c0.668,0 1.314,0.136 1.905,0.382 0.606,0.251 1.158,0.625 1.619,1.084 0.466,0.467 0.841,1.021 1.095,1.629 0.246,0.592 0.384,1.238 0.384,1.904l0 8.001c0,0.665 -0.136,1.311 -0.383,1.902 -0.251,0.606 -0.624,1.158 -1.084,1.619 -0.467,0.466 -1.02,0.841 -1.628,1.095 -0.592,0.246 -1.238,0.384 -1.905,0.384 -0.669,0 -1.32,-0.136 -1.911,-0.383 -0.615,-0.255 -1.17,-0.629 -1.625,-1.084 -0.453,-0.453 -0.827,-1.007 -1.084,-1.624 -0.245,-0.594 -0.382,-1.239 -0.382,-1.909l0 -8.001c0,-0.669 0.137,-1.315 0.382,-1.906 0.257,-0.62 0.631,-1.173 1.084,-1.627 0.457,-0.456 1.012,-0.83 1.624,-1.084 0.592,-0.246 1.24,-0.382 1.909,-0.382zm1.14 2.227c-0.348,-0.145 -0.735,-0.225 -1.14,-0.225 -0.408,0 -0.796,0.08 -1.144,0.225 -0.362,0.149 -0.696,0.376 -0.974,0.654 -0.276,0.277 -0.503,0.611 -0.654,0.974 -0.144,0.348 -0.226,0.736 -0.226,1.144l0 8.001c0,0.408 0.082,0.797 0.224,1.144 0.153,0.363 0.38,0.697 0.656,0.974 0.28,0.28 0.611,0.507 0.972,0.655 0.35,0.145 0.74,0.225 1.149,0.225 0.404,0 0.792,-0.082 1.14,-0.227 0.365,-0.153 0.7,-0.379 0.98,-0.659 0.277,-0.277 0.502,-0.611 0.653,-0.975 0.145,-0.348 0.225,-0.733 0.225,-1.137l0 -8.001c0,-0.403 -0.081,-0.792 -0.227,-1.139 -0.152,-0.365 -0.379,-0.7 -0.659,-0.98 -0.276,-0.277 -0.61,-0.502 -0.975,-0.653z"/>
<path fill="#33CC33" fill-rule="nonzero" d="M159.999 23.999c1.096,0 2.096,0.449 2.821,1.173 0.732,0.733 1.181,1.732 1.181,2.825l0 8.001c0,1.093 -0.449,2.092 -1.173,2.818 -0.733,0.732 -1.733,1.181 -2.826,1.181 -1.103,0 -2.104,-0.449 -2.828,-1.173 -0.721,-0.722 -1.174,-1.725 -1.174,-2.826l0 -8.001c0,-1.1 0.453,-2.104 1.174,-2.825 0.724,-0.724 1.725,-1.173 2.825,-1.173z"/>
<path fill="white" fill-rule="nonzero" d="M167.998 15.003l4.007 0c0.669,0 1.316,0.138 1.906,0.383 0.615,0.255 1.169,0.629 1.624,1.084 0.458,0.467 0.831,1.02 1.084,1.631 0.245,0.591 0.382,1.237 0.382,1.9 0,0.666 -0.137,1.313 -0.384,1.905 -0.252,0.607 -0.626,1.157 -1.084,1.615 -0.456,0.461 -1.01,0.841 -1.62,1.095 -0.59,0.246 -1.237,0.384 -1.908,0.384l-4.007 0c-0.669,0 -1.316,-0.137 -1.909,-0.383 -0.612,-0.254 -1.167,-0.627 -1.624,-1.084 -0.455,-0.455 -0.828,-1.008 -1.084,-1.624 -0.245,-0.589 -0.382,-1.236 -0.382,-1.908 0,-0.671 0.137,-1.318 0.382,-1.908 0.257,-0.616 0.631,-1.17 1.084,-1.623 0.457,-0.457 1.012,-0.83 1.624,-1.084 0.593,-0.247 1.24,-0.383 1.909,-0.383zm4.007 2.002l-4.007 0c-0.408,0 -0.796,0.08 -1.144,0.225 -0.361,0.15 -0.696,0.377 -0.974,0.655 -0.276,0.277 -0.503,0.611 -0.654,0.973 -0.144,0.347 -0.226,0.737 -0.226,1.143 0,0.407 0.082,0.797 0.226,1.143 0.151,0.363 0.378,0.697 0.654,0.974 0.278,0.278 0.613,0.505 0.974,0.655 0.348,0.145 0.736,0.225 1.144,0.225l4.007 0c0.406,0 0.795,-0.082 1.143,-0.227 0.362,-0.151 0.693,-0.376 0.964,-0.65 0.283,-0.283 0.508,-0.614 0.661,-0.98 0.145,-0.349 0.227,-0.736 0.227,-1.14 0,-0.405 -0.082,-0.792 -0.226,-1.141 -0.151,-0.364 -0.375,-0.697 -0.653,-0.977 -0.278,-0.275 -0.612,-0.502 -0.975,-0.653 -0.346,-0.143 -0.736,-0.225 -1.141,-0.225z"/>
<path fill="#33CC33" fill-rule="nonzero" d="M167.998 16.004l4.007 0c1.099,0 2.101,0.452 2.822,1.173 0.723,0.729 1.173,1.731 1.173,2.824 0,1.093 -0.45,2.096 -1.177,2.82 -0.717,0.726 -1.719,1.178 -2.818,1.178l-4.007 0c-1.1,0 -2.101,-0.449 -2.825,-1.173 -0.721,-0.722 -1.173,-1.722 -1.173,-2.825 0,-1.102 0.452,-2.103 1.173,-2.824 0.724,-0.724 1.725,-1.173 2.825,-1.173z"/>
<path fill="white" fill-rule="nonzero" d="M147.998 39.004l4.007 0c0.669,0 1.317,0.137 1.906,0.382 0.617,0.257 1.17,0.63 1.624,1.084 0.458,0.467 0.831,1.02 1.084,1.631 0.245,0.591 0.382,1.237 0.382,1.901 0,0.666 -0.137,1.312 -0.384,1.905 -0.252,0.606 -0.626,1.156 -1.084,1.614 -0.456,0.461 -1.01,0.841 -1.62,1.095 -0.59,0.246 -1.237,0.384 -1.908,0.384l-4.007 0c-0.669,0 -1.316,-0.136 -1.909,-0.383 -0.612,-0.254 -1.167,-0.627 -1.624,-1.084 -0.453,-0.453 -0.827,-1.007 -1.084,-1.623 -0.245,-0.59 -0.382,-1.237 -0.382,-1.908 0,-0.672 0.137,-1.319 0.382,-1.908 0.256,-0.616 0.629,-1.169 1.084,-1.624 0.457,-0.457 1.012,-0.83 1.624,-1.084 0.593,-0.246 1.24,-0.382 1.909,-0.382zm4.007 2.001l-4.007 0c-0.408,0 -0.796,0.08 -1.144,0.225 -0.361,0.15 -0.695,0.377 -0.974,0.655 -0.276,0.277 -0.503,0.611 -0.654,0.974 -0.144,0.346 -0.226,0.736 -0.226,1.143 0,0.406 0.082,0.796 0.226,1.143 0.151,0.362 0.378,0.696 0.654,0.973 0.279,0.278 0.613,0.505 0.974,0.655 0.348,0.145 0.736,0.225 1.144,0.225l4.007 0c0.406,0 0.795,-0.082 1.143,-0.227 0.364,-0.152 0.695,-0.378 0.964,-0.65 0.283,-0.283 0.508,-0.615 0.661,-0.979 0.145,-0.348 0.227,-0.737 0.227,-1.14 0,-0.406 -0.082,-0.793 -0.226,-1.142 -0.151,-0.364 -0.375,-0.697 -0.653,-0.976 -0.278,-0.276 -0.612,-0.502 -0.975,-0.654 -0.346,-0.143 -0.736,-0.225 -1.141,-0.225z"/>
<path fill="#33CC33" fill-rule="nonzero" d="M147.998 40.004l4.007 0c1.099,0 2.101,0.452 2.822,1.174 0.723,0.728 1.173,1.731 1.173,2.824 0,1.093 -0.45,2.095 -1.177,2.819 -0.717,0.726 -1.719,1.178 -2.818,1.178l-4.007 0c-1.1,0 -2.101,-0.449 -2.825,-1.173 -0.721,-0.721 -1.173,-1.722 -1.173,-2.824 0,-1.103 0.452,-2.103 1.173,-2.824 0.724,-0.725 1.725,-1.174 2.825,-1.174z"/>
<path fill="white" fill-rule="nonzero" d="M167.998 39.004l4.007 0c0.669,0 1.316,0.137 1.906,0.382 0.617,0.257 1.17,0.63 1.624,1.084 0.458,0.467 0.831,1.02 1.084,1.631 0.245,0.591 0.382,1.237 0.382,1.901 0,0.666 -0.137,1.312 -0.384,1.905 -0.252,0.606 -0.626,1.156 -1.084,1.614 -0.456,0.461 -1.01,0.841 -1.62,1.095 -0.59,0.246 -1.237,0.384 -1.908,0.384l-4.007 0c-0.669,0 -1.316,-0.136 -1.909,-0.383 -0.612,-0.254 -1.167,-0.627 -1.624,-1.084 -0.453,-0.453 -0.827,-1.007 -1.084,-1.623 -0.245,-0.59 -0.382,-1.237 -0.382,-1.908 0,-0.672 0.137,-1.319 0.382,-1.908 0.256,-0.616 0.629,-1.169 1.084,-1.624 0.457,-0.457 1.012,-0.83 1.624,-1.084 0.593,-0.246 1.24,-0.382 1.909,-0.382zm4.007 2.001l-4.007 0c-0.408,0 -0.796,0.08 -1.144,0.225 -0.361,0.15 -0.696,0.377 -0.974,0.655 -0.276,0.277 -0.503,0.611 -0.654,0.974 -0.144,0.346 -0.226,0.736 -0.226,1.143 0,0.406 0.082,0.796 0.226,1.143 0.151,0.362 0.378,0.696 0.654,0.973 0.278,0.278 0.613,0.505 0.974,0.655 0.348,0.145 0.736,0.225 1.144,0.225l4.007 0c0.406,0 0.795,-0.082 1.143,-0.227 0.364,-0.152 0.695,-0.378 0.964,-0.65 0.283,-0.283 0.508,-0.615 0.661,-0.979 0.145,-0.348 0.227,-0.737 0.227,-1.14 0,-0.406 -0.082,-0.793 -0.226,-1.142 -0.151,-0.364 -0.375,-0.697 -0.653,-0.976 -0.278,-0.276 -0.612,-0.502 -0.975,-0.654 -0.346,-0.143 -0.736,-0.225 -1.141,-0.225z"/>
<path fill="#33CC33" fill-rule="nonzero" d="M167.998 40.004l4.007 0c1.099,0 2.101,0.452 2.822,1.174 0.723,0.728 1.173,1.731 1.173,2.824 0,1.093 -0.45,2.095 -1.177,2.819 -0.717,0.726 -1.719,1.178 -2.818,1.178l-4.007 0c-1.1,0 -2.101,-0.449 -2.825,-1.173 -0.721,-0.721 -1.173,-1.722 -1.173,-2.824 0,-1.103 0.452,-2.103 1.173,-2.824 0.724,-0.725 1.725,-1.174 2.825,-1.174z"/>
<path fill="white" fill-rule="nonzero" d="M212.001 26.998l6.999 0 0 -6.994c0,-0.669 0.136,-1.318 0.382,-1.911 0.254,-0.612 0.628,-1.167 1.084,-1.623 0.467,-0.458 1.021,-0.832 1.631,-1.084 0.591,-0.245 1.239,-0.383 1.902,-0.383 0.671,0 1.319,0.138 1.908,0.384 0.609,0.254 1.158,0.628 1.616,1.084 0.464,0.458 0.842,1.013 1.095,1.621 0.246,0.593 0.384,1.243 0.384,1.912l0 6.994 6.998 0c0.667,0 1.312,0.138 1.902,0.383 0.609,0.254 1.163,0.627 1.621,1.084 0.464,0.459 0.84,1.011 1.094,1.617 0.247,0.594 0.384,1.243 0.384,1.914 0,0.667 -0.137,1.314 -0.382,1.905 -0.256,0.618 -0.629,1.172 -1.084,1.627 -0.469,0.459 -1.025,0.83 -1.633,1.082 -0.59,0.247 -1.235,0.384 -1.902,0.384l-6.998 0 0 7.005c0,0.669 -0.136,1.318 -0.383,1.911 -0.254,0.612 -0.627,1.167 -1.084,1.623 -0.467,0.458 -1.02,0.832 -1.631,1.084 -0.591,0.245 -1.237,0.383 -1.902,0.383 -0.668,0 -1.315,-0.138 -1.908,-0.384 -0.604,-0.253 -1.156,-0.625 -1.616,-1.084 -0.464,-0.458 -0.842,-1.013 -1.094,-1.621 -0.247,-0.593 -0.384,-1.243 -0.384,-1.912l0 -7.005 -6.999 0c-0.666,0 -1.312,-0.137 -1.901,-0.382 -0.61,-0.254 -1.163,-0.628 -1.621,-1.084 -0.464,-0.46 -0.841,-1.012 -1.095,-1.618 -0.246,-0.594 -0.384,-1.243 -0.384,-1.914 0,-0.666 0.138,-1.314 0.383,-1.905 0.257,-0.62 0.63,-1.173 1.084,-1.626 0.468,-0.46 1.025,-0.83 1.633,-1.083 0.589,-0.246 1.236,-0.384 1.901,-0.384zm7.999 2.002l-7.999 0c-0.403,0 -0.79,0.081 -1.136,0.225 -0.368,0.15 -0.703,0.376 -0.985,0.653 -0.275,0.278 -0.502,0.612 -0.653,0.975 -0.143,0.348 -0.225,0.737 -0.225,1.143 0,0.407 0.082,0.794 0.225,1.14 0.156,0.371 0.384,0.705 0.658,0.977 0.275,0.275 0.612,0.502 0.98,0.654 0.346,0.144 0.733,0.226 1.136,0.226l9 0 0 9.006c0,0.409 0.082,0.799 0.227,1.147 0.15,0.363 0.375,0.694 0.65,0.965 0.281,0.282 0.615,0.508 0.981,0.66 0.35,0.145 0.738,0.227 1.143,0.227 0.407,0 0.794,-0.082 1.143,-0.225 0.365,-0.151 0.697,-0.375 0.977,-0.653 0.277,-0.28 0.503,-0.614 0.653,-0.975 0.145,-0.348 0.225,-0.737 0.225,-1.146l0 -9.006 9 0c0.402,0 0.791,-0.082 1.137,-0.226 0.367,-0.149 0.703,-0.376 0.984,-0.653 0.275,-0.278 0.502,-0.612 0.653,-0.975 0.144,-0.348 0.226,-0.736 0.226,-1.143 0,-0.406 -0.082,-0.793 -0.226,-1.14 -0.155,-0.37 -0.384,-0.704 -0.657,-0.976 -0.277,-0.275 -0.613,-0.502 -0.98,-0.655 -0.346,-0.144 -0.733,-0.225 -1.137,-0.225l-9 0 0 -8.996c0,-0.409 -0.081,-0.799 -0.227,-1.147 -0.149,-0.363 -0.374,-0.694 -0.65,-0.965 -0.282,-0.284 -0.613,-0.511 -0.978,-0.66 -0.351,-0.145 -0.739,-0.227 -1.146,-0.227 -0.406,0 -0.793,0.082 -1.143,0.225 -0.364,0.151 -0.697,0.375 -0.976,0.653 -0.279,0.282 -0.504,0.614 -0.653,0.975 -0.146,0.348 -0.226,0.737 -0.226,1.146l0 8.996 -1.001 0z"/>
<path fill="#6699FF" fill-rule="nonzero" d="M212.001 27.999l7.999 0 0 -7.995c0,-1.103 0.449,-2.103 1.174,-2.827 0.728,-0.722 1.731,-1.173 2.825,-1.173 1.099,0 2.1,0.451 2.824,1.178 0.729,0.719 1.178,1.719 1.178,2.822l0 7.995 7.999 0c1.095,0 2.095,0.452 2.82,1.173 0.728,0.721 1.18,1.725 1.18,2.824 0,1.099 -0.452,2.103 -1.173,2.824 -0.732,0.721 -1.732,1.173 -2.827,1.173l-7.999 0 0 8.006c0,1.103 -0.449,2.103 -1.173,2.827 -0.729,0.722 -1.73,1.173 -2.826,1.173 -1.097,0 -2.1,-0.451 -2.824,-1.178 -0.729,-0.719 -1.178,-1.719 -1.178,-2.822l0 -8.006 -7.999 0c-1.094,0 -2.095,-0.452 -2.819,-1.173 -0.729,-0.721 -1.181,-1.725 -1.181,-2.824 0,-1.099 0.452,-2.103 1.173,-2.824 0.732,-0.721 1.733,-1.173 2.827,-1.173z"/>
</svg>

Загрузка…
Отмена
Сохранить