Commit 0e3a2d81 authored by TheNumbat's avatar TheNumbat
Browse files

meshedit dev guide: local

parent 7ac22256
---
layout: default
title: "Local Ops: Beveling"
permalink: /meshedit/bevel
---
# Beveling
Here we provide some additional detail about the bevel operations and their implementation in Scotty3D. Each bevel operation has two components:
1. a method that modifies the _connectivity_ of the mesh, creating new beveled elements, and
2. a method the updates the _geometry_ of the mesh, insetting and offseting the new vertices according to user input.
The methods that update the connectivity are `HalfedgeMesh::bevel_vertex`, `halfedgeMesh::bevel_edge`, and `HalfedgeMesh::bevel_face`. The methods that update geometry are `HalfedgeMesh::bevel_vertex_positions`, `HalfedgeMesh::bevel_edge_positions`, and `HalfedgeMesh::bevel_face_positions`.
The methods for updating connectivity can be implemented following the general strategy outlined in [edge flip tutorial](edge_flip). **Note that the methods that update geometry will be called repeatedly for the same bevel, in order to adjust positions according to user mouse input. See the gif in the [User Guide](guide/model).**
To update the _geometry_ of a beveled element, you are provided with the following data:
* `start_positions` - These are the original vertex positions of the beveled mesh element, without any insetting or offsetting.
* `face` - This is a reference to the face currently being beveled. This was returned by one of the connectivity functions.
* `tangent_offset` - The amount by which the new face should be inset (i.e., "shrunk" or "expanded")
* `normal_offset` - (faces only) The amount by which the new face should be offset in the normal direction.
Also note that we provide code to gather the halfedges contained in the beveled face, creating the array `new_halfedges`. You should only have to update the position (`Vertex::pos`) of the vertices associated with this list of halfedges. The basic recipe for updating these positions is:
* Iterate over the list of halfedges (`new_halfedges`)
* Grab the vertex coordinates that are needed to compute the new, updated vertex coordinates (this could be a mix of values from `start_positions`, or the members `Vertex::pos`)
* Compute the updated vertex positions using the current values of `tangent_offset` (and possibly `normal_offset`)
* Store the new vertex positions in `Vertex::pos` _for the vertices of the new, beveled polygon only_ (i.e., the vertices associated with each of `new_halfedges`).
The reason for storing `new_halfedges` and `start_positions` in an array is that it makes it easy to access positions "to the left" and "to the right" of a given vertex. For instance, suppose we want to figure out the offset from the corner of a polygon. We might want to compute some geometric quantity involving the three vertex positions `start_positions[i-1]`, `start_positions[i]`, and `start_positions[i+1]` (as well as `inset`), then set the new vertex position `new_halfedges[i]->vertex()->pos` to this new value:
![BevelIndexing](bevel_indexing.png)
A useful trick here is _modular arithmetic_: since we really have a "loop" of vertices, we want to make sure that indexing the next element (+1) and the previous element (-1) properly "wraps around." This can be achieved via code like
// Get the number of vertices in the new polygon
int N = (int)hs.size();
// Assuming we're looking at vertex i, compute the indices
// of the next and previous elements in the list using
// modular arithmetic---note that to get the previous index,
// we can't just subtract 1 because the mod operation in C++
// doesn't behave quite how you might expect for negative
// values!
int a = (i+N-1) % N;
int b = i;
int c = (i+1) % N;
// Get the actual 3D vertex coordinates at these vertices
Vec3 pa = start_positions[a];
Vec3 pb = start_positions[b];
Vec3 pc = start_positions[c];
From here, you will need to compute new coordinates for vertex `i`, which can be accessed from `new_halfedges[i]->vertex()->pos`. As a "dummy" example (i.e., this is NOT what you should actually do!!) this code will set the position of the new vertex to the average of the vertices above:
new_halfedges[i].vertex()->pos = ( pa + pb + pc ) / 3.; // replace with something that actually makes sense!
The only question remaining is: where _should_ you put the beveled vertex? **We will leave this decision up to you.** This question is one where you will have to think a little bit about what a good design would be. Questions to ask yourself:
* How do I compute a point that is inset from the original geometry?
* For faces, how do I shift the geometry in the normal direction? (You may wish to use the method `Face::normal()` here.)
* What should I do as the offset geometry starts to look degenerate, e.g., shrinks to a point, or goes outside some reasonable bounds?
* What should I do when the geometry is nonplanar?
* Etc.
The best way to get a feel for whether you have a good design is _to try it out!_ Can you successfully and easily use this tool to edit your mesh? Or is it a total pain, producing bizarre results? You be the judge!
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="374.262px" height="166.379px" viewBox="0 0 374.262 166.379" enable-background="new 0 0 374.262 166.379"
xml:space="preserve">
<g>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M238.239,11.479
C220.064,5.018,200.496,1.5,180.104,1.5c-20.525,0-40.219,3.564-58.494,10.107"/>
<g>
<polygon points="248.105,15.332 236.335,4.315 237.47,11.275 231.989,15.709 "/>
</g>
</g>
</g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" points="39.812,22.958 20.785,22.958 0.627,35.704 10.113,57.938 27.9,73.945
33.829,107.147 56.317,153.985 87.64,165.843 117.93,153.985 144.699,149.243 150.627,118.412 134.916,103.59 141.334,84.103
127.505,63.273 150.627,35.704 112.075,18.808 78.143,6.95 "/>
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="81.408" y2="114.855"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="112.075" y2="18.808"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="39.812" y2="22.958"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="27.9" y2="73.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="33.829" y2="107.147"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="56.317" y2="153.985"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="117.93" y2="153.985"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="134.916" y2="103.59"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="127.505" y2="63.273"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="78.143" y2="6.95"/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="39.812,22.958 20.785,22.958 0.627,35.704 10.113,57.938
27.9,73.945 33.829,107.147 56.317,153.985 87.64,165.843 117.93,153.985 144.699,149.243 150.627,118.412 134.916,103.59
141.334,84.103 127.505,63.273 150.627,35.704 112.075,18.808 78.143,6.95 "/>
</g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" points="262.635,22.958 243.608,22.958 223.45,35.704 232.935,57.938 250.722,73.945
256.652,107.147 279.14,153.985 310.462,165.843 340.753,153.985 367.521,149.243 373.451,118.412 357.739,103.59 363.953,82.99
350.328,63.273 373.451,35.704 334.898,18.808 300.965,6.95 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="316.154" y1="35.705" x2="334.898" y2="18.808"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="279.107" y1="36.999" x2="262.635" y2="22.958"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="275.032" y1="62.832" x2="250.722" y2="73.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="279.473" y1="110.845" x2="256.652" y2="107.147"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="290.695" y1="135.965" x2="279.14" y2="153.985"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="322" y1="133.893" x2="340.753" y2="153.985"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="328.775" y1="109.688" x2="357.739" y2="103.59"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="322" y1="57.561" x2="350.328" y2="63.273"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="299.364" y1="27.521" x2="300.965" y2="6.95"/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="262.635,22.958 243.608,22.958 223.45,35.704
232.935,57.938 250.722,73.945 256.652,107.147 279.14,153.985 310.462,165.843 340.753,153.985 367.521,149.243 373.451,118.412
357.739,103.59 363.953,82.99 350.328,63.273 373.451,35.704 334.898,18.808 300.965,6.95 "/>
<polygon opacity="0.2" fill="#1B1F8A" points="322,57.561 328.775,109.688 322,133.893 290.695,135.965 279.473,110.845
274.603,63.028 278.878,35.705 299.364,27.521 316.155,35.705 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="322,57.561 328.775,109.688 322,133.893 290.695,135.965
279.473,110.845 274.603,63.028 278.878,35.705 299.364,27.521 316.155,35.705 "/>
</g>
<g>
<path d="M147.996,13.001c0.906-0.026,1.438-0.054,2.317-0.054c0.853,0,1.544,0.134,1.544,0.319l0.133,1.198h0.586l0.213-2.263
l-0.105-0.106c-0.586-0.054-0.879-0.08-1.492-0.08c-0.372,0-0.852,0.026-1.73,0.053c-1.145,0.027-1.598,0.027-2.05,0.027
c-0.56,0-1.251-0.027-2.982-0.054v0.586l0.586,0.054c0.692,0.053,0.745,0.159,0.745,1.544v7.136c0,0.533-0.08,0.772-0.319,0.906
l-0.506,0.292v0.347c1.571-0.026,1.571-0.026,1.944-0.026h0.532c1.624,0.026,2.263,0.053,3.062,0.053
c0.826,0,1.332-0.026,2.237-0.053l0.079-0.134l0.188-2.529h-0.64l-0.347,1.518c0,0-0.025,0.026-0.053,0.026
c-0.506,0.16-0.959,0.24-1.837,0.24c-0.666,0-1.278-0.026-2.104-0.054v-4.233c0.453-0.054,0.72-0.054,1.066-0.054h1.064
c0.586,0,0.852,0.16,0.905,0.586l0.08,0.799h0.64l-0.027-1.73c0-0.16,0-0.187,0.027-1.704h-0.64l-0.08,0.905
c-0.026,0.267-0.239,0.346-0.905,0.346h-1.064c-0.506,0-0.746,0-1.066-0.026V13.001"/>
<path d="M159.632,20.323c0,0.719-0.746,1.305-1.624,1.305c-1.118,0-1.837-1.092-1.837-2.822c0-1.598,0.559-2.396,1.678-2.396
c0.691,0,1.251,0.293,1.783,0.985V20.323 M161.576,11.51l-0.133-0.08l-1.145,0.347c-0.453,0.133-1.012,0.239-1.918,0.319v0.586
l0.826,0.053c0.373,0,0.426,0.16,0.426,1.092v1.943l-0.319-0.106c-0.452-0.186-0.879-0.293-1.278-0.293
c-0.506,0-0.959,0.16-1.385,0.427l-1.145,0.745c-0.905,0.612-1.332,1.518-1.332,2.876c0,2.264,1.172,3.728,3.036,3.728
c0.347,0,0.612-0.079,0.772-0.187l1.65-1.357l-0.08,1.198l0.08,0.106c0.959-0.026,1.252-0.026,1.438-0.026
c0.107,0,0.4,0,0.853,0.026c0.106,0,0.399,0,0.745,0V22.32l-0.532-0.026c-0.479-0.026-0.56-0.16-0.56-1.012V11.51z"/>
<path d="M167.514,23.093c1.944,0,2.423,0.266,2.423,1.278c0,1.092-1.064,1.917-2.477,1.917c-1.41,0-2.369-0.666-2.369-1.651
c0-0.586,0.346-1.118,0.825-1.357C166.156,23.173,166.742,23.093,167.514,23.093 M167.195,16.17c0.852,0,1.305,0.691,1.305,1.943
c0,1.118-0.426,1.704-1.278,1.704c-0.825,0-1.331-0.692-1.331-1.891C165.89,16.782,166.343,16.17,167.195,16.17z M171.615,17.021
l0.08-1.012c-0.666,0.053-0.959,0.08-1.305,0.08c-0.133,0-0.32,0-0.586-0.027c-0.639-0.479-1.385-0.692-2.424-0.692
c-2.023,0-3.434,1.198-3.434,2.85c0,0.586,0.213,1.118,0.585,1.544c0.293,0.293,0.532,0.453,1.092,0.64l-1.118,0.852
c-0.16,0.106-0.266,0.453-0.266,0.772c0,0.56,0.266,0.853,1.064,1.065l-1.278,0.772c-0.239,0.133-0.426,0.532-0.426,0.984
c0,1.358,1.331,2.237,3.435,2.237c2.797,0,4.66-1.438,4.66-3.542c0-1.357-0.746-1.97-2.344-1.97h-0.398
c-1.572,0.026-2.131,0.053-2.316,0.053c-0.48,0-0.746-0.159-0.746-0.479c0-0.239,0.16-0.426,0.479-0.612
c0.268,0,0.427,0.026,0.613,0.026c1.118,0,2.13-0.372,2.77-1.012c0.506-0.506,0.719-1.064,0.719-1.837
c0-0.267-0.027-0.453-0.08-0.772L171.615,17.021z"/>
<path d="M176.062,18.539h-0.054c-0.106,0-0.532-0.026-0.772-0.053h-0.506c0.054-1.571,0.426-2.21,1.358-2.21
c0.905,0,1.278,0.639,1.305,2.21L176.062,18.539 M179.417,18.167c0-1.678-1.198-2.797-3.009-2.797
c-0.532,0-0.959,0.134-1.385,0.373l-0.745,0.453c-1.065,0.612-1.519,1.57-1.519,3.089c0,2.503,1.279,3.86,3.648,3.86
c0.905,0,1.491-0.159,2.503-0.692l0.347-0.771l-0.187-0.24c-0.745,0.427-1.226,0.56-1.864,0.56c-0.825,0-1.598-0.426-1.997-1.118
c-0.267-0.453-0.347-0.826-0.372-1.571h2.076c0.905,0,1.625-0.08,2.503-0.319V18.167z"/>
<path d="M184.316,12.895c0.373-0.054,0.613-0.054,0.906-0.054c1.305,0,1.863,0.532,1.863,1.704c0,1.385-0.692,1.971-2.29,1.971
h-0.479V12.895 M184.316,17.341h0.479c1.837,0,2.636,0.692,2.636,2.316c0,1.651-0.745,2.37-2.449,2.37
c-0.24,0-0.399,0-0.666-0.053V17.341z M185.115,12.068c-0.373,0-1.465,0.027-1.73,0.027c-0.213,0-0.692,0-1.411-0.027
l-1.252-0.026v0.586l0.586,0.054c0.72,0.053,0.745,0.159,0.745,1.544v7.136c0,0.533-0.053,0.772-0.293,0.906l-0.531,0.292v0.347
c1.145-0.026,1.57-0.026,2.023-0.026c0.239,0,0.559,0,0.932,0c0.852,0.026,1.277,0.026,1.305,0.026
c2.557,0,4.313-1.411,4.313-3.462c0-0.852-0.319-1.544-0.878-1.943c-0.56-0.399-1.092-0.56-2.371-0.64
c1.332-0.452,1.785-0.691,2.291-1.145c0.373-0.347,0.586-0.932,0.586-1.518c0-1.465-0.986-2.157-2.982-2.157L185.115,12.068z"/>
<path d="M194.674,18.539h-0.08c-0.079,0-0.506-0.026-0.745-0.053h-0.506c0.026-1.571,0.426-2.21,1.331-2.21
s1.305,0.639,1.331,2.21L194.674,18.539 M198.029,18.167c0-1.678-1.197-2.797-3.008-2.797c-0.56,0-0.959,0.134-1.412,0.373
l-0.745,0.453c-1.038,0.612-1.491,1.57-1.491,3.089c0,2.503,1.252,3.86,3.621,3.86c0.905,0,1.491-0.159,2.529-0.692l0.347-0.771
l-0.187-0.24c-0.746,0.427-1.225,0.56-1.863,0.56c-0.826,0-1.625-0.426-1.998-1.118c-0.266-0.453-0.373-0.826-0.398-1.571h2.076
c0.906,0,1.625-0.08,2.529-0.319V18.167z"/>
<path d="M202.316,22.906h1.358c0.239-0.719,0.399-1.118,0.612-1.545l2.023-4.579c0.133-0.347,0.293-0.479,0.56-0.533l0.479-0.079
v-0.586l-1.518,0.026c-0.799,0-0.959,0-1.545-0.026v0.586l0.613,0.026c0.213,0.026,0.372,0.133,0.372,0.293
c0,0.187-0.054,0.399-0.159,0.639l-0.959,2.396c-0.16,0.347-0.293,0.692-0.56,1.278l-1.411-3.515
c-0.16-0.399-0.213-0.64-0.213-0.799c0-0.16,0.133-0.267,0.373-0.293l0.639-0.026v-0.586l-2.051,0.026
c-0.213,0-0.452,0-2.05-0.026v0.586l0.399,0.026c0.266,0.053,0.453,0.319,0.746,0.985L202.316,22.906"/>
<path d="M211.476,18.539h-0.08c-0.08,0-0.506-0.026-0.745-0.053h-0.506c0.026-1.571,0.426-2.21,1.331-2.21
c0.906,0,1.305,0.639,1.332,2.21L211.476,18.539 M214.832,18.167c0-1.678-1.198-2.797-3.01-2.797c-0.559,0-0.984,0.134-1.41,0.373
l-0.746,0.453c-1.039,0.612-1.491,1.57-1.491,3.089c0,2.503,1.251,3.86,3.622,3.86c0.904,0,1.49-0.159,2.529-0.692l0.346-0.771
l-0.186-0.24c-0.773,0.427-1.226,0.56-1.865,0.56c-0.824,0-1.623-0.426-1.996-1.118c-0.267-0.453-0.373-0.826-0.4-1.571h2.078
c0.904,0,1.623-0.08,2.529-0.319V18.167z"/>
<path d="M218.931,11.43l-1.117,0.347c-0.48,0.133-1.012,0.239-1.944,0.319v0.586l0.853,0.053c0.346,0,0.398,0.16,0.398,1.092
v7.456c0,0.852-0.079,0.985-0.559,1.012l-0.56,0.026v0.586l2.051-0.026c0.319,0,1.092,0,2.157,0.026V22.32l-0.56-0.026
c-0.506-0.026-0.587-0.16-0.587-1.012V11.51L218.931,11.43"/>
</g>
<g>
<defs>
<rect id="SVGID_1_" x="83.23" y="79.343" width="6" height="8"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M85.015,82.789c0.293-1.092,0.611-1.784,1.064-2.184c0.293-0.266,0.771-0.452,1.145-0.452
c0.48,0,0.772,0.319,0.772,0.825c0,0.692-0.56,1.438-1.384,1.837c-0.453,0.24-1.013,0.399-1.731,0.56L85.015,82.789
M88.449,85.372l-0.398,0.267c-0.826,0.612-1.598,0.932-2.157,0.932c-0.745,0-1.225-0.586-1.225-1.544
c0-0.399,0.054-0.826,0.133-1.278l1.306-0.319c0.266-0.08,0.691-0.24,1.091-0.399c1.358-0.586,1.971-1.332,1.971-2.317
c0-0.745-0.532-1.225-1.331-1.225c-1.039,0-2.797,1.092-3.408,2.104c-0.48,0.799-0.959,2.689-0.959,3.755
c0,1.251,0.692,1.97,1.838,1.97c0.904,0,1.811-0.452,3.274-1.624L88.449,85.372z"/>
</g>
<g>
<defs>
<rect id="SVGID_3_" x="295.464" y="74.019" width="10" height="17"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M303.107,80.128c0.08-0.293,0.186-0.666,0.266-0.879l-0.053-0.106l-0.107,0.026
c-0.398,0.08-0.559,0.106-1.33,0.106h-0.268l0.347-1.783c0.239-1.358,0.692-1.971,1.411-1.971c0.479,0,0.906,0.239,1.145,0.612
l0.16-0.054c0.08-0.266,0.24-0.745,0.373-1.064l0.08-0.24c-0.267-0.106-0.746-0.213-1.119-0.213c-0.159,0-0.426,0.054-0.559,0.106
c-0.373,0.187-1.678,1.146-2.051,1.545c-0.346,0.346-0.532,0.825-0.719,1.73l-0.239,1.252c-0.64,0.319-0.958,0.452-1.358,0.585
l-0.08,0.347h1.279l-0.134,0.905c-0.479,3.089-1.065,6.044-1.411,7.136c-0.293,0.933-0.772,1.438-1.332,1.438
c-0.372,0-0.532-0.106-0.824-0.453l-0.24,0.054c-0.053,0.373-0.267,1.118-0.346,1.278c0.133,0.079,0.372,0.133,0.559,0.133
c0.639,0,1.491-0.506,2.131-1.252c0.958-1.145,1.305-2.263,2.476-7.828c0.054-0.213,0.159-0.799,0.293-1.411H303.107"/>
</g>
</g>
<g>
<g>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="98.723,132.93 98.453,133.893
97.456,133.959 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.9582,1.9582" x1="95.501" y1="134.088" x2="69.123" y2="135.834"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="68.146,135.898 67.148,135.965
66.741,135.052 "/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.9849,1.9849" points="
65.931,133.239 55.927,110.845 51.057,63.028 55.024,37.674 "/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="55.177,36.693 55.332,35.705
56.261,35.334 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.8236,1.8236" x1="57.954" y1="34.657" x2="74.042" y2="28.23"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="74.889,27.893 75.817,27.521
76.716,27.96 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.8532,1.8532" x1="78.382" y1="28.771" x2="90.876" y2="34.861"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="91.709,35.267 92.608,35.705
92.867,36.671 "/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="2.0066,2.0066" points="
93.385,38.609 98.453,57.561 105.229,109.688 98.993,131.964 "/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="397.95px" height="144.156px" viewBox="0 0 397.95 144.156" enable-background="new 0 0 397.95 144.156"
xml:space="preserve">
<g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="255.37,99.587 269.232,57.996 301.103,34.25
354.4,40.633 368.03,64.093 348.375,94.373 262.219,114.564 "/>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M264.146,11.479
C245.972,5.018,226.403,1.5,206.012,1.5c-20.525,0-40.219,3.564-58.494,10.107"/>
<g>
<polygon points="274.013,15.332 262.243,4.315 263.377,11.275 257.896,15.709 "/>
</g>
</g>
</g>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="20,42.64 66.167,8.241 141.754,17.293 169.364,64.819
135.87,116.417 20,143.576 0.537,101.028 "/>
<polygon opacity="0.4" fill="#1B1F8A" enable-background="new " points="20,42.64 66.167,8.241 141.754,17.293 169.364,64.819
135.87,116.417 20,143.576 0.537,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="247.999,42.64 294.167,8.241 369.754,17.293 397.364,64.819
363.87,116.417 247.999,143.576 228.536,101.028 "/>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="247.999,42.64 294.167,8.241 369.754,17.293
397.364,64.819 363.87,116.417 247.999,143.576 228.536,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="247.999,42.64 294.167,8.241 369.754,17.293 397.364,64.819
363.87,116.417 247.999,143.576 228.536,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="255.37,99.587 269.232,57.996 301.103,34.25 354.4,40.633
368.03,64.093 348.375,94.373 262.219,114.564 "/>
<polygon fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="2" points="27.735,99.587
41.599,57.996 73.469,34.25 126.767,40.633 140.396,64.093 120.741,94.373 34.586,114.564 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="262.219" y1="114.564" x2="247.999" y2="143.576"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="255.37" y1="99.587" x2="228.536" y2="101.028"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="269.232" y1="57.996" x2="247.999" y2="42.64"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="301.103" y1="34.25" x2="294.167" y2="8.241"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="354.4" y1="40.633" x2="369.754" y2="17.293"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="368.03" y1="64.093" x2="397.364" y2="64.819"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="348.375" y1="94.373" x2="363.87" y2="116.417"/>
<g>
<g>
<defs>
<rect id="SVGID_1_" x="303.292" y="66.062" width="9" height="13"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M308.165,67.345c0.933,0,1.385,0.561,1.385,1.704c0,1.625-0.771,2.743-1.863,2.743
c-0.984,0-1.491-0.666-1.491-1.917C306.194,68.384,306.993,67.345,308.165,67.345 M308.217,75.387
c0.72,0.559,1.039,0.985,1.039,1.519c0,0.824-1.118,1.49-2.424,1.49c-1.305,0-2.209-0.666-2.209-1.624
c0-0.612,0.293-1.172,0.799-1.599c0.398-0.318,0.746-0.479,1.57-0.719L308.217,75.387z M310.642,68.41
c0.267,0.054,0.373,0.054,0.532,0.054c0.267,0,0.427-0.027,0.799-0.08l0.134-0.719l-0.054-0.08
c-0.428,0.106-0.745,0.133-1.624,0.133c-0.24-0.399-0.399-0.559-0.8-0.719c-0.346-0.106-0.746-0.187-1.064-0.187
c-0.665,0-1.438,0.293-2.156,0.825c-0.879,0.666-1.332,1.571-1.332,2.717c0,1.225,0.692,1.943,1.918,1.943
c0.133,0,0.319,0,0.479-0.026l-0.641,0.611c-0.266,0.24-0.426,0.533-0.426,0.746c0,0.16,0.107,0.347,0.32,0.533
c-1.199,0.398-1.705,0.639-2.291,1.117c-0.531,0.452-0.824,1.064-0.824,1.704c0,1.146,1.117,1.864,2.85,1.864
c2.049,0,3.834-1.146,3.834-2.477c0-0.561-0.346-1.146-1.012-1.679l-0.959-0.799c-0.533-0.427-0.746-0.72-0.746-1.013
c0-0.159,0.106-0.318,0.32-0.611c0.053-0.054,0.079-0.08,0.105-0.134c1.57-0.372,2.688-1.704,2.688-3.115
c0-0.133-0.026-0.293-0.053-0.532V68.41H310.642z"/>
</g>
</g>
<g>
<g>
<defs>
<rect id="SVGID_3_" x="73.454" y="61.863" width="10" height="17"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M81.097,67.973c0.08-0.293,0.186-0.666,0.266-0.879l-0.053-0.106l-0.107,0.026
c-0.398,0.08-0.559,0.106-1.33,0.106h-0.268l0.347-1.783c0.239-1.358,0.692-1.971,1.411-1.971c0.479,0,0.906,0.239,1.145,0.612
l0.16-0.054c0.08-0.266,0.24-0.745,0.373-1.064l0.08-0.24c-0.267-0.106-0.746-0.213-1.119-0.213
c-0.159,0-0.426,0.054-0.559,0.106c-0.373,0.187-1.678,1.146-2.051,1.545c-0.346,0.346-0.532,0.825-0.719,1.73l-0.239,1.252
c-0.64,0.319-0.958,0.452-1.358,0.585l-0.08,0.347h1.279l-0.134,0.905c-0.479,3.089-1.065,6.044-1.411,7.136
c-0.293,0.933-0.772,1.438-1.332,1.438c-0.372,0-0.532-0.105-0.824-0.453l-0.24,0.055c-0.053,0.373-0.267,1.117-0.346,1.277
c0.133,0.08,0.372,0.133,0.559,0.133c0.639,0,1.491-0.506,2.131-1.252c0.958-1.145,1.305-2.262,2.476-7.828
c0.054-0.213,0.159-0.799,0.293-1.411L81.097,67.973"/>
</g>
</g>
<g>
<path d="M174.197,13.137c0.771-0.027,1.305-0.054,1.837-0.054c1.065,0,1.758,0.106,1.758,0.319l0.133,1.172h0.586l0.213-2.236
l-0.106-0.134c-0.586-0.026-0.878-0.053-1.491-0.053c-0.373,0-0.985,0.026-2.237,0.053c-0.745,0-1.145,0-1.464,0
c-0.453,0-0.453,0-2.822-0.026v0.586l0.585,0.053c0.719,0.054,0.772,0.16,0.772,1.545v6.497c0,1.411-0.027,1.438-0.772,1.491
l-0.585,0.053v0.64c1.917-0.054,1.917-0.054,2.45-0.054c0.532,0,0.532,0,2.663,0.054v-0.64l-0.746-0.053
c-0.746-0.026-0.772-0.106-0.772-1.491v-2.982c0.453-0.026,0.719-0.054,1.065-0.054h0.799c0.612,0,0.878,0.187,0.905,0.586
l0.106,0.799h0.639l-0.053-1.704c0-0.187,0-0.399,0.053-1.65h-0.639l-0.106,0.852c-0.027,0.24-0.24,0.319-0.905,0.319h-0.799
c-0.533,0-0.746,0-1.065-0.026v-3.862"/>
<path d="M183.703,21.178c-0.293,0.399-0.879,0.692-1.358,0.692c-0.506,0-0.826-0.373-0.826-0.985c0-0.772,0.346-1.092,1.465-1.411
l0.719-0.187V21.178 M183.703,21.924l-0.08,0.984l0.08,0.134c0.985-0.027,1.251-0.054,1.464-0.054
c0.188,0,0.427,0.026,1.385,0.054v-0.586l-0.479-0.054c-0.347-0.053-0.426-0.213-0.453-0.958v-0.347
c0-0.506-0.026-0.958-0.026-1.331c0-0.426,0.026-0.932,0.026-1.545c0.027-0.213,0.027-0.346,0.027-0.452
c0-1.411-0.959-2.264-2.557-2.264c-0.666,0-1.332,0.187-1.917,0.533l-0.825,0.506v1.118l0.479,0.106l0.346-0.799
c0.027-0.106,0.479-0.213,0.905-0.213c1.065,0,1.571,0.559,1.625,1.863l-1.385,0.293c-2.023,0.399-2.716,1.039-2.716,2.37
c0,1.305,0.639,1.971,1.837,1.971c0.373,0,0.639-0.054,0.799-0.187L183.703,21.924z"/>
<path d="M193.155,18.276c0.106-1.012,0.188-1.544,0.32-2.236l-0.107-0.214c-0.745-0.266-1.064-0.319-1.65-0.319
c-0.586,0-1.039,0.106-1.411,0.347l-0.853,0.479c-1.41,0.852-1.916,1.65-1.916,3.035c0,2.503,1.251,3.888,3.541,3.888
c0.799,0,1.385-0.133,2.13-0.532l0.319-0.72l-0.133-0.159c-0.533,0.213-0.905,0.293-1.357,0.293c-1.545,0-2.53-1.252-2.53-3.275
c0-1.438,0.56-2.237,1.571-2.237c0.719,0,1.331,0.32,1.385,0.692l0.105,0.959L193.155,18.276"/>
<path d="M198.028,18.649h-0.053c-0.107,0-0.533,0-0.772-0.027l-0.506-0.026c0.054-1.571,0.427-2.21,1.358-2.21
c0.904,0,1.277,0.639,1.305,2.21L198.028,18.649 M201.383,18.302c0-1.704-1.197-2.796-3.008-2.796
c-0.56,0-0.959,0.106-1.385,0.373l-0.745,0.426c-1.065,0.64-1.519,1.598-1.519,3.089c0,2.53,1.278,3.861,3.648,3.861
c0.905,0,1.492-0.16,2.503-0.666l0.346-0.772l-0.186-0.239c-0.746,0.426-1.227,0.56-1.865,0.56c-0.825,0-1.598-0.453-1.997-1.119
c-0.267-0.452-0.346-0.825-0.373-1.57h2.077c0.906,0,1.625-0.08,2.503-0.319V18.302L201.383,18.302z"/>
<path d="M206.176,13.031c0.373-0.054,0.613-0.054,0.906-0.054c1.305,0,1.863,0.506,1.863,1.678c0,1.385-0.693,1.97-2.291,1.97
h-0.479V13.031 M206.176,17.451h0.48c1.838,0,2.637,0.719,2.637,2.343c0,1.651-0.746,2.37-2.449,2.37c-0.24,0-0.4,0-0.666-0.054
v-4.659H206.176z M206.976,12.178c-0.373,0.026-1.466,0.026-1.729,0.026c-0.213,0-0.693,0-1.412,0l-1.252-0.026v0.586l0.586,0.053
c0.72,0.054,0.746,0.16,0.746,1.545v7.109c0,0.56-0.054,0.799-0.293,0.905l-0.533,0.293v0.373
c1.146-0.027,1.572-0.054,2.023-0.054c0.239,0,0.561,0,0.934,0.026c0.852,0,1.276,0.027,1.305,0.027
c2.557,0,4.312-1.438,4.312-3.488c0-0.825-0.318-1.545-0.879-1.944c-0.56-0.372-1.092-0.532-2.369-0.612
c1.332-0.479,1.783-0.692,2.289-1.145c0.373-0.373,0.586-0.933,0.586-1.545c0-1.438-0.984-2.13-2.981-2.13L206.976,12.178
L206.976,12.178z"/>
<path d="M216.642,18.649h-0.08c-0.08,0-0.533,0-0.746-0.027l-0.532-0.026c0.055-1.571,0.452-2.21,1.358-2.21
c0.903,0,1.306,0.639,1.331,2.21L216.642,18.649 M219.969,18.302c0-1.704-1.172-2.796-2.98-2.796c-0.56,0-0.986,0.106-1.412,0.373
l-0.744,0.426c-1.039,0.64-1.519,1.598-1.519,3.089c0,2.53,1.276,3.861,3.647,3.861c0.904,0,1.49-0.16,2.502-0.666l0.373-0.772
l-0.213-0.239c-0.746,0.426-1.226,0.56-1.838,0.56c-0.852,0-1.623-0.453-2.022-1.119c-0.24-0.452-0.347-0.825-0.373-1.57h2.077
c0.904,0,1.623-0.08,2.503-0.319L219.969,18.302L219.969,18.302z"/>
<path d="M224.176,23.042h1.357c0.24-0.719,0.4-1.118,0.613-1.545l2.023-4.58c0.133-0.346,0.293-0.479,0.559-0.532l0.48-0.08
v-0.612l-1.52,0.054c-0.799-0.027-0.958-0.027-1.544-0.054v0.612l0.612,0.027c0.213,0.026,0.371,0.133,0.371,0.266
c0,0.187-0.053,0.426-0.158,0.666l-0.958,2.396c-0.16,0.346-0.294,0.666-0.56,1.278l-1.412-3.516
c-0.16-0.399-0.213-0.639-0.213-0.825c0-0.159,0.133-0.239,0.373-0.266l0.639-0.027v-0.612l-2.051,0.054
c-0.213,0-0.453,0-2.051-0.054v0.612l0.4,0.027c0.266,0.026,0.451,0.292,0.744,0.984L224.176,23.042"/>
<path d="M233.417,18.649h-0.053c-0.08,0-0.533,0-0.773-0.027l-0.506-0.026c0.055-1.571,0.426-2.21,1.358-2.21
c0.905,0,1.278,0.639,1.331,2.21L233.417,18.649 M236.771,18.302c0-1.704-1.171-2.796-2.981-2.796
c-0.561,0-0.985,0.106-1.412,0.373l-0.746,0.426c-1.037,0.64-1.518,1.598-1.518,3.089c0,2.53,1.279,3.861,3.648,3.861
c0.904,0,1.49-0.16,2.503-0.666l0.347-0.772l-0.188-0.239c-0.745,0.426-1.225,0.56-1.863,0.56c-0.826,0-1.598-0.453-1.997-1.119
c-0.239-0.452-0.347-0.825-0.372-1.57h2.076c0.904,0,1.625-0.08,2.503-0.319V18.302z"/>
<path d="M240.899,11.54l-1.146,0.372c-0.451,0.134-0.984,0.213-1.916,0.32v0.585l0.852,0.027c0.346,0.026,0.4,0.188,0.4,1.118
v7.455c0,0.853-0.082,0.959-0.562,1.013l-0.56,0.026v0.586l2.052-0.054c0.319,0,1.063,0.026,2.13,0.054v-0.586l-0.531-0.026
c-0.507-0.054-0.586-0.16-0.586-1.013v-9.771L240.899,11.54"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="349.88px" height="119.336px" viewBox="0 0 349.88 119.336" enable-background="new 0 0 349.88 119.336"
xml:space="preserve">
<g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" points="52.667,118.825 19.741,90.492 0.667,45.513 29.396,35.193 31.167,16.367
54.48,0.658 68.487,16.367 100.167,6.158 107.579,35.193 136.333,50.825 117.234,77.493 109.333,99.158 90.182,116.492 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="52.667,118.825 19.741,90.492 0.667,45.513 29.396,35.193
31.167,16.367 54.48,0.658 68.487,16.367 100.167,6.158 107.579,35.193 136.333,50.825 117.234,77.493 109.333,99.158
90.182,116.492 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="68.487" y2="16.367"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="107.579" y2="35.193"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="117.234" y2="77.493"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="90.182" y2="116.492"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="52.667" y2="118.825"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="19.741" y2="90.492"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="29.396" y2="35.193"/>
<circle cx="76.167" cy="55.658" r="3.671"/>
</g>
<g>
<defs>
<rect id="SVGID_1_" x="76.774" y="40.104" width="8" height="8"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M81.86,41.181l0.16,0.293c0.16-0.079,0.293-0.133,0.426-0.133
c0.426,0,0.692,0.373,0.692,1.012c0,2.344-1.544,4.926-2.929,4.926c-0.799,0-1.278-0.665-1.278-1.704
c0-1.65,0.613-3.115,2.184-5.032l-0.16-0.293c-0.32,0.133-0.533,0.187-0.985,0.187c-0.426,0-1.118-0.026-1.571-0.08l-0.187-0.026
c-0.106,0-0.187,0-0.187,0c-0.186,0-0.346,0.026-0.506,0.106c-0.24,0.426-0.399,1.012-0.612,1.864h0.346l0.266-0.666
c0.133-0.267,0.426-0.426,0.826-0.426c0.08,0,0.213,0,0.426,0c0.133,0.026,0.24,0.026,0.453,0.026c0.32,0,0.586-0.026,0.985-0.08
c-1.757,1.917-2.423,3.249-2.423,4.819c0,1.226,0.719,2.104,1.758,2.104c0.666,0,1.251-0.292,1.997-0.932
c0.746-0.692,1.491-1.757,1.997-2.849c0.346-0.799,0.612-1.864,0.612-2.503c0-0.905-0.399-1.545-0.985-1.545
c-0.213,0-0.399,0.054-0.506,0.187L81.86,41.181"/>
</g>
</g>
<g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" points="265.477,118.825 232.551,90.492 213.477,45.513 242.206,35.193 243.977,16.367
267.291,0.658 281.298,16.367 312.977,6.158 320.39,35.193 349.144,50.825 330.044,77.493 322.144,99.158 302.992,116.492 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="265.477,118.825 232.551,90.492 213.477,45.513
242.206,35.193 243.977,16.367 267.291,0.658 281.298,16.367 312.977,6.158 320.39,35.193 349.144,50.825 330.044,77.493
322.144,99.158 302.992,116.492 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="283.766" y1="28.996" x2="281.298" y2="16.367"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="311.736" y1="40.831" x2="320.39" y2="35.193"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="312.965" y1="68.413" x2="330.044" y2="77.493"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="295.076" y1="82.129" x2="302.992" y2="116.492"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="279.503" y1="81.125" x2="265.477" y2="118.825"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="265.591" y1="70.095" x2="232.551" y2="90.492"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="264.088" y1="44.768" x2="242.206" y2="35.193"/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="283.766,28.996 264.088,44.768 265.591,70.095
279.503,81.125 295.076,82.129 312.965,68.413 311.736,40.831 "/>
<polygon opacity="0.2" fill="#1B1F8A" points="264.088,44.768 265.591,70.095 279.503,81.125 295.076,82.129 312.965,68.413
311.736,40.831 283.766,28.996 "/>
</g>
<g>
<defs>
<rect id="SVGID_3_" x="282.648" y="48.78" width="10" height="17"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M290.29,54.89c0.08-0.293,0.187-0.666,0.267-0.879l-0.054-0.106l-0.106,0.026
c-0.399,0.08-0.559,0.106-1.331,0.106h-0.267l0.346-1.783c0.24-1.358,0.692-1.971,1.412-1.971c0.479,0,0.905,0.239,1.145,0.612
l0.16-0.054c0.08-0.266,0.239-0.745,0.373-1.064l0.08-0.24c-0.267-0.106-0.746-0.213-1.119-0.213c-0.16,0-0.426,0.054-0.559,0.106
c-0.373,0.187-1.677,1.146-2.05,1.545c-0.346,0.346-0.533,0.825-0.719,1.73l-0.24,1.252c-0.639,0.319-0.958,0.452-1.358,0.585
l-0.08,0.347h1.278l-0.133,0.905c-0.479,3.089-1.065,6.044-1.411,7.136c-0.293,0.933-0.772,1.438-1.332,1.438
c-0.373,0-0.533-0.106-0.825-0.453l-0.24,0.054c-0.053,0.373-0.267,1.118-0.346,1.278c0.133,0.079,0.373,0.133,0.559,0.133
c0.639,0,1.491-0.506,2.13-1.252c0.958-1.145,1.305-2.263,2.476-7.828c0.053-0.213,0.16-0.799,0.293-1.411H290.29"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M227.278,19.637
c-18.174-6.461-37.744-9.979-58.134-9.979c-20.525,0-40.219,3.564-58.494,10.107"/>
<g>
<polygon points="237.145,23.491 225.375,12.474 226.51,19.434 221.028,23.868 "/>
</g>
</g>
</g>
<g>
<path d="M132.623,20.639v-0.586c-0.666,0-1.278,0-1.465,0.026c-0.532,0-0.905,0-1.091,0c-0.24,0-0.24,0-2.53-0.026v0.586
l0.666,0.053c0.399,0.027,0.639,0.32,0.985,1.146l3.781,9.08h1.225c0.16-0.427,0.213-0.586,0.293-0.772
c0.08-0.239,0.133-0.426,0.187-0.479c0-0.053,0.053-0.187,0.106-0.319l3.328-7.908c0.187-0.506,0.4-0.719,0.746-0.746l0.506-0.053
v-0.586c-1.704,0.026-1.704,0.026-1.864,0.026c-0.16,0-0.426,0-0.878,0c-0.133-0.026-0.533-0.026-0.932-0.026v0.586l0.719,0.053
c0.373,0.027,0.586,0.16,0.586,0.399c0,0.24-0.16,0.746-0.479,1.571l-2.264,5.618l-2.503-6.15
c-0.319-0.825-0.319-0.853-0.319-1.146c0-0.133,0.186-0.293,0.399-0.293L132.623,20.639"/>
<path d="M141.81,26.523h-0.08c-0.08,0-0.533,0-0.746-0.027l-0.533-0.026c0.053-1.571,0.453-2.21,1.358-2.21s1.278,0.639,1.331,2.21
L141.81,26.523 M145.138,26.177c0-1.704-1.171-2.796-2.982-2.796c-0.56,0-0.985,0.106-1.412,0.373l-0.746,0.426
c-1.038,0.64-1.518,1.598-1.518,3.089c0,2.53,1.278,3.861,3.648,3.861c0.905,0,1.491-0.16,2.503-0.666l0.373-0.772l-0.213-0.239
c-0.746,0.426-1.225,0.56-1.837,0.56c-0.853,0-1.625-0.453-2.024-1.119c-0.24-0.452-0.346-0.825-0.373-1.57h2.077
c0.905,0,1.625-0.08,2.503-0.319V26.177z"/>
<path d="M149.212,23.381l-1.119,0.347c-0.506,0.159-0.799,0.213-1.784,0.346v0.56l0.719,0.053c0.346,0.027,0.399,0.187,0.399,1.119
v3.487c0,0.853-0.08,0.959-0.559,1.013l-0.559,0.026v0.586l2.05-0.054c0.186,0,0.239,0,2.396,0.054v-0.586l-0.612-0.026
c-0.692-0.054-0.772-0.134-0.772-1.013v-3.168c0-0.479,0.639-1.012,1.278-1.012c0.399,0,0.666,0.186,0.905,0.585l0.373-0.159
l0.08-2.051c-0.16-0.079-0.373-0.106-0.586-0.106c-0.453,0-0.746,0.187-1.358,0.853l-0.692,0.745v-1.491L149.212,23.381"/>
<path d="M157.173,29.905l-0.133-0.293c-0.32,0.159-0.479,0.213-0.719,0.213c-0.746,0-0.985-0.267-0.985-1.039v-3.78h1.678
l0.133-1.039l-1.811,0.106v-0.932c0-0.853,0.053-1.358,0.187-2.157l-0.213-0.159c-0.639,0.293-1.145,0.479-1.944,0.799
c0.053,0.825,0.053,1.118,0.053,1.464v0.959l-1.039,0.666v0.346l1.012-0.053v4.127c0,1.411,0.586,1.997,1.971,1.997
c0.479,0,0.879-0.106,1.039-0.267L157.173,29.905"/>
<path d="M161.301,26.523h-0.08c-0.08,0-0.506,0-0.746-0.027l-0.506-0.026c0.053-1.571,0.426-2.21,1.332-2.21
s1.305,0.639,1.331,2.21L161.301,26.523 M164.656,26.177c0-1.704-1.198-2.796-3.009-2.796c-0.559,0-0.958,0.106-1.385,0.373
l-0.772,0.426c-1.039,0.64-1.491,1.598-1.491,3.089c0,2.53,1.251,3.861,3.621,3.861c0.905,0,1.518-0.16,2.53-0.666l0.346-0.772
l-0.187-0.239c-0.746,0.426-1.225,0.56-1.864,0.56c-0.826,0-1.598-0.453-1.997-1.119c-0.267-0.452-0.346-0.825-0.399-1.57h2.104
c0.905,0,1.598-0.08,2.503-0.319V26.177z"/>
<path d="M168.41,27.535l-1.757,2.21c-0.319,0.399-0.612,0.56-1.092,0.586v0.532h1.438c0.453-0.719,0.639-0.958,0.825-1.225
l1.012-1.411l1.598,2.689l1.251-0.054c0.639,0.026,0.746,0.026,1.225,0.054v-0.586c-0.506-0.054-0.825-0.347-1.384-1.252
l-1.412-2.423l1.544-1.811c0.506-0.586,0.666-0.666,1.251-0.692v-0.586h-1.518l-1.731,2.396l-0.825-1.357
c-0.373-0.613-0.666-0.959-0.985-1.226c-0.533,0.134-1.731,0.399-2.316,0.506l0.133,0.586c0.08-0.026,0.187-0.026,0.24-0.026
c0.533,0,0.799,0.213,1.225,0.932L168.41,27.535"/>
<path d="M177.437,20.905c0.373-0.054,0.612-0.054,0.932-0.054c1.278,0,1.837,0.506,1.837,1.678c0,1.385-0.692,1.97-2.29,1.97
h-0.479V20.905 M177.437,25.325h0.479c1.837,0,2.636,0.719,2.636,2.343c0,1.651-0.746,2.37-2.423,2.37c-0.24,0-0.426,0-0.692-0.054
V25.325z M178.236,20.053c-0.373,0.026-1.464,0.026-1.731,0.026c-0.213,0-0.666,0-1.411,0l-1.251-0.026v0.586l0.586,0.053
c0.719,0.054,0.772,0.16,0.772,1.545v7.109c0,0.56-0.08,0.799-0.319,0.905l-0.506,0.293v0.373c1.145-0.027,1.544-0.054,1.997-0.054
c0.24,0,0.56,0,0.959,0.026c0.825,0,1.251,0.027,1.305,0.027c2.529,0,4.287-1.438,4.287-3.488c0-0.825-0.293-1.545-0.852-1.944
c-0.586-0.372-1.119-0.532-2.396-0.612c1.331-0.479,1.811-0.692,2.29-1.145c0.373-0.373,0.613-0.933,0.613-1.545
c0-1.438-0.985-2.13-3.009-2.13H178.236z"/>
<path d="M187.795,26.523h-0.053c-0.106,0-0.532,0-0.772-0.027l-0.506-0.026c0.054-1.571,0.426-2.21,1.358-2.21
c0.905,0,1.278,0.639,1.305,2.21L187.795,26.523 M191.15,26.177c0-1.704-1.198-2.796-3.009-2.796c-0.559,0-0.958,0.106-1.385,0.373
l-0.745,0.426c-1.065,0.64-1.518,1.598-1.518,3.089c0,2.53,1.278,3.861,3.648,3.861c0.905,0,1.491-0.16,2.503-0.666l0.346-0.772
l-0.187-0.239c-0.745,0.426-1.225,0.56-1.864,0.56c-0.825,0-1.598-0.453-1.997-1.119c-0.266-0.452-0.346-0.825-0.373-1.57h2.077
c0.905,0,1.625-0.08,2.503-0.319V26.177z"/>
<path d="M195.437,30.917h1.358c0.267-0.719,0.426-1.118,0.613-1.545l2.023-4.58c0.16-0.346,0.319-0.479,0.586-0.532l0.479-0.08
v-0.612l-1.545,0.054c-0.799-0.027-0.932-0.027-1.544-0.054v0.612l0.612,0.027c0.213,0.026,0.373,0.133,0.373,0.266
c0,0.187-0.053,0.426-0.16,0.666l-0.958,2.396c-0.133,0.346-0.292,0.666-0.559,1.278l-1.385-3.516
c-0.16-0.399-0.24-0.639-0.24-0.825c0-0.159,0.133-0.239,0.373-0.266l0.639-0.027v-0.612l-2.05,0.054c-0.186,0-0.453,0-2.05-0.054
v0.612l0.399,0.027c0.267,0.026,0.479,0.292,0.746,0.984L195.437,30.917"/>
<path d="M204.704,26.523h-0.081c-0.08,0-0.505,0-0.745-0.027l-0.506-0.026c0.026-1.571,0.426-2.21,1.331-2.21
s1.305,0.639,1.332,2.21L204.704,26.523 M208.059,26.177c0-1.704-1.199-2.796-3.01-2.796c-0.559,0-0.985,0.106-1.411,0.373
l-0.746,0.426c-1.038,0.64-1.491,1.598-1.491,3.089c0,2.53,1.251,3.861,3.621,3.861c0.906,0,1.491-0.16,2.529-0.666l0.346-0.772
l-0.186-0.239c-0.746,0.426-1.225,0.56-1.864,0.56c-0.825,0-1.624-0.453-1.997-1.119c-0.267-0.452-0.373-0.825-0.399-1.57h2.077
c0.905,0,1.624-0.08,2.53-0.319V26.177z"/>
<path d="M212.079,19.414l-1.145,0.372c-0.479,0.134-1.012,0.213-1.917,0.32v0.585l0.826,0.027c0.346,0.026,0.426,0.187,0.426,1.118
v7.455c0,0.853-0.08,0.959-0.586,1.013l-0.559,0.026v0.586l2.05-0.054c0.32,0,1.091,0.026,2.157,0.054v-0.586l-0.559-0.026
c-0.48-0.054-0.56-0.16-0.56-1.013v-9.771L212.079,19.414"/>
</g>
<g>
<g>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="71.827,29.386 70.906,28.996
70.126,29.622 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="2.1108,2.1108" x1="68.479" y1="30.941" x2="52.832" y2="43.482"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="52.008,44.142 51.228,44.768
51.287,45.766 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="2.1247,2.1247" x1="51.413" y1="47.887" x2="52.609" y2="68.036"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="52.672,69.097 52.731,70.095
53.515,70.716 "/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.9964,1.9964" points="
55.08,71.956 66.643,81.125 82.216,82.129 98.52,69.628 "/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="99.312,69.021 100.105,68.413
100.061,67.414 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.97,1.97" x1="99.973" y1="65.446" x2="98.965" y2="42.813"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="98.921,41.83 98.876,40.831
97.956,40.441 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.8914,1.8914" x1="96.213" y1="39.704" x2="72.698" y2="29.754"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="374.264px" height="166.379px" viewBox="0 0 374.264 166.379" enable-background="new 0 0 374.264 166.379"
xml:space="preserve">
<g>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M238.239,11.479
C220.064,5.018,200.496,1.5,180.104,1.5c-20.524,0-40.22,3.564-58.494,10.107"/>
<g>
<polygon points="248.105,15.332 236.336,4.315 237.471,11.275 231.989,15.709 "/>
</g>
</g>
</g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="39.812,22.958 20.785,22.958 0.627,35.704 2,67.938
27.9,87.945 27.9,87.945 56.317,153.984 87.64,165.843 117.93,153.984 144.699,149.243 150.627,118.412 134.916,103.59
141.166,83.188 127.505,63.273 150.627,35.704 112.075,18.808 78.143,6.95 "/>
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="81.408" y2="114.855"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="112.075" y2="18.808"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="39.812" y2="22.958"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="27.9" y2="87.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="27.9" y2="87.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="56.317" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="117.93" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="134.916" y2="103.59"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="127.505" y2="63.273"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="78.143" y2="6.95"/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="39.812,22.958 20.785,22.958 0.627,35.704 2,67.938
27.9,87.945 27.9,87.945 56.317,153.984 87.64,165.843 117.93,153.984 144.699,149.243 150.627,118.412 134.916,103.59
141.166,83.188 127.505,63.273 150.627,35.704 112.075,18.808 78.143,6.95 "/>
</g>
<g>
<g>
<g>
<defs>
<rect id="SVGID_1_" x="83.23" y="79.343" width="6" height="8"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M85.015,82.789c0.293-1.092,0.61-1.784,1.063-2.184c0.293-0.266,0.771-0.452,1.146-0.452
c0.479,0,0.771,0.319,0.771,0.825c0,0.692-0.561,1.438-1.385,1.837c-0.452,0.24-1.013,0.399-1.73,0.56L85.015,82.789
M88.449,85.372l-0.398,0.267c-0.825,0.612-1.598,0.932-2.156,0.932c-0.745,0-1.226-0.586-1.226-1.543
c0-0.398,0.055-0.825,0.133-1.277l1.307-0.319c0.267-0.08,0.69-0.24,1.092-0.399c1.357-0.586,1.971-1.332,1.971-2.317
c0-0.745-0.531-1.225-1.331-1.225c-1.039,0-2.797,1.092-3.407,2.104c-0.479,0.799-0.959,2.689-0.959,3.756
c0,1.252,0.691,1.971,1.838,1.971c0.903,0,1.812-0.452,3.273-1.625L88.449,85.372z"/>
</g>
</g>
</g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="262.635,22.958 243.608,22.958 223.45,35.704
224.936,67.938 250.723,87.945 250.723,87.945 279.141,153.984 310.463,165.843 340.754,153.984 367.521,149.243 373.451,118.412
357.74,103.59 364.043,83.483 350.328,63.273 373.451,35.704 334.898,18.808 300.966,6.95 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="334.898" y2="18.808"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="262.635" y2="22.958"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="250.723" y2="87.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="250.723" y2="87.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="279.141" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="340.754" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="357.74" y2="103.59"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="350.328" y2="63.273"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="86.396" x2="300.966" y2="6.95"/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="262.635,22.958 243.608,22.958 223.45,35.704
224.936,67.938 250.723,87.945 250.723,87.945 279.141,153.984 310.463,165.843 340.754,153.984 367.521,149.243 373.451,118.412
357.74,103.59 364.043,83.483 350.328,63.273 373.451,35.704 334.898,18.808 300.966,6.95 "/>
</g>
<circle cx="304.23" cy="86.396" r="5.318"/>
<g>
<g>
<defs>
<rect id="SVGID_3_" x="301.108" y="99.945" width="8" height="8"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M306.194,101.021l0.159,0.293c0.159-0.078,0.293-0.133,0.428-0.133
c0.426,0,0.69,0.373,0.69,1.012c0,2.345-1.544,4.927-2.929,4.927c-0.799,0-1.278-0.665-1.278-1.704
c0-1.65,0.613-3.115,2.185-5.032l-0.16-0.293c-0.319,0.134-0.532,0.187-0.984,0.187c-0.426,0-1.119-0.025-1.571-0.079
l-0.187-0.026c-0.106,0-0.188,0-0.188,0c-0.187,0-0.347,0.026-0.506,0.105c-0.239,0.427-0.398,1.013-0.611,1.865h0.346
l0.267-0.666c0.134-0.268,0.427-0.427,0.825-0.427c0.08,0,0.213,0,0.426,0c0.134,0.026,0.24,0.026,0.453,0.026
c0.32,0,0.586-0.026,0.985-0.08c-1.757,1.917-2.423,3.249-2.423,4.818c0,1.227,0.719,2.104,1.758,2.104
c0.665,0,1.251-0.292,1.996-0.933c0.746-0.691,1.49-1.756,1.998-2.848c0.346-0.8,0.61-1.865,0.61-2.504
c0-0.904-0.397-1.545-0.983-1.545c-0.213,0-0.4,0.055-0.506,0.188L306.194,101.021"/>
</g>
</g>
<g>
<g>
<defs>
<rect id="SVGID_5_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_6_)" d="M135.586,12.816c0.906-0.026,1.438-0.054,2.316-0.054c0.853,0,1.545,0.134,1.545,0.319
l0.133,1.198h0.586l0.213-2.263l-0.106-0.106c-0.585-0.054-0.878-0.08-1.49-0.08c-0.373,0-0.853,0.026-1.73,0.053
c-1.145,0.027-1.598,0.027-2.05,0.027c-0.561,0-1.251-0.027-2.982-0.054v0.586l0.586,0.054c0.692,0.053,0.746,0.159,0.746,1.544
v7.136c0,0.533-0.08,0.772-0.319,0.906l-0.507,0.292v0.347c1.571-0.026,1.571-0.026,1.944-0.026h0.533
c1.624,0.026,2.263,0.053,3.062,0.053c0.826,0,1.332-0.026,2.237-0.053l0.08-0.134l0.187-2.529h-0.639l-0.346,1.518
c0,0-0.026,0.026-0.053,0.026c-0.507,0.16-0.958,0.24-1.838,0.24c-0.666,0-1.277-0.026-2.104-0.054v-4.233
c0.453-0.054,0.719-0.054,1.064-0.054h1.065c0.586,0,0.853,0.16,0.905,0.586l0.08,0.799h0.639l-0.027-1.73
c0-0.16,0-0.187,0.027-1.704h-0.639l-0.08,0.905c-0.026,0.267-0.24,0.346-0.905,0.346h-1.065c-0.506,0-0.745,0-1.064-0.026v-3.835
"/>
</g>
<g>
<defs>
<rect id="SVGID_7_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_8_">
<use xlink:href="#SVGID_7_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_8_)" d="M147.222,20.139c0,0.719-0.746,1.305-1.624,1.305c-1.119,0-1.837-1.092-1.837-2.822
c0-1.598,0.559-2.396,1.678-2.396c0.692,0,1.251,0.293,1.784,0.985L147.222,20.139 M149.166,11.325l-0.133-0.08l-1.146,0.347
c-0.453,0.133-1.012,0.239-1.917,0.319v0.586l0.826,0.053c0.373,0,0.426,0.16,0.426,1.092v1.943l-0.319-0.106
c-0.452-0.186-0.879-0.293-1.277-0.293c-0.506,0-0.958,0.16-1.384,0.427l-1.146,0.745c-0.905,0.612-1.332,1.518-1.332,2.876
c0,2.264,1.172,3.728,3.036,3.728c0.346,0,0.612-0.079,0.772-0.187l1.65-1.357l-0.08,1.198l0.08,0.106
c0.959-0.026,1.251-0.026,1.438-0.026c0.105,0,0.398,0,0.852,0.026c0.106,0,0.399,0,0.746,0v-0.586l-0.533-0.026
c-0.479-0.026-0.559-0.16-0.559-1.012v-9.773H149.166z"/>
</g>
<g>
<defs>
<rect id="SVGID_9_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_10_">
<use xlink:href="#SVGID_9_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_10_)" d="M155.104,22.908c1.944,0,2.423,0.266,2.423,1.278c0,1.092-1.064,1.917-2.477,1.917
s-2.37-0.666-2.37-1.651c0-0.586,0.346-1.118,0.825-1.357C153.746,22.988,154.332,22.908,155.104,22.908 M154.785,15.985
c0.852,0,1.305,0.691,1.305,1.943c0,1.118-0.426,1.704-1.278,1.704c-0.825,0-1.331-0.692-1.331-1.891
C153.48,16.598,153.933,15.985,154.785,15.985z M159.205,16.837l0.08-1.012c-0.666,0.053-0.958,0.08-1.306,0.08
c-0.133,0-0.319,0-0.586-0.027c-0.639-0.479-1.385-0.692-2.423-0.692c-2.022,0-3.435,1.198-3.435,2.85
c0,0.586,0.213,1.118,0.585,1.544c0.293,0.293,0.532,0.453,1.092,0.64l-1.118,0.853c-0.16,0.105-0.266,0.453-0.266,0.771
c0,0.56,0.266,0.854,1.064,1.065l-1.277,0.772c-0.239,0.133-0.427,0.532-0.427,0.984c0,1.358,1.331,2.237,3.436,2.237
c2.796,0,4.66-1.438,4.66-3.542c0-1.357-0.746-1.97-2.344-1.97h-0.398c-1.571,0.026-2.13,0.053-2.316,0.053
c-0.479,0-0.746-0.159-0.746-0.479c0-0.239,0.16-0.426,0.479-0.612c0.267,0,0.426,0.026,0.612,0.026
c1.118,0,2.13-0.372,2.77-1.012c0.506-0.506,0.719-1.064,0.719-1.837c0-0.267-0.025-0.453-0.08-0.772L159.205,16.837z"/>
</g>
<g>
<defs>
<rect id="SVGID_11_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_12_">
<use xlink:href="#SVGID_11_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_12_)" d="M163.652,18.354h-0.053c-0.105,0-0.533-0.026-0.771-0.053h-0.507
c0.054-1.571,0.427-2.21,1.358-2.21c0.905,0,1.278,0.639,1.305,2.21L163.652,18.354 M167.007,17.982
c0-1.678-1.198-2.797-3.009-2.797c-0.532,0-0.958,0.134-1.384,0.373l-0.746,0.453c-1.065,0.612-1.519,1.57-1.519,3.089
c0,2.503,1.278,3.86,3.648,3.86c0.904,0,1.49-0.159,2.503-0.692l0.346-0.771l-0.186-0.24c-0.746,0.427-1.226,0.56-1.864,0.56
c-0.825,0-1.598-0.426-1.997-1.118c-0.266-0.453-0.346-0.826-0.373-1.571h2.077c0.905,0,1.625-0.08,2.503-0.319V17.982
L167.007,17.982z"/>
</g>
<g>
<defs>
<rect id="SVGID_13_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_14_">
<use xlink:href="#SVGID_13_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_14_)" d="M178.696,21.311l-0.213-0.213c-1.012,0.559-2.05,0.825-3.089,0.825
c-2.769,0-4.633-1.971-4.633-4.979c0-2.742,1.571-4.42,4.074-4.42c1.198,0,1.971,0.293,2.823,1.092l0.079,1.385h0.64
c0.16-1.545,0.213-1.838,0.346-2.45l-0.08-0.16c-1.464-0.585-2.343-0.745-3.728-0.745c-4.021,0-6.524,2.13-6.524,5.512
c0,3.568,2.45,5.805,6.364,5.805c1.464,0,2.396-0.239,3.568-0.878L178.696,21.311"/>
</g>
<g>
<defs>
<rect id="SVGID_15_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_16_">
<use xlink:href="#SVGID_15_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_16_)" d="M183.569,15.958c1.146,0,1.679,1.118,1.679,3.462c0,1.943-0.453,2.77-1.545,2.77
c-1.118,0-1.73-1.172-1.73-3.462C181.971,16.811,182.451,15.958,183.569,15.958 M183.756,15.186c-2.53,0-3.941,1.412-3.941,3.941
c0,2.449,1.306,3.834,3.622,3.834c2.529,0,3.967-1.464,3.967-4.021C187.403,16.518,186.098,15.186,183.756,15.186z"/>
</g>
<g>
<defs>
<rect id="SVGID_17_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_18_">
<use xlink:href="#SVGID_17_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_18_)" d="M191.425,11.245l-1.146,0.347c-0.451,0.133-0.984,0.239-1.917,0.319v0.586l0.853,0.053
c0.347,0,0.4,0.16,0.4,1.092v7.456c0,0.852-0.08,0.985-0.561,1.012l-0.56,0.026v0.586l2.051-0.026c0.319,0,1.092,0,2.156,0.026
v-0.586l-0.56-0.026c-0.506-0.026-0.586-0.16-0.586-1.012v-9.772L191.425,11.245"/>
</g>
<g>
<defs>
<rect id="SVGID_19_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_20_">
<use xlink:href="#SVGID_19_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_20_)" d="M196.723,11.245l-1.146,0.347c-0.452,0.133-0.985,0.239-1.917,0.319v0.586l0.852,0.053
c0.347,0,0.4,0.16,0.4,1.092v7.456c0,0.852-0.08,0.985-0.561,1.012l-0.56,0.026v0.586l2.051-0.026c0.319,0,1.092,0,2.156,0.026
v-0.586l-0.56-0.026c-0.506-0.026-0.586-0.16-0.586-1.012v-9.772L196.723,11.245"/>
</g>
<g>
<defs>
<rect id="SVGID_21_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_22_">
<use xlink:href="#SVGID_21_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_22_)" d="M203.433,20.857c-0.294,0.399-0.879,0.719-1.357,0.719c-0.507,0-0.825-0.399-0.825-1.012
c0-0.771,0.347-1.092,1.464-1.385l0.72-0.213L203.433,20.857 M203.433,21.604l-0.08,1.012l0.08,0.106
c0.985-0.026,1.251-0.026,1.438-0.026c0.214,0,0.452,0,1.411,0.026v-0.586l-0.479-0.053c-0.345-0.054-0.426-0.214-0.452-0.959
v-0.319c0-0.533-0.026-0.959-0.026-1.358c0-0.426,0.026-0.932,0.026-1.544c0.026-0.187,0.026-0.347,0.026-0.453
c0-1.411-0.958-2.264-2.557-2.264c-0.665,0-1.331,0.187-1.918,0.56l-0.824,0.506v1.092l0.479,0.106l0.346-0.799
c0.027-0.106,0.479-0.213,0.906-0.213c1.064,0,1.57,0.56,1.624,1.864l-1.385,0.293c-2.023,0.426-2.716,1.038-2.716,2.396
c0,1.277,0.639,1.97,1.838,1.97c0.371,0,0.639-0.079,0.798-0.187L203.433,21.604z"/>
</g>
<g>
<defs>
<rect id="SVGID_23_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_24_">
<use xlink:href="#SVGID_23_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_24_)" d="M210.117,17.423c0.346-0.532,0.879-0.799,1.518-0.799c1.225,0,1.971,0.958,1.971,2.556
c0,1.651-0.72,2.689-1.892,2.689c-0.665,0-1.17-0.266-1.597-0.878V17.423 M209.957,15.186l-1.118,0.373
c-0.533,0.134-0.799,0.187-1.624,0.293l-0.16,0.026v0.586l0.719,0.027c0.348,0.026,0.399,0.186,0.399,1.118v7.535
c0,0.853-0.08,0.985-0.559,1.012l-0.561,0.027v0.585l2.05-0.026c0.188,0,0.24,0,2.291,0.026v-0.585l-0.719-0.027
c-0.479,0-0.56-0.159-0.56-1.012v-2.449c0.771,0.213,1.037,0.266,1.41,0.266c0.532,0,1.093-0.293,2.185-1.145
c0.08-0.08,0.186-0.16,0.266-0.213c1.039-0.799,1.625-2.024,1.625-3.462c0-1.678-1.225-2.956-2.876-2.956
c-0.611,0-1.092,0.187-1.65,0.64l-0.958,0.772v-1.305L209.957,15.186z"/>
</g>
<g>
<defs>
<rect id="SVGID_25_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_26_">
<use xlink:href="#SVGID_25_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_26_)" d="M222.126,17.503l0.133-1.944c-0.611-0.266-1.092-0.373-1.943-0.373
c-2.156,0-3.302,0.879-3.302,2.45c0,1.065,0.561,1.73,1.677,1.997l1.358,0.319c0.746,0.187,1.012,0.453,1.012,1.012
c0,0.746-0.585,1.226-1.464,1.226c-0.746,0-1.278-0.24-1.784-0.826l-0.081-1.092h-0.61l-0.106,2.237
c0.905,0.319,1.624,0.452,2.45,0.452c1.996,0,3.354-1.118,3.354-2.742c0-1.146-0.585-1.729-2.021-2.051l-1.305-0.293
c-0.612-0.133-0.854-0.399-0.854-0.878c0-0.64,0.533-1.039,1.385-1.039c0.64,0,1.331,0.293,1.386,0.612l0.158,0.933H222.126"/>
</g>
<g>
<defs>
<rect id="SVGID_27_" x="131.486" y="10.982" width="100" height="16"/>
</defs>
<clipPath id="SVGID_28_">
<use xlink:href="#SVGID_27_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_28_)" d="M227.372,18.354h-0.08c-0.08,0-0.533-0.026-0.746-0.053h-0.532
c0.054-1.571,0.452-2.21,1.358-2.21c0.903,0,1.276,0.639,1.33,2.21L227.372,18.354 M230.7,17.982c0-1.678-1.173-2.797-2.982-2.797
c-0.559,0-0.984,0.134-1.411,0.373l-0.745,0.453c-1.039,0.612-1.519,1.57-1.519,3.089c0,2.503,1.278,3.86,3.646,3.86
c0.906,0,1.492-0.159,2.504-0.692l0.373-0.771l-0.214-0.24c-0.745,0.427-1.225,0.56-1.837,0.56c-0.852,0-1.625-0.426-2.022-1.118
c-0.24-0.453-0.348-0.826-0.373-1.571h2.076c0.905,0,1.625-0.08,2.504-0.319V17.982z"/>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="397.95px" height="144.155px" viewBox="0 0 397.95 144.155" enable-background="new 0 0 397.95 144.155"
xml:space="preserve">
<polygon opacity="0.2" fill="#1B1F8A" points="27.369,99.587 41.232,57.996 73.103,34.25 126.4,40.633 140.03,64.093
120.375,94.372 34.22,114.564 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="19.999,42.64 66.167,8.241 141.754,17.293 169.364,64.819
135.87,116.417 19.999,143.575 0.536,101.028 "/>
<polygon opacity="0.2" fill="#1B1F8A" points="19.999,42.64 66.167,8.241 141.754,17.293 169.364,64.819 135.87,116.417
19.999,143.575 0.536,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="19.999,42.64 66.167,8.241 141.754,17.293 169.364,64.819
135.87,116.417 19.999,143.575 0.536,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="27.369,99.587 41.232,57.996 73.103,34.25 126.4,40.633
140.03,64.093 120.375,94.372 34.22,114.564 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="34.22" y1="114.564" x2="19.999" y2="143.575"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="27.369" y1="99.587" x2="0.536" y2="101.028"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="41.232" y1="57.996" x2="19.999" y2="42.64"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="73.103" y1="34.25" x2="66.167" y2="8.241"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="126.4" y1="40.633" x2="141.754" y2="17.293"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="140.03" y1="64.093" x2="169.364" y2="64.819"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="120.375" y1="94.372" x2="135.87" y2="116.417"/>
<g>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="247.999,42.64 294.167,8.241 369.754,17.293 397.364,64.819
363.87,116.417 247.999,143.575 228.536,101.028 "/>
<polygon opacity="0.2" fill="#1B1F8A" points="247.999,42.64 294.167,8.241 369.754,17.293 397.364,64.819 363.87,116.417
247.999,143.575 228.536,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="247.999,42.64 294.167,8.241 369.754,17.293 397.364,64.819
363.87,116.417 247.999,143.575 228.536,101.028 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="308.95" y1="71.062" x2="247.999" y2="143.575"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="308.95" y1="71.062" x2="228.536" y2="101.028"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="308.95" y1="71.062" x2="247.999" y2="42.64"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="308.95" y1="71.062" x2="294.167" y2="8.241"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="308.95" y1="71.062" x2="369.754" y2="17.293"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="308.95" y1="71.062" x2="397.364" y2="64.819"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="308.95" y1="71.062" x2="363.87" y2="116.417"/>
</g>
<g>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M264.146,11.479
C245.972,5.018,226.403,1.5,206.012,1.5c-20.525,0-40.219,3.564-58.494,10.107"/>
<g>
<polygon points="274.013,15.332 262.243,4.315 263.378,11.275 257.896,15.709 "/>
</g>
</g>
</g>
<g>
<defs>
<rect id="SVGID_1_" x="158.306" y="10.856" width="95" height="16"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M162.247,12.69c0.772-0.027,1.305-0.027,1.837-0.027c1.065,0,1.758,0.107,1.758,0.293
l0.133,1.198h0.586l0.213-2.263l-0.106-0.106c-0.586-0.054-0.878-0.08-1.491-0.08c-0.373,0-0.985,0.026-2.237,0.053
c-0.745,0.027-1.145,0.027-1.464,0.027c-0.453,0-0.453,0-2.822-0.054v0.586l0.585,0.054c0.719,0.053,0.772,0.159,0.772,1.544
v6.497c0,1.411-0.027,1.438-0.772,1.518l-0.585,0.027v0.639c1.917-0.026,1.917-0.026,2.45-0.026c0.532,0,0.532,0,2.663,0.026
v-0.639l-0.746-0.027c-0.746-0.053-0.772-0.133-0.772-1.518V17.43c0.453-0.026,0.719-0.026,1.065-0.026h0.799
c0.612,0,0.878,0.16,0.905,0.586l0.106,0.772h0.639l-0.053-1.705c0-0.186,0-0.399,0.053-1.624h-0.639l-0.106,0.825
c-0.027,0.267-0.24,0.347-0.905,0.347h-0.799c-0.533,0-0.746,0-1.065-0.054V12.69"/>
<path clip-path="url(#SVGID_2_)" d="M171.753,20.731c-0.293,0.399-0.879,0.719-1.358,0.719c-0.506,0-0.826-0.399-0.826-1.012
c0-0.771,0.346-1.092,1.465-1.385l0.719-0.213V20.731 M171.753,21.478l-0.08,1.012l0.08,0.106
c0.985-0.026,1.251-0.026,1.464-0.026c0.187,0,0.426,0,1.385,0.026V22.01l-0.479-0.053c-0.346-0.054-0.426-0.214-0.453-0.959
v-0.319c0-0.533-0.026-0.959-0.026-1.358c0-0.426,0.026-0.932,0.026-1.544c0.027-0.187,0.027-0.347,0.027-0.453
c0-1.411-0.958-2.264-2.556-2.264c-0.666,0-1.332,0.187-1.917,0.56l-0.825,0.506v1.092l0.479,0.106l0.346-0.799
c0.027-0.106,0.479-0.213,0.905-0.213c1.065,0,1.571,0.56,1.625,1.864l-1.385,0.293c-2.023,0.426-2.716,1.038-2.716,2.396
c0,1.277,0.639,1.97,1.837,1.97c0.373,0,0.639-0.08,0.799-0.187L171.753,21.478z"/>
<path clip-path="url(#SVGID_2_)" d="M181.206,17.829c0.106-1.012,0.187-1.544,0.32-2.236l-0.107-0.213
c-0.746-0.24-1.065-0.32-1.651-0.32c-0.585,0-1.039,0.134-1.411,0.347l-0.852,0.479c-1.411,0.852-1.917,1.65-1.917,3.035
c0,2.529,1.251,3.914,3.542,3.914c0.799,0,1.384-0.159,2.13-0.559l0.32-0.719l-0.133-0.16c-0.533,0.213-0.905,0.293-1.358,0.293
c-1.544,0-2.53-1.252-2.53-3.275c0-1.438,0.559-2.21,1.571-2.21c0.719,0,1.331,0.319,1.384,0.666l0.106,0.958H181.206"/>
<path clip-path="url(#SVGID_2_)" d="M186.079,18.229h-0.053c-0.107,0-0.533-0.026-0.772-0.053h-0.506
c0.053-1.571,0.426-2.21,1.358-2.21c0.905,0,1.278,0.639,1.305,2.21L186.079,18.229 M189.434,17.855
c0-1.677-1.198-2.796-3.009-2.796c-0.56,0-0.959,0.134-1.385,0.373l-0.746,0.453c-1.065,0.612-1.518,1.57-1.518,3.089
c0,2.503,1.278,3.86,3.648,3.86c0.905,0,1.491-0.159,2.503-0.692l0.346-0.771l-0.187-0.24c-0.746,0.427-1.225,0.56-1.864,0.56
c-0.826,0-1.598-0.426-1.997-1.118c-0.267-0.453-0.346-0.826-0.373-1.571h2.077c0.905,0,1.624-0.08,2.503-0.319V17.855z"/>
<path clip-path="url(#SVGID_2_)" d="M201.017,21.185l-0.213-0.213c-1.012,0.559-2.051,0.825-3.089,0.825
c-2.77,0-4.633-1.971-4.633-4.979c0-2.742,1.571-4.42,4.074-4.42c1.198,0,1.971,0.293,2.822,1.092l0.08,1.385h0.639
c0.16-1.545,0.214-1.838,0.347-2.45l-0.079-0.16c-1.465-0.585-2.344-0.745-3.729-0.745c-4.021,0-6.524,2.13-6.524,5.512
c0,3.568,2.45,5.805,6.364,5.805c1.465,0,2.396-0.239,3.568-0.878L201.017,21.185"/>
<path clip-path="url(#SVGID_2_)" d="M205.89,15.832c1.145,0,1.678,1.118,1.678,3.462c0,1.943-0.453,2.77-1.545,2.77
c-1.118,0-1.73-1.172-1.73-3.462C204.292,16.685,204.771,15.832,205.89,15.832 M206.075,15.06c-2.529,0-3.94,1.412-3.94,3.941
c0,2.449,1.305,3.834,3.622,3.834c2.529,0,3.967-1.464,3.967-4.021C209.724,16.392,208.419,15.06,206.075,15.06z"/>
<path clip-path="url(#SVGID_2_)" d="M213.851,11.119l-1.145,0.347c-0.453,0.133-0.985,0.239-1.918,0.319v0.586l0.853,0.053
c0.347,0,0.399,0.16,0.399,1.092v7.456c0,0.852-0.08,0.985-0.559,1.012l-0.56,0.026v0.586l2.05-0.026c0.32,0,1.065,0,2.131,0.026
V22.01l-0.56-0.026c-0.479-0.026-0.56-0.16-0.56-1.012v-9.772L213.851,11.119"/>
<path clip-path="url(#SVGID_2_)" d="M219.149,11.119l-1.145,0.347c-0.453,0.133-0.985,0.239-1.918,0.319v0.586l0.853,0.053
c0.347,0,0.399,0.16,0.399,1.092v7.456c0,0.852-0.08,0.985-0.559,1.012l-0.56,0.026v0.586l2.05-0.026c0.32,0,1.065,0,2.131,0.026
V22.01l-0.56-0.026c-0.479-0.026-0.56-0.16-0.56-1.012v-9.772L219.149,11.119"/>
<path clip-path="url(#SVGID_2_)" d="M225.753,20.731c-0.293,0.399-0.879,0.719-1.357,0.719c-0.506,0-0.826-0.399-0.826-1.012
c0-0.771,0.347-1.092,1.465-1.385l0.719-0.213V20.731 M225.753,21.478l-0.08,1.012l0.08,0.106
c0.986-0.026,1.252-0.026,1.438-0.026c0.213,0,0.452,0,1.411,0.026V22.01l-0.479-0.053c-0.347-0.054-0.426-0.214-0.452-0.959
v-0.319c0-0.533-0.027-0.959-0.027-1.358c0-0.426,0.027-0.932,0.027-1.544c0.026-0.187,0.026-0.347,0.026-0.453
c0-1.411-0.958-2.264-2.556-2.264c-0.666,0-1.332,0.187-1.918,0.56l-0.825,0.506v1.092l0.479,0.106l0.346-0.799
c0.027-0.106,0.479-0.213,0.905-0.213c1.065,0,1.571,0.56,1.624,1.864l-1.385,0.293c-2.023,0.426-2.715,1.038-2.715,2.396
c0,1.277,0.639,1.97,1.837,1.97c0.372,0,0.639-0.08,0.799-0.187L225.753,21.478z"/>
<path clip-path="url(#SVGID_2_)" d="M232.543,17.297c0.347-0.532,0.879-0.799,1.519-0.799c1.225,0,1.943,0.958,1.943,2.556
c0,1.651-0.691,2.689-1.863,2.689c-0.666,0-1.172-0.266-1.599-0.878V17.297 M232.384,15.06l-1.119,0.373
c-0.531,0.134-0.825,0.187-1.624,0.293l-0.187,0.026v0.586l0.72,0.027c0.372,0.026,0.426,0.186,0.426,1.118v7.535
c0,0.853-0.079,0.985-0.586,1.012l-0.56,0.027v0.585l2.051-0.026c0.213,0,0.239,0,2.316,0.026v-0.585l-0.719-0.027
c-0.479,0-0.56-0.159-0.56-1.012v-2.449c0.772,0.213,1.013,0.266,1.412,0.266c0.532,0,1.091-0.293,2.183-1.145
c0.08-0.08,0.187-0.16,0.267-0.213c1.038-0.799,1.624-2.024,1.624-3.462c0-1.678-1.225-2.956-2.875-2.956
c-0.64,0-1.092,0.187-1.65,0.64l-0.96,0.772v-1.305L232.384,15.06z"/>
<path clip-path="url(#SVGID_2_)" d="M244.446,17.377l0.133-1.944c-0.613-0.266-1.092-0.373-1.943-0.373
c-2.157,0-3.303,0.879-3.303,2.45c0,1.065,0.561,1.73,1.678,1.997l1.357,0.319c0.746,0.187,1.013,0.453,1.013,1.012
c0,0.746-0.586,1.226-1.465,1.226c-0.745,0-1.278-0.24-1.784-0.826l-0.08-1.092h-0.612l-0.106,2.237
c0.905,0.319,1.625,0.452,2.45,0.452c1.997,0,3.354-1.118,3.354-2.742c0-1.146-0.586-1.73-2.023-2.051l-1.305-0.293
c-0.611-0.133-0.852-0.399-0.852-0.878c0-0.64,0.532-1.039,1.385-1.039c0.639,0,1.33,0.293,1.385,0.612l0.159,0.933H244.446"/>
<path clip-path="url(#SVGID_2_)" d="M249.771,18.229h-0.054c-0.106,0-0.532-0.026-0.771-0.053h-0.506
c0.053-1.571,0.426-2.21,1.357-2.21c0.905,0,1.278,0.639,1.305,2.21L249.771,18.229 M253.126,17.855
c0-1.677-1.197-2.796-3.008-2.796c-0.533,0-0.959,0.134-1.385,0.373l-0.746,0.453c-1.064,0.612-1.518,1.57-1.518,3.089
c0,2.503,1.277,3.86,3.648,3.86c0.904,0,1.49-0.159,2.502-0.692l0.346-0.771l-0.186-0.24c-0.746,0.427-1.225,0.56-1.864,0.56
c-0.825,0-1.597-0.426-1.997-1.118c-0.239-0.453-0.346-0.826-0.373-1.571h2.078c0.904,0,1.624-0.08,2.502-0.319V17.855z"/>
</g>
</g>
<circle cx="308.95" cy="71.062" r="5.318"/>
<g>
<defs>
<rect id="SVGID_3_" x="305.108" y="79.946" width="8" height="8"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M310.194,81.022l0.159,0.293c0.159-0.079,0.293-0.133,0.427-0.133
c0.426,0,0.691,0.373,0.691,1.012c0,2.344-1.544,4.926-2.929,4.926c-0.799,0-1.278-0.665-1.278-1.704
c0-1.65,0.613-3.115,2.184-5.032l-0.16-0.293c-0.319,0.133-0.532,0.187-0.984,0.187c-0.426,0-1.119-0.026-1.571-0.08l-0.187-0.026
c-0.106,0-0.187,0-0.187,0c-0.187,0-0.347,0.026-0.506,0.106c-0.239,0.426-0.399,1.012-0.612,1.864h0.346l0.267-0.666
c0.134-0.267,0.427-0.426,0.825-0.426c0.08,0,0.213,0,0.426,0c0.134,0.026,0.24,0.026,0.453,0.026c0.32,0,0.586-0.026,0.985-0.08
c-1.757,1.917-2.423,3.249-2.423,4.819c0,1.226,0.719,2.104,1.758,2.104c0.665,0,1.251-0.292,1.996-0.932
c0.746-0.692,1.491-1.757,1.998-2.849c0.346-0.799,0.611-1.864,0.611-2.503c0-0.905-0.398-1.545-0.984-1.545
c-0.213,0-0.4,0.054-0.506,0.187L310.194,81.022"/>
</g>
<g>
<defs>
<rect id="SVGID_5_" x="75.504" y="63.622" width="10" height="17"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_6_)" d="M83.146,69.731c0.08-0.293,0.187-0.666,0.267-0.879l-0.054-0.106l-0.106,0.026
c-0.399,0.08-0.559,0.106-1.331,0.106h-0.267l0.346-1.783c0.24-1.358,0.692-1.971,1.412-1.971c0.479,0,0.905,0.239,1.145,0.612
l0.16-0.054c0.08-0.266,0.239-0.745,0.373-1.064l0.08-0.24c-0.267-0.106-0.746-0.213-1.119-0.213c-0.16,0-0.426,0.054-0.559,0.106
c-0.373,0.187-1.677,1.146-2.05,1.545c-0.346,0.346-0.533,0.825-0.719,1.73l-0.24,1.252c-0.639,0.319-0.958,0.452-1.358,0.585
l-0.08,0.347h1.278l-0.133,0.905c-0.479,3.089-1.065,6.044-1.411,7.136c-0.293,0.933-0.772,1.438-1.332,1.438
c-0.373,0-0.533-0.106-0.825-0.453l-0.24,0.054c-0.053,0.373-0.267,1.118-0.346,1.278c0.133,0.079,0.373,0.133,0.559,0.133
c0.639,0,1.491-0.506,2.13-1.252c0.958-1.145,1.305-2.263,2.476-7.828c0.053-0.213,0.16-0.799,0.293-1.411H83.146"/>
</g>
</svg>
---
layout: default
title: "Edge Flip Tutorial"
permalink: /meshedit/edge_flip
---
# Edge Flip Tutorial
Here we provide a step-by-step guide to implementing a simplified version of the _EdgeFlip_ operation for a pair of triangles---the final version, however, must be implemented for general polygons (i.e., any _n_-gon). The basic strategy for implementing the other local operations is quite similar to the procedure outlined below.
**Note:** if you're not familiar with C++, you should definitely take a moment to learn about the [standard library class](http://en.cppreference.com/w/cpp/container/vector) `std::vector`, especially the method `push_back()`, which will make it easy to accumulate a list of pointers as you walk around a polygon, vertex, etc.
We now consider the case of a triangle-triangle edge flip.
#### PHASE 0: Draw a Diagram
Suppose we have a pair of triangles (a,b,c) and (c,b,d). After flipping the edge (b,c), we should now have triangles (a,d,c) and (a,b,d). A good first step for implementing any local mesh operation is to draw a diagram that clearly labels all elements affected by the operation:
![](edge_flip_before_after.png)
Here we have drawn a diagram of the region around the edge both before and after the edge operation (in this case, "flip"), labeling each type of element (halfedge, vertex, edge, and face) from zero to the number of elements. It is important to include every element affected by the operation, thinking very carefully about which elements will be affected. If elements are omitted during this phase, everything will break---even if the code written in the two phases is correct! In this example, for instance, we need to remember to include the halfedges "outside" the neighborhood, since their "twin" pointers will be affected.
#### PHASE I: Collect elements
Once you've drawn your diagram, simply collect all the elements from the "before" picture. Give them the same names as in your diagram, so that you can debug your code by comparing with the picture.
// HALFEDGES
HalfedgeRef h0 = e0->halfedge();
HalfedgeRef h1 = h0->next();
HalfedgeRef h2 = h1->next();
HalfedgeRef h3 = h0->twin();
HalfedgeRef h4 = h3->next();
HalfedgeRef h5 = h4->next();
HalfedgeRef h6 = h1->twin();
HalfedgeRef h7 = h2->twin();
HalfedgeRef h8 = h4->twin();
HalfedgeRef h9 = h5->twin();
// VERTICES
VertexRef v0 = h0->vertex();
VertexRef v1 = h3->vertex();
// ...you fill in the rest!...
// EDGES
EdgeRef e1 = h5->edge();
EdgeRef e2 = h4->edge();
// ...you fill in the rest!...
// FACES
FaceRef f0 = h0->face();
// ...you fill in the rest!...
#### PHASE II: Allocate new elements
If your edge operation requires new elements, now is the time to allocate them. For the edge flip, we don't need any new elements; but suppose that for some reason we needed a new vertex v4\. At this point we would allocate the new vertex via
VertexRef v4 = mesh.new_vertex();
(The name used for this new vertex should correspond to the label you give it in your "after" picture.) Likewise, new edges, halfedges, and faces can be allocated via the methods `mesh.new_edge()`, `mesh.new_halfedge()`, and `mesh.new_face()`.
#### PHASE III: Reassign Elements
Next, update the pointers for all the mesh elements that are affected by the edge operation. Be exhaustive! In other words, go ahead and specify every pointer for every element, even if it did not change. Once things are working correctly, you can always optimize by removing unnecessary assignments. But get it working correctly first! Correctness is more important than efficiency.
// HALFEDGES
h0->next() = h1;
h0->twin() = h3;
h0->vertex() = v2;
h0->edge() = e0;
h0->face() = f0;
h1->next() = h2;
h1->twin() = h7;
h1->vertex() = v3;
h1->edge() = e3;
h1->face() = f0;
// ...you fill in the rest!...
// ...and don't forget about the "outside" elements!...
h9->next() = h9->next(); // didn't change, but set it anyway!
h9->twin() = h4;
h9->vertex() = v1;
h9->edge() = e1;
h9->face() = h9->face(); // didn't change, but set it anyway!
// VERTICES
v0->halfedge() = h2;
v1->halfedge() = h5;
v2->halfedge() = h4;
v3->halfedge() = h3;
// EDGES
e0->halfedge() = h0; //...you fill in the rest!...
// FACES
f0->halfedge() = h0; //...you fill in the rest!...
#### PHASE IV: Delete unused elements
If your edge operation eliminates elements, now is the best time to deallocate them: at this point, you can be sure that they are no longer needed. For instance, since we do not need the vertex allocated in PHASE II, we could write
mesh.erase(v4);
You should be careful that this mesh element is not referenced by any other element in the mesh. But if your "before" and "after" diagrams are correct, that should not be an issue!
#### Design considerations
The basic algorithm outlined above will handle most edge flips, but you should also think carefully about possible corner-cases. You should also think about other design issues, like "how much should this operation cost?" For instance, for this simple triangle-triangle edge flip it might be reasonable to:
* Ignore requests to flip boundary edges (i.e., just return immediately if either neighboring face is a boundary loop).
* Ignore requests to perform any edge flip that would make the surface non-manifold or otherwise invalidate the mesh.
* Not add or delete any elements. Since there are the same number of mesh elements before and after the flip, you should only need to reassign pointers.
* Perform only a constant amount of work -- the cost of flipping a single edge should **not** be proportional to the size of the mesh!
Formally proving that your code is correct in all cases is challenging, but at least try to think about what could go wrong in degenerate cases (e.g., vertices of low degree, or very small meshes like a tetrahedron). The biggest challenge in properly implementing this type of local operation is making sure that all the pointers still point to the right place in the modified mesh, and will likely be the cause of most of your crashes! To help mitigate this, Scotty3D will automatically attempt to ``validate`` your mesh after each operation, and will warn you if it detects abnormalities. Note that it will still crash if you leave references to deleted mesh elements!
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="374.264px" height="166.379px" viewBox="0 0 374.264 166.379" enable-background="new 0 0 374.264 166.379"
xml:space="preserve">
<g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="297.412,52.602 250.723,73.945 256.652,107.146
304.23,114.855 357.739,103.59 364.043,83.483 350.328,63.273 "/>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M238.238,11.479
C220.064,5.018,200.496,1.5,180.104,1.5c-20.525,0-40.22,3.564-58.494,10.107"/>
<g>
<polygon points="248.105,15.332 236.336,4.315 237.471,11.275 231.988,15.709 "/>
</g>
</g>
</g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="39.812,22.958 20.785,22.958 0.627,35.704
10.113,57.938 27.9,73.945 33.829,107.146 56.317,153.984 87.64,165.843 117.93,153.984 144.699,149.243 150.627,118.412
134.916,103.59 141.166,83.188 127.505,63.273 150.627,35.704 112.075,18.808 78.143,6.95 "/>
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="81.408" y2="114.855"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="112.075" y2="18.808"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="39.812" y2="22.958"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="27.9" y2="73.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="33.829" y2="107.146"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="56.317" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="117.93" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="81.408" y1="114.855" x2="134.916" y2="103.59"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="127.505" y2="63.273"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="74.589" y1="52.602" x2="78.143" y2="6.95"/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="39.812,22.958 20.785,22.958 0.627,35.704 10.113,57.938
27.9,73.945 33.829,107.146 56.317,153.984 87.64,165.843 117.93,153.984 144.699,149.243 150.627,118.412 134.916,103.59
141.166,83.188 127.505,63.273 150.627,35.704 112.075,18.808 78.143,6.95 "/>
</g>
<g>
<g>
<defs>
<rect id="SVGID_1_" x="83.23" y="79.343" width="6" height="8"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M85.015,82.789c0.293-1.092,0.61-1.784,1.063-2.184c0.293-0.266,0.771-0.452,1.146-0.452
c0.479,0,0.771,0.319,0.771,0.825c0,0.692-0.56,1.438-1.384,1.837c-0.453,0.24-1.013,0.399-1.731,0.56L85.015,82.789
M88.449,85.372l-0.398,0.267c-0.825,0.612-1.598,0.932-2.156,0.932c-0.745,0-1.226-0.586-1.226-1.543
c0-0.399,0.055-0.826,0.133-1.278l1.307-0.319c0.266-0.08,0.69-0.24,1.091-0.399c1.358-0.586,1.971-1.332,1.971-2.317
c0-0.745-0.531-1.225-1.331-1.225c-1.039,0-2.797,1.092-3.407,2.104c-0.48,0.799-0.959,2.689-0.959,3.755
c0,1.252,0.691,1.971,1.838,1.971c0.903,0,1.811-0.452,3.273-1.625L88.449,85.372z"/>
</g>
</g>
<g>
<path d="M147.586,12.816c0.906-0.026,1.438-0.054,2.317-0.054c0.852,0,1.544,0.134,1.544,0.319l0.133,1.198h0.586l0.213-2.263
l-0.105-0.106c-0.585-0.054-0.878-0.08-1.491-0.08c-0.373,0-0.852,0.026-1.73,0.053c-1.145,0.027-1.598,0.027-2.05,0.027
c-0.56,0-1.251-0.027-2.981-0.054v0.586l0.586,0.054c0.691,0.053,0.746,0.159,0.746,1.544v7.136c0,0.533-0.08,0.772-0.32,0.906
l-0.506,0.292v0.347c1.571-0.026,1.571-0.026,1.944-0.026h0.532c1.624,0.026,2.264,0.053,3.062,0.053
c0.826,0,1.332-0.026,2.236-0.053l0.08-0.134l0.188-2.529h-0.639l-0.347,1.518c0,0-0.025,0.026-0.053,0.026
c-0.506,0.16-0.958,0.24-1.837,0.24c-0.666,0-1.278-0.026-2.104-0.054v-4.233c0.453-0.054,0.72-0.054,1.065-0.054h1.065
c0.586,0,0.852,0.16,0.904,0.586l0.08,0.799h0.639l-0.026-1.73c0-0.16,0-0.187,0.026-1.704h-0.639l-0.08,0.905
c-0.025,0.267-0.24,0.346-0.904,0.346h-1.065c-0.506,0-0.746,0-1.065-0.026v-3.835"/>
<path d="M156.48,15.186l-1.118,0.373c-0.506,0.134-0.799,0.187-1.812,0.319v0.586l0.72,0.027c0.373,0.026,0.426,0.186,0.426,1.118
v3.488c0,0.852-0.08,0.985-0.586,1.012l-0.56,0.026v0.586l2.051-0.026c0.213,0,0.266,0,2.423,0.026v-0.586l-0.64-0.026
c-0.666-0.026-0.745-0.134-0.745-1.012v-3.143c0-0.506,0.639-1.038,1.251-1.038c0.398,0,0.691,0.213,0.904,0.586l0.399-0.16
l0.08-2.05c-0.16-0.054-0.373-0.107-0.585-0.107c-0.453,0-0.746,0.214-1.358,0.853l-0.691,0.772v-1.518L156.48,15.186"/>
<path d="M164.042,20.857c-0.319,0.399-0.904,0.719-1.357,0.719c-0.533,0-0.826-0.399-0.826-1.012c0-0.771,0.346-1.092,1.464-1.385
l0.719-0.213L164.042,20.857 M164.042,21.604l-0.08,1.012l0.08,0.106c0.985-0.026,1.251-0.026,1.438-0.026
c0.186,0,0.453,0,1.411,0.026v-0.586l-0.479-0.053c-0.346-0.054-0.426-0.214-0.453-0.959v-0.319
c-0.025-0.533-0.025-0.959-0.025-1.358c0-0.426,0-0.932,0.025-1.544c0.027-0.187,0.027-0.347,0.027-0.453
c0-1.411-0.958-2.264-2.556-2.264c-0.666,0-1.332,0.187-1.917,0.56l-0.853,0.506v1.092l0.479,0.106l0.346-0.799
c0.053-0.106,0.506-0.213,0.932-0.213c1.065,0,1.571,0.56,1.625,1.864l-1.411,0.293c-1.997,0.426-2.716,1.038-2.716,2.396
c0,1.277,0.666,1.97,1.864,1.97c0.347,0,0.613-0.079,0.771-0.187L164.042,21.604z"/>
<path d="M173.042,17.503l0.133-1.944c-0.639-0.266-1.118-0.373-1.971-0.373c-2.13,0-3.302,0.879-3.302,2.45
c0,1.065,0.586,1.73,1.678,1.997l1.384,0.319c0.72,0.187,0.985,0.453,0.985,1.012c0,0.746-0.559,1.226-1.464,1.226
c-0.746,0-1.251-0.24-1.757-0.826l-0.08-1.092h-0.64l-0.105,2.237c0.905,0.319,1.625,0.452,2.477,0.452
c1.997,0,3.355-1.118,3.355-2.742c0-1.146-0.612-1.729-2.024-2.051l-1.305-0.293c-0.612-0.133-0.878-0.399-0.878-0.878
c0-0.64,0.532-1.039,1.384-1.039c0.639,0,1.358,0.293,1.385,0.612l0.16,0.933H173.042"/>
<path d="M178.26,18.354h-0.053c-0.105,0-0.532-0.026-0.771-0.053h-0.506c0.053-1.571,0.426-2.21,1.357-2.21
c0.905,0,1.278,0.639,1.305,2.21L178.26,18.354 M181.617,17.982c0-1.678-1.198-2.797-3.009-2.797c-0.56,0-0.958,0.134-1.384,0.373
l-0.772,0.453c-1.039,0.612-1.491,1.57-1.491,3.089c0,2.503,1.278,3.86,3.622,3.86c0.905,0,1.519-0.159,2.529-0.692l0.346-0.771
l-0.186-0.24c-0.746,0.427-1.226,0.56-1.864,0.56c-0.825,0-1.598-0.426-1.997-1.118c-0.266-0.453-0.346-0.826-0.398-1.571h2.104
c0.905,0,1.598-0.08,2.503-0.319v-0.827H181.617z"/>
<path d="M186.489,12.816c0.905-0.026,1.438-0.054,2.317-0.054c0.852,0,1.543,0.134,1.543,0.319l0.134,1.198h0.586l0.213-2.263
l-0.106-0.106c-0.586-0.054-0.879-0.08-1.49-0.08c-0.372,0-0.854,0.026-1.73,0.053c-1.146,0.027-1.598,0.027-2.05,0.027
c-0.562,0-1.252-0.027-3.01-0.054v0.586l0.611,0.054c0.692,0.053,0.745,0.159,0.745,1.544v7.136c0,0.533-0.079,0.772-0.317,0.906
l-0.506,0.292v0.347c1.569-0.026,1.569-0.026,1.942-0.026h0.533c1.623,0.026,2.236,0.053,3.062,0.053
c0.826,0,1.306-0.026,2.237-0.053l0.079-0.134l0.187-2.529h-0.639l-0.347,1.518c0,0-0.026,0.026-0.055,0.026
c-0.506,0.16-0.957,0.24-1.837,0.24c-0.665,0-1.277-0.026-2.104-0.054v-4.233c0.452-0.054,0.72-0.054,1.064-0.054h1.064
c0.586,0,0.853,0.16,0.906,0.586l0.08,0.799h0.639l-0.054-1.73c0-0.16,0-0.187,0.054-1.704h-0.639l-0.08,0.905
c-0.027,0.267-0.24,0.346-0.906,0.346h-1.064c-0.506,0-0.745,0-1.064-0.026L186.489,12.816"/>
<path d="M198.232,20.139c0,0.719-0.746,1.305-1.625,1.305c-1.146,0-1.863-1.092-1.863-2.822c0-1.598,0.559-2.396,1.704-2.396
c0.665,0,1.251,0.293,1.784,0.985V20.139 M200.149,11.325l-0.106-0.08l-1.145,0.347c-0.48,0.133-1.014,0.239-1.944,0.319v0.586
l0.854,0.053c0.346,0,0.426,0.16,0.426,1.092v1.943l-0.32-0.106c-0.452-0.186-0.879-0.293-1.277-0.293
c-0.506,0-0.959,0.16-1.411,0.427l-1.146,0.745c-0.905,0.612-1.332,1.518-1.332,2.876c0,2.264,1.172,3.728,3.036,3.728
c0.373,0,0.64-0.079,0.799-0.187l1.651-1.357l-0.08,1.198l0.08,0.106c0.932-0.026,1.251-0.026,1.411-0.026
c0.133,0,0.426,0,0.878,0.026c0.106,0,0.399,0,0.746,0v-0.586l-0.533-0.026c-0.506-0.026-0.585-0.16-0.585-1.012L200.149,11.325
L200.149,11.325z"/>
<path d="M206.113,22.908c1.944,0,2.424,0.266,2.424,1.278c0,1.092-1.064,1.917-2.504,1.917c-1.41,0-2.342-0.666-2.342-1.651
c0-0.586,0.346-1.118,0.824-1.357C204.756,22.988,205.342,22.908,206.113,22.908 M205.795,15.985c0.824,0,1.306,0.691,1.306,1.943
c0,1.118-0.428,1.704-1.279,1.704c-0.824,0-1.33-0.692-1.33-1.891C204.49,16.598,204.942,15.985,205.795,15.985z M210.188,16.837
l0.08-1.012c-0.64,0.053-0.959,0.08-1.306,0.08c-0.133,0-0.318,0-0.559-0.027c-0.666-0.479-1.412-0.692-2.424-0.692
c-2.023,0-3.436,1.198-3.436,2.85c0,0.586,0.188,1.118,0.585,1.544c0.293,0.293,0.533,0.453,1.093,0.64l-1.146,0.853
c-0.16,0.105-0.266,0.453-0.266,0.771c0,0.56,0.293,0.854,1.092,1.065l-1.279,0.772c-0.239,0.133-0.426,0.532-0.426,0.984
c0,1.358,1.332,2.237,3.436,2.237c2.771,0,4.66-1.438,4.66-3.542c0-1.357-0.746-1.97-2.371-1.97h-0.372
c-1.57,0.026-2.13,0.053-2.316,0.053c-0.506,0-0.744-0.159-0.744-0.479c0-0.239,0.133-0.426,0.452-0.612
c0.292,0,0.452,0.026,0.639,0.026c1.092,0,2.13-0.372,2.771-1.012c0.479-0.506,0.691-1.064,0.691-1.837
c0-0.267,0-0.453-0.08-0.772L210.188,16.837z"/>
<path d="M214.661,18.354h-0.054c-0.105,0-0.531-0.026-0.771-0.053h-0.506c0.053-1.571,0.426-2.21,1.357-2.21
c0.904,0,1.277,0.639,1.305,2.21L214.661,18.354 M218.016,17.982c0-1.678-1.197-2.797-3.009-2.797
c-0.56,0-0.959,0.134-1.385,0.373l-0.746,0.453c-1.063,0.612-1.518,1.57-1.518,3.089c0,2.503,1.276,3.86,3.621,3.86
c0.905,0,1.518-0.159,2.529-0.692l0.348-0.771l-0.188-0.24c-0.746,0.427-1.225,0.56-1.862,0.56c-0.826,0-1.599-0.426-1.998-1.118
c-0.267-0.453-0.347-0.826-0.398-1.571h2.104c0.903,0,1.598-0.08,2.502-0.319V17.982z"/>
</g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="262.635,22.958 243.608,22.958 223.45,35.704
232.936,57.938 250.723,73.945 256.652,107.146 279.141,153.984 310.463,165.843 340.754,153.984 367.521,149.243 373.451,118.412
357.739,103.59 364.043,83.483 350.328,63.273 373.451,35.704 334.898,18.808 300.966,6.95 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="297.412" y1="52.602" x2="334.898" y2="18.808"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="297.412" y1="52.602" x2="262.635" y2="22.958"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="297.412" y1="52.602" x2="250.723" y2="73.945"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="114.855" x2="256.652" y2="107.146"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="114.855" x2="279.141" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="114.855" x2="340.754" y2="153.984"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="304.23" y1="114.855" x2="357.739" y2="103.59"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="297.412" y1="52.602" x2="350.328" y2="63.273"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="297.412" y1="52.602" x2="300.966" y2="6.95"/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="262.635,22.958 243.608,22.958 223.45,35.704
232.936,57.938 250.723,73.945 256.652,107.146 279.141,153.984 310.463,165.843 340.754,153.984 367.521,149.243 373.451,118.412
357.739,103.59 364.043,83.483 350.328,63.273 373.451,35.704 334.898,18.808 300.966,6.95 "/>
<g>
<g>
<defs>
<rect id="SVGID_3_" x="296.465" y="76.019" width="10" height="17"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M304.107,82.128c0.08-0.293,0.186-0.666,0.266-0.879l-0.053-0.106l-0.107,0.026
c-0.397,0.08-0.559,0.106-1.33,0.106h-0.268l0.346-1.783c0.24-1.358,0.693-1.971,1.412-1.971c0.479,0,0.906,0.239,1.146,0.612
l0.159-0.054c0.08-0.266,0.24-0.745,0.373-1.064l0.08-0.24c-0.268-0.106-0.746-0.213-1.119-0.213
c-0.159,0-0.426,0.054-0.559,0.106c-0.373,0.187-1.678,1.146-2.051,1.545c-0.346,0.346-0.533,0.825-0.719,1.73l-0.24,1.252
c-0.64,0.319-0.957,0.452-1.357,0.585l-0.08,0.347h1.279l-0.135,0.905c-0.479,3.089-1.064,6.044-1.41,7.136
c-0.293,0.934-0.773,1.438-1.332,1.438c-0.373,0-0.533-0.105-0.824-0.453l-0.24,0.055c-0.053,0.373-0.268,1.118-0.346,1.277
c0.133,0.08,0.371,0.134,0.56,0.134c0.639,0,1.489-0.507,2.131-1.252c0.957-1.146,1.305-2.263,2.475-7.828
c0.055-0.213,0.16-0.799,0.293-1.411L304.107,82.128"/>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="349.881px" height="119.336px" viewBox="0 0 349.881 119.336" enable-background="new 0 0 349.881 119.336"
xml:space="preserve">
<g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" points="52.667,118.824 19.741,90.492 0.667,45.513 29.396,35.193 31.167,16.367
54.48,0.658 68.487,16.367 100.167,6.158 107.579,35.193 136.333,50.825 117.234,77.493 109.333,99.158 90.182,116.492 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="52.667,118.824 19.741,90.492 0.667,45.513 29.396,35.193
31.167,16.367 54.48,0.658 68.487,16.367 100.167,6.158 107.579,35.193 136.333,50.825 117.234,77.493 109.333,99.158
90.182,116.492 "/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="68.487" y2="16.367"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="107.579" y2="35.193"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="117.234" y2="77.493"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="90.182" y2="116.492"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="52.667" y2="118.824"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="19.741" y2="90.492"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="76.167" y1="55.658" x2="29.396" y2="35.193"/>
<circle cx="76.167" cy="55.658" r="3.671"/>
</g>
<g>
<defs>
<rect id="SVGID_1_" x="76.774" y="40.104" width="8" height="8"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M81.86,41.181l0.16,0.293c0.16-0.079,0.293-0.133,0.426-0.133
c0.426,0,0.692,0.373,0.692,1.012c0,2.344-1.544,4.926-2.929,4.926c-0.799,0-1.278-0.665-1.278-1.704
c0-1.65,0.613-3.115,2.184-5.032l-0.16-0.293c-0.32,0.133-0.533,0.187-0.985,0.187c-0.426,0-1.118-0.026-1.571-0.08l-0.187-0.026
c-0.106,0-0.187,0-0.187,0c-0.186,0-0.346,0.026-0.506,0.106c-0.24,0.426-0.399,1.012-0.612,1.864h0.346l0.266-0.666
c0.133-0.267,0.426-0.426,0.826-0.426c0.08,0,0.213,0,0.426,0c0.133,0.026,0.24,0.026,0.453,0.026c0.32,0,0.586-0.026,0.985-0.08
c-1.757,1.917-2.423,3.249-2.423,4.819c0,1.226,0.719,2.104,1.758,2.104c0.666,0,1.251-0.292,1.997-0.932
c0.746-0.692,1.491-1.757,1.997-2.849c0.346-0.799,0.612-1.864,0.612-2.503c0-0.905-0.399-1.545-0.985-1.545
c-0.213,0-0.399,0.054-0.506,0.187L81.86,41.181"/>
</g>
</g>
<g>
<g>
<polygon opacity="0.4" fill="#1B1F8A" points="265.477,118.824 232.551,90.492 213.477,45.513 242.206,35.193 243.977,16.367
267.291,0.658 281.298,16.367 312.977,6.158 320.39,35.193 349.145,50.825 330.045,77.493 322.145,99.158 302.992,116.492 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="265.477,118.824 232.551,90.492 213.477,45.513
242.206,35.193 243.977,16.367 267.291,0.658 281.298,16.367 312.977,6.158 320.39,35.193 349.145,50.825 330.045,77.493
322.145,99.158 302.992,116.492 "/>
</g>
<g>
<defs>
<rect id="SVGID_3_" x="275.648" y="54.78" width="10" height="17"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M283.29,60.89c0.08-0.293,0.187-0.666,0.267-0.879l-0.054-0.106l-0.106,0.026
c-0.399,0.08-0.559,0.106-1.331,0.106h-0.267l0.346-1.783c0.24-1.358,0.693-1.971,1.412-1.971c0.479,0,0.905,0.239,1.145,0.612
l0.16-0.054c0.08-0.266,0.239-0.745,0.373-1.064l0.08-0.24c-0.268-0.106-0.746-0.213-1.119-0.213c-0.16,0-0.426,0.054-0.559,0.106
c-0.373,0.187-1.678,1.146-2.051,1.545c-0.346,0.346-0.533,0.825-0.719,1.73l-0.24,1.252c-0.639,0.319-0.958,0.452-1.357,0.585
l-0.08,0.347h1.278l-0.134,0.905c-0.479,3.089-1.064,6.044-1.41,7.136c-0.293,0.933-0.773,1.438-1.332,1.438
c-0.373,0-0.533-0.106-0.825-0.453l-0.239,0.054c-0.054,0.373-0.268,1.118-0.347,1.278c0.134,0.079,0.372,0.133,0.56,0.133
c0.639,0,1.49-0.506,2.13-1.252c0.958-1.145,1.305-2.263,2.476-7.828c0.054-0.213,0.16-0.799,0.293-1.411H283.29"/>
</g>
</g>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M227.278,19.637
c-18.175-6.461-37.743-9.979-58.134-9.979c-20.525,0-40.219,3.564-58.494,10.107"/>
<g>
<polygon points="237.145,23.491 225.375,12.474 226.51,19.434 221.028,23.868 "/>
</g>
</g>
</g>
<g>
<g>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="71.827,29.386 70.906,28.996
70.126,29.622 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="2.1108,2.1108" x1="68.479" y1="30.941" x2="52.832" y2="43.482"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="52.008,44.142 51.228,44.768
51.287,45.766 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="2.1247,2.1247" x1="51.413" y1="47.887" x2="52.609" y2="68.036"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="52.672,69.097 52.731,70.095
53.515,70.716 "/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.9964,1.9964" points="
55.08,71.956 66.643,81.125 82.216,82.129 98.52,69.629 "/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="99.312,69.021 100.105,68.412
100.061,67.414 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.97,1.97" x1="99.973" y1="65.445" x2="98.965" y2="42.813"/>
<polyline fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" points="98.921,41.83 98.876,40.831
97.956,40.441 "/>
<line fill="none" stroke="#000000" stroke-width="0.5" stroke-miterlimit="10" stroke-dasharray="1.8914,1.8914" x1="96.213" y1="39.704" x2="72.698" y2="29.754"/>
</g>
</g>
<g>
<path d="M132.008,20.924c0.906-0.053,1.438-0.053,2.317-0.053c0.852,0,1.544,0.133,1.544,0.319l0.133,1.171h0.586l0.213-2.236
l-0.106-0.133c-0.585-0.027-0.878-0.054-1.491-0.054c-0.373,0-0.852,0.026-1.73,0.026c-1.145,0.027-1.598,0.027-2.05,0.027
c-0.56,0-1.251,0-2.982-0.027v0.586l0.586,0.054c0.692,0.053,0.746,0.159,0.746,1.544v7.137c0,0.532-0.08,0.771-0.32,0.879
l-0.506,0.292v0.373c1.571-0.053,1.571-0.053,1.944-0.053h0.533c1.624,0.053,2.263,0.079,3.062,0.079
c0.826,0,1.332-0.026,2.237-0.079l0.08-0.134l0.187-2.503h-0.639l-0.346,1.491c0,0.026-0.026,0.026-0.053,0.054
c-0.506,0.159-0.958,0.213-1.837,0.213c-0.666,0-1.278,0-2.104-0.026v-4.261c0.453-0.026,0.719-0.054,1.065-0.054h1.065
c0.586,0,0.852,0.187,0.905,0.613l0.08,0.771h0.639l-0.027-1.704c0-0.187,0-0.187,0.027-1.704h-0.639l-0.08,0.905
c-0.026,0.267-0.24,0.347-0.905,0.347h-1.065c-0.506,0-0.746,0-1.065-0.054V20.924"/>
<path d="M140.902,23.294l-1.118,0.346c-0.506,0.16-0.799,0.213-1.811,0.347v0.559l0.719,0.054c0.373,0.026,0.426,0.187,0.426,1.118
v3.488c0,0.852-0.08,0.959-0.586,1.012l-0.559,0.026v0.586l2.05-0.053c0.213,0,0.266,0,2.423,0.053v-0.586l-0.639-0.026
c-0.666-0.053-0.746-0.133-0.746-1.012v-3.169c0-0.479,0.639-1.012,1.251-1.012c0.399,0,0.692,0.187,0.905,0.586l0.399-0.16
l0.08-2.05c-0.16-0.08-0.373-0.106-0.585-0.106c-0.453,0-0.746,0.187-1.358,0.852l-0.692,0.746v-1.491L140.902,23.294"/>
<path d="M148.464,28.966c-0.32,0.399-0.905,0.691-1.358,0.691c-0.533,0-0.826-0.372-0.826-0.984c0-0.772,0.346-1.092,1.464-1.412
l0.719-0.186V28.966 M148.464,29.711l-0.08,0.985l0.08,0.133c0.985-0.026,1.251-0.053,1.438-0.053c0.186,0,0.453,0.026,1.411,0.053
v-0.586l-0.479-0.053c-0.346-0.054-0.426-0.213-0.453-0.959v-0.346c-0.026-0.506-0.026-0.959-0.026-1.332
c0-0.426,0-0.932,0.026-1.544c0.027-0.213,0.027-0.346,0.027-0.453c0-1.411-0.958-2.263-2.556-2.263
c-0.666,0-1.332,0.187-1.917,0.532l-0.852,0.506v1.118l0.479,0.106l0.346-0.799c0.053-0.106,0.506-0.213,0.932-0.213
c1.065,0,1.571,0.56,1.625,1.864l-1.411,0.293c-1.997,0.399-2.716,1.038-2.716,2.37c0,1.305,0.666,1.97,1.864,1.97
c0.347,0,0.613-0.053,0.772-0.187L148.464,29.711z"/>
<path d="M157.464,25.611l0.133-1.943c-0.639-0.267-1.119-0.373-1.971-0.373c-2.13,0-3.302,0.852-3.302,2.449
c0,1.039,0.586,1.704,1.678,1.997l1.384,0.319c0.719,0.187,0.985,0.453,0.985,1.013c0,0.745-0.559,1.225-1.464,1.225
c-0.746,0-1.251-0.24-1.757-0.825l-0.08-1.119h-0.639l-0.106,2.264c0.905,0.319,1.625,0.426,2.477,0.426
c1.997,0,3.355-1.092,3.355-2.716c0-1.145-0.612-1.73-2.024-2.05l-1.305-0.293c-0.612-0.134-0.878-0.399-0.878-0.905
c0-0.612,0.532-1.012,1.384-1.012c0.639,0,1.358,0.292,1.385,0.612l0.16,0.932H157.464"/>
<path d="M162.683,26.436h-0.053c-0.106,0-0.532,0-0.772-0.026l-0.506-0.026c0.053-1.571,0.426-2.184,1.358-2.184
c0.905,0,1.278,0.612,1.305,2.184L162.683,26.436 M166.039,26.09c0-1.704-1.198-2.796-3.009-2.796
c-0.559,0-0.958,0.106-1.384,0.373l-0.772,0.452c-1.039,0.612-1.491,1.571-1.491,3.062c0,2.529,1.278,3.86,3.622,3.86
c0.905,0,1.518-0.159,2.529-0.665l0.346-0.772l-0.186-0.239c-0.746,0.426-1.225,0.559-1.864,0.559
c-0.825,0-1.598-0.452-1.997-1.118c-0.266-0.453-0.346-0.825-0.399-1.571h2.104c0.905,0,1.598-0.08,2.503-0.319V26.09z"/>
<path d="M172.109,20.551v-0.586c-0.666,0-1.278,0-1.464,0.027c-0.533,0-0.905,0-1.119,0c-0.213,0-0.213,0-2.503-0.027v0.586
l0.666,0.054c0.373,0.026,0.612,0.319,0.985,1.145l3.781,9.08h1.226c0.159-0.426,0.213-0.586,0.292-0.772
c0.08-0.239,0.134-0.426,0.188-0.479c0-0.054,0.053-0.187,0.105-0.32l3.303-7.908c0.213-0.506,0.426-0.719,0.745-0.745l0.532-0.054
v-0.586c-1.703,0.027-1.703,0.027-1.863,0.027s-0.426,0-0.879,0c-0.133-0.027-0.532-0.027-0.932-0.027v0.586l0.719,0.054
c0.373,0.026,0.586,0.159,0.586,0.399c0,0.239-0.16,0.745-0.479,1.571l-2.263,5.618l-2.503-6.151
c-0.32-0.825-0.32-0.852-0.32-1.145c0-0.134,0.187-0.293,0.399-0.293L172.109,20.551"/>
<path d="M181.27,26.436h-0.054c-0.106,0-0.532,0-0.772-0.026l-0.506-0.026c0.054-1.571,0.426-2.184,1.358-2.184
c0.905,0,1.278,0.612,1.331,2.184L181.27,26.436 M184.625,26.09c0-1.704-1.172-2.796-2.982-2.796c-0.56,0-0.986,0.106-1.412,0.373
l-0.745,0.452c-1.038,0.612-1.519,1.571-1.519,3.062c0,2.529,1.279,3.86,3.648,3.86c0.906,0,1.491-0.159,2.504-0.665l0.346-0.772
l-0.187-0.239c-0.745,0.426-1.226,0.559-1.864,0.559c-0.825,0-1.598-0.452-1.996-1.118c-0.24-0.453-0.347-0.825-0.373-1.571h2.076
c0.906,0,1.625-0.08,2.504-0.319V26.09z"/>
<path d="M188.698,23.294l-1.118,0.346c-0.506,0.16-0.799,0.213-1.784,0.347v0.559l0.692,0.054c0.373,0.026,0.426,0.187,0.426,1.118
v3.488c0,0.852-0.08,0.959-0.586,1.012l-0.532,0.026v0.586l2.05-0.053c0.188,0,0.24,0,2.396,0.053v-0.586l-0.639-0.026
c-0.666-0.053-0.745-0.133-0.745-1.012v-3.169c0-0.479,0.639-1.012,1.278-1.012c0.372,0,0.665,0.187,0.904,0.586l0.373-0.16
l0.08-2.05c-0.16-0.08-0.373-0.106-0.586-0.106c-0.453,0-0.745,0.187-1.357,0.852l-0.692,0.746v-1.491L188.698,23.294"/>
<path d="M196.66,29.818l-0.133-0.293c-0.32,0.16-0.48,0.213-0.719,0.213c-0.746,0-0.986-0.266-0.986-1.038v-3.781h1.678
l0.133-1.038l-1.811,0.106v-0.933c0-0.852,0.027-1.357,0.188-2.156l-0.24-0.16c-0.612,0.293-1.119,0.479-1.918,0.799
c0.027,0.825,0.055,1.118,0.055,1.465v0.958l-1.039,0.666v0.347l1.012-0.054v4.127c0,1.411,0.586,1.997,1.971,1.997
c0.479,0,0.879-0.106,1.038-0.266L196.66,29.818"/>
<path d="M200.787,26.436h-0.08c-0.079,0-0.506,0-0.745-0.026l-0.506-0.026c0.026-1.571,0.426-2.184,1.331-2.184
s1.305,0.612,1.332,2.184L200.787,26.436 M204.143,26.09c0-1.704-1.199-2.796-3.01-2.796c-0.559,0-0.984,0.106-1.41,0.373
l-0.746,0.452c-1.039,0.612-1.491,1.571-1.491,3.062c0,2.529,1.251,3.86,3.622,3.86c0.904,0,1.49-0.159,2.529-0.665l0.346-0.772
l-0.187-0.239c-0.745,0.426-1.225,0.559-1.863,0.559c-0.825,0-1.624-0.452-1.997-1.118c-0.268-0.453-0.373-0.825-0.4-1.571h2.078
c0.904,0,1.624-0.08,2.529-0.319V26.09z"/>
<path d="M207.977,27.448l-1.73,2.21c-0.32,0.399-0.613,0.56-1.092,0.586v0.533h1.438c0.453-0.72,0.639-0.959,0.826-1.226
l1.012-1.411l1.598,2.689l1.225-0.053c0.639,0.026,0.771,0.026,1.225,0.053v-0.586c-0.479-0.053-0.799-0.346-1.357-1.251
l-1.412-2.423l1.545-1.812c0.479-0.559,0.639-0.665,1.225-0.691v-0.586h-1.491l-1.73,2.396l-0.825-1.358
c-0.373-0.612-0.666-0.959-0.985-1.225c-0.56,0.133-1.731,0.399-2.317,0.506l0.134,0.586c0.08-0.027,0.187-0.027,0.239-0.027
c0.506,0,0.799,0.214,1.225,0.933L207.977,27.448"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="397.95px" height="144.156px" viewBox="0 0 397.95 144.156" enable-background="new 0 0 397.95 144.156"
xml:space="preserve">
<g>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M264.146,11.479
C245.972,5.018,226.403,1.5,206.012,1.5c-20.525,0-40.219,3.564-58.494,10.107"/>
<g>
<polygon points="274.013,15.332 262.243,4.315 263.377,11.275 257.896,15.709 "/>
</g>
</g>
</g>
</g>
<g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="19.999,42.64 66.167,8.241 141.754,17.293
169.364,64.819 155.87,106.417 105.324,136.203 19.999,143.576 0.536,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="19.999,42.64 66.167,8.241 141.754,17.293 169.364,64.819
155.87,106.417 105.324,136.203 19.999,143.576 0.536,101.028 "/>
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" x1="19.999" y1="42.64" x2="105.324" y2="136.203"/>
<g>
<g>
<defs>
<rect id="SVGID_1_" x="69.27" y="80.946" width="6" height="8"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M71.054,84.393c0.293-1.093,0.612-1.784,1.065-2.185c0.293-0.266,0.772-0.451,1.145-0.451
c0.479,0,0.772,0.318,0.772,0.824c0,0.692-0.559,1.438-1.384,1.838c-0.453,0.24-1.012,0.398-1.731,0.56L71.054,84.393
M74.489,86.976l-0.399,0.268c-0.825,0.611-1.598,0.932-2.157,0.932c-0.746,0-1.225-0.586-1.225-1.545
c0-0.398,0.053-0.825,0.133-1.277l1.305-0.318c0.266-0.08,0.692-0.24,1.091-0.4c1.358-0.586,1.971-1.332,1.971-2.316
c0-0.744-0.533-1.225-1.332-1.225c-1.039,0-2.796,1.092-3.408,2.104c-0.479,0.799-0.958,2.689-0.958,3.756
c0,1.25,0.692,1.969,1.837,1.969c0.905,0,1.811-0.451,3.275-1.623L74.489,86.976z"/>
</g>
</g>
</g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="247.999,42.64 294.167,8.241 369.754,17.293
397.364,64.819 383.87,106.417 333.325,136.203 247.999,143.576 228.536,101.028 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="247.999,42.64 294.167,8.241 369.754,17.293 397.364,64.819
383.87,106.417 333.325,136.203 247.999,143.576 228.536,101.028 "/>
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" x1="228.536" y1="101.028" x2="383.87" y2="106.417"/>
<g>
<path d="M308.053,92.393c0.294-1.093,0.613-1.784,1.066-2.185c0.293-0.266,0.771-0.451,1.146-0.451
c0.479,0,0.771,0.318,0.771,0.824c0,0.692-0.559,1.438-1.385,1.838c-0.451,0.24-1.012,0.398-1.73,0.56L308.053,92.393
M311.489,94.976l-0.4,0.268c-0.823,0.611-1.598,0.932-2.155,0.932c-0.746,0-1.226-0.586-1.226-1.545
c0-0.398,0.053-0.825,0.133-1.277l1.306-0.318c0.267-0.08,0.692-0.24,1.093-0.4c1.357-0.586,1.971-1.332,1.971-2.316
c0-0.744-0.533-1.225-1.332-1.225c-1.039,0-2.795,1.092-3.408,2.104c-0.479,0.799-0.959,2.689-0.959,3.756
c0,1.25,0.693,1.969,1.838,1.969c0.906,0,1.811-0.451,3.275-1.623L311.489,94.976z"/>
</g>
<g>
<path d="M176.153,11.725c0.906-0.026,1.438-0.054,2.317-0.054c0.852,0,1.544,0.134,1.544,0.319l0.133,1.198h0.586l0.213-2.263
l-0.106-0.106c-0.585-0.054-0.878-0.08-1.491-0.08c-0.373,0-0.852,0.026-1.73,0.053c-1.145,0.027-1.598,0.027-2.05,0.027
c-0.56,0-1.251-0.027-2.982-0.054v0.586l0.586,0.054c0.692,0.053,0.746,0.159,0.746,1.544v7.136c0,0.533-0.08,0.771-0.32,0.906
l-0.506,0.291v0.348c1.571-0.027,1.571-0.027,1.944-0.027h0.533c1.624,0.027,2.263,0.053,3.062,0.053
c0.826,0,1.332-0.025,2.237-0.053l0.08-0.133l0.187-2.529h-0.639l-0.346,1.518c0,0-0.026,0.025-0.053,0.025
c-0.506,0.16-0.958,0.24-1.837,0.24c-0.666,0-1.278-0.025-2.104-0.053v-4.234c0.453-0.054,0.719-0.054,1.065-0.054h1.065
c0.586,0,0.852,0.16,0.905,0.586l0.08,0.799h0.639l-0.027-1.731c0-0.16,0-0.187,0.027-1.704h-0.639l-0.08,0.905
c-0.026,0.267-0.24,0.346-0.905,0.346h-1.065c-0.506,0-0.746,0-1.065-0.026V11.725"/>
<path d="M187.789,19.047c0,0.719-0.746,1.305-1.624,1.305c-1.119,0-1.837-1.092-1.837-2.822c0-1.597,0.559-2.396,1.678-2.396
c0.692,0,1.251,0.293,1.784,0.985V19.047 M189.733,10.234l-0.133-0.08l-1.145,0.347c-0.453,0.133-1.012,0.239-1.917,0.319v0.586
l0.826,0.053c0.373,0,0.426,0.16,0.426,1.092v1.943l-0.319-0.106c-0.453-0.186-0.879-0.293-1.278-0.293
c-0.506,0-0.958,0.16-1.384,0.427l-1.145,0.745c-0.905,0.612-1.332,1.518-1.332,2.876c0,2.264,1.172,3.727,3.036,3.727
c0.346,0,0.612-0.078,0.772-0.186l1.651-1.357l-0.08,1.197l0.08,0.107c0.959-0.027,1.251-0.027,1.438-0.027
c0.106,0,0.399,0,0.852,0.027c0.106,0,0.399,0,0.746,0v-0.586l-0.533-0.027c-0.479-0.025-0.559-0.16-0.559-1.012V10.234z"/>
<path d="M195.671,21.816c1.944,0,2.423,0.266,2.423,1.279c0,1.092-1.065,1.916-2.477,1.916s-2.37-0.666-2.37-1.65
c0-0.586,0.346-1.119,0.825-1.357C194.313,21.896,194.899,21.816,195.671,21.816 M195.352,14.894c0.852,0,1.305,0.691,1.305,1.943
c0,1.118-0.426,1.704-1.278,1.704c-0.825,0-1.331-0.691-1.331-1.89C194.047,15.506,194.5,14.894,195.352,14.894z M199.772,15.746
l0.08-1.012c-0.666,0.053-0.959,0.08-1.305,0.08c-0.133,0-0.32,0-0.586-0.027c-0.639-0.479-1.385-0.692-2.423-0.692
c-2.023,0-3.435,1.198-3.435,2.85c0,0.585,0.213,1.119,0.585,1.544c0.293,0.293,0.533,0.453,1.092,0.639l-1.118,0.852
c-0.16,0.107-0.266,0.453-0.266,0.773c0,0.559,0.266,0.852,1.065,1.064l-1.278,0.773c-0.239,0.133-0.426,0.531-0.426,0.984
c0,1.357,1.331,2.236,3.435,2.236c2.796,0,4.66-1.438,4.66-3.541c0-1.357-0.746-1.971-2.344-1.971h-0.399
c-1.571,0.027-2.13,0.053-2.316,0.053c-0.479,0-0.746-0.158-0.746-0.479c0-0.24,0.16-0.426,0.479-0.613
c0.267,0,0.426,0.027,0.612,0.027c1.119,0,2.13-0.373,2.77-1.012c0.506-0.506,0.719-1.065,0.719-1.837
c0-0.267-0.026-0.453-0.08-0.772L199.772,15.746z"/>
<path d="M204.218,17.263h-0.054c-0.105,0-0.532-0.026-0.771-0.053h-0.506c0.053-1.571,0.426-2.21,1.357-2.21
c0.906,0,1.278,0.639,1.305,2.21L204.218,17.263 M207.573,16.891c0-1.678-1.197-2.797-3.008-2.797
c-0.533,0-0.959,0.134-1.385,0.373l-0.746,0.453c-1.064,0.612-1.518,1.57-1.518,3.089c0,2.502,1.278,3.859,3.648,3.859
c0.904,0,1.49-0.158,2.502-0.691l0.347-0.771l-0.187-0.24c-0.745,0.426-1.225,0.559-1.863,0.559c-0.826,0-1.598-0.426-1.998-1.117
c-0.266-0.453-0.346-0.826-0.372-1.572h2.077c0.904,0,1.624-0.08,2.502-0.318V16.891z"/>
<path d="M212.287,11.725c0.772-0.026,1.305-0.026,1.837-0.026c1.065,0,1.758,0.106,1.784,0.292l0.106,1.198h0.586l0.213-2.263
l-0.08-0.106c-0.612-0.054-0.904-0.08-1.518-0.08c-0.373,0-0.959,0.026-2.236,0.053c-0.746,0.027-1.145,0.027-1.465,0.027
c-0.453,0-0.453,0-2.822-0.054v0.586l0.586,0.054c0.719,0.053,0.771,0.159,0.771,1.544v6.498c0,1.41-0.026,1.438-0.771,1.518
l-0.586,0.027v0.639c1.917-0.027,1.917-0.027,2.477-0.027c0.506,0,0.506,0,2.636,0.027v-0.639l-0.745-0.027
c-0.746-0.053-0.772-0.133-0.772-1.518v-2.983c0.452-0.026,0.719-0.026,1.065-0.026h0.825c0.585,0,0.853,0.16,0.905,0.586
l0.08,0.773h0.639l-0.053-1.706c0-0.186,0-0.398,0.053-1.624h-0.639l-0.08,0.825c-0.053,0.267-0.24,0.347-0.905,0.347h-0.825
c-0.533,0-0.746,0-1.065-0.054V11.725"/>
<path d="M220.488,10.154L219.37,10.5c-0.479,0.133-1.012,0.239-1.943,0.319v0.586l0.852,0.053c0.346,0,0.399,0.16,0.399,1.092
v7.456c0,0.852-0.08,0.986-0.56,1.012l-0.559,0.027v0.586l2.05-0.027c0.319,0,1.092,0,2.157,0.027v-0.586l-0.56-0.027
c-0.506-0.025-0.585-0.16-0.585-1.012v-9.772L220.488,10.154"/>
<path d="M224.934,10.367c-0.665,0-1.197,0.506-1.197,1.172s0.532,1.225,1.197,1.225c0.64,0,1.199-0.559,1.199-1.198
C226.133,10.9,225.6,10.367,224.934,10.367 M225.813,14.094l-1.118,0.373c-0.506,0.134-0.905,0.213-1.571,0.293
c-0.053,0-0.133,0-0.239,0.026v0.586l0.719,0.027c0.373,0.026,0.427,0.186,0.427,1.118v3.488c0,0.852-0.08,0.986-0.586,1.012
l-0.56,0.027v0.586l2.05-0.027c0.32,0,1.092,0,2.157,0.027v-0.586l-0.56-0.027c-0.479-0.025-0.559-0.16-0.559-1.012v-5.804
L225.813,14.094z"/>
<path d="M231.192,16.332c0.346-0.532,0.852-0.799,1.518-0.799c1.225,0,1.943,0.958,1.943,2.555c0,1.652-0.719,2.689-1.863,2.689
c-0.666,0-1.172-0.266-1.598-0.877V16.332 M231.032,14.094l-1.117,0.373c-0.533,0.134-0.826,0.187-1.625,0.293l-0.187,0.026v0.586
l0.72,0.027c0.372,0.026,0.426,0.186,0.426,1.118v7.535c0,0.854-0.08,0.986-0.586,1.012l-0.56,0.027v0.586l2.05-0.027
c0.214,0,0.24,0,2.317,0.027v-0.586l-0.72-0.027c-0.479,0-0.559-0.158-0.559-1.012v-2.449c0.772,0.213,1.012,0.266,1.411,0.266
c0.532,0,1.092-0.293,2.157-1.145c0.106-0.08,0.213-0.16,0.293-0.213c1.038-0.799,1.624-2.023,1.624-3.461
c0-1.678-1.226-2.956-2.902-2.956c-0.612,0-1.065,0.187-1.624,0.64l-0.959,0.772v-1.305L231.032,14.094z"/>
</g>
</svg>
---
layout: default
title: "Halfedge Mesh"
permalink: /meshedit/halfedge
---
# Halfedge Mesh
## Geometric Data Structures
Scotty3D uses a variety of geometric data structures, depending on the task. Some operations (e.g., ray tracing) use a simple list of triangles that can be compactly encoded and efficiently cached. For more sophisticated geometric tasks like mesh editing and sampling, a simple triangle list is no longer sufficient (or leads to unnecessarily poor asymptotic performance). Most actions in MeshEdit mode therefore use a topological data structure called a _halfedge mesh_ (also known as a _doubly-connected_ edge list), which provides a good tradeoff between simplicity and sophistication.
### The Halfedge Data Structure
The basic idea behind the halfedge data structure is that, in addition to the usual vertices, edges, and faces that make up a polygonal mesh, we also have an entity called a _halfedge_ that acts like "glue" connecting the different elements. It is this glue that allow us to easily "navigate" the mesh, i.e., easily access mesh elements adjacent to a given element.
![Halfedge Pointers](halfedge_pointers.png)
In particular, there are two halfedges associated with each edge (see picture above). For an edge connecting two vertices i and j, one of its halfedges points from i to j; the other one points from j to i. In other words, we say that the two halfedges are _oppositely oriented_. On of the halfedges is associated with the face to the "left" of the edge; the other is associated with the face to the "right." Each halfedge knows about the opposite halfedge, which we call its _twin_. It also knows about the _next_ halfedge around its face, as well as its associated edge, face, and vertex.
In contrast, the standard mesh elements (vertices, edges, and faces) know only about _one_ of their halfedges. In particular:
* a vertex knows about one of its "outgoing" halfedges,
* an edge knows about one of its two halfedges, and
* a face knows about one of the many halfedges circulating around its interior.
In summary, we have the following relationships:
| Mesh Element | Pointers |
| ------------ | ------------------------------ |
| Vertex | halfedge (just one) |
| Edge | halfedge (just one) |
| Face | halfedge (just one) |
| Halfedge | next, twin, vertex, edge, face |
This list emphasizes that it is really the **halfedges** that connect everything up. An easy example is if we want to visit all the vertices of a given face. We can start at the face's halfedge, and follow the "next" pointer until we're back at the beginning. A more interesting example is visiting all the vertices adjacent to a given vertex v. We can start by getting its outgoing halfedge, then its twin, then its next halfedge; this final halfedge will also point out of vertex v, but it will point **toward** a different vertex than the first halfedge. By repeating this process, we can visit all the neighboring vertices:
![Walking around a vertex](vertex_traversal.png)
In some sense, a halfedge mesh is kind of like a supercharged linked list. For instance, the halfedges around a given face (connected by `next` pointers) form a sort of "cyclic" linked list, where the tail points back to the head.
A nice consequence of the halfedge representation is that any valid halfedge mesh **must** be manifold and orientable. Scotty3D will therefore only produce manifold, oriented meshes as output (and will complain if the input does not satisfy these criteria).
### The `Halfedge_Mesh` Class
The Scotty3D skeleton code already provides a fairly sophisticated implementation of the half edge data structure, in the `Halfedge_Mesh` class (see `geometry/halfedge.h` and `geometry/halfedge.cpp`). Although the detailed implementation may appear a bit complicated, the basic interface is not much different from the abstract description given above. For instance, suppose we have a face f and want to print out the positions of all its vertices. We would write a routine like this:
void printVertexPositions(FaceRef f) {
HalfEdgeRef h = f->halfedge(); // get the first halfedge of the face
do {
VertexRef v = h->vertex(); // get the vertex of the current halfedge
cout << v->pos << endl; // print the vertex position
h = h->next(); // move to the next halfedge around the face
} while (h != f->halfedge()); // keep going until we're back at the beginning
}
Notice that we refer to a face as a `FaceRef` rather than just a `Face`. You can think of a `Ref` as a kind of _pointer_. Note that members of an iterator are accessed with an arrow `->` rather than a dot `.`, just as with pointers. (A more in-depth explanation of some of these details can be found in the inline documentation.) Similarly, to print out the positions of all the neighbors of a given vertex we could write a routine like this:
void printNeighborPositions(VertexRef v) {
HalfEdgeRef h = v->halfedge(); // get one of the outgoing halfedges of the vertex
do {
HalfEdgeRef h_twin = h->twin(); // get the vertex of the current halfedge
VertexRef vN = h_twin->vertex(); // vertex is 'source' of the half edge.
// so h->vertex() is v,
// whereas h_twin->vertex() is the neighbor vertex.
cout << vN->pos << endl; // print the vertex position
h = h_twin->next(); // move to the next outgoing halfedge of the vertex.
} while(h != v->halfedge()); // keep going until we're back at the beginning
}
To iterate over **all** the vertices in a halfedge mesh, we could write a loop like this:
for(VertexRef v = mesh.vertices_begin(); v != mesh.vertices_end(); v++) {
printNeighborPositions(v); // do something interesting here
}
Internally, the lists of vertices, edges, faces, and halfedges are stored as **linked lists**, which allows us to easily add or delete elements to our mesh. For instance, to add a new vertex we can write
VertexRef v = mesh.new_vertex();
Likewise, to delete a vertex we can write
mesh.erase(v);
Note, however, that one should be **very, very careful** when adding or deleting mesh elements. New mesh elements must be properly linked to the mesh -- for instance, this new vertex must be pointed to one of its associated halfedges by writing something like
v->halfedge() = h;
Likewise, if we delete a mesh element, we must be certain that no existing elements still point to it; the halfedge data structure does not take care of these relationships for you automatically. In fact, that is exactly the point of this assignment: to get some practice directly manipulating the halfedge data structure. Being able to perform these low-level manipulations will enable you to write useful and interesting mesh code far beyond the basic operations in this assignment. The `Halfedge_Mesh` class provides a helper function called `validate` that checks whether the mesh iterators are valid. You might find it worthwhile calling this function to debug your implementation (please note that `validate` only checks that your mesh is valid - passing it does not imply that your specific operation is correct).
Finally, the **boundary** of the surface (e.g., the ankles and waist of a pair of pants) requires special care in our halfedge implementation. At first glance, it would seem that the routine `printNeighborPositions()` above might break if the vertex `v` is on the boundary, because at some point we worry that we have no `twin()` element to visit. Fortunately, our implementation has been designed to avoid this kind of catastrophe. In particular, rather than having an actual hole in the mesh, we create a "virtual" boundary face whose edges are all the edges of the boundary loop. This way, we can iterate over boundary elements just like any other mesh element. If we ever need to check whether an element is on the boundary, we have the methods.
Vertex::on_boundary()
Edge::on_boundary()
Face::is_boundary()
Halfedge::is_boundary()
These methods return true if and only if the element is contained in the domain boundary. Additionally, we store an explicit list of boundary faces, which we can iterate over like any other type of mesh element:
for(FaceRef b = mesh.boundaries_begin(); b != mesh.boundaries_end(); b++) {
// do something interesting with this boundary loop
}
These virtual faces are not stored in the usual face list, i.e., they will not show up when iterating over faces. The figure below should help to further explain the behavior of `Halfedge_Mesh` for surfaces with boundary:
![Boundary conventions](boundary_conventions.png)
Dark blue regions indicate interior faces, whereas light blue regions indicate virtual boundary faces. Note that for vertices and edges, ``on_boundary()`` will return true if the element is attached to a boundary face, but ``is_boundary()`` for halfedges is only true if the halfedge is 'inside' the boundary face. For example, in the figure above the region ``b`` is a virtual boundary face, which means that vertex ``v'``, edge ``e'``, and halfedge ``h'`` are all part of the boundary; their methods will return true. In contrast, vertex ``v``, edge ``e``, face `f`, and halfedge `h` are not part of the boundary, and their methods will return false. Notice also that the boundary face b is a polygon with 12 edges.
_Note:_ _the edge degree and face degree of a boundary vertex is not the same!_ Notice, for instance, that vertex `v'` is contained in three edges but only two interior faces. By convention, `Vertex::degree()` returns the face degree, not the edge degree. The edge degree can be computed by finding the face degree, and adding 1 if the vertex is a boundary vertex.
Please refer to the inline comments (e.g. of `geometry/halfedge.h`) for further details about the `Halfedge_Mesh` data structure.
\ No newline at end of file
---
layout: default
title: "Local Ops"
permalink: /meshedit/local
---
# Local Mesh Operations
Many of the actions that need to be implemented in the MeshEdit mode are local mesh operations (like edge collapse, face bevel, etc.).
A good recipe for ensuring that all pointers are still valid after a local remeshing operation is:
1. Draw a picture of all the elements (vertices, edges, faces, halfedges) that will be needed from the original mesh, and all the elements that should appear in the modified mesh.
2. Allocate any new elements that are needed in the modified mesh, but do not appear in the original mesh.
3. For every element in the "modified" picture, set **all** of its pointers -- even if they didn't change. For instance, for each halfedge, make sure to set `next`, `twin`, `vertex`, `edge`, and `face` to the correct values in the new (modified) picture. For each vertex, make sure to set its `halfedge` pointer. Etc. A convenience method `Halfedge::set_neighbors()` has been created for this purpose.
4. Deallocate any elements that are no longer used in the modified mesh, which can be done by calling `Halfedge_Mesh::erase()`.
The reason for setting all the pointers (and not just the ones that changed) is that it is very easy to miss a pointer, causing your code to crash.
#### Interface with global mesh operations
To facilitate user interaction, as well as global mesh processing operations (described below), local mesh operations should return the following values when possible. However, should it happen that the specified values are not available, or that the operation should not work on the given input, we need a way to signify the failure case. To do so, each local operation actually returns a ``std::optional`` value parameterized on the type of element it returns. For example, ``Halfedge_Mesh::erase_vertex`` returns a ``std::optional<Halfedge_Mesh::Face>``. An ``optional`` can hold a value of the specified type, or, similarly to a pointer, a null value (``std::nullopt``). See ``student/meshedit.cpp`` for specific examples.
Also, remember that in any case, _the program should not crash!_ So for instance, you should never return a pointer to an element that was deleted.
* `Halfedge_Mesh::flip_edge` - should return the edge that was flipped
![](flip_edge.svg)
* `Halfedge_Mesh::split_edge` - should return the inserted vertex
![](split_edge.svg)
* `Halfedge_Mesh::collapse_edge` - should return the new vertex, corresponding to the collapsed edge
![](collapse_edge.svg)
* `Halfedge_Mesh::collapse_face` - should return the new vertex, corresponding to the collapsed face
![](collapse_face.svg)
* `Halfedge_Mesh::erase_vertex` - should return the new face, corresponding to the faces originally containing the vertex
![](erase_vertex.svg)
* `Halfedge_Mesh::erase_edge` - should return the new face, corresponding to the faces originally containing the edge
![](erase_edge.svg)
* `Halfedge_Mesh::bevel_vertex` - should return the new face, corresponding to the beveled vertex
![](bevel_vertex.svg)
* `Halfedge_Mesh::bevel_edge` - should return the new face, corresponding to the beveled edge
![](bevel_edge.svg)
* `Halfedge_Mesh::bevel_face` - should return the new, inset face
![](bevel_face.svg)
---
layout: default
title: "MeshEdit Overview"
permalink: /meshedit/
---
# MeshEdit Overview
MeshEdit is the first major component of Scotty3D, which performs 3D modeling, subdivision, and mesh processing. When implementation of this tool is completed, it will enable the user to transform a simple cube model into beautiful, organic 3D surfaces described by high-quality polygon meshes. This tool can import, modify, and export industry-standard COLLADA files, allowing Scotty3D to interact with the broader ecosystem of computer graphics software.
The `media/` subdirectory of the project contains a variety of meshes and scenes on which the implementation may be tested. The simple `cube.dae` input should be treated as the primary test case -- when properly implemented MeshEdit contains all of the modeling tools to transform this starting mesh into a variety of functional and beautiful geometries. For further testing, a collection of other models are also included in this directory, but it is not necessarily reasonable to expect every algorithm to be effective on every input. The implementer must use judgement in selecting meaningful test inputs for the algorithms in MeshEdit.
The following sections contain guidelines for implementing the functionality of MeshEdit:
- [Halfedge Mesh](halfedge)
- [Local Mesh Operations](local)
- [Tutorial: Edge Flip](edge_flip)
- [Beveling](bevel)
- [Global Mesh Operations](global)
- [Triangulation](triangulation)
- [Subdivision](subdivision)
- [Linear Subdivision](linear)
- [Catmull-Clark Subdivision](catmull)
- [Loop Subdivision](loop)
- [Simplification](simplify)
- [Isotropic Remeshing](remesh)
As always, be mindful of the [project philosophy](philosophy).
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 16.0.4, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="263.926px" height="141.333px" viewBox="0 0 263.926 141.333" enable-background="new 0 0 263.926 141.333"
xml:space="preserve">
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="43.931,2 0.598,68 47.265,139.333 78.598,61.333 "/>
<g>
<g>
<path fill="none" stroke="#000000" stroke-width="3" stroke-miterlimit="10" d="M191.836,21.504
c-18.175-6.461-37.742-9.979-58.135-9.979c-20.524,0-40.22,3.564-58.494,10.107"/>
<g>
<polygon points="201.702,25.356 189.934,14.34 191.068,21.3 185.586,25.733 "/>
</g>
</g>
</g>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="43.931,2 0.598,68 47.265,139.333 78.598,61.333 "/>
<line fill="none" stroke="#000000" stroke-width="4" stroke-linecap="round" stroke-miterlimit="10" x1="43.931" y1="2" x2="47.265" y2="139.333"/>
<g>
<g>
<g>
<defs>
<rect id="SVGID_1_" x="52.827" y="64.676" width="6" height="8"/>
</defs>
<clipPath id="SVGID_2_">
<use xlink:href="#SVGID_1_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_2_)" d="M54.612,68.122c0.293-1.092,0.61-1.784,1.063-2.184c0.293-0.267,0.771-0.453,1.146-0.453
c0.479,0,0.771,0.32,0.771,0.826c0,0.691-0.561,1.438-1.385,1.836c-0.452,0.24-1.013,0.399-1.73,0.561L54.612,68.122
M58.047,70.705l-0.398,0.267c-0.825,0.612-1.598,0.932-2.156,0.932c-0.745,0-1.226-0.586-1.226-1.543
c0-0.398,0.055-0.825,0.133-1.277l1.307-0.318c0.267-0.08,0.69-0.24,1.092-0.399c1.357-0.587,1.971-1.332,1.971-2.317
c0-0.745-0.531-1.225-1.331-1.225c-1.039,0-2.797,1.092-3.407,2.104c-0.479,0.799-0.959,2.689-0.959,3.756
c0,1.252,0.691,1.971,1.838,1.971c0.903,0,1.812-0.452,3.273-1.625L58.047,70.705z"/>
</g>
</g>
</g>
<polygon opacity="0.2" fill="#1B1F8A" enable-background="new " points="227.26,2 183.926,68 230.593,139.333 261.926,61.333 "/>
<polygon fill="none" stroke="#000000" stroke-miterlimit="10" points="227.26,2 183.926,68 230.593,139.333 261.926,61.333 "/>
<g>
<defs>
<rect id="SVGID_3_" x="98.486" y="19.982" width="72" height="16"/>
</defs>
<clipPath id="SVGID_4_">
<use xlink:href="#SVGID_3_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_4_)" d="M102.586,21.816c0.906-0.026,1.438-0.054,2.317-0.054c0.853,0,1.544,0.134,1.544,0.319
l0.133,1.198h0.586l0.213-2.263l-0.105-0.106c-0.586-0.054-0.879-0.08-1.492-0.08c-0.372,0-0.852,0.026-1.73,0.053
c-1.145,0.027-1.598,0.027-2.05,0.027c-0.56,0-1.251-0.027-2.982-0.054v0.586l0.586,0.054c0.692,0.053,0.745,0.159,0.745,1.544
v7.136c0,0.533-0.08,0.772-0.319,0.906l-0.506,0.292v0.347c1.571-0.026,1.571-0.026,1.944-0.026h0.532
c1.624,0.026,2.263,0.053,3.062,0.053c0.826,0,1.332-0.026,2.237-0.053l0.079-0.134l0.188-2.529h-0.64l-0.347,1.518
c0,0-0.025,0.026-0.053,0.026c-0.506,0.16-0.959,0.24-1.837,0.24c-0.666,0-1.278-0.026-2.104-0.054v-4.233
c0.453-0.054,0.72-0.054,1.066-0.054h1.064c0.586,0,0.852,0.16,0.905,0.586l0.08,0.799h0.64l-0.027-1.73
c0-0.16,0-0.187,0.027-1.704h-0.64l-0.08,0.905c-0.026,0.267-0.239,0.346-0.905,0.346h-1.064c-0.506,0-0.746,0-1.066-0.026V21.816"
/>
<path clip-path="url(#SVGID_4_)" d="M114.223,29.139c0,0.719-0.746,1.305-1.624,1.305c-1.118,0-1.837-1.092-1.837-2.822
c0-1.598,0.559-2.396,1.678-2.396c0.691,0,1.251,0.293,1.783,0.985V29.139 M116.166,20.325l-0.133-0.08l-1.145,0.347
c-0.453,0.133-1.012,0.239-1.918,0.319v0.586l0.826,0.053c0.373,0,0.426,0.16,0.426,1.092v1.943l-0.319-0.106
c-0.452-0.186-0.879-0.293-1.278-0.293c-0.506,0-0.959,0.16-1.385,0.427l-1.145,0.745c-0.905,0.612-1.332,1.518-1.332,2.876
c0,2.264,1.172,3.728,3.036,3.728c0.347,0,0.612-0.079,0.772-0.187l1.65-1.357l-0.08,1.198l0.08,0.106
c0.959-0.026,1.252-0.026,1.438-0.026c0.107,0,0.4,0,0.853,0.026c0.106,0,0.399,0,0.745,0v-0.586l-0.532-0.026
c-0.479-0.026-0.56-0.16-0.56-1.012V20.325z"/>
<path clip-path="url(#SVGID_4_)" d="M122.104,31.908c1.944,0,2.423,0.266,2.423,1.278c0,1.092-1.064,1.917-2.477,1.917
c-1.41,0-2.369-0.666-2.369-1.651c0-0.586,0.346-1.118,0.825-1.357C120.746,31.988,121.332,31.908,122.104,31.908 M121.785,24.985
c0.852,0,1.305,0.691,1.305,1.943c0,1.118-0.426,1.704-1.278,1.704c-0.825,0-1.331-0.692-1.331-1.891
C120.48,25.598,120.934,24.985,121.785,24.985z M126.205,25.837l0.08-1.012c-0.666,0.053-0.959,0.08-1.305,0.08
c-0.133,0-0.32,0-0.586-0.027c-0.639-0.479-1.385-0.692-2.424-0.692c-2.023,0-3.434,1.198-3.434,2.85
c0,0.586,0.213,1.118,0.585,1.544c0.293,0.293,0.532,0.453,1.092,0.64l-1.118,0.852c-0.16,0.106-0.266,0.453-0.266,0.772
c0,0.56,0.266,0.853,1.064,1.065l-1.278,0.772c-0.239,0.133-0.426,0.532-0.426,0.984c0,1.358,1.331,2.237,3.435,2.237
c2.797,0,4.66-1.438,4.66-3.542c0-1.357-0.746-1.97-2.344-1.97h-0.398c-1.572,0.026-2.131,0.053-2.316,0.053
c-0.48,0-0.746-0.159-0.746-0.479c0-0.239,0.16-0.426,0.479-0.612c0.268,0,0.427,0.026,0.613,0.026c1.118,0,2.13-0.372,2.77-1.012
c0.506-0.506,0.719-1.064,0.719-1.837c0-0.267-0.027-0.453-0.08-0.772L126.205,25.837z"/>
<path clip-path="url(#SVGID_4_)" d="M130.652,27.354h-0.054c-0.106,0-0.532-0.026-0.772-0.053h-0.506
c0.054-1.571,0.426-2.21,1.358-2.21c0.905,0,1.278,0.639,1.305,2.21L130.652,27.354 M134.007,26.982
c0-1.678-1.198-2.797-3.009-2.797c-0.532,0-0.959,0.134-1.385,0.373l-0.745,0.453c-1.065,0.612-1.519,1.57-1.519,3.089
c0,2.503,1.279,3.86,3.648,3.86c0.905,0,1.491-0.159,2.503-0.692l0.347-0.771l-0.187-0.24c-0.745,0.427-1.226,0.56-1.864,0.56
c-0.825,0-1.598-0.426-1.997-1.118c-0.267-0.453-0.347-0.826-0.372-1.571h2.076c0.905,0,1.625-0.08,2.503-0.319V26.982z"/>
<path clip-path="url(#SVGID_4_)" d="M135.818,28.473c0,1.198-0.054,1.838-0.214,2.743c1.146,0.532,2.104,0.745,3.302,0.745
c2.822,0,4.66-1.491,4.66-3.781c0-1.411-0.826-2.369-2.396-2.796l-1.811-0.479c-1.172-0.293-1.678-0.799-1.678-1.598
c0-1.092,0.879-1.864,2.131-1.864c0.824,0,1.544,0.293,2.156,0.879l0.08,1.305h0.666c0-1.038,0.079-1.811,0.213-2.264l-0.08-0.187
c-1.065-0.372-1.891-0.532-2.93-0.532c-2.636,0-4.207,1.252-4.207,3.382c0,1.385,0.826,2.37,2.316,2.822l2.211,0.666
c0.904,0.266,1.331,0.772,1.331,1.518c0,1.198-1.012,2.051-2.396,2.051c-1.065,0-2.104-0.479-2.583-1.226l-0.133-1.385H135.818"/>
<path clip-path="url(#SVGID_4_)" d="M147.906,26.423c0.347-0.532,0.879-0.799,1.545-0.799c1.225,0,1.943,0.958,1.943,2.556
c0,1.651-0.719,2.689-1.863,2.689c-0.693,0-1.199-0.266-1.625-0.878V26.423 M147.746,24.186l-1.091,0.373
c-0.56,0.134-0.825,0.187-1.624,0.293l-0.188,0.026v0.586l0.72,0.027c0.372,0.026,0.399,0.186,0.399,1.118v7.535
c0,0.853-0.08,0.985-0.559,1.012l-0.561,0.027v0.585l2.051-0.026c0.213,0,0.24,0,2.316,0.026v-0.585l-0.719-0.027
c-0.506,0-0.586-0.159-0.586-1.012v-2.449c0.799,0.213,1.039,0.266,1.412,0.266c0.559,0,1.117-0.293,2.184-1.145
c0.105-0.08,0.186-0.16,0.266-0.213c1.064-0.799,1.624-2.024,1.624-3.462c0-1.678-1.225-2.956-2.876-2.956
c-0.611,0-1.064,0.187-1.624,0.64l-0.985,0.772v-1.305L147.746,24.186z"/>
<path clip-path="url(#SVGID_4_)" d="M157.546,20.245l-1.146,0.347c-0.479,0.133-1.012,0.239-1.943,0.319v0.586l0.852,0.053
c0.347,0,0.426,0.16,0.426,1.092v7.456c0,0.852-0.079,0.985-0.585,1.012l-0.56,0.026v0.586l2.051-0.026
c0.319,0,1.092,0,2.156,0.026v-0.586l-0.559-0.026c-0.506-0.026-0.586-0.16-0.586-1.012v-9.772L157.546,20.245"/>
<path clip-path="url(#SVGID_4_)" d="M162.072,20.458c-0.666,0-1.198,0.506-1.198,1.172s0.532,1.225,1.198,1.225
c0.639,0,1.172-0.559,1.172-1.198C163.244,20.991,162.738,20.458,162.072,20.458 M162.924,24.186l-1.092,0.373
c-0.506,0.134-0.904,0.213-1.57,0.293c-0.053,0-0.133,0-0.24,0.026v0.586l0.72,0.027c0.372,0.026,0.426,0.186,0.426,1.118v3.488
c0,0.852-0.08,0.985-0.586,1.012l-0.56,0.026v0.586l2.051-0.026c0.32,0,1.092,0,2.156,0.026v-0.586l-0.559-0.026
c-0.506-0.026-0.586-0.16-0.586-1.012v-5.805L162.924,24.186z"/>
<path clip-path="url(#SVGID_4_)" d="M169.928,30.736l-0.107-0.319c-0.318,0.159-0.479,0.213-0.744,0.213
c-0.746,0-0.986-0.239-0.986-1.038v-3.781h1.678l0.133-1.039l-1.811,0.106v-0.932c0-0.825,0.054-1.357,0.188-2.156l-0.214-0.16
c-0.639,0.319-1.145,0.506-1.944,0.799c0.054,0.825,0.054,1.118,0.054,1.465v0.958l-1.038,0.666v0.373l1.012-0.08v4.127
c0,1.411,0.586,2.023,1.971,2.023c0.506,0,0.905-0.133,1.038-0.293L169.928,30.736"/>
</g>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="227.259" y1="2" x2="230.593" y2="139.333"/>
<line fill="none" stroke="#000000" stroke-miterlimit="10" x1="183.926" y1="68" x2="261.926" y2="61.333"/>
<circle cx="228.925" cy="64.675" r="5.318"/>
<g>
<defs>
<rect id="SVGID_5_" x="216.107" y="70.946" width="8" height="8"/>
</defs>
<clipPath id="SVGID_6_">
<use xlink:href="#SVGID_5_" overflow="visible"/>
</clipPath>
<path clip-path="url(#SVGID_6_)" d="M221.193,72.022l0.16,0.293c0.16-0.079,0.293-0.133,0.426-0.133
c0.426,0,0.693,0.373,0.693,1.012c0,2.344-1.545,4.926-2.93,4.926c-0.799,0-1.278-0.665-1.278-1.704
c0-1.65,0.612-3.115,2.184-5.032l-0.159-0.293c-0.32,0.133-0.533,0.187-0.986,0.187c-0.426,0-1.117-0.026-1.57-0.08l-0.187-0.026
c-0.106,0-0.187,0-0.187,0c-0.186,0-0.346,0.026-0.506,0.106c-0.24,0.426-0.399,1.012-0.612,1.864h0.347l0.266-0.666
c0.133-0.267,0.426-0.426,0.826-0.426c0.079,0,0.213,0,0.426,0c0.133,0.026,0.239,0.026,0.452,0.026
c0.319,0,0.586-0.026,0.985-0.08c-1.758,1.917-2.424,3.249-2.424,4.819c0,1.226,0.72,2.104,1.758,2.104
c0.666,0,1.252-0.292,1.998-0.932c0.745-0.692,1.49-1.757,1.996-2.849c0.347-0.799,0.613-1.864,0.613-2.503
c0-0.905-0.4-1.545-0.986-1.545c-0.213,0-0.398,0.054-0.506,0.187L221.193,72.022"/>
</g>
</svg>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment