embulk 0.6.16 → 0.6.17

Sign up to get free protection for your applications and to get access to all the features.
Files changed (41) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +33 -45
  3. data/build.gradle +3 -3
  4. data/embulk-core/src/main/java/org/embulk/spi/Exec.java +6 -0
  5. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +73 -1
  6. data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
  7. data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
  8. data/embulk-docs/src/_static/embulk-logo.svg +133 -0
  9. data/embulk-docs/src/release.rst +1 -0
  10. data/embulk-docs/src/release/release-0.6.17.rst +39 -0
  11. data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +2 -17
  12. data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +3 -22
  13. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +2 -2
  14. data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +0 -1
  15. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +18 -42
  16. data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +3 -3
  17. data/lib/embulk/command/embulk_new_plugin.rb +40 -14
  18. data/lib/embulk/command/embulk_run.rb +3 -3
  19. data/lib/embulk/data/new/README.md.erb +18 -17
  20. data/lib/embulk/data/new/java/build.gradle.erb +1 -1
  21. data/lib/embulk/data/new/java/decoder.java.erb +53 -9
  22. data/lib/embulk/data/new/java/encoder.java.erb +54 -8
  23. data/lib/embulk/data/new/java/file_input.java.erb +91 -12
  24. data/lib/embulk/data/new/java/file_output.java.erb +35 -8
  25. data/lib/embulk/data/new/java/filter.java.erb +16 -7
  26. data/lib/embulk/data/new/java/formatter.java.erb +16 -7
  27. data/lib/embulk/data/new/java/input.java.erb +18 -14
  28. data/lib/embulk/data/new/java/output.java.erb +16 -8
  29. data/lib/embulk/data/new/java/parser.java.erb +17 -8
  30. data/lib/embulk/data/new/java/plugin_loader.rb.erb +1 -1
  31. data/lib/embulk/data/new/java/test.java.erb +1 -1
  32. data/lib/embulk/data/new/ruby/filter.rb.erb +6 -4
  33. data/lib/embulk/data/new/ruby/formatter.rb.erb +6 -4
  34. data/lib/embulk/data/new/ruby/gemspec.erb +2 -2
  35. data/lib/embulk/data/new/ruby/input.rb.erb +6 -4
  36. data/lib/embulk/data/new/ruby/output.rb.erb +6 -4
  37. data/lib/embulk/data/new/ruby/parser.rb.erb +6 -4
  38. data/lib/embulk/file_input.rb +4 -0
  39. data/lib/embulk/file_output.rb +4 -0
  40. data/lib/embulk/version.rb +1 -1
  41. metadata +8 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0923308ef177929c5e59513c16d318379c5d4993
4
- data.tar.gz: ff6459b193b9635b5f666ffc3f4c878577c06e64
3
+ metadata.gz: c667cedd2e533e4a3404c81baa92618dfd826644
4
+ data.tar.gz: fc3c840b3c855395c02b3d2ba3e84cf3428a8a55
5
5
  SHA512:
6
- metadata.gz: 7a5ee5b44def0c21d59f9a4ea27ba643c086626d681ad342630cd899005c05e1e1ad6fea55eb3aefd21e817cfa371156481522e59f6d5af560bfd16cab0e6f6a
7
- data.tar.gz: cf930364ad7f307871700e9637490d3a445b1a0e78e479727828924e9e947301041c1c87834bbcb3d763e81f39afb98204c8da2fc5a2a4f7cd880b53b25c84a2
6
+ metadata.gz: e30b36e74c05cc9a3f63565691fd4366803be573f9909c1cfcce1292a65a1c7b70a1a6d324990555f89b774c786a8dc1316012f9f9a4330f52c3963573cedaa9
7
+ data.tar.gz: 8299b1e6c264a0031e2de1c557fd1a91eae1d24bf7badfc671e81fdc007421c4cc77dbc40cb8e6c15f66d54bd259be44b925772104055105988a704401f52418
data/README.md CHANGED
@@ -1,58 +1,48 @@
1
1
  # What's Embulk?
2
2
 
3
- Embulk is a plugin-based parallel bulk data loader that helps **data transfer** between various **storages**, **databases**, **NoSQL** and **cloud services**.
3
+ Embulk is a parallel bulk data loader that **helps data transfer between various storages, databases, NoSQL and cloud services**.
4
4
 
5
- You can release plugins to share your efforts of data cleaning, error handling, transaction control, and retrying. Packaging efforts into plugins **brings OSS-style development to the data scripts** which **was tend to be one-time adhoc scripts**.
6
-
7
- [Embulk, an open-source plugin-based parallel bulk data loader](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed) at Slideshare
5
+ **Embulk supports plugins** to add functions. You can [share the plugins](http://www.embulk.org/plugins/) to keep your custom scripts readable, maintainable, and reusable.
8
6
 
9
7
  [![Embulk](https://gist.githubusercontent.com/frsyuki/f322a77ee2766a508ba9/raw/e8539b6b4fda1b3357e8c79d3966aa8148dbdbd3/embulk-overview.png)](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed/12)
8
+ [Embulk, an open-source plugin-based parallel bulk data loader](http://www.slideshare.net/frsyuki/embuk-making-data-integration-works-relaxed) at Slideshare
10
9
 
11
10
  # Document
12
11
 
13
- * [Quick Start](#quick-start)
14
- * [Using plugins](#using-plugins)
15
- * [Using plugin bundle](#using-plugin-bundle)
16
- * [Releasing plugins to RubyGems](#releasing-plugins-to-rubygems)
17
- * [Resuming a failed transaction](#resuming-a-failed-transaction)
18
- * [Embulk Development](#embulk-development)
19
- * [Build](#build)
20
- * [Release](#release)
12
+ Embulk documents: http://www.embulk.org/docs/
21
13
 
22
14
  ## Quick Start
23
15
 
24
- The single-file package is the simplest way to try Embulk. You can download the latest embulk-VERSION.jar from [the releases page](https://bintray.com/embulk/maven/embulk/view#files) and run it with java.
25
-
26
16
  ### Linux & Mac & BSD
27
17
 
28
- Embulk is a Java application. Please make sure that you installed [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html).
18
+ Embulk is a Java application. Please make sure that [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) is installed.
29
19
 
30
20
  Following 4 commands install embulk to your home directory:
31
21
 
32
- ```
22
+ ```sh
33
23
  curl --create-dirs -o ~/.embulk/bin/embulk -L "http://dl.embulk.org/embulk-latest.jar"
34
24
  chmod +x ~/.embulk/bin/embulk
35
25
  echo 'export PATH="$HOME/.embulk/bin:$PATH"' >> ~/.bashrc
36
26
  source ~/.bashrc
37
27
  ```
38
28
 
39
- Next step: [Trying the example](#trying-the-example)
29
+ Next step: [Running example in 4 commands](#running-example)
40
30
 
41
31
  ### Windows
42
32
 
43
- Embulk is a Java application. Please make sure that you installed [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html).
33
+ Embulk is a Java application. Please make sure that [Java](http://www.oracle.com/technetwork/java/javase/downloads/index.html) is installed.
44
34
 
45
- You can assume the jar file is a .bat file.
35
+ You can download `embulk.bat` using this command on cmd.exe or PowerShell.exe:
46
36
 
47
37
  ```
48
38
  PowerShell -Command "& {Invoke-WebRequest http://dl.embulk.org/embulk-latest.jar -OutFile embulk.bat}"
49
39
  ```
50
40
 
51
- Next step: [Trying the example](#trying-the-example)
41
+ Next step: [Running example in 4 commands](#running-example)
52
42
 
53
- ### Trying the example
43
+ ### Running example
54
44
 
55
- Let's load a CSV file, for example. `embulk example` subcommand generates a csv file and config file for you.
45
+ `embulk example` command generates a sample CSV file so that you can try embulk quickly:
56
46
 
57
47
  ```
58
48
  embulk example ./try1
@@ -78,9 +68,10 @@ embulk gem list
78
68
 
79
69
  Embulk bundles some built-in plugins such as `embulk-encoder-gzip` or `embulk-formatter-csv`. You can use those plugins with following configuration file:
80
70
 
81
- ```
71
+ ```yaml
82
72
  in:
83
- # ...
73
+ type: file
74
+ path_prefix: "./try1/csv/sample_"
84
75
  out:
85
76
  type: command
86
77
  command: "cat - > task.$INDEX.$SEQID.csv.gz"
@@ -90,27 +81,6 @@ out:
90
81
  type: csv
91
82
  ```
92
83
 
93
- ### Using plugin bundle
94
-
95
- `embulk bundle` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
96
- You can use the bundle using `-b <bundle_dir>` option. `embulk bundle` also generates some example plugins to \<bundle_dir>/embulk/\*.rb directory.
97
-
98
- See the generated \<bundle_dir>/Gemfile file how to plugin bundles work.
99
-
100
- ```
101
- embulk bundle ./embulk_bundle
102
- embulk guess -b ./embulk_bundle ...
103
- embulk run -b ./embulk_bundle ...
104
- ```
105
-
106
- ### Releasing plugins to RubyGems
107
-
108
- TODO: documents
109
-
110
- ```
111
- embulk-plugin-xyz
112
- ```
113
-
114
84
  ### Resuming a failed transaction
115
85
 
116
86
  Embulk supports resuming failed transactions.
@@ -132,6 +102,24 @@ If you give up on resuming the transaction, you can use `embulk cleanup` subcomm
132
102
  embulk cleanup config.yml -r resume-state.yml
133
103
  ```
134
104
 
105
+ ### Using plugin bundle
106
+
107
+ `embulk bundle` subcommand creates (or updates if already exists) a private (isolated) bundle of a plugins.
108
+ You can use the bundle using `-b <bundle_dir>` option. `embulk bundle` also generates some example plugins to \<bundle_dir>/embulk/\*.rb directory.
109
+
110
+ See the generated \<bundle_dir>/Gemfile file how to plugin bundles work.
111
+
112
+ ```
113
+ embulk bundle ./embulk_bundle
114
+ embulk guess -b ./embulk_bundle ...
115
+ embulk run -b ./embulk_bundle ...
116
+ ```
117
+
118
+ ## Use cases
119
+
120
+ * [Scheduled bulk data loading to Elasticsearch + Kibana 4 from CSV files](http://www.embulk.org/docs/recipe/scheduled-csv-load-to-elasticsearch-kibana4.html)
121
+
122
+ For further details, visit [Embulk documentation](http://www.embulk.org/docs/).
135
123
 
136
124
  ## Embulk Development
137
125
 
data/build.gradle CHANGED
@@ -11,7 +11,7 @@ def release_projects = [project(":embulk-core"), project(":embulk-standards")]
11
11
 
12
12
  allprojects {
13
13
  group = 'org.embulk'
14
- version = '0.6.16'
14
+ version = '0.6.17'
15
15
 
16
16
  ext {
17
17
  jrubyVersion = '1.7.19'
@@ -282,9 +282,9 @@ Manual operations:
282
282
  bintrayUpload.mustRunAfter('releaseCheck')
283
283
  rubyGemsUpload.mustRunAfter('releaseCheck')
284
284
 
285
- task set_version << {
285
+ task setVersion << {
286
286
  if (!project.hasProperty("to")) {
287
- throw new GradleException("Usage: ./gradlew -Pto=VERSION")
287
+ throw new GradleException("Usage: ./gradlew setVersion -Pto=VERSION")
288
288
  }
289
289
 
290
290
  File gradle_ver = file('build.gradle')
@@ -10,6 +10,7 @@ import org.embulk.config.ConfigDiff;
10
10
  import org.embulk.config.ConfigSource;
11
11
  import org.embulk.config.TaskSource;
12
12
  import org.embulk.plugin.PluginType;
13
+ import org.embulk.spi.time.Timestamp;
13
14
 
14
15
  public class Exec
15
16
  {
@@ -43,6 +44,11 @@ public class Exec
43
44
  return session().getInjector();
44
45
  }
45
46
 
47
+ public static Timestamp getTransactionTime()
48
+ {
49
+ return session().getTransactionTime();
50
+ }
51
+
46
52
  public static Logger getLogger(String name)
47
53
  {
48
54
  return session().getLogger(name);
@@ -19,7 +19,13 @@ public class InputStreamFileInput
19
19
  public void close() throws IOException;
20
20
  }
21
21
 
22
- public static class IteratorProvider implements Provider {
22
+ public interface Opener
23
+ {
24
+ public InputStream open() throws IOException;
25
+ }
26
+
27
+ public static class IteratorProvider implements Provider
28
+ {
23
29
  private Iterator<InputStream> iterator;
24
30
 
25
31
  public IteratorProvider(Iterable<InputStream> iterable)
@@ -32,6 +38,7 @@ public class InputStreamFileInput
32
38
  this.iterator = iterator;
33
39
  }
34
40
 
41
+ @Override
35
42
  public InputStream openNext() throws IOException
36
43
  {
37
44
  if (!iterator.hasNext()) {
@@ -49,6 +56,61 @@ public class InputStreamFileInput
49
56
  }
50
57
  }
51
58
 
59
+ private static class OpenerProvider implements Provider
60
+ {
61
+ private Opener opener;
62
+
63
+ public OpenerProvider(Opener opener)
64
+ {
65
+ this.opener = opener;
66
+ }
67
+
68
+ @Override
69
+ public InputStream openNext() throws IOException
70
+ {
71
+ if (opener == null) {
72
+ return null;
73
+ }
74
+ InputStream stream = opener.open();
75
+ opener = null;
76
+ return stream;
77
+ }
78
+
79
+ @Override
80
+ public void close() throws IOException
81
+ { }
82
+ }
83
+
84
+ private static class InputStreamProvider implements Provider
85
+ {
86
+ private InputStream input;
87
+
88
+ public InputStreamProvider(InputStream input)
89
+ {
90
+ this.input = input;
91
+ }
92
+
93
+ @Override
94
+ public InputStream openNext() throws IOException
95
+ {
96
+ if (input == null) {
97
+ return null;
98
+ }
99
+ InputStream ret = input;
100
+ input = null;
101
+ return ret;
102
+ }
103
+
104
+ @Override
105
+ public void close() throws IOException
106
+ {
107
+ if (input != null) {
108
+ input.close();
109
+ input = null;
110
+ }
111
+ }
112
+ }
113
+
52
114
  private final BufferAllocator allocator;
53
115
  private final Provider provider;
54
116
  private InputStream current;
@@ -60,6 +122,16 @@ public class InputStreamFileInput
60
122
  this.current = null;
61
123
  }
62
124
 
125
+ public InputStreamFileInput(BufferAllocator allocator, Opener opener)
126
+ {
127
+ this(allocator, new OpenerProvider(opener));
128
+ }
129
+
130
+ public InputStreamFileInput(BufferAllocator allocator, InputStream openedStream)
131
+ {
132
+ this(allocator, new InputStreamProvider(openedStream));
133
+ }
134
+
63
135
  public Buffer poll()
64
136
  {
65
137
  // TODO check current != null and throw Illegal State - file is not opened
@@ -0,0 +1,25 @@
1
+ package org.embulk.spi.util;
2
+
3
+ import java.io.InputStream;
4
+ import org.embulk.spi.TransactionalFileInput;
5
+ import org.embulk.spi.BufferAllocator;
6
+
7
+ public abstract class InputStreamTransactionalFileInput
8
+ extends InputStreamFileInput
9
+ implements TransactionalFileInput
10
+ {
11
+ public InputStreamTransactionalFileInput(BufferAllocator allocator, Provider provider)
12
+ {
13
+ super(allocator, provider);
14
+ }
15
+
16
+ public InputStreamTransactionalFileInput(BufferAllocator allocator, Opener opener)
17
+ {
18
+ super(allocator, opener);
19
+ }
20
+
21
+ public InputStreamTransactionalFileInput(BufferAllocator allocator, InputStream openedStream)
22
+ {
23
+ super(allocator, openedStream);
24
+ }
25
+ }
@@ -0,0 +1,53 @@
1
+ package org.embulk.spi.util;
2
+
3
+ import java.util.Map;
4
+ import com.google.common.base.Optional;
5
+ import org.embulk.config.Task;
6
+ import org.embulk.spi.Column;
7
+ import org.embulk.spi.Schema;
8
+ import org.embulk.spi.ColumnConfig;
9
+ import org.embulk.spi.SchemaConfig;
10
+ import org.embulk.spi.time.TimestampFormatter;
11
+ import org.embulk.spi.type.TimestampType;
12
+ import org.embulk.spi.time.TimestampParser;
13
+ import org.embulk.spi.SchemaConfig;
14
+
15
+ public class Timestamps
16
+ {
17
+ private Timestamps() { }
18
+
19
+ private interface TimestampColumnOption
20
+ extends Task, TimestampParser.TimestampColumnOption
21
+ { }
22
+
23
+ public static TimestampParser[] newTimestampColumnParsers(
24
+ TimestampParser.Task parserTask, SchemaConfig schema)
25
+ {
26
+ TimestampParser[] parsers = new TimestampParser[schema.getColumnCount()];
27
+ int i = 0;
28
+ for (ColumnConfig column : schema.getColumns()) {
29
+ if (column.getType() instanceof TimestampType) {
30
+ TimestampColumnOption option = column.getOption().loadConfig(TimestampColumnOption.class);
31
+ parsers[i] = new TimestampParser(parserTask, option);
32
+ }
33
+ i++;
34
+ }
35
+ return parsers;
36
+ }
37
+
38
+ public static TimestampFormatter[] newTimestampColumnFormatters(
39
+ TimestampFormatter.Task formatterTask, Schema schema,
40
+ Map<String, ? extends TimestampFormatter.TimestampColumnOption> columnOptions)
41
+ {
42
+ TimestampFormatter[] formatters = new TimestampFormatter[schema.getColumnCount()];
43
+ int i = 0;
44
+ for (Column column : schema.getColumns()) {
45
+ if (column.getType() instanceof TimestampType) {
46
+ Optional<TimestampFormatter.TimestampColumnOption> option = Optional.fromNullable(columnOptions.get(column.getName()));
47
+ formatters[i] = new TimestampFormatter(formatterTask, option);
48
+ }
49
+ i++;
50
+ }
51
+ return formatters;
52
+ }
53
+ }
@@ -0,0 +1,133 @@
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ width="466px" height="268px" viewBox="0 0 466 268" enable-background="new 0 0 466 268" xml:space="preserve">
6
+ <g>
7
+ <path fill="#EF4F39" d="M124.753,173.479c0,0,7.781,2.789,8.031,6.721c0.57,8.859,5.539,30.307-0.93,30.686
8
+ c-8.516,0.502-20.797-12.975-24.602-22.738c-5.82-14.951-4.18-19.992-4.18-19.992L124.753,173.479z"/>
9
+ <g>
10
+ <g>
11
+ <path fill="#1F1F1F" d="M38.015,225.368c1.477,4.021,3.523,7.008,6.141,8.953s5.891,2.918,9.828,2.918
12
+ c2.859,0,5.742-0.58,8.648-1.744c0.762-0.312,3.422-1.586,7.984-3.822c1.383-0.672,2.93-1.006,4.625-1.006
13
+ c2.328,0,4.297,1.051,5.906,3.152c1.34,1.699,2.012,3.398,2.012,5.096c0,3.803-2.707,7.246-8.113,10.33
14
+ c-6.488,3.713-13.844,5.57-22.07,5.57c-12.297,0-21.98-4.273-29.047-12.814c-5.094-6.17-7.645-13.592-7.645-22.268
15
+ c0-11.762,3.777-21.152,11.336-28.172c6.527-6.037,14.266-9.057,23.207-9.057c7.828,0,14.781,2.416,20.859,7.246
16
+ c5.859,4.695,9.75,11.066,11.672,19.115c0.672,2.863,1.008,5.725,1.008,8.586c0,5.277-2.93,7.916-8.789,7.916H38.015z
17
+ M64.511,211.616c-0.848-3.264-1.832-5.701-2.949-7.312c-2.414-3.531-5.812-5.299-10.195-5.299c-3.758,0-6.953,1.365-9.594,4.094
18
+ c-1.699,1.787-3.195,4.627-4.492,8.518H64.511z"/>
19
+ <path fill="#1F1F1F" d="M112.202,189.481c2.367-2.102,4.539-3.623,6.508-4.561c3.352-1.609,7.133-2.416,11.336-2.416
20
+ c5.23,0,9.812,1.117,13.75,3.354c1.742,0.984,3.598,2.797,5.566,5.434c3.355-2.727,6.215-4.693,8.586-5.902
21
+ c3.934-1.922,8.16-2.885,12.676-2.885c6.977,0,12.742,2.215,17.305,6.641c4.609,4.518,6.91,10.061,6.91,16.635v35.146
22
+ c0,3.848-0.449,6.666-1.34,8.451c-0.762,1.432-1.957,2.627-3.59,3.59c-1.633,0.961-3.344,1.443-5.129,1.443
23
+ c-1.793,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-30.652
24
+ c0-2.951-0.895-5.342-2.684-7.176c-2.012-2.146-4.559-3.221-7.645-3.221c-3.133,0-5.75,1.051-7.852,3.154
25
+ c-1.875,1.832-2.816,4.246-2.816,7.242v30.652c0,3.805-0.449,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.59,3.623
26
+ c-1.633,0.941-3.344,1.41-5.129,1.41c-1.789,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623
27
+ c-0.895-1.785-1.34-4.604-1.34-8.451v-28.641c0-4.066-0.961-7.152-2.887-9.254c-1.922-2.104-4.449-3.154-7.578-3.154
28
+ c-3.086,0-5.699,1.098-7.848,3.287c-1.789,1.879-2.68,4.248-2.68,7.109v30.652c0,3.805-0.453,6.621-1.344,8.451
29
+ c-0.762,1.477-1.957,2.684-3.59,3.623c-1.633,0.941-3.34,1.41-5.133,1.41c-1.785,0-3.496-0.469-5.129-1.41
30
+ c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-46.414c0-3.398,0.848-6.127,2.547-8.186
31
+ c1.879-2.279,4.336-3.42,7.379-3.42c2.594,0,4.809,0.873,6.641,2.617C109.897,186.284,110.952,187.603,112.202,189.481z"/>
32
+ <path fill="#1F1F1F" d="M112.202,189.481c2.367-2.102,4.539-3.623,6.508-4.561c3.352-1.609,7.133-2.416,11.336-2.416
33
+ c5.23,0,9.812,1.117,13.75,3.354c1.742,0.984,3.598,2.797,5.566,5.434c3.355-2.727,6.215-4.693,8.586-5.902
34
+ c3.934-1.922,8.16-2.885,12.676-2.885c6.977,0,12.742,2.215,17.305,6.641c4.609,4.518,6.91,10.061,6.91,16.635v35.146
35
+ c0,3.848-0.449,6.666-1.34,8.451c-0.762,1.432-1.957,2.627-3.59,3.59c-1.633,0.961-3.344,1.443-5.129,1.443
36
+ c-1.793,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-30.652
37
+ c0-2.951-0.895-5.342-2.684-7.176c-2.012-2.146-4.559-3.221-7.645-3.221c-3.133,0-5.75,1.051-7.852,3.154
38
+ c-1.875,1.832-2.816,4.246-2.816,7.242v30.652c0,3.805-0.449,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.59,3.623
39
+ c-1.633,0.941-3.344,1.41-5.129,1.41c-1.789,0-3.5-0.469-5.133-1.41c-1.633-0.939-2.828-2.146-3.59-3.623
40
+ c-0.895-1.785-1.34-4.604-1.34-8.451v-28.641c0-4.066-0.961-7.152-2.887-9.254c-1.922-2.104-4.449-3.154-7.578-3.154
41
+ c-3.086,0-5.699,1.098-7.848,3.287c-1.789,1.879-2.68,4.248-2.68,7.109v30.652c0,3.805-0.453,6.621-1.344,8.451
42
+ c-0.762,1.477-1.957,2.684-3.59,3.623c-1.633,0.941-3.34,1.41-5.133,1.41c-1.785,0-3.496-0.469-5.129-1.41
43
+ c-1.633-0.939-2.828-2.146-3.59-3.623c-0.895-1.785-1.34-4.604-1.34-8.451v-46.414c0-3.398,0.848-6.127,2.547-8.186
44
+ c1.879-2.279,4.336-3.42,7.379-3.42c2.594,0,4.809,0.873,6.641,2.617C109.897,186.284,110.952,187.603,112.202,189.481z"/>
45
+ </g>
46
+ </g>
47
+ <g>
48
+ <path fill="#FFFFFF" d="M32.706,101.839c0,0,12.794,37.536,28.406,50.635c23.352,19.592,42.266,24.008,63.57,26.375
49
+ c27.992,3.109,68.055,0.375,76.672-3.381c19.914-8.666,36.523-27.725,41.93-43.279c5.414-15.557-82.844-32.125-82.844-32.125
50
+ l-30.766-13.865c0,0-19.617-10.143-26.719-6.76c-7.102,3.381-13.859,5.748-19.273,7.1c-5.406,1.354-13.523,0.338-22.656,2.029
51
+ C51.901,90.257,32.706,101.839,32.706,101.839z"/>
52
+ <path fill="#EF4F39" d="M32.331,101.245c0,0,0.391,10.795,3.898,14.678c4.727,5.23,3.203,11.189,13.461,25.664
53
+ c13.281,18.732,38.328,36.789,89.406,38.908c50.391,2.094,50.086-1.395,50.086-1.395s-6.891,1.152-44.25-0.252
54
+ c-23.625-0.889-56.344-5.354-75.016-20.842c-17.734-14.709-24.203-24.42-29.125-39.309c-2.094-6.34-5.797-6.422-5.992-15.996
55
+ C34.776,101.249,32.331,101.245,32.331,101.245z"/>
56
+ <g>
57
+ <path fill="#F16523" d="M195.331,176.63c0,0,5.219-1.023,11.352-4.504c8.711-4.943,14.773-11.02,15.852-11.918
58
+ c4.883-4.057,15.219-16.484,15.219-16.484c-0.414,0.613-5.562,9.764-12.305,15.977c-4.484,4.133-1.898,2.156-9.25,7.861
59
+ c-9.078,7.043-22,11.92-22,11.92"/>
60
+ <path fill="#F16523" d="M284.198,12.147c0,0-7.016,13.777-24.008,15.553c-11.57,1.211-13.188,11.16-13.188,11.16
61
+ s-4.055-10.652-14.453-12.174c-15.477-2.264-20.375-13.525-20.375-13.525c-4.391,16.23,0.68,24.346,3.383,28.404
62
+ c5.188,7.781,18.258,9.469,21.305,16.23c3.039,6.764,0.672,11.498-2.703,27.391c-3.383,15.893-19.281,12.848-32.125,11.156
63
+ c-7.117-0.934-18.672-8.105-41.508-16.402c0.242-4.438-2.695-9.434-1.016-16.23c6.086-24.6,24.094-34.361,12.938-32.715
64
+ c-8.805,1.301-50.031,32.121-56.523,36.102c-8.344-1.617-17.086-2.822-26.156-3.387c-31.359-1.947-39.305,14.033-48.945,20.627
65
+ c-17.148,11.734-8.07,17.84-8.07,17.84s28.812,1.553,40.109,3.975c9.469,2.027,32.125,8.453,33.812,11.496
66
+ c1.695,3.043,4.398,11.834,12.516,10.145c8.109-1.691,8.75-7.969,8.75-7.969c-0.344,9.131,6.805,21.156,14.242,31.639
67
+ s19.273,13.188,19.273,13.188c2.031,25.359-11.562,49.064-8.031,49.195c23.844,0.889,38.156-23.922,40.453-28.275
68
+ c4.82-9.131,3.297-19.656,3.297-19.656c42.266-8.113,49.461-34.107,53.203-45.637c6.344-19.529,3.055-59.438,3.055-59.438
69
+ s8.789-0.676,20.961-9.467C286.565,42.579,284.198,12.147,284.198,12.147z"/>
70
+ </g>
71
+ <path fill="#FFFFFF" d="M107.753,97.312c0,0-0.617-14.115,18.625-10.881s19.953,13.1,4.945,17.168
72
+ C116.323,107.669,108.065,103.565,107.753,97.312z"/>
73
+ <g>
74
+ <circle fill="#1F1F1F" cx="101.776" cy="92.2" r="4.312"/>
75
+ <path fill="#FFFFFF" d="M101.776,96.761c-2.516,0-4.562-2.046-4.562-4.561c0-2.516,2.047-4.562,4.562-4.562
76
+ s4.562,2.047,4.562,4.562C106.339,94.715,104.292,96.761,101.776,96.761z M101.776,88.138c-2.24,0-4.062,1.822-4.062,4.062
77
+ c0,2.239,1.822,4.061,4.062,4.061s4.062-1.822,4.062-4.061C105.839,89.96,104.017,88.138,101.776,88.138z"/>
78
+ <path fill="#FFFFFF" d="M104.394,90.595c0,0.512-0.414,0.928-0.93,0.928c-0.508,0-0.93-0.416-0.93-0.928
79
+ c0-0.516,0.422-0.932,0.93-0.932C103.979,89.663,104.394,90.079,104.394,90.595z"/>
80
+ </g>
81
+ <g>
82
+ <path fill="#EF4F39" d="M164.237,161.2c-1.523,0.254-4.141,0.254-9.383-1.184c-4.789-1.311-12.648-9.082-13.984-10.43
83
+ c0.438,0.631,0.875,1.254,1.312,1.875c7.438,10.482,19.273,13.188,19.273,13.188c1.969,24.617-10.773,47.672-8.297,49.121
84
+ c0.008-0.064,0.094-0.949,0.258-1.764c0.164-0.846,0.594-2.283,1.266-3.805c0.68-1.521,10.062-18.682,12.172-26.543
85
+ c2.117-7.861,1.188-21.727,1.188-21.727S165.761,160.948,164.237,161.2z"/>
86
+ <path fill="#EF4F39" d="M122.995,115.067c0,0,2.531-7.607,10.648-6.086s5.328,10.271,5.328,10.271s0.031-6.586-5.711-7.734
87
+ C128.19,110.503,122.995,115.067,122.995,115.067z"/>
88
+ <path fill="#EF4F39" d="M117.237,126.362c-5.328-0.635-5.711-8.242-9.891-11.287c-3.484-2.529-25.367-9.129-34.242-11.031
89
+ s-36.266-3.803-38.547-3.93s-2.914-3.043-3.297-3.553c-0.242-0.326,0.25-2.391,0.633-3.816c-3.898,6.225,0.859,9.432,0.859,9.432
90
+ s28.812,1.553,40.109,3.975c9.469,2.027,32.125,8.453,33.812,11.496c1.695,3.043,4.398,11.834,12.516,10.145
91
+ c8.109-1.691,8.75-7.969,8.75-7.969S122.144,126.946,117.237,126.362z"/>
92
+ <path fill="#EF4F39" d="M251.394,111.146c-1.352,7.1-6.594,22.994-16.398,32.799c-6.102,6.098-15.898,10.652-23.672,14.203
93
+ c-6.266,2.859-15.219,3.887-15.219,3.887l1.07,3.879c42.266-8.113,49.461-34.107,53.203-45.637
94
+ c2.305-7.115,3.344-16.934,3.719-26.541C253.448,98.396,252.308,106.351,251.394,111.146z"/>
95
+ </g>
96
+ </g>
97
+ <rect x="133.667" y="203.567" fill="#1F1F1F" width="20.055" height="21.766"/>
98
+ <g>
99
+ <g>
100
+ <path fill="#1F1F1F" d="M226.835,188.409c2.816-2.104,5.188-3.512,7.109-4.227c2.992-1.162,6.059-1.744,9.188-1.744
101
+ c8.32,0,15.586,3.379,21.801,10.127c6.348,6.889,9.527,15.496,9.527,25.826c0,11.402-3.555,20.658-10.668,27.77
102
+ c-5.723,5.768-12.543,8.654-20.457,8.654c-4.609,0-8.562-1.031-11.875-3.086c-1.516-0.984-3.148-2.619-4.895-4.896
103
+ c-2.059,5.051-5.23,7.578-9.527,7.578c-2.637,0-4.961-0.85-6.973-2.549c-2.238-1.967-3.355-4.697-3.355-8.182v-77.543
104
+ c0-3.799,0.449-6.594,1.344-8.383c0.758-1.477,1.953-2.684,3.59-3.623c1.629-0.939,3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408
105
+ s2.828,2.146,3.586,3.623c0.895,1.789,1.344,4.584,1.344,8.383V188.409z M240.519,201.22c-3.758,0-7.02,1.631-9.793,4.896
106
+ c-2.684,3.219-4.023,7.379-4.023,12.477c0,5.141,1.34,9.324,4.023,12.543c2.773,3.264,6.078,4.896,9.926,4.896
107
+ c4.16,0,7.488-1.746,9.996-5.23c2.457-3.49,3.688-7.535,3.688-12.143c0-4.695-1.23-8.742-3.688-12.143
108
+ C248.097,202.987,244.718,201.22,240.519,201.22z"/>
109
+ <path fill="#1F1F1F" d="M345.358,196.39v29.916c0,6.842-1.637,12.387-4.898,16.635c-2.773,3.578-6.352,6.396-10.734,8.451
110
+ c-4.918,2.324-10.148,3.488-15.695,3.488c-7.781,0-14.598-2.078-20.457-6.238c-4.559-3.221-7.645-7.064-9.258-11.537
111
+ c-1.074-3.037-1.605-6.641-1.605-10.799V196.39c0-3.801,0.445-6.617,1.336-8.451c0.762-1.477,1.949-2.684,3.559-3.623
112
+ c1.605-0.938,3.332-1.408,5.164-1.408c1.789,0,3.496,0.471,5.129,1.408c1.633,0.939,2.828,2.146,3.59,3.623
113
+ c0.895,1.789,1.34,4.607,1.34,8.451v27.434c0,2.818,0.449,4.945,1.344,6.373c2.281,3.668,5.57,5.502,9.859,5.502
114
+ c3.129,0,5.793-1.074,7.984-3.221c2.145-2.059,3.219-4.941,3.219-8.654V196.39c0-3.844,0.445-6.662,1.34-8.451
115
+ c0.762-1.477,1.957-2.684,3.59-3.623c1.633-0.938,3.344-1.408,5.133-1.408c1.785,0,3.5,0.471,5.129,1.408
116
+ c1.633,0.939,2.828,2.146,3.59,3.623C344.909,189.728,345.358,192.546,345.358,196.39z"/>
117
+ <path fill="#1F1F1F" d="M377.351,166.138v74.789c0,3.848-0.445,6.666-1.344,8.451c-0.758,1.477-1.953,2.684-3.586,3.623
118
+ c-1.633,0.941-3.344,1.41-5.133,1.41s-3.5-0.469-5.129-1.41c-1.633-0.939-2.832-2.146-3.59-3.623
119
+ c-0.895-1.785-1.344-4.604-1.344-8.451v-74.789c0-3.799,0.449-6.594,1.344-8.383c0.758-1.477,1.957-2.684,3.59-3.623
120
+ c1.629-0.939,3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408s2.828,2.146,3.586,3.623
121
+ C376.905,159.544,377.351,162.339,377.351,166.138z"/>
122
+ <path fill="#1F1F1F" d="M409.343,220.403v20.523c0,3.805-0.445,6.621-1.34,8.451c-0.762,1.477-1.957,2.684-3.586,3.623
123
+ c-1.633,0.941-3.344,1.41-5.133,1.41s-3.496-0.469-5.129-1.41c-1.633-0.939-2.828-2.146-3.594-3.623
124
+ c-0.891-1.785-1.34-4.604-1.34-8.451v-74.789c0-3.799,0.449-6.594,1.34-8.383c0.766-1.477,1.961-2.684,3.594-3.623
125
+ s3.34-1.408,5.129-1.408s3.5,0.469,5.133,1.408c1.629,0.939,2.824,2.146,3.586,3.623c0.895,1.789,1.34,4.584,1.34,8.383v40.582
126
+ l18.516-18.982c3.445-3.533,6.527-5.299,9.258-5.299c2.727,0,5.051,0.984,6.977,2.951c1.922,1.924,2.883,4.227,2.883,6.908
127
+ c0,1.969-0.738,3.936-2.215,5.904c-0.488,0.625-1.566,1.744-3.219,3.354l-12.609,12.072l17.641,21.936
128
+ c2.902,3.578,4.355,6.551,4.355,8.918c0,3.178-1.27,5.793-3.82,7.85c-1.836,1.432-3.957,2.146-6.375,2.146
129
+ c-2.41,0-4.672-0.961-6.77-2.885c-0.629-0.58-1.656-1.787-3.09-3.621L409.343,220.403z"/>
130
+ </g>
131
+ </g>
132
+ </g>
133
+ </svg>