This commit is contained in:
Boris Marinov 2020-05-06 10:42:18 +03:00
parent cd86095ea4
commit 57f559fc72
52 changed files with 444402 additions and 444211 deletions

6
.gitignore vendored
View File

@ -1,3 +1,3 @@
*.swp
*.un~
*.swp
*.un~

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 1.3 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 928 KiB

After

Width:  |  Height:  |  Size: 940 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 934 KiB

After

Width:  |  Height:  |  Size: 947 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 952 KiB

After

Width:  |  Height:  |  Size: 965 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 993 KiB

After

Width:  |  Height:  |  Size: 1006 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 929 KiB

After

Width:  |  Height:  |  Size: 941 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 947 KiB

After

Width:  |  Height:  |  Size: 960 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 928 KiB

After

Width:  |  Height:  |  Size: 940 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 949 KiB

After

Width:  |  Height:  |  Size: 962 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 941 KiB

After

Width:  |  Height:  |  Size: 954 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 949 KiB

After

Width:  |  Height:  |  Size: 962 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 949 KiB

After

Width:  |  Height:  |  Size: 962 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 945 KiB

After

Width:  |  Height:  |  Size: 958 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 942 KiB

After

Width:  |  Height:  |  Size: 955 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 72 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 42 KiB

After

Width:  |  Height:  |  Size: 42 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 38 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 955 KiB

After

Width:  |  Height:  |  Size: 968 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 48 KiB

After

Width:  |  Height:  |  Size: 48 KiB

View File

@ -1,389 +1,389 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 -44.1 595.3 380.5" enable-background="new 0 -44.1 595.3 380.5" xml:space="preserve">
<g id="Layer_2">
<g>
<g>
<g>
<path fill="#D6E379" d="M405.1,164.3l0.7,1l0.5,0.7l-9.5,6.6c6,2.1,12.1,5.7,17.5,10.6l0.1,0.2c0.8,0.3,1.7,1.2,2,2.4
c0.9-0.9,1.5-2.3,1.4-4l0.1,0.2c1.6-7.5,1.9-15.8,0.5-24.4l-9.5,6.5l-0.5-0.8l-0.8-1.1L405.1,164.3z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M237.5,165.8c0,0,0.4,0.5,1,1.5c0.3,0.5,0.7,1.1,1.2,1.8c0.5,0.7,1.1,1.5,1.8,2.4c2.8,3.5,7.1,8.2,13,13
c3,2.3,6.3,4.8,10,7c3.7,2.3,7.7,4.5,12.1,6.4c4.3,2,8.9,3.7,13.6,5.2c1.2,0.3,2.4,0.7,3.6,1c1.2,0.3,2.4,0.6,3.6,0.9
c1.2,0.3,2.4,0.6,3.7,0.9l3.7,0.8c9.8,2,19.8,3.3,29.2,3.8c9.4,0.6,18.2,0.4,25.7-0.1c7.5-0.5,13.8-1.3,18.1-2
c0.9-0.1,1.4-0.2,1.4-0.2l1.9,11.4c7.3-5.6,14-11.6,20.1-17.9c-8.5-2.2-16.6-4.9-24.4-8.1l1.9,11.4c0,0-0.5,0.1-1.3,0.2
c-4.3,0.7-10.4,1.5-17.8,2c-7.4,0.5-16.1,0.7-25.3,0.1c-9.3-0.5-19.1-1.8-28.8-3.8l-3.6-0.8c-1.2-0.3-2.4-0.6-3.6-0.9
c-1.2-0.3-2.4-0.6-3.6-0.9c-1.2-0.3-2.3-0.7-3.5-1c-4.6-1.4-9.1-3.2-13.3-5.1c-4.2-1.9-8.1-4-11.7-6.2c-3.6-2.2-6.8-4.5-9.7-6.8
c-5.7-4.6-9.9-9.1-12.5-12.5c-0.6-0.8-1.2-1.6-1.7-2.3c-0.5-0.7-0.9-1.3-1.2-1.7c-0.6-0.9-1-1.4-1-1.4L237.5,165.8z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M415.8,133.2c0,0,0.8-0.1,2.2-0.2c1.4-0.1,3.4-0.3,5.7-0.4c4.7-0.3,11.1-0.5,17.4-0.4
c6.3,0.1,12.7,0.6,17.4,1.1c2.4,0.2,4.3,0.5,5.7,0.7c0.7,0.1,1,0.1,1,0.1l-1.6,11.5c7.6-3.4,15.7-6.3,24.1-8.8
c-6.3-6.1-13.2-11.9-20.6-17.3l-1.6,11.5c0,0-0.4,0-1.1-0.1c-1.4-0.2-3.4-0.4-5.8-0.7c-4.8-0.5-11.2-1-17.6-1.1
c-6.4-0.1-12.9,0.1-17.7,0.4c-2.4,0.2-4.4,0.3-5.8,0.4c-1.4,0.1-2.2,0.2-2.2,0.2L415.8,133.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M244.9,103.1c0,0,3.6-0.9,9.9-2.6c3.2-0.8,7-1.7,11.4-2.8c4.4-1,9.4-2.3,14.8-3.4
c10.9-2.4,23.6-4.9,37.4-6.5c13.8-1.6,28.6-2.5,43.4-1.8c14.8,0.5,29.5,2.3,43.3,4.5c6.9,1.1,13.5,2.4,19.7,3.7
c6.2,1.4,12,3,17.3,4.6c10.6,3.3,19,7.1,24.6,10.1c0.5,0.3,0.9,0.5,1.2,0.6c0.1,0.1,0.2,0.1,0.2,0.1l-5.5,10.2
c8-0.6,16.4-0.3,25,1.3c-2.9-8.3-7.2-16.5-12.5-24.4l-5.5,10.2c0,0-0.1,0-0.2-0.1c-0.3-0.1-0.7-0.4-1.2-0.6
c-5.8-3.1-14.4-6.9-25.2-10.3c-5.4-1.7-11.3-3.3-17.5-4.7c-6.3-1.4-12.9-2.7-19.8-3.8c-13.8-2.2-28.7-4-43.6-4.5
c-15-0.6-29.9,0.2-43.9,1.9c-13.9,1.7-26.8,4.2-37.7,6.6c-5.5,1.2-10.4,2.4-14.9,3.4c-4.4,1.1-8.2,2.1-11.4,2.9
c-6.3,1.6-9.9,2.6-9.9,2.6L244.9,103.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M380.9,93.6c0,0,0.1-0.5,0.3-1.5c0.2-1,0.5-2.3,0.7-4c0.5-3.3,1.1-7.8,1.3-12.2
c0.2-4.5,0.1-8.9-0.1-12.3c-0.1-1.7-0.2-3.1-0.3-4c-0.1-0.7-0.1-1-0.1-1l11.5-1.2c-5.3-8-11.4-15-17.9-20.8
c-1.8,8.6-4.6,16.5-8.3,23.6l11.5-1.2c0,0,0,0.4,0.1,1c0.1,0.9,0.2,2.3,0.3,3.9c0.2,3.3,0.3,7.6,0.1,11.9
c-0.2,4.3-0.7,8.7-1.3,11.9c-0.2,1.6-0.5,2.9-0.7,3.9c-0.2,0.9-0.3,1.5-0.3,1.5L380.9,93.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M237.5,98c0,0,0.8-1.1,2.3-3c1.4-1.9,3.6-4.6,6.3-7.7c5.3-6.3,13-14.2,21.3-21.3
c8.3-7.2,17.3-13.5,24.3-17.9c3.5-2.1,6.5-3.9,8.6-5c0.6-0.4,1-0.6,1-0.6l5.6,10.1c4.1-7.2,8.8-14.4,14.2-21.3
c-8.7-1.2-17.7-1.8-26.9-1.7l5.6,10.1c0,0-0.4,0.2-1,0.6c-2.2,1.1-5.1,2.9-8.7,5.1c-7.1,4.4-16.2,10.9-24.6,18.2
c-8.5,7.2-16.2,15.3-21.7,21.6c-2.7,3.2-4.9,5.9-6.4,7.8c-1.5,1.9-2.3,3-2.3,3L237.5,98z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M410.5,121.1c0,0,0.3-0.4,0.8-1.1c0.5-0.7,1.2-1.7,2-2.9c1.6-2.4,3.7-5.6,5.7-8.8c2-3.3,3.9-6.6,5.2-9.1
c1.3-2.4,2.1-4,2.1-4l10.3,5.3c-0.2-9.2-1-18.1-2.4-26.8c-6.8,5.5-13.9,10.4-21,14.8l10.3,5.3c0,0-0.8,1.6-2.1,3.9
c-1.3,2.5-3.2,5.8-5.2,9c-2,3.2-4,6.4-5.6,8.7c-0.8,1.2-1.5,2.1-1.9,2.8c-0.5,0.7-0.7,1.1-0.7,1.1L410.5,121.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M413.4,136c0,0,1.4-0.5,3.9-1.5c2.5-0.9,6-2.5,10.1-4.3c8.3-3.8,18.9-9.8,28.7-16.9
c2.5-1.7,4.8-3.7,7.2-5.5c2.3-1.9,4.5-3.8,6.7-5.6c2.1-1.9,4.2-3.7,6-5.6c1.8-1.9,3.6-3.5,5.2-5.2c1.5-1.7,3-3.2,4.2-4.6
c1.2-1.4,2.2-2.6,3.1-3.6c0.5-0.6,0.8-0.9,0.8-0.9l8.9,7.4c1.8-9.1,2.8-18.1,3.1-26.8c-7.8,4.1-15.6,7.5-23.5,10.1l8.9,7.4
c0,0-0.3,0.3-0.8,0.9c-0.8,1-1.9,2.2-3,3.6c-1.2,1.3-2.6,2.8-4.1,4.5c-1.5,1.7-3.3,3.3-5.1,5.1c-1.8,1.8-3.9,3.6-5.9,5.5
c-2.1,1.8-4.3,3.7-6.6,5.5c-2.3,1.8-4.6,3.7-7.1,5.4c-9.6,7-20.1,12.9-28.2,16.6c-4.1,1.8-7.5,3.3-9.9,4.2
c-2.4,0.9-3.8,1.5-3.8,1.5L413.4,136z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M240,101.5c0,0,0.5-0.5,1.4-1.4c0.9-0.9,2.3-2.1,4.1-3.7c3.6-3.1,9.1-7.2,16.2-11.3
c14.2-8.3,35-16,56.2-21.9c21.2-5.9,43.1-9.6,59.5-11.1c2.1-0.2,4-0.4,5.9-0.5c1.9-0.1,3.7-0.3,5.3-0.4c3.4-0.2,6.3-0.4,8.7-0.4
c0.9,0,1.4,0,1.4,0l0.4,11.6c7.1-4.7,14.6-9,22.3-13.2c-7.5-4.5-15.2-9-23.2-13.1l0.4,11.6c0,0-0.5,0-1.4,0
c-2.4,0.1-5.4,0.3-8.8,0.5c-1.7,0.1-3.5,0.3-5.4,0.4c-1.9,0.1-3.9,0.3-6,0.5c-16.6,1.5-38.6,5.2-60,11.2
c-10.7,3-21.3,6.5-31,10.2c-9.7,3.7-18.6,7.8-25.9,12.1c-7.3,4.2-12.9,8.4-16.7,11.6c-1.9,1.6-3.3,2.9-4.2,3.8
c-1,0.9-1.5,1.4-1.5,1.4L240,101.5z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M232.5,97.6c0,0,0.1-0.2,0.2-0.7c0.1-0.2,0.1-0.5,0.2-0.8c0.1-0.3,0.2-0.7,0.4-1.1
c0.6-1.7,1.6-4.2,3.4-7.1c1.8-2.9,4.4-6.2,7.8-9.8c1.7-1.8,3.5-3.6,5.5-5.6c1.9-2,4.1-3.9,6.3-6c2.2-2.1,4.6-4.1,7-6.3
c1.3-1,2.5-2.1,3.8-3.2c0.6-0.5,1.3-1.1,2-1.6c0.7-0.5,1.4-1.1,2-1.6c5.4-4.4,11.4-8.6,17.7-12.8c12.6-8.4,26.8-16.2,41.7-22.5
c1.9-0.8,3.7-1.6,5.6-2.3c1.9-0.7,3.8-1.5,5.6-2.2c3.8-1.4,7.5-2.7,11.3-3.9c7.6-2.4,15.1-4.5,22.5-6.1c1.8-0.4,3.7-0.8,5.5-1.2
c1.8-0.4,3.6-0.7,5.4-1c3.6-0.6,7.1-1.2,10.5-1.6c6.9-1,13.4-1.5,19.5-1.9c12.1-0.7,22.2-0.5,29.3-0.1c0.6,0,1.1,0,1.4,0.1
c0.2,0,0.3,0,0.3,0l-0.7,11.5c7.5-3.9,15.3-7.5,23.4-10.8c-6.9-5.4-14.2-10.6-21.9-15.4L447.5-5c0,0-0.1,0-0.3,0
c-0.3,0-0.8,0-1.4-0.1c-7.1-0.4-17.4-0.6-29.6,0.1c-6.1,0.4-12.7,1-19.7,2c-3.5,0.4-7,1.1-10.7,1.7c-1.8,0.3-3.6,0.7-5.5,1.1
c-1.9,0.3-3.7,0.8-5.6,1.2c-7.5,1.6-15.1,3.7-22.8,6.2c-3.8,1.2-7.7,2.6-11.5,4c-1.9,0.7-3.8,1.5-5.7,2.2
c-1.9,0.7-3.8,1.6-5.7,2.4c-15,6.4-29.4,14.3-42.2,22.8c-6.4,4.3-12.4,8.6-17.9,13c-0.7,0.5-1.4,1.1-2.1,1.6
c-0.7,0.6-1.3,1.1-2,1.6c-1.3,1.1-2.6,2.2-3.9,3.2c-2.5,2.2-4.9,4.3-7.1,6.4c-2.2,2.1-4.4,4.1-6.4,6.1c-2,2-3.9,3.8-5.6,5.7
c-3.4,3.6-6.2,7.1-8.2,10.3c-2,3.1-3.1,5.9-3.7,7.8c-0.3,1-0.5,1.7-0.6,2.2c-0.1,0.5-0.2,0.8-0.2,0.8L232.5,97.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M412.6,148.8c0,0,1.7,0.6,4.7,1.6c3,1,7.3,2.5,12.4,4.3c10.2,3.7,23.7,9,36.1,16.3
c6.2,3.6,12,7.8,17.1,12.3c5.1,4.4,9.3,9.1,12.5,13.3c3.3,4.2,5.5,8.1,7,10.8c0.4,0.7,0.6,1.1,0.6,1.1l-10.3,5.2
c6.8,3.5,13.1,8.7,18.5,15.7c3.4-8,5.2-17.6,5-27.6l-10.3,5.2c0,0-0.2-0.4-0.6-1.1c-1.5-2.9-3.9-6.9-7.2-11.3
c-3.4-4.4-7.7-9.2-12.9-13.8c-5.2-4.6-11.2-8.9-17.5-12.6c-12.7-7.5-26.4-12.8-36.6-16.6c-5.1-1.9-9.4-3.3-12.5-4.4
c-3-1-4.7-1.6-4.7-1.6L412.6,148.8z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M222.1,173.6c0,0,0.5,1,1.4,3c0.4,1,1,2.2,1.7,3.6c0.3,0.7,0.7,1.5,1.1,2.3c0.4,0.8,0.9,1.6,1.4,2.5
c1,1.7,2,3.7,3.2,5.8c1.3,2,2.7,4.2,4.2,6.6c0.7,1.2,1.6,2.3,2.4,3.5c0.9,1.2,1.8,2.4,2.7,3.7c0.5,0.6,0.9,1.3,1.4,1.9
c0.5,0.6,1,1.2,1.5,1.9c1,1.3,2.1,2.6,3.2,3.9c8.8,10.5,20.7,21.3,34.7,30.9c1.7,1.3,3.6,2.4,5.4,3.5c1.8,1.1,3.6,2.4,5.6,3.4
c1.9,1.1,3.8,2.2,5.8,3.3l1.4,0.8l1.5,0.8c1,0.5,2,1,3,1.5c3.9,2.1,8.1,3.9,12.2,5.8c2.1,0.9,4.2,1.7,6.3,2.5l3.2,1.3l3.2,1.1
c17.1,6.1,35,9.9,51.8,12.1c16.9,2.1,32.7,2.7,46.3,2.6c13.6-0.1,24.9-1,32.8-1.6c1.1-0.1,1.7-0.1,1.7-0.1l1,11.5
c7.4-5,14.5-10.3,21.5-15.5c-8.1-3.4-16-6.9-23.8-10.7l1,11.5c0,0-0.6,0.1-1.7,0.1c-7.8,0.6-19.1,1.5-32.5,1.6
c-13.5,0.1-29.2-0.5-45.9-2.6c-16.7-2.2-34.3-5.9-51.2-12l-3.2-1.1l-3.1-1.2c-2.1-0.8-4.2-1.6-6.2-2.5c-4.1-1.9-8.1-3.6-12-5.7
c-1-0.5-2-1-2.9-1.5l-1.5-0.7l-1.4-0.8c-1.9-1.1-3.8-2.2-5.7-3.2c-1.9-1.1-3.6-2.3-5.5-3.4c-1.8-1.1-3.6-2.2-5.3-3.5
c-13.8-9.5-25.5-20.1-34.1-30.4c-1.1-1.3-2.1-2.6-3.1-3.8c-0.5-0.6-1-1.2-1.5-1.8c-0.5-0.6-0.9-1.3-1.4-1.9
c-0.9-1.2-1.8-2.4-2.6-3.6c-0.8-1.2-1.7-2.3-2.4-3.5c-1.5-2.3-2.8-4.4-4.1-6.4c-1.1-2.1-2.2-4-3.1-5.7c-0.5-0.9-0.9-1.7-1.3-2.4
c-0.4-0.8-0.7-1.5-1-2.2c-0.6-1.4-1.2-2.5-1.6-3.5c-0.9-1.9-1.3-2.9-1.3-2.9L222.1,173.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D2D2D4" d="M392.9,171.7c0,0,0.4,0.5,1,1.4c0.6,0.9,1.5,2.2,2.3,3.9c1.7,3.4,3.1,8.3,4,13.5
c0.9,5.1,1.6,10.4,2.3,14.3c0.5,3.5,0.9,5.8,0.9,5.8l-11.4,1.8l16.5,20.5l9.5-24.5l-11.4,1.8c0,0-0.4-2.3-0.9-5.8
c-0.6-3.9-1.3-9.1-2.3-14.4c-0.9-5.3-2.5-10.5-4.3-14.3c-0.9-1.9-1.9-3.3-2.5-4.3c-0.7-1-1.1-1.5-1.1-1.5L392.9,171.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M354.8,98.9c0,0-0.9-1.2-2.5-3.3c-1.6-2.1-3.9-5.1-6.8-8.6c-5.7-7-13.7-16.1-22.4-24.6l-1.6-1.6
l-1.7-1.5c-1.1-1-2.2-2.1-3.3-3.1c-2.2-2-4.4-3.9-6.6-5.8c-2.2-1.8-4.3-3.6-6.4-5.2c-2.1-1.6-4-3.1-5.9-4.4
c-1.9-1.3-3.6-2.5-5.1-3.5c-1.6-1-2.9-1.8-4.1-2.6c-0.7-0.4-1-0.6-1-0.6l6-9.9c-9.4-0.5-18.6-0.2-27.2,1.2
c5.5,6.8,9.9,14,13.6,21.3l6-9.9c0,0,0.4,0.2,1,0.6c1.1,0.7,2.4,1.5,4,2.5c1.5,1,3.2,2.2,5,3.5c1.8,1.3,3.7,2.8,5.8,4.3
c2,1.6,4.1,3.3,6.3,5.1c2.1,1.8,4.3,3.7,6.5,5.7c1.1,1,2.2,2,3.2,3l1.6,1.5l1.6,1.6c8.5,8.4,16.5,17.4,22.1,24.4
c2.8,3.5,5.2,6.4,6.7,8.5c1.6,2.1,2.5,3.3,2.5,3.3L354.8,98.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M358,167.6c0,0-1,1.5-2.6,4.1c-0.8,1.3-1.8,2.9-3.1,4.6c-0.6,0.9-1.3,1.8-2,2.8c-0.7,1-1.4,2-2.3,3
c-0.8,1-1.7,2.1-2.6,3.2c-0.9,1.1-1.8,2.3-2.8,3.4c-1,1.1-2.1,2.3-3.1,3.4c-0.5,0.6-1.1,1.2-1.6,1.8c-0.6,0.6-1.2,1.1-1.7,1.7
c-1.2,1.2-2.4,2.3-3.6,3.5c-1.2,1.2-2.5,2.3-3.8,3.4c-2.5,2.4-5.3,4.5-8.1,6.7c-11.1,8.7-23.5,15.5-33.1,19.8
c-1.2,0.5-2.4,1.1-3.5,1.5c-1.1,0.4-2.2,0.8-3.2,1.2c-2,0.8-3.7,1.5-5.2,2c-0.7,0.2-1.2,0.4-1.2,0.4l-3.7-10.9
c-1.3,1.6-2.6,3.2-4,4.8c-1.4,1.6-2.8,3-4.3,4.6l-2.2,2.3c-0.8,0.7-1.5,1.5-2.3,2.2c-1.6,1.5-3.2,2.9-4.9,4.4
c2.1,0.7,4.2,1.4,6.3,2c1.1,0.3,2.1,0.7,3.2,1l3.3,0.8c2.2,0.5,4.4,1.1,6.7,1.6c2.2,0.4,4.5,0.8,6.8,1.2l-3.7-10.9
c0,0,0.4-0.1,1.2-0.4c1.5-0.5,3.3-1.2,5.3-2c1-0.4,2.1-0.8,3.2-1.3c1.1-0.5,2.3-1,3.5-1.6c9.8-4.3,22.5-11.3,33.8-20.2
c2.8-2.3,5.6-4.4,8.2-6.9c1.3-1.2,2.6-2.3,3.9-3.5c1.2-1.2,2.4-2.4,3.6-3.6c0.6-0.6,1.2-1.2,1.8-1.8c0.6-0.6,1.1-1.2,1.7-1.8
c1.1-1.2,2.2-2.4,3.2-3.5c1.1-1.1,2-2.3,2.9-3.4c0.9-1.1,1.8-2.2,2.7-3.3c0.9-1,1.6-2.1,2.3-3.1c0.7-1,1.4-1.9,2.1-2.8
c1.3-1.7,2.3-3.4,3.2-4.7c1.7-2.6,2.7-4.1,2.7-4.1L358,167.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M214.2,172.7c0,0-0.1,0.4-0.2,1.2c-0.1,0.7-0.3,1.8-0.4,3.1c-0.3,2.5-0.6,6-0.7,9.4
c-0.1,3.4,0,6.8,0.1,9.4c0.1,1.3,0.1,2.3,0.2,3.1c0.1,0.6,0.1,1,0.1,1l-11.5,1c5.1,8.1,11.1,15.2,17.5,21.1
c1.9-8.6,4.9-16.5,8.7-23.5l-11.5,1c0,0,0-0.4-0.1-1c-0.1-0.7-0.1-1.8-0.2-3c-0.1-2.5-0.2-5.8-0.1-9.1c0.1-3.3,0.4-6.6,0.7-9.1
c0.1-1.2,0.3-2.3,0.4-3c0.1-0.7,0.2-1.1,0.2-1.1L214.2,172.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M350.5,164.6c0,0-2.5,1.5-6.9,4.1c-1.1,0.6-2.3,1.4-3.7,2.1c-1.3,0.7-2.8,1.5-4.4,2.3
c-3.2,1.6-6.7,3.6-10.7,5.4c-15.8,7.7-37.6,16.3-60.1,22.7c-11.2,3.3-22.6,6.1-33.3,8.7c-10.7,2.4-20.8,4.6-29.4,6.2
c-8.6,1.7-15.9,3-20.9,4c-0.9,0.2-1.4,0.3-1.4,0.3l-2.1-11.4c-6.6,5.7-13.4,11.3-20.1,17c8.2,3,16.5,6,24.8,8.9l-2.1-11.4
c0,0,0.5-0.1,1.4-0.3c5.1-0.9,12.3-2.2,20.9-4c8.7-1.7,18.7-3.8,29.5-6.3c10.7-2.5,22.2-5.3,33.5-8.7
c22.7-6.4,44.7-15.1,60.6-22.9c4-1.8,7.6-3.8,10.8-5.5c1.6-0.8,3.1-1.6,4.5-2.4c1.3-0.8,2.6-1.5,3.7-2.2c4.5-2.6,7-4.1,7-4.1
L350.5,164.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M179.6,153.1c0,0-0.5,0.6-1.4,1.5c-0.4,0.5-1,1.1-1.6,1.7c-0.6,0.7-1.3,1.5-2,2.3
c-3,3.4-6.7,8.2-10.1,13.2c-3.4,5-6.4,10.2-8.5,14.2c-0.5,1-1,1.9-1.4,2.8c-0.4,0.8-0.7,1.6-1,2.2c-0.3,0.6-0.5,1-0.5,1
l-10.5-4.8c0.5,9.4,2,18.4,4.1,26.9c6.3-6.2,12.9-11.5,19.8-15.9l-10.5-4.8c0,0,0.2-0.3,0.4-0.9c0.3-0.6,0.6-1.3,1-2.1
c0.4-0.8,0.9-1.7,1.4-2.7c2-3.9,5-9.1,8.3-13.9c3.3-4.9,7-9.5,9.8-12.9c0.7-0.8,1.4-1.6,2-2.3c0.6-0.7,1.1-1.2,1.6-1.7
c0.9-0.9,1.4-1.5,1.4-1.5L179.6,153.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M176.2,129.9c0,0-0.5-0.1-1.3-0.2c-0.4-0.1-0.9-0.1-1.5-0.2c-0.6-0.1-1.3-0.1-2-0.2
c-1.5-0.1-3.1-0.2-5-0.2c-1.8,0-3.7,0-5.6,0.1c-3.8,0.2-7.6,0.6-10.5,0.9c-1.4,0.2-2.6,0.3-3.4,0.5c-0.6,0.1-1,0.2-1,0.2
l-1.7-11.4c-3.7,2.8-7.3,5.7-10.7,8.7c-0.9,0.8-1.7,1.5-2.5,2.3c-0.8,0.8-1.6,1.6-2.4,2.4c-1.6,1.6-3.2,3.3-4.4,5.2
c1.1,0.1,2.1,0.2,3.2,0.4c1,0.2,2.1,0.4,3.1,0.7c1,0.2,2,0.6,3,0.9c1,0.3,2,0.6,3,1c4,1.3,7.9,2.8,11.7,4.5l-1.7-11.4
c0,0,0.4-0.1,1-0.2c0.8-0.1,2-0.3,3.4-0.4c2.8-0.3,6.5-0.7,10.3-0.9c1.9-0.1,3.7-0.1,5.5-0.1c1.7,0.1,3.4,0.1,4.7,0.2
c0.7,0.1,1.3,0.1,1.9,0.2c0.5,0.1,1,0.1,1.4,0.2c0.8,0.1,1.2,0.2,1.2,0.2L176.2,129.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M350.9,164c0,0-3.3,0.9-9.2,2.5c-5.8,1.6-14.2,3.8-24.3,6.2c-10.1,2.4-21.9,4.9-34.7,6.9
c-12.8,2-26.6,3.6-40.3,3.8c-13.8,0-27.6-1.1-40.4-2.7c-12.9-1.6-24.8-3.7-34.9-5.9c-2.5-0.5-4.9-1.1-7.2-1.6
c-2.3-0.5-4.5-1.1-6.5-1.6c-2-0.5-3.9-1-5.7-1.5c-1.7-0.5-3.3-1-4.8-1.4c-0.9-0.3-1.5-0.4-1.5-0.4l3.5-11
c-8.1,2-16.4,3.7-25.1,4.2c4.9,7.3,10.9,14.2,17.2,20.9l3.5-11c0,0,0.5,0.2,1.5,0.4c1.5,0.4,3.1,0.9,4.8,1.4
c1.8,0.5,3.7,1,5.7,1.5c2.1,0.5,4.2,1.1,6.6,1.6c2.3,0.5,4.7,1.1,7.3,1.7c10.2,2.2,22.2,4.3,35.2,5.9c13,1.6,26.8,2.7,40.8,2.7
c14-0.2,27.9-1.8,40.8-3.8c12.9-2,24.8-4.6,35-7c10.1-2.4,18.5-4.6,24.4-6.2c5.9-1.6,9.2-2.5,9.2-2.5L350.9,164z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M188.3,105.7c0,0-2-1.8-5-4.3c-3-2.5-7.1-5.8-11.1-9.1c-4-3.3-8-6.7-10.9-9.3c-1.5-1.3-2.6-2.4-3.5-3.2
c-0.5-0.4-0.8-0.7-0.8-0.7l8-8.4c-4-0.8-8.1-1.8-12-2.9c-2-0.6-3.9-1.3-5.8-2c-1.9-0.8-3.8-1.7-5.5-3.1
c-0.3,2.2-0.2,4.5,0.1,6.8c0.3,2.3,0.7,4.6,1.2,6.9c1.1,4.6,2.4,9,3.9,13.4l8-8.4c0,0,0.3,0.3,0.8,0.7c0.8,0.8,2.1,1.9,3.5,3.2
c2.9,2.6,6.9,6.1,11,9.4c4.1,3.3,8.1,6.6,11.1,9.1c3,2.5,4.9,4.2,4.9,4.2L188.3,105.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M352.2,101.2c0,0-2.6-1.6-7.1-4.3c-4.5-2.7-11-6.6-18.9-10.9c-8-4.3-17.4-9.1-28-13.2
c-2.6-1.1-5.4-2-8.1-3c-2.8-0.8-5.6-1.8-8.5-2.5c-5.8-1.6-11.8-2.7-17.8-3.5l-4.5-0.5c-1.5-0.1-3-0.3-4.5-0.4
c-3-0.3-5.9-0.6-8.9-0.9c-5.9-0.6-11.7-1.2-17.3-1.8c-11.2-1.2-21.7-2.4-30.6-3.4c-13.9-1.5-23.1-2.5-23.1-2.5l1.2-11.5
c-8,3.5-16.1,7.1-24.1,10.8c7.2,5,14.2,10.2,21.3,15.3l1.2-11.5c0,0,9.2,1,23.1,2.5c9,1,19.4,2.2,30.6,3.4
c5.6,0.6,11.4,1.2,17.3,1.8c2.9,0.3,5.9,0.6,8.9,0.9c1.5,0.1,3,0.3,4.5,0.4l4.4,0.5c5.9,0.8,11.7,1.9,17.4,3.4
c2.8,0.7,5.6,1.7,8.3,2.5c2.7,1,5.4,1.8,8,2.9c10.4,4,19.8,8.7,27.7,13c7.9,4.3,14.3,8.1,18.8,10.8c4.5,2.7,7.1,4.3,7.1,4.3
L352.2,101.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M383.8,177.6c0,0,0.2,0.8,0.5,2.1c0.1,0.7,0.3,1.5,0.5,2.4c0.2,0.9,0.4,2,0.6,3.1
c0.8,4.6,1.6,10.8,1.8,17.1c0.3,6.2,0,12.5-0.5,17.1c-0.2,2.3-0.5,4.3-0.7,5.6c-0.1,0.7-0.1,1-0.1,1l-11.4-1.8
c3.3,7.4,5.9,15.5,7.5,24.1c6.6-5.7,12.8-12.5,18.5-20.1l-11.4-1.8c0,0,0.1-0.4,0.1-1.1c0.2-1.4,0.5-3.4,0.7-5.8
c0.5-4.8,0.8-11.2,0.5-17.6c-0.2-6.4-1-12.8-1.9-17.5c-0.2-1.2-0.4-2.3-0.6-3.2c-0.2-1-0.4-1.8-0.5-2.5
c-0.3-1.4-0.5-2.1-0.5-2.1L383.8,177.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M231.6,168.6c0,0,1.3,1.5,3.7,4c1.2,1.2,2.6,2.7,4.2,4.4c1.5,1.8,3.3,3.8,5.2,6
c7.6,8.8,17.8,20.5,28.8,31.4c5.5,5.5,11.2,10.8,16.8,15.5c2.8,2.4,5.6,4.6,8.2,6.6c2.7,2,5.2,3.9,7.6,5.6
c4.8,3.3,8.9,6,11.7,7.8c0.7,0.4,1.1,0.7,1.1,0.7l-6.2,9.8c8.9,0.5,17.7,0.7,26.5,0.9c-4.2-7.7-8.5-15.4-12.3-23l-6.2,9.8
c0,0-0.4-0.2-1.1-0.7c-2.8-1.8-6.9-4.5-11.6-7.8c-2.4-1.7-4.9-3.5-7.5-5.5c-2.6-2-5.3-4.2-8.1-6.5c-5.5-4.6-11.2-9.9-16.6-15.3
c-10.9-10.9-21.1-22.5-28.7-31.3c-1.9-2.2-3.7-4.2-5.2-6c-1.6-1.8-3-3.3-4.2-4.5c-2.3-2.4-3.5-3.9-3.5-3.9L231.6,168.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M221.5,93.1c-0.3-3.7-0.3-7.6-0.2-11.4c0.1-3.9,0.3-7.7,0.6-11.6l0.1-0.9l11.5,0.9c0,0-2.9-5.7-5.5-11.6
c-1.3-2.9-2.6-5.9-3.5-8.2c-0.4-1.1-0.8-2.1-1-2.8c-0.2-0.7-0.4-1.1-0.4-1.1s-0.3,0.3-0.7,0.8c-0.5,0.5-1.2,1.3-1.9,2.3
c-1.6,2-3.6,4.6-5.6,7.4c-3.9,5.4-7.6,11.1-7.6,11.1l11.5,0.9l-0.1,0.9c-0.3,3.9-0.5,7.8-0.6,11.7c-0.1,3.9-0.1,7.8,0.2,11.9
L221.5,93.1z"/>
</g>
</g>
</g>
</g>
<g id="Layer_1">
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="236.6" cy="10.9" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="443.2" cy="259.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="471.9" cy="46.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="359.6" cy="3.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="511.6" cy="22.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="450.6" cy="213.7" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="132.1" cy="31.5" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="92.5" cy="146.5" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="139.1" cy="249.8" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="227.4" cy="259.6" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="220" cy="135.7" r="39.1"/>
<circle fill="#3B4D81" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="216.1" cy="133.2" r="39.1"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="378.8" cy="137.9" r="38.8"/>
<circle fill="#FFD105" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="375" cy="135.5" r="38.8"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="378.9" cy="285.1" r="37"/>
<circle fill="#FFF0D6" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="369.3" cy="284.7" r="37"/>
<g>
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M391.7,257.7"/>
</g>
<g>
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M379.9,126"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M385.8,259.3"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M382.5,262.5"/>
</g>
<g>
<g>
<g>
<path fill="#808082" d="M247.9,110.9c0,0,0.3-0.1,0.7-0.4c0.5-0.3,1.2-0.7,2.1-1.2c1.9-1,4.6-2.2,8-3.3
c6.8-2.4,16.5-4.1,26.2-4.4c9.7-0.3,19.5,0.8,26.6,2.3c3.6,0.7,6.5,1.6,8.5,2.2c0.7,0.2,1.1,0.3,1.1,0.3l-3.6,11
c7.5-2.1,15.6-3.4,24.3-2.2c-1.6-4.1-3.9-8.1-6.7-11.9c-2.8-3.8-5.9-7.5-9.4-10.9l-3.6,11c0,0-0.4-0.1-1.1-0.4
c-2.1-0.6-5.1-1.5-8.8-2.3C305,99.2,295,98,285,98.4c-10,0.3-20,2.1-27.1,4.6c-3.6,1.2-6.5,2.5-8.5,3.5c-1,0.5-1.7,1-2.3,1.2
c-0.5,0.3-0.8,0.4-0.8,0.4L247.9,110.9z"/>
</g>
</g>
</g>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="528.1" cy="146.3" r="37"/>
<circle fill="#E9E9F5" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="518.5" cy="146" r="37"/>
<g>
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M481.5,185.7"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M475.5,187.2"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M472.2,190.4"/>
</g>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="433.6" cy="259.1" r="37"/>
<circle fill="#EBF5E6" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="462.2" cy="46.1" r="37"/>
<circle fill="#FDE9F2" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="502" cy="22.1" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="531.5" cy="269.2" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="521.8" cy="268.9" r="37"/>
<circle fill="#FAF3F8" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="441" cy="213.4" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="122.5" cy="31.1" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="231" cy="7.1" r="37"/>
<circle fill="#E9E9F5" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="82.8" cy="146.1" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="129.5" cy="249.5" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="217.7" cy="259.3" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="350" cy="3.1" r="37"/>
<g>
<g>
<g>
<path fill="#808082" d="M343.1,156.2c0,0-0.3,0.1-0.7,0.4c-0.5,0.3-1.2,0.7-2.1,1.2c-1.9,1-4.6,2.2-8,3.3
c-6.8,2.4-16.5,4.1-26.2,4.4c-9.7,0.3-19.5-0.8-26.6-2.3c-3.6-0.7-6.5-1.6-8.5-2.2c-0.7-0.2-1.1-0.3-1.1-0.3l3.6-11
c-7.5,2.1-15.6,3.4-24.3,2.2c1.6,4.1,3.9,8.1,6.7,11.9c2.8,3.8,5.9,7.5,9.4,10.9l3.6-11c0,0,0.4,0.1,1.1,0.4
c2.1,0.6,5.1,1.5,8.8,2.3c7.3,1.6,17.3,2.7,27.4,2.4c10-0.3,20-2.1,27.1-4.6c3.6-1.2,6.5-2.5,8.5-3.5c1-0.5,1.7-1,2.3-1.2
c0.5-0.3,0.8-0.4,0.8-0.4L343.1,156.2z"/>
</g>
</g>
</g>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 -44.1 595.3 380.5" enable-background="new 0 -44.1 595.3 380.5" xml:space="preserve">
<g id="Layer_2">
<g>
<g>
<g>
<path fill="#D6E379" d="M405.1,164.3l0.7,1l0.5,0.7l-9.5,6.6c6,2.1,12.1,5.7,17.5,10.6l0.1,0.2c0.8,0.3,1.7,1.2,2,2.4
c0.9-0.9,1.5-2.3,1.4-4l0.1,0.2c1.6-7.5,1.9-15.8,0.5-24.4l-9.5,6.5l-0.5-0.8l-0.8-1.1L405.1,164.3z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M237.5,165.8c0,0,0.4,0.5,1,1.5c0.3,0.5,0.7,1.1,1.2,1.8c0.5,0.7,1.1,1.5,1.8,2.4c2.8,3.5,7.1,8.2,13,13
c3,2.3,6.3,4.8,10,7c3.7,2.3,7.7,4.5,12.1,6.4c4.3,2,8.9,3.7,13.6,5.2c1.2,0.3,2.4,0.7,3.6,1c1.2,0.3,2.4,0.6,3.6,0.9
c1.2,0.3,2.4,0.6,3.7,0.9l3.7,0.8c9.8,2,19.8,3.3,29.2,3.8c9.4,0.6,18.2,0.4,25.7-0.1c7.5-0.5,13.8-1.3,18.1-2
c0.9-0.1,1.4-0.2,1.4-0.2l1.9,11.4c7.3-5.6,14-11.6,20.1-17.9c-8.5-2.2-16.6-4.9-24.4-8.1l1.9,11.4c0,0-0.5,0.1-1.3,0.2
c-4.3,0.7-10.4,1.5-17.8,2c-7.4,0.5-16.1,0.7-25.3,0.1c-9.3-0.5-19.1-1.8-28.8-3.8l-3.6-0.8c-1.2-0.3-2.4-0.6-3.6-0.9
c-1.2-0.3-2.4-0.6-3.6-0.9c-1.2-0.3-2.3-0.7-3.5-1c-4.6-1.4-9.1-3.2-13.3-5.1c-4.2-1.9-8.1-4-11.7-6.2c-3.6-2.2-6.8-4.5-9.7-6.8
c-5.7-4.6-9.9-9.1-12.5-12.5c-0.6-0.8-1.2-1.6-1.7-2.3c-0.5-0.7-0.9-1.3-1.2-1.7c-0.6-0.9-1-1.4-1-1.4L237.5,165.8z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M415.8,133.2c0,0,0.8-0.1,2.2-0.2c1.4-0.1,3.4-0.3,5.7-0.4c4.7-0.3,11.1-0.5,17.4-0.4
c6.3,0.1,12.7,0.6,17.4,1.1c2.4,0.2,4.3,0.5,5.7,0.7c0.7,0.1,1,0.1,1,0.1l-1.6,11.5c7.6-3.4,15.7-6.3,24.1-8.8
c-6.3-6.1-13.2-11.9-20.6-17.3l-1.6,11.5c0,0-0.4,0-1.1-0.1c-1.4-0.2-3.4-0.4-5.8-0.7c-4.8-0.5-11.2-1-17.6-1.1
c-6.4-0.1-12.9,0.1-17.7,0.4c-2.4,0.2-4.4,0.3-5.8,0.4c-1.4,0.1-2.2,0.2-2.2,0.2L415.8,133.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M244.9,103.1c0,0,3.6-0.9,9.9-2.6c3.2-0.8,7-1.7,11.4-2.8c4.4-1,9.4-2.3,14.8-3.4
c10.9-2.4,23.6-4.9,37.4-6.5c13.8-1.6,28.6-2.5,43.4-1.8c14.8,0.5,29.5,2.3,43.3,4.5c6.9,1.1,13.5,2.4,19.7,3.7
c6.2,1.4,12,3,17.3,4.6c10.6,3.3,19,7.1,24.6,10.1c0.5,0.3,0.9,0.5,1.2,0.6c0.1,0.1,0.2,0.1,0.2,0.1l-5.5,10.2
c8-0.6,16.4-0.3,25,1.3c-2.9-8.3-7.2-16.5-12.5-24.4l-5.5,10.2c0,0-0.1,0-0.2-0.1c-0.3-0.1-0.7-0.4-1.2-0.6
c-5.8-3.1-14.4-6.9-25.2-10.3c-5.4-1.7-11.3-3.3-17.5-4.7c-6.3-1.4-12.9-2.7-19.8-3.8c-13.8-2.2-28.7-4-43.6-4.5
c-15-0.6-29.9,0.2-43.9,1.9c-13.9,1.7-26.8,4.2-37.7,6.6c-5.5,1.2-10.4,2.4-14.9,3.4c-4.4,1.1-8.2,2.1-11.4,2.9
c-6.3,1.6-9.9,2.6-9.9,2.6L244.9,103.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M380.9,93.6c0,0,0.1-0.5,0.3-1.5c0.2-1,0.5-2.3,0.7-4c0.5-3.3,1.1-7.8,1.3-12.2
c0.2-4.5,0.1-8.9-0.1-12.3c-0.1-1.7-0.2-3.1-0.3-4c-0.1-0.7-0.1-1-0.1-1l11.5-1.2c-5.3-8-11.4-15-17.9-20.8
c-1.8,8.6-4.6,16.5-8.3,23.6l11.5-1.2c0,0,0,0.4,0.1,1c0.1,0.9,0.2,2.3,0.3,3.9c0.2,3.3,0.3,7.6,0.1,11.9
c-0.2,4.3-0.7,8.7-1.3,11.9c-0.2,1.6-0.5,2.9-0.7,3.9c-0.2,0.9-0.3,1.5-0.3,1.5L380.9,93.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M237.5,98c0,0,0.8-1.1,2.3-3c1.4-1.9,3.6-4.6,6.3-7.7c5.3-6.3,13-14.2,21.3-21.3
c8.3-7.2,17.3-13.5,24.3-17.9c3.5-2.1,6.5-3.9,8.6-5c0.6-0.4,1-0.6,1-0.6l5.6,10.1c4.1-7.2,8.8-14.4,14.2-21.3
c-8.7-1.2-17.7-1.8-26.9-1.7l5.6,10.1c0,0-0.4,0.2-1,0.6c-2.2,1.1-5.1,2.9-8.7,5.1c-7.1,4.4-16.2,10.9-24.6,18.2
c-8.5,7.2-16.2,15.3-21.7,21.6c-2.7,3.2-4.9,5.9-6.4,7.8c-1.5,1.9-2.3,3-2.3,3L237.5,98z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M410.5,121.1c0,0,0.3-0.4,0.8-1.1c0.5-0.7,1.2-1.7,2-2.9c1.6-2.4,3.7-5.6,5.7-8.8c2-3.3,3.9-6.6,5.2-9.1
c1.3-2.4,2.1-4,2.1-4l10.3,5.3c-0.2-9.2-1-18.1-2.4-26.8c-6.8,5.5-13.9,10.4-21,14.8l10.3,5.3c0,0-0.8,1.6-2.1,3.9
c-1.3,2.5-3.2,5.8-5.2,9c-2,3.2-4,6.4-5.6,8.7c-0.8,1.2-1.5,2.1-1.9,2.8c-0.5,0.7-0.7,1.1-0.7,1.1L410.5,121.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M413.4,136c0,0,1.4-0.5,3.9-1.5c2.5-0.9,6-2.5,10.1-4.3c8.3-3.8,18.9-9.8,28.7-16.9
c2.5-1.7,4.8-3.7,7.2-5.5c2.3-1.9,4.5-3.8,6.7-5.6c2.1-1.9,4.2-3.7,6-5.6c1.8-1.9,3.6-3.5,5.2-5.2c1.5-1.7,3-3.2,4.2-4.6
c1.2-1.4,2.2-2.6,3.1-3.6c0.5-0.6,0.8-0.9,0.8-0.9l8.9,7.4c1.8-9.1,2.8-18.1,3.1-26.8c-7.8,4.1-15.6,7.5-23.5,10.1l8.9,7.4
c0,0-0.3,0.3-0.8,0.9c-0.8,1-1.9,2.2-3,3.6c-1.2,1.3-2.6,2.8-4.1,4.5c-1.5,1.7-3.3,3.3-5.1,5.1c-1.8,1.8-3.9,3.6-5.9,5.5
c-2.1,1.8-4.3,3.7-6.6,5.5c-2.3,1.8-4.6,3.7-7.1,5.4c-9.6,7-20.1,12.9-28.2,16.6c-4.1,1.8-7.5,3.3-9.9,4.2
c-2.4,0.9-3.8,1.5-3.8,1.5L413.4,136z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M240,101.5c0,0,0.5-0.5,1.4-1.4c0.9-0.9,2.3-2.1,4.1-3.7c3.6-3.1,9.1-7.2,16.2-11.3
c14.2-8.3,35-16,56.2-21.9c21.2-5.9,43.1-9.6,59.5-11.1c2.1-0.2,4-0.4,5.9-0.5c1.9-0.1,3.7-0.3,5.3-0.4c3.4-0.2,6.3-0.4,8.7-0.4
c0.9,0,1.4,0,1.4,0l0.4,11.6c7.1-4.7,14.6-9,22.3-13.2c-7.5-4.5-15.2-9-23.2-13.1l0.4,11.6c0,0-0.5,0-1.4,0
c-2.4,0.1-5.4,0.3-8.8,0.5c-1.7,0.1-3.5,0.3-5.4,0.4c-1.9,0.1-3.9,0.3-6,0.5c-16.6,1.5-38.6,5.2-60,11.2
c-10.7,3-21.3,6.5-31,10.2c-9.7,3.7-18.6,7.8-25.9,12.1c-7.3,4.2-12.9,8.4-16.7,11.6c-1.9,1.6-3.3,2.9-4.2,3.8
c-1,0.9-1.5,1.4-1.5,1.4L240,101.5z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M232.5,97.6c0,0,0.1-0.2,0.2-0.7c0.1-0.2,0.1-0.5,0.2-0.8c0.1-0.3,0.2-0.7,0.4-1.1
c0.6-1.7,1.6-4.2,3.4-7.1c1.8-2.9,4.4-6.2,7.8-9.8c1.7-1.8,3.5-3.6,5.5-5.6c1.9-2,4.1-3.9,6.3-6c2.2-2.1,4.6-4.1,7-6.3
c1.3-1,2.5-2.1,3.8-3.2c0.6-0.5,1.3-1.1,2-1.6c0.7-0.5,1.4-1.1,2-1.6c5.4-4.4,11.4-8.6,17.7-12.8c12.6-8.4,26.8-16.2,41.7-22.5
c1.9-0.8,3.7-1.6,5.6-2.3c1.9-0.7,3.8-1.5,5.6-2.2c3.8-1.4,7.5-2.7,11.3-3.9c7.6-2.4,15.1-4.5,22.5-6.1c1.8-0.4,3.7-0.8,5.5-1.2
c1.8-0.4,3.6-0.7,5.4-1c3.6-0.6,7.1-1.2,10.5-1.6c6.9-1,13.4-1.5,19.5-1.9c12.1-0.7,22.2-0.5,29.3-0.1c0.6,0,1.1,0,1.4,0.1
c0.2,0,0.3,0,0.3,0l-0.7,11.5c7.5-3.9,15.3-7.5,23.4-10.8c-6.9-5.4-14.2-10.6-21.9-15.4L447.5-5c0,0-0.1,0-0.3,0
c-0.3,0-0.8,0-1.4-0.1c-7.1-0.4-17.4-0.6-29.6,0.1c-6.1,0.4-12.7,1-19.7,2c-3.5,0.4-7,1.1-10.7,1.7c-1.8,0.3-3.6,0.7-5.5,1.1
c-1.9,0.3-3.7,0.8-5.6,1.2c-7.5,1.6-15.1,3.7-22.8,6.2c-3.8,1.2-7.7,2.6-11.5,4c-1.9,0.7-3.8,1.5-5.7,2.2
c-1.9,0.7-3.8,1.6-5.7,2.4c-15,6.4-29.4,14.3-42.2,22.8c-6.4,4.3-12.4,8.6-17.9,13c-0.7,0.5-1.4,1.1-2.1,1.6
c-0.7,0.6-1.3,1.1-2,1.6c-1.3,1.1-2.6,2.2-3.9,3.2c-2.5,2.2-4.9,4.3-7.1,6.4c-2.2,2.1-4.4,4.1-6.4,6.1c-2,2-3.9,3.8-5.6,5.7
c-3.4,3.6-6.2,7.1-8.2,10.3c-2,3.1-3.1,5.9-3.7,7.8c-0.3,1-0.5,1.7-0.6,2.2c-0.1,0.5-0.2,0.8-0.2,0.8L232.5,97.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M412.6,148.8c0,0,1.7,0.6,4.7,1.6c3,1,7.3,2.5,12.4,4.3c10.2,3.7,23.7,9,36.1,16.3
c6.2,3.6,12,7.8,17.1,12.3c5.1,4.4,9.3,9.1,12.5,13.3c3.3,4.2,5.5,8.1,7,10.8c0.4,0.7,0.6,1.1,0.6,1.1l-10.3,5.2
c6.8,3.5,13.1,8.7,18.5,15.7c3.4-8,5.2-17.6,5-27.6l-10.3,5.2c0,0-0.2-0.4-0.6-1.1c-1.5-2.9-3.9-6.9-7.2-11.3
c-3.4-4.4-7.7-9.2-12.9-13.8c-5.2-4.6-11.2-8.9-17.5-12.6c-12.7-7.5-26.4-12.8-36.6-16.6c-5.1-1.9-9.4-3.3-12.5-4.4
c-3-1-4.7-1.6-4.7-1.6L412.6,148.8z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M222.1,173.6c0,0,0.5,1,1.4,3c0.4,1,1,2.2,1.7,3.6c0.3,0.7,0.7,1.5,1.1,2.3c0.4,0.8,0.9,1.6,1.4,2.5
c1,1.7,2,3.7,3.2,5.8c1.3,2,2.7,4.2,4.2,6.6c0.7,1.2,1.6,2.3,2.4,3.5c0.9,1.2,1.8,2.4,2.7,3.7c0.5,0.6,0.9,1.3,1.4,1.9
c0.5,0.6,1,1.2,1.5,1.9c1,1.3,2.1,2.6,3.2,3.9c8.8,10.5,20.7,21.3,34.7,30.9c1.7,1.3,3.6,2.4,5.4,3.5c1.8,1.1,3.6,2.4,5.6,3.4
c1.9,1.1,3.8,2.2,5.8,3.3l1.4,0.8l1.5,0.8c1,0.5,2,1,3,1.5c3.9,2.1,8.1,3.9,12.2,5.8c2.1,0.9,4.2,1.7,6.3,2.5l3.2,1.3l3.2,1.1
c17.1,6.1,35,9.9,51.8,12.1c16.9,2.1,32.7,2.7,46.3,2.6c13.6-0.1,24.9-1,32.8-1.6c1.1-0.1,1.7-0.1,1.7-0.1l1,11.5
c7.4-5,14.5-10.3,21.5-15.5c-8.1-3.4-16-6.9-23.8-10.7l1,11.5c0,0-0.6,0.1-1.7,0.1c-7.8,0.6-19.1,1.5-32.5,1.6
c-13.5,0.1-29.2-0.5-45.9-2.6c-16.7-2.2-34.3-5.9-51.2-12l-3.2-1.1l-3.1-1.2c-2.1-0.8-4.2-1.6-6.2-2.5c-4.1-1.9-8.1-3.6-12-5.7
c-1-0.5-2-1-2.9-1.5l-1.5-0.7l-1.4-0.8c-1.9-1.1-3.8-2.2-5.7-3.2c-1.9-1.1-3.6-2.3-5.5-3.4c-1.8-1.1-3.6-2.2-5.3-3.5
c-13.8-9.5-25.5-20.1-34.1-30.4c-1.1-1.3-2.1-2.6-3.1-3.8c-0.5-0.6-1-1.2-1.5-1.8c-0.5-0.6-0.9-1.3-1.4-1.9
c-0.9-1.2-1.8-2.4-2.6-3.6c-0.8-1.2-1.7-2.3-2.4-3.5c-1.5-2.3-2.8-4.4-4.1-6.4c-1.1-2.1-2.2-4-3.1-5.7c-0.5-0.9-0.9-1.7-1.3-2.4
c-0.4-0.8-0.7-1.5-1-2.2c-0.6-1.4-1.2-2.5-1.6-3.5c-0.9-1.9-1.3-2.9-1.3-2.9L222.1,173.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D2D2D4" d="M392.9,171.7c0,0,0.4,0.5,1,1.4c0.6,0.9,1.5,2.2,2.3,3.9c1.7,3.4,3.1,8.3,4,13.5
c0.9,5.1,1.6,10.4,2.3,14.3c0.5,3.5,0.9,5.8,0.9,5.8l-11.4,1.8l16.5,20.5l9.5-24.5l-11.4,1.8c0,0-0.4-2.3-0.9-5.8
c-0.6-3.9-1.3-9.1-2.3-14.4c-0.9-5.3-2.5-10.5-4.3-14.3c-0.9-1.9-1.9-3.3-2.5-4.3c-0.7-1-1.1-1.5-1.1-1.5L392.9,171.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M354.8,98.9c0,0-0.9-1.2-2.5-3.3c-1.6-2.1-3.9-5.1-6.8-8.6c-5.7-7-13.7-16.1-22.4-24.6l-1.6-1.6
l-1.7-1.5c-1.1-1-2.2-2.1-3.3-3.1c-2.2-2-4.4-3.9-6.6-5.8c-2.2-1.8-4.3-3.6-6.4-5.2c-2.1-1.6-4-3.1-5.9-4.4
c-1.9-1.3-3.6-2.5-5.1-3.5c-1.6-1-2.9-1.8-4.1-2.6c-0.7-0.4-1-0.6-1-0.6l6-9.9c-9.4-0.5-18.6-0.2-27.2,1.2
c5.5,6.8,9.9,14,13.6,21.3l6-9.9c0,0,0.4,0.2,1,0.6c1.1,0.7,2.4,1.5,4,2.5c1.5,1,3.2,2.2,5,3.5c1.8,1.3,3.7,2.8,5.8,4.3
c2,1.6,4.1,3.3,6.3,5.1c2.1,1.8,4.3,3.7,6.5,5.7c1.1,1,2.2,2,3.2,3l1.6,1.5l1.6,1.6c8.5,8.4,16.5,17.4,22.1,24.4
c2.8,3.5,5.2,6.4,6.7,8.5c1.6,2.1,2.5,3.3,2.5,3.3L354.8,98.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M358,167.6c0,0-1,1.5-2.6,4.1c-0.8,1.3-1.8,2.9-3.1,4.6c-0.6,0.9-1.3,1.8-2,2.8c-0.7,1-1.4,2-2.3,3
c-0.8,1-1.7,2.1-2.6,3.2c-0.9,1.1-1.8,2.3-2.8,3.4c-1,1.1-2.1,2.3-3.1,3.4c-0.5,0.6-1.1,1.2-1.6,1.8c-0.6,0.6-1.2,1.1-1.7,1.7
c-1.2,1.2-2.4,2.3-3.6,3.5c-1.2,1.2-2.5,2.3-3.8,3.4c-2.5,2.4-5.3,4.5-8.1,6.7c-11.1,8.7-23.5,15.5-33.1,19.8
c-1.2,0.5-2.4,1.1-3.5,1.5c-1.1,0.4-2.2,0.8-3.2,1.2c-2,0.8-3.7,1.5-5.2,2c-0.7,0.2-1.2,0.4-1.2,0.4l-3.7-10.9
c-1.3,1.6-2.6,3.2-4,4.8c-1.4,1.6-2.8,3-4.3,4.6l-2.2,2.3c-0.8,0.7-1.5,1.5-2.3,2.2c-1.6,1.5-3.2,2.9-4.9,4.4
c2.1,0.7,4.2,1.4,6.3,2c1.1,0.3,2.1,0.7,3.2,1l3.3,0.8c2.2,0.5,4.4,1.1,6.7,1.6c2.2,0.4,4.5,0.8,6.8,1.2l-3.7-10.9
c0,0,0.4-0.1,1.2-0.4c1.5-0.5,3.3-1.2,5.3-2c1-0.4,2.1-0.8,3.2-1.3c1.1-0.5,2.3-1,3.5-1.6c9.8-4.3,22.5-11.3,33.8-20.2
c2.8-2.3,5.6-4.4,8.2-6.9c1.3-1.2,2.6-2.3,3.9-3.5c1.2-1.2,2.4-2.4,3.6-3.6c0.6-0.6,1.2-1.2,1.8-1.8c0.6-0.6,1.1-1.2,1.7-1.8
c1.1-1.2,2.2-2.4,3.2-3.5c1.1-1.1,2-2.3,2.9-3.4c0.9-1.1,1.8-2.2,2.7-3.3c0.9-1,1.6-2.1,2.3-3.1c0.7-1,1.4-1.9,2.1-2.8
c1.3-1.7,2.3-3.4,3.2-4.7c1.7-2.6,2.7-4.1,2.7-4.1L358,167.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M214.2,172.7c0,0-0.1,0.4-0.2,1.2c-0.1,0.7-0.3,1.8-0.4,3.1c-0.3,2.5-0.6,6-0.7,9.4
c-0.1,3.4,0,6.8,0.1,9.4c0.1,1.3,0.1,2.3,0.2,3.1c0.1,0.6,0.1,1,0.1,1l-11.5,1c5.1,8.1,11.1,15.2,17.5,21.1
c1.9-8.6,4.9-16.5,8.7-23.5l-11.5,1c0,0,0-0.4-0.1-1c-0.1-0.7-0.1-1.8-0.2-3c-0.1-2.5-0.2-5.8-0.1-9.1c0.1-3.3,0.4-6.6,0.7-9.1
c0.1-1.2,0.3-2.3,0.4-3c0.1-0.7,0.2-1.1,0.2-1.1L214.2,172.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M350.5,164.6c0,0-2.5,1.5-6.9,4.1c-1.1,0.6-2.3,1.4-3.7,2.1c-1.3,0.7-2.8,1.5-4.4,2.3
c-3.2,1.6-6.7,3.6-10.7,5.4c-15.8,7.7-37.6,16.3-60.1,22.7c-11.2,3.3-22.6,6.1-33.3,8.7c-10.7,2.4-20.8,4.6-29.4,6.2
c-8.6,1.7-15.9,3-20.9,4c-0.9,0.2-1.4,0.3-1.4,0.3l-2.1-11.4c-6.6,5.7-13.4,11.3-20.1,17c8.2,3,16.5,6,24.8,8.9l-2.1-11.4
c0,0,0.5-0.1,1.4-0.3c5.1-0.9,12.3-2.2,20.9-4c8.7-1.7,18.7-3.8,29.5-6.3c10.7-2.5,22.2-5.3,33.5-8.7
c22.7-6.4,44.7-15.1,60.6-22.9c4-1.8,7.6-3.8,10.8-5.5c1.6-0.8,3.1-1.6,4.5-2.4c1.3-0.8,2.6-1.5,3.7-2.2c4.5-2.6,7-4.1,7-4.1
L350.5,164.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M179.6,153.1c0,0-0.5,0.6-1.4,1.5c-0.4,0.5-1,1.1-1.6,1.7c-0.6,0.7-1.3,1.5-2,2.3
c-3,3.4-6.7,8.2-10.1,13.2c-3.4,5-6.4,10.2-8.5,14.2c-0.5,1-1,1.9-1.4,2.8c-0.4,0.8-0.7,1.6-1,2.2c-0.3,0.6-0.5,1-0.5,1
l-10.5-4.8c0.5,9.4,2,18.4,4.1,26.9c6.3-6.2,12.9-11.5,19.8-15.9l-10.5-4.8c0,0,0.2-0.3,0.4-0.9c0.3-0.6,0.6-1.3,1-2.1
c0.4-0.8,0.9-1.7,1.4-2.7c2-3.9,5-9.1,8.3-13.9c3.3-4.9,7-9.5,9.8-12.9c0.7-0.8,1.4-1.6,2-2.3c0.6-0.7,1.1-1.2,1.6-1.7
c0.9-0.9,1.4-1.5,1.4-1.5L179.6,153.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M176.2,129.9c0,0-0.5-0.1-1.3-0.2c-0.4-0.1-0.9-0.1-1.5-0.2c-0.6-0.1-1.3-0.1-2-0.2
c-1.5-0.1-3.1-0.2-5-0.2c-1.8,0-3.7,0-5.6,0.1c-3.8,0.2-7.6,0.6-10.5,0.9c-1.4,0.2-2.6,0.3-3.4,0.5c-0.6,0.1-1,0.2-1,0.2
l-1.7-11.4c-3.7,2.8-7.3,5.7-10.7,8.7c-0.9,0.8-1.7,1.5-2.5,2.3c-0.8,0.8-1.6,1.6-2.4,2.4c-1.6,1.6-3.2,3.3-4.4,5.2
c1.1,0.1,2.1,0.2,3.2,0.4c1,0.2,2.1,0.4,3.1,0.7c1,0.2,2,0.6,3,0.9c1,0.3,2,0.6,3,1c4,1.3,7.9,2.8,11.7,4.5l-1.7-11.4
c0,0,0.4-0.1,1-0.2c0.8-0.1,2-0.3,3.4-0.4c2.8-0.3,6.5-0.7,10.3-0.9c1.9-0.1,3.7-0.1,5.5-0.1c1.7,0.1,3.4,0.1,4.7,0.2
c0.7,0.1,1.3,0.1,1.9,0.2c0.5,0.1,1,0.1,1.4,0.2c0.8,0.1,1.2,0.2,1.2,0.2L176.2,129.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M350.9,164c0,0-3.3,0.9-9.2,2.5c-5.8,1.6-14.2,3.8-24.3,6.2c-10.1,2.4-21.9,4.9-34.7,6.9
c-12.8,2-26.6,3.6-40.3,3.8c-13.8,0-27.6-1.1-40.4-2.7c-12.9-1.6-24.8-3.7-34.9-5.9c-2.5-0.5-4.9-1.1-7.2-1.6
c-2.3-0.5-4.5-1.1-6.5-1.6c-2-0.5-3.9-1-5.7-1.5c-1.7-0.5-3.3-1-4.8-1.4c-0.9-0.3-1.5-0.4-1.5-0.4l3.5-11
c-8.1,2-16.4,3.7-25.1,4.2c4.9,7.3,10.9,14.2,17.2,20.9l3.5-11c0,0,0.5,0.2,1.5,0.4c1.5,0.4,3.1,0.9,4.8,1.4
c1.8,0.5,3.7,1,5.7,1.5c2.1,0.5,4.2,1.1,6.6,1.6c2.3,0.5,4.7,1.1,7.3,1.7c10.2,2.2,22.2,4.3,35.2,5.9c13,1.6,26.8,2.7,40.8,2.7
c14-0.2,27.9-1.8,40.8-3.8c12.9-2,24.8-4.6,35-7c10.1-2.4,18.5-4.6,24.4-6.2c5.9-1.6,9.2-2.5,9.2-2.5L350.9,164z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M188.3,105.7c0,0-2-1.8-5-4.3c-3-2.5-7.1-5.8-11.1-9.1c-4-3.3-8-6.7-10.9-9.3c-1.5-1.3-2.6-2.4-3.5-3.2
c-0.5-0.4-0.8-0.7-0.8-0.7l8-8.4c-4-0.8-8.1-1.8-12-2.9c-2-0.6-3.9-1.3-5.8-2c-1.9-0.8-3.8-1.7-5.5-3.1
c-0.3,2.2-0.2,4.5,0.1,6.8c0.3,2.3,0.7,4.6,1.2,6.9c1.1,4.6,2.4,9,3.9,13.4l8-8.4c0,0,0.3,0.3,0.8,0.7c0.8,0.8,2.1,1.9,3.5,3.2
c2.9,2.6,6.9,6.1,11,9.4c4.1,3.3,8.1,6.6,11.1,9.1c3,2.5,4.9,4.2,4.9,4.2L188.3,105.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M352.2,101.2c0,0-2.6-1.6-7.1-4.3c-4.5-2.7-11-6.6-18.9-10.9c-8-4.3-17.4-9.1-28-13.2
c-2.6-1.1-5.4-2-8.1-3c-2.8-0.8-5.6-1.8-8.5-2.5c-5.8-1.6-11.8-2.7-17.8-3.5l-4.5-0.5c-1.5-0.1-3-0.3-4.5-0.4
c-3-0.3-5.9-0.6-8.9-0.9c-5.9-0.6-11.7-1.2-17.3-1.8c-11.2-1.2-21.7-2.4-30.6-3.4c-13.9-1.5-23.1-2.5-23.1-2.5l1.2-11.5
c-8,3.5-16.1,7.1-24.1,10.8c7.2,5,14.2,10.2,21.3,15.3l1.2-11.5c0,0,9.2,1,23.1,2.5c9,1,19.4,2.2,30.6,3.4
c5.6,0.6,11.4,1.2,17.3,1.8c2.9,0.3,5.9,0.6,8.9,0.9c1.5,0.1,3,0.3,4.5,0.4l4.4,0.5c5.9,0.8,11.7,1.9,17.4,3.4
c2.8,0.7,5.6,1.7,8.3,2.5c2.7,1,5.4,1.8,8,2.9c10.4,4,19.8,8.7,27.7,13c7.9,4.3,14.3,8.1,18.8,10.8c4.5,2.7,7.1,4.3,7.1,4.3
L352.2,101.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M383.8,177.6c0,0,0.2,0.8,0.5,2.1c0.1,0.7,0.3,1.5,0.5,2.4c0.2,0.9,0.4,2,0.6,3.1
c0.8,4.6,1.6,10.8,1.8,17.1c0.3,6.2,0,12.5-0.5,17.1c-0.2,2.3-0.5,4.3-0.7,5.6c-0.1,0.7-0.1,1-0.1,1l-11.4-1.8
c3.3,7.4,5.9,15.5,7.5,24.1c6.6-5.7,12.8-12.5,18.5-20.1l-11.4-1.8c0,0,0.1-0.4,0.1-1.1c0.2-1.4,0.5-3.4,0.7-5.8
c0.5-4.8,0.8-11.2,0.5-17.6c-0.2-6.4-1-12.8-1.9-17.5c-0.2-1.2-0.4-2.3-0.6-3.2c-0.2-1-0.4-1.8-0.5-2.5
c-0.3-1.4-0.5-2.1-0.5-2.1L383.8,177.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#D6E379" d="M231.6,168.6c0,0,1.3,1.5,3.7,4c1.2,1.2,2.6,2.7,4.2,4.4c1.5,1.8,3.3,3.8,5.2,6
c7.6,8.8,17.8,20.5,28.8,31.4c5.5,5.5,11.2,10.8,16.8,15.5c2.8,2.4,5.6,4.6,8.2,6.6c2.7,2,5.2,3.9,7.6,5.6
c4.8,3.3,8.9,6,11.7,7.8c0.7,0.4,1.1,0.7,1.1,0.7l-6.2,9.8c8.9,0.5,17.7,0.7,26.5,0.9c-4.2-7.7-8.5-15.4-12.3-23l-6.2,9.8
c0,0-0.4-0.2-1.1-0.7c-2.8-1.8-6.9-4.5-11.6-7.8c-2.4-1.7-4.9-3.5-7.5-5.5c-2.6-2-5.3-4.2-8.1-6.5c-5.5-4.6-11.2-9.9-16.6-15.3
c-10.9-10.9-21.1-22.5-28.7-31.3c-1.9-2.2-3.7-4.2-5.2-6c-1.6-1.8-3-3.3-4.2-4.5c-2.3-2.4-3.5-3.9-3.5-3.9L231.6,168.6z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#B7B9DD" d="M221.5,93.1c-0.3-3.7-0.3-7.6-0.2-11.4c0.1-3.9,0.3-7.7,0.6-11.6l0.1-0.9l11.5,0.9c0,0-2.9-5.7-5.5-11.6
c-1.3-2.9-2.6-5.9-3.5-8.2c-0.4-1.1-0.8-2.1-1-2.8c-0.2-0.7-0.4-1.1-0.4-1.1s-0.3,0.3-0.7,0.8c-0.5,0.5-1.2,1.3-1.9,2.3
c-1.6,2-3.6,4.6-5.6,7.4c-3.9,5.4-7.6,11.1-7.6,11.1l11.5,0.9l-0.1,0.9c-0.3,3.9-0.5,7.8-0.6,11.7c-0.1,3.9-0.1,7.8,0.2,11.9
L221.5,93.1z"/>
</g>
</g>
</g>
</g>
<g id="Layer_1">
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="236.6" cy="10.9" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="443.2" cy="259.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="471.9" cy="46.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="359.6" cy="3.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="511.6" cy="22.4" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="450.6" cy="213.7" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="132.1" cy="31.5" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="92.5" cy="146.5" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="139.1" cy="249.8" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="227.4" cy="259.6" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="220" cy="135.7" r="39.1"/>
<circle fill="#3B4D81" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="216.1" cy="133.2" r="39.1"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="378.8" cy="137.9" r="38.8"/>
<circle fill="#FFD105" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="375" cy="135.5" r="38.8"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="378.9" cy="285.1" r="37"/>
<circle fill="#FFF0D6" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="369.3" cy="284.7" r="37"/>
<g>
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M391.7,257.7"/>
</g>
<g>
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M379.9,126"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M385.8,259.3"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M382.5,262.5"/>
</g>
<g>
<g>
<g>
<path fill="#808082" d="M247.9,110.9c0,0,0.3-0.1,0.7-0.4c0.5-0.3,1.2-0.7,2.1-1.2c1.9-1,4.6-2.2,8-3.3
c6.8-2.4,16.5-4.1,26.2-4.4c9.7-0.3,19.5,0.8,26.6,2.3c3.6,0.7,6.5,1.6,8.5,2.2c0.7,0.2,1.1,0.3,1.1,0.3l-3.6,11
c7.5-2.1,15.6-3.4,24.3-2.2c-1.6-4.1-3.9-8.1-6.7-11.9c-2.8-3.8-5.9-7.5-9.4-10.9l-3.6,11c0,0-0.4-0.1-1.1-0.4
c-2.1-0.6-5.1-1.5-8.8-2.3C305,99.2,295,98,285,98.4c-10,0.3-20,2.1-27.1,4.6c-3.6,1.2-6.5,2.5-8.5,3.5c-1,0.5-1.7,1-2.3,1.2
c-0.5,0.3-0.8,0.4-0.8,0.4L247.9,110.9z"/>
</g>
</g>
</g>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="528.1" cy="146.3" r="37"/>
<circle fill="#E9E9F5" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="518.5" cy="146" r="37"/>
<g>
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M481.5,185.7"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M475.5,187.2"/>
</g>
<g opacity="0.49">
<path fill="none" stroke="#95979A" stroke-miterlimit="10" d="M472.2,190.4"/>
</g>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="433.6" cy="259.1" r="37"/>
<circle fill="#EBF5E6" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="462.2" cy="46.1" r="37"/>
<circle fill="#FDE9F2" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="502" cy="22.1" r="37"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" enable-background="new " cx="531.5" cy="269.2" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="521.8" cy="268.9" r="37"/>
<circle fill="#FAF3F8" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="441" cy="213.4" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="122.5" cy="31.1" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="231" cy="7.1" r="37"/>
<circle fill="#E9E9F5" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="82.8" cy="146.1" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="129.5" cy="249.5" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="217.7" cy="259.3" r="37"/>
<circle fill="#F6F7D4" stroke="#B8BABC" stroke-width="6" stroke-miterlimit="10" cx="350" cy="3.1" r="37"/>
<g>
<g>
<g>
<path fill="#808082" d="M343.1,156.2c0,0-0.3,0.1-0.7,0.4c-0.5,0.3-1.2,0.7-2.1,1.2c-1.9,1-4.6,2.2-8,3.3
c-6.8,2.4-16.5,4.1-26.2,4.4c-9.7,0.3-19.5-0.8-26.6-2.3c-3.6-0.7-6.5-1.6-8.5-2.2c-0.7-0.2-1.1-0.3-1.1-0.3l3.6-11
c-7.5,2.1-15.6,3.4-24.3,2.2c1.6,4.1,3.9,8.1,6.7,11.9c2.8,3.8,5.9,7.5,9.4,10.9l3.6-11c0,0,0.4,0.1,1.1,0.4
c2.1,0.6,5.1,1.5,8.8,2.3c7.3,1.6,17.3,2.7,27.4,2.4c10-0.3,20-2.1,27.1-4.6c3.6-1.2,6.5-2.5,8.5-3.5c1-0.5,1.7-1,2.3-1.2
c0.5-0.3,0.8-0.4,0.8-0.4L343.1,156.2z"/>
</g>
</g>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 22 KiB

After

Width:  |  Height:  |  Size: 22 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 941 KiB

After

Width:  |  Height:  |  Size: 954 KiB

View File

@ -1,32 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 307" enable-background="new 0 0 595.3 307" xml:space="preserve">
<g id="Layer_3">
</g>
<g id="Layer_2">
</g>
<g id="Layer_1">
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="188.6" cy="171.8" r="114.5"/>
<circle fill="#FBC4AB" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="177.3" cy="164.5" r="114.5"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="459.4" cy="160.8" r="114.5"/>
<circle fill="#C8E3B7" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="448.1" cy="153.5" r="114.5"/>
<circle fill="#54B948" stroke="#00873A" stroke-width="6" stroke-miterlimit="10" cx="492.8" cy="96.8" r="18.3"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M253.2,195.4c41.2,34.4,131,8.7,172.1-38.3"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M233.6,93.8c30.4-27.5,91-31,131.4,14.8"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M177.3,174.7c56.3,89.2,244.3,107.9,323.2,14.9"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M119.6,121.6C225.6,8.3,357.5,4.3,474.5,85.9"/>
<circle fill="#D71920" stroke="#BE1E2D" stroke-width="6" stroke-miterlimit="10" cx="104.7" cy="135.3" r="18.3"/>
<circle fill="#F58235" stroke="#E76524" stroke-width="6" stroke-miterlimit="10" cx="240.2" cy="185.8" r="18.3"/>
<circle fill="#8967AC" stroke="#651C5F" stroke-width="6" stroke-miterlimit="10" cx="169" cy="157.1" r="18.3"/>
<circle fill="#54B948" stroke="#00873A" stroke-width="6" stroke-miterlimit="10" cx="221.9" cy="107.9" r="18.3"/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="118.6,121.6 127.5,96.9 143.3,116.2 "/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="234.3,94.6 243.3,69.9 259,89.2 "/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="255.9,197.9 282,195.7 271.1,218.1 "/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="176.2,174.8 200.7,184.3 181,199.6 "/>
<circle fill="#D71920" stroke="#BE1E2D" stroke-width="6" stroke-miterlimit="10" cx="375.5" cy="124.2" r="18.3"/>
<circle fill="#A9CF38" stroke="#80B541" stroke-width="6" stroke-miterlimit="10" cx="511.1" cy="174.7" r="18.3"/>
<circle fill="#048A7A" stroke="#006A74" stroke-width="6" stroke-miterlimit="10" cx="439.8" cy="146.1" r="18.3"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 307" enable-background="new 0 0 595.3 307" xml:space="preserve">
<g id="Layer_3">
</g>
<g id="Layer_2">
</g>
<g id="Layer_1">
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="188.6" cy="171.8" r="114.5"/>
<circle fill="#FBC4AB" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="177.3" cy="164.5" r="114.5"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="459.4" cy="160.8" r="114.5"/>
<circle fill="#C8E3B7" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="448.1" cy="153.5" r="114.5"/>
<circle fill="#54B948" stroke="#00873A" stroke-width="6" stroke-miterlimit="10" cx="492.8" cy="96.8" r="18.3"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M253.2,195.4c41.2,34.4,131,8.7,172.1-38.3"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M233.6,93.8c30.4-27.5,91-31,131.4,14.8"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M177.3,174.7c56.3,89.2,244.3,107.9,323.2,14.9"/>
<path fill="none" stroke="#6D6E71" stroke-width="4" stroke-miterlimit="10" d="M119.6,121.6C225.6,8.3,357.5,4.3,474.5,85.9"/>
<circle fill="#D71920" stroke="#BE1E2D" stroke-width="6" stroke-miterlimit="10" cx="104.7" cy="135.3" r="18.3"/>
<circle fill="#F58235" stroke="#E76524" stroke-width="6" stroke-miterlimit="10" cx="240.2" cy="185.8" r="18.3"/>
<circle fill="#8967AC" stroke="#651C5F" stroke-width="6" stroke-miterlimit="10" cx="169" cy="157.1" r="18.3"/>
<circle fill="#54B948" stroke="#00873A" stroke-width="6" stroke-miterlimit="10" cx="221.9" cy="107.9" r="18.3"/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="118.6,121.6 127.5,96.9 143.3,116.2 "/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="234.3,94.6 243.3,69.9 259,89.2 "/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="255.9,197.9 282,195.7 271.1,218.1 "/>
<polygon fill="#6D6E71" stroke="#6D6E71" stroke-miterlimit="10" points="176.2,174.8 200.7,184.3 181,199.6 "/>
<circle fill="#D71920" stroke="#BE1E2D" stroke-width="6" stroke-miterlimit="10" cx="375.5" cy="124.2" r="18.3"/>
<circle fill="#A9CF38" stroke="#80B541" stroke-width="6" stroke-miterlimit="10" cx="511.1" cy="174.7" r="18.3"/>
<circle fill="#048A7A" stroke="#006A74" stroke-width="6" stroke-miterlimit="10" cx="439.8" cy="146.1" r="18.3"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.8 KiB

After

Width:  |  Height:  |  Size: 2.8 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 81 KiB

After

Width:  |  Height:  |  Size: 82 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 928 KiB

After

Width:  |  Height:  |  Size: 940 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 930 KiB

After

Width:  |  Height:  |  Size: 942 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 930 KiB

After

Width:  |  Height:  |  Size: 943 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 953 KiB

After

Width:  |  Height:  |  Size: 965 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 957 KiB

After

Width:  |  Height:  |  Size: 970 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 928 KiB

After

Width:  |  Height:  |  Size: 940 KiB

View File

@ -1,299 +1,299 @@
Sets
===
We will begin our inquiry by looking at the basic theory of sets. You will understand why shortly. For now, it suffices to say that sets are an example of a category.
Preface: What is an Abstract Theory
===
> Instead of asking what can be defined and deduced from what is assumed to begin with, we ask instead what more general ideas and principles can be found, in terms of which what was our starting-point can be defined or deduced.
> Bertrand Russell, from Introduction to Mathematical Philosophy
Most scientific and mathematical theories have a specific domain, to which they are related, and in which they are valid. They are created with this domain in mind and are not intended to be used outside of it. For example, Darwin's theory of evolution is created so it explains how different biological species came to be. And quantum mechanics is a description of what particles are at the low scale. Even the work of most mathematicians, although it is not bound to a specific domain, is strongly related to it, as differential equations are linked to the description of events that change over time.
Set theory and category theory are different. They are not created for to provide a rigorous explanation of how a particular phenonium works, but to try to provide a more general framework for explaining all kinds of phenomena. Theories that are like that are called *abstract* theories. All theories *use abstraction*, else they would be pretty useless (without it Darwin would have to speak about specific animal species or even individual animals) but few are inherently abstract, so some of their core concepts are left unspecified. Or in other words, all theories are applicable outside of their domains, but set theory and category theory do not have a domain, to begin with.
People have tried to be precise and at the same time down to Earth for centuries, and only recently discovered that "precise and down to Earth" is an oxymoron. Let's take Euclidian geometry as an example. Yes, Euclidian geometry is precise, because it is valid for all sets of objects, called ("point" "line" "angle" and "circle" etc.), which have relationships, as defined by the five famous axioms. Yes, geometry does, in many instances, describe the natural world, because there are many sets of objects which have these relations. However, its "precise" part and it's "down to Earth" part have nothing to do with each other. We can, for example, define a point as any stain on the floor of your room and that a line as a piece of duct tape, put on the same floor - that will be a completely valid application of the Euclidian laws, albeit not very useful one. Or we can try to use geometry to reason about points on the surface of the Earth, which is a very useful application, of geometry, however not of Euclidian geometry, because Euclidian geometry only describes points on a flat plane, and the Earth is not flat. You can argue that these are actually two separate theories there, which just happen to be perceived as one. You have the axioms, or the postulates on one hand, which are not useful for anything on their own, and you have applications in science and engineering which are somewhat based on them, but not quite.
Sets
===
Everything in set theory is defined in terms of sets. A set is a collection of things where the "things" can be anything you want. Consider, for example, these balls:
![Balls](elements.svg)
For example, let's construct a set, call it **G** (as grey), consisting of *all* of them. This is how we can mark it:
![The set of all balls](all.svg)
The example may look childish but in fact, this set is just as valid as any other set.
The things that are contained in the set are called its *elements*. A set is like a summary of its elements. It has no other structure, for example, there is not order, no ball goes before or after another, there are no members which are "special" with respect to their membership in the set. Two sets that contain the same elements are also the same.
The key insight about what a set it is that it enables you to reason about several things as if they were one.
Subsets
---
Let's construct one more set. The set of *all balls that are warm colour*. I will call it **Y**, because in the diagram is coloured in **y**ellow.
![Y - the set of all balls of warm colours](subset.svg)
Notice that **Y** contains just elements that are also present in **G**. That is, every element of the set of **Y** is also an element in the set **G**. When two sets have this relation, we may say that **Y** is a *subset* of **G** (or **Y ⊆ G**).
![Y and G together](set_subset.svg)
Singleton Sets
---
The set of all *red balls* contains just one ball.
![The singleton set of red balls](singleton.svg)
Like we said above, sets are all about for summarising *several* elements into one. Still, sets that contain just one element are perfectly valid. Simply, there are things which are one of a kind. Furthermore, if I have a function which expects a set of given items, here shouldn't be any issue if the "items" are just one item. Or to take a real-life example, the set of queens of England is a singleton set. The set of books written by the American writer Harper Lee and published during her lifetime is a singleton set - she has published just one novel.
The Empty set
---
Of course if one is a valid answer, so can be zero. If we want a set of all *black balls* **B** or all the *white balls*, **W**, the answer to all these questions is the same - the empty set. Or in other words.
![The empty set](void.svg)
Note that a set is defined only by the items it contains, which means that there is no difference between the set that contains zero *balls* and the set that contains zero *numbers*, for instance. In other words, the empty set is *unique* set, which makes it a very special one. Formally, the empty set is marked with the symbol **∅** (so **B = W = ∅**).
The empty set is a special one, for example, it is a subset of every other set (mathematically speaking, **∀ A | A ⊆ ∅**)
We will encounter the empty set again.
Functions
===
A function is a relationship between two sets which matches each element of one set, called the *domain* of the function, with exactly one element from another set, called the converse domain, or the *codomain* of the function.
> By function I mean the unity of the act of arranging various representations under one common representation.
> Immanuel Kant, from Critique of Pure Reason
Here is a function, **f** which maps each ball from the set **R** to the ball with the opposite colour in another set **G** ( in mathematics a function's name is often accompanied by the names of its domain and codomain, like this: **f: R → G**)
![Opposite colors](function_one_one.svg)
This is probably one of the simpler types of functions there exists. That is because it encodes a *one-to-one relationship* between the sets - *one* element from the domain is connected to exactly *one* element from the codomain (and the other way around).
But functions can also express relationships of the type *many-to-one*, where *many* elements from the domain might be connected to *one* element from the codomain (but not the other way around).
For example, a function can express a relationship in which several elements from the domain relate to the same element of the codomain.
![Function from a bigger set to a smaller one](function_big_small.svg)
It can also express relationships in which some elements from the codomain do not play a part.
![Function from a smaller set to a bigger one](function_small_big.svg)
One thing that you cannot have is a domain element which is not mapped to anything, or which is mapped to more than one codomain element. That would mean the relationship expressed by the function will be *many-to-many*, and, as we said in the beginning, functions only model many-to-one relationships. There is a reason for that "design decision", and we will arrive at it shortly.
Sets and functions can express relationships between all kinds of objects, and even people. Every question that you ask can most probably be expressed as a function.
The question "How far are we from New York?" is a function with a domain the set of places in the world and a codomain, consisting of the set of all positive numbers
Question: Some people might say that the codomain of this function is bigger than it should be. How would you refine it?
The question "Who is my father?" is a function whose domain is the set of all people in the world.
Question: What is the codomain of this function?
Note that the question "Who is my child?" is *NOT* a straightforward function, because a person can have no children, or can have multiple children. We will learn to represent such questions as functions later.
Question: Do all functions that we drew at the beginning *express* something? Do you think that a function should express something in order to be valid?
The Identity Function
---
For every set **G**, no matter what it represents, we can define the function that does nothing, or in other words, a function which maps every element G to itself. It is called the *the identity function* of **G** or **idG: G → G**.
![The identity function](function_identity.svg)
You can think of **idG** as a function which represents the set **G** in the realm of functions. Its existence allows us to prove many theorems, that we "know" by intuition, formally.
Functions and Subsets
---
For each set and subset, no matter what they represent, we can define the function that maps each element of the subset to itself:
![Function from a smaller set to a bigger one](function_small_big.svg)
Every set is a subset of itself, in which case this function is the same as the identity.
Functions and the Empty Set
---
There is a unique function from the empty set to any other set.
![Function with empty set](function_empty.svg)
Question: Is this really valid? Why? Check the definition.
Note that this statement is also a result from the one saying that there is a function between a Subset and a Set, and the one that says that the empty set is a subset of any other set.
Question: What about the other way around. Are there functions with the empty set as a codomain as opposed to a domain?
Functions and Singleton Sets
---
There is a unique function from any set to any singleton set.
![Function with a singleton set](function_singleton.svg)
Question: Is this really the only way to connect *any* set to a singleton set in a valid way?
Question: Again, what about the other way around?
Sets, Functions and Numerical Operation
===
All mathematical operations can be expressed as functions, acting on the set of numbers. Actually there are several such sets, such the set of positive whole numbers, (also called "natural" numbers), **N := {1, 2, 3... ∞}**, the set of both positive and negative whole numbers **Z := {-∞... -3 -2, -1, 0, 1, 2, 3... ∞}**. And the set of "Real" numbers which include all numbers that I know of.
For example, squaring a number is a function from the set of real numbers to the set of real positive numbers (because both sets are infinite, we cannot draw them in their entirety, however we can draw a part of them).
![The square function](square.svg)
I will use the occasion to reiterate some of the more important characteristics of functions:
- All numbers from the codomain have (or should have) two arrows pointing at them (one for the positive square root and one for the negative one), and that is OK.
- Zero from the domain is connected to itself in the codomain, and that is OK.
- Some numbers aren't the square of any other number. That is also OK.
Overall everything is OK, as long as you can always provide exactly one result (also known as *The result™*) per value, and in mathematics almost always do. Actually, math is designed in a way so its operations are valid functions:
> Every generalisation of number has first presented itself as needed for some simple problem: negative numbers were needed in order that subtraction might be always possible, since otherwise a b would be meaningless if a were less than b; fractions were needed in order that division might be always possible; and complex numbers are needed in order that extraction of roots and solution of equations may be always possible.
> Bertrand Russell, from Introduction to Mathematical Philosophy
Note that most mathematical operations, such as addition, multiplication etc. require two numbers in order to produce a result. This does not mean that they are not functions, it means that they are just a little more fancy ones. Depending on what we need, we may present those operations as functions from the sets of *tuples* of numbers to the set of numbers, or we may say that they take a number and return a function. More on that later.
Sets and Functions in Programming
===
Sets are used extensively in programming, except that there they are called *types* or also *classes*. All sets of numbers that we discussed earlier also exist in most languages as types, and there are also some non-mathematical types that play a huge role in programming.
The simplest type, `Boolean` is nothing more than a set of two values - `true` and `false`:
![Set of boolean values](boolean.svg)
Another very basic set in programming is the set of keyboard characters, or `Char`:
![Set of characters](char.svg)
Characters are actually used rarely by themselves and mostly as parts of sequences.
Most of the types of programming are composite types - they are a combination of the primitive types that are listed here. Again, we will cover these later.
Question: What is the type equivalent of subsets in programming?
Question: Do you recognise some of the basic functions we defined in programming languages you know?
Some functions in programming (also called methods, subroutines, etc.) kinda resemble mathematical functions - they sometimes take one value of a given type (or in other words, an element that belongs to a given set) and always return exactly one element which belongs to another type (or set). For example here is a function which that takes an argument of type `Char` and returns a `Boolean`, depending on whether the character is a letter.
![A function from Char to Boolean](char_boolean.svg)
However functions in programming can also be quite different from mathematical functions - they can perform various operations that have nothing to do with returning a value, called side effects. This is because most common programming languages and paradigms which are in use today were created at times when the computer resources were much more limited than today, and programming - much more cumbersome, so people had bigger problems than the fact that their functions were not mathematically sound.
One type of functions used in programming which strongly resembles mathematical ones are those which convert a value from one type to another, for example, the function which converts a floating-point number to an Integer. That is probably the reason why most functional languages are strongly-typed.
Functional Composition
===
Let's assume that we have two functions, **g: Y → P** and **f: P → G** and the codomain of the first one is the same set as the domain of the second.
![Matching functions](functions_matching.svg)
If we apply the first function **g** to some element from set **Y**, we will get an element of the set **P**. Then, if we apply the second function **f** to *that* element, we will get an element from type **G**.
![Applying one function after another](functions_one_after_another.svg)
We can define a new function, that is the equivalent to performing the operation described above. Let us call it **h: Y → G**. We may say that **h** is the *composition* of **g** and **f**, or **h = f ∘ g** (notice that the first function is on the right, so it's similar to **b = f(g(a)**).
![Functional composition](functions_compose.svg)
Composition is the essence of all things categorical. The key insight is that the sum of two parts is no more complex than the parts themselves.
Question: The definition of functional composition (presented in the second paragraph) relies on the fact that functions are many-to-one relationships between sets. How could functional composition work for many-to-many relationships? Can it work at all?
Representing Composition with Commutative Diagrams
---
In the last diagram, the equivalence between **f ∘ g** and the new function **h** is expressed by the fact that if you follow the arrow **h** for any element of set **Y** you will get to the same element of the set **G** as the one you will get if you follow the **g** and then follow **f**. Diagrams that express such equivalence between sequences of function application are called *commutative diagrams*.
![Functional composition](functions_compose.svg)
If we "zoom-out" the last diagram so it does not show the individual set elements, we get a more general view of functional composition.
![Functional composition for sets](functions_compose_sets.svg)
In fact, because this diagram commutes (that is, all arrows, starting from a given set element ultimately lead to the same corresponding element from the resulting set), enumerating the elements is redundant. Having this insight allows us to redefine functional composition in the following, more visual, way:
The composition of two functions **f** and **g** is a third function **h** defined in such a way that this diagram commutes.
![Functional composition - general definition](functions_compose_general.svg)
This is called an *external diagram*, by the way (and the ones that we saw before are internal).
The Power of Composition
---
To understand how powerful composition is, consider the following: one set being connected to another means that each function from the second set can be transferred to a corresponding function from the first one.
If we have a function **g: P → Y ** from set **P** to set **Y**, then for every function **f** from the set **Y** to any other set, there is a corresponding function **f ∘ g** from the set **P** to the same set. In other words, every time you define a new function from **Y** to some other set, you gain one function from **P** to that same set for free.
![Functional composition connect](morphism_general.svg)
For example, if we again take the relationship between a person and his father as a function, with the set of all people in the world as a domain, and the set of all people that have children as its codomain, then each person whom my father is related to is automatically my relative - my father's father is my grandfather, my father's wife is my mother and so on.
Isomorphisms
===
Let's go back to the function that demonstrated a one-to-one relationship.
![Opposite colors](function_one_one.svg)
Notice that the function is invertible, that is if you flip its arrows you get another valid function:
![Opposite colors](isomorphism_one_one.svg)
Invertible functions are called *isomorphisms*. When there is an invertible function between two sets we can say that the sets are *isomorphic*. For example, the temperature measured in Celcius is isomorphic to the temperature, measured in Fahrenheit.
More formally, two sets **R** and **G** are isomorphic, or **R ≅ G** if there exist functions **f: G → R** and its reverse **g R → G**, such that **f ∘ g = idR** and **g ∘ f = idG** (notice how the identity function comes in handy).
Isomorphism and equality
---
In category theory, the concept of an isomorphism is strongly related to the concept of equality (that is why it is denoted with **≅**, which is almost the same as **=**). This is also related to programming, where if we have a function that convert our object of type A to an object of type B and the other way around we pretty much regard A and B as two formats of the same object.
For example, we all know that everything is equal to itself. Well, if you look closely you would see that the identity function is reversible (its reverse is itself), so each set is also isomorphic to itself.
![The identity function](isomorphism_identity.svg)
Note that an isomorphism between two sets does not imply that their *elements* are similar to one another, as some of the examples might suggest. It rather implies that they have similar *structure*, in other words, a function that involves one of the sets, can easily be converted to a function involving the other set.
![The architecture of isomorphism](isomorphism_general.svg)
For example, if you have a function "is the husband of" that goes from the set of all married men to the set of all married women, and the corresponding function, "is the wife of", that would make the sets of married men and married woman isomorphic (ignoring some exceptions). That is not to say that you are the same person as your significant other, but rather that every statement about you, or every relation you have to some other person or object is also a relation between him/her and the same person or object, and vice versa.
Isomorphisms Between Singleton Sets
---
Between any two singleton sets, we may define the only possible function.
![The only possible function between sungletons](singleton_function.svg)
The function is invertible, which means that all singleton sets are isomorphic to one another.
![Isomorphic singletons](singleton_isomorphism.svg)
Following the logic from the last paragraph, each statement about something that is one of a kind can be transferred to a statement about another thing that is one of a kind.
Question: Try to come up with a good example that shows how a statement that demonstrates the isomorphism between singleton sets (I obviously couldn't). Consider that all of people and objects are sharing one and the same universe.
Task: Think of two singleton sets, and try to pinpoint the relation that they have.
Sets
===
We will begin our inquiry by looking at the basic theory of sets. You will understand why shortly. For now, it suffices to say that sets are an example of a category.
Preface: What is an Abstract Theory
===
> Instead of asking what can be defined and deduced from what is assumed to begin with, we ask instead what more general ideas and principles can be found, in terms of which what was our starting-point can be defined or deduced.
> Bertrand Russell, from Introduction to Mathematical Philosophy
Most scientific and mathematical theories have a specific domain, to which they are related, and in which they are valid. They are created with this domain in mind and are not intended to be used outside of it. For example, Darwin's theory of evolution is created so it explains how different biological species came to be. And quantum mechanics is a description of what particles are at the low scale. Even the work of most mathematicians, although it is not bound to a specific domain, is strongly related to it, as differential equations are linked to the description of events that change over time.
Set theory and category theory are different. They are not created for to provide a rigorous explanation of how a particular phenonium works, but to try to provide a more general framework for explaining all kinds of phenomena. Theories that are like that are called *abstract* theories. All theories *use abstraction*, else they would be pretty useless (without it Darwin would have to speak about specific animal species or even individual animals) but few are inherently abstract, so some of their core concepts are left unspecified. Or in other words, all theories are applicable outside of their domains, but set theory and category theory do not have a domain, to begin with.
People have tried to be precise and at the same time down to Earth for centuries, and only recently discovered that "precise and down to Earth" is an oxymoron. Let's take Euclidian geometry as an example. Yes, Euclidian geometry is precise, because it is valid for all sets of objects, called ("point" "line" "angle" and "circle" etc.), which have relationships, as defined by the five famous axioms. Yes, geometry does, in many instances, describe the natural world, because there are many sets of objects which have these relations. However, its "precise" part and it's "down to Earth" part have nothing to do with each other. We can, for example, define a point as any stain on the floor of your room and that a line as a piece of duct tape, put on the same floor - that will be a completely valid application of the Euclidian laws, albeit not very useful one. Or we can try to use geometry to reason about points on the surface of the Earth, which is a very useful application, of geometry, however not of Euclidian geometry, because Euclidian geometry only describes points on a flat plane, and the Earth is not flat. You can argue that these are actually two separate theories there, which just happen to be perceived as one. You have the axioms, or the postulates on one hand, which are not useful for anything on their own, and you have applications in science and engineering which are somewhat based on them, but not quite.
Sets
===
Everything in set theory is defined in terms of sets. A set is a collection of things where the "things" can be anything you want. Consider, for example, these balls:
![Balls](elements.svg)
For example, let's construct a set, call it **G** (as grey), consisting of *all* of them. This is how we can mark it:
![The set of all balls](all.svg)
The example may look childish but in fact, this set is just as valid as any other set.
The things that are contained in the set are called its *elements*. A set is like a summary of its elements. It has no other structure, for example, there is not order, no ball goes before or after another, there are no members which are "special" with respect to their membership in the set. Two sets that contain the same elements are also the same.
The key insight about what a set it is that it enables you to reason about several things as if they were one.
Subsets
---
Let's construct one more set. The set of *all balls that are warm colour*. I will call it **Y**, because in the diagram is coloured in **y**ellow.
![Y - the set of all balls of warm colours](subset.svg)
Notice that **Y** contains just elements that are also present in **G**. That is, every element of the set of **Y** is also an element in the set **G**. When two sets have this relation, we may say that **Y** is a *subset* of **G** (or **Y ⊆ G**).
![Y and G together](set_subset.svg)
Singleton Sets
---
The set of all *red balls* contains just one ball.
![The singleton set of red balls](singleton.svg)
Like we said above, sets are all about for summarising *several* elements into one. Still, sets that contain just one element are perfectly valid. Simply, there are things which are one of a kind. Furthermore, if I have a function which expects a set of given items, here shouldn't be any issue if the "items" are just one item. Or to take a real-life example, the set of queens of England is a singleton set. The set of books written by the American writer Harper Lee and published during her lifetime is a singleton set - she has published just one novel.
The Empty set
---
Of course if one is a valid answer, so can be zero. If we want a set of all *black balls* **B** or all the *white balls*, **W**, the answer to all these questions is the same - the empty set. Or in other words.
![The empty set](void.svg)
Note that a set is defined only by the items it contains, which means that there is no difference between the set that contains zero *balls* and the set that contains zero *numbers*, for instance. In other words, the empty set is *unique* set, which makes it a very special one. Formally, the empty set is marked with the symbol **∅** (so **B = W = ∅**).
The empty set is a special one, for example, it is a subset of every other set (mathematically speaking, **∀ A | A ⊆ ∅**)
We will encounter the empty set again.
Functions
===
A function is a relationship between two sets which matches each element of one set, called the *domain* of the function, with exactly one element from another set, called the converse domain, or the *codomain* of the function.
> By function I mean the unity of the act of arranging various representations under one common representation.
> Immanuel Kant, from Critique of Pure Reason
Here is a function, **f** which maps each ball from the set **R** to the ball with the opposite colour in another set **G** ( in mathematics a function's name is often accompanied by the names of its domain and codomain, like this: **f: R → G**)
![Opposite colors](function_one_one.svg)
This is probably one of the simpler types of functions there exists. That is because it encodes a *one-to-one relationship* between the sets - *one* element from the domain is connected to exactly *one* element from the codomain (and the other way around).
But functions can also express relationships of the type *many-to-one*, where *many* elements from the domain might be connected to *one* element from the codomain (but not the other way around).
For example, a function can express a relationship in which several elements from the domain relate to the same element of the codomain.
![Function from a bigger set to a smaller one](function_big_small.svg)
It can also express relationships in which some elements from the codomain do not play a part.
![Function from a smaller set to a bigger one](function_small_big.svg)
One thing that you cannot have is a domain element which is not mapped to anything, or which is mapped to more than one codomain element. That would mean the relationship expressed by the function will be *many-to-many*, and, as we said in the beginning, functions only model many-to-one relationships. There is a reason for that "design decision", and we will arrive at it shortly.
Sets and functions can express relationships between all kinds of objects, and even people. Every question that you ask can most probably be expressed as a function.
The question "How far are we from New York?" is a function with a domain the set of places in the world and a codomain, consisting of the set of all positive numbers
Question: Some people might say that the codomain of this function is bigger than it should be. How would you refine it?
The question "Who is my father?" is a function whose domain is the set of all people in the world.
Question: What is the codomain of this function?
Note that the question "Who is my child?" is *NOT* a straightforward function, because a person can have no children, or can have multiple children. We will learn to represent such questions as functions later.
Question: Do all functions that we drew at the beginning *express* something? Do you think that a function should express something in order to be valid?
The Identity Function
---
For every set **G**, no matter what it represents, we can define the function that does nothing, or in other words, a function which maps every element G to itself. It is called the *the identity function* of **G** or **idG: G → G**.
![The identity function](function_identity.svg)
You can think of **idG** as a function which represents the set **G** in the realm of functions. Its existence allows us to prove many theorems, that we "know" by intuition, formally.
Functions and Subsets
---
For each set and subset, no matter what they represent, we can define the function that maps each element of the subset to itself:
![Function from a smaller set to a bigger one](function_small_big.svg)
Every set is a subset of itself, in which case this function is the same as the identity.
Functions and the Empty Set
---
There is a unique function from the empty set to any other set.
![Function with empty set](function_empty.svg)
Question: Is this really valid? Why? Check the definition.
Note that this statement is also a result from the one saying that there is a function between a Subset and a Set, and the one that says that the empty set is a subset of any other set.
Question: What about the other way around. Are there functions with the empty set as a codomain as opposed to a domain?
Functions and Singleton Sets
---
There is a unique function from any set to any singleton set.
![Function with a singleton set](function_singleton.svg)
Question: Is this really the only way to connect *any* set to a singleton set in a valid way?
Question: Again, what about the other way around?
Sets, Functions and Numerical Operation
===
All mathematical operations can be expressed as functions, acting on the set of numbers. Actually there are several such sets, such the set of positive whole numbers, (also called "natural" numbers), **N := {1, 2, 3... ∞}**, the set of both positive and negative whole numbers **Z := {-∞... -3 -2, -1, 0, 1, 2, 3... ∞}**. And the set of "Real" numbers which include all numbers that I know of.
For example, squaring a number is a function from the set of real numbers to the set of real positive numbers (because both sets are infinite, we cannot draw them in their entirety, however we can draw a part of them).
![The square function](square.svg)
I will use the occasion to reiterate some of the more important characteristics of functions:
- All numbers from the codomain have (or should have) two arrows pointing at them (one for the positive square root and one for the negative one), and that is OK.
- Zero from the domain is connected to itself in the codomain, and that is OK.
- Some numbers aren't the square of any other number. That is also OK.
Overall everything is OK, as long as you can always provide exactly one result (also known as *The result™*) per value, and in mathematics almost always do. Actually, math is designed in a way so its operations are valid functions:
> Every generalisation of number has first presented itself as needed for some simple problem: negative numbers were needed in order that subtraction might be always possible, since otherwise a b would be meaningless if a were less than b; fractions were needed in order that division might be always possible; and complex numbers are needed in order that extraction of roots and solution of equations may be always possible.
> Bertrand Russell, from Introduction to Mathematical Philosophy
Note that most mathematical operations, such as addition, multiplication etc. require two numbers in order to produce a result. This does not mean that they are not functions, it means that they are just a little more fancy ones. Depending on what we need, we may present those operations as functions from the sets of *tuples* of numbers to the set of numbers, or we may say that they take a number and return a function. More on that later.
Sets and Functions in Programming
===
Sets are used extensively in programming, except that there they are called *types* or also *classes*. All sets of numbers that we discussed earlier also exist in most languages as types, and there are also some non-mathematical types that play a huge role in programming.
The simplest type, `Boolean` is nothing more than a set of two values - `true` and `false`:
![Set of boolean values](boolean.svg)
Another very basic set in programming is the set of keyboard characters, or `Char`:
![Set of characters](char.svg)
Characters are actually used rarely by themselves and mostly as parts of sequences.
Most of the types of programming are composite types - they are a combination of the primitive types that are listed here. Again, we will cover these later.
Question: What is the type equivalent of subsets in programming?
Question: Do you recognise some of the basic functions we defined in programming languages you know?
Some functions in programming (also called methods, subroutines, etc.) kinda resemble mathematical functions - they sometimes take one value of a given type (or in other words, an element that belongs to a given set) and always return exactly one element which belongs to another type (or set). For example here is a function which that takes an argument of type `Char` and returns a `Boolean`, depending on whether the character is a letter.
![A function from Char to Boolean](char_boolean.svg)
However functions in programming can also be quite different from mathematical functions - they can perform various operations that have nothing to do with returning a value, called side effects. This is because most common programming languages and paradigms which are in use today were created at times when the computer resources were much more limited than today, and programming - much more cumbersome, so people had bigger problems than the fact that their functions were not mathematically sound.
One type of functions used in programming which strongly resembles mathematical ones are those which convert a value from one type to another, for example, the function which converts a floating-point number to an Integer. That is probably the reason why most functional languages are strongly-typed.
Functional Composition
===
Let's assume that we have two functions, **g: Y → P** and **f: P → G** and the codomain of the first one is the same set as the domain of the second.
![Matching functions](functions_matching.svg)
If we apply the first function **g** to some element from set **Y**, we will get an element of the set **P**. Then, if we apply the second function **f** to *that* element, we will get an element from type **G**.
![Applying one function after another](functions_one_after_another.svg)
We can define a new function, that is the equivalent to performing the operation described above. Let us call it **h: Y → G**. We may say that **h** is the *composition* of **g** and **f**, or **h = f ∘ g** (notice that the first function is on the right, so it's similar to **b = f(g(a)**).
![Functional composition](functions_compose.svg)
Composition is the essence of all things categorical. The key insight is that the sum of two parts is no more complex than the parts themselves.
Question: The definition of functional composition (presented in the second paragraph) relies on the fact that functions are many-to-one relationships between sets. How could functional composition work for many-to-many relationships? Can it work at all?
Representing Composition with Commutative Diagrams
---
In the last diagram, the equivalence between **f ∘ g** and the new function **h** is expressed by the fact that if you follow the arrow **h** for any element of set **Y** you will get to the same element of the set **G** as the one you will get if you follow the **g** and then follow **f**. Diagrams that express such equivalence between sequences of function application are called *commutative diagrams*.
![Functional composition](functions_compose.svg)
If we "zoom-out" the last diagram so it does not show the individual set elements, we get a more general view of functional composition.
![Functional composition for sets](functions_compose_sets.svg)
In fact, because this diagram commutes (that is, all arrows, starting from a given set element ultimately lead to the same corresponding element from the resulting set), enumerating the elements is redundant. Having this insight allows us to redefine functional composition in the following, more visual, way:
The composition of two functions **f** and **g** is a third function **h** defined in such a way that this diagram commutes.
![Functional composition - general definition](functions_compose_general.svg)
This is called an *external diagram*, by the way (and the ones that we saw before are internal).
The Power of Composition
---
To understand how powerful composition is, consider the following: one set being connected to another means that each function from the second set can be transferred to a corresponding function from the first one.
If we have a function **g: P → Y ** from set **P** to set **Y**, then for every function **f** from the set **Y** to any other set, there is a corresponding function **f ∘ g** from the set **P** to the same set. In other words, every time you define a new function from **Y** to some other set, you gain one function from **P** to that same set for free.
![Functional composition connect](morphism_general.svg)
For example, if we again take the relationship between a person and his father as a function, with the set of all people in the world as a domain, and the set of all people that have children as its codomain, then each person whom my father is related to is automatically my relative - my father's father is my grandfather, my father's wife is my mother and so on.
Isomorphisms
===
Let's go back to the function that demonstrated a one-to-one relationship.
![Opposite colors](function_one_one.svg)
Notice that the function is invertible, that is if you flip its arrows you get another valid function:
![Opposite colors](isomorphism_one_one.svg)
Invertible functions are called *isomorphisms*. When there is an invertible function between two sets we can say that the sets are *isomorphic*. For example, the temperature measured in Celcius is isomorphic to the temperature, measured in Fahrenheit.
More formally, two sets **R** and **G** are isomorphic, or **R ≅ G** if there exist functions **f: G → R** and its reverse **g R → G**, such that **f ∘ g = idR** and **g ∘ f = idG** (notice how the identity function comes in handy).
Isomorphism and equality
---
In category theory, the concept of an isomorphism is strongly related to the concept of equality (that is why it is denoted with **≅**, which is almost the same as **=**). This is also related to programming, where if we have a function that convert our object of type A to an object of type B and the other way around we pretty much regard A and B as two formats of the same object.
For example, we all know that everything is equal to itself. Well, if you look closely you would see that the identity function is reversible (its reverse is itself), so each set is also isomorphic to itself.
![The identity function](isomorphism_identity.svg)
Note that an isomorphism between two sets does not imply that their *elements* are similar to one another, as some of the examples might suggest. It rather implies that they have similar *structure*, in other words, a function that involves one of the sets, can easily be converted to a function involving the other set.
![The architecture of isomorphism](isomorphism_general.svg)
For example, if you have a function "is the husband of" that goes from the set of all married men to the set of all married women, and the corresponding function, "is the wife of", that would make the sets of married men and married woman isomorphic (ignoring some exceptions). That is not to say that you are the same person as your significant other, but rather that every statement about you, or every relation you have to some other person or object is also a relation between him/her and the same person or object, and vice versa.
Isomorphisms Between Singleton Sets
---
Between any two singleton sets, we may define the only possible function.
![The only possible function between sungletons](singleton_function.svg)
The function is invertible, which means that all singleton sets are isomorphic to one another.
![Isomorphic singletons](singleton_isomorphism.svg)
Following the logic from the last paragraph, each statement about something that is one of a kind can be transferred to a statement about another thing that is one of a kind.
Question: Try to come up with a good example that shows how a statement that demonstrates the isomorphism between singleton sets (I obviously couldn't). Consider that all of people and objects are sharing one and the same universe.
Task: Think of two singleton sets, and try to pinpoint the relation that they have.

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 930 KiB

After

Width:  |  Height:  |  Size: 942 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 953 KiB

After

Width:  |  Height:  |  Size: 965 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 932 KiB

After

Width:  |  Height:  |  Size: 945 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 933 KiB

After

Width:  |  Height:  |  Size: 946 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 933 KiB

After

Width:  |  Height:  |  Size: 945 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 934 KiB

After

Width:  |  Height:  |  Size: 946 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 934 KiB

After

Width:  |  Height:  |  Size: 947 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 937 KiB

After

Width:  |  Height:  |  Size: 949 KiB

View File

@ -1,395 +1,395 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 477.5" enable-background="new 0 0 595.3 477.5" xml:space="preserve">
<g id="Layer_3">
<path opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" d="M441.3,286.8c0,77.8-53.9,120.4-120.4,120.4
s-120.4-53.9-120.4-120.4S254.5,166.4,321,166.4S441.3,220.3,441.3,286.8z"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="312.1" cy="283.3" r="120.4"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="129.3" cy="389.8" r="72.4"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="122.1" cy="385.2" r="72.4"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="483.6" cy="400.8" r="47.3"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="479" cy="397.8" r="47.3"/>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="271.8" cy="359.8" r="23.1"/>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M251.9,282.2c0,0,1-0.1,2.9-0.3c1.9-0.1,4.6-0.5,8.1-0.7c7-0.4,17.1-0.7,29.2,0.2c12,0.9,26,3,40.6,7
c14.6,3.9,29.6,9.9,43.8,17.5c7,3.9,13.9,8.2,20.4,12.8c6.4,4.6,12.6,9.4,18.3,14.4c1.5,1.2,2.8,2.5,4.2,3.7
c1.4,1.2,2.7,2.5,4,3.8c1.3,1.3,2.6,2.5,3.9,3.8c1.2,1.3,2.4,2.5,3.6,3.8c0.6,0.6,1.2,1.2,1.8,1.9c0.6,0.6,1.1,1.3,1.7,1.9
c1.1,1.3,2.2,2.5,3.3,3.7c2.1,2.5,4.2,4.9,6,7.3c7.6,9.4,13.2,17.8,17.1,23.7c0.6,0.9,0.9,1.4,0.9,1.4l-9.7,6.2
c7.7,3.8,15.2,8,22.8,12.4c0.1-8.7-0.1-17.6-0.6-26.6l-9.7,6.2c0,0-0.3-0.5-0.9-1.4c-3.9-6-9.6-14.4-17.3-24
c-1.9-2.4-4-4.8-6.1-7.3c-1.1-1.2-2.2-2.5-3.4-3.7c-0.6-0.6-1.1-1.3-1.7-1.9c-0.6-0.6-1.2-1.3-1.8-1.9c-1.2-1.3-2.4-2.6-3.7-3.8
c-1.3-1.3-2.6-2.5-3.9-3.8c-1.3-1.3-2.7-2.6-4.1-3.8c-1.4-1.3-2.8-2.6-4.2-3.8c-5.8-5-12-9.9-18.6-14.6c-6.6-4.6-13.5-9-20.7-13
c-14.4-7.7-29.7-13.9-44.5-17.8c-14.8-4.1-29-6.3-41.2-7.1c-12.2-0.9-22.5-0.6-29.6-0.2c-3.6,0.2-6.4,0.6-8.3,0.7
c-1.9,0.2-2.9,0.3-2.9,0.3L251.9,282.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M357.2,331.3c0,0,0.5,0.1,1.3,0.2c0.9,0.2,2.2,0.3,3.8,0.7c3.3,0.7,7.9,1.9,13.3,3.9
c5.4,1.9,11.5,4.6,17.9,8c6.3,3.4,12.8,7.5,19.1,12c12.5,9,23.8,19.5,31.9,27.8c4,4.2,7.2,7.8,9.4,10.3c0.5,0.6,0.8,1,0.8,1
l-8.8,7.6c8,2.6,16.1,5.7,24.1,9.3c-0.9-8.7-2.3-17.6-4.1-26.5l-8.8,7.6c0,0-0.3-0.4-0.8-1c-2.2-2.6-5.5-6.2-9.5-10.4
c-8.1-8.4-19.6-19.1-32.3-28.2c-6.3-4.5-13-8.8-19.4-12.2c-6.5-3.5-12.8-6.2-18.3-8.2c-5.5-2-10.3-3.3-13.7-4
c-1.7-0.4-3-0.6-3.9-0.8c-0.9-0.2-1.4-0.3-1.4-0.3L357.2,331.3z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M296.8,359.1c0,0,0.7,0,1.9,0c1.2,0,3.1,0,5.4,0c4.6,0.1,11.3,0.5,19.2,1.5c7.9,1,17.2,2.6,27,4.7
c9.8,2.2,20.1,5,30.3,8.2c20.4,6.4,40.1,15,54,22.9c7,3.9,12.5,7.6,16.3,10.3c0.7,0.5,1.1,0.8,1.1,0.8l-6.9,9.3
c8.1,0.6,16.4,1.8,24.7,4.6c-1.8-8.6-5.1-17.3-9.2-25.8l-6.9,9.3c0,0-0.4-0.3-1.2-0.8c-3.9-2.8-9.5-6.6-16.6-10.5
c-14.1-8-34-16.7-54.6-23.2c-10.3-3.3-20.7-6.1-30.6-8.3c-9.9-2.2-19.2-3.8-27.3-4.8c-8-1-14.8-1.4-19.6-1.5
c-2.4-0.1-4.2-0.1-5.5,0c-1.3,0-2,0-2,0L296.8,359.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M377.1,267.3c0,0,1.8,0.5,5,1.5c0.8,0.2,1.7,0.5,2.6,0.8c0.5,0.1,1,0.3,1.5,0.5c0.5,0.2,1,0.4,1.6,0.6
c2.1,0.8,4.6,1.7,7.2,2.8c2.5,1.2,5.3,2.5,8.2,4c1.4,0.8,2.8,1.6,4.3,2.5c1.5,0.9,3,1.7,4.4,2.7c1.5,1,2.9,2,4.4,3
c0.4,0.3,0.8,0.5,1.1,0.8l1.1,0.9c0.7,0.6,1.4,1.2,2.2,1.7c0.7,0.6,1.4,1.2,2.2,1.7l1.1,0.9c0.4,0.3,0.7,0.6,1,0.9
c1.4,1.3,2.8,2.6,4.1,3.8c10.9,10.4,19.5,23.1,25,32.9c1.5,2.4,2.6,4.8,3.6,6.8c0.5,1,1,2,1.5,2.9c0.5,0.9,0.8,1.7,1.1,2.5
c0.3,0.7,0.5,1.1,0.5,1.1l-10.5,4.8c1.7,1.2,3.5,2.3,5.2,3.6l5.1,3.9c0.8,0.7,1.7,1.3,2.5,2l2.5,2.1l5,4.3l1.2-6.5l0.6-3.3
c0.2-1.1,0.3-2.2,0.5-3.3l0.9-6.7c0.2-2.3,0.4-4.5,0.6-6.8l-10.5,4.8c0,0-0.2-0.4-0.5-1.2c-0.4-0.8-0.7-1.6-1.2-2.5
c-0.5-0.9-1-1.9-1.5-2.9c-1.1-2.1-2.2-4.5-3.7-7c-5.6-10.1-14.3-23-25.5-33.7c-1.4-1.3-2.8-2.6-4.2-3.9c-0.4-0.3-0.7-0.7-1.1-1
l-1.1-0.9c-0.7-0.6-1.5-1.2-2.2-1.8c-0.7-0.6-1.5-1.2-2.2-1.8l-1.1-0.9c-0.4-0.3-0.8-0.5-1.1-0.8c-1.5-1.1-3.1-2.1-4.5-3.1
c-1.5-1.1-3-1.9-4.5-2.8c-1.5-0.9-3-1.7-4.4-2.6c-2.9-1.5-5.8-2.8-8.4-4.1c-2.7-1.1-5.2-2-7.4-2.9c-0.5-0.2-1.1-0.4-1.6-0.6
c-0.5-0.2-1-0.3-1.5-0.5c-1-0.3-1.9-0.6-2.7-0.8c-3.2-1-5.1-1.5-5.1-1.5L377.1,267.3z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M306.5,205.7c0,0,3.7,0.4,10.2,1.2c6.5,0.9,15.7,2.3,26.7,4.7c10.9,2.4,23.6,6,36.6,11.1
c0.8,0.3,1.6,0.6,2.5,1c0.8,0.3,1.6,0.7,2.4,1.1c1.6,0.7,3.3,1.4,4.9,2.1c1.6,0.8,3.3,1.6,4.9,2.4c0.8,0.4,1.6,0.8,2.5,1.2
c0.8,0.4,1.6,0.9,2.4,1.3c6.5,3.4,12.8,7.3,18.9,11.6c6.1,4.3,11.8,9.1,17,14.2c1.3,1.3,2.6,2.5,3.8,3.9c1.2,1.3,2.4,2.7,3.6,4
c1.2,1.3,2.3,2.8,3.4,4.1c0.6,0.7,1.1,1.4,1.7,2.1c0.5,0.7,1,1.4,1.5,2.1c4.2,5.6,7.6,11.4,10.7,17c1.4,2.9,2.9,5.6,4,8.4
c0.6,1.4,1.2,2.7,1.7,4.1c0.5,1.4,1,2.7,1.5,4c3.8,10.5,5.7,19.6,6.9,26c0.2,1,0.2,1.6,0.2,1.6l-11.4,1.8c1.3,1.6,2.7,3.2,4,4.8
c1.3,1.6,2.5,3.3,3.8,5l1.9,2.6l1.8,2.7l3.6,5.5l3-5.9l1.5-3l1.3-3.1c0.9-2.1,1.8-4.2,2.7-6.3c0.8-2.1,1.6-4.3,2.4-6.5
l-11.4,1.8c0,0-0.1-0.6-0.2-1.6c-1.2-6.5-3.1-15.9-7-26.6c-0.5-1.3-1-2.7-1.5-4.1c-0.6-1.4-1.2-2.8-1.8-4.2
c-1.2-2.9-2.6-5.7-4.1-8.6c-3.1-5.8-6.6-11.7-10.9-17.4c-0.5-0.7-1.1-1.4-1.6-2.2c-0.6-0.7-1.1-1.4-1.7-2.1
c-1.2-1.4-2.3-2.8-3.5-4.2c-1.2-1.4-2.5-2.7-3.7-4.1c-1.2-1.4-2.6-2.6-3.9-4c-5.4-5.2-11.2-10.2-17.4-14.5
c-6.2-4.4-12.6-8.4-19.3-11.9c-0.8-0.4-1.6-0.9-2.5-1.3c-0.8-0.4-1.7-0.8-2.5-1.2c-1.7-0.8-3.3-1.6-5-2.4
c-1.7-0.7-3.3-1.4-5-2.2c-0.8-0.4-1.7-0.7-2.5-1.1c-0.8-0.3-1.7-0.6-2.5-1c-13.2-5.2-26-8.8-37.1-11.2
c-11.1-2.5-20.4-3.8-27-4.7c-6.6-0.8-10.3-1.2-10.3-1.2L306.5,205.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M391.3,210.8c0,0,0.7,0.2,1.9,0.4c0.6,0.1,1.4,0.3,2.3,0.5c0.9,0.2,1.9,0.4,3.1,0.8
c1.1,0.4,2.4,0.7,3.8,1.2c1.4,0.4,2.8,1,4.4,1.6c0.8,0.3,1.6,0.6,2.4,0.9c0.8,0.4,1.6,0.7,2.5,1.1c0.8,0.4,1.7,0.8,2.6,1.2
c0.9,0.4,1.8,0.9,2.7,1.4c7.2,3.9,15.2,9.3,22.7,16.4c0.9,0.9,1.8,1.8,2.8,2.7c0.5,0.5,0.9,0.9,1.4,1.4l1.3,1.5
c0.9,1,1.8,1.9,2.7,2.9c0.9,1,1.7,2.1,2.6,3.1l1.3,1.6l1.2,1.6c0.8,1.1,1.7,2.2,2.5,3.2c0.8,1.1,1.6,2.2,2.4,3.4l1.2,1.7
l1.1,1.7l2.2,3.5c0.7,1.2,1.4,2.4,2.1,3.6c1.4,2.3,2.6,4.8,3.9,7.2c2.4,4.9,4.6,9.7,6.4,14.5c3.7,9.6,6.3,19,7.8,27.1
c1.5,8.1,2.1,15,2.3,19.8c0,0.9,0.1,1.4,0.1,1.4l-11.6,0.3c4.6,6.7,8.6,14,11.5,22.3c5.7-6.7,10.7-14.5,14.8-23l-11.6,0.3
c0,0,0-0.5-0.1-1.4c-0.1-4.9-0.8-11.9-2.3-20.2c-1.5-8.3-4.1-17.8-7.9-27.6c-1.8-4.9-4.1-9.9-6.6-14.8c-1.3-2.4-2.5-4.9-4-7.3
c-0.7-1.2-1.4-2.4-2.1-3.6l-2.3-3.5l-1.1-1.8l-1.2-1.7c-0.8-1.1-1.6-2.3-2.4-3.4c-0.9-1.1-1.7-2.2-2.6-3.3l-1.3-1.7l-1.3-1.6
c-0.9-1.1-1.8-2.1-2.7-3.2c-0.9-1-1.9-2-2.8-3l-1.4-1.5c-0.5-0.5-1-0.9-1.4-1.4c-1-0.9-1.9-1.9-2.9-2.8
c-7.7-7.2-15.9-12.9-23.4-16.8c-0.9-0.5-1.8-1-2.7-1.5c-0.9-0.4-1.8-0.8-2.7-1.2c-0.9-0.4-1.7-0.8-2.6-1.2
c-0.8-0.4-1.7-0.7-2.5-1c-1.6-0.6-3.1-1.2-4.5-1.7c-1.4-0.4-2.7-0.8-3.9-1.2c-1.2-0.4-2.3-0.6-3.2-0.8c-0.9-0.2-1.7-0.4-2.4-0.6
c-1.3-0.3-2-0.5-2-0.5L391.3,210.8z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M255.2,200c0,0-0.9,0.1-2.5,0.3c-0.8,0.1-1.8,0.2-3,0.3c-0.6,0.1-1.2,0.1-1.9,0.2
c-0.7,0.1-1.4,0.2-2.2,0.3c-1.5,0.2-3.2,0.5-5.1,0.8c-1.8,0.3-3.8,0.8-5.9,1.3c-2.1,0.4-4.3,1.1-6.6,1.7c-1.2,0.3-2.4,0.6-3.6,1
c-1.2,0.4-2.4,0.8-3.7,1.2c-10,3.4-21.4,8.4-32.7,15.2c-11.3,6.8-22.7,15.1-33.2,24.5l-3.9,3.5c-1.3,1.2-2.5,2.4-3.8,3.6
l-1.9,1.8l-1.8,1.9c-1.2,1.2-2.4,2.5-3.6,3.7c-4.7,5.1-9.3,10.1-13.4,15.2c-8.4,10.2-15.4,20.3-20.8,29.3
c-5.5,9-9.5,16.9-12.1,22.4c-0.4,0.9-0.6,1.4-0.6,1.4l-10.5-4.8c0.6,9.2,1.9,18.2,3.9,26.7c6.4-6,13.1-11.2,20-15.9l-10.5-4.8
c0,0,0.2-0.5,0.6-1.4c2.6-5.5,6.5-13.2,11.9-22.1c5.4-8.9,12.3-18.9,20.6-29c4.1-5.1,8.6-10.1,13.3-15c1.2-1.2,2.4-2.4,3.6-3.7
l1.8-1.8l1.9-1.8c1.2-1.2,2.5-2.4,3.8-3.6l3.9-3.5c10.3-9.3,21.6-17.4,32.7-24.1c11.1-6.7,22.3-11.6,32.1-14.9
c1.2-0.4,2.4-0.8,3.6-1.2c1.2-0.4,2.4-0.7,3.5-1c2.3-0.6,4.4-1.3,6.5-1.7c2.1-0.4,4-0.9,5.8-1.2c1.8-0.3,3.4-0.6,4.9-0.8
c0.7-0.1,1.4-0.3,2.1-0.3c0.7-0.1,1.3-0.1,1.9-0.2c1.2-0.1,2.2-0.2,3-0.3c1.6-0.2,2.5-0.3,2.5-0.3L255.2,200z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M203.7,285.2c0,0-1.7,0.4-4.7,1.2c-1.5,0.4-3.3,1-5.3,1.6c-2,0.7-4.3,1.4-6.8,2.4
c-4.9,1.9-10.5,4.3-16.4,7.2c-5.9,2.9-12,6.3-17.9,10c-11.9,7.3-23.2,15.5-31.4,22c-4.1,3.2-7.4,6-9.8,8
c-0.6,0.5-0.9,0.8-0.9,0.8l-7.5-8.8c-1.6,4.2-3.1,8.5-4.4,12.8c-0.7,2.1-1.3,4.3-1.9,6.4c-0.6,2.2-1.2,4.3-1.5,6.5
c2-0.8,4.1-1.3,6.2-1.9c2.1-0.5,4.2-1,6.3-1.5c4.2-0.9,8.4-1.7,12.6-2.4l-7.5-8.8c0,0,0.3-0.3,0.9-0.8c2.3-1.9,5.6-4.7,9.7-7.9
c8.1-6.4,19.3-14.6,31.1-21.8c5.9-3.6,11.9-7,17.7-9.8c5.8-2.9,11.3-5.3,16.1-7.1c2.4-0.9,4.6-1.7,6.6-2.3
c2-0.6,3.7-1.1,5.2-1.6c2.9-0.7,4.6-1.2,4.6-1.2L203.7,285.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M246.6,360.9c0,0-0.4,0.1-1.1,0.2c-0.7,0.1-1.7,0.3-3,0.6c-2.6,0.6-6.2,1.5-10.5,2.9
c-8.5,2.8-19.5,7.7-29.9,13.5c-10.4,5.7-20.4,12.3-27.6,17.6c-3.6,2.6-6.6,4.9-8.6,6.6c-0.6,0.5-0.9,0.8-0.9,0.8l-7.3-9
c-1.8,4.3-3.4,8.6-4.8,13c-0.4,1.1-0.7,2.2-1,3.3c-0.3,1.1-0.6,2.2-0.9,3.3c-0.5,2.3-0.9,4.5-0.9,6.8c1.9-1.1,3.9-1.8,5.8-2.4
c1-0.3,2-0.6,3-0.8c1-0.3,2-0.5,3-0.7c4.1-0.9,8.2-1.5,12.3-2.1l-7.3-9c0,0,0.3-0.3,0.9-0.7c2-1.6,4.9-3.9,8.5-6.5
c7.1-5.2,17-11.7,27.3-17.3c10.3-5.7,21.1-10.5,29.4-13.2c4.2-1.4,7.7-2.3,10.2-2.9c1.2-0.3,2.2-0.4,2.9-0.6
c0.7-0.1,1-0.2,1-0.2L246.6,360.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M309.5,328.2c0,0-2.5-0.4-6.9-1c-2.2-0.3-4.9-0.5-8-0.9c-1.5-0.2-3.2-0.3-4.9-0.4
c-1.7-0.1-3.5-0.2-5.4-0.3c-7.6-0.3-16.5-0.1-25.9,0.7c-9.5,0.8-19.5,2.3-29.4,4.6c-9.9,2.2-19.6,5.1-28.5,8.3
c-8.9,3.2-17,6.8-23.8,10.2c-6.8,3.4-12.3,6.6-16.1,8.9c-0.7,0.5-1.2,0.7-1.2,0.7l-6.2-9.8c-2.3,4.1-4.4,8.2-6.3,12.4
c-0.9,2.1-1.8,4.3-2.6,6.5c-0.4,1.1-0.7,2.2-1,3.3c-0.1,0.6-0.2,1.1-0.3,1.7c-0.1,0.6-0.1,1.2-0.1,1.7c0.5-0.3,1-0.5,1.4-0.7
c0.5-0.2,1-0.3,1.5-0.5c1-0.3,2-0.5,3-0.7c2-0.4,4.1-0.7,6.2-0.9c4.1-0.4,8.2-0.6,12.4-0.6l-6.2-9.8c0,0,0.4-0.3,1.2-0.7
c3.7-2.3,9.1-5.4,15.8-8.8c6.7-3.3,14.7-6.9,23.5-10.1c8.8-3.2,18.4-6,28.1-8.2c9.7-2.2,19.6-3.7,29-4.5
c9.3-0.8,18.1-0.9,25.5-0.7c1.9,0.1,3.7,0.2,5.4,0.3c1.7,0.1,3.3,0.2,4.8,0.4c3,0.3,5.7,0.5,7.8,0.8c4.3,0.6,6.8,1,6.8,1
L309.5,328.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M340.8,206c0,0-4.1,0.5-11.4,1.4c-3.6,0.5-7.9,1.4-12.9,2.2c-2.5,0.6-5.1,1.2-7.9,1.8
c-1.4,0.3-2.8,0.6-4.3,1c-1.4,0.4-2.9,0.8-4.4,1.2c-12,3.3-25.8,8.2-39.9,14.9c-14.1,6.7-28.4,15.2-41.9,25
c-13.5,9.7-26,20.8-36.9,31.9c-1.4,1.4-2.7,2.8-4,4.2c-1.3,1.4-2.6,2.8-3.9,4.2c-1.2,1.4-2.5,2.8-3.7,4.2
c-1.2,1.4-2.4,2.7-3.5,4.1c-1.1,1.4-2.3,2.7-3.4,4.1c-1.1,1.3-2.1,2.7-3.2,4c-2.1,2.6-4,5.3-5.8,7.8
c-7.3,10.1-12.4,19.2-15.7,25.8c-0.5,1-0.7,1.5-0.7,1.5l-10.4-5l0.1,3.5l0.3,3.6c0.2,2.3,0.5,4.7,0.8,7c0.1,1.1,0.4,2.3,0.6,3.5
l0.4,1.7l0.2,0.8l0.2,0.9c0.3,1.1,0.7,2.2,1,3.3c0.5,1.1,0.9,2.1,1.4,3.1c0.6-0.9,1.2-1.8,1.9-2.6c0.7-0.8,1.4-1.6,2.1-2.3
l0.5-0.5l0.6-0.5l1.2-1c0.8-0.7,1.5-1.3,2.3-2c1.6-1.3,3.2-2.5,4.9-3.6l2.5-1.7l2.6-1.6l-10.4-5c0,0,0.3-0.5,0.7-1.5
c3.2-6.4,8.3-15.3,15.4-25.3c1.8-2.5,3.7-5.1,5.7-7.7c1-1.3,2-2.7,3.1-4c1.1-1.3,2.2-2.7,3.3-4c1.1-1.4,2.3-2.7,3.5-4.1
c1.2-1.4,2.4-2.7,3.6-4.1c1.3-1.4,2.5-2.7,3.8-4.1c1.3-1.4,2.6-2.8,4-4.1c10.8-11,23.1-21.9,36.5-31.5
c13.3-9.6,27.5-18,41.4-24.7c13.9-6.6,27.5-11.5,39.4-14.7c1.5-0.4,2.9-0.8,4.4-1.2c1.4-0.4,2.8-0.7,4.2-1
c2.7-0.6,5.3-1.2,7.8-1.8c4.9-0.9,9.2-1.7,12.8-2.2c7.1-0.9,11.2-1.4,11.2-1.4L340.8,206z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M328.4,266c0,0-0.9,0.1-2.6,0.3c-1.7,0.2-4.2,0.4-7.3,0.9c-6.3,1-15.2,2.7-25.6,5.8
c-10.4,3.1-22.2,7.8-34.2,14c-12,6.2-24.3,13.9-35.8,22.7l-4.3,3.3c-1.4,1.1-2.8,2.3-4.2,3.4c-2.8,2.2-5.5,4.6-8.2,6.9
c-5.3,4.7-10.4,9.5-15.1,14.4c-4.8,4.8-9.1,9.7-13.2,14.3c-4,4.7-7.7,9.3-11,13.6c-6.5,8.6-11.5,16.2-14.7,21.6
c-0.5,0.9-0.8,1.4-0.8,1.4l-10-5.9c-0.3,9.2-0.1,18.4,1.2,27c6.9-5.4,14.1-9.8,21.5-13.7l-10-5.9c0,0,0.3-0.5,0.8-1.3
c3.2-5.3,8-12.8,14.5-21.4c3.2-4.3,6.9-8.8,10.8-13.4c4-4.6,8.3-9.4,13.1-14.2c4.7-4.8,9.7-9.5,14.9-14.2
c2.7-2.3,5.3-4.7,8.1-6.9c1.4-1.1,2.8-2.2,4.1-3.4l4.2-3.3c11.3-8.7,23.5-16.2,35.3-22.4c11.9-6.2,23.5-10.8,33.7-13.8
c10.2-3.1,19-4.7,25.1-5.7c3.1-0.5,5.5-0.7,7.2-0.9c1.7-0.2,2.5-0.3,2.5-0.3L328.4,266z"/>
</g>
</g>
</g>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="327.9" cy="85.3" r="61.3"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="322.2" cy="78.4" r="61.3"/>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="322.2" cy="48.9" r="13.1"/>
<g>
<path fill="#808285" d="M325,54.3h-3.4v-6.6c0-0.8,0-1.5,0.1-2.2c-0.2,0.3-0.5,0.5-0.8,0.8l-1.4,1.2l-1.7-2.1l4.3-3.5h3V54.3z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="357.4" cy="69.3" r="13.1"/>
<g>
<path fill="#808285" d="M361.7,74.7h-9v-2.2l3-3.1c0.9-0.9,1.4-1.5,1.7-1.9s0.5-0.6,0.6-0.9c0.1-0.2,0.2-0.5,0.2-0.7
c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.4,0-0.8,0.1-1.2,0.3s-0.9,0.6-1.4,1l-1.8-2.2c0.6-0.6,1.2-1,1.6-1.2
c0.4-0.2,0.9-0.4,1.4-0.6c0.5-0.1,1.1-0.2,1.7-0.2c0.8,0,1.5,0.1,2.2,0.4s1.1,0.7,1.5,1.2c0.3,0.5,0.5,1.1,0.5,1.8
c0,0.5-0.1,0.9-0.2,1.4c-0.1,0.4-0.3,0.8-0.6,1.2c-0.3,0.4-0.6,0.8-1,1.3c-0.4,0.4-1.3,1.3-2.7,2.5v0.1h4.7V74.7z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="361.7" cy="103.9" r="13.1"/>
<g>
<path fill="#808285" d="M365.6,99.6c0,0.8-0.2,1.4-0.7,2c-0.5,0.6-1.2,1-2,1.2v0.1c2.1,0.3,3.1,1.2,3.1,2.9c0,1.2-0.5,2.1-1.4,2.7
c-0.9,0.7-2.2,1-3.8,1c-0.7,0-1.3,0-1.9-0.1c-0.6-0.1-1.2-0.3-1.9-0.5V106c0.5,0.3,1.1,0.5,1.7,0.6c0.6,0.1,1.1,0.2,1.6,0.2
c0.7,0,1.3-0.1,1.6-0.3c0.3-0.2,0.5-0.5,0.5-1c0-0.3-0.1-0.6-0.3-0.8s-0.5-0.3-0.9-0.4c-0.4-0.1-0.9-0.1-1.5-0.1H359v-2.5h0.8
c1.7,0,2.6-0.4,2.6-1.3c0-0.3-0.1-0.6-0.4-0.7c-0.3-0.2-0.6-0.2-1-0.2c-0.8,0-1.6,0.3-2.5,0.8l-1.4-2.2c0.7-0.5,1.3-0.8,2-1
c0.7-0.2,1.5-0.3,2.4-0.3c1.3,0,2.3,0.3,3,0.8C365.3,98,365.6,98.7,365.6,99.6z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="298.1" cy="102.6" r="13.1"/>
<g>
<path fill="#808285" d="M302.8,106h-1.2v2h-2.8v-2h-4.2v-2.1l4.4-6.4h2.6v6.4h1.2V106z M298.9,103.9v-1.2c0-0.2,0-0.5,0-0.9
c0-0.4,0-0.6,0-0.6h-0.1c-0.2,0.4-0.3,0.7-0.6,1l-1.2,1.7H298.9z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="80.5" cy="363.9" r="13.1"/>
<g>
<path fill="#808285" d="M83.3,369.3h-3.4v-6.6c0-0.8,0-1.5,0.1-2.2c-0.2,0.3-0.5,0.5-0.8,0.8l-1.4,1.2l-1.7-2.1l4.3-3.5h3V369.3z"
/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="123.2" cy="377.7" r="13.1"/>
<g>
<path fill="#808285" d="M127.5,383.1h-9v-2.2l3-3.1c0.9-0.9,1.4-1.5,1.7-1.9c0.3-0.3,0.5-0.6,0.6-0.9c0.1-0.2,0.2-0.5,0.2-0.7
c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.4,0-0.8,0.1-1.2,0.3c-0.4,0.2-0.9,0.6-1.4,1l-1.8-2.2c0.6-0.6,1.2-1,1.6-1.2
c0.4-0.2,0.9-0.4,1.4-0.6c0.5-0.1,1.1-0.2,1.7-0.2c0.8,0,1.5,0.1,2.2,0.4c0.6,0.3,1.1,0.7,1.5,1.2c0.3,0.5,0.5,1.1,0.5,1.8
c0,0.5-0.1,0.9-0.2,1.4c-0.1,0.4-0.3,0.8-0.6,1.2c-0.3,0.4-0.6,0.8-1,1.3c-0.4,0.4-1.3,1.3-2.7,2.5v0.1h4.7V383.1z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="134.7" cy="423.5" r="13.1"/>
<g>
<path fill="#808285" d="M139.6,419.1c0,0.8-0.2,1.4-0.7,2c-0.5,0.6-1.2,1-2,1.2v0.1c2.1,0.3,3.1,1.2,3.1,2.9
c0,1.2-0.5,2.1-1.4,2.7c-0.9,0.7-2.2,1-3.8,1c-0.7,0-1.3,0-1.9-0.1c-0.6-0.1-1.2-0.3-1.9-0.5v-2.8c0.5,0.3,1.1,0.5,1.7,0.6
c0.6,0.1,1.1,0.2,1.6,0.2c0.7,0,1.3-0.1,1.6-0.3c0.3-0.2,0.5-0.5,0.5-1c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.4
c-0.4-0.1-0.9-0.1-1.5-0.1H133v-2.5h0.8c1.7,0,2.6-0.4,2.6-1.3c0-0.3-0.1-0.6-0.4-0.7c-0.3-0.2-0.6-0.2-1-0.2
c-0.8,0-1.6,0.3-2.5,0.8l-1.4-2.2c0.7-0.5,1.3-0.8,2-1c0.7-0.2,1.5-0.3,2.4-0.3c1.3,0,2.3,0.3,3,0.8
C139.2,417.5,139.6,418.2,139.6,419.1z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="482.2" cy="371.4" r="13.1"/>
<g>
<path fill="#808285" d="M485,376.8h-3.4v-6.6c0-0.8,0-1.5,0.1-2.2c-0.2,0.3-0.5,0.5-0.8,0.8l-1.4,1.2l-1.7-2.1l4.3-3.5h3V376.8z"
/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="486.9" cy="414.7" r="13.1"/>
<g>
<path fill="#808285" d="M491.2,420.1h-9v-2.2l3-3.1c0.9-0.9,1.4-1.5,1.7-1.9c0.3-0.3,0.5-0.6,0.6-0.9c0.1-0.2,0.2-0.5,0.2-0.7
c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.4,0-0.8,0.1-1.2,0.3s-0.9,0.6-1.4,1l-1.8-2.2c0.6-0.6,1.2-1,1.6-1.2
c0.4-0.2,0.9-0.4,1.4-0.6s1.1-0.2,1.7-0.2c0.8,0,1.5,0.1,2.2,0.4c0.6,0.3,1.1,0.7,1.5,1.2c0.3,0.5,0.5,1.1,0.5,1.8
c0,0.5-0.1,0.9-0.2,1.4c-0.1,0.4-0.3,0.8-0.6,1.2c-0.3,0.4-0.6,0.8-1,1.3c-0.4,0.4-1.3,1.3-2.7,2.5v0.1h4.7V420.1z"/>
</g>
<g>
<path fill="#6D6E71" d="M258.5,363.3l1.5-2.1c0.7,0.7,1.6,1.1,2.5,1.1c1.1,0,1.7-0.4,1.7-1.1c0-0.9-0.5-1.4-3-1.4v-2.3
c2,0,2.6-0.5,2.6-1.4c0-0.7-0.4-1.1-1.3-1.1c-0.8,0-1.4,0.3-2.1,1l-1.6-2c1.2-1,2.4-1.6,3.9-1.6c2.7,0,4.4,1.2,4.4,3.4
c0,1.2-0.6,2-1.9,2.6v0.1c1.4,0.4,2.3,1.4,2.3,2.9c0,2.3-2.2,3.5-4.7,3.5C260.9,365,259.4,364.4,258.5,363.3z"/>
<path fill="#6D6E71" d="M269.3,367c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L269.3,367z"/>
<path fill="#6D6E71" d="M275.2,363c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V363z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="331.8" cy="329.6" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M318.8,332.8c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V332.8z"/>
<path fill="#6D6E71" d="M329.3,336.8c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L329.3,336.8z"/>
<path fill="#6D6E71" d="M335.2,332.8c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V332.8z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="351.7" cy="265.8" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M338.4,269.4l1.5-2.1c0.7,0.7,1.6,1.1,2.5,1.1c1.1,0,1.7-0.4,1.7-1.1c0-0.9-0.5-1.4-3-1.4v-2.3
c2,0,2.6-0.5,2.6-1.4c0-0.7-0.4-1.1-1.3-1.1c-0.8,0-1.4,0.3-2.1,1l-1.6-2c1.2-1,2.4-1.6,3.9-1.6c2.7,0,4.4,1.2,4.4,3.4
c0,1.2-0.6,2-1.9,2.6v0.1c1.4,0.4,2.3,1.4,2.3,2.9c0,2.3-2.2,3.5-4.7,3.5C340.7,271.1,339.3,270.4,338.4,269.4z"/>
<path fill="#6D6E71" d="M349.1,273c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L349.1,273z"/>
<path fill="#6D6E71" d="M355.6,268.2h2.6V262h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V268.2z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="227.2" cy="283.3" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M214.8,285.7h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V285.7z"/>
<path fill="#6D6E71" d="M224.7,290.5c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L224.7,290.5z"/>
<path fill="#6D6E71" d="M230.6,286.5c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V286.5z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="281.3" cy="204.1" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M268.9,206.5h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V206.5z"/>
<path fill="#6D6E71" d="M278.8,211.3c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L278.8,211.3z"/>
<path fill="#6D6E71" d="M285.2,206.5h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V206.5z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="366.4" cy="208.3" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M353.4,211.5c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.8-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V211.5z"/>
<path fill="#6D6E71" d="M363.9,215.5c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L363.9,215.5z"/>
<path fill="#6D6E71" d="M370.3,210.7h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V210.7z"/>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M282.9,181.1c0,0,0.2-1.6,0.5-4.3c0.1-0.7,0.2-1.5,0.3-2.3c0.1-0.8,0.3-1.7,0.5-2.7c0.2-1,0.4-2,0.6-3
c0.1-0.5,0.2-1.1,0.3-1.6c0.1-0.6,0.3-1.1,0.5-1.7c1.3-4.6,3-9.9,5.5-15.4c0.6-1.4,1.2-2.8,1.9-4.2c0.7-1.4,1.4-2.8,2.2-4.2
c1.4-2.8,3.2-5.5,4.8-8.3c6.8-10.9,15.1-20.8,21.7-27.9c3.3-3.5,6.2-6.3,8.2-8.3c0.5-0.5,0.9-0.8,0.9-0.8l7.9,8.4
c2.2-8.1,5-16.2,8.3-24.3c-8.7,1.2-17.5,2.9-26.4,5.2l7.9,8.4c0,0-0.3,0.3-0.9,0.9c-2,2-5,4.8-8.3,8.4
c-6.7,7.1-15.2,17.2-22.1,28.4c-1.7,2.8-3.4,5.6-4.9,8.5c-0.8,1.4-1.5,2.9-2.2,4.3c-0.7,1.4-1.3,2.9-1.9,4.3
c-2.6,5.6-4.4,11.1-5.7,15.9c-0.2,0.6-0.4,1.2-0.5,1.7c-0.1,0.6-0.2,1.1-0.4,1.7c-0.2,1.1-0.4,2.2-0.7,3.1
c-0.2,1-0.4,1.9-0.5,2.8c-0.1,0.9-0.2,1.7-0.3,2.4c-0.3,2.9-0.5,4.5-0.5,4.5L282.9,181.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M366.4,186.9c0,0,0-0.8,0.1-2.1c0.1-1.3,0.2-3.2,0.3-5.5c0.2-4.5,0.4-10.6,0.4-16.6
c0-6.1-0.2-12.1-0.4-16.7c-0.1-2.3-0.3-4.2-0.3-5.5c-0.1-0.7-0.1-1.1-0.1-1.1l11.5-0.9c-2.5-3.8-5.1-7.6-7.8-11.2
c-2.7-3.6-5.5-7.1-8.4-10.4c-2.8,8.3-6.3,16.1-10.1,23.6l11.5-0.9c0,0,0,0.4,0.1,1c0.1,1.3,0.2,3.2,0.3,5.4
c0.2,4.5,0.4,10.5,0.4,16.5c0,6-0.2,12-0.4,16.5c-0.1,2.3-0.2,4.1-0.3,5.4c-0.1,1.3-0.1,2.1-0.1,2.1L366.4,186.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M228.8,260c0,0-0.1-0.7-0.1-2.1c0-0.7-0.1-1.5-0.2-2.5c0-0.5-0.1-1-0.1-1.6c0-0.6,0-1.2,0-1.8
c-0.2-5.1,0.1-12.5,1.5-21.3c1.4-8.7,4.2-18.7,8.7-28.9c2.3-5,4.9-10.1,8-15c3.1-4.9,6.6-9.7,10.4-14.2c1-1.1,2-2.2,2.9-3.3
c1-1.1,2-2.2,3-3.2c1-1.1,2-2.1,3.1-3.2c1.1-1,2.1-2,3.2-3c2.1-2,4.3-3.9,6.4-5.8c2.2-1.8,4.3-3.7,6.5-5.4
c8.6-7,17.2-13,24.7-17.8c1.9-1.2,3.7-2.3,5.4-3.4c1.7-1,3.4-2,5-2.9c1.6-0.9,3.1-1.7,4.4-2.4c1.4-0.8,2.6-1.4,3.8-2
c0.8-0.4,1.3-0.6,1.3-0.6l5.1,10.4c4.4-7,9.2-14,15.3-20.3c-8.5-2.1-17.7-2.9-26.9-3.3l5.1,10.4c0,0-0.5,0.2-1.3,0.7
c-1.2,0.6-2.5,1.3-3.9,2c-1.4,0.8-2.9,1.6-4.5,2.5c-1.6,0.9-3.3,1.9-5,2.9c-1.8,1-3.6,2.2-5.5,3.4c-7.6,4.8-16.2,10.9-25,18
c-2.2,1.8-4.4,3.6-6.6,5.5c-2.1,2-4.4,3.9-6.5,5.9c-1.1,1-2.1,2.1-3.2,3.1c-1.1,1-2.1,2.1-3.1,3.2c-1.1,1.1-2.1,2.2-3.1,3.3
c-1,1.1-2,2.2-3,3.4c-3.9,4.6-7.4,9.5-10.6,14.6c-3.2,5.1-5.8,10.3-8.2,15.4c-4.5,10.4-7.5,20.7-8.9,29.6
c-1.4,9-1.7,16.6-1.5,21.9c0,0.7,0,1.3,0,1.9c0,0.6,0.1,1.1,0.1,1.7c0.1,1,0.1,1.9,0.2,2.6c0.1,1.4,0.2,2.2,0.2,2.2L228.8,260z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M353.2,242.5c0,0-0.2-1.9-0.6-5.2c-0.1-0.8-0.2-1.7-0.3-2.7c-0.1-1-0.3-2.1-0.5-3.2
c-0.3-2.3-0.7-4.9-1.2-7.7c-1.9-11.3-5.3-26.1-9.7-40.6c-4.4-14.6-9.7-28.8-14.2-39.3c-0.6-1.3-1.1-2.6-1.6-3.8
c-0.5-1.2-1-2.3-1.5-3.4c-1-2.1-1.8-4-2.5-5.5c-0.4-0.7-0.6-1.1-0.6-1.1l10.4-5c-7.3-5.3-14.9-10.2-22.5-14.5
c0,8.8-0.4,17.3-1.3,25.8l10.4-5c0,0,0.2,0.4,0.5,1.1c0.7,1.5,1.5,3.3,2.5,5.4c0.5,1,1,2.2,1.5,3.3c0.5,1.2,1,2.4,1.6,3.7
c4.4,10.4,9.7,24.5,14.1,39c4.3,14.4,7.8,29.1,9.6,40.3c0.5,2.8,0.8,5.3,1.2,7.6c0.2,1.1,0.3,2.2,0.5,3.2c0.1,1,0.2,1.9,0.3,2.7
c0.3,3.3,0.5,5.1,0.5,5.1L353.2,242.5z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M333.4,304c0,0-0.1-2.7-0.2-7.6c0-2.4-0.1-5.3-0.3-8.7c-0.2-3.3-0.4-7.1-0.7-11.2
c-1.2-16.4-4.1-38.2-8.1-59.8c-3.9-21.6-8.7-43-12.6-58.9c-2-8-3.8-14.6-5-19.2c-0.2-0.9-0.4-1.4-0.4-1.4l11.2-3.1
c-6.3-6.3-12.6-12.5-19.1-18.4c-1.9,8.6-4,17-6.2,25.3l11.2-3.1c0,0,0.1,0.5,0.4,1.4c1.2,4.6,3,11.2,5,19.2
c4,15.9,8.8,37.2,12.6,58.7c3.9,21.5,6.8,43.2,8,59.5c0.4,4.1,0.5,7.8,0.7,11.1c0.2,3.3,0.3,6.2,0.3,8.6
c0.1,4.8,0.2,7.5,0.2,7.5H333.4z"/>
</g>
</g>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="288.4" cy="69.3" r="13.1"/>
<g>
<path fill="#6D6E71" d="M284.3,73.7l1.4-2.1c0.7,0.6,1.6,1.1,2.4,1.1c1.1,0,1.8-0.5,1.8-1.6c0-1-0.7-1.6-1.6-1.6
c-0.6,0-1,0.1-1.7,0.6l-1.4-0.9l0.3-6.2h7.1v2.7h-4.3l-0.2,1.7c0.4-0.2,0.7-0.2,1.1-0.2c2.1,0,3.9,1.2,3.9,3.7
c0,2.7-2.1,4.3-4.6,4.3C286.7,75.4,285.3,74.7,284.3,73.7z"/>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M267.5,334.8c0,0-1-3.7-2.6-10.2c-1.5-6.5-3.6-15.9-5.3-27.3c-1.7-11.4-3.2-24.7-4-39.1
c-0.9-14.4-1.3-29.7-1.3-45.1c0-7.7,0-15.4,0.1-23c0.1-3.8,0.1-7.5,0.2-11.3c0-1.9,0.1-3.7,0.1-5.5c0-1.8,0.2-3.6,0.2-5.4
c0.5-7.1,1.7-13.9,3-20.4c1.3-6.4,2.7-12.5,4.2-18.1c3-11.1,6-20.2,8.3-26.5c0.4-1,0.6-1.5,0.6-1.5l10.8,4.1
c-0.8-4.1-1.5-8.3-2-12.5c-0.3-2.1-0.4-4.2-0.6-6.4c-0.2-2.2-0.2-4.3-0.2-6.5c-1.8,1.1-3.8,2.2-5.7,3.5
c-1.8,1.3-3.8,2.6-5.5,3.9c-3.6,2.7-7.2,5.6-10.6,8.6l10.8,4.1c0,0-0.2,0.6-0.6,1.5c-2.4,6.4-5.4,15.5-8.4,26.7
c-1.5,5.6-3,11.7-4.3,18.2c-1.3,6.5-2.5,13.5-3,20.8c-0.1,1.8-0.2,3.7-0.2,5.5c0,1.8-0.1,3.7-0.1,5.5c-0.1,3.7-0.1,7.5-0.2,11.3
c-0.1,7.6-0.1,15.3-0.1,23c0,15.4,0.4,30.9,1.3,45.3c0.9,14.4,2.3,27.9,4.1,39.4c1.7,11.5,3.8,20.9,5.3,27.5
c1.7,6.6,2.7,10.3,2.7,10.3L267.5,334.8z"/>
</g>
</g>
</g>
</g>
<g id="Layer_1">
</g>
<g id="Layer_2">
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, 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" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 595.3 477.5" enable-background="new 0 0 595.3 477.5" xml:space="preserve">
<g id="Layer_3">
<path opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" d="M441.3,286.8c0,77.8-53.9,120.4-120.4,120.4
s-120.4-53.9-120.4-120.4S254.5,166.4,321,166.4S441.3,220.3,441.3,286.8z"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="312.1" cy="283.3" r="120.4"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="129.3" cy="389.8" r="72.4"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="122.1" cy="385.2" r="72.4"/>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="483.6" cy="400.8" r="47.3"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="479" cy="397.8" r="47.3"/>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="271.8" cy="359.8" r="23.1"/>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M251.9,282.2c0,0,1-0.1,2.9-0.3c1.9-0.1,4.6-0.5,8.1-0.7c7-0.4,17.1-0.7,29.2,0.2c12,0.9,26,3,40.6,7
c14.6,3.9,29.6,9.9,43.8,17.5c7,3.9,13.9,8.2,20.4,12.8c6.4,4.6,12.6,9.4,18.3,14.4c1.5,1.2,2.8,2.5,4.2,3.7
c1.4,1.2,2.7,2.5,4,3.8c1.3,1.3,2.6,2.5,3.9,3.8c1.2,1.3,2.4,2.5,3.6,3.8c0.6,0.6,1.2,1.2,1.8,1.9c0.6,0.6,1.1,1.3,1.7,1.9
c1.1,1.3,2.2,2.5,3.3,3.7c2.1,2.5,4.2,4.9,6,7.3c7.6,9.4,13.2,17.8,17.1,23.7c0.6,0.9,0.9,1.4,0.9,1.4l-9.7,6.2
c7.7,3.8,15.2,8,22.8,12.4c0.1-8.7-0.1-17.6-0.6-26.6l-9.7,6.2c0,0-0.3-0.5-0.9-1.4c-3.9-6-9.6-14.4-17.3-24
c-1.9-2.4-4-4.8-6.1-7.3c-1.1-1.2-2.2-2.5-3.4-3.7c-0.6-0.6-1.1-1.3-1.7-1.9c-0.6-0.6-1.2-1.3-1.8-1.9c-1.2-1.3-2.4-2.6-3.7-3.8
c-1.3-1.3-2.6-2.5-3.9-3.8c-1.3-1.3-2.7-2.6-4.1-3.8c-1.4-1.3-2.8-2.6-4.2-3.8c-5.8-5-12-9.9-18.6-14.6c-6.6-4.6-13.5-9-20.7-13
c-14.4-7.7-29.7-13.9-44.5-17.8c-14.8-4.1-29-6.3-41.2-7.1c-12.2-0.9-22.5-0.6-29.6-0.2c-3.6,0.2-6.4,0.6-8.3,0.7
c-1.9,0.2-2.9,0.3-2.9,0.3L251.9,282.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M357.2,331.3c0,0,0.5,0.1,1.3,0.2c0.9,0.2,2.2,0.3,3.8,0.7c3.3,0.7,7.9,1.9,13.3,3.9
c5.4,1.9,11.5,4.6,17.9,8c6.3,3.4,12.8,7.5,19.1,12c12.5,9,23.8,19.5,31.9,27.8c4,4.2,7.2,7.8,9.4,10.3c0.5,0.6,0.8,1,0.8,1
l-8.8,7.6c8,2.6,16.1,5.7,24.1,9.3c-0.9-8.7-2.3-17.6-4.1-26.5l-8.8,7.6c0,0-0.3-0.4-0.8-1c-2.2-2.6-5.5-6.2-9.5-10.4
c-8.1-8.4-19.6-19.1-32.3-28.2c-6.3-4.5-13-8.8-19.4-12.2c-6.5-3.5-12.8-6.2-18.3-8.2c-5.5-2-10.3-3.3-13.7-4
c-1.7-0.4-3-0.6-3.9-0.8c-0.9-0.2-1.4-0.3-1.4-0.3L357.2,331.3z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M296.8,359.1c0,0,0.7,0,1.9,0c1.2,0,3.1,0,5.4,0c4.6,0.1,11.3,0.5,19.2,1.5c7.9,1,17.2,2.6,27,4.7
c9.8,2.2,20.1,5,30.3,8.2c20.4,6.4,40.1,15,54,22.9c7,3.9,12.5,7.6,16.3,10.3c0.7,0.5,1.1,0.8,1.1,0.8l-6.9,9.3
c8.1,0.6,16.4,1.8,24.7,4.6c-1.8-8.6-5.1-17.3-9.2-25.8l-6.9,9.3c0,0-0.4-0.3-1.2-0.8c-3.9-2.8-9.5-6.6-16.6-10.5
c-14.1-8-34-16.7-54.6-23.2c-10.3-3.3-20.7-6.1-30.6-8.3c-9.9-2.2-19.2-3.8-27.3-4.8c-8-1-14.8-1.4-19.6-1.5
c-2.4-0.1-4.2-0.1-5.5,0c-1.3,0-2,0-2,0L296.8,359.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M377.1,267.3c0,0,1.8,0.5,5,1.5c0.8,0.2,1.7,0.5,2.6,0.8c0.5,0.1,1,0.3,1.5,0.5c0.5,0.2,1,0.4,1.6,0.6
c2.1,0.8,4.6,1.7,7.2,2.8c2.5,1.2,5.3,2.5,8.2,4c1.4,0.8,2.8,1.6,4.3,2.5c1.5,0.9,3,1.7,4.4,2.7c1.5,1,2.9,2,4.4,3
c0.4,0.3,0.8,0.5,1.1,0.8l1.1,0.9c0.7,0.6,1.4,1.2,2.2,1.7c0.7,0.6,1.4,1.2,2.2,1.7l1.1,0.9c0.4,0.3,0.7,0.6,1,0.9
c1.4,1.3,2.8,2.6,4.1,3.8c10.9,10.4,19.5,23.1,25,32.9c1.5,2.4,2.6,4.8,3.6,6.8c0.5,1,1,2,1.5,2.9c0.5,0.9,0.8,1.7,1.1,2.5
c0.3,0.7,0.5,1.1,0.5,1.1l-10.5,4.8c1.7,1.2,3.5,2.3,5.2,3.6l5.1,3.9c0.8,0.7,1.7,1.3,2.5,2l2.5,2.1l5,4.3l1.2-6.5l0.6-3.3
c0.2-1.1,0.3-2.2,0.5-3.3l0.9-6.7c0.2-2.3,0.4-4.5,0.6-6.8l-10.5,4.8c0,0-0.2-0.4-0.5-1.2c-0.4-0.8-0.7-1.6-1.2-2.5
c-0.5-0.9-1-1.9-1.5-2.9c-1.1-2.1-2.2-4.5-3.7-7c-5.6-10.1-14.3-23-25.5-33.7c-1.4-1.3-2.8-2.6-4.2-3.9c-0.4-0.3-0.7-0.7-1.1-1
l-1.1-0.9c-0.7-0.6-1.5-1.2-2.2-1.8c-0.7-0.6-1.5-1.2-2.2-1.8l-1.1-0.9c-0.4-0.3-0.8-0.5-1.1-0.8c-1.5-1.1-3.1-2.1-4.5-3.1
c-1.5-1.1-3-1.9-4.5-2.8c-1.5-0.9-3-1.7-4.4-2.6c-2.9-1.5-5.8-2.8-8.4-4.1c-2.7-1.1-5.2-2-7.4-2.9c-0.5-0.2-1.1-0.4-1.6-0.6
c-0.5-0.2-1-0.3-1.5-0.5c-1-0.3-1.9-0.6-2.7-0.8c-3.2-1-5.1-1.5-5.1-1.5L377.1,267.3z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M306.5,205.7c0,0,3.7,0.4,10.2,1.2c6.5,0.9,15.7,2.3,26.7,4.7c10.9,2.4,23.6,6,36.6,11.1
c0.8,0.3,1.6,0.6,2.5,1c0.8,0.3,1.6,0.7,2.4,1.1c1.6,0.7,3.3,1.4,4.9,2.1c1.6,0.8,3.3,1.6,4.9,2.4c0.8,0.4,1.6,0.8,2.5,1.2
c0.8,0.4,1.6,0.9,2.4,1.3c6.5,3.4,12.8,7.3,18.9,11.6c6.1,4.3,11.8,9.1,17,14.2c1.3,1.3,2.6,2.5,3.8,3.9c1.2,1.3,2.4,2.7,3.6,4
c1.2,1.3,2.3,2.8,3.4,4.1c0.6,0.7,1.1,1.4,1.7,2.1c0.5,0.7,1,1.4,1.5,2.1c4.2,5.6,7.6,11.4,10.7,17c1.4,2.9,2.9,5.6,4,8.4
c0.6,1.4,1.2,2.7,1.7,4.1c0.5,1.4,1,2.7,1.5,4c3.8,10.5,5.7,19.6,6.9,26c0.2,1,0.2,1.6,0.2,1.6l-11.4,1.8c1.3,1.6,2.7,3.2,4,4.8
c1.3,1.6,2.5,3.3,3.8,5l1.9,2.6l1.8,2.7l3.6,5.5l3-5.9l1.5-3l1.3-3.1c0.9-2.1,1.8-4.2,2.7-6.3c0.8-2.1,1.6-4.3,2.4-6.5
l-11.4,1.8c0,0-0.1-0.6-0.2-1.6c-1.2-6.5-3.1-15.9-7-26.6c-0.5-1.3-1-2.7-1.5-4.1c-0.6-1.4-1.2-2.8-1.8-4.2
c-1.2-2.9-2.6-5.7-4.1-8.6c-3.1-5.8-6.6-11.7-10.9-17.4c-0.5-0.7-1.1-1.4-1.6-2.2c-0.6-0.7-1.1-1.4-1.7-2.1
c-1.2-1.4-2.3-2.8-3.5-4.2c-1.2-1.4-2.5-2.7-3.7-4.1c-1.2-1.4-2.6-2.6-3.9-4c-5.4-5.2-11.2-10.2-17.4-14.5
c-6.2-4.4-12.6-8.4-19.3-11.9c-0.8-0.4-1.6-0.9-2.5-1.3c-0.8-0.4-1.7-0.8-2.5-1.2c-1.7-0.8-3.3-1.6-5-2.4
c-1.7-0.7-3.3-1.4-5-2.2c-0.8-0.4-1.7-0.7-2.5-1.1c-0.8-0.3-1.7-0.6-2.5-1c-13.2-5.2-26-8.8-37.1-11.2
c-11.1-2.5-20.4-3.8-27-4.7c-6.6-0.8-10.3-1.2-10.3-1.2L306.5,205.7z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M391.3,210.8c0,0,0.7,0.2,1.9,0.4c0.6,0.1,1.4,0.3,2.3,0.5c0.9,0.2,1.9,0.4,3.1,0.8
c1.1,0.4,2.4,0.7,3.8,1.2c1.4,0.4,2.8,1,4.4,1.6c0.8,0.3,1.6,0.6,2.4,0.9c0.8,0.4,1.6,0.7,2.5,1.1c0.8,0.4,1.7,0.8,2.6,1.2
c0.9,0.4,1.8,0.9,2.7,1.4c7.2,3.9,15.2,9.3,22.7,16.4c0.9,0.9,1.8,1.8,2.8,2.7c0.5,0.5,0.9,0.9,1.4,1.4l1.3,1.5
c0.9,1,1.8,1.9,2.7,2.9c0.9,1,1.7,2.1,2.6,3.1l1.3,1.6l1.2,1.6c0.8,1.1,1.7,2.2,2.5,3.2c0.8,1.1,1.6,2.2,2.4,3.4l1.2,1.7
l1.1,1.7l2.2,3.5c0.7,1.2,1.4,2.4,2.1,3.6c1.4,2.3,2.6,4.8,3.9,7.2c2.4,4.9,4.6,9.7,6.4,14.5c3.7,9.6,6.3,19,7.8,27.1
c1.5,8.1,2.1,15,2.3,19.8c0,0.9,0.1,1.4,0.1,1.4l-11.6,0.3c4.6,6.7,8.6,14,11.5,22.3c5.7-6.7,10.7-14.5,14.8-23l-11.6,0.3
c0,0,0-0.5-0.1-1.4c-0.1-4.9-0.8-11.9-2.3-20.2c-1.5-8.3-4.1-17.8-7.9-27.6c-1.8-4.9-4.1-9.9-6.6-14.8c-1.3-2.4-2.5-4.9-4-7.3
c-0.7-1.2-1.4-2.4-2.1-3.6l-2.3-3.5l-1.1-1.8l-1.2-1.7c-0.8-1.1-1.6-2.3-2.4-3.4c-0.9-1.1-1.7-2.2-2.6-3.3l-1.3-1.7l-1.3-1.6
c-0.9-1.1-1.8-2.1-2.7-3.2c-0.9-1-1.9-2-2.8-3l-1.4-1.5c-0.5-0.5-1-0.9-1.4-1.4c-1-0.9-1.9-1.9-2.9-2.8
c-7.7-7.2-15.9-12.9-23.4-16.8c-0.9-0.5-1.8-1-2.7-1.5c-0.9-0.4-1.8-0.8-2.7-1.2c-0.9-0.4-1.7-0.8-2.6-1.2
c-0.8-0.4-1.7-0.7-2.5-1c-1.6-0.6-3.1-1.2-4.5-1.7c-1.4-0.4-2.7-0.8-3.9-1.2c-1.2-0.4-2.3-0.6-3.2-0.8c-0.9-0.2-1.7-0.4-2.4-0.6
c-1.3-0.3-2-0.5-2-0.5L391.3,210.8z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M255.2,200c0,0-0.9,0.1-2.5,0.3c-0.8,0.1-1.8,0.2-3,0.3c-0.6,0.1-1.2,0.1-1.9,0.2
c-0.7,0.1-1.4,0.2-2.2,0.3c-1.5,0.2-3.2,0.5-5.1,0.8c-1.8,0.3-3.8,0.8-5.9,1.3c-2.1,0.4-4.3,1.1-6.6,1.7c-1.2,0.3-2.4,0.6-3.6,1
c-1.2,0.4-2.4,0.8-3.7,1.2c-10,3.4-21.4,8.4-32.7,15.2c-11.3,6.8-22.7,15.1-33.2,24.5l-3.9,3.5c-1.3,1.2-2.5,2.4-3.8,3.6
l-1.9,1.8l-1.8,1.9c-1.2,1.2-2.4,2.5-3.6,3.7c-4.7,5.1-9.3,10.1-13.4,15.2c-8.4,10.2-15.4,20.3-20.8,29.3
c-5.5,9-9.5,16.9-12.1,22.4c-0.4,0.9-0.6,1.4-0.6,1.4l-10.5-4.8c0.6,9.2,1.9,18.2,3.9,26.7c6.4-6,13.1-11.2,20-15.9l-10.5-4.8
c0,0,0.2-0.5,0.6-1.4c2.6-5.5,6.5-13.2,11.9-22.1c5.4-8.9,12.3-18.9,20.6-29c4.1-5.1,8.6-10.1,13.3-15c1.2-1.2,2.4-2.4,3.6-3.7
l1.8-1.8l1.9-1.8c1.2-1.2,2.5-2.4,3.8-3.6l3.9-3.5c10.3-9.3,21.6-17.4,32.7-24.1c11.1-6.7,22.3-11.6,32.1-14.9
c1.2-0.4,2.4-0.8,3.6-1.2c1.2-0.4,2.4-0.7,3.5-1c2.3-0.6,4.4-1.3,6.5-1.7c2.1-0.4,4-0.9,5.8-1.2c1.8-0.3,3.4-0.6,4.9-0.8
c0.7-0.1,1.4-0.3,2.1-0.3c0.7-0.1,1.3-0.1,1.9-0.2c1.2-0.1,2.2-0.2,3-0.3c1.6-0.2,2.5-0.3,2.5-0.3L255.2,200z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M203.7,285.2c0,0-1.7,0.4-4.7,1.2c-1.5,0.4-3.3,1-5.3,1.6c-2,0.7-4.3,1.4-6.8,2.4
c-4.9,1.9-10.5,4.3-16.4,7.2c-5.9,2.9-12,6.3-17.9,10c-11.9,7.3-23.2,15.5-31.4,22c-4.1,3.2-7.4,6-9.8,8
c-0.6,0.5-0.9,0.8-0.9,0.8l-7.5-8.8c-1.6,4.2-3.1,8.5-4.4,12.8c-0.7,2.1-1.3,4.3-1.9,6.4c-0.6,2.2-1.2,4.3-1.5,6.5
c2-0.8,4.1-1.3,6.2-1.9c2.1-0.5,4.2-1,6.3-1.5c4.2-0.9,8.4-1.7,12.6-2.4l-7.5-8.8c0,0,0.3-0.3,0.9-0.8c2.3-1.9,5.6-4.7,9.7-7.9
c8.1-6.4,19.3-14.6,31.1-21.8c5.9-3.6,11.9-7,17.7-9.8c5.8-2.9,11.3-5.3,16.1-7.1c2.4-0.9,4.6-1.7,6.6-2.3
c2-0.6,3.7-1.1,5.2-1.6c2.9-0.7,4.6-1.2,4.6-1.2L203.7,285.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M246.6,360.9c0,0-0.4,0.1-1.1,0.2c-0.7,0.1-1.7,0.3-3,0.6c-2.6,0.6-6.2,1.5-10.5,2.9
c-8.5,2.8-19.5,7.7-29.9,13.5c-10.4,5.7-20.4,12.3-27.6,17.6c-3.6,2.6-6.6,4.9-8.6,6.6c-0.6,0.5-0.9,0.8-0.9,0.8l-7.3-9
c-1.8,4.3-3.4,8.6-4.8,13c-0.4,1.1-0.7,2.2-1,3.3c-0.3,1.1-0.6,2.2-0.9,3.3c-0.5,2.3-0.9,4.5-0.9,6.8c1.9-1.1,3.9-1.8,5.8-2.4
c1-0.3,2-0.6,3-0.8c1-0.3,2-0.5,3-0.7c4.1-0.9,8.2-1.5,12.3-2.1l-7.3-9c0,0,0.3-0.3,0.9-0.7c2-1.6,4.9-3.9,8.5-6.5
c7.1-5.2,17-11.7,27.3-17.3c10.3-5.7,21.1-10.5,29.4-13.2c4.2-1.4,7.7-2.3,10.2-2.9c1.2-0.3,2.2-0.4,2.9-0.6
c0.7-0.1,1-0.2,1-0.2L246.6,360.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M309.5,328.2c0,0-2.5-0.4-6.9-1c-2.2-0.3-4.9-0.5-8-0.9c-1.5-0.2-3.2-0.3-4.9-0.4
c-1.7-0.1-3.5-0.2-5.4-0.3c-7.6-0.3-16.5-0.1-25.9,0.7c-9.5,0.8-19.5,2.3-29.4,4.6c-9.9,2.2-19.6,5.1-28.5,8.3
c-8.9,3.2-17,6.8-23.8,10.2c-6.8,3.4-12.3,6.6-16.1,8.9c-0.7,0.5-1.2,0.7-1.2,0.7l-6.2-9.8c-2.3,4.1-4.4,8.2-6.3,12.4
c-0.9,2.1-1.8,4.3-2.6,6.5c-0.4,1.1-0.7,2.2-1,3.3c-0.1,0.6-0.2,1.1-0.3,1.7c-0.1,0.6-0.1,1.2-0.1,1.7c0.5-0.3,1-0.5,1.4-0.7
c0.5-0.2,1-0.3,1.5-0.5c1-0.3,2-0.5,3-0.7c2-0.4,4.1-0.7,6.2-0.9c4.1-0.4,8.2-0.6,12.4-0.6l-6.2-9.8c0,0,0.4-0.3,1.2-0.7
c3.7-2.3,9.1-5.4,15.8-8.8c6.7-3.3,14.7-6.9,23.5-10.1c8.8-3.2,18.4-6,28.1-8.2c9.7-2.2,19.6-3.7,29-4.5
c9.3-0.8,18.1-0.9,25.5-0.7c1.9,0.1,3.7,0.2,5.4,0.3c1.7,0.1,3.3,0.2,4.8,0.4c3,0.3,5.7,0.5,7.8,0.8c4.3,0.6,6.8,1,6.8,1
L309.5,328.2z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M340.8,206c0,0-4.1,0.5-11.4,1.4c-3.6,0.5-7.9,1.4-12.9,2.2c-2.5,0.6-5.1,1.2-7.9,1.8
c-1.4,0.3-2.8,0.6-4.3,1c-1.4,0.4-2.9,0.8-4.4,1.2c-12,3.3-25.8,8.2-39.9,14.9c-14.1,6.7-28.4,15.2-41.9,25
c-13.5,9.7-26,20.8-36.9,31.9c-1.4,1.4-2.7,2.8-4,4.2c-1.3,1.4-2.6,2.8-3.9,4.2c-1.2,1.4-2.5,2.8-3.7,4.2
c-1.2,1.4-2.4,2.7-3.5,4.1c-1.1,1.4-2.3,2.7-3.4,4.1c-1.1,1.3-2.1,2.7-3.2,4c-2.1,2.6-4,5.3-5.8,7.8
c-7.3,10.1-12.4,19.2-15.7,25.8c-0.5,1-0.7,1.5-0.7,1.5l-10.4-5l0.1,3.5l0.3,3.6c0.2,2.3,0.5,4.7,0.8,7c0.1,1.1,0.4,2.3,0.6,3.5
l0.4,1.7l0.2,0.8l0.2,0.9c0.3,1.1,0.7,2.2,1,3.3c0.5,1.1,0.9,2.1,1.4,3.1c0.6-0.9,1.2-1.8,1.9-2.6c0.7-0.8,1.4-1.6,2.1-2.3
l0.5-0.5l0.6-0.5l1.2-1c0.8-0.7,1.5-1.3,2.3-2c1.6-1.3,3.2-2.5,4.9-3.6l2.5-1.7l2.6-1.6l-10.4-5c0,0,0.3-0.5,0.7-1.5
c3.2-6.4,8.3-15.3,15.4-25.3c1.8-2.5,3.7-5.1,5.7-7.7c1-1.3,2-2.7,3.1-4c1.1-1.3,2.2-2.7,3.3-4c1.1-1.4,2.3-2.7,3.5-4.1
c1.2-1.4,2.4-2.7,3.6-4.1c1.3-1.4,2.5-2.7,3.8-4.1c1.3-1.4,2.6-2.8,4-4.1c10.8-11,23.1-21.9,36.5-31.5
c13.3-9.6,27.5-18,41.4-24.7c13.9-6.6,27.5-11.5,39.4-14.7c1.5-0.4,2.9-0.8,4.4-1.2c1.4-0.4,2.8-0.7,4.2-1
c2.7-0.6,5.3-1.2,7.8-1.8c4.9-0.9,9.2-1.7,12.8-2.2c7.1-0.9,11.2-1.4,11.2-1.4L340.8,206z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M328.4,266c0,0-0.9,0.1-2.6,0.3c-1.7,0.2-4.2,0.4-7.3,0.9c-6.3,1-15.2,2.7-25.6,5.8
c-10.4,3.1-22.2,7.8-34.2,14c-12,6.2-24.3,13.9-35.8,22.7l-4.3,3.3c-1.4,1.1-2.8,2.3-4.2,3.4c-2.8,2.2-5.5,4.6-8.2,6.9
c-5.3,4.7-10.4,9.5-15.1,14.4c-4.8,4.8-9.1,9.7-13.2,14.3c-4,4.7-7.7,9.3-11,13.6c-6.5,8.6-11.5,16.2-14.7,21.6
c-0.5,0.9-0.8,1.4-0.8,1.4l-10-5.9c-0.3,9.2-0.1,18.4,1.2,27c6.9-5.4,14.1-9.8,21.5-13.7l-10-5.9c0,0,0.3-0.5,0.8-1.3
c3.2-5.3,8-12.8,14.5-21.4c3.2-4.3,6.9-8.8,10.8-13.4c4-4.6,8.3-9.4,13.1-14.2c4.7-4.8,9.7-9.5,14.9-14.2
c2.7-2.3,5.3-4.7,8.1-6.9c1.4-1.1,2.8-2.2,4.1-3.4l4.2-3.3c11.3-8.7,23.5-16.2,35.3-22.4c11.9-6.2,23.5-10.8,33.7-13.8
c10.2-3.1,19-4.7,25.1-5.7c3.1-0.5,5.5-0.7,7.2-0.9c1.7-0.2,2.5-0.3,2.5-0.3L328.4,266z"/>
</g>
</g>
</g>
<circle opacity="0.14" stroke="#000000" stroke-width="6" stroke-miterlimit="10" cx="327.9" cy="85.3" r="61.3"/>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="322.2" cy="78.4" r="61.3"/>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="322.2" cy="48.9" r="13.1"/>
<g>
<path fill="#808285" d="M325,54.3h-3.4v-6.6c0-0.8,0-1.5,0.1-2.2c-0.2,0.3-0.5,0.5-0.8,0.8l-1.4,1.2l-1.7-2.1l4.3-3.5h3V54.3z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="357.4" cy="69.3" r="13.1"/>
<g>
<path fill="#808285" d="M361.7,74.7h-9v-2.2l3-3.1c0.9-0.9,1.4-1.5,1.7-1.9s0.5-0.6,0.6-0.9c0.1-0.2,0.2-0.5,0.2-0.7
c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.4,0-0.8,0.1-1.2,0.3s-0.9,0.6-1.4,1l-1.8-2.2c0.6-0.6,1.2-1,1.6-1.2
c0.4-0.2,0.9-0.4,1.4-0.6c0.5-0.1,1.1-0.2,1.7-0.2c0.8,0,1.5,0.1,2.2,0.4s1.1,0.7,1.5,1.2c0.3,0.5,0.5,1.1,0.5,1.8
c0,0.5-0.1,0.9-0.2,1.4c-0.1,0.4-0.3,0.8-0.6,1.2c-0.3,0.4-0.6,0.8-1,1.3c-0.4,0.4-1.3,1.3-2.7,2.5v0.1h4.7V74.7z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="361.7" cy="103.9" r="13.1"/>
<g>
<path fill="#808285" d="M365.6,99.6c0,0.8-0.2,1.4-0.7,2c-0.5,0.6-1.2,1-2,1.2v0.1c2.1,0.3,3.1,1.2,3.1,2.9c0,1.2-0.5,2.1-1.4,2.7
c-0.9,0.7-2.2,1-3.8,1c-0.7,0-1.3,0-1.9-0.1c-0.6-0.1-1.2-0.3-1.9-0.5V106c0.5,0.3,1.1,0.5,1.7,0.6c0.6,0.1,1.1,0.2,1.6,0.2
c0.7,0,1.3-0.1,1.6-0.3c0.3-0.2,0.5-0.5,0.5-1c0-0.3-0.1-0.6-0.3-0.8s-0.5-0.3-0.9-0.4c-0.4-0.1-0.9-0.1-1.5-0.1H359v-2.5h0.8
c1.7,0,2.6-0.4,2.6-1.3c0-0.3-0.1-0.6-0.4-0.7c-0.3-0.2-0.6-0.2-1-0.2c-0.8,0-1.6,0.3-2.5,0.8l-1.4-2.2c0.7-0.5,1.3-0.8,2-1
c0.7-0.2,1.5-0.3,2.4-0.3c1.3,0,2.3,0.3,3,0.8C365.3,98,365.6,98.7,365.6,99.6z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="298.1" cy="102.6" r="13.1"/>
<g>
<path fill="#808285" d="M302.8,106h-1.2v2h-2.8v-2h-4.2v-2.1l4.4-6.4h2.6v6.4h1.2V106z M298.9,103.9v-1.2c0-0.2,0-0.5,0-0.9
c0-0.4,0-0.6,0-0.6h-0.1c-0.2,0.4-0.3,0.7-0.6,1l-1.2,1.7H298.9z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="80.5" cy="363.9" r="13.1"/>
<g>
<path fill="#808285" d="M83.3,369.3h-3.4v-6.6c0-0.8,0-1.5,0.1-2.2c-0.2,0.3-0.5,0.5-0.8,0.8l-1.4,1.2l-1.7-2.1l4.3-3.5h3V369.3z"
/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="123.2" cy="377.7" r="13.1"/>
<g>
<path fill="#808285" d="M127.5,383.1h-9v-2.2l3-3.1c0.9-0.9,1.4-1.5,1.7-1.9c0.3-0.3,0.5-0.6,0.6-0.9c0.1-0.2,0.2-0.5,0.2-0.7
c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.4,0-0.8,0.1-1.2,0.3c-0.4,0.2-0.9,0.6-1.4,1l-1.8-2.2c0.6-0.6,1.2-1,1.6-1.2
c0.4-0.2,0.9-0.4,1.4-0.6c0.5-0.1,1.1-0.2,1.7-0.2c0.8,0,1.5,0.1,2.2,0.4c0.6,0.3,1.1,0.7,1.5,1.2c0.3,0.5,0.5,1.1,0.5,1.8
c0,0.5-0.1,0.9-0.2,1.4c-0.1,0.4-0.3,0.8-0.6,1.2c-0.3,0.4-0.6,0.8-1,1.3c-0.4,0.4-1.3,1.3-2.7,2.5v0.1h4.7V383.1z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="134.7" cy="423.5" r="13.1"/>
<g>
<path fill="#808285" d="M139.6,419.1c0,0.8-0.2,1.4-0.7,2c-0.5,0.6-1.2,1-2,1.2v0.1c2.1,0.3,3.1,1.2,3.1,2.9
c0,1.2-0.5,2.1-1.4,2.7c-0.9,0.7-2.2,1-3.8,1c-0.7,0-1.3,0-1.9-0.1c-0.6-0.1-1.2-0.3-1.9-0.5v-2.8c0.5,0.3,1.1,0.5,1.7,0.6
c0.6,0.1,1.1,0.2,1.6,0.2c0.7,0,1.3-0.1,1.6-0.3c0.3-0.2,0.5-0.5,0.5-1c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.4
c-0.4-0.1-0.9-0.1-1.5-0.1H133v-2.5h0.8c1.7,0,2.6-0.4,2.6-1.3c0-0.3-0.1-0.6-0.4-0.7c-0.3-0.2-0.6-0.2-1-0.2
c-0.8,0-1.6,0.3-2.5,0.8l-1.4-2.2c0.7-0.5,1.3-0.8,2-1c0.7-0.2,1.5-0.3,2.4-0.3c1.3,0,2.3,0.3,3,0.8
C139.2,417.5,139.6,418.2,139.6,419.1z"/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="482.2" cy="371.4" r="13.1"/>
<g>
<path fill="#808285" d="M485,376.8h-3.4v-6.6c0-0.8,0-1.5,0.1-2.2c-0.2,0.3-0.5,0.5-0.8,0.8l-1.4,1.2l-1.7-2.1l4.3-3.5h3V376.8z"
/>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="486.9" cy="414.7" r="13.1"/>
<g>
<path fill="#808285" d="M491.2,420.1h-9v-2.2l3-3.1c0.9-0.9,1.4-1.5,1.7-1.9c0.3-0.3,0.5-0.6,0.6-0.9c0.1-0.2,0.2-0.5,0.2-0.7
c0-0.3-0.1-0.6-0.3-0.8c-0.2-0.2-0.5-0.3-0.9-0.3c-0.4,0-0.8,0.1-1.2,0.3s-0.9,0.6-1.4,1l-1.8-2.2c0.6-0.6,1.2-1,1.6-1.2
c0.4-0.2,0.9-0.4,1.4-0.6s1.1-0.2,1.7-0.2c0.8,0,1.5,0.1,2.2,0.4c0.6,0.3,1.1,0.7,1.5,1.2c0.3,0.5,0.5,1.1,0.5,1.8
c0,0.5-0.1,0.9-0.2,1.4c-0.1,0.4-0.3,0.8-0.6,1.2c-0.3,0.4-0.6,0.8-1,1.3c-0.4,0.4-1.3,1.3-2.7,2.5v0.1h4.7V420.1z"/>
</g>
<g>
<path fill="#6D6E71" d="M258.5,363.3l1.5-2.1c0.7,0.7,1.6,1.1,2.5,1.1c1.1,0,1.7-0.4,1.7-1.1c0-0.9-0.5-1.4-3-1.4v-2.3
c2,0,2.6-0.5,2.6-1.4c0-0.7-0.4-1.1-1.3-1.1c-0.8,0-1.4,0.3-2.1,1l-1.6-2c1.2-1,2.4-1.6,3.9-1.6c2.7,0,4.4,1.2,4.4,3.4
c0,1.2-0.6,2-1.9,2.6v0.1c1.4,0.4,2.3,1.4,2.3,2.9c0,2.3-2.2,3.5-4.7,3.5C260.9,365,259.4,364.4,258.5,363.3z"/>
<path fill="#6D6E71" d="M269.3,367c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L269.3,367z"/>
<path fill="#6D6E71" d="M275.2,363c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V363z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="331.8" cy="329.6" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M318.8,332.8c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V332.8z"/>
<path fill="#6D6E71" d="M329.3,336.8c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L329.3,336.8z"/>
<path fill="#6D6E71" d="M335.2,332.8c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V332.8z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="351.7" cy="265.8" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M338.4,269.4l1.5-2.1c0.7,0.7,1.6,1.1,2.5,1.1c1.1,0,1.7-0.4,1.7-1.1c0-0.9-0.5-1.4-3-1.4v-2.3
c2,0,2.6-0.5,2.6-1.4c0-0.7-0.4-1.1-1.3-1.1c-0.8,0-1.4,0.3-2.1,1l-1.6-2c1.2-1,2.4-1.6,3.9-1.6c2.7,0,4.4,1.2,4.4,3.4
c0,1.2-0.6,2-1.9,2.6v0.1c1.4,0.4,2.3,1.4,2.3,2.9c0,2.3-2.2,3.5-4.7,3.5C340.7,271.1,339.3,270.4,338.4,269.4z"/>
<path fill="#6D6E71" d="M349.1,273c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L349.1,273z"/>
<path fill="#6D6E71" d="M355.6,268.2h2.6V262h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V268.2z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="227.2" cy="283.3" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M214.8,285.7h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V285.7z"/>
<path fill="#6D6E71" d="M224.7,290.5c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L224.7,290.5z"/>
<path fill="#6D6E71" d="M230.6,286.5c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.7-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V286.5z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="281.3" cy="204.1" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M268.9,206.5h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V206.5z"/>
<path fill="#6D6E71" d="M278.8,211.3c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L278.8,211.3z"/>
<path fill="#6D6E71" d="M285.2,206.5h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V206.5z"/>
</g>
<g>
<circle fill="#E6E7E8" stroke="#808285" stroke-width="6" stroke-miterlimit="10" cx="366.4" cy="208.3" r="23.1"/>
</g>
<g>
<path fill="#6D6E71" d="M353.4,211.5c2.9-2.6,5.1-4.6,5.1-6.3c0-1.1-0.6-1.6-1.5-1.6c-0.8,0-1.4,0.6-2,1.1l-1.8-1.7
c1.3-1.3,2.4-1.9,4.2-1.9c2.4,0,4.1,1.6,4.1,4c0,1.9-1.8,4.1-3.5,5.7c0.6-0.1,1.5-0.2,2-0.2h2v2.7h-8.7V211.5z"/>
<path fill="#6D6E71" d="M363.9,215.5c1.5-0.5,2.3-1.4,2.3-2.3c0,0-0.1,0-0.1,0c-1,0-1.9-0.6-1.9-1.8c0-1.1,0.9-1.8,2-1.8
c1.4,0,2.2,1.1,2.2,3c0,2.2-1.3,4-3.8,4.6L363.9,215.5z"/>
<path fill="#6D6E71" d="M370.3,210.7h2.6v-6.2h-2.3v-2c1.4-0.3,2.2-0.6,3.2-1.2h2.4v9.4h2.2v2.6h-8V210.7z"/>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M282.9,181.1c0,0,0.2-1.6,0.5-4.3c0.1-0.7,0.2-1.5,0.3-2.3c0.1-0.8,0.3-1.7,0.5-2.7c0.2-1,0.4-2,0.6-3
c0.1-0.5,0.2-1.1,0.3-1.6c0.1-0.6,0.3-1.1,0.5-1.7c1.3-4.6,3-9.9,5.5-15.4c0.6-1.4,1.2-2.8,1.9-4.2c0.7-1.4,1.4-2.8,2.2-4.2
c1.4-2.8,3.2-5.5,4.8-8.3c6.8-10.9,15.1-20.8,21.7-27.9c3.3-3.5,6.2-6.3,8.2-8.3c0.5-0.5,0.9-0.8,0.9-0.8l7.9,8.4
c2.2-8.1,5-16.2,8.3-24.3c-8.7,1.2-17.5,2.9-26.4,5.2l7.9,8.4c0,0-0.3,0.3-0.9,0.9c-2,2-5,4.8-8.3,8.4
c-6.7,7.1-15.2,17.2-22.1,28.4c-1.7,2.8-3.4,5.6-4.9,8.5c-0.8,1.4-1.5,2.9-2.2,4.3c-0.7,1.4-1.3,2.9-1.9,4.3
c-2.6,5.6-4.4,11.1-5.7,15.9c-0.2,0.6-0.4,1.2-0.5,1.7c-0.1,0.6-0.2,1.1-0.4,1.7c-0.2,1.1-0.4,2.2-0.7,3.1
c-0.2,1-0.4,1.9-0.5,2.8c-0.1,0.9-0.2,1.7-0.3,2.4c-0.3,2.9-0.5,4.5-0.5,4.5L282.9,181.1z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M366.4,186.9c0,0,0-0.8,0.1-2.1c0.1-1.3,0.2-3.2,0.3-5.5c0.2-4.5,0.4-10.6,0.4-16.6
c0-6.1-0.2-12.1-0.4-16.7c-0.1-2.3-0.3-4.2-0.3-5.5c-0.1-0.7-0.1-1.1-0.1-1.1l11.5-0.9c-2.5-3.8-5.1-7.6-7.8-11.2
c-2.7-3.6-5.5-7.1-8.4-10.4c-2.8,8.3-6.3,16.1-10.1,23.6l11.5-0.9c0,0,0,0.4,0.1,1c0.1,1.3,0.2,3.2,0.3,5.4
c0.2,4.5,0.4,10.5,0.4,16.5c0,6-0.2,12-0.4,16.5c-0.1,2.3-0.2,4.1-0.3,5.4c-0.1,1.3-0.1,2.1-0.1,2.1L366.4,186.9z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M228.8,260c0,0-0.1-0.7-0.1-2.1c0-0.7-0.1-1.5-0.2-2.5c0-0.5-0.1-1-0.1-1.6c0-0.6,0-1.2,0-1.8
c-0.2-5.1,0.1-12.5,1.5-21.3c1.4-8.7,4.2-18.7,8.7-28.9c2.3-5,4.9-10.1,8-15c3.1-4.9,6.6-9.7,10.4-14.2c1-1.1,2-2.2,2.9-3.3
c1-1.1,2-2.2,3-3.2c1-1.1,2-2.1,3.1-3.2c1.1-1,2.1-2,3.2-3c2.1-2,4.3-3.9,6.4-5.8c2.2-1.8,4.3-3.7,6.5-5.4
c8.6-7,17.2-13,24.7-17.8c1.9-1.2,3.7-2.3,5.4-3.4c1.7-1,3.4-2,5-2.9c1.6-0.9,3.1-1.7,4.4-2.4c1.4-0.8,2.6-1.4,3.8-2
c0.8-0.4,1.3-0.6,1.3-0.6l5.1,10.4c4.4-7,9.2-14,15.3-20.3c-8.5-2.1-17.7-2.9-26.9-3.3l5.1,10.4c0,0-0.5,0.2-1.3,0.7
c-1.2,0.6-2.5,1.3-3.9,2c-1.4,0.8-2.9,1.6-4.5,2.5c-1.6,0.9-3.3,1.9-5,2.9c-1.8,1-3.6,2.2-5.5,3.4c-7.6,4.8-16.2,10.9-25,18
c-2.2,1.8-4.4,3.6-6.6,5.5c-2.1,2-4.4,3.9-6.5,5.9c-1.1,1-2.1,2.1-3.2,3.1c-1.1,1-2.1,2.1-3.1,3.2c-1.1,1.1-2.1,2.2-3.1,3.3
c-1,1.1-2,2.2-3,3.4c-3.9,4.6-7.4,9.5-10.6,14.6c-3.2,5.1-5.8,10.3-8.2,15.4c-4.5,10.4-7.5,20.7-8.9,29.6
c-1.4,9-1.7,16.6-1.5,21.9c0,0.7,0,1.3,0,1.9c0,0.6,0.1,1.1,0.1,1.7c0.1,1,0.1,1.9,0.2,2.6c0.1,1.4,0.2,2.2,0.2,2.2L228.8,260z"
/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M353.2,242.5c0,0-0.2-1.9-0.6-5.2c-0.1-0.8-0.2-1.7-0.3-2.7c-0.1-1-0.3-2.1-0.5-3.2
c-0.3-2.3-0.7-4.9-1.2-7.7c-1.9-11.3-5.3-26.1-9.7-40.6c-4.4-14.6-9.7-28.8-14.2-39.3c-0.6-1.3-1.1-2.6-1.6-3.8
c-0.5-1.2-1-2.3-1.5-3.4c-1-2.1-1.8-4-2.5-5.5c-0.4-0.7-0.6-1.1-0.6-1.1l10.4-5c-7.3-5.3-14.9-10.2-22.5-14.5
c0,8.8-0.4,17.3-1.3,25.8l10.4-5c0,0,0.2,0.4,0.5,1.1c0.7,1.5,1.5,3.3,2.5,5.4c0.5,1,1,2.2,1.5,3.3c0.5,1.2,1,2.4,1.6,3.7
c4.4,10.4,9.7,24.5,14.1,39c4.3,14.4,7.8,29.1,9.6,40.3c0.5,2.8,0.8,5.3,1.2,7.6c0.2,1.1,0.3,2.2,0.5,3.2c0.1,1,0.2,1.9,0.3,2.7
c0.3,3.3,0.5,5.1,0.5,5.1L353.2,242.5z"/>
</g>
</g>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M333.4,304c0,0-0.1-2.7-0.2-7.6c0-2.4-0.1-5.3-0.3-8.7c-0.2-3.3-0.4-7.1-0.7-11.2
c-1.2-16.4-4.1-38.2-8.1-59.8c-3.9-21.6-8.7-43-12.6-58.9c-2-8-3.8-14.6-5-19.2c-0.2-0.9-0.4-1.4-0.4-1.4l11.2-3.1
c-6.3-6.3-12.6-12.5-19.1-18.4c-1.9,8.6-4,17-6.2,25.3l11.2-3.1c0,0,0.1,0.5,0.4,1.4c1.2,4.6,3,11.2,5,19.2
c4,15.9,8.8,37.2,12.6,58.7c3.9,21.5,6.8,43.2,8,59.5c0.4,4.1,0.5,7.8,0.7,11.1c0.2,3.3,0.3,6.2,0.3,8.6
c0.1,4.8,0.2,7.5,0.2,7.5H333.4z"/>
</g>
</g>
</g>
<circle fill="#FFFFFF" stroke="#939598" stroke-width="6" stroke-miterlimit="10" cx="288.4" cy="69.3" r="13.1"/>
<g>
<path fill="#6D6E71" d="M284.3,73.7l1.4-2.1c0.7,0.6,1.6,1.1,2.4,1.1c1.1,0,1.8-0.5,1.8-1.6c0-1-0.7-1.6-1.6-1.6
c-0.6,0-1,0.1-1.7,0.6l-1.4-0.9l0.3-6.2h7.1v2.7h-4.3l-0.2,1.7c0.4-0.2,0.7-0.2,1.1-0.2c2.1,0,3.9,1.2,3.9,3.7
c0,2.7-2.1,4.3-4.6,4.3C286.7,75.4,285.3,74.7,284.3,73.7z"/>
</g>
<g>
<g>
<g>
<path fill="#808285" d="M267.5,334.8c0,0-1-3.7-2.6-10.2c-1.5-6.5-3.6-15.9-5.3-27.3c-1.7-11.4-3.2-24.7-4-39.1
c-0.9-14.4-1.3-29.7-1.3-45.1c0-7.7,0-15.4,0.1-23c0.1-3.8,0.1-7.5,0.2-11.3c0-1.9,0.1-3.7,0.1-5.5c0-1.8,0.2-3.6,0.2-5.4
c0.5-7.1,1.7-13.9,3-20.4c1.3-6.4,2.7-12.5,4.2-18.1c3-11.1,6-20.2,8.3-26.5c0.4-1,0.6-1.5,0.6-1.5l10.8,4.1
c-0.8-4.1-1.5-8.3-2-12.5c-0.3-2.1-0.4-4.2-0.6-6.4c-0.2-2.2-0.2-4.3-0.2-6.5c-1.8,1.1-3.8,2.2-5.7,3.5
c-1.8,1.3-3.8,2.6-5.5,3.9c-3.6,2.7-7.2,5.6-10.6,8.6l10.8,4.1c0,0-0.2,0.6-0.6,1.5c-2.4,6.4-5.4,15.5-8.4,26.7
c-1.5,5.6-3,11.7-4.3,18.2c-1.3,6.5-2.5,13.5-3,20.8c-0.1,1.8-0.2,3.7-0.2,5.5c0,1.8-0.1,3.7-0.1,5.5c-0.1,3.7-0.1,7.5-0.2,11.3
c-0.1,7.6-0.1,15.3-0.1,23c0,15.4,0.4,30.9,1.3,45.3c0.9,14.4,2.3,27.9,4.1,39.4c1.7,11.5,3.8,20.9,5.3,27.5
c1.7,6.6,2.7,10.3,2.7,10.3L267.5,334.8z"/>
</g>
</g>
</g>
</g>
<g id="Layer_1">
</g>
<g id="Layer_2">
</g>
</svg>

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 973 KiB

After

Width:  |  Height:  |  Size: 986 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 959 KiB

After

Width:  |  Height:  |  Size: 972 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 934 KiB

After

Width:  |  Height:  |  Size: 947 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 964 KiB

After

Width:  |  Height:  |  Size: 977 KiB

View File

@ -1,195 +1,197 @@
From Sets to Categories
===
In this chapter we will continue with set theory and at the same time we will start exploring categories.
Products
===
In the previous chapter, we needed a way to make a set that is a composite of other sets that we already have. For example when we discussed mathematical functions, we couldn't define **+** and **-** functions, because we only knew about functions that take one argument. When we talked about programming, we talked about the primitive types, `Char` and `Number`, and we mentioned that most of the types are composite types. So how do we construct those?
The simplest composite type, of the sets **B**, which contains **b**'s and the set**Y**, which contains **y**'s is the the *product* or **B** and **Y**.
![Product parts](product_parts.svg)
It is the set of *pairs* of **b**'s and **y**'s.
![Product](product.svg)
The product is denoted **B x Y** and it comes equipped with two functions for retrieving the **b** and the **y** from each **(b, y)**.
Question: Why is this called a product? Hint: How many elements does it have?
Products as Objects
---
We established that in programming sets resemble types and functions resemble functions. Products, in this case, are like stripped-out *classes* (also called *records* or *structs*). The composite sets (the ones which form the product) are just the class's fields (also called *members*). The functions for accessing them are like what programmers call *getter methods*.
For example the famous OOP example of `Person` class with `name` and `age` fields is nothing more than a product of the set of strings, and the sets of numbers (we still haven't defined strings and lists in terms of set theory but we will get to that). Objects with more than two values can be expressed as products the composites of which are themselves products.
Using Products to Define Numeric Operations
---
Products can also be used for expressing functions which take more than one argument. For example, "plus" and "minus", are functions from the set of products of two numbers to the set of numbers. (so **+: R x R → R**). Of course, we cannot draw the function itself, even partly, because it has too much arrows and it would look messy.
Joking, here it is.
![The plus function](plus.svg)
Note that there are languages where the *pair* datastructure (also called a *tuple*) is a first-level construct, and multi-argument functions are really implemented in this way.
Defining products in Terms of Sets
---
Now we will define the abstract concept of a product of two sets sets in terms of sets themselves. It is not hard: the product of two sets **Y** and **B** is just the set of all possible *ordered pairs*, which contain one element of the set **Y** and one element of the set **B**. Or formally speaking **Y x B = { (y, b) }** where **y ∈ Y, b ∈ B** (**∈** means "is an element of").
![A pair](pair.svg)
The real challenge is defining what a pair means in terms of sets. Note that the pair have to be *ordered*, so it cannot be just a set of the elements (formally speaking **A x B ≠ B x A for all A and B **). Some mathematical operations such as addition and multiplication don't care about order, but others, such as subtraction, do. And in programming we have the ability to assign names to each member of an object, which accomplishes the same purpose as ordering does for pairs.
So the pair must be ordered, and sets aren't. Turns out that that hasn't stopped mathematicians from coming up with multiple ingenious ways to represent an ordered pair using sets. Let's see them, just for fun. Here is the first one, which was discovered by Norbert Wiener in 1914. The definition is notable for its smart use of the uniqueness of the empty set.
![A pair, represented by sets](pair_as_set_2.svg)
The next one was discovered in the same year by Felix Hausdorff. In order to use that one, we just have to define "1", and "2" first.
![A pair, represented by sets](pair_as_set_3.svg)
Discovered in 1921 Kazimierz Kuratowski, this one uses just the component of the pair.
![A pair, represented by sets](pair_as_set_1.svg)
Defining products in Terms of Functions
---
In the previous chapter we provided a definition of a product by *zooming in* the individual elements of the sets and seeing what they can be made of. This gave us a *low-level* view of products. This time we will try to do the opposite - be as oblivious to the contents of our sets as possible. Instead of zooming in we will *zoom out*, and try define the product in terms of functions and functional composition. Effectively we will be working at a *higher level* of abstraction.
So let's begin with an external diagram, showing the definition of the product. Disclaimer: I know that this is a somewhat weird notation, but don't worry, we will not be using it for very long.
![Product, external diagram](product_external.svg)
This diagram already contains the first piece of the puzzle: if we have a set **G** which is the product of sets **Y** and **B**, then we should also have functions which give us back the elements of the product, so **G → Y** and **G → B**.
This definition is not complete, however, because the product of **G** and **B** is not the only set for which such functions can be defined. For example:
- A set of triples of **Y x B x R** for any random element **R** also qualifies.
- If there is a function from **G** to **B** then the set **G** itself meets our condition for being the product, because it is connected to **B** and to itself.
Depending on our specific case there can be many other other such objects.
![Product, external diagram](product_candidates.svg)
So how do we set apart all those "imposter" products from the one true product? Simple - they all can be converted to it. This is true, because:
1. By definition, each "impostor" can be converted to both elements of the pair.
2. The pair is nothing more than the sum of its elements.
More formally, in order for a set **I** to serve as an impostor for the product of **B** and **Y** and there should be two functions, which we will call **b: I → B** and **y: I → Y**. In order to prove that **I** is an impostor we need a function **I → B x Y**. That function is simply (programmers will understand this best) **(a) → b(a) x y(a)** for each **a:I**.
![Product, external diagram](products_morphisms.svg)
Notice that this definition does not rule out the sets which are isomorphic to the product - when we represents things using functions, an isomorphism is the same as equality.
Sums
===
We will now study a construct that is pretty similar to the product but at the same time it is very different. Similar because, like the product, it is a relation between two sets which allows you to unite them into one without erasing their structure. Different because it encodes a different type of relation between them - a product encodes an **AND** relation between two sets, while the sum encodes an **OR** relation. For example, a parent is either a mother of a father of a child, so the set of parent's is a sum set of the sets of mothers and fathers.
![Sum or coproduct](coproduct.svg)
Notice that the when a given object is an element of both sets, then it appears in the sum twice. This is why this type of sum of two sets is also called a *disjoint union*.
**Question:** Why is this called a sum?
Defining Sums in Terms of Sets
---
Simply put, a sum of two sets is a set that contains all elements from the first set and all elements from the second one. But, as with the product, it is not so straightforward to represent sums in terms of sets. For example if two sets can have the same element as a member, their sum will have that element twice which is not permitted, because a set cannot contain the same element twice.
As with the product, the solution is to put some extra structure.
![A member of a coproduct](coproduct_member.svg)
Like with the product, there is a low-level way to express a sum using sets alone. Incidentally, we can use pairs.
![A member of a coproduct, examined](coproduct_member_set.svg)
Again, this distinction is only rellevant only when the two sets have common elements.
Defining Sums in Terms of Functions
---
You might already suspect, the interesting part is expressing the sum of two sets using functions. To do that we have to go back to the conceptual part of the definition. We said that sums express an **OR** relation between two things. A simple property of every **OR** relation is that if something is an **A** that something is also an **A OR B** (and the same is valid if it is **B**). For example if I am *a man*, I am also *a man OR a woman*. This is what **OR** means, right?
This relationship can be expressed as a function. Two functions actually - one for each set that takes part in the relation.
![Coproduct, external diagram](coproduct_external.svg)
Why can it be expressed as a function? Because it is a *many-to-one* relationship.
What are we saying with this, if we apply it to the example, is simply that if parents are either mothers or fathers, then there surely exist a functions **mothers → parents** and **fathers → parents**.
You might already notice that this definition is pretty similar to the previous one, and the similarities don't end here - here again we have sets that can be thought as *impostor* sums - ones for which these functions exists, but which aren't real sums (where by "real sum" we mean a set which expresses the *OR* relation and contains no additional structure).
![Coproduct, external diagram](coproduct_candidates.svg)
All these sets are, express relationships which are more vague than the simple sum and therefore given any such set there would exist a function from the sum to it.
For exaple, there exist a trivial function between the set **Y | B ** and the set **Y | B | R**.
![Coproduct, external diagram](coproduct_morphisms.svg)
This diagram captures the **OR** relation in the same way as the previous one captures the essence of **AND**.
Duality
===
If we have to compare the concepts of sum or and product we will find out that they are related:
- The *product* of two sets is related to an element of the first one *and* one element of the second one.
- A *sum* of two sets is related to an element of the first one *or* one element of the second one.
Actually, the two concepts are captured by one and the same external diagram, just the arrows are flipped - many-to-one relationships become one-to-many and the other way around.
That's normal right? After all, *AND* **is** the opposite of *OR*. The connection between the two has always been there, evidenced, for example, by the De Morgan's law, citing that **NOT (A AND B) <=>(NOT A) OR (NOT B)** (or to put it in everyday language, "If either A or B is false, then (and only then) A *and* B is also false). But only with category theory, this connection can be expressed in such a concise way:
![Coproduct and product](coproduct_product_duality.svg)
Otherwise, when two concepts are captured by the same diagram, only with reversed arrows, we can say that the two concepts are **dual** to each other. So *product* and *sum* are dual. This is why sum is also known as *converse product*, or *coproduct* in short.
Category Theory - brief definition
===
Maybe it is time to see what a category is. Well, a category is about objects (an example of which are sets) and morphisms which go from one object to another (which can be viewed as functions) and which should be composable. We can say a lot more about categories, and even present a formal definition, but for now it is suffice for you to remember that sets are one example of a category and that categorical objects are like sets, except that we don't *see* their elements. This is why category-theoretic notions being captured by the external diagrams and strictly set-theoretic notions being captured by internal ones.
What other categories, or applications of category theory are there, other than sets? We already discussed one - types in programming languages. Remember that we said that programming types (classes) are somewhat similar to sets and programming functions are somewhat similar to functions between sets? This is another example of a connection that we can made rigorous using category theory.
| Category Theory | Set theory | Programming Languages |
| --- | --- | --- |
| Category | N/A | N/A |
| Objects and Morphisms | Sets and Functions | Classes and functions |
| N/A | Element | Object |
This diagram illustrates how category theory allows us to see the big picture when it comes to sets and similar structures - when we are at the realm of sets we can view the set as a collection of individual elements. In category theory we don't have such notion. We saw how taking the notion away allows us to define concepts such as the sum and product sets in a whole different and more general way.
**NB: Do note how the world "Object" is used in both programming languages and in category theory, but for completely different things. The equivalent a categorical object is equivalent to a class in programming language.**
Looking at the table I cannot help but notice the somehow weird, but otherwise completely logical symmetry (or perhaps "reverse symetry") between the the world as viewed through the lense of set theory, and the way it is viewed through the (inverted) lens of cathegory theory:
| Category Theory | Set theory |
| --- | --- |
| Category | *N/A* |
| Objects and Morphisms |
| *N/A* | Element |
It really says it all - by switching to external diagrams, we have lost sight of the particular elements of our sets, but we have gained the ability to see the whole universe that we have been previously trapped in. The whole realm of sets, can be thought as one category, a programming language can also be thought as a category. The concept of a category allows us to find and analyse similarities between the two.
![Category theory and set theory compared](set_category.svg)
Don't let my talking about how better category theory is than set theory get in your head - categories and sets are just two languages, each of which has its own use cases, and arguing over which of the two is more basic, or more general, is just a chicken-and-egg problem, as you would see in the next chapter.
From Sets to Categories
===
In this chapter we will continue with set theory and at the same time we will start exploring categories, and talking about why they are important.
Products
===
In the previous chapter, we needed a way to make a set that is a composite of other sets that we already have. For example when we discussed mathematical functions, we couldn't define **+** and **-** functions, because we only knew about functions that take one argument. When we talked about programming, we talked about the primitive types, `Char` and `Number`, and we mentioned that most of the types are composite types. So how do we construct those?
The simplest composite type, of the sets **B**, which contains **b**'s and the set**Y**, which contains **y**'s is the the *product* or **B** and **Y**.
![Product parts](product_parts.svg)
It is the set of *pairs* of **b**'s and **y**'s.
![Product](product.svg)
The product is denoted **B x Y** and it comes equipped with two functions for retrieving the **b** and the **y** from each **(b, y)**.
**Question**: Why is this called a product? Hint: How many elements does it have?
Products as Objects
---
We established that in programming sets resemble types and functions resemble functions. Products, in this case, are like stripped-out *classes* (also called *records* or *structs*). The composite sets (the ones which form the product) are just the class's fields (also called *members*). The functions for accessing them are like what programmers call *getter methods*.
For example the famous OOP example of `Person` class with `name` and `age` fields is nothing more than a product of the set of strings, and the sets of numbers (we still haven't defined strings and lists in terms of set theory but we will get to that). Objects with more than two values can be expressed as products the composites of which are themselves products.
Using Products to Define Numeric Operations
---
Products can also be used for expressing functions which take more than one argument. For example, "plus" and "minus", are functions from the set of products of two numbers to the set of numbers. (so **+: R x R → R**). Of course, we cannot draw the function itself, even partly, because it has too much arrows and it would look messy.
Joking, here it is.
![The plus function](plus.svg)
Note that there are languages where the *pair* datastructure (also called a *tuple*) is a first-level construct, and multi-argument functions are really implemented in this way.
Defining products in Terms of Sets
---
Now we will define the abstract concept of a product of two sets sets in terms of sets themselves. It is not hard: the product of two sets **Y** and **B** is just the set of all possible *ordered pairs*, which contain one element of the set **Y** and one element of the set **B**. Or formally speaking **Y x B = { (y, b) }** where **y ∈ Y, b ∈ B** (**∈** means "is an element of").
![A pair](pair.svg)
The real challenge is defining what a pair means in terms of sets. Note that the pair have to be *ordered*, so it cannot be just a set of the elements (formally speaking **A x B ≠ B x A for all A and B **). Some mathematical operations such as addition and multiplication don't care about order, but others, such as subtraction, do. And in programming we have the ability to assign names to each member of an object, which accomplishes the same purpose as ordering does for pairs.
So the pair must be ordered, and sets aren't. Turns out that that hasn't stopped mathematicians from coming up with multiple ingenious ways to represent an ordered pair using sets. Let's see them, just for fun. Here is the first one, which was discovered by Norbert Wiener in 1914. The definition is notable for its smart use of the uniqueness of the empty set.
![A pair, represented by sets](pair_as_set_2.svg)
The next one was discovered in the same year by Felix Hausdorff. In order to use that one, we just have to define "1", and "2" first.
![A pair, represented by sets](pair_as_set_3.svg)
Discovered in 1921 Kazimierz Kuratowski, this one uses just the component of the pair.
![A pair, represented by sets](pair_as_set_1.svg)
Defining products in Terms of Functions
---
In the previous chapter we provided a definition of a product by *zooming in* the individual elements of the sets and seeing what they can be made of. This gave us a *low-level* view of products. This time we will try to do the opposite - be as oblivious to the contents of our sets as possible. Instead of zooming in we will *zoom out*, and try define the product in terms of functions and functional composition. Effectively we will be working at a *higher level* of abstraction.
So let's begin with an external diagram, showing the definition of the product. Disclaimer: I know that this is a somewhat weird notation, but don't worry, we will not be using it for very long.
![Product, external diagram](product_external.svg)
This diagram already contains the first piece of the puzzle: if we have a set **G** which is the product of sets **Y** and **B**, then we should also have functions which give us back the elements of the product, so **G → Y** and **G → B**.
This definition is not complete, however, because the product of **G** and **B** is not the only set for which such functions can be defined. For example:
- A set of triples of **Y x B x R** for any random element **R** also qualifies.
- If there is a function from **G** to **B** then the set **G** itself meets our condition for being the product, because it is connected to **B** and to itself.
Depending on our specific case there can be many other other such objects.
![Product, external diagram](product_candidates.svg)
So how do we set apart all those "imposter" products from the one true product? Simple - they all can be converted to it. This is true, because:
1. By definition, each "impostor" can be converted to both elements of the pair.
2. The pair is nothing more than the sum of its elements.
More formally, in order for a set **I** to serve as an impostor for the product of **B** and **Y** and there should be two functions, which we will call **b: I → B** and **y: I → Y**. In order to prove that **I** is an impostor we need a function **I → B x Y**. That function is simply (programmers will understand this best) **(a) → b(a) x y(a)** for each **a:I**.
![Product, external diagram](products_morphisms.svg)
Notice that this definition does not rule out the sets which are isomorphic to the product - when we represents things using functions, an isomorphism is the same as equality.
Sums
===
We will now study a construct that is pretty similar to the product but at the same time it is very different. Similar because, like the product, it is a relation between two sets which allows you to unite them into one without erasing their structure. Different because it encodes a different type of relation between them - a product encodes an **AND** relation between two sets, while the sum encodes an **OR** relation. For example, a parent is either a mother of a father of a child, so the set of parent's is a sum set of the sets of mothers and fathers.
![Sum or coproduct](coproduct.svg)
Notice that the when a given object is an element of both sets, then it appears in the sum twice. This is why this type of sum of two sets is also called a *disjoint union*.
**Question:** Why is this called a sum?
Defining Sums in Terms of Sets
---
Simply put, a sum of two sets is a set that contains all elements from the first set and all elements from the second one. But, as with the product, it is not so straightforward to represent sums in terms of sets. For example if two sets can have the same element as a member, their sum will have that element twice which is not permitted, because a set cannot contain the same element twice.
As with the product, the solution is to put some extra structure.
![A member of a coproduct](coproduct_member.svg)
Like with the product, there is a low-level way to express a sum using sets alone. Incidentally, we can use pairs.
![A member of a coproduct, examined](coproduct_member_set.svg)
But again, this distinction is only rellevant only when the two sets have common elements.
Defining Sums in Terms of Functions
---
You might already suspect, the interesting part is expressing the sum of two sets using functions. To do that we have to go back to the conceptual part of the definition. We said that sums express an **OR** relation between two things. A simple property of every **OR** relation is that if something is an **A** that something is also an **A OR B** (and the same is valid if it is **B**). For example if I am *a man*, I am also *a man OR a woman*. This is what **OR** means, right?
This relationship can be expressed as a function. Two functions actually - one for each set that takes part in the relation.
![Coproduct, external diagram](coproduct_external.svg)
Why can it be expressed as a function? Because it is a *many-to-one* relationship.
What are we saying with this, if we apply it to the example, is simply that if parents are either mothers or fathers, then there surely exist a functions **mothers → parents** and **fathers → parents**.
You might already notice that this definition is pretty similar to the previous one, and the similarities don't end here - here again we have sets that can be thought as *impostor* sums - ones for which these functions exists, but which aren't real sums (where by "real sum" we mean a set which expresses the *OR* relation and contains no additional structure).
![Coproduct, external diagram](coproduct_candidates.svg)
All these sets are, express relationships which are more vague than the simple sum and therefore given any such set there would exist a function from the sum to it.
For exaple, there exist a trivial function between the set **Y | B ** and the set **Y | B | R**.
![Coproduct, external diagram](coproduct_morphisms.svg)
This diagram captures the **OR** relation in the same way as the previous one captures the essence of **AND**.
Duality
===
If we have to compare the concepts of sum or and product we will find out that they are related:
- The *product* of two sets is related to an element of the first one *and* one element of the second one.
- A *sum* of two sets is related to an element of the first one *or* one element of the second one.
Actually, the two concepts are captured by one and the same external diagram, just the arrows are flipped - many-to-one relationships become one-to-many and the other way around.
That's normal right? After all, **AND** *is* the opposite of **OR**. The connection between the two has always been there, evidenced, for example, by the De Morgan's law, citing that **NOT (A AND B) ↔ (NOT A) OR (NOT B)** (or to put it in everyday language, "If either A or B is false, then (and only then) A *and* B is also false). But only with category theory, this connection can be expressed in such a concise way:
![Coproduct and product](coproduct_product_duality.svg)
Otherwise, when in category theory two concepts are captured by the same diagram, only with reversed arrows, we can say that the two concepts are **dual** to each other. That means that the concepts of *product* and *sum* are dual (this is why sum is also known as *converse product*, or *coproduct* in short).
Category Theory - brief definition
===
Maybe it is time to see what a category is. Well, a category consists of objects (an example of which are sets) and morphisms which go from one object to another (which can be viewed as functions) and which should be composable. We can say a lot more about categories, and even present a formal definition, but for now it is suffice for you to remember that sets are one example of a category and that categorical objects are like sets, except that we don't *see* their elements. This is why category-theoretic notions being captured by the external diagrams and strictly set-theoretic notions being captured by internal ones.
What other categories, or applications of category theory are there, other than sets? We already discussed one - types in programming languages. Remember that we said that programming types (classes) are somewhat similar to sets and programming functions are somewhat similar to functions between sets? This is another example of a connection between two things that we can be defined using category theory:
| Category Theory | Set theory | Programming Languages |
| --- | --- | --- |
| Category | N/A | N/A |
| Objects and Morphisms | Sets and Functions | Classes and functions |
| N/A | Element | Object |
This diagram illustrates how category theory allows us to see the big picture when it comes to sets and similar structures - when we are at the realm of sets we can view the set as a collection of individual elements. In category theory we don't have such notion, but we saw how taking this notion away allows us to define concepts such as the sum and product sets in a whole different and more general way.
**NB: Do note how the world "Object" is used in both programming languages and in category theory, but for completely different things. The equivalent a categorical object is equivalent to a class in programming language.**
Looking at the table I cannot help but notice the somehow weird, but otherwise completely logical symmetry (or perhaps "reverse symetry") between the the world as viewed through the lense of set theory, and the way it is viewed through the (inverted) lens of cathegory theory:
| Category Theory | Set theory |
| --- | --- |
| Category | **N/A** |
| Objects and Morphisms | Sets and functions |
| **N/A** | Element |
By switching to external diagrams, we lose sight of the particular (the elements of our sets), but we have gained the ability to see the whole universe that we have been previously trapped in. The whole realm of sets, can be thought as one category, a programming language can also be thought as a category. The concept of a category allows us to find and analyse similarities between these and other structures.
![Category theory and set theory compared](set_category.svg)
One remark before we go - the last paragraphs I sound as if I'm *comparing* categories and sets and rooting for categories. I don't want you to get the wrong impression that the two concepts are somehow competing with one another.
Perhaps that notion would be somewhat correct if category and set theory were meant to describe *concrete* phenomena, in the way that the theory of relativity and the theory of quantum mechanics in physics. Concrete theories are conceived mainly as *descriptions* of the world, and as such it makes sense for them to be connected to one another in some sort of hierarchy. Abstract theories, like category theory and set theory, on the other hand, are more like languages for expressing such descriptions. They still can be connected, and are connected in more than one way, but there is no inherent hierarchy between the two and therefore arguing over which of the two is more basic, or more general, is just a chicken-and-egg problem, as you would see in the next chapter.

View File

@ -2,7 +2,7 @@
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:ns1="&amp;#38;#38;#38;ns_ai;"
xmlns:ns1="&amp;#38;#38;#38;#38;ns_ai;"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
@ -23,7 +23,7 @@
height="200"><metadata
id="metadata21615"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title /></cc:Work></rdf:RDF></metadata><defs
id="defs21613" /><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
@ -38,7 +38,7 @@
id="namedview21611"
showgrid="false"
inkscape:zoom="2.8284271"
inkscape:cx="263.5868"
inkscape:cx="206.13437"
inkscape:cy="148.46878"
inkscape:window-x="-8"
inkscape:window-y="-8"
@ -116,4 +116,16 @@
stroke-miterlimit="10"
style="fill:#e1e1e1;fill-opacity:1;stroke:#808285;stroke-width:15.83508873;stroke-miterlimit:10;stroke-dasharray:none"
rx="89.267967"
ry="84.777237" /></g></svg>
ry="84.777237" /><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:51.63809586px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#6d6d6d;fill-opacity:1;stroke:none;stroke-width:1.29095244"
x="255.19595"
y="289.32361"
id="text1729-5"
transform="scale(0.99633854,1.0036749)"><tspan
sodipodi:role="line"
id="tspan1727-8"
x="255.19595"
y="289.32361"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:1.29095244">ID</tspan></text>
</g></svg>

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 5.8 KiB

175
03_logic/isomorpism.svg Normal file
View File

@ -0,0 +1,175 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg
xmlns:i="&amp;#38;ns_ai;"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
x="0px"
y="0px"
viewBox="0 0 595.3 200"
enable-background="new 0 0 595.3 359"
xml:space="preserve"
id="svg29165"
sodipodi:docname="isomorpism.svg"
inkscape:version="0.92.4 (5da689c313, 2019-01-14)"
width="595.29999"
height="200"><metadata
id="metadata29171"><rdf:RDF><cc:Work
rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
id="defs29169">
</defs><sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1920"
inkscape:window-height="1057"
id="namedview29167"
showgrid="false"
inkscape:zoom="2.7272253"
inkscape:cx="345.89448"
inkscape:cy="187.27831"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="g29161"
units="in"
inkscape:snap-text-baseline="false" />
<switch
id="switch29163"
transform="translate(0,-159)">
<foreignObject
requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/"
x="0"
y="0"
width="1"
height="1">
</foreignObject>
<g
i:extraneous="self"
id="g29161">
<g
id="Layer_2"
transform="matrix(1.2421138,0.50680151,-0.50680151,1.2421138,2.0550193,-192.89532)">
</g>
<g
transform="matrix(-1.2201296,0.60572002,0.6457003,1.144582,661.42344,-84.837383)"
id="g38229-2-1"
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"><g
id="g38227-3-8"
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"><g
id="g38225-0-8"
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"><path
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 395.9,86.5 c 0,0 -1,0.2 -2.7,0.6 -0.9,0.2 -1.9,0.4 -3.1,0.7 -1.2,0.3 -2.5,0.6 -4,1 -5.8,1.5 -13.4,4 -20.7,7.1 -7.3,3.1 -14.4,6.9 -19.5,10.1 -2.5,1.6 -4.7,2.9 -6.1,3.9 -0.6,0.4 -0.9,0.6 -0.9,0.6 l -6.6,-9.5 c -4.3,8.3 -7.8,16.7 -10.3,25.1 8.5,-2 17,-3.1 25.2,-3.4 l -6.5,-9.5 c 0,0 0.3,-0.2 0.9,-0.6 1.4,-1 3.5,-2.3 6,-3.8 5,-3.1 11.9,-6.8 19.1,-9.8 7.2,-3.1 14.6,-5.5 20.3,-7 1.4,-0.4 2.7,-0.7 3.9,-1 1.2,-0.3 2.2,-0.5 3,-0.7 1.7,-0.4 2.6,-0.6 2.6,-0.6 z"
id="path38223-9-1" /></g></g></g><g
transform="matrix(1.3033795,-0.56946081,-0.68975667,-1.0760658,-96.334904,598.6675)"
id="g38229-2-1-4"
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"><g
id="g38227-3-8-4"
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"><g
id="g38225-0-8-0"
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"><path
style="fill:#6d6d6d;fill-opacity:1;stroke-width:0.30000001;stroke-miterlimit:4;stroke-dasharray:none"
inkscape:connector-curvature="0"
d="m 395.9,86.5 c 0,0 -1,0.2 -2.7,0.6 -0.9,0.2 -1.9,0.4 -3.1,0.7 -1.2,0.3 -2.5,0.6 -4,1 -5.8,1.5 -13.4,4 -20.7,7.1 -7.3,3.1 -14.4,6.9 -19.5,10.1 -2.5,1.6 -4.7,2.9 -6.1,3.9 -0.6,0.4 -0.9,0.6 -0.9,0.6 l -6.6,-9.5 c -4.3,8.3 -7.8,16.7 -10.3,25.1 8.5,-2 17,-3.1 25.2,-3.4 l -6.5,-9.5 c 0,0 0.3,-0.2 0.9,-0.6 1.4,-1 3.5,-2.3 6,-3.8 5,-3.1 11.9,-6.8 19.1,-9.8 7.2,-3.1 14.6,-5.5 20.3,-7 1.4,-0.4 2.7,-0.7 3.9,-1 1.2,-0.3 2.2,-0.5 3,-0.7 1.7,-0.4 2.6,-0.6 2.6,-0.6 z"
id="path38223-9-1-9" /></g></g></g><g
transform="matrix(0,0.60836362,-0.66525607,0,502.07303,-136.51302)"
style="stroke:#818485;stroke-width:6.38910723;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g5251-7-3-9"><g
style="stroke:#f6dd2a;stroke-width:6.38910723;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g5344-9-0"
transform="matrix(0.89549116,-0.02139737,0.01924054,0.81712904,282.4952,103.1622)"><g
style="fill:none;fill-opacity:1;stroke:#6d6d6d;stroke-width:35.52577591;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g25662-9-07-9-3"
transform="matrix(0.6961485,-0.04333315,0.04774239,0.64822909,80.807317,48.914181)"><path
id="path25660-5-99-6-8"
d="M 315.1,101.7909 C 325.78189,97.654679 336.86942,94.052162 348.22738,90.716499 339.70891,82.577479 330.64958,74.705313 321.04941,67.1 319.0099,79.218677 317.94578,88.763174 315.1,101.7909 Z"
inkscape:connector-curvature="0"
style="fill:none;fill-opacity:1;stroke:#6d6d6d;stroke-width:35.52577591;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccc" /></g><path
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#6d6d6d;stroke-width:10.64851189;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
d="m 382.50059,152.61214 c -51.1662,72.82269 -109.78507,64.46117 -131.93175,30.38911 -16.47603,-25.34791 -9.29412,-98.302071 48.50484,-93.631865"
id="path5246-5-8-3-3"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" /></g></g><circle
style="fill:#999491;fill-opacity:1;stroke:#858585;stroke-width:8.04899979;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="circle29154"
cy="98.283379"
cx="456.06403"
stroke-miterlimit="10"
transform="rotate(22.196215)"
r="33.00156" /><g
transform="matrix(0,0.60836362,-0.66525607,0,325.31344,-132.85474)"
style="stroke:#818485;stroke-width:6.38910723;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g5251-7-3-9-0"><g
style="stroke:#f6dd2a;stroke-width:6.38910723;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g5344-9-0-6"
transform="matrix(0.89549116,-0.02139737,0.01924054,0.81712904,282.4952,103.1622)"><g
style="fill:none;fill-opacity:1;stroke:#6d6d6d;stroke-width:35.52577591;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="g25662-9-07-9-3-9"
transform="matrix(0.6961485,-0.04333315,0.04774239,0.64822909,80.807317,48.914181)"><path
id="path25660-5-99-6-8-9"
d="M 315.1,101.7909 C 325.78189,97.654679 336.86942,94.052162 348.22738,90.716499 339.70891,82.577479 330.64958,74.705313 321.04941,67.1 319.0099,79.218677 317.94578,88.763174 315.1,101.7909 Z"
inkscape:connector-curvature="0"
style="fill:none;fill-opacity:1;stroke:#6d6d6d;stroke-width:35.52577591;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
sodipodi:nodetypes="cccc" /></g><path
style="opacity:1;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:#6d6d6d;stroke-width:10.64851189;stroke-linejoin:miter;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1;paint-order:markers fill stroke"
d="m 382.50059,152.61214 c -51.1662,72.82269 -109.78507,64.46117 -131.93175,30.38911 -16.47603,-25.34791 -9.29412,-98.302071 48.50484,-93.631865"
id="path5246-5-8-3-3-0"
inkscape:connector-curvature="0"
sodipodi:nodetypes="csc" /></g></g><circle
style="fill:#999491;fill-opacity:1;stroke:#858585;stroke-width:8.04899979;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1"
id="circle29154-1"
cy="172.90698"
cx="286.77554"
stroke-miterlimit="10"
transform="rotate(22.196215)"
r="33.00156" /><text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.2466259px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#6d6d6d;fill-opacity:1;stroke:none;stroke-width:0.60616565"
x="342.85718"
y="211.48004"
id="text1729"><tspan
sodipodi:role="line"
id="tspan1727"
x="342.85718"
y="211.48004"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.60616565">ID</tspan></text>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:24.2466259px;line-height:1.25;font-family:sans-serif;letter-spacing:0px;word-spacing:0px;fill:#6d6d6d;fill-opacity:1;stroke:none;stroke-width:0.60616565"
x="166.80447"
y="214.73524"
id="text1729-5"><tspan
sodipodi:role="line"
id="tspan1727-8"
x="166.80447"
y="214.73524"
style="font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:sans-serif;-inkscape-font-specification:'sans-serif Bold';stroke-width:0.60616565">ID</tspan></text>
</g>
</switch>
</svg>

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -1,9 +1,9 @@
Some other categories
===
Every category theory guide (including mine) starts by talking about set theory. However looking back I really don't know why that is the case (most books that center around a specific subject don't start by introducing a different subject). Perhaps the set-first approach is the best way to introduce people to categories, or perhaps that is just one of the things that people just do, simply because everyone else does it.
Every category theory guide (including mine) starts by talking about set theory. However, looking back, I really don't know why that is the case - most other books that focus around a specific subject don't start by introducing an entirely different subject. Perhaps the set-first approach is the best way to introduce people to categories, or perhaps that is just one of the things that people just do, simply because everyone else does it. But one thing is for sure - we don't need to study sets in order to understand categories. So in this chapter I would like to start over and talk about categories as a first concept.
One thing is for sure - we don't need to study sets in order to understand categories. So in this chapter I would like to start over and talk about categories as a first concept. Pretend like it's a new book:
Pretend like it's a new book:
Starting over with categories
===
@ -12,41 +12,41 @@ So, a category is a collection of objects (things) where the "things" can be any
![Balls](elements.svg)
A category consists of a collection of objects **as well as** some arrows connecting some of them, that we call (the arrows) morphisms.
A category consists of a collection of objects as well as some arrows connecting some of them to one another, that we call (the arrows) morphisms.
![A category](category.svg)
We said that all sets form a category, but at the same time any one set can be seen as a category by itself (just one which has no morphisms). This is an example of a phenomenon that is very characteristic of category theory - one structure can be examined in many different ways and play many different roles, often in a recursive fashion.
Wait a minute - we said that all sets form a category, but at the same time any one set can be seen as a category on its own right (just one which has no morphisms). This is an example of a phenomenon that is very characteristic of category theory - one structure can be examined in many different ways and play many different roles, often in a recursive fashion.
This particular role of a set as a category with no morphisms is, however, not very useful - category theory is **all about the morphisms**. If in set theory, an arrow is nothing but its source and destination, in category theory, an **object** is nothing but a source and destination for the arrows that connect it to other objects. This is why in this chapter the arrows and not the objects are displayed in different colours the category of sets is really the category of set functions.
This particular analogy (a set as a category with no morphisms) is, however, not very useful - category theory is *all about the morphisms*. If in set theory, arrows are nothing but a connection between a source and a destination, in category theory it's the *objects* that are nothing but a source and destination for the arrows that connect them to other objects. This is why in this chapter the arrows, and not the objects, are coloured - the category of sets should really be called the category of set functions.
Speaking of which, note that objects in a category can be connected by multiple arrows and that arrows having the same domain and codomain does not in any way make the equivalent.
Speaking of which, note that objects in a category can be connected by multiple arrows and that arrows having the same domain and codomain does not in any way make them equivalent.
![Two objects connected with multiple arrows](arrows.svg)
That's pretty obvious if we go back to set theory for a second - there are, for example, an infinite number of functions that go from number to boolean and the fact that they have the same signature does in no way make them equivalent to one another.
Why is that is pretty obvious if we go back to set theory for a second (maybe we really have to do this from time to time) - there are, for example, an infinite number of functions that go from number to boolean and the fact that they have the same signature does in no way make them equivalent to one another.
![Two sets connected with multiple functions](set_arrows.svg)
Composition
---
One of the few, or maybe even the only, requirement for a structure to be called a category is that two morphisms can make a third, or that morphisms are *composable*. In practice this means that given two successive arrows, we can draw a third one that is equivalent to the consecutive application of the other two.
One of the few, or maybe even the only, requirement for a structure to be called a category is that two morphisms can make a third, or in other words that morphisms are *composable*. In practice this means that given two successive arrows, we can draw a third one that is equivalent to the consecutive application of the other two.
![Composition of morphisms](composition.svg)
Again, note that this criteria is not met by just *any* morphism with this type signature. There is *exactly one* morphism that fits these criteria.
Again, note that this criteria is not met by just *any* morphism with this type signature. There is *exactly one* morphism that fits these criteria and there may be some which don't.
![Composition of morphisms in the context of additional morphism](composition_arrows.svg)
Commuting diagrams
---
In the function composition diagrams above, we used colors to illustrate that the third morphism is equivalent to the other two and not just some unrelated morphism. In practice this notation is a little redundant - the only reason to draw diagrams with arrows in the first place is represent paths between objects that are equivalent to each other.
The diagram above, uses colors to illustrate the fact that the third morphism is equivalent to the other two (and not just some unrelated morphism), but in practice this notation is a little redundant - the only reason to draw diagrams with arrows in the first place is represent paths between objects that are equivalent to each other, all other paths should just go in different diagrams. So let's drop the colors:
![Composition of morphisms - a commuting diagram](composition_commuting_diagram.svg)
Diagrams that are like that in which any two paths between two objects are equivalent to one another are called commutative diagrams (or diagrams that commute). All diagrams that we have here (except the wrong ones) commute.
Diagrams that are like that (ones in which any two paths between two objects are equivalent to one another) are called commutative diagrams (or diagrams that commute). All diagrams that we have here (except the wrong ones) commute.
Identity
---
@ -55,14 +55,16 @@ In order to be able to define more stuff using morphisms, we define what we call
![The identity morphism (but can also be any other morphism)](identity.svg)
Let's add the very important (and also very boring) reminder that there can be many morphisms from one object to the same object, that actually do stuff, for example mathematics deals with a multitude of functions that have the set of numbers as domain and codomain (e.g. negate, square, add one etc.) and are not at all the identity morphism.
It's important to mark this morphism, because there can be (let's add the very important (and also very boring) reminder) many morphisms from one object to the same object, that actually do stuff. For example mathematics deals with a multitude of functions that have the set of numbers as domain and codomain (e.g. negate, square, add one etc.) and are not at all the identity morphism.
**Question:** What is the identity morphism in the category of sets?
Isomorphisms
---
The concept of identity morphism, provides us with a category-theoretic definition of an isomoprhism - an isomorphism between two objects (**A** and **B**) consists of two functions - (**A → B**. and **B → A**) such that their composition is equivalent to the identity function.
The concept of identity morphism, provides us with a category-theoretic definition of an isomoprhism. We can say that an isomorphism between two objects (**A** and **B**) consists of two functions - (**A → B**. and **B → A**) such that their composition is equivalent to the identity function. Or alternatively we can express that by the following commuting diagram.
![Isomorphism](isomorphism.svg)
What the diagram expresses is that going from the one object to the other one and then back again is the same as applying the identity morphism i.e. doing nothing.

View File

@ -1,76 +1,76 @@
#
# This file contains configuration flags to customize your site
#
# Name of your site (displayed in the header)
name: Category theory illustrated
# Short bio or description (displayed in the header)
description: Sets, categories, logic and other stuffs, represented visually
# URL of your avatar or profile pic (you could use your GitHub profile pic)
avatar: https://raw.githubusercontent.com/barryclark/jekyll-now/master/images/jekyll-logo.png
#
# Flags below are optional
#
# Includes an icon in the footer for each username you enter
footer-links:
dribbble:
email:
facebook:
flickr:
github: barryclark/jekyll-now
instagram:
linkedin:
pinterest:
rss: # just type anything here for a working RSS icon, make sure you set the "url" above!
twitter: jekyllrb
stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers"
youtube: # channel/<your_long_string> or user/<user-name>
# Enter your Disqus shortname (not your username) to enable commenting on posts
# You can find your shortname on the Settings page of your Disqus account
disqus:
# Enter your Google Analytics web tracking code (e.g. UA-2110908-2) to activate tracking
google_analytics:
# Your website URL (e.g. http://barryclark.github.io or http://www.barryclark.co)
# Used for Sitemap.xml and your RSS feed
url:
excerpt_separator: <!--more--> # you can specify your own separator, of course.
# If you're hosting your site at a Project repository on GitHub pages
# (http://yourusername.github.io/repository-name)
# and NOT your User repository (http://yourusername.github.io)
# then add in the baseurl here, like this: "/repository-name"
#baseurl: "/funktion"
#
# !! You don't need to change any of the configuration flags below !!
#
highlighter: rouge
permalink: /:title/
# The release of Jekyll Now that you're using
version: v1.1.0
# Set the Sass partials directory, as we're using @imports
sass:
style: :expanded # You might prefer to minify using :compressed
# Use the following plug-ins
gems:
- jekyll-sitemap # Create a sitemap using the official Jekyll sitemap gem
- jekyll-feed
# Exclude these files from your production _site
exclude:
- Gemfile
- Gemfile.lock
- LICENSE
- README.md
#
# This file contains configuration flags to customize your site
#
# Name of your site (displayed in the header)
name: Category theory illustrated
# Short bio or description (displayed in the header)
description: Sets, categories, logic and other stuffs, represented visually
# URL of your avatar or profile pic (you could use your GitHub profile pic)
avatar: https://raw.githubusercontent.com/barryclark/jekyll-now/master/images/jekyll-logo.png
#
# Flags below are optional
#
# Includes an icon in the footer for each username you enter
footer-links:
dribbble:
email:
facebook:
flickr:
github: barryclark/jekyll-now
instagram:
linkedin:
pinterest:
rss: # just type anything here for a working RSS icon, make sure you set the "url" above!
twitter: jekyllrb
stackoverflow: # your stackoverflow profile, e.g. "users/50476/bart-kiers"
youtube: # channel/<your_long_string> or user/<user-name>
# Enter your Disqus shortname (not your username) to enable commenting on posts
# You can find your shortname on the Settings page of your Disqus account
disqus:
# Enter your Google Analytics web tracking code (e.g. UA-2110908-2) to activate tracking
google_analytics:
# Your website URL (e.g. http://barryclark.github.io or http://www.barryclark.co)
# Used for Sitemap.xml and your RSS feed
url:
excerpt_separator: <!--more--> # you can specify your own separator, of course.
# If you're hosting your site at a Project repository on GitHub pages
# (http://yourusername.github.io/repository-name)
# and NOT your User repository (http://yourusername.github.io)
# then add in the baseurl here, like this: "/repository-name"
#baseurl: "/funktion"
#
# !! You don't need to change any of the configuration flags below !!
#
highlighter: rouge
permalink: /:title/
# The release of Jekyll Now that you're using
version: v1.1.0
# Set the Sass partials directory, as we're using @imports
sass:
style: :expanded # You might prefer to minify using :compressed
# Use the following plug-ins
gems:
- jekyll-sitemap # Create a sitemap using the official Jekyll sitemap gem
- jekyll-feed
# Exclude these files from your production _site
exclude:
- Gemfile
- Gemfile.lock
- LICENSE
- README.md

View File

@ -1,11 +1,11 @@
## About
This book is a product of my own endeavour of understanding category theory from a more non-mathematical viewpoint - it is just that as I am explaining something, I am understanding it better.
It is aimed at programmers, as well as anyone else who is interested in this stuff. I am writing it as I learn.
The main reason I am interested in Category Theory is that it allows us to formalise some common concepts that we use in our daily (intellectual) lives. Much of our language is based on intuition and rightfully so: relying on intuition is a very easy way to get your point across so it is understood by other human beings. However, that is part of the problem: sometimes intuition makes it too easy to communicate with someone. So easy that he might, in fact, understand things that you haven't actually said. For example, when I say that two things are equal, it would seem obvious to you what I mean, although it isn't obvious at all (how are they equal, at what context etc). That is the place when we might want to provide a more rigorous definition of what am I saying (even if I did not have one, to begin with). But providing such definition in natural language, which is designed to use intuition as a means of communication, is no easy task. It is in these situations that people often resort to diagrams to explain their thoughts. Diagrams are ubiquitous in science and mathematics because they are an understandable way to communicate a formal concept clearly. Category theory formalises the concept of a diagram and their components - arrows and objects and creates a language for presenting all kinds of ideas.
## Contents
* [01 - Sets. What is an Abstract Theory](/01_set/text.md)
* [02 - From Sets to Categories](/02_more_sets/text.md)
## About
This book is a product of my own endeavour of understanding category theory from a more non-mathematical viewpoint - it is just that as I am explaining something, I am understanding it better.
It is aimed at programmers, as well as anyone else who is interested in this stuff. I am writing it as I learn.
The main reason I am interested in Category Theory is that it allows us to formalise some common concepts that we use in our daily (intellectual) lives. Much of our language is based on intuition and rightfully so: relying on intuition is a very easy way to get your point across so it is understood by other human beings. However, that is part of the problem: sometimes intuition makes it too easy to communicate with someone. So easy that he might, in fact, understand things that you haven't actually said. For example, when I say that two things are equal, it would seem obvious to you what I mean, although it isn't obvious at all (how are they equal, at what context etc). That is the place when we might want to provide a more rigorous definition of what am I saying (even if I did not have one, to begin with). But providing such definition in natural language, which is designed to use intuition as a means of communication, is no easy task. It is in these situations that people often resort to diagrams to explain their thoughts. Diagrams are ubiquitous in science and mathematics because they are an understandable way to communicate a formal concept clearly. Category theory formalises the concept of a diagram and their components - arrows and objects and creates a language for presenting all kinds of ideas.
## Contents
* [01 - Sets. What is an Abstract Theory](/01_set/text.md)
* [02 - From Sets to Categories](/02_more_sets/text.md)

View File

@ -1,8 +1,8 @@
Category Theory Illustrated
===
This is a book about Category Theory that I started writing. Read it at
http://boris-marinov.github.io/category-theory-illustrated/
==
Category Theory Illustrated
===
This is a book about Category Theory that I started writing. Read it at
http://boris-marinov.github.io/category-theory-illustrated/
==

View File

@ -1,7 +1,7 @@
## Summary
* [Sets](/01_set/text.md)
* [From Sets to Categories](/02_more_sets/text.md)
## Summary
* [Sets](/01_set/text.md)
* [From Sets to Categories](/02_more_sets/text.md)