SiteOrigin Widgets Bundle - Version 1.7.2

Version Description

  • 09 November 2016 =
  • Made fixes to pass PHP 7 compatibility checks.
  • Image Widget: Get alt and title text from chosen image.
  • Replaced markup parser with more actively maintained one.
  • Simple Masonry: ensure resize on load
  • Image Grid: Allow 0 as valid spacing value.
  • Editor Widget: Call WP_Embed::run_shortcode on Editor widget content
  • Maps: Added missing typeof causing maps api not to load properly.
  • Icon: Fixed URL output.
  • Fixed double slash in URLs.
  • Features: Use Measurement fields.
  • Apply modify_form to form arrays created in the constructor.
  • Contact Form: add email default email subject if no subject defined.
Download this release

Release Info

Developer gpriday
Plugin Icon 128x128 SiteOrigin Widgets Bundle
Version 1.7.2
Comparing to
See all releases

Code changes from version 1.7.1 to 1.7.2

base/inc/Parsedown.php ADDED
@@ -0,0 +1,1548 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ #
4
+ #
5
+ # Parsedown
6
+ # http://parsedown.org
7
+ #
8
+ # (c) Emanuil Rusev
9
+ # http://erusev.com
10
+ #
11
+ # For the full license information, view the LICENSE file that was distributed
12
+ # with this source code.
13
+ #
14
+ #
15
+
16
+ class Parsedown
17
+ {
18
+ # ~
19
+
20
+ const version = '1.6.0';
21
+
22
+ # ~
23
+
24
+ function text($text)
25
+ {
26
+ # make sure no definitions are set
27
+ $this->DefinitionData = array();
28
+
29
+ # standardize line breaks
30
+ $text = str_replace(array("\r\n", "\r"), "\n", $text);
31
+
32
+ # remove surrounding line breaks
33
+ $text = trim($text, "\n");
34
+
35
+ # split text into lines
36
+ $lines = explode("\n", $text);
37
+
38
+ # iterate through lines to identify blocks
39
+ $markup = $this->lines($lines);
40
+
41
+ # trim line breaks
42
+ $markup = trim($markup, "\n");
43
+
44
+ return $markup;
45
+ }
46
+
47
+ #
48
+ # Setters
49
+ #
50
+
51
+ function setBreaksEnabled($breaksEnabled)
52
+ {
53
+ $this->breaksEnabled = $breaksEnabled;
54
+
55
+ return $this;
56
+ }
57
+
58
+ protected $breaksEnabled;
59
+
60
+ function setMarkupEscaped($markupEscaped)
61
+ {
62
+ $this->markupEscaped = $markupEscaped;
63
+
64
+ return $this;
65
+ }
66
+
67
+ protected $markupEscaped;
68
+
69
+ function setUrlsLinked($urlsLinked)
70
+ {
71
+ $this->urlsLinked = $urlsLinked;
72
+
73
+ return $this;
74
+ }
75
+
76
+ protected $urlsLinked = true;
77
+
78
+ #
79
+ # Lines
80
+ #
81
+
82
+ protected $BlockTypes = array(
83
+ '#' => array('Header'),
84
+ '*' => array('Rule', 'List'),
85
+ '+' => array('List'),
86
+ '-' => array('SetextHeader', 'Table', 'Rule', 'List'),
87
+ '0' => array('List'),
88
+ '1' => array('List'),
89
+ '2' => array('List'),
90
+ '3' => array('List'),
91
+ '4' => array('List'),
92
+ '5' => array('List'),
93
+ '6' => array('List'),
94
+ '7' => array('List'),
95
+ '8' => array('List'),
96
+ '9' => array('List'),
97
+ ':' => array('Table'),
98
+ '<' => array('Comment', 'Markup'),
99
+ '=' => array('SetextHeader'),
100
+ '>' => array('Quote'),
101
+ '[' => array('Reference'),
102
+ '_' => array('Rule'),
103
+ '`' => array('FencedCode'),
104
+ '|' => array('Table'),
105
+ '~' => array('FencedCode'),
106
+ );
107
+
108
+ # ~
109
+
110
+ protected $unmarkedBlockTypes = array(
111
+ 'Code',
112
+ );
113
+
114
+ #
115
+ # Blocks
116
+ #
117
+
118
+ protected function lines(array $lines)
119
+ {
120
+ $CurrentBlock = null;
121
+
122
+ foreach ($lines as $line)
123
+ {
124
+ if (chop($line) === '')
125
+ {
126
+ if (isset($CurrentBlock))
127
+ {
128
+ $CurrentBlock['interrupted'] = true;
129
+ }
130
+
131
+ continue;
132
+ }
133
+
134
+ if (strpos($line, "\t") !== false)
135
+ {
136
+ $parts = explode("\t", $line);
137
+
138
+ $line = $parts[0];
139
+
140
+ unset($parts[0]);
141
+
142
+ foreach ($parts as $part)
143
+ {
144
+ $shortage = 4 - mb_strlen($line, 'utf-8') % 4;
145
+
146
+ $line .= str_repeat(' ', $shortage);
147
+ $line .= $part;
148
+ }
149
+ }
150
+
151
+ $indent = 0;
152
+
153
+ while (isset($line[$indent]) and $line[$indent] === ' ')
154
+ {
155
+ $indent ++;
156
+ }
157
+
158
+ $text = $indent > 0 ? substr($line, $indent) : $line;
159
+
160
+ # ~
161
+
162
+ $Line = array('body' => $line, 'indent' => $indent, 'text' => $text);
163
+
164
+ # ~
165
+
166
+ if (isset($CurrentBlock['continuable']))
167
+ {
168
+ $Block = $this->{'block'.$CurrentBlock['type'].'Continue'}($Line, $CurrentBlock);
169
+
170
+ if (isset($Block))
171
+ {
172
+ $CurrentBlock = $Block;
173
+
174
+ continue;
175
+ }
176
+ else
177
+ {
178
+ if ($this->isBlockCompletable($CurrentBlock['type']))
179
+ {
180
+ $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
181
+ }
182
+ }
183
+ }
184
+
185
+ # ~
186
+
187
+ $marker = $text[0];
188
+
189
+ # ~
190
+
191
+ $blockTypes = $this->unmarkedBlockTypes;
192
+
193
+ if (isset($this->BlockTypes[$marker]))
194
+ {
195
+ foreach ($this->BlockTypes[$marker] as $blockType)
196
+ {
197
+ $blockTypes []= $blockType;
198
+ }
199
+ }
200
+
201
+ #
202
+ # ~
203
+
204
+ foreach ($blockTypes as $blockType)
205
+ {
206
+ $Block = $this->{'block'.$blockType}($Line, $CurrentBlock);
207
+
208
+ if (isset($Block))
209
+ {
210
+ $Block['type'] = $blockType;
211
+
212
+ if ( ! isset($Block['identified']))
213
+ {
214
+ $Blocks []= $CurrentBlock;
215
+
216
+ $Block['identified'] = true;
217
+ }
218
+
219
+ if ($this->isBlockContinuable($blockType))
220
+ {
221
+ $Block['continuable'] = true;
222
+ }
223
+
224
+ $CurrentBlock = $Block;
225
+
226
+ continue 2;
227
+ }
228
+ }
229
+
230
+ # ~
231
+
232
+ if (isset($CurrentBlock) and ! isset($CurrentBlock['type']) and ! isset($CurrentBlock['interrupted']))
233
+ {
234
+ $CurrentBlock['element']['text'] .= "\n".$text;
235
+ }
236
+ else
237
+ {
238
+ $Blocks []= $CurrentBlock;
239
+
240
+ $CurrentBlock = $this->paragraph($Line);
241
+
242
+ $CurrentBlock['identified'] = true;
243
+ }
244
+ }
245
+
246
+ # ~
247
+
248
+ if (isset($CurrentBlock['continuable']) and $this->isBlockCompletable($CurrentBlock['type']))
249
+ {
250
+ $CurrentBlock = $this->{'block'.$CurrentBlock['type'].'Complete'}($CurrentBlock);
251
+ }
252
+
253
+ # ~
254
+
255
+ $Blocks []= $CurrentBlock;
256
+
257
+ unset($Blocks[0]);
258
+
259
+ # ~
260
+
261
+ $markup = '';
262
+
263
+ foreach ($Blocks as $Block)
264
+ {
265
+ if (isset($Block['hidden']))
266
+ {
267
+ continue;
268
+ }
269
+
270
+ $markup .= "\n";
271
+ $markup .= isset($Block['markup']) ? $Block['markup'] : $this->element($Block['element']);
272
+ }
273
+
274
+ $markup .= "\n";
275
+
276
+ # ~
277
+
278
+ return $markup;
279
+ }
280
+
281
+ protected function isBlockContinuable($Type)
282
+ {
283
+ return method_exists($this, 'block'.$Type.'Continue');
284
+ }
285
+
286
+ protected function isBlockCompletable($Type)
287
+ {
288
+ return method_exists($this, 'block'.$Type.'Complete');
289
+ }
290
+
291
+ #
292
+ # Code
293
+
294
+ protected function blockCode($Line, $Block = null)
295
+ {
296
+ if (isset($Block) and ! isset($Block['type']) and ! isset($Block['interrupted']))
297
+ {
298
+ return;
299
+ }
300
+
301
+ if ($Line['indent'] >= 4)
302
+ {
303
+ $text = substr($Line['body'], 4);
304
+
305
+ $Block = array(
306
+ 'element' => array(
307
+ 'name' => 'pre',
308
+ 'handler' => 'element',
309
+ 'text' => array(
310
+ 'name' => 'code',
311
+ 'text' => $text,
312
+ ),
313
+ ),
314
+ );
315
+
316
+ return $Block;
317
+ }
318
+ }
319
+
320
+ protected function blockCodeContinue($Line, $Block)
321
+ {
322
+ if ($Line['indent'] >= 4)
323
+ {
324
+ if (isset($Block['interrupted']))
325
+ {
326
+ $Block['element']['text']['text'] .= "\n";
327
+
328
+ unset($Block['interrupted']);
329
+ }
330
+
331
+ $Block['element']['text']['text'] .= "\n";
332
+
333
+ $text = substr($Line['body'], 4);
334
+
335
+ $Block['element']['text']['text'] .= $text;
336
+
337
+ return $Block;
338
+ }
339
+ }
340
+
341
+ protected function blockCodeComplete($Block)
342
+ {
343
+ $text = $Block['element']['text']['text'];
344
+
345
+ $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
346
+
347
+ $Block['element']['text']['text'] = $text;
348
+
349
+ return $Block;
350
+ }
351
+
352
+ #
353
+ # Comment
354
+
355
+ protected function blockComment($Line)
356
+ {
357
+ if ($this->markupEscaped)
358
+ {
359
+ return;
360
+ }
361
+
362
+ if (isset($Line['text'][3]) and $Line['text'][3] === '-' and $Line['text'][2] === '-' and $Line['text'][1] === '!')
363
+ {
364
+ $Block = array(
365
+ 'markup' => $Line['body'],
366
+ );
367
+
368
+ if (preg_match('/-->$/', $Line['text']))
369
+ {
370
+ $Block['closed'] = true;
371
+ }
372
+
373
+ return $Block;
374
+ }
375
+ }
376
+
377
+ protected function blockCommentContinue($Line, array $Block)
378
+ {
379
+ if (isset($Block['closed']))
380
+ {
381
+ return;
382
+ }
383
+
384
+ $Block['markup'] .= "\n" . $Line['body'];
385
+
386
+ if (preg_match('/-->$/', $Line['text']))
387
+ {
388
+ $Block['closed'] = true;
389
+ }
390
+
391
+ return $Block;
392
+ }
393
+
394
+ #
395
+ # Fenced Code
396
+
397
+ protected function blockFencedCode($Line)
398
+ {
399
+ if (preg_match('/^['.$Line['text'][0].']{3,}[ ]*([\w-]+)?[ ]*$/', $Line['text'], $matches))
400
+ {
401
+ $Element = array(
402
+ 'name' => 'code',
403
+ 'text' => '',
404
+ );
405
+
406
+ if (isset($matches[1]))
407
+ {
408
+ $class = 'language-'.$matches[1];
409
+
410
+ $Element['attributes'] = array(
411
+ 'class' => $class,
412
+ );
413
+ }
414
+
415
+ $Block = array(
416
+ 'char' => $Line['text'][0],
417
+ 'element' => array(
418
+ 'name' => 'pre',
419
+ 'handler' => 'element',
420
+ 'text' => $Element,
421
+ ),
422
+ );
423
+
424
+ return $Block;
425
+ }
426
+ }
427
+
428
+ protected function blockFencedCodeContinue($Line, $Block)
429
+ {
430
+ if (isset($Block['complete']))
431
+ {
432
+ return;
433
+ }
434
+
435
+ if (isset($Block['interrupted']))
436
+ {
437
+ $Block['element']['text']['text'] .= "\n";
438
+
439
+ unset($Block['interrupted']);
440
+ }
441
+
442
+ if (preg_match('/^'.$Block['char'].'{3,}[ ]*$/', $Line['text']))
443
+ {
444
+ $Block['element']['text']['text'] = substr($Block['element']['text']['text'], 1);
445
+
446
+ $Block['complete'] = true;
447
+
448
+ return $Block;
449
+ }
450
+
451
+ $Block['element']['text']['text'] .= "\n".$Line['body'];;
452
+
453
+ return $Block;
454
+ }
455
+
456
+ protected function blockFencedCodeComplete($Block)
457
+ {
458
+ $text = $Block['element']['text']['text'];
459
+
460
+ $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
461
+
462
+ $Block['element']['text']['text'] = $text;
463
+
464
+ return $Block;
465
+ }
466
+
467
+ #
468
+ # Header
469
+
470
+ protected function blockHeader($Line)
471
+ {
472
+ if (isset($Line['text'][1]))
473
+ {
474
+ $level = 1;
475
+
476
+ while (isset($Line['text'][$level]) and $Line['text'][$level] === '#')
477
+ {
478
+ $level ++;
479
+ }
480
+
481
+ if ($level > 6)
482
+ {
483
+ return;
484
+ }
485
+
486
+ $text = trim($Line['text'], '# ');
487
+
488
+ $Block = array(
489
+ 'element' => array(
490
+ 'name' => 'h' . min(6, $level),
491
+ 'text' => $text,
492
+ 'handler' => 'line',
493
+ ),
494
+ );
495
+
496
+ return $Block;
497
+ }
498
+ }
499
+
500
+ #
501
+ # List
502
+
503
+ protected function blockList($Line)
504
+ {
505
+ list($name, $pattern) = $Line['text'][0] <= '-' ? array('ul', '[*+-]') : array('ol', '[0-9]+[.]');
506
+
507
+ if (preg_match('/^('.$pattern.'[ ]+)(.*)/', $Line['text'], $matches))
508
+ {
509
+ $Block = array(
510
+ 'indent' => $Line['indent'],
511
+ 'pattern' => $pattern,
512
+ 'element' => array(
513
+ 'name' => $name,
514
+ 'handler' => 'elements',
515
+ ),
516
+ );
517
+
518
+ if($name === 'ol')
519
+ {
520
+ $listStart = stristr($matches[0], '.', true);
521
+
522
+ if($listStart !== '1')
523
+ {
524
+ $Block['element']['attributes'] = array('start' => $listStart);
525
+ }
526
+ }
527
+
528
+ $Block['li'] = array(
529
+ 'name' => 'li',
530
+ 'handler' => 'li',
531
+ 'text' => array(
532
+ $matches[2],
533
+ ),
534
+ );
535
+
536
+ $Block['element']['text'] []= & $Block['li'];
537
+
538
+ return $Block;
539
+ }
540
+ }
541
+
542
+ protected function blockListContinue($Line, array $Block)
543
+ {
544
+ if ($Block['indent'] === $Line['indent'] and preg_match('/^'.$Block['pattern'].'(?:[ ]+(.*)|$)/', $Line['text'], $matches))
545
+ {
546
+ if (isset($Block['interrupted']))
547
+ {
548
+ $Block['li']['text'] []= '';
549
+
550
+ unset($Block['interrupted']);
551
+ }
552
+
553
+ unset($Block['li']);
554
+
555
+ $text = isset($matches[1]) ? $matches[1] : '';
556
+
557
+ $Block['li'] = array(
558
+ 'name' => 'li',
559
+ 'handler' => 'li',
560
+ 'text' => array(
561
+ $text,
562
+ ),
563
+ );
564
+
565
+ $Block['element']['text'] []= & $Block['li'];
566
+
567
+ return $Block;
568
+ }
569
+
570
+ if ($Line['text'][0] === '[' and $this->blockReference($Line))
571
+ {
572
+ return $Block;
573
+ }
574
+
575
+ if ( ! isset($Block['interrupted']))
576
+ {
577
+ $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
578
+
579
+ $Block['li']['text'] []= $text;
580
+
581
+ return $Block;
582
+ }
583
+
584
+ if ($Line['indent'] > 0)
585
+ {
586
+ $Block['li']['text'] []= '';
587
+
588
+ $text = preg_replace('/^[ ]{0,4}/', '', $Line['body']);
589
+
590
+ $Block['li']['text'] []= $text;
591
+
592
+ unset($Block['interrupted']);
593
+
594
+ return $Block;
595
+ }
596
+ }
597
+
598
+ #
599
+ # Quote
600
+
601
+ protected function blockQuote($Line)
602
+ {
603
+ if (preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
604
+ {
605
+ $Block = array(
606
+ 'element' => array(
607
+ 'name' => 'blockquote',
608
+ 'handler' => 'lines',
609
+ 'text' => (array) $matches[1],
610
+ ),
611
+ );
612
+
613
+ return $Block;
614
+ }
615
+ }
616
+
617
+ protected function blockQuoteContinue($Line, array $Block)
618
+ {
619
+ if ($Line['text'][0] === '>' and preg_match('/^>[ ]?(.*)/', $Line['text'], $matches))
620
+ {
621
+ if (isset($Block['interrupted']))
622
+ {
623
+ $Block['element']['text'] []= '';
624
+
625
+ unset($Block['interrupted']);
626
+ }
627
+
628
+ $Block['element']['text'] []= $matches[1];
629
+
630
+ return $Block;
631
+ }
632
+
633
+ if ( ! isset($Block['interrupted']))
634
+ {
635
+ $Block['element']['text'] []= $Line['text'];
636
+
637
+ return $Block;
638
+ }
639
+ }
640
+
641
+ #
642
+ # Rule
643
+
644
+ protected function blockRule($Line)
645
+ {
646
+ if (preg_match('/^(['.$Line['text'][0].'])([ ]*\1){2,}[ ]*$/', $Line['text']))
647
+ {
648
+ $Block = array(
649
+ 'element' => array(
650
+ 'name' => 'hr'
651
+ ),
652
+ );
653
+
654
+ return $Block;
655
+ }
656
+ }
657
+
658
+ #
659
+ # Setext
660
+
661
+ protected function blockSetextHeader($Line, array $Block = null)
662
+ {
663
+ if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
664
+ {
665
+ return;
666
+ }
667
+
668
+ if (chop($Line['text'], $Line['text'][0]) === '')
669
+ {
670
+ $Block['element']['name'] = $Line['text'][0] === '=' ? 'h1' : 'h2';
671
+
672
+ return $Block;
673
+ }
674
+ }
675
+
676
+ #
677
+ # Markup
678
+
679
+ protected function blockMarkup($Line)
680
+ {
681
+ if ($this->markupEscaped)
682
+ {
683
+ return;
684
+ }
685
+
686
+ if (preg_match('/^<(\w*)(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*(\/)?>/', $Line['text'], $matches))
687
+ {
688
+ $element = strtolower($matches[1]);
689
+
690
+ if (in_array($element, $this->textLevelElements))
691
+ {
692
+ return;
693
+ }
694
+
695
+ $Block = array(
696
+ 'name' => $matches[1],
697
+ 'depth' => 0,
698
+ 'markup' => $Line['text'],
699
+ );
700
+
701
+ $length = strlen($matches[0]);
702
+
703
+ $remainder = substr($Line['text'], $length);
704
+
705
+ if (trim($remainder) === '')
706
+ {
707
+ if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
708
+ {
709
+ $Block['closed'] = true;
710
+
711
+ $Block['void'] = true;
712
+ }
713
+ }
714
+ else
715
+ {
716
+ if (isset($matches[2]) or in_array($matches[1], $this->voidElements))
717
+ {
718
+ return;
719
+ }
720
+
721
+ if (preg_match('/<\/'.$matches[1].'>[ ]*$/i', $remainder))
722
+ {
723
+ $Block['closed'] = true;
724
+ }
725
+ }
726
+
727
+ return $Block;
728
+ }
729
+ }
730
+
731
+ protected function blockMarkupContinue($Line, array $Block)
732
+ {
733
+ if (isset($Block['closed']))
734
+ {
735
+ return;
736
+ }
737
+
738
+ if (preg_match('/^<'.$Block['name'].'(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*>/i', $Line['text'])) # open
739
+ {
740
+ $Block['depth'] ++;
741
+ }
742
+
743
+ if (preg_match('/(.*?)<\/'.$Block['name'].'>[ ]*$/i', $Line['text'], $matches)) # close
744
+ {
745
+ if ($Block['depth'] > 0)
746
+ {
747
+ $Block['depth'] --;
748
+ }
749
+ else
750
+ {
751
+ $Block['closed'] = true;
752
+ }
753
+ }
754
+
755
+ if (isset($Block['interrupted']))
756
+ {
757
+ $Block['markup'] .= "\n";
758
+
759
+ unset($Block['interrupted']);
760
+ }
761
+
762
+ $Block['markup'] .= "\n".$Line['body'];
763
+
764
+ return $Block;
765
+ }
766
+
767
+ #
768
+ # Reference
769
+
770
+ protected function blockReference($Line)
771
+ {
772
+ if (preg_match('/^\[(.+?)\]:[ ]*<?(\S+?)>?(?:[ ]+["\'(](.+)["\')])?[ ]*$/', $Line['text'], $matches))
773
+ {
774
+ $id = strtolower($matches[1]);
775
+
776
+ $Data = array(
777
+ 'url' => $matches[2],
778
+ 'title' => null,
779
+ );
780
+
781
+ if (isset($matches[3]))
782
+ {
783
+ $Data['title'] = $matches[3];
784
+ }
785
+
786
+ $this->DefinitionData['Reference'][$id] = $Data;
787
+
788
+ $Block = array(
789
+ 'hidden' => true,
790
+ );
791
+
792
+ return $Block;
793
+ }
794
+ }
795
+
796
+ #
797
+ # Table
798
+
799
+ protected function blockTable($Line, array $Block = null)
800
+ {
801
+ if ( ! isset($Block) or isset($Block['type']) or isset($Block['interrupted']))
802
+ {
803
+ return;
804
+ }
805
+
806
+ if (strpos($Block['element']['text'], '|') !== false and chop($Line['text'], ' -:|') === '')
807
+ {
808
+ $alignments = array();
809
+
810
+ $divider = $Line['text'];
811
+
812
+ $divider = trim($divider);
813
+ $divider = trim($divider, '|');
814
+
815
+ $dividerCells = explode('|', $divider);
816
+
817
+ foreach ($dividerCells as $dividerCell)
818
+ {
819
+ $dividerCell = trim($dividerCell);
820
+
821
+ if ($dividerCell === '')
822
+ {
823
+ continue;
824
+ }
825
+
826
+ $alignment = null;
827
+
828
+ if ($dividerCell[0] === ':')
829
+ {
830
+ $alignment = 'left';
831
+ }
832
+
833
+ if (substr($dividerCell, - 1) === ':')
834
+ {
835
+ $alignment = $alignment === 'left' ? 'center' : 'right';
836
+ }
837
+
838
+ $alignments []= $alignment;
839
+ }
840
+
841
+ # ~
842
+
843
+ $HeaderElements = array();
844
+
845
+ $header = $Block['element']['text'];
846
+
847
+ $header = trim($header);
848
+ $header = trim($header, '|');
849
+
850
+ $headerCells = explode('|', $header);
851
+
852
+ foreach ($headerCells as $index => $headerCell)
853
+ {
854
+ $headerCell = trim($headerCell);
855
+
856
+ $HeaderElement = array(
857
+ 'name' => 'th',
858
+ 'text' => $headerCell,
859
+ 'handler' => 'line',
860
+ );
861
+
862
+ if (isset($alignments[$index]))
863
+ {
864
+ $alignment = $alignments[$index];
865
+
866
+ $HeaderElement['attributes'] = array(
867
+ 'style' => 'text-align: '.$alignment.';',
868
+ );
869
+ }
870
+
871
+ $HeaderElements []= $HeaderElement;
872
+ }
873
+
874
+ # ~
875
+
876
+ $Block = array(
877
+ 'alignments' => $alignments,
878
+ 'identified' => true,
879
+ 'element' => array(
880
+ 'name' => 'table',
881
+ 'handler' => 'elements',
882
+ ),
883
+ );
884
+
885
+ $Block['element']['text'] []= array(
886
+ 'name' => 'thead',
887
+ 'handler' => 'elements',
888
+ );
889
+
890
+ $Block['element']['text'] []= array(
891
+ 'name' => 'tbody',
892
+ 'handler' => 'elements',
893
+ 'text' => array(),
894
+ );
895
+
896
+ $Block['element']['text'][0]['text'] []= array(
897
+ 'name' => 'tr',
898
+ 'handler' => 'elements',
899
+ 'text' => $HeaderElements,
900
+ );
901
+
902
+ return $Block;
903
+ }
904
+ }
905
+
906
+ protected function blockTableContinue($Line, array $Block)
907
+ {
908
+ if (isset($Block['interrupted']))
909
+ {
910
+ return;
911
+ }
912
+
913
+ if ($Line['text'][0] === '|' or strpos($Line['text'], '|'))
914
+ {
915
+ $Elements = array();
916
+
917
+ $row = $Line['text'];
918
+
919
+ $row = trim($row);
920
+ $row = trim($row, '|');
921
+
922
+ preg_match_all('/(?:(\\\\[|])|[^|`]|`[^`]+`|`)+/', $row, $matches);
923
+
924
+ foreach ($matches[0] as $index => $cell)
925
+ {
926
+ $cell = trim($cell);
927
+
928
+ $Element = array(
929
+ 'name' => 'td',
930
+ 'handler' => 'line',
931
+ 'text' => $cell,
932
+ );
933
+
934
+ if (isset($Block['alignments'][$index]))
935
+ {
936
+ $Element['attributes'] = array(
937
+ 'style' => 'text-align: '.$Block['alignments'][$index].';',
938
+ );
939
+ }
940
+
941
+ $Elements []= $Element;
942
+ }
943
+
944
+ $Element = array(
945
+ 'name' => 'tr',
946
+ 'handler' => 'elements',
947
+ 'text' => $Elements,
948
+ );
949
+
950
+ $Block['element']['text'][1]['text'] []= $Element;
951
+
952
+ return $Block;
953
+ }
954
+ }
955
+
956
+ #
957
+ # ~
958
+ #
959
+
960
+ protected function paragraph($Line)
961
+ {
962
+ $Block = array(
963
+ 'element' => array(
964
+ 'name' => 'p',
965
+ 'text' => $Line['text'],
966
+ 'handler' => 'line',
967
+ ),
968
+ );
969
+
970
+ return $Block;
971
+ }
972
+
973
+ #
974
+ # Inline Elements
975
+ #
976
+
977
+ protected $InlineTypes = array(
978
+ '"' => array('SpecialCharacter'),
979
+ '!' => array('Image'),
980
+ '&' => array('SpecialCharacter'),
981
+ '*' => array('Emphasis'),
982
+ ':' => array('Url'),
983
+ '<' => array('UrlTag', 'EmailTag', 'Markup', 'SpecialCharacter'),
984
+ '>' => array('SpecialCharacter'),
985
+ '[' => array('Link'),
986
+ '_' => array('Emphasis'),
987
+ '`' => array('Code'),
988
+ '~' => array('Strikethrough'),
989
+ '\\' => array('EscapeSequence'),
990
+ );
991
+
992
+ # ~
993
+
994
+ protected $inlineMarkerList = '!"*_&[:<>`~\\';
995
+
996
+ #
997
+ # ~
998
+ #
999
+
1000
+ public function line($text)
1001
+ {
1002
+ $markup = '';
1003
+
1004
+ # $excerpt is based on the first occurrence of a marker
1005
+
1006
+ while ($excerpt = strpbrk($text, $this->inlineMarkerList))
1007
+ {
1008
+ $marker = $excerpt[0];
1009
+
1010
+ $markerPosition = strpos($text, $marker);
1011
+
1012
+ $Excerpt = array('text' => $excerpt, 'context' => $text);
1013
+
1014
+ foreach ($this->InlineTypes[$marker] as $inlineType)
1015
+ {
1016
+ $Inline = $this->{'inline'.$inlineType}($Excerpt);
1017
+
1018
+ if ( ! isset($Inline))
1019
+ {
1020
+ continue;
1021
+ }
1022
+
1023
+ # makes sure that the inline belongs to "our" marker
1024
+
1025
+ if (isset($Inline['position']) and $Inline['position'] > $markerPosition)
1026
+ {
1027
+ continue;
1028
+ }
1029
+
1030
+ # sets a default inline position
1031
+
1032
+ if ( ! isset($Inline['position']))
1033
+ {
1034
+ $Inline['position'] = $markerPosition;
1035
+ }
1036
+
1037
+ # the text that comes before the inline
1038
+ $unmarkedText = substr($text, 0, $Inline['position']);
1039
+
1040
+ # compile the unmarked text
1041
+ $markup .= $this->unmarkedText($unmarkedText);
1042
+
1043
+ # compile the inline
1044
+ $markup .= isset($Inline['markup']) ? $Inline['markup'] : $this->element($Inline['element']);
1045
+
1046
+ # remove the examined text
1047
+ $text = substr($text, $Inline['position'] + $Inline['extent']);
1048
+
1049
+ continue 2;
1050
+ }
1051
+
1052
+ # the marker does not belong to an inline
1053
+
1054
+ $unmarkedText = substr($text, 0, $markerPosition + 1);
1055
+
1056
+ $markup .= $this->unmarkedText($unmarkedText);
1057
+
1058
+ $text = substr($text, $markerPosition + 1);
1059
+ }
1060
+
1061
+ $markup .= $this->unmarkedText($text);
1062
+
1063
+ return $markup;
1064
+ }
1065
+
1066
+ #
1067
+ # ~
1068
+ #
1069
+
1070
+ protected function inlineCode($Excerpt)
1071
+ {
1072
+ $marker = $Excerpt['text'][0];
1073
+
1074
+ if (preg_match('/^('.$marker.'+)[ ]*(.+?)[ ]*(?<!'.$marker.')\1(?!'.$marker.')/s', $Excerpt['text'], $matches))
1075
+ {
1076
+ $text = $matches[2];
1077
+ $text = htmlspecialchars($text, ENT_NOQUOTES, 'UTF-8');
1078
+ $text = preg_replace("/[ ]*\n/", ' ', $text);
1079
+
1080
+ return array(
1081
+ 'extent' => strlen($matches[0]),
1082
+ 'element' => array(
1083
+ 'name' => 'code',
1084
+ 'text' => $text,
1085
+ ),
1086
+ );
1087
+ }
1088
+ }
1089
+
1090
+ protected function inlineEmailTag($Excerpt)
1091
+ {
1092
+ if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<((mailto:)?\S+?@\S+?)>/i', $Excerpt['text'], $matches))
1093
+ {
1094
+ $url = $matches[1];
1095
+
1096
+ if ( ! isset($matches[2]))
1097
+ {
1098
+ $url = 'mailto:' . $url;
1099
+ }
1100
+
1101
+ return array(
1102
+ 'extent' => strlen($matches[0]),
1103
+ 'element' => array(
1104
+ 'name' => 'a',
1105
+ 'text' => $matches[1],
1106
+ 'attributes' => array(
1107
+ 'href' => $url,
1108
+ ),
1109
+ ),
1110
+ );
1111
+ }
1112
+ }
1113
+
1114
+ protected function inlineEmphasis($Excerpt)
1115
+ {
1116
+ if ( ! isset($Excerpt['text'][1]))
1117
+ {
1118
+ return;
1119
+ }
1120
+
1121
+ $marker = $Excerpt['text'][0];
1122
+
1123
+ if ($Excerpt['text'][1] === $marker and preg_match($this->StrongRegex[$marker], $Excerpt['text'], $matches))
1124
+ {
1125
+ $emphasis = 'strong';
1126
+ }
1127
+ elseif (preg_match($this->EmRegex[$marker], $Excerpt['text'], $matches))
1128
+ {
1129
+ $emphasis = 'em';
1130
+ }
1131
+ else
1132
+ {
1133
+ return;
1134
+ }
1135
+
1136
+ return array(
1137
+ 'extent' => strlen($matches[0]),
1138
+ 'element' => array(
1139
+ 'name' => $emphasis,
1140
+ 'handler' => 'line',
1141
+ 'text' => $matches[1],
1142
+ ),
1143
+ );
1144
+ }
1145
+
1146
+ protected function inlineEscapeSequence($Excerpt)
1147
+ {
1148
+ if (isset($Excerpt['text'][1]) and in_array($Excerpt['text'][1], $this->specialCharacters))
1149
+ {
1150
+ return array(
1151
+ 'markup' => $Excerpt['text'][1],
1152
+ 'extent' => 2,
1153
+ );
1154
+ }
1155
+ }
1156
+
1157
+ protected function inlineImage($Excerpt)
1158
+ {
1159
+ if ( ! isset($Excerpt['text'][1]) or $Excerpt['text'][1] !== '[')
1160
+ {
1161
+ return;
1162
+ }
1163
+
1164
+ $Excerpt['text']= substr($Excerpt['text'], 1);
1165
+
1166
+ $Link = $this->inlineLink($Excerpt);
1167
+
1168
+ if ($Link === null)
1169
+ {
1170
+ return;
1171
+ }
1172
+
1173
+ $Inline = array(
1174
+ 'extent' => $Link['extent'] + 1,
1175
+ 'element' => array(
1176
+ 'name' => 'img',
1177
+ 'attributes' => array(
1178
+ 'src' => $Link['element']['attributes']['href'],
1179
+ 'alt' => $Link['element']['text'],
1180
+ ),
1181
+ ),
1182
+ );
1183
+
1184
+ $Inline['element']['attributes'] += $Link['element']['attributes'];
1185
+
1186
+ unset($Inline['element']['attributes']['href']);
1187
+
1188
+ return $Inline;
1189
+ }
1190
+
1191
+ protected function inlineLink($Excerpt)
1192
+ {
1193
+ $Element = array(
1194
+ 'name' => 'a',
1195
+ 'handler' => 'line',
1196
+ 'text' => null,
1197
+ 'attributes' => array(
1198
+ 'href' => null,
1199
+ 'title' => null,
1200
+ ),
1201
+ );
1202
+
1203
+ $extent = 0;
1204
+
1205
+ $remainder = $Excerpt['text'];
1206
+
1207
+ if (preg_match('/\[((?:[^][]|(?R))*)\]/', $remainder, $matches))
1208
+ {
1209
+ $Element['text'] = $matches[1];
1210
+
1211
+ $extent += strlen($matches[0]);
1212
+
1213
+ $remainder = substr($remainder, $extent);
1214
+ }
1215
+ else
1216
+ {
1217
+ return;
1218
+ }
1219
+
1220
+ if (preg_match('/^[(]((?:[^ ()]|[(][^ )]+[)])+)(?:[ ]+("[^"]*"|\'[^\']*\'))?[)]/', $remainder, $matches))
1221
+ {
1222
+ $Element['attributes']['href'] = $matches[1];
1223
+
1224
+ if (isset($matches[2]))
1225
+ {
1226
+ $Element['attributes']['title'] = substr($matches[2], 1, - 1);
1227
+ }
1228
+
1229
+ $extent += strlen($matches[0]);
1230
+ }
1231
+ else
1232
+ {
1233
+ if (preg_match('/^\s*\[(.*?)\]/', $remainder, $matches))
1234
+ {
1235
+ $definition = strlen($matches[1]) ? $matches[1] : $Element['text'];
1236
+ $definition = strtolower($definition);
1237
+
1238
+ $extent += strlen($matches[0]);
1239
+ }
1240
+ else
1241
+ {
1242
+ $definition = strtolower($Element['text']);
1243
+ }
1244
+
1245
+ if ( ! isset($this->DefinitionData['Reference'][$definition]))
1246
+ {
1247
+ return;
1248
+ }
1249
+
1250
+ $Definition = $this->DefinitionData['Reference'][$definition];
1251
+
1252
+ $Element['attributes']['href'] = $Definition['url'];
1253
+ $Element['attributes']['title'] = $Definition['title'];
1254
+ }
1255
+
1256
+ $Element['attributes']['href'] = str_replace(array('&', '<'), array('&amp;', '&lt;'), $Element['attributes']['href']);
1257
+
1258
+ return array(
1259
+ 'extent' => $extent,
1260
+ 'element' => $Element,
1261
+ );
1262
+ }
1263
+
1264
+ protected function inlineMarkup($Excerpt)
1265
+ {
1266
+ if ($this->markupEscaped or strpos($Excerpt['text'], '>') === false)
1267
+ {
1268
+ return;
1269
+ }
1270
+
1271
+ if ($Excerpt['text'][1] === '/' and preg_match('/^<\/\w*[ ]*>/s', $Excerpt['text'], $matches))
1272
+ {
1273
+ return array(
1274
+ 'markup' => $matches[0],
1275
+ 'extent' => strlen($matches[0]),
1276
+ );
1277
+ }
1278
+
1279
+ if ($Excerpt['text'][1] === '!' and preg_match('/^<!---?[^>-](?:-?[^-])*-->/s', $Excerpt['text'], $matches))
1280
+ {
1281
+ return array(
1282
+ 'markup' => $matches[0],
1283
+ 'extent' => strlen($matches[0]),
1284
+ );
1285
+ }
1286
+
1287
+ if ($Excerpt['text'][1] !== ' ' and preg_match('/^<\w*(?:[ ]*'.$this->regexHtmlAttribute.')*[ ]*\/?>/s', $Excerpt['text'], $matches))
1288
+ {
1289
+ return array(
1290
+ 'markup' => $matches[0],
1291
+ 'extent' => strlen($matches[0]),
1292
+ );
1293
+ }
1294
+ }
1295
+
1296
+ protected function inlineSpecialCharacter($Excerpt)
1297
+ {
1298
+ if ($Excerpt['text'][0] === '&' and ! preg_match('/^&#?\w+;/', $Excerpt['text']))
1299
+ {
1300
+ return array(
1301
+ 'markup' => '&amp;',
1302
+ 'extent' => 1,
1303
+ );
1304
+ }
1305
+
1306
+ $SpecialCharacter = array('>' => 'gt', '<' => 'lt', '"' => 'quot');
1307
+
1308
+ if (isset($SpecialCharacter[$Excerpt['text'][0]]))
1309
+ {
1310
+ return array(
1311
+ 'markup' => '&'.$SpecialCharacter[$Excerpt['text'][0]].';',
1312
+ 'extent' => 1,
1313
+ );
1314
+ }
1315
+ }
1316
+
1317
+ protected function inlineStrikethrough($Excerpt)
1318
+ {
1319
+ if ( ! isset($Excerpt['text'][1]))
1320
+ {
1321
+ return;
1322
+ }
1323
+
1324
+ if ($Excerpt['text'][1] === '~' and preg_match('/^~~(?=\S)(.+?)(?<=\S)~~/', $Excerpt['text'], $matches))
1325
+ {
1326
+ return array(
1327
+ 'extent' => strlen($matches[0]),
1328
+ 'element' => array(
1329
+ 'name' => 'del',
1330
+ 'text' => $matches[1],
1331
+ 'handler' => 'line',
1332
+ ),
1333
+ );
1334
+ }
1335
+ }
1336
+
1337
+ protected function inlineUrl($Excerpt)
1338
+ {
1339
+ if ($this->urlsLinked !== true or ! isset($Excerpt['text'][2]) or $Excerpt['text'][2] !== '/')
1340
+ {
1341
+ return;
1342
+ }
1343
+
1344
+ if (preg_match('/\bhttps?:[\/]{2}[^\s<]+\b\/*/ui', $Excerpt['context'], $matches, PREG_OFFSET_CAPTURE))
1345
+ {
1346
+ $Inline = array(
1347
+ 'extent' => strlen($matches[0][0]),
1348
+ 'position' => $matches[0][1],
1349
+ 'element' => array(
1350
+ 'name' => 'a',
1351
+ 'text' => $matches[0][0],
1352
+ 'attributes' => array(
1353
+ 'href' => $matches[0][0],
1354
+ ),
1355
+ ),
1356
+ );
1357
+
1358
+ return $Inline;
1359
+ }
1360
+ }
1361
+
1362
+ protected function inlineUrlTag($Excerpt)
1363
+ {
1364
+ if (strpos($Excerpt['text'], '>') !== false and preg_match('/^<(\w+:\/{2}[^ >]+)>/i', $Excerpt['text'], $matches))
1365
+ {
1366
+ $url = str_replace(array('&', '<'), array('&amp;', '&lt;'), $matches[1]);
1367
+
1368
+ return array(
1369
+ 'extent' => strlen($matches[0]),
1370
+ 'element' => array(
1371
+ 'name' => 'a',
1372
+ 'text' => $url,
1373
+ 'attributes' => array(
1374
+ 'href' => $url,
1375
+ ),
1376
+ ),
1377
+ );
1378
+ }
1379
+ }
1380
+
1381
+ # ~
1382
+
1383
+ protected function unmarkedText($text)
1384
+ {
1385
+ if ($this->breaksEnabled)
1386
+ {
1387
+ $text = preg_replace('/[ ]*\n/', "<br />\n", $text);
1388
+ }
1389
+ else
1390
+ {
1391
+ $text = preg_replace('/(?:[ ][ ]+|[ ]*\\\\)\n/', "<br />\n", $text);
1392
+ $text = str_replace(" \n", "\n", $text);
1393
+ }
1394
+
1395
+ return $text;
1396
+ }
1397
+
1398
+ #
1399
+ # Handlers
1400
+ #
1401
+
1402
+ protected function element(array $Element)
1403
+ {
1404
+ $markup = '<'.$Element['name'];
1405
+
1406
+ if (isset($Element['attributes']))
1407
+ {
1408
+ foreach ($Element['attributes'] as $name => $value)
1409
+ {
1410
+ if ($value === null)
1411
+ {
1412
+ continue;
1413
+ }
1414
+
1415
+ $markup .= ' '.$name.'="'.$value.'"';
1416
+ }
1417
+ }
1418
+
1419
+ if (isset($Element['text']))
1420
+ {
1421
+ $markup .= '>';
1422
+
1423
+ if (isset($Element['handler']))
1424
+ {
1425
+ $markup .= $this->{$Element['handler']}($Element['text']);
1426
+ }
1427
+ else
1428
+ {
1429
+ $markup .= $Element['text'];
1430
+ }
1431
+
1432
+ $markup .= '</'.$Element['name'].'>';
1433
+ }
1434
+ else
1435
+ {
1436
+ $markup .= ' />';
1437
+ }
1438
+
1439
+ return $markup;
1440
+ }
1441
+
1442
+ protected function elements(array $Elements)
1443
+ {
1444
+ $markup = '';
1445
+
1446
+ foreach ($Elements as $Element)
1447
+ {
1448
+ $markup .= "\n" . $this->element($Element);
1449
+ }
1450
+
1451
+ $markup .= "\n";
1452
+
1453
+ return $markup;
1454
+ }
1455
+
1456
+ # ~
1457
+
1458
+ protected function li($lines)
1459
+ {
1460
+ $markup = $this->lines($lines);
1461
+
1462
+ $trimmedMarkup = trim($markup);
1463
+
1464
+ if ( ! in_array('', $lines) and substr($trimmedMarkup, 0, 3) === '<p>')
1465
+ {
1466
+ $markup = $trimmedMarkup;
1467
+ $markup = substr($markup, 3);
1468
+
1469
+ $position = strpos($markup, "</p>");
1470
+
1471
+ $markup = substr_replace($markup, '', $position, 4);
1472
+ }
1473
+
1474
+ return $markup;
1475
+ }
1476
+
1477
+ #
1478
+ # Deprecated Methods
1479
+ #
1480
+
1481
+ function parse($text)
1482
+ {
1483
+ $markup = $this->text($text);
1484
+
1485
+ return $markup;
1486
+ }
1487
+
1488
+ #
1489
+ # Static Methods
1490
+ #
1491
+
1492
+ static function instance($name = 'default')
1493
+ {
1494
+ if (isset(self::$instances[$name]))
1495
+ {
1496
+ return self::$instances[$name];
1497
+ }
1498
+
1499
+ $instance = new static();
1500
+
1501
+ self::$instances[$name] = $instance;
1502
+
1503
+ return $instance;
1504
+ }
1505
+
1506
+ private static $instances = array();
1507
+
1508
+ #
1509
+ # Fields
1510
+ #
1511
+
1512
+ protected $DefinitionData;
1513
+
1514
+ #
1515
+ # Read-Only
1516
+
1517
+ protected $specialCharacters = array(
1518
+ '\\', '`', '*', '_', '{', '}', '[', ']', '(', ')', '>', '#', '+', '-', '.', '!', '|',
1519
+ );
1520
+
1521
+ protected $StrongRegex = array(
1522
+ '*' => '/^[*]{2}((?:\\\\\*|[^*]|[*][^*]*[*])+?)[*]{2}(?![*])/s',
1523
+ '_' => '/^__((?:\\\\_|[^_]|_[^_]*_)+?)__(?!_)/us',
1524
+ );
1525
+
1526
+ protected $EmRegex = array(
1527
+ '*' => '/^[*]((?:\\\\\*|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*])/s',
1528
+ '_' => '/^_((?:\\\\_|[^_]|__[^_]*__)+?)_(?!_)\b/us',
1529
+ );
1530
+
1531
+ protected $regexHtmlAttribute = '[a-zA-Z_:][\w:.-]*(?:\s*=\s*(?:[^"\'=<>`\s]+|"[^"]*"|\'[^\']*\'))?';
1532
+
1533
+ protected $voidElements = array(
1534
+ 'area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'link', 'meta', 'param', 'source',
1535
+ );
1536
+
1537
+ protected $textLevelElements = array(
1538
+ 'a', 'br', 'bdo', 'abbr', 'blink', 'nextid', 'acronym', 'basefont',
1539
+ 'b', 'em', 'big', 'cite', 'small', 'spacer', 'listing',
1540
+ 'i', 'rp', 'del', 'code', 'strike', 'marquee',
1541
+ 'q', 'rt', 'ins', 'font', 'strong',
1542
+ 's', 'tt', 'sub', 'mark',
1543
+ 'u', 'xm', 'sup', 'nobr',
1544
+ 'var', 'ruby',
1545
+ 'wbr', 'span',
1546
+ 'time',
1547
+ );
1548
+ }
base/inc/fields/code.class.php CHANGED
@@ -31,6 +31,6 @@ class SiteOrigin_Widget_Field_Code extends SiteOrigin_Widget_Field_Text_Input_Ba
31
  }
32
 
33
  function enqueue_scripts(){
34
- wp_enqueue_script( 'so-code-field', plugin_dir_url( __FILE__ ) . '/js/code-field' . SOW_BUNDLE_JS_SUFFIX . '.js', array( 'jquery' ), SOW_BUNDLE_VERSION );
35
  }
36
- }
31
  }
32
 
33
  function enqueue_scripts(){
34
+ wp_enqueue_script( 'so-code-field', plugin_dir_url( __FILE__ ) . 'js/code-field' . SOW_BUNDLE_JS_SUFFIX . '.js', array( 'jquery' ), SOW_BUNDLE_VERSION );
35
  }
36
+ }
base/inc/fields/icon.class.php CHANGED
@@ -78,8 +78,8 @@ class SiteOrigin_Widget_Field_Icon extends SiteOrigin_Widget_Field_Base {
78
  }
79
 
80
  public function enqueue_scripts(){
81
- wp_enqueue_script( 'so-icon-field', plugin_dir_url( __FILE__ ) . '/js/icon-field' . SOW_BUNDLE_JS_SUFFIX . '.js', array( 'jquery' ), SOW_BUNDLE_VERSION );
82
- wp_enqueue_style( 'so-icon-field', plugin_dir_url( __FILE__ ) . '/css/icon-field.css', array( ), SOW_BUNDLE_VERSION );
83
  }
84
 
85
  }
78
  }
79
 
80
  public function enqueue_scripts(){
81
+ wp_enqueue_script( 'so-icon-field', plugin_dir_url( __FILE__ ) . 'js/icon-field' . SOW_BUNDLE_JS_SUFFIX . '.js', array( 'jquery' ), SOW_BUNDLE_VERSION );
82
+ wp_enqueue_style( 'so-icon-field', plugin_dir_url( __FILE__ ) . 'css/icon-field.css', array( ), SOW_BUNDLE_VERSION );
83
  }
84
 
85
  }
base/inc/fields/media.class.php CHANGED
@@ -153,8 +153,8 @@ class SiteOrigin_Widget_Field_Media extends SiteOrigin_Widget_Field_Base {
153
  }
154
 
155
  function enqueue_scripts(){
156
- wp_enqueue_script( 'so-media-field', plugin_dir_url( __FILE__ ) . '/js/media-field' . SOW_BUNDLE_JS_SUFFIX . '.js', array( 'jquery' ), SOW_BUNDLE_VERSION );
157
- wp_enqueue_style( 'so-media-field', plugin_dir_url( __FILE__ ) . '/css/media-field.css', array( ), SOW_BUNDLE_VERSION );
158
  }
159
 
160
  function image_search_dialog(){
153
  }
154
 
155
  function enqueue_scripts(){
156
+ wp_enqueue_script( 'so-media-field', plugin_dir_url( __FILE__ ) . 'js/media-field' . SOW_BUNDLE_JS_SUFFIX . '.js', array( 'jquery' ), SOW_BUNDLE_VERSION );
157
+ wp_enqueue_style( 'so-media-field', plugin_dir_url( __FILE__ ) . 'css/media-field.css', array( ), SOW_BUNDLE_VERSION );
158
  }
159
 
160
  function image_search_dialog(){
base/inc/lessc.inc.php CHANGED
@@ -2640,7 +2640,7 @@ class lessc_parser {
2640
  if ($this->unit($value)) return true;
2641
  if ($this->color($value)) return true;
2642
  if ($this->func($value)) return true;
2643
- if ($this->string($value)) return true;
2644
 
2645
  if ($this->keyword($word)) {
2646
  $value = array('keyword', $word);
@@ -2654,7 +2654,7 @@ class lessc_parser {
2654
  }
2655
 
2656
  // unquote string (should this work on any type?
2657
- if ($this->literal("~") && $this->string($str)) {
2658
  $value = array("escape", $str);
2659
  return true;
2660
  } else {
@@ -2785,7 +2785,7 @@ class lessc_parser {
2785
  }
2786
  }
2787
 
2788
- if (($tok == "'" || $tok == '"') && $this->string($str)) {
2789
  $content[] = $str;
2790
  continue;
2791
  }
@@ -2816,7 +2816,7 @@ class lessc_parser {
2816
  return true;
2817
  }
2818
 
2819
- protected function string(&$out) {
2820
  $s = $this->seek();
2821
  if ($this->literal('"', false)) {
2822
  $delim = '"';
@@ -3070,7 +3070,7 @@ class lessc_parser {
3070
  $attrParts[] = " ";
3071
  continue;
3072
  }
3073
- if ($this->string($str)) {
3074
  // escape parent selector, (yuck)
3075
  foreach ($str[2] as &$chunk) {
3076
  $chunk = str_replace($this->lessc->parentSelector, "$&$", $chunk);
2640
  if ($this->unit($value)) return true;
2641
  if ($this->color($value)) return true;
2642
  if ($this->func($value)) return true;
2643
+ if ($this->_string($value)) return true;
2644
 
2645
  if ($this->keyword($word)) {
2646
  $value = array('keyword', $word);
2654
  }
2655
 
2656
  // unquote string (should this work on any type?
2657
+ if ($this->literal("~") && $this->_string($str)) {
2658
  $value = array("escape", $str);
2659
  return true;
2660
  } else {
2785
  }
2786
  }
2787
 
2788
+ if (($tok == "'" || $tok == '"') && $this->_string($str)) {
2789
  $content[] = $str;
2790
  continue;
2791
  }
2816
  return true;
2817
  }
2818
 
2819
+ protected function _string(&$out) {
2820
  $s = $this->seek();
2821
  if ($this->literal('"', false)) {
2822
  $delim = '"';
3070
  $attrParts[] = " ";
3071
  continue;
3072
  }
3073
+ if ($this->_string($str)) {
3074
  // escape parent selector, (yuck)
3075
  foreach ($str[2] as &$chunk) {
3076
  $chunk = str_replace($this->lessc->parentSelector, "$&$", $chunk);
base/inc/markdown.php DELETED
@@ -1,1577 +0,0 @@
1
- <?php
2
- #
3
- # Markdown - A text-to-HTML conversion tool for web writers
4
- #
5
- # PHP Markdown
6
- # Copyright (c) 2004-2013 Michel Fortin
7
- # <http://michelf.ca/projects/php-markdown/>
8
- #
9
- # Original Markdown
10
- # Copyright (c) 2004-2006 John Gruber
11
- # <http://daringfireball.net/projects/markdown/>
12
- #
13
-
14
-
15
- #
16
- # Markdown Parser Class
17
- #
18
- class Markdown_Parser {
19
-
20
- ### Configuration Variables ###
21
-
22
- # Change to ">" for HTML output.
23
- var $empty_element_suffix = " />";
24
- var $tab_width = 4;
25
-
26
- # Change to `true` to disallow markup or entities.
27
- var $no_markup = false;
28
- var $no_entities = false;
29
-
30
- # Predefined urls and titles for reference links and images.
31
- var $predef_urls = array();
32
- var $predef_titles = array();
33
-
34
-
35
- ### Parser Implementation ###
36
-
37
- # Regex to match balanced [brackets].
38
- # Needed to insert a maximum bracked depth while converting to PHP.
39
- var $nested_brackets_depth = 6;
40
- var $nested_brackets_re;
41
-
42
- var $nested_url_parenthesis_depth = 4;
43
- var $nested_url_parenthesis_re;
44
-
45
- # Table of hash values for escaped characters:
46
- var $escape_chars = '\`*_{}[]()>#+-.!';
47
- var $escape_chars_re;
48
-
49
-
50
- function Markdown_Parser() {
51
- #
52
- # Constructor function. Initialize appropriate member variables.
53
- #
54
- $this->_initDetab();
55
- $this->prepareItalicsAndBold();
56
-
57
- $this->nested_brackets_re =
58
- str_repeat('(?>[^\[\]]+|\[', $this->nested_brackets_depth).
59
- str_repeat('\])*', $this->nested_brackets_depth);
60
-
61
- $this->nested_url_parenthesis_re =
62
- str_repeat('(?>[^()\s]+|\(', $this->nested_url_parenthesis_depth).
63
- str_repeat('(?>\)))*', $this->nested_url_parenthesis_depth);
64
-
65
- $this->escape_chars_re = '['.preg_quote($this->escape_chars).']';
66
-
67
- # Sort document, block, and span gamut in ascendent priority order.
68
- asort($this->document_gamut);
69
- asort($this->block_gamut);
70
- asort($this->span_gamut);
71
- }
72
-
73
-
74
- # Internal hashes used during transformation.
75
- var $urls = array();
76
- var $titles = array();
77
- var $html_hashes = array();
78
-
79
- # Status flag to avoid invalid nesting.
80
- var $in_anchor = false;
81
-
82
-
83
- function setup() {
84
- #
85
- # Called before the transformation process starts to setup parser
86
- # states.
87
- #
88
- # Clear global hashes.
89
- $this->urls = $this->predef_urls;
90
- $this->titles = $this->predef_titles;
91
- $this->html_hashes = array();
92
-
93
- $this->in_anchor = false;
94
- }
95
-
96
- function teardown() {
97
- #
98
- # Called after the transformation process to clear any variable
99
- # which may be taking up memory unnecessarly.
100
- #
101
- $this->urls = array();
102
- $this->titles = array();
103
- $this->html_hashes = array();
104
- }
105
-
106
-
107
- function transform($text) {
108
- #
109
- # Main function. Performs some preprocessing on the input text
110
- # and pass it through the document gamut.
111
- #
112
- $this->setup();
113
-
114
- # Remove UTF-8 BOM and marker character in input, if present.
115
- $text = preg_replace('{^\xEF\xBB\xBF|\x1A}', '', $text);
116
-
117
- # Standardize line endings:
118
- # DOS to Unix and Mac to Unix
119
- $text = preg_replace('{\r\n?}', "\n", $text);
120
-
121
- # Make sure $text ends with a couple of newlines:
122
- $text .= "\n\n";
123
-
124
- # Convert all tabs to spaces.
125
- $text = $this->detab($text);
126
-
127
- # Turn block-level HTML blocks into hash entries
128
- $text = $this->hashHTMLBlocks($text);
129
-
130
- # Strip any lines consisting only of spaces and tabs.
131
- # This makes subsequent regexen easier to write, because we can
132
- # match consecutive blank lines with /\n+/ instead of something
133
- # contorted like /[ ]*\n+/ .
134
- $text = preg_replace('/^[ ]+$/m', '', $text);
135
-
136
- # Run document gamut methods.
137
- foreach ($this->document_gamut as $method => $priority) {
138
- $text = $this->$method($text);
139
- }
140
-
141
- $this->teardown();
142
-
143
- return $text . "\n";
144
- }
145
-
146
- var $document_gamut = array(
147
- # Strip link definitions, store in hashes.
148
- "stripLinkDefinitions" => 20,
149
-
150
- "runBasicBlockGamut" => 30,
151
- );
152
-
153
-
154
- function stripLinkDefinitions($text) {
155
- #
156
- # Strips link definitions from text, stores the URLs and titles in
157
- # hash references.
158
- #
159
- $less_than_tab = $this->tab_width - 1;
160
-
161
- # Link defs are in the form: ^[id]: url "optional title"
162
- $text = preg_replace_callback('{
163
- ^[ ]{0,'.$less_than_tab.'}\[(.+)\][ ]?: # id = $1
164
- [ ]*
165
- \n? # maybe *one* newline
166
- [ ]*
167
- (?:
168
- <(.+?)> # url = $2
169
- |
170
- (\S+?) # url = $3
171
- )
172
- [ ]*
173
- \n? # maybe one newline
174
- [ ]*
175
- (?:
176
- (?<=\s) # lookbehind for whitespace
177
- ["(]
178
- (.*?) # title = $4
179
- [")]
180
- [ ]*
181
- )? # title is optional
182
- (?:\n+|\Z)
183
- }xm',
184
- array(&$this, '_stripLinkDefinitions_callback'),
185
- $text);
186
- return $text;
187
- }
188
- function _stripLinkDefinitions_callback($matches) {
189
- $link_id = strtolower($matches[1]);
190
- $url = $matches[2] == '' ? $matches[3] : $matches[2];
191
- $this->urls[$link_id] = $url;
192
- $this->titles[$link_id] =& $matches[4];
193
- return ''; # String that will replace the block
194
- }
195
-
196
-
197
- function hashHTMLBlocks($text) {
198
- if ($this->no_markup) return $text;
199
-
200
- $less_than_tab = $this->tab_width - 1;
201
-
202
- # Hashify HTML blocks:
203
- # We only want to do this for block-level HTML tags, such as headers,
204
- # lists, and tables. That's because we still want to wrap <p>s around
205
- # "paragraphs" that are wrapped in non-block-level tags, such as anchors,
206
- # phrase emphasis, and spans. The list of tags we're looking for is
207
- # hard-coded:
208
- #
209
- # * List "a" is made of tags which can be both inline or block-level.
210
- # These will be treated block-level when the start tag is alone on
211
- # its line, otherwise they're not matched here and will be taken as
212
- # inline later.
213
- # * List "b" is made of tags which are always block-level;
214
- #
215
- $block_tags_a_re = 'ins|del';
216
- $block_tags_b_re = 'p|div|h[1-6]|blockquote|pre|table|dl|ol|ul|address|'.
217
- 'script|noscript|form|fieldset|iframe|math|svg|'.
218
- 'article|section|nav|aside|hgroup|header|footer|'.
219
- 'figure';
220
-
221
- # Regular expression for the content of a block tag.
222
- $nested_tags_level = 4;
223
- $attr = '
224
- (?> # optional tag attributes
225
- \s # starts with whitespace
226
- (?>
227
- [^>"/]+ # text outside quotes
228
- |
229
- /+(?!>) # slash not followed by ">"
230
- |
231
- "[^"]*" # text inside double quotes (tolerate ">")
232
- |
233
- \'[^\']*\' # text inside single quotes (tolerate ">")
234
- )*
235
- )?
236
- ';
237
- $content =
238
- str_repeat('
239
- (?>
240
- [^<]+ # content without tag
241
- |
242
- <\2 # nested opening tag
243
- '.$attr.' # attributes
244
- (?>
245
- />
246
- |
247
- >', $nested_tags_level). # end of opening tag
248
- '.*?'. # last level nested tag content
249
- str_repeat('
250
- </\2\s*> # closing nested tag
251
- )
252
- |
253
- <(?!/\2\s*> # other tags with a different name
254
- )
255
- )*',
256
- $nested_tags_level);
257
- $content2 = str_replace('\2', '\3', $content);
258
-
259
- # First, look for nested blocks, e.g.:
260
- # <div>
261
- # <div>
262
- # tags for inner block must be indented.
263
- # </div>
264
- # </div>
265
- #
266
- # The outermost tags must start at the left margin for this to match, and
267
- # the inner nested divs must be indented.
268
- # We need to do this before the next, more liberal match, because the next
269
- # match will start at the first `<div>` and stop at the first `</div>`.
270
- $text = preg_replace_callback('{(?>
271
- (?>
272
- (?<=\n\n) # Starting after a blank line
273
- | # or
274
- \A\n? # the beginning of the doc
275
- )
276
- ( # save in $1
277
-
278
- # Match from `\n<tag>` to `</tag>\n`, handling nested tags
279
- # in between.
280
-
281
- [ ]{0,'.$less_than_tab.'}
282
- <('.$block_tags_b_re.')# start tag = $2
283
- '.$attr.'> # attributes followed by > and \n
284
- '.$content.' # content, support nesting
285
- </\2> # the matching end tag
286
- [ ]* # trailing spaces/tabs
287
- (?=\n+|\Z) # followed by a newline or end of document
288
-
289
- | # Special version for tags of group a.
290
-
291
- [ ]{0,'.$less_than_tab.'}
292
- <('.$block_tags_a_re.')# start tag = $3
293
- '.$attr.'>[ ]*\n # attributes followed by >
294
- '.$content2.' # content, support nesting
295
- </\3> # the matching end tag
296
- [ ]* # trailing spaces/tabs
297
- (?=\n+|\Z) # followed by a newline or end of document
298
-
299
- | # Special case just for <hr />. It was easier to make a special
300
- # case than to make the other regex more complicated.
301
-
302
- [ ]{0,'.$less_than_tab.'}
303
- <(hr) # start tag = $2
304
- '.$attr.' # attributes
305
- /?> # the matching end tag
306
- [ ]*
307
- (?=\n{2,}|\Z) # followed by a blank line or end of document
308
-
309
- | # Special case for standalone HTML comments:
310
-
311
- [ ]{0,'.$less_than_tab.'}
312
- (?s:
313
- <!-- .*? -->
314
- )
315
- [ ]*
316
- (?=\n{2,}|\Z) # followed by a blank line or end of document
317
-
318
- | # PHP and ASP-style processor instructions (<? and <%)
319
-
320
- [ ]{0,'.$less_than_tab.'}
321
- (?s:
322
- <([?%]) # $2
323
- .*?
324
- \2>
325
- )
326
- [ ]*
327
- (?=\n{2,}|\Z) # followed by a blank line or end of document
328
-
329
- )
330
- )}Sxmi',
331
- array(&$this, '_hashHTMLBlocks_callback'),
332
- $text);
333
-
334
- return $text;
335
- }
336
- function _hashHTMLBlocks_callback($matches) {
337
- $text = $matches[1];
338
- $key = $this->hashBlock($text);
339
- return "\n\n$key\n\n";
340
- }
341
-
342
-
343
- function hashPart($text, $boundary = 'X') {
344
- #
345
- # Called whenever a tag must be hashed when a function insert an atomic
346
- # element in the text stream. Passing $text to through this function gives
347
- # a unique text-token which will be reverted back when calling unhash.
348
- #
349
- # The $boundary argument specify what character should be used to surround
350
- # the token. By convension, "B" is used for block elements that needs not
351
- # to be wrapped into paragraph tags at the end, ":" is used for elements
352
- # that are word separators and "X" is used in the general case.
353
- #
354
- # Swap back any tag hash found in $text so we do not have to `unhash`
355
- # multiple times at the end.
356
- $text = $this->unhash($text);
357
-
358
- # Then hash the block.
359
- static $i = 0;
360
- $key = "$boundary\x1A" . ++$i . $boundary;
361
- $this->html_hashes[$key] = $text;
362
- return $key; # String that will replace the tag.
363
- }
364
-
365
-
366
- function hashBlock($text) {
367
- #
368
- # Shortcut function for hashPart with block-level boundaries.
369
- #
370
- return $this->hashPart($text, 'B');
371
- }
372
-
373
-
374
- var $block_gamut = array(
375
- #
376
- # These are all the transformations that form block-level
377
- # tags like paragraphs, headers, and list items.
378
- #
379
- "doHeaders" => 10,
380
- "doHorizontalRules" => 20,
381
-
382
- "doLists" => 40,
383
- "doCodeBlocks" => 50,
384
- "doBlockQuotes" => 60,
385
- );
386
-
387
- function runBlockGamut($text) {
388
- #
389
- # Run block gamut tranformations.
390
- #
391
- # We need to escape raw HTML in Markdown source before doing anything
392
- # else. This need to be done for each block, and not only at the
393
- # begining in the Markdown function since hashed blocks can be part of
394
- # list items and could have been indented. Indented blocks would have
395
- # been seen as a code block in a previous pass of hashHTMLBlocks.
396
- $text = $this->hashHTMLBlocks($text);
397
-
398
- return $this->runBasicBlockGamut($text);
399
- }
400
-
401
- function runBasicBlockGamut($text) {
402
- #
403
- # Run block gamut tranformations, without hashing HTML blocks. This is
404
- # useful when HTML blocks are known to be already hashed, like in the first
405
- # whole-document pass.
406
- #
407
- foreach ($this->block_gamut as $method => $priority) {
408
- $text = $this->$method($text);
409
- }
410
-
411
- # Finally form paragraph and restore hashed blocks.
412
- $text = $this->formParagraphs($text);
413
-
414
- return $text;
415
- }
416
-
417
-
418
- function doHorizontalRules($text) {
419
- # Do Horizontal Rules:
420
- return preg_replace(
421
- '{
422
- ^[ ]{0,3} # Leading space
423
- ([-*_]) # $1: First marker
424
- (?> # Repeated marker group
425
- [ ]{0,2} # Zero, one, or two spaces.
426
- \1 # Marker character
427
- ){2,} # Group repeated at least twice
428
- [ ]* # Tailing spaces
429
- $ # End of line.
430
- }mx',
431
- "\n".$this->hashBlock("<hr$this->empty_element_suffix")."\n",
432
- $text);
433
- }
434
-
435
-
436
- var $span_gamut = array(
437
- #
438
- # These are all the transformations that occur *within* block-level
439
- # tags like paragraphs, headers, and list items.
440
- #
441
- # Process character escapes, code spans, and inline HTML
442
- # in one shot.
443
- "parseSpan" => -30,
444
-
445
- # Process anchor and image tags. Images must come first,
446
- # because ![foo][f] looks like an anchor.
447
- "doImages" => 10,
448
- "doAnchors" => 20,
449
-
450
- # Make links out of things like `<http://example.com/>`
451
- # Must come after doAnchors, because you can use < and >
452
- # delimiters in inline links like [this](<url>).
453
- "doAutoLinks" => 30,
454
- "encodeAmpsAndAngles" => 40,
455
-
456
- "doItalicsAndBold" => 50,
457
- "doHardBreaks" => 60,
458
- );
459
-
460
- function runSpanGamut($text) {
461
- #
462
- # Run span gamut tranformations.
463
- #
464
- foreach ($this->span_gamut as $method => $priority) {
465
- $text = $this->$method($text);
466
- }
467
-
468
- return $text;
469
- }
470
-
471
-
472
- function doHardBreaks($text) {
473
- # Do hard breaks:
474
- return preg_replace_callback('/ {2,}\n/',
475
- array(&$this, '_doHardBreaks_callback'), $text);
476
- }
477
- function _doHardBreaks_callback($matches) {
478
- return $this->hashPart("<br$this->empty_element_suffix\n");
479
- }
480
-
481
-
482
- function doAnchors($text) {
483
- #
484
- # Turn Markdown link shortcuts into XHTML <a> tags.
485
- #
486
- if ($this->in_anchor) return $text;
487
- $this->in_anchor = true;
488
-
489
- #
490
- # First, handle reference-style links: [link text] [id]
491
- #
492
- $text = preg_replace_callback('{
493
- ( # wrap whole match in $1
494
- \[
495
- ('.$this->nested_brackets_re.') # link text = $2
496
- \]
497
-
498
- [ ]? # one optional space
499
- (?:\n[ ]*)? # one optional newline followed by spaces
500
-
501
- \[
502
- (.*?) # id = $3
503
- \]
504
- )
505
- }xs',
506
- array(&$this, '_doAnchors_reference_callback'), $text);
507
-
508
- #
509
- # Next, inline-style links: [link text](url "optional title")
510
- #
511
- $text = preg_replace_callback('{
512
- ( # wrap whole match in $1
513
- \[
514
- ('.$this->nested_brackets_re.') # link text = $2
515
- \]
516
- \( # literal paren
517
- [ \n]*
518
- (?:
519
- <(.+?)> # href = $3
520
- |
521
- ('.$this->nested_url_parenthesis_re.') # href = $4
522
- )
523
- [ \n]*
524
- ( # $5
525
- ([\'"]) # quote char = $6
526
- (.*?) # Title = $7
527
- \6 # matching quote
528
- [ \n]* # ignore any spaces/tabs between closing quote and )
529
- )? # title is optional
530
- \)
531
- )
532
- }xs',
533
- array(&$this, '_doAnchors_inline_callback'), $text);
534
-
535
- #
536
- # Last, handle reference-style shortcuts: [link text]
537
- # These must come last in case you've also got [link text][1]
538
- # or [link text](/foo)
539
- #
540
- $text = preg_replace_callback('{
541
- ( # wrap whole match in $1
542
- \[
543
- ([^\[\]]+) # link text = $2; can\'t contain [ or ]
544
- \]
545
- )
546
- }xs',
547
- array(&$this, '_doAnchors_reference_callback'), $text);
548
-
549
- $this->in_anchor = false;
550
- return $text;
551
- }
552
- function _doAnchors_reference_callback($matches) {
553
- $whole_match = $matches[1];
554
- $link_text = $matches[2];
555
- $link_id =& $matches[3];
556
-
557
- if ($link_id == "") {
558
- # for shortcut links like [this][] or [this].
559
- $link_id = $link_text;
560
- }
561
-
562
- # lower-case and turn embedded newlines into spaces
563
- $link_id = strtolower($link_id);
564
- $link_id = preg_replace('{[ ]?\n}', ' ', $link_id);
565
-
566
- if (isset($this->urls[$link_id])) {
567
- $url = $this->urls[$link_id];
568
- $url = $this->encodeAttribute($url);
569
-
570
- $result = "<a href=\"$url\"";
571
- if ( isset( $this->titles[$link_id] ) ) {
572
- $title = $this->titles[$link_id];
573
- $title = $this->encodeAttribute($title);
574
- $result .= " title=\"$title\"";
575
- }
576
-
577
- $link_text = $this->runSpanGamut($link_text);
578
- $result .= ">$link_text</a>";
579
- $result = $this->hashPart($result);
580
- }
581
- else {
582
- $result = $whole_match;
583
- }
584
- return $result;
585
- }
586
- function _doAnchors_inline_callback($matches) {
587
- $whole_match = $matches[1];
588
- $link_text = $this->runSpanGamut($matches[2]);
589
- $url = $matches[3] == '' ? $matches[4] : $matches[3];
590
- $title =& $matches[7];
591
-
592
- $url = $this->encodeAttribute($url);
593
-
594
- $result = "<a href=\"$url\"";
595
- if (isset($title)) {
596
- $title = $this->encodeAttribute($title);
597
- $result .= " title=\"$title\"";
598
- }
599
-
600
- $link_text = $this->runSpanGamut($link_text);
601
- $result .= ">$link_text</a>";
602
-
603
- return $this->hashPart($result);
604
- }
605
-
606
-
607
- function doImages($text) {
608
- #
609
- # Turn Markdown image shortcuts into <img> tags.
610
- #
611
- #
612
- # First, handle reference-style labeled images: ![alt text][id]
613
- #
614
- $text = preg_replace_callback('{
615
- ( # wrap whole match in $1
616
- !\[
617
- ('.$this->nested_brackets_re.') # alt text = $2
618
- \]
619
-
620
- [ ]? # one optional space
621
- (?:\n[ ]*)? # one optional newline followed by spaces
622
-
623
- \[
624
- (.*?) # id = $3
625
- \]
626
-
627
- )
628
- }xs',
629
- array(&$this, '_doImages_reference_callback'), $text);
630
-
631
- #
632
- # Next, handle inline images: ![alt text](url "optional title")
633
- # Don't forget: encode * and _
634
- #
635
- $text = preg_replace_callback('{
636
- ( # wrap whole match in $1
637
- !\[
638
- ('.$this->nested_brackets_re.') # alt text = $2
639
- \]
640
- \s? # One optional whitespace character
641
- \( # literal paren
642
- [ \n]*
643
- (?:
644
- <(\S*)> # src url = $3
645
- |
646
- ('.$this->nested_url_parenthesis_re.') # src url = $4
647
- )
648
- [ \n]*
649
- ( # $5
650
- ([\'"]) # quote char = $6
651
- (.*?) # title = $7
652
- \6 # matching quote
653
- [ \n]*
654
- )? # title is optional
655
- \)
656
- )
657
- }xs',
658
- array(&$this, '_doImages_inline_callback'), $text);
659
-
660
- return $text;
661
- }
662
- function _doImages_reference_callback($matches) {
663
- $whole_match = $matches[1];
664
- $alt_text = $matches[2];
665
- $link_id = strtolower($matches[3]);
666
-
667
- if ($link_id == "") {
668
- $link_id = strtolower($alt_text); # for shortcut links like ![this][].
669
- }
670
-
671
- $alt_text = $this->encodeAttribute($alt_text);
672
- if (isset($this->urls[$link_id])) {
673
- $url = $this->encodeAttribute($this->urls[$link_id]);
674
- $result = "<img src=\"$url\" alt=\"$alt_text\"";
675
- if (isset($this->titles[$link_id])) {
676
- $title = $this->titles[$link_id];
677
- $title = $this->encodeAttribute($title);
678
- $result .= " title=\"$title\"";
679
- }
680
- $result .= $this->empty_element_suffix;
681
- $result = $this->hashPart($result);
682
- }
683
- else {
684
- # If there's no such link ID, leave intact:
685
- $result = $whole_match;
686
- }
687
-
688
- return $result;
689
- }
690
- function _doImages_inline_callback($matches) {
691
- $whole_match = $matches[1];
692
- $alt_text = $matches[2];
693
- $url = $matches[3] == '' ? $matches[4] : $matches[3];
694
- $title =& $matches[7];
695
-
696
- $alt_text = $this->encodeAttribute($alt_text);
697
- $url = $this->encodeAttribute($url);
698
- $result = "<img src=\"$url\" alt=\"$alt_text\"";
699
- if (isset($title)) {
700
- $title = $this->encodeAttribute($title);
701
- $result .= " title=\"$title\""; # $title already quoted
702
- }
703
- $result .= $this->empty_element_suffix;
704
-
705
- return $this->hashPart($result);
706
- }
707
-
708
-
709
- function doHeaders($text) {
710
- # Setext-style headers:
711
- # Header 1
712
- # ========
713
- #
714
- # Header 2
715
- # --------
716
- #
717
- $text = preg_replace_callback('{ ^(.+?)[ ]*\n(=+|-+)[ ]*\n+ }mx',
718
- array(&$this, '_doHeaders_callback_setext'), $text);
719
-
720
- # atx-style headers:
721
- # # Header 1
722
- # ## Header 2
723
- # ## Header 2 with closing hashes ##
724
- # ...
725
- # ###### Header 6
726
- #
727
- $text = preg_replace_callback('{
728
- ^(\#{1,6}) # $1 = string of #\'s
729
- [ ]*
730
- (.+?) # $2 = Header text
731
- [ ]*
732
- \#* # optional closing #\'s (not counted)
733
- \n+
734
- }xm',
735
- array(&$this, '_doHeaders_callback_atx'), $text);
736
-
737
- return $text;
738
- }
739
- function _doHeaders_callback_setext($matches) {
740
- # Terrible hack to check we haven't found an empty list item.
741
- if ($matches[2] == '-' && preg_match('{^-(?: |$)}', $matches[1]))
742
- return $matches[0];
743
-
744
- $level = $matches[2]{0} == '=' ? 1 : 2;
745
- $block = "<h$level>".$this->runSpanGamut($matches[1])."</h$level>";
746
- return "\n" . $this->hashBlock($block) . "\n\n";
747
- }
748
- function _doHeaders_callback_atx($matches) {
749
- $level = strlen($matches[1]);
750
- $block = "<h$level>".$this->runSpanGamut($matches[2])."</h$level>";
751
- return "\n" . $this->hashBlock($block) . "\n\n";
752
- }
753
-
754
-
755
- function doLists($text) {
756
- #
757
- # Form HTML ordered (numbered) and unordered (bulleted) lists.
758
- #
759
- $less_than_tab = $this->tab_width - 1;
760
-
761
- # Re-usable patterns to match list item bullets and number markers:
762
- $marker_ul_re = '[*+-]';
763
- $marker_ol_re = '\d+[\.]';
764
- $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
765
-
766
- $markers_relist = array(
767
- $marker_ul_re => $marker_ol_re,
768
- $marker_ol_re => $marker_ul_re,
769
- );
770
-
771
- foreach ($markers_relist as $marker_re => $other_marker_re) {
772
- # Re-usable pattern to match any entirel ul or ol list:
773
- $whole_list_re = '
774
- ( # $1 = whole list
775
- ( # $2
776
- ([ ]{0,'.$less_than_tab.'}) # $3 = number of spaces
777
- ('.$marker_re.') # $4 = first list item marker
778
- [ ]+
779
- )
780
- (?s:.+?)
781
- ( # $5
782
- \z
783
- |
784
- \n{2,}
785
- (?=\S)
786
- (?! # Negative lookahead for another list item marker
787
- [ ]*
788
- '.$marker_re.'[ ]+
789
- )
790
- |
791
- (?= # Lookahead for another kind of list
792
- \n
793
- \3 # Must have the same indentation
794
- '.$other_marker_re.'[ ]+
795
- )
796
- )
797
- )
798
- '; // mx
799
-
800
- # We use a different prefix before nested lists than top-level lists.
801
- # See extended comment in _ProcessListItems().
802
-
803
- if ($this->list_level) {
804
- $text = preg_replace_callback('{
805
- ^
806
- '.$whole_list_re.'
807
- }mx',
808
- array(&$this, '_doLists_callback'), $text);
809
- }
810
- else {
811
- $text = preg_replace_callback('{
812
- (?:(?<=\n)\n|\A\n?) # Must eat the newline
813
- '.$whole_list_re.'
814
- }mx',
815
- array(&$this, '_doLists_callback'), $text);
816
- }
817
- }
818
-
819
- return $text;
820
- }
821
- function _doLists_callback($matches) {
822
- # Re-usable patterns to match list item bullets and number markers:
823
- $marker_ul_re = '[*+-]';
824
- $marker_ol_re = '\d+[\.]';
825
- $marker_any_re = "(?:$marker_ul_re|$marker_ol_re)";
826
-
827
- $list = $matches[1];
828
- $list_type = preg_match("/$marker_ul_re/", $matches[4]) ? "ul" : "ol";
829
-
830
- $marker_any_re = ( $list_type == "ul" ? $marker_ul_re : $marker_ol_re );
831
-
832
- $list .= "\n";
833
- $result = $this->processListItems($list, $marker_any_re);
834
-
835
- $result = $this->hashBlock("<$list_type>\n" . $result . "</$list_type>");
836
- return "\n". $result ."\n\n";
837
- }
838
-
839
- var $list_level = 0;
840
-
841
- function processListItems($list_str, $marker_any_re) {
842
- #
843
- # Process the contents of a single ordered or unordered list, splitting it
844
- # into individual list items.
845
- #
846
- # The $this->list_level global keeps track of when we're inside a list.
847
- # Each time we enter a list, we increment it; when we leave a list,
848
- # we decrement. If it's zero, we're not in a list anymore.
849
- #
850
- # We do this because when we're not inside a list, we want to treat
851
- # something like this:
852
- #
853
- # I recommend upgrading to version
854
- # 8. Oops, now this line is treated
855
- # as a sub-list.
856
- #
857
- # As a single paragraph, despite the fact that the second line starts
858
- # with a digit-period-space sequence.
859
- #
860
- # Whereas when we're inside a list (or sub-list), that line will be
861
- # treated as the start of a sub-list. What a kludge, huh? This is
862
- # an aspect of Markdown's syntax that's hard to parse perfectly
863
- # without resorting to mind-reading. Perhaps the solution is to
864
- # change the syntax rules such that sub-lists must start with a
865
- # starting cardinal number; e.g. "1." or "a.".
866
-
867
- $this->list_level++;
868
-
869
- # trim trailing blank lines:
870
- $list_str = preg_replace("/\n{2,}\\z/", "\n", $list_str);
871
-
872
- $list_str = preg_replace_callback('{
873
- (\n)? # leading line = $1
874
- (^[ ]*) # leading whitespace = $2
875
- ('.$marker_any_re.' # list marker and space = $3
876
- (?:[ ]+|(?=\n)) # space only required if item is not empty
877
- )
878
- ((?s:.*?)) # list item text = $4
879
- (?:(\n+(?=\n))|\n) # tailing blank line = $5
880
- (?= \n* (\z | \2 ('.$marker_any_re.') (?:[ ]+|(?=\n))))
881
- }xm',
882
- array(&$this, '_processListItems_callback'), $list_str);
883
-
884
- $this->list_level--;
885
- return $list_str;
886
- }
887
- function _processListItems_callback($matches) {
888
- $item = $matches[4];
889
- $leading_line =& $matches[1];
890
- $leading_space =& $matches[2];
891
- $marker_space = $matches[3];
892
- $tailing_blank_line =& $matches[5];
893
-
894
- if ($leading_line || $tailing_blank_line ||
895
- preg_match('/\n{2,}/', $item))
896
- {
897
- # Replace marker with the appropriate whitespace indentation
898
- $item = $leading_space . str_repeat(' ', strlen($marker_space)) . $item;
899
- $item = $this->runBlockGamut($this->outdent($item)."\n");
900
- }
901
- else {
902
- # Recursion for sub-lists:
903
- $item = $this->doLists($this->outdent($item));
904
- $item = preg_replace('/\n+$/', '', $item);
905
- $item = $this->runSpanGamut($item);
906
- }
907
-
908
- return "<li>" . $item . "</li>\n";
909
- }
910
-
911
-
912
- function doCodeBlocks($text) {
913
- #
914
- # Process Markdown `<pre><code>` blocks.
915
- #
916
- $text = preg_replace_callback('{
917
- (?:\n\n|\A\n?)
918
- ( # $1 = the code block -- one or more lines, starting with a space/tab
919
- (?>
920
- [ ]{'.$this->tab_width.'} # Lines must start with a tab or a tab-width of spaces
921
- .*\n+
922
- )+
923
- )
924
- ((?=^[ ]{0,'.$this->tab_width.'}\S)|\Z) # Lookahead for non-space at line-start, or end of doc
925
- }xm',
926
- array(&$this, '_doCodeBlocks_callback'), $text);
927
-
928
- return $text;
929
- }
930
- function _doCodeBlocks_callback($matches) {
931
- $codeblock = $matches[1];
932
-
933
- $codeblock = $this->outdent($codeblock);
934
- $codeblock = htmlspecialchars($codeblock, ENT_NOQUOTES);
935
-
936
- # trim leading newlines and trailing newlines
937
- $codeblock = preg_replace('/\A\n+|\n+\z/', '', $codeblock);
938
-
939
- $codeblock = "<pre><code>$codeblock\n</code></pre>";
940
- return "\n\n".$this->hashBlock($codeblock)."\n\n";
941
- }
942
-
943
-
944
- function makeCodeSpan($code) {
945
- #
946
- # Create a code span markup for $code. Called from handleSpanToken.
947
- #
948
- $code = htmlspecialchars(trim($code), ENT_NOQUOTES);
949
- return $this->hashPart("<code>$code</code>");
950
- }
951
-
952
-
953
- var $em_relist = array(
954
- '' => '(?:(?<!\*)\*(?!\*)|(?<!_)_(?!_))(?=\S|$)(?![\.,:;]\s)',
955
- '*' => '(?<=\S|^)(?<!\*)\*(?!\*)',
956
- '_' => '(?<=\S|^)(?<!_)_(?!_)',
957
- );
958
- var $strong_relist = array(
959
- '' => '(?:(?<!\*)\*\*(?!\*)|(?<!_)__(?!_))(?=\S|$)(?![\.,:;]\s)',
960
- '**' => '(?<=\S|^)(?<!\*)\*\*(?!\*)',
961
- '__' => '(?<=\S|^)(?<!_)__(?!_)',
962
- );
963
- var $em_strong_relist = array(
964
- '' => '(?:(?<!\*)\*\*\*(?!\*)|(?<!_)___(?!_))(?=\S|$)(?![\.,:;]\s)',
965
- '***' => '(?<=\S|^)(?<!\*)\*\*\*(?!\*)',
966
- '___' => '(?<=\S|^)(?<!_)___(?!_)',
967
- );
968
- var $em_strong_prepared_relist;
969
-
970
- function prepareItalicsAndBold() {
971
- #
972
- # Prepare regular expressions for searching emphasis tokens in any
973
- # context.
974
- #
975
- foreach ($this->em_relist as $em => $em_re) {
976
- foreach ($this->strong_relist as $strong => $strong_re) {
977
- # Construct list of allowed token expressions.
978
- $token_relist = array();
979
- if (isset($this->em_strong_relist["$em$strong"])) {
980
- $token_relist[] = $this->em_strong_relist["$em$strong"];
981
- }
982
- $token_relist[] = $em_re;
983
- $token_relist[] = $strong_re;
984
-
985
- # Construct master expression from list.
986
- $token_re = '{('. implode('|', $token_relist) .')}';
987
- $this->em_strong_prepared_relist["$em$strong"] = $token_re;
988
- }
989
- }
990
- }
991
-
992
- function doItalicsAndBold($text) {
993
- $token_stack = array('');
994
- $text_stack = array('');
995
- $em = '';
996
- $strong = '';
997
- $tree_char_em = false;
998
-
999
- while (1) {
1000
- #
1001
- # Get prepared regular expression for seraching emphasis tokens
1002
- # in current context.
1003
- #
1004
- $token_re = $this->em_strong_prepared_relist["$em$strong"];
1005
-
1006
- #
1007
- # Each loop iteration search for the next emphasis token.
1008
- # Each token is then passed to handleSpanToken.
1009
- #
1010
- $parts = preg_split($token_re, $text, 2, PREG_SPLIT_DELIM_CAPTURE);
1011
- $text_stack[0] .= $parts[0];
1012
- $token =& $parts[1];
1013
- $text =& $parts[2];
1014
-
1015
- if (empty($token)) {
1016
- # Reached end of text span: empty stack without emitting.
1017
- # any more emphasis.
1018
- while ($token_stack[0]) {
1019
- $text_stack[1] .= array_shift($token_stack);
1020
- $text_stack[0] .= array_shift($text_stack);
1021
- }
1022
- break;
1023
- }
1024
-
1025
- $token_len = strlen($token);
1026
- if ($tree_char_em) {
1027
- # Reached closing marker while inside a three-char emphasis.
1028
- if ($token_len == 3) {
1029
- # Three-char closing marker, close em and strong.
1030
- array_shift($token_stack);
1031
- $span = array_shift($text_stack);
1032
- $span = $this->runSpanGamut($span);
1033
- $span = "<strong><em>$span</em></strong>";
1034
- $text_stack[0] .= $this->hashPart($span);
1035
- $em = '';
1036
- $strong = '';
1037
- } else {
1038
- # Other closing marker: close one em or strong and
1039
- # change current token state to match the other
1040
- $token_stack[0] = str_repeat($token{0}, 3-$token_len);
1041
- $tag = $token_len == 2 ? "strong" : "em";
1042
- $span = $text_stack[0];
1043
- $span = $this->runSpanGamut($span);
1044
- $span = "<$tag>$span</$tag>";
1045
- $text_stack[0] = $this->hashPart($span);
1046
- $$tag = ''; # $$tag stands for $em or $strong
1047
- }
1048
- $tree_char_em = false;
1049
- } else if ($token_len == 3) {
1050
- if ($em) {
1051
- # Reached closing marker for both em and strong.
1052
- # Closing strong marker:
1053
- for ($i = 0; $i < 2; ++$i) {
1054
- $shifted_token = array_shift($token_stack);
1055
- $tag = strlen($shifted_token) == 2 ? "strong" : "em";
1056
- $span = array_shift($text_stack);
1057
- $span = $this->runSpanGamut($span);
1058
- $span = "<$tag>$span</$tag>";
1059
- $text_stack[0] .= $this->hashPart($span);
1060
- $$tag = ''; # $$tag stands for $em or $strong
1061
- }
1062
- } else {
1063
- # Reached opening three-char emphasis marker. Push on token
1064
- # stack; will be handled by the special condition above.
1065
- $em = $token{0};
1066
- $strong = "$em$em";
1067
- array_unshift($token_stack, $token);
1068
- array_unshift($text_stack, '');
1069
- $tree_char_em = true;
1070
- }
1071
- } else if ($token_len == 2) {
1072
- if ($strong) {
1073
- # Unwind any dangling emphasis marker:
1074
- if (strlen($token_stack[0]) == 1) {
1075
- $text_stack[1] .= array_shift($token_stack);
1076
- $text_stack[0] .= array_shift($text_stack);
1077
- }
1078
- # Closing strong marker:
1079
- array_shift($token_stack);
1080
- $span = array_shift($text_stack);
1081
- $span = $this->runSpanGamut($span);
1082
- $span = "<strong>$span</strong>";
1083
- $text_stack[0] .= $this->hashPart($span);
1084
- $strong = '';
1085
- } else {
1086
- array_unshift($token_stack, $token);
1087
- array_unshift($text_stack, '');
1088
- $strong = $token;
1089
- }
1090
- } else {
1091
- # Here $token_len == 1
1092
- if ($em) {
1093
- if (strlen($token_stack[0]) == 1) {
1094
- # Closing emphasis marker:
1095
- array_shift($token_stack);
1096
- $span = array_shift($text_stack);
1097
- $span = $this->runSpanGamut($span);
1098
- $span = "<em>$span</em>";
1099
- $text_stack[0] .= $this->hashPart($span);
1100
- $em = '';
1101
- } else {
1102
- $text_stack[0] .= $token;
1103
- }
1104
- } else {
1105
- array_unshift($token_stack, $token);
1106
- array_unshift($text_stack, '');
1107
- $em = $token;
1108
- }
1109
- }
1110
- }
1111
- return $text_stack[0];
1112
- }
1113
-
1114
-
1115
- function doBlockQuotes($text) {
1116
- $text = preg_replace_callback('/
1117
- ( # Wrap whole match in $1
1118
- (?>
1119
- ^[ ]*>[ ]? # ">" at the start of a line
1120
- .+\n # rest of the first line
1121
- (.+\n)* # subsequent consecutive lines
1122
- \n* # blanks
1123
- )+
1124
- )
1125
- /xm',
1126
- array(&$this, '_doBlockQuotes_callback'), $text);
1127
-
1128
- return $text;
1129
- }
1130
- function _doBlockQuotes_callback($matches) {
1131
- $bq = $matches[1];
1132
- # trim one level of quoting - trim whitespace-only lines
1133
- $bq = preg_replace('/^[ ]*>[ ]?|^[ ]+$/m', '', $bq);
1134
- $bq = $this->runBlockGamut($bq); # recurse
1135
-
1136
- $bq = preg_replace('/^/m', " ", $bq);
1137
- # These leading spaces cause problem with <pre> content,
1138
- # so we need to fix that:
1139
- $bq = preg_replace_callback('{(\s*<pre>.+?</pre>)}sx',
1140
- array(&$this, '_doBlockQuotes_callback2'), $bq);
1141
-
1142
- return "\n". $this->hashBlock("<blockquote>\n$bq\n</blockquote>")."\n\n";
1143
- }
1144
- function _doBlockQuotes_callback2($matches) {
1145
- $pre = $matches[1];
1146
- $pre = preg_replace('/^ /m', '', $pre);
1147
- return $pre;
1148
- }
1149
-
1150
-
1151
- function formParagraphs($text) {
1152
- #
1153
- # Params:
1154
- # $text - string to process with html <p> tags
1155
- #
1156
- # Strip leading and trailing lines:
1157
- $text = preg_replace('/\A\n+|\n+\z/', '', $text);
1158
-
1159
- $grafs = preg_split('/\n{2,}/', $text, -1, PREG_SPLIT_NO_EMPTY);
1160
-
1161
- #
1162
- # Wrap <p> tags and unhashify HTML blocks
1163
- #
1164
- foreach ($grafs as $key => $value) {
1165
- if (!preg_match('/^B\x1A[0-9]+B$/', $value)) {
1166
- # Is a paragraph.
1167
- $value = $this->runSpanGamut($value);
1168
- $value = preg_replace('/^([ ]*)/', "<p>", $value);
1169
- $value .= "</p>";
1170
- $grafs[$key] = $this->unhash($value);
1171
- }
1172
- else {
1173
- # Is a block.
1174
- # Modify elements of @grafs in-place...
1175
- $graf = $value;
1176
- $block = $this->html_hashes[$graf];
1177
- $graf = $block;
1178
- // if (preg_match('{
1179
- // \A
1180
- // ( # $1 = <div> tag
1181
- // <div \s+
1182
- // [^>]*
1183
- // \b
1184
- // markdown\s*=\s* ([\'"]) # $2 = attr quote char
1185
- // 1
1186
- // \2
1187
- // [^>]*
1188
- // >
1189
- // )
1190
- // ( # $3 = contents
1191
- // .*
1192
- // )
1193
- // (</div>) # $4 = closing tag
1194
- // \z
1195
- // }xs', $block, $matches))
1196
- // {
1197
- // list(, $div_open, , $div_content, $div_close) = $matches;
1198
- //
1199
- // # We can't call Markdown(), because that resets the hash;
1200
- // # that initialization code should be pulled into its own sub, though.
1201
- // $div_content = $this->hashHTMLBlocks($div_content);
1202
- //
1203
- // # Run document gamut methods on the content.
1204
- // foreach ($this->document_gamut as $method => $priority) {
1205
- // $div_content = $this->$method($div_content);
1206
- // }
1207
- //
1208
- // $div_open = preg_replace(
1209
- // '{\smarkdown\s*=\s*([\'"]).+?\1}', '', $div_open);
1210
- //
1211
- // $graf = $div_open . "\n" . $div_content . "\n" . $div_close;
1212
- // }
1213
- $grafs[$key] = $graf;
1214
- }
1215
- }
1216
-
1217
- return implode("\n\n", $grafs);
1218
- }
1219
-
1220
-
1221
- function encodeAttribute($text) {
1222
- #
1223
- # Encode text for a double-quoted HTML attribute. This function
1224
- # is *not* suitable for attributes enclosed in single quotes.
1225
- #
1226
- $text = $this->encodeAmpsAndAngles($text);
1227
- $text = str_replace('"', '&quot;', $text);
1228
- return $text;
1229
- }
1230
-
1231
-
1232
- function encodeAmpsAndAngles($text) {
1233
- #
1234
- # Smart processing for ampersands and angle brackets that need to
1235
- # be encoded. Valid character entities are left alone unless the
1236
- # no-entities mode is set.
1237
- #
1238
- if ($this->no_entities) {
1239
- $text = str_replace('&', '&amp;', $text);
1240
- } else {
1241
- # Ampersand-encoding based entirely on Nat Irons's Amputator
1242
- # MT plugin: <http://bumppo.net/projects/amputator/>
1243
- $text = preg_replace('/&(?!#?[xX]?(?:[0-9a-fA-F]+|\w+);)/',
1244
- '&amp;', $text);;
1245
- }
1246
- # Encode remaining <'s
1247
- $text = str_replace('<', '&lt;', $text);
1248
-
1249
- return $text;
1250
- }
1251
-
1252
-
1253
- function doAutoLinks($text) {
1254
- $text = preg_replace_callback('{<((https?|ftp|dict):[^\'">\s]+)>}i',
1255
- array(&$this, '_doAutoLinks_url_callback'), $text);
1256
-
1257
- # Email addresses: <address@domain.foo>
1258
- $text = preg_replace_callback('{
1259
- <
1260
- (?:mailto:)?
1261
- (
1262
- (?:
1263
- [-!#$%&\'*+/=?^_`.{|}~\w\x80-\xFF]+
1264
- |
1265
- ".*?"
1266
- )
1267
- \@
1268
- (?:
1269
- [-a-z0-9\x80-\xFF]+(\.[-a-z0-9\x80-\xFF]+)*\.[a-z]+
1270
- |
1271
- \[[\d.a-fA-F:]+\] # IPv4 & IPv6
1272
- )
1273
- )
1274
- >
1275
- }xi',
1276
- array(&$this, '_doAutoLinks_email_callback'), $text);
1277
- $text = preg_replace_callback('{<(tel:([^\'">\s]+))>}i',array(&$this, '_doAutoLinks_tel_callback'), $text);
1278
-
1279
- return $text;
1280
- }
1281
- function _doAutoLinks_tel_callback($matches) {
1282
- $url = $this->encodeAttribute($matches[1]);
1283
- $tel = $this->encodeAttribute($matches[2]);
1284
- $link = "<a href=\"$url\">$tel</a>";
1285
- return $this->hashPart($link);
1286
- }
1287
- function _doAutoLinks_url_callback($matches) {
1288
- $url = $this->encodeAttribute($matches[1]);
1289
- $link = "<a href=\"$url\">$url</a>";
1290
- return $this->hashPart($link);
1291
- }
1292
- function _doAutoLinks_email_callback($matches) {
1293
- $address = $matches[1];
1294
- $link = $this->encodeEmailAddress($address);
1295
- return $this->hashPart($link);
1296
- }
1297
-
1298
-
1299
- function encodeEmailAddress($addr) {
1300
- #
1301
- # Input: an email address, e.g. "foo@example.com"
1302
- #
1303
- # Output: the email address as a mailto link, with each character
1304
- # of the address encoded as either a decimal or hex entity, in
1305
- # the hopes of foiling most address harvesting spam bots. E.g.:
1306
- #
1307
- # <p><a href="&#109;&#x61;&#105;&#x6c;&#116;&#x6f;&#58;&#x66;o&#111;
1308
- # &#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;&#101;&#46;&#x63;&#111;
1309
- # &#x6d;">&#x66;o&#111;&#x40;&#101;&#x78;&#97;&#x6d;&#112;&#x6c;
1310
- # &#101;&#46;&#x63;&#111;&#x6d;</a></p>
1311
- #
1312
- # Based by a filter by Matthew Wickline, posted to BBEdit-Talk.
1313
- # With some optimizations by Milian Wolff.
1314
- #
1315
- $addr = "mailto:" . $addr;
1316
- $chars = preg_split('/(?<!^)(?!$)/', $addr);
1317
- $seed = (int)abs(crc32($addr) / strlen($addr)); # Deterministic seed.
1318
-
1319
- foreach ($chars as $key => $char) {
1320
- $ord = ord($char);
1321
- # Ignore non-ascii chars.
1322
- if ($ord < 128) {
1323
- $r = ($seed * (1 + $key)) % 100; # Pseudo-random function.
1324
- # roughly 10% raw, 45% hex, 45% dec
1325
- # '@' *must* be encoded. I insist.
1326
- if ($r > 90 && $char != '@') /* do nothing */;
1327
- else if ($r < 45) $chars[$key] = '&#x'.dechex($ord).';';
1328
- else $chars[$key] = '&#'.$ord.';';
1329
- }
1330
- }
1331
-
1332
- $addr = implode('', $chars);
1333
- $text = implode('', array_slice($chars, 7)); # text without `mailto:`
1334
- $addr = "<a href=\"$addr\">$text</a>";
1335
-
1336
- return $addr;
1337
- }
1338
-
1339
-
1340
- function parseSpan($str) {
1341
- #
1342
- # Take the string $str and parse it into tokens, hashing embeded HTML,
1343
- # escaped characters and handling code spans.
1344
- #
1345
- $output = '';
1346
-
1347
- $span_re = '{
1348
- (
1349
- \\\\'.$this->escape_chars_re.'
1350
- |
1351
- (?<![`\\\\])
1352
- `+ # code span marker
1353
- '.( $this->no_markup ? '' : '
1354
- |
1355
- <!-- .*? --> # comment
1356
- |
1357
- <\?.*?\?> | <%.*?%> # processing instruction
1358
- |
1359
- <[!$]?[-a-zA-Z0-9:_]+ # regular tags
1360
- (?>
1361
- \s
1362
- (?>[^"\'>]+|"[^"]*"|\'[^\']*\')*
1363
- )?
1364
- >
1365
- |
1366
- <[-a-zA-Z0-9:_]+\s*/> # xml-style empty tag
1367
- |
1368
- </[-a-zA-Z0-9:_]+\s*> # closing tag
1369
- ').'
1370
- )
1371
- }xs';
1372
-
1373
- while (1) {
1374
- #
1375
- # Each loop iteration seach for either the next tag, the next
1376
- # openning code span marker, or the next escaped character.
1377
- # Each token is then passed to handleSpanToken.
1378
- #
1379
- $parts = preg_split($span_re, $str, 2, PREG_SPLIT_DELIM_CAPTURE);
1380
-
1381
- # Create token from text preceding tag.
1382
- if ($parts[0] != "") {
1383
- $output .= $parts[0];
1384
- }
1385
-
1386
- # Check if we reach the end.
1387
- if (isset($parts[1])) {
1388
- $output .= $this->handleSpanToken($parts[1], $parts[2]);
1389
- $str = $parts[2];
1390
- }
1391
- else {
1392
- break;
1393
- }
1394
- }
1395
-
1396
- return $output;
1397
- }
1398
-
1399
-
1400
- function handleSpanToken($token, &$str) {
1401
- #
1402
- # Handle $token provided by parseSpan by determining its nature and
1403
- # returning the corresponding value that should replace it.
1404
- #
1405
- switch ($token{0}) {
1406
- case "\\":
1407
- return $this->hashPart("&#". ord($token{1}). ";");
1408
- case "`":
1409
- # Search for end marker in remaining text.
1410
- if (preg_match('/^(.*?[^`])'.preg_quote($token).'(?!`)(.*)$/sm',
1411
- $str, $matches))
1412
- {
1413
- $str = $matches[2];
1414
- $codespan = $this->makeCodeSpan($matches[1]);
1415
- return $this->hashPart($codespan);
1416
- }
1417
- return $token; // return as text since no ending marker found.
1418
- default:
1419
- return $this->hashPart($token);
1420
- }
1421
- }
1422
-
1423
-
1424
- function outdent($text) {
1425
- #
1426
- # Remove one level of line-leading tabs or spaces
1427
- #
1428
- return preg_replace('/^(\t|[ ]{1,'.$this->tab_width.'})/m', '', $text);
1429
- }
1430
-
1431
-
1432
- # String length function for detab. `_initDetab` will create a function to
1433
- # hanlde UTF-8 if the default function does not exist.
1434
- var $utf8_strlen = 'mb_strlen';
1435
-
1436
- function detab($text) {
1437
- #
1438
- # Replace tabs with the appropriate amount of space.
1439
- #
1440
- # For each line we separate the line in blocks delemited by
1441
- # tab characters. Then we reconstruct every line by adding the
1442
- # appropriate number of space between each blocks.
1443
-
1444
- $text = preg_replace_callback('/^.*\t.*$/m',
1445
- array(&$this, '_detab_callback'), $text);
1446
-
1447
- return $text;
1448
- }
1449
- function _detab_callback($matches) {
1450
- $line = $matches[0];
1451
- $strlen = $this->utf8_strlen; # strlen function for UTF-8.
1452
-
1453
- # Split in blocks.
1454
- $blocks = explode("\t", $line);
1455
- # Add each blocks to the line.
1456
- $line = $blocks[0];
1457
- unset($blocks[0]); # Do not add first block twice.
1458
- foreach ($blocks as $block) {
1459
- # Calculate amount of space, insert spaces, insert block.
1460
- $amount = $this->tab_width -
1461
- $strlen($line, 'UTF-8') % $this->tab_width;
1462
- $line .= str_repeat(" ", $amount) . $block;
1463
- }
1464
- return $line;
1465
- }
1466
- function _initDetab() {
1467
- #
1468
- # Check for the availability of the function in the `utf8_strlen` property
1469
- # (initially `mb_strlen`). If the function is not available, create a
1470
- # function that will loosely count the number of UTF-8 characters with a
1471
- # regular expression.
1472
- #
1473
- if (function_exists($this->utf8_strlen)) return;
1474
- $this->utf8_strlen = create_function('$text', 'return preg_match_all(
1475
- "/[\\\\x00-\\\\xBF]|[\\\\xC0-\\\\xFF][\\\\x80-\\\\xBF]*/",
1476
- $text, $m);');
1477
- }
1478
-
1479
-
1480
- function unhash($text) {
1481
- #
1482
- # Swap back in all the tags hashed by _HashHTMLBlocks.
1483
- #
1484
- return preg_replace_callback('/(.)\x1A[0-9]+\1/',
1485
- array(&$this, '_unhash_callback'), $text);
1486
- }
1487
- function _unhash_callback($matches) {
1488
- return $this->html_hashes[$matches[0]];
1489
- }
1490
-
1491
- }
1492
-
1493
- /*
1494
-
1495
- PHP Markdown
1496
- ============
1497
-
1498
- Description
1499
- -----------
1500
-
1501
- This is a PHP translation of the original Markdown formatter written in
1502
- Perl by John Gruber.
1503
-
1504
- Markdown is a text-to-HTML filter; it translates an easy-to-read /
1505
- easy-to-write structured text format into HTML. Markdown's text format
1506
- is mostly similar to that of plain text email, and supports features such
1507
- as headers, *emphasis*, code blocks, blockquotes, and links.
1508
-
1509
- Markdown's syntax is designed not as a generic markup language, but
1510
- specifically to serve as a front-end to (X)HTML. You can use span-level
1511
- HTML tags anywhere in a Markdown document, and you can use block level
1512
- HTML tags (like <div> and <table> as well).
1513
-
1514
- For more information about Markdown's syntax, see:
1515
-
1516
- <http://daringfireball.net/projects/markdown/>
1517
-
1518
-
1519
- Bugs
1520
- ----
1521
-
1522
- To file bug reports please send email to:
1523
-
1524
- <michel.fortin@michelf.ca>
1525
-
1526
- Please include with your report: (1) the example input; (2) the output you
1527
- expected; (3) the output Markdown actually produced.
1528
-
1529
-
1530
- Version History
1531
- ---------------
1532
-
1533
- See the readme file for detailed release notes for this version.
1534
-
1535
-
1536
- Copyright and License
1537
- ---------------------
1538
-
1539
- PHP Markdown
1540
- Copyright (c) 2004-2013 Michel Fortin
1541
- <http://michelf.ca/>
1542
- All rights reserved.
1543
-
1544
- Based on Markdown
1545
- Copyright (c) 2003-2006 John Gruber
1546
- <http://daringfireball.net/>
1547
- All rights reserved.
1548
-
1549
- Redistribution and use in source and binary forms, with or without
1550
- modification, are permitted provided that the following conditions are
1551
- met:
1552
-
1553
- * Redistributions of source code must retain the above copyright notice,
1554
- this list of conditions and the following disclaimer.
1555
-
1556
- * Redistributions in binary form must reproduce the above copyright
1557
- notice, this list of conditions and the following disclaimer in the
1558
- documentation and/or other materials provided with the distribution.
1559
-
1560
- * Neither the name "Markdown" nor the names of its contributors may
1561
- be used to endorse or promote products derived from this software
1562
- without specific prior written permission.
1563
-
1564
- This software is provided by the copyright holders and contributors "as
1565
- is" and any express or implied warranties, including, but not limited
1566
- to, the implied warranties of merchantability and fitness for a
1567
- particular purpose are disclaimed. In no event shall the copyright owner
1568
- or contributors be liable for any direct, indirect, incidental, special,
1569
- exemplary, or consequential damages (including, but not limited to,
1570
- procurement of substitute goods or services; loss of use, data, or
1571
- profits; or business interruption) however caused and on any theory of
1572
- liability, whether in contract, strict liability, or tort (including
1573
- negligence or otherwise) arising in any way out of the use of this
1574
- software, even if advised of the possibility of such damage.
1575
-
1576
- */
1577
- ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
base/inc/post-selector.php CHANGED
@@ -50,7 +50,7 @@ function siteorigin_widget_post_selector_process_query($query){
50
 
51
  if(!empty($query['post__in'])) {
52
  $query['post__in'] = explode(',', $query['post__in']);
53
- array_map('intval', $query['post__in']);
54
  }
55
 
56
  if(!empty($query['tax_query'])) {
@@ -97,6 +97,12 @@ function siteorigin_widget_post_selector_process_query($query){
97
  if ( ! empty( $query['additional'] ) ) {
98
  $query = wp_parse_args( $query['additional'], $query );
99
  unset( $query['additional'] );
 
 
 
 
 
 
100
  }
101
 
102
  return $query;
@@ -181,7 +187,7 @@ function siteorigin_widget_post_selector_form_fields(){
181
  '' => __('Default', 'so-widgets-bundle'),
182
  'ignore' => __('Ignore sticky', 'so-widgets-bundle'),
183
  'exclude' => __('Exclude sticky', 'so-widgets-bundle'),
184
- 'only' => __('Include sticky', 'so-widgets-bundle'),
185
  );
186
  foreach($sticky as $id => $v) {
187
  $return['sticky'] .= '<option value="' . $id . '">' . $v . '</option>';
50
 
51
  if(!empty($query['post__in'])) {
52
  $query['post__in'] = explode(',', $query['post__in']);
53
+ $query['post__in'] = array_map('intval', $query['post__in']);
54
  }
55
 
56
  if(!empty($query['tax_query'])) {
97
  if ( ! empty( $query['additional'] ) ) {
98
  $query = wp_parse_args( $query['additional'], $query );
99
  unset( $query['additional'] );
100
+
101
+ // If post_not_in is set, we need to convert it to an array to avoid issues with the query.
102
+ if( !empty( $query['post__not_in'] ) && !is_array( $query['post__not_in'] ) ){
103
+ $query['post__not_in'] = explode( ',', $query['post__not_in'] );
104
+ $query['post__not_in'] = array_map( 'intval', $query['post__not_in'] );
105
+ }
106
  }
107
 
108
  return $query;
187
  '' => __('Default', 'so-widgets-bundle'),
188
  'ignore' => __('Ignore sticky', 'so-widgets-bundle'),
189
  'exclude' => __('Exclude sticky', 'so-widgets-bundle'),
190
+ 'only' => __('Only sticky', 'so-widgets-bundle'),
191
  );
192
  foreach($sticky as $id => $v) {
193
  $return['sticky'] .= '<option value="' . $id . '">' . $v . '</option>';
base/siteorigin-widget.class.php CHANGED
@@ -143,7 +143,10 @@ abstract class SiteOrigin_Widget extends WP_Widget {
143
  */
144
  public function widget( $args, $instance ) {
145
  if( empty( $this->form_options ) ) {
146
- $this->form_options = $this->get_widget_form();
 
 
 
147
  }
148
 
149
  $instance = $this->modify_instance( $instance );
@@ -160,7 +163,7 @@ abstract class SiteOrigin_Widget extends WP_Widget {
160
  ) );
161
 
162
  // Add any missing default values to the instance
163
- $instance = $this->add_defaults( $this->form_options, $instance );
164
 
165
  $css_name = $this->generate_and_enqueue_instance_styles( $instance );
166
  $this->enqueue_frontend_scripts( $instance );
@@ -230,15 +233,18 @@ abstract class SiteOrigin_Widget extends WP_Widget {
230
  * @return string The CSS name
231
  */
232
  function generate_and_enqueue_instance_styles( $instance ) {
233
- if( empty( $this->form_options ) ) {
234
- $this->form_options = $this->get_widget_form();
 
 
 
235
  }
236
 
237
  // We'll assume empty instances don't have styles
238
  if( empty($instance) ) return;
239
 
240
  // Make sure all the default values are in place
241
- $instance = $this->add_defaults( $this->form_options, $instance );
242
 
243
  $this->current_instance = $instance;
244
  $style = $this->get_style_name( $instance );
@@ -792,38 +798,45 @@ abstract class SiteOrigin_Widget extends WP_Widget {
792
  $less = apply_filters( 'siteorigin_widgets_styles', $less, $this->widget_class, $instance );
793
  $less = apply_filters( 'siteorigin_widgets_less_' . $this->id_base, $less, $instance, $this );
794
 
795
- $style = $this->get_style_name( $instance );
796
- $hash = $this->get_style_hash( $instance );
797
- $css_name = $this->id_base . '-' . $style . '-' . $hash;
798
 
799
- //we assume that any remaining @imports are plain css imports and should be kept outside selectors
800
- $css_imports = '';
801
- if ( preg_match_all( '/^@import.+/m', $less, $imports ) ) {
802
- $css_imports = implode( "\n", $imports[0] );
803
- $less = preg_replace( '/^@import.+/m', '', $less );
804
- }
805
 
806
- $less = $css_imports . "\n\n" . '.so-widget-'.$css_name." { \n".$less."\n } ";
 
 
 
 
 
807
 
808
- $compiler = new lessc();
809
- $lc_functions = new SiteOrigin_Widgets_Less_Functions($this, $instance);
810
- $lc_functions->registerFunctions( $compiler );
811
 
812
- try {
813
- if( method_exists( $compiler, 'compile' ) ) {
814
- $css = $compiler->compile( $less );
 
 
 
 
 
 
 
 
 
 
 
815
  }
816
- }
817
- catch ( Exception $e ) {
818
- $css = '';
819
- }
820
 
821
- // Remove any attributes with default as the value
822
- $css = preg_replace('/[a-zA-Z\-]+ *: *default *;/', '', $css);
823
 
824
- // Remove any empty CSS
825
- $css = preg_replace('/[^{}]*\{\s*\}/m', '', $css);
826
- $css = trim($css);
 
827
 
828
  return apply_filters( 'siteorigin_widgets_instance_css', $css, $instance, $this );
829
  }
@@ -1006,10 +1019,10 @@ abstract class SiteOrigin_Widget extends WP_Widget {
1006
  * @deprecated Will be removed in version 2.0
1007
  */
1008
  function parse_markdown( $markdown ){
1009
- if( !class_exists('Markdown_Parser') ) include plugin_dir_path(__FILE__).'inc/markdown.php';
1010
- $parser = new Markdown_Parser();
1011
 
1012
- return $parser->transform($markdown);
1013
  }
1014
 
1015
  /**
143
  */
144
  public function widget( $args, $instance ) {
145
  if( empty( $this->form_options ) ) {
146
+ $form_options = $this->get_widget_form();
147
+ }
148
+ else {
149
+ $form_options = $this->modify_form( $this->form_options );
150
  }
151
 
152
  $instance = $this->modify_instance( $instance );
163
  ) );
164
 
165
  // Add any missing default values to the instance
166
+ $instance = $this->add_defaults( $form_options, $instance );
167
 
168
  $css_name = $this->generate_and_enqueue_instance_styles( $instance );
169
  $this->enqueue_frontend_scripts( $instance );
233
  * @return string The CSS name
234
  */
235
  function generate_and_enqueue_instance_styles( $instance ) {
236
+ if( empty( $form_options ) ) {
237
+ $form_options = $this->get_widget_form();
238
+ }
239
+ else {
240
+ $form_options = $this->modify_form( $this->form_options );
241
  }
242
 
243
  // We'll assume empty instances don't have styles
244
  if( empty($instance) ) return;
245
 
246
  // Make sure all the default values are in place
247
+ $instance = $this->add_defaults( $form_options, $instance );
248
 
249
  $this->current_instance = $instance;
250
  $style = $this->get_style_name( $instance );
798
  $less = apply_filters( 'siteorigin_widgets_styles', $less, $this->widget_class, $instance );
799
  $less = apply_filters( 'siteorigin_widgets_less_' . $this->id_base, $less, $instance, $this );
800
 
801
+ $css = '';
 
 
802
 
803
+ if( ! empty( $less ) ) {
804
+ $style = $this->get_style_name( $instance );
805
+ $hash = $this->get_style_hash( $instance );
806
+ $css_name = $this->id_base . '-' . $style . '-' . $hash;
 
 
807
 
808
+ //we assume that any remaining @imports are plain css imports and should be kept outside selectors
809
+ $css_imports = '';
810
+ if ( preg_match_all( '/^@import.+/m', $less, $imports ) ) {
811
+ $css_imports = implode( "\n", $imports[0] );
812
+ $less = preg_replace( '/^@import.+/m', '', $less );
813
+ }
814
 
815
+ $less = $css_imports . "\n\n" . '.so-widget-'.$css_name." { \n".$less."\n } ";
 
 
816
 
817
+ $compiler = new lessc();
818
+ $lc_functions = new SiteOrigin_Widgets_Less_Functions($this, $instance);
819
+ $lc_functions->registerFunctions( $compiler );
820
+ $compiler = apply_filters( 'siteorigin_widgets_less_compiler', $compiler, $instance, $this );
821
+
822
+ try {
823
+ if( method_exists( $compiler, 'compile' ) ) {
824
+ $css = $compiler->compile( $less );
825
+ }
826
+ }
827
+ catch ( Exception $e ) {
828
+ if( defined( 'SITEORIGIN_WIDGETS_DEBUG' ) && SITEORIGIN_WIDGETS_DEBUG ) {
829
+ throw $e;
830
+ }
831
  }
 
 
 
 
832
 
833
+ // Remove any attributes with default as the value
834
+ $css = preg_replace('/[a-zA-Z\-]+ *: *default *;/', '', $css);
835
 
836
+ // Remove any empty CSS
837
+ $css = preg_replace('/[^{}]*\{\s*\}/m', '', $css);
838
+ $css = trim($css);
839
+ }
840
 
841
  return apply_filters( 'siteorigin_widgets_instance_css', $css, $instance, $this );
842
  }
1019
  * @deprecated Will be removed in version 2.0
1020
  */
1021
  function parse_markdown( $markdown ){
1022
+ if( !class_exists('Parsedown') ) include plugin_dir_path(__FILE__).'inc/Parsedown.php';
1023
+ $parser = new Parsedown();
1024
 
1025
+ return $parser->text($markdown);
1026
  }
1027
 
1028
  /**
icons/fontawesome/filter.php CHANGED
@@ -447,8 +447,9 @@ function siteorigin_widgets_icons_fontawesome_filter( $icons ){
447
  'photo' => '&#xf03e;',
448
  'picture-o' => '&#xf03e;',
449
  'pie-chart' => '&#xf200;',
450
- 'pied-piper' => '&#xf1a7;',
451
  'pied-piper-alt' => '&#xf1a8;',
 
452
  'pinterest' => '&#xf0d2;',
453
  'pinterest-p' => '&#xf231;',
454
  'pinterest-square' => '&#xf0d3;',
@@ -528,6 +529,9 @@ function siteorigin_widgets_icons_fontawesome_filter( $icons ){
528
  'sliders' => '&#xf1de;',
529
  'slideshare' => '&#xf1e7;',
530
  'smile-o' => '&#xf118;',
 
 
 
531
  'soccer-ball-o' => '&#xf1e3;',
532
  'sort' => '&#xf0dc;',
533
  'sort-alpha-asc' => '&#xf15d;',
@@ -678,4 +682,4 @@ function siteorigin_widgets_icons_fontawesome_filter( $icons ){
678
  'youtube-square' => '&#xf166;',
679
  ));
680
  }
681
- add_filter('siteorigin_widgets_icons_fontawesome', 'siteorigin_widgets_icons_fontawesome_filter');
447
  'photo' => '&#xf03e;',
448
  'picture-o' => '&#xf03e;',
449
  'pie-chart' => '&#xf200;',
450
+ 'pied-piper' => '&#xf2ae;',
451
  'pied-piper-alt' => '&#xf1a8;',
452
+ 'pied-piper-pp' => '&#xf1a7;',
453
  'pinterest' => '&#xf0d2;',
454
  'pinterest-p' => '&#xf231;',
455
  'pinterest-square' => '&#xf0d3;',
529
  'sliders' => '&#xf1de;',
530
  'slideshare' => '&#xf1e7;',
531
  'smile-o' => '&#xf118;',
532
+ 'snapchat' => '&#xf2ab;',
533
+ 'snapchat-ghost' => '&#xf2ac;',
534
+ 'snapchat-square' => '&#xf2ad;',
535
  'soccer-ball-o' => '&#xf1e3;',
536
  'sort' => '&#xf0dc;',
537
  'sort-alpha-asc' => '&#xf15d;',
682
  'youtube-square' => '&#xf166;',
683
  ));
684
  }
685
+ add_filter('siteorigin_widgets_icons_fontawesome', 'siteorigin_widgets_icons_fontawesome_filter');
icons/fontawesome/font/FontAwesome.otf CHANGED
Binary file
icons/fontawesome/font/fontawesome-webfont.eot CHANGED
Binary file
icons/fontawesome/font/fontawesome-webfont.svg CHANGED
@@ -1,6 +1,6 @@
1
  <?xml version="1.0" standalone="no"?>
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
- <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
4
  <metadata></metadata>
5
  <defs>
6
  <font id="fontawesomeregular" horiz-adv-x="1536" >
@@ -169,7 +169,7 @@
169
  <glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
170
  <glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
171
  <glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
172
- <glyph unicode="&#xf092;" d="M394 184q-8 -9 -20 3q-13 11 -4 19q8 9 20 -3q12 -11 4 -19zM352 245q9 -12 0 -19q-8 -6 -17 7t0 18q9 7 17 -6zM291 305q-5 -7 -13 -2q-10 5 -7 12q3 5 13 2q10 -5 7 -12zM322 271q-6 -7 -16 3q-9 11 -2 16q6 6 16 -3q9 -11 2 -16zM451 159q-4 -12 -19 -6q-17 4 -13 15 t19 7q16 -5 13 -16zM514 154q0 -11 -16 -11q-17 -2 -17 11q0 11 16 11q17 2 17 -11zM572 164q2 -10 -14 -14t-18 8t14 15q16 2 18 -9zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-224q-16 0 -24.5 1t-19.5 5t-16 14.5t-5 27.5v239q0 97 -52 142q57 6 102.5 18t94 39 t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103 q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -103t0.5 -68q0 -22 -11 -33.5t-22 -13t-33 -1.5 h-224q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
173
  <glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
174
  <glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
175
  <glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
@@ -178,7 +178,7 @@
178
  <glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
179
  <glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
180
  <glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
181
- <glyph unicode="&#xf09b;" d="M1536 640q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -39.5 7t-12.5 30v211q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 121 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-86 13.5 q-44 -113 -7 -204q-79 -85 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-40 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23 q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -89t0.5 -54q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
182
  <glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
183
  <glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
184
  <glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
@@ -219,8 +219,8 @@
219
  <glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
220
  <glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
221
  <glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
222
- <glyph unicode="&#xf0d4;" d="M829 318q0 -76 -58.5 -112.5t-139.5 -36.5q-41 0 -80.5 9.5t-75.5 28.5t-58 53t-22 78q0 46 25 80t65.5 51.5t82 25t84.5 7.5q20 0 31 -2q2 -1 23 -16.5t26 -19t23 -18t24.5 -22t19 -22.5t17 -26t9 -26.5t4.5 -31.5zM755 863q0 -60 -33 -99.5t-92 -39.5q-53 0 -93 42.5 t-57.5 96.5t-17.5 106q0 61 32 104t92 43q53 0 93.5 -45t58 -101t17.5 -107zM861 1120l88 64h-265q-85 0 -161 -32t-127.5 -98t-51.5 -153q0 -93 64.5 -154.5t158.5 -61.5q22 0 43 3q-13 -29 -13 -54q0 -44 40 -94q-175 -12 -257 -63q-47 -29 -75.5 -73t-28.5 -95 q0 -43 18.5 -77.5t48.5 -56.5t69 -37t77.5 -21t76.5 -6q60 0 120.5 15.5t113.5 46t86 82.5t33 117q0 49 -20 89.5t-49 66.5t-58 47.5t-49 44t-20 44.5t15.5 42.5t37.5 39.5t44 42t37.5 59.5t15.5 82.5q0 60 -22.5 99.5t-72.5 90.5h83zM1152 672h128v64h-128v128h-64v-128 h-128v-64h128v-160h64v160zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
223
- <glyph unicode="&#xf0d5;" horiz-adv-x="1664" d="M735 740q0 -36 32 -70.5t77.5 -68t90.5 -73.5t77 -104t32 -142q0 -90 -48 -173q-72 -122 -211 -179.5t-298 -57.5q-132 0 -246.5 41.5t-171.5 137.5q-37 60 -37 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 42 -47.5 74t-15.5 73q0 36 21 85q-46 -4 -68 -4 q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q77 66 182.5 98t217.5 32h418l-138 -88h-131q74 -63 112 -133t38 -160q0 -72 -24.5 -129.5t-59 -93t-69.5 -65t-59.5 -61.5t-24.5 -66zM589 836q38 0 78 16.5t66 43.5q53 57 53 159q0 58 -17 125t-48.5 129.5 t-84.5 103.5t-117 41q-42 0 -82.5 -19.5t-65.5 -52.5q-47 -59 -47 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26zM591 -37q58 0 111.5 13t99 39t73 73t27.5 109q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -48 2 q-53 0 -105 -7t-107.5 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -70 35 -123.5t91.5 -83t119 -44t127.5 -14.5zM1401 839h213v-108h-213v-219h-105v219h-212v108h212v217h105v-217z" />
224
  <glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
225
  <glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
226
  <glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
@@ -362,8 +362,8 @@
362
  <glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
363
  <glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
364
  <glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
365
- <glyph unicode="&#xf16c;" horiz-adv-x="1408" d="M928 135v-151l-707 -1v151zM1169 481v-701l-1 -35v-1h-1132l-35 1h-1v736h121v-618h928v618h120zM241 393l704 -65l-13 -150l-705 65zM309 709l683 -183l-39 -146l-683 183zM472 1058l609 -360l-77 -130l-609 360zM832 1389l398 -585l-124 -85l-399 584zM1285 1536 l121 -697l-149 -26l-121 697z" />
366
- <glyph unicode="&#xf16d;" d="M1362 110v648h-135q20 -63 20 -131q0 -126 -64 -232.5t-174 -168.5t-240 -62q-197 0 -337 135.5t-140 327.5q0 68 20 131h-141v-648q0 -26 17.5 -43.5t43.5 -17.5h1069q25 0 43 17.5t18 43.5zM1078 643q0 124 -90.5 211.5t-218.5 87.5q-127 0 -217.5 -87.5t-90.5 -211.5 t90.5 -211.5t217.5 -87.5q128 0 218.5 87.5t90.5 211.5zM1362 1003v165q0 28 -20 48.5t-49 20.5h-174q-29 0 -49 -20.5t-20 -48.5v-165q0 -29 20 -49t49 -20h174q29 0 49 20t20 49zM1536 1211v-1142q0 -81 -58 -139t-139 -58h-1142q-81 0 -139 58t-58 139v1142q0 81 58 139 t139 58h1142q81 0 139 -58t58 -139z" />
367
  <glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
368
  <glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
369
  <glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
@@ -410,7 +410,7 @@
410
  <glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
411
  <glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
412
  <glyph unicode="&#xf19e;" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
413
- <glyph unicode="&#xf1a0;" horiz-adv-x="1280" d="M981 197q0 25 -7 49t-14.5 42t-27 41.5t-29.5 35t-38.5 34.5t-36.5 29t-41.5 30t-36.5 26q-16 2 -49 2q-53 0 -104.5 -7t-107 -25t-97 -46t-68.5 -74.5t-27 -105.5q0 -56 23.5 -102t61 -75.5t87 -50t100 -29t101.5 -8.5q58 0 111.5 13t99 39t73 73t27.5 109zM864 1055 q0 59 -17 125.5t-48 129t-84 103.5t-117 41q-42 0 -82.5 -19.5t-66.5 -52.5q-46 -59 -46 -160q0 -46 10 -97.5t31.5 -103t52 -92.5t75 -67t96.5 -26q37 0 77.5 16.5t65.5 43.5q53 56 53 159zM752 1536h417l-137 -88h-132q75 -63 113 -133t38 -160q0 -72 -24.5 -129.5 t-59.5 -93t-69.5 -65t-59 -61.5t-24.5 -66q0 -36 32 -70.5t77 -68t90.5 -73.5t77.5 -104t32 -142q0 -91 -49 -173q-71 -122 -209.5 -179.5t-298.5 -57.5q-132 0 -246.5 41.5t-172.5 137.5q-36 59 -36 131q0 81 44.5 150t118.5 115q131 82 404 100q-32 41 -47.5 73.5 t-15.5 73.5q0 40 21 85q-46 -4 -68 -4q-148 0 -249.5 96.5t-101.5 244.5q0 82 36 159t99 131q76 66 182 98t218 32z" />
414
  <glyph unicode="&#xf1a1;" horiz-adv-x="1792" d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 t348 71t348 -71t286 -191t191 -286t71 -348z" />
415
  <glyph unicode="&#xf1a2;" d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
416
  <glyph unicode="&#xf1a3;" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
@@ -454,7 +454,7 @@
454
  <glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
455
  <glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
456
  <glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
457
- <glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348q0 222 101 414.5t276.5 317t390.5 155.5v-260q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5 q0 230 -145.5 406t-366.5 221v260q215 -31 390.5 -155.5t276.5 -317t101 -414.5z" />
458
  <glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
459
  <glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
460
  <glyph unicode="&#xf1d2;" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
@@ -484,7 +484,7 @@
484
  <glyph unicode="&#xf1eb;" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
485
  <glyph unicode="&#xf1ec;" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
486
  <glyph unicode="&#xf1ed;" d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246 q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598 q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
487
- <glyph unicode="&#xf1ee;" horiz-adv-x="1792" d="M602 949q19 -61 31 -123.5t17 -141.5t-14 -159t-62 -145q-21 81 -67 157t-95.5 127t-99 90.5t-78.5 57.5t-33 19q-62 34 -81.5 100t14.5 128t101 81.5t129 -14.5q138 -83 238 -177zM927 1236q11 -25 20.5 -46t36.5 -100.5t42.5 -150.5t25.5 -179.5t0 -205.5t-47.5 -209.5 t-105.5 -208.5q-51 -72 -138 -72q-54 0 -98 31q-57 40 -69 109t28 127q60 85 81 195t13 199.5t-32 180.5t-39 128t-22 52q-31 63 -8.5 129.5t85.5 97.5q34 17 75 17q47 0 88.5 -25t63.5 -69zM1248 567q-17 -160 -72 -311q-17 131 -63 246q25 174 -5 361q-27 178 -94 342 q114 -90 212 -211q9 -37 15 -80q26 -179 7 -347zM1520 1440q9 -17 23.5 -49.5t43.5 -117.5t50.5 -178t34 -227.5t5 -269t-47 -300t-112.5 -323.5q-22 -48 -66 -75.5t-95 -27.5q-39 0 -74 16q-67 31 -92.5 100t4.5 136q58 126 90 257.5t37.5 239.5t-3.5 213.5t-26.5 180.5 t-38.5 138.5t-32.5 90t-15.5 32.5q-34 65 -11.5 135.5t87.5 104.5q37 20 81 20q49 0 91.5 -25.5t66.5 -70.5z" />
488
  <glyph unicode="&#xf1f0;" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
489
  <glyph unicode="&#xf1f1;" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
490
  <glyph unicode="&#xf1f2;" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
@@ -555,7 +555,7 @@
555
  <glyph unicode="&#xf237;" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
556
  <glyph unicode="&#xf238;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
557
  <glyph unicode="&#xf239;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
558
- <glyph unicode="&#xf23a;" horiz-adv-x="1792" d="M1792 204v-209h-642v209h134v926h-6l-314 -1135h-243l-310 1135h-8v-926h135v-209h-538v209h69q21 0 43 19.5t22 37.5v881q0 18 -22 40t-43 22h-69v209h672l221 -821h6l223 821h670v-209h-71q-19 0 -41 -22t-22 -40v-881q0 -18 21.5 -37.5t41.5 -19.5h71z" />
559
  <glyph unicode="&#xf23b;" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
560
  <glyph unicode="&#xf23c;" horiz-adv-x="2296" d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 4 5 8q16 18 60 23h13q5 18 19 30t33 8 t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-106 2 -211 0v1q-1 -27 2.5 -86 t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34l3 9v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4l-10 -2.5t-12 -2 l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-2 0 -3 -0.5t-3 -0.5h-3q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130t-73 70 q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -2 -1 -5t-1 -4q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
561
  <glyph unicode="&#xf23d;" horiz-adv-x="2304" d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
@@ -600,11 +600,11 @@
600
  <glyph unicode="&#xf267;" horiz-adv-x="1792" d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 t191 -286t71 -348z" />
601
  <glyph unicode="&#xf268;" horiz-adv-x="1792" d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
602
  <glyph unicode="&#xf269;" horiz-adv-x="1792" d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
603
- <glyph unicode="&#xf26a;" d="M768 -92q77 0 139.5 63t100.5 166t59 234.5t21 268.5t-21 268.5t-59 234.5t-100.5 166t-139.5 63t-139.5 -63t-100.5 -166t-59 -234.5t-21 -268.5t21 -268.5t59 -234.5t100.5 -166t139.5 -63zM768 -256q-184 0 -333 77t-240 203t-141 287t-50 329t50 329t141 287t240 203 t333 77q148 0 274 -50t214.5 -136t151.5 -201t92.5 -244t29.5 -265t-29.5 -265t-92.5 -244t-151.5 -201t-214.5 -136t-274 -50z" />
604
- <glyph unicode="&#xf26b;" horiz-adv-x="1792" d="M716 -69q-143 35 -261.5 114t-197.5 191q-139 -300 -17 -398q26 -21 85 -24.5t127.5 9.5t141 41.5t122.5 66.5zM693 762h452q0 108 -61.5 169t-168.5 61q-103 0 -162.5 -62.5t-59.5 -167.5zM1724 1137h-34q26 102 22.5 170t-25 110t-63.5 57t-93.5 11t-115 -26.5 t-128.5 -56.5t-134 -79q129 -37 238.5 -113.5t185 -179t110 -231.5t15.5 -262h-1005q0 -60 10 -106t34 -85t69.5 -60t112.5 -21q87 0 142.5 44t72.5 122h540q-71 -230 -281.5 -377t-477.5 -147q-83 0 -159 15q-35 -40 -151 -94t-248 -78t-219 35q-78 60 -100 159t7 214 t88 242t143.5 248t173.5 226.5t177.5 183.5t156.5 112v24q-120 -37 -258.5 -137.5t-240.5 -207t-159 -195.5q4 106 34 201t80 169t118 135.5t147.5 100.5t168 65.5t180.5 29.5t185 -8q310 186 503 189h7q57 0 103 -18q80 -30 98 -132.5t-30 -248.5z" />
605
  <glyph unicode="&#xf26c;" horiz-adv-x="2048" d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
606
  <glyph unicode="&#xf26d;" horiz-adv-x="1792" d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 q-68 175 -180 287z" />
607
- <glyph unicode="&#xf26e;" horiz-adv-x="2304" d="M1391 390v0l-1 1q-15 18 -34.5 37.5t-62.5 57.5t-93.5 62t-95.5 24q-48 0 -83 -21.5t-51 -54t-23 -59t-7 -47.5v0v0q0 -21 7 -48t23 -59t51 -53.5t83 -21.5q45 0 95.5 24t94 62.5t62 57t34.5 37.5zM2103 390q0 21 -7 47.5t-23 59t-51 54t-83 21.5q-45 0 -95.5 -24 t-94 -62.5t-62 -57t-34.5 -37.5l-1 -1v0v0l1 -1q15 -18 34.5 -37.5t62.5 -57.5t93.5 -62t95.5 -24q48 0 83 21.5t51 53.5t23 59t7 48zM2304 393q0 -69 -24 -137.5t-68 -126t-116 -93.5t-159 -36q-68 0 -134 24t-113.5 58.5t-84.5 69.5t-59.5 59t-25.5 24t-22.5 -24 t-54.5 -58.5t-81.5 -69.5t-115 -59t-143.5 -24q-65 0 -123.5 22.5t-96.5 54t-66.5 66.5t-41 59.5t-12.5 32.5q0 -8 -8.5 -26.5t-25 -45.5t-47 -55t-69 -52.5t-96.5 -40t-125 -15.5q-71 0 -130 15.5t-98.5 39.5t-70.5 56.5t-48 63.5t-27.5 63.5t-14 54t-3.5 36.5h217 q0 -55 49 -107.5t126 -52.5q79 0 134.5 67t55.5 148q0 80 -52 136.5t-138 56.5q-5 0 -13 -0.5t-31 -5t-43 -12t-42 -24.5t-34 -40h-195l102 583h602v-174h-445q-27 -159 -41 -248q4 0 16.5 13t31.5 28.5t65 28.5t108 13t114 -20.5t82.5 -49.5t51.5 -58.5t31 -50t11 -20.5 t13 25t36.5 60.5t60.5 71.5t97 61t133 25t140.5 -25t115.5 -60.5t83.5 -71.5t56.5 -61t21 -25q2 0 22 25t56 60.5t83.5 71.5t115.5 61t140 25q92 0 164.5 -35t115.5 -93t65 -125t22 -137z" />
608
  <glyph unicode="&#xf270;" horiz-adv-x="1792" d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
609
  <glyph unicode="&#xf271;" horiz-adv-x="1792" d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
610
  <glyph unicode="&#xf272;" horiz-adv-x="1792" d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h128q52 0 90 -38t38 -90z" />
@@ -621,20 +621,65 @@
621
  <glyph unicode="&#xf27d;" horiz-adv-x="1792" d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
622
  <glyph unicode="&#xf27e;" d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
623
  <glyph unicode="&#xf280;" d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
624
- <glyph unicode="&#xf281;" horiz-adv-x="1792" />
625
- <glyph unicode="&#xf282;" horiz-adv-x="1792" />
626
- <glyph unicode="&#xf283;" horiz-adv-x="1792" />
627
- <glyph unicode="&#xf284;" horiz-adv-x="1792" />
628
- <glyph unicode="&#xf285;" horiz-adv-x="1792" />
629
- <glyph unicode="&#xf286;" horiz-adv-x="1792" />
630
- <glyph unicode="&#xf287;" horiz-adv-x="1792" />
631
- <glyph unicode="&#xf288;" horiz-adv-x="1792" />
632
- <glyph unicode="&#xf289;" horiz-adv-x="1792" />
633
- <glyph unicode="&#xf28a;" horiz-adv-x="1792" />
634
- <glyph unicode="&#xf28b;" horiz-adv-x="1792" />
635
- <glyph unicode="&#xf28c;" horiz-adv-x="1792" />
636
- <glyph unicode="&#xf28d;" horiz-adv-x="1792" />
637
- <glyph unicode="&#xf28e;" horiz-adv-x="1792" />
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
638
  <glyph unicode="&#xf500;" horiz-adv-x="1792" />
639
  </font>
640
  </defs></svg>
1
  <?xml version="1.0" standalone="no"?>
2
  <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
3
+ <svg xmlns="http://www.w3.org/2000/svg">
4
  <metadata></metadata>
5
  <defs>
6
  <font id="fontawesomeregular" horiz-adv-x="1536" >
169
  <glyph unicode="&#xf08e;" horiz-adv-x="1792" d="M1408 608v-320q0 -119 -84.5 -203.5t-203.5 -84.5h-832q-119 0 -203.5 84.5t-84.5 203.5v832q0 119 84.5 203.5t203.5 84.5h704q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-704q-66 0 -113 -47t-47 -113v-832q0 -66 47 -113t113 -47h832q66 0 113 47t47 113v320 q0 14 9 23t23 9h64q14 0 23 -9t9 -23zM1792 1472v-512q0 -26 -19 -45t-45 -19t-45 19l-176 176l-652 -652q-10 -10 -23 -10t-23 10l-114 114q-10 10 -10 23t10 23l652 652l-176 176q-19 19 -19 45t19 45t45 19h512q26 0 45 -19t19 -45z" />
170
  <glyph unicode="&#xf090;" d="M1184 640q0 -26 -19 -45l-544 -544q-19 -19 -45 -19t-45 19t-19 45v288h-448q-26 0 -45 19t-19 45v384q0 26 19 45t45 19h448v288q0 26 19 45t45 19t45 -19l544 -544q19 -19 19 -45zM1536 992v-704q0 -119 -84.5 -203.5t-203.5 -84.5h-320q-13 0 -22.5 9.5t-9.5 22.5 q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q66 0 113 47t47 113v704q0 66 -47 113t-113 47h-288h-11h-13t-11.5 1t-11.5 3t-8 5.5t-7 9t-2 13.5q0 4 -1 20t-0.5 26.5t3 23.5t10 19.5t20.5 6.5h320q119 0 203.5 -84.5t84.5 -203.5z" />
171
  <glyph unicode="&#xf091;" horiz-adv-x="1664" d="M458 653q-74 162 -74 371h-256v-96q0 -78 94.5 -162t235.5 -113zM1536 928v96h-256q0 -209 -74 -371q141 29 235.5 113t94.5 162zM1664 1056v-128q0 -71 -41.5 -143t-112 -130t-173 -97.5t-215.5 -44.5q-42 -54 -95 -95q-38 -34 -52.5 -72.5t-14.5 -89.5q0 -54 30.5 -91 t97.5 -37q75 0 133.5 -45.5t58.5 -114.5v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23v64q0 69 58.5 114.5t133.5 45.5q67 0 97.5 37t30.5 91q0 51 -14.5 89.5t-52.5 72.5q-53 41 -95 95q-113 5 -215.5 44.5t-173 97.5t-112 130t-41.5 143v128q0 40 28 68t68 28h288v96 q0 66 47 113t113 47h576q66 0 113 -47t47 -113v-96h288q40 0 68 -28t28 -68z" />
172
+ <glyph unicode="&#xf092;" d="M519 336q4 6 -3 13q-9 7 -14 2q-4 -6 3 -13q9 -7 14 -2zM491 377q-5 7 -12 4q-6 -4 0 -12q7 -8 12 -5q6 4 0 13zM450 417q2 4 -5 8q-7 2 -8 -2q-3 -5 4 -8q8 -2 9 2zM471 394q2 1 1.5 4.5t-3.5 5.5q-6 7 -10 3t1 -11q6 -6 11 -2zM557 319q2 7 -9 11q-9 3 -13 -4 q-2 -7 9 -11q9 -3 13 4zM599 316q0 8 -12 8q-10 0 -10 -8t11 -8t11 8zM638 323q-2 7 -13 5t-9 -9q2 -8 12 -6t10 10zM1280 640q0 212 -150 362t-362 150t-362 -150t-150 -362q0 -167 98 -300.5t252 -185.5q18 -3 26.5 5t8.5 20q0 52 -1 95q-6 -1 -15.5 -2.5t-35.5 -2t-48 4 t-43.5 20t-29.5 41.5q-23 59 -57 74q-2 1 -4.5 3.5l-8 8t-7 9.5t4 7.5t19.5 3.5q6 0 15 -2t30 -15.5t33 -35.5q16 -28 37.5 -42t43.5 -14t38 3.5t30 9.5q7 47 33 69q-49 6 -86 18.5t-73 39t-55.5 76t-19.5 119.5q0 79 53 137q-24 62 5 136q19 6 54.5 -7.5t60.5 -29.5l26 -16 q58 17 128 17t128 -17q11 7 28.5 18t55.5 26t57 9q29 -74 5 -136q53 -58 53 -137q0 -57 -14 -100.5t-35.5 -70t-53.5 -44.5t-62.5 -26t-68.5 -12q35 -31 35 -95q0 -40 -0.5 -89t-0.5 -51q0 -12 8.5 -20t26.5 -5q154 52 252 185.5t98 300.5zM1536 1120v-960 q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
173
  <glyph unicode="&#xf093;" horiz-adv-x="1664" d="M1280 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1536 64q0 26 -19 45t-45 19t-45 -19t-19 -45t19 -45t45 -19t45 19t19 45zM1664 288v-320q0 -40 -28 -68t-68 -28h-1472q-40 0 -68 28t-28 68v320q0 40 28 68t68 28h427q21 -56 70.5 -92 t110.5 -36h256q61 0 110.5 36t70.5 92h427q40 0 68 -28t28 -68zM1339 936q-17 -40 -59 -40h-256v-448q0 -26 -19 -45t-45 -19h-256q-26 0 -45 19t-19 45v448h-256q-42 0 -59 40q-17 39 14 69l448 448q18 19 45 19t45 -19l448 -448q31 -30 14 -69z" />
174
  <glyph unicode="&#xf094;" d="M1407 710q0 44 -7 113.5t-18 96.5q-12 30 -17 44t-9 36.5t-4 48.5q0 23 5 68.5t5 67.5q0 37 -10 55q-4 1 -13 1q-19 0 -58 -4.5t-59 -4.5q-60 0 -176 24t-175 24q-43 0 -94.5 -11.5t-85 -23.5t-89.5 -34q-137 -54 -202 -103q-96 -73 -159.5 -189.5t-88 -236t-24.5 -248.5 q0 -40 12.5 -120t12.5 -121q0 -23 -11 -66.5t-11 -65.5t12 -36.5t34 -14.5q24 0 72.5 11t73.5 11q57 0 169.5 -15.5t169.5 -15.5q181 0 284 36q129 45 235.5 152.5t166 245.5t59.5 275zM1535 712q0 -165 -70 -327.5t-196 -288t-281 -180.5q-124 -44 -326 -44 q-57 0 -170 14.5t-169 14.5q-24 0 -72.5 -14.5t-73.5 -14.5q-73 0 -123.5 55.5t-50.5 128.5q0 24 11 68t11 67q0 40 -12.5 120.5t-12.5 121.5q0 111 18 217.5t54.5 209.5t100.5 194t150 156q78 59 232 120q194 78 316 78q60 0 175.5 -24t173.5 -24q19 0 57 5t58 5 q81 0 118 -50.5t37 -134.5q0 -23 -5 -68t-5 -68q0 -10 1 -18.5t3 -17t4 -13.5t6.5 -16t6.5 -17q16 -40 25 -118.5t9 -136.5z" />
175
  <glyph unicode="&#xf095;" horiz-adv-x="1408" d="M1408 296q0 -27 -10 -70.5t-21 -68.5q-21 -50 -122 -106q-94 -51 -186 -51q-27 0 -52.5 3.5t-57.5 12.5t-47.5 14.5t-55.5 20.5t-49 18q-98 35 -175 83q-128 79 -264.5 215.5t-215.5 264.5q-48 77 -83 175q-3 9 -18 49t-20.5 55.5t-14.5 47.5t-12.5 57.5t-3.5 52.5 q0 92 51 186q56 101 106 122q25 11 68.5 21t70.5 10q14 0 21 -3q18 -6 53 -76q11 -19 30 -54t35 -63.5t31 -53.5q3 -4 17.5 -25t21.5 -35.5t7 -28.5q0 -20 -28.5 -50t-62 -55t-62 -53t-28.5 -46q0 -9 5 -22.5t8.5 -20.5t14 -24t11.5 -19q76 -137 174 -235t235 -174 q2 -1 19 -11.5t24 -14t20.5 -8.5t22.5 -5q18 0 46 28.5t53 62t55 62t50 28.5q14 0 28.5 -7t35.5 -21.5t25 -17.5q25 -15 53.5 -31t63.5 -35t54 -30q70 -35 76 -53q3 -7 3 -21z" />
178
  <glyph unicode="&#xf098;" d="M1280 343q0 11 -2 16q-3 8 -38.5 29.5t-88.5 49.5l-53 29q-5 3 -19 13t-25 15t-21 5q-18 0 -47 -32.5t-57 -65.5t-44 -33q-7 0 -16.5 3.5t-15.5 6.5t-17 9.5t-14 8.5q-99 55 -170.5 126.5t-126.5 170.5q-2 3 -8.5 14t-9.5 17t-6.5 15.5t-3.5 16.5q0 13 20.5 33.5t45 38.5 t45 39.5t20.5 36.5q0 10 -5 21t-15 25t-13 19q-3 6 -15 28.5t-25 45.5t-26.5 47.5t-25 40.5t-16.5 18t-16 2q-48 0 -101 -22q-46 -21 -80 -94.5t-34 -130.5q0 -16 2.5 -34t5 -30.5t9 -33t10 -29.5t12.5 -33t11 -30q60 -164 216.5 -320.5t320.5 -216.5q6 -2 30 -11t33 -12.5 t29.5 -10t33 -9t30.5 -5t34 -2.5q57 0 130.5 34t94.5 80q22 53 22 101zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
179
  <glyph unicode="&#xf099;" horiz-adv-x="1664" d="M1620 1128q-67 -98 -162 -167q1 -14 1 -42q0 -130 -38 -259.5t-115.5 -248.5t-184.5 -210.5t-258 -146t-323 -54.5q-271 0 -496 145q35 -4 78 -4q225 0 401 138q-105 2 -188 64.5t-114 159.5q33 -5 61 -5q43 0 85 11q-112 23 -185.5 111.5t-73.5 205.5v4q68 -38 146 -41 q-66 44 -105 115t-39 154q0 88 44 163q121 -149 294.5 -238.5t371.5 -99.5q-8 38 -8 74q0 134 94.5 228.5t228.5 94.5q140 0 236 -102q109 21 205 78q-37 -115 -142 -178q93 10 186 50z" />
180
  <glyph unicode="&#xf09a;" horiz-adv-x="1024" d="M959 1524v-264h-157q-86 0 -116 -36t-30 -108v-189h293l-39 -296h-254v-759h-306v759h-255v296h255v218q0 186 104 288.5t277 102.5q147 0 228 -12z" />
181
+ <glyph unicode="&#xf09b;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5q0 -251 -146.5 -451.5t-378.5 -277.5q-27 -5 -40 7t-13 30q0 3 0.5 76.5t0.5 134.5q0 97 -52 142q57 6 102.5 18t94 39t81 66.5t53 105t20.5 150.5q0 119 -79 206q37 91 -8 204q-28 9 -81 -11t-92 -44l-38 -24 q-93 26 -192 26t-192 -26q-16 11 -42.5 27t-83.5 38.5t-85 13.5q-45 -113 -8 -204q-79 -87 -79 -206q0 -85 20.5 -150t52.5 -105t80.5 -67t94 -39t102.5 -18q-39 -36 -49 -103q-21 -10 -45 -15t-57 -5t-65.5 21.5t-55.5 62.5q-19 32 -48.5 52t-49.5 24l-20 3q-21 0 -29 -4.5 t-5 -11.5t9 -14t13 -12l7 -5q22 -10 43.5 -38t31.5 -51l10 -23q13 -38 44 -61.5t67 -30t69.5 -7t55.5 3.5l23 4q0 -38 0.5 -88.5t0.5 -54.5q0 -18 -13 -30t-40 -7q-232 77 -378.5 277.5t-146.5 451.5q0 209 103 385.5t279.5 279.5t385.5 103zM291 305q3 7 -7 12 q-10 3 -13 -2q-3 -7 7 -12q9 -6 13 2zM322 271q7 5 -2 16q-10 9 -16 3q-7 -5 2 -16q10 -10 16 -3zM352 226q9 7 0 19q-8 13 -17 6q-9 -5 0 -18t17 -7zM394 184q8 8 -4 19q-12 12 -20 3q-9 -8 4 -19q12 -12 20 -3zM451 159q3 11 -13 16q-15 4 -19 -7t13 -15q15 -6 19 6z M514 154q0 13 -17 11q-16 0 -16 -11q0 -13 17 -11q16 0 16 11zM572 164q-2 11 -18 9q-16 -3 -14 -15t18 -8t14 14z" />
182
  <glyph unicode="&#xf09c;" horiz-adv-x="1664" d="M1664 960v-256q0 -26 -19 -45t-45 -19h-64q-26 0 -45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-192h96q40 0 68 -28t28 -68v-576q0 -40 -28 -68t-68 -28h-960q-40 0 -68 28t-28 68v576q0 40 28 68t68 28h672v192q0 185 131.5 316.5t316.5 131.5 t316.5 -131.5t131.5 -316.5z" />
183
  <glyph unicode="&#xf09d;" horiz-adv-x="1920" d="M1760 1408q66 0 113 -47t47 -113v-1216q0 -66 -47 -113t-113 -47h-1600q-66 0 -113 47t-47 113v1216q0 66 47 113t113 47h1600zM160 1280q-13 0 -22.5 -9.5t-9.5 -22.5v-224h1664v224q0 13 -9.5 22.5t-22.5 9.5h-1600zM1760 0q13 0 22.5 9.5t9.5 22.5v608h-1664v-608 q0 -13 9.5 -22.5t22.5 -9.5h1600zM256 128v128h256v-128h-256zM640 128v128h384v-128h-384z" />
184
  <glyph unicode="&#xf09e;" horiz-adv-x="1408" d="M384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 69q2 -28 -17 -48q-18 -21 -47 -21h-135q-25 0 -43 16.5t-20 41.5q-22 229 -184.5 391.5t-391.5 184.5q-25 2 -41.5 20t-16.5 43v135q0 29 21 47q17 17 43 17h5q160 -13 306 -80.5 t259 -181.5q114 -113 181.5 -259t80.5 -306zM1408 67q2 -27 -18 -47q-18 -20 -46 -20h-143q-26 0 -44.5 17.5t-19.5 42.5q-12 215 -101 408.5t-231.5 336t-336 231.5t-408.5 102q-25 1 -42.5 19.5t-17.5 43.5v143q0 28 20 46q18 18 44 18h3q262 -13 501.5 -120t425.5 -294 q187 -186 294 -425.5t120 -501.5z" />
219
  <glyph unicode="&#xf0d1;" horiz-adv-x="1792" d="M640 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM256 640h384v256h-158q-13 0 -22 -9l-195 -195q-9 -9 -9 -22v-30zM1536 128q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1792 1216v-1024q0 -15 -4 -26.5t-13.5 -18.5 t-16.5 -11.5t-23.5 -6t-22.5 -2t-25.5 0t-22.5 0.5q0 -106 -75 -181t-181 -75t-181 75t-75 181h-384q0 -106 -75 -181t-181 -75t-181 75t-75 181h-64q-3 0 -22.5 -0.5t-25.5 0t-22.5 2t-23.5 6t-16.5 11.5t-13.5 18.5t-4 26.5q0 26 19 45t45 19v320q0 8 -0.5 35t0 38 t2.5 34.5t6.5 37t14 30.5t22.5 30l198 198q19 19 50.5 32t58.5 13h160v192q0 26 19 45t45 19h1024q26 0 45 -19t19 -45z" />
220
  <glyph unicode="&#xf0d2;" d="M1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103q-111 0 -218 32q59 93 78 164q9 34 54 211q20 -39 73 -67.5t114 -28.5q121 0 216 68.5t147 188.5t52 270q0 114 -59.5 214t-172.5 163t-255 63q-105 0 -196 -29t-154.5 -77t-109 -110.5t-67 -129.5t-21.5 -134 q0 -104 40 -183t117 -111q30 -12 38 20q2 7 8 31t8 30q6 23 -11 43q-51 61 -51 151q0 151 104.5 259.5t273.5 108.5q151 0 235.5 -82t84.5 -213q0 -170 -68.5 -289t-175.5 -119q-61 0 -98 43.5t-23 104.5q8 35 26.5 93.5t30 103t11.5 75.5q0 50 -27 83t-77 33 q-62 0 -105 -57t-43 -142q0 -73 25 -122l-99 -418q-17 -70 -13 -177q-206 91 -333 281t-127 423q0 209 103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
221
  <glyph unicode="&#xf0d3;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-725q85 122 108 210q9 34 53 209q21 -39 73.5 -67t112.5 -28q181 0 295.5 147.5t114.5 373.5q0 84 -35 162.5t-96.5 139t-152.5 97t-197 36.5q-104 0 -194.5 -28.5t-153 -76.5 t-107.5 -109.5t-66.5 -128t-21.5 -132.5q0 -102 39.5 -180t116.5 -110q13 -5 23.5 0t14.5 19q10 44 15 61q6 23 -11 42q-50 62 -50 150q0 150 103.5 256.5t270.5 106.5q149 0 232.5 -81t83.5 -210q0 -168 -67.5 -286t-173.5 -118q-60 0 -97 43.5t-23 103.5q8 34 26.5 92.5 t29.5 102t11 74.5q0 49 -26.5 81.5t-75.5 32.5q-61 0 -103.5 -56.5t-42.5 -139.5q0 -72 24 -121l-98 -414q-24 -100 -7 -254h-183q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960z" />
222
+ <glyph unicode="&#xf0d4;" d="M917 631q0 26 -6 64h-362v-132h217q-3 -24 -16.5 -50t-37.5 -53t-66.5 -44.5t-96.5 -17.5q-99 0 -169 71t-70 171t70 171t169 71q92 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585 h109v110h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
223
+ <glyph unicode="&#xf0d5;" horiz-adv-x="2304" d="M1437 623q0 -208 -87 -370.5t-248 -254t-369 -91.5q-149 0 -285 58t-234 156t-156 234t-58 285t58 285t156 234t234 156t285 58q286 0 491 -192l-199 -191q-117 113 -292 113q-123 0 -227.5 -62t-165.5 -168.5t-61 -232.5t61 -232.5t165.5 -168.5t227.5 -62 q83 0 152.5 23t114.5 57.5t78.5 78.5t49 83t21.5 74h-416v252h692q12 -63 12 -122zM2304 745v-210h-209v-209h-210v209h-209v210h209v209h210v-209h209z" />
224
  <glyph unicode="&#xf0d6;" horiz-adv-x="1920" d="M768 384h384v96h-128v448h-114l-148 -137l77 -80q42 37 55 57h2v-288h-128v-96zM1280 640q0 -70 -21 -142t-59.5 -134t-101.5 -101t-138 -39t-138 39t-101.5 101t-59.5 134t-21 142t21 142t59.5 134t101.5 101t138 39t138 -39t101.5 -101t59.5 -134t21 -142zM1792 384 v512q-106 0 -181 75t-75 181h-1152q0 -106 -75 -181t-181 -75v-512q106 0 181 -75t75 -181h1152q0 106 75 181t181 75zM1920 1216v-1152q0 -26 -19 -45t-45 -19h-1792q-26 0 -45 19t-19 45v1152q0 26 19 45t45 19h1792q26 0 45 -19t19 -45z" />
225
  <glyph unicode="&#xf0d7;" horiz-adv-x="1024" d="M1024 832q0 -26 -19 -45l-448 -448q-19 -19 -45 -19t-45 19l-448 448q-19 19 -19 45t19 45t45 19h896q26 0 45 -19t19 -45z" />
226
  <glyph unicode="&#xf0d8;" horiz-adv-x="1024" d="M1024 320q0 -26 -19 -45t-45 -19h-896q-26 0 -45 19t-19 45t19 45l448 448q19 19 45 19t45 -19l448 -448q19 -19 19 -45z" />
362
  <glyph unicode="&#xf169;" d="M685 771q0 1 -126 222q-21 34 -52 34h-184q-18 0 -26 -11q-7 -12 1 -29l125 -216v-1l-196 -346q-9 -14 0 -28q8 -13 24 -13h185q31 0 50 36zM1309 1268q-7 12 -24 12h-187q-30 0 -49 -35l-411 -729q1 -2 262 -481q20 -35 52 -35h184q18 0 25 12q8 13 -1 28l-260 476v1 l409 723q8 16 0 28zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
363
  <glyph unicode="&#xf16a;" horiz-adv-x="1792" d="M1280 640q0 37 -30 54l-512 320q-31 20 -65 2q-33 -18 -33 -56v-640q0 -38 33 -56q16 -8 31 -8q20 0 34 10l512 320q30 17 30 54zM1792 640q0 -96 -1 -150t-8.5 -136.5t-22.5 -147.5q-16 -73 -69 -123t-124 -58q-222 -25 -671 -25t-671 25q-71 8 -124.5 58t-69.5 123 q-14 65 -21.5 147.5t-8.5 136.5t-1 150t1 150t8.5 136.5t22.5 147.5q16 73 69 123t124 58q222 25 671 25t671 -25q71 -8 124.5 -58t69.5 -123q14 -65 21.5 -147.5t8.5 -136.5t1 -150z" />
364
  <glyph unicode="&#xf16b;" horiz-adv-x="1792" d="M402 829l494 -305l-342 -285l-490 319zM1388 274v-108l-490 -293v-1l-1 1l-1 -1v1l-489 293v108l147 -96l342 284v2l1 -1l1 1v-2l343 -284zM554 1418l342 -285l-494 -304l-338 270zM1390 829l338 -271l-489 -319l-343 285zM1239 1418l489 -319l-338 -270l-494 304z" />
365
+ <glyph unicode="&#xf16c;" d="M1289 -96h-1118v480h-160v-640h1438v640h-160v-480zM347 428l33 157l783 -165l-33 -156zM450 802l67 146l725 -339l-67 -145zM651 1158l102 123l614 -513l-102 -123zM1048 1536l477 -641l-128 -96l-477 641zM330 65v159h800v-159h-800z" />
366
+ <glyph unicode="&#xf16d;" d="M1024 640q0 106 -75 181t-181 75t-181 -75t-75 -181t75 -181t181 -75t181 75t75 181zM1162 640q0 -164 -115 -279t-279 -115t-279 115t-115 279t115 279t279 115t279 -115t115 -279zM1270 1050q0 -38 -27 -65t-65 -27t-65 27t-27 65t27 65t65 27t65 -27t27 -65zM768 1270 q-7 0 -76.5 0.5t-105.5 0t-96.5 -3t-103 -10t-71.5 -18.5q-50 -20 -88 -58t-58 -88q-11 -29 -18.5 -71.5t-10 -103t-3 -96.5t0 -105.5t0.5 -76.5t-0.5 -76.5t0 -105.5t3 -96.5t10 -103t18.5 -71.5q20 -50 58 -88t88 -58q29 -11 71.5 -18.5t103 -10t96.5 -3t105.5 0t76.5 0.5 t76.5 -0.5t105.5 0t96.5 3t103 10t71.5 18.5q50 20 88 58t58 88q11 29 18.5 71.5t10 103t3 96.5t0 105.5t-0.5 76.5t0.5 76.5t0 105.5t-3 96.5t-10 103t-18.5 71.5q-20 50 -58 88t-88 58q-29 11 -71.5 18.5t-103 10t-96.5 3t-105.5 0t-76.5 -0.5zM1536 640q0 -229 -5 -317 q-10 -208 -124 -322t-322 -124q-88 -5 -317 -5t-317 5q-208 10 -322 124t-124 322q-5 88 -5 317t5 317q10 208 124 322t322 124q88 5 317 5t317 -5q208 -10 322 -124t124 -322q5 -88 5 -317z" />
367
  <glyph unicode="&#xf16e;" d="M1248 1408q119 0 203.5 -84.5t84.5 -203.5v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960zM698 640q0 88 -62 150t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150zM1262 640q0 88 -62 150 t-150 62t-150 -62t-62 -150t62 -150t150 -62t150 62t62 150z" />
368
  <glyph unicode="&#xf170;" d="M768 914l201 -306h-402zM1133 384h94l-459 691l-459 -691h94l104 160h522zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
369
  <glyph unicode="&#xf171;" horiz-adv-x="1408" d="M815 677q8 -63 -50.5 -101t-111.5 -6q-39 17 -53.5 58t-0.5 82t52 58q36 18 72.5 12t64 -35.5t27.5 -67.5zM926 698q-14 107 -113 164t-197 13q-63 -28 -100.5 -88.5t-34.5 -129.5q4 -91 77.5 -155t165.5 -56q91 8 152 84t50 168zM1165 1240q-20 27 -56 44.5t-58 22 t-71 12.5q-291 47 -566 -2q-43 -7 -66 -12t-55 -22t-50 -43q30 -28 76 -45.5t73.5 -22t87.5 -11.5q228 -29 448 -1q63 8 89.5 12t72.5 21.5t75 46.5zM1222 205q-8 -26 -15.5 -76.5t-14 -84t-28.5 -70t-58 -56.5q-86 -48 -189.5 -71.5t-202 -22t-201.5 18.5q-46 8 -81.5 18 t-76.5 27t-73 43.5t-52 61.5q-25 96 -57 292l6 16l18 9q223 -148 506.5 -148t507.5 148q21 -6 24 -23t-5 -45t-8 -37zM1403 1166q-26 -167 -111 -655q-5 -30 -27 -56t-43.5 -40t-54.5 -31q-252 -126 -610 -88q-248 27 -394 139q-15 12 -25.5 26.5t-17 35t-9 34t-6 39.5 t-5.5 35q-9 50 -26.5 150t-28 161.5t-23.5 147.5t-22 158q3 26 17.5 48.5t31.5 37.5t45 30t46 22.5t48 18.5q125 46 313 64q379 37 676 -50q155 -46 215 -122q16 -20 16.5 -51t-5.5 -54z" />
410
  <glyph unicode="&#xf19c;" horiz-adv-x="2048" d="M960 1536l960 -384v-128h-128q0 -26 -20.5 -45t-48.5 -19h-1526q-28 0 -48.5 19t-20.5 45h-128v128zM256 896h256v-768h128v768h256v-768h128v768h256v-768h128v768h256v-768h59q28 0 48.5 -19t20.5 -45v-64h-1664v64q0 26 20.5 45t48.5 19h59v768zM1851 -64 q28 0 48.5 -19t20.5 -45v-128h-1920v128q0 26 20.5 45t48.5 19h1782z" />
411
  <glyph unicode="&#xf19d;" horiz-adv-x="2304" d="M1774 700l18 -316q4 -69 -82 -128t-235 -93.5t-323 -34.5t-323 34.5t-235 93.5t-82 128l18 316l574 -181q22 -7 48 -7t48 7zM2304 1024q0 -23 -22 -31l-1120 -352q-4 -1 -10 -1t-10 1l-652 206q-43 -34 -71 -111.5t-34 -178.5q63 -36 63 -109q0 -69 -58 -107l58 -433 q2 -14 -8 -25q-9 -11 -24 -11h-192q-15 0 -24 11q-10 11 -8 25l58 433q-58 38 -58 107q0 73 65 111q11 207 98 330l-333 104q-22 8 -22 31t22 31l1120 352q4 1 10 1t10 -1l1120 -352q22 -8 22 -31z" />
412
  <glyph unicode="&#xf19e;" d="M859 579l13 -707q-62 11 -105 11q-41 0 -105 -11l13 707q-40 69 -168.5 295.5t-216.5 374.5t-181 287q58 -15 108 -15q43 0 111 15q63 -111 133.5 -229.5t167 -276.5t138.5 -227q37 61 109.5 177.5t117.5 190t105 176t107 189.5q54 -14 107 -14q56 0 114 14v0 q-28 -39 -60 -88.5t-49.5 -78.5t-56.5 -96t-49 -84q-146 -248 -353 -610z" />
413
+ <glyph unicode="&#xf1a0;" d="M768 750h725q12 -67 12 -128q0 -217 -91 -387.5t-259.5 -266.5t-386.5 -96q-157 0 -299 60.5t-245 163.5t-163.5 245t-60.5 299t60.5 299t163.5 245t245 163.5t299 60.5q300 0 515 -201l-209 -201q-123 119 -306 119q-129 0 -238.5 -65t-173.5 -176.5t-64 -243.5 t64 -243.5t173.5 -176.5t238.5 -65q87 0 160 24t120 60t82 82t51.5 87t22.5 78h-436v264z" />
414
  <glyph unicode="&#xf1a1;" horiz-adv-x="1792" d="M1095 369q16 -16 0 -31q-62 -62 -199 -62t-199 62q-16 15 0 31q6 6 15 6t15 -6q48 -49 169 -49q120 0 169 49q6 6 15 6t15 -6zM788 550q0 -37 -26 -63t-63 -26t-63.5 26t-26.5 63q0 38 26.5 64t63.5 26t63 -26.5t26 -63.5zM1183 550q0 -37 -26.5 -63t-63.5 -26t-63 26 t-26 63t26 63.5t63 26.5t63.5 -26t26.5 -64zM1434 670q0 49 -35 84t-85 35t-86 -36q-130 90 -311 96l63 283l200 -45q0 -37 26 -63t63 -26t63.5 26.5t26.5 63.5t-26.5 63.5t-63.5 26.5q-54 0 -80 -50l-221 49q-19 5 -25 -16l-69 -312q-180 -7 -309 -97q-35 37 -87 37 q-50 0 -85 -35t-35 -84q0 -35 18.5 -64t49.5 -44q-6 -27 -6 -56q0 -142 140 -243t337 -101q198 0 338 101t140 243q0 32 -7 57q30 15 48 43.5t18 63.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191 t348 71t348 -71t286 -191t191 -286t71 -348z" />
415
  <glyph unicode="&#xf1a2;" d="M939 407q13 -13 0 -26q-53 -53 -171 -53t-171 53q-13 13 0 26q5 6 13 6t13 -6q42 -42 145 -42t145 42q5 6 13 6t13 -6zM676 563q0 -31 -23 -54t-54 -23t-54 23t-23 54q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1014 563q0 -31 -23 -54t-54 -23t-54 23t-23 54 q0 32 22.5 54.5t54.5 22.5t54.5 -22.5t22.5 -54.5zM1229 666q0 42 -30 72t-73 30q-42 0 -73 -31q-113 78 -267 82l54 243l171 -39q1 -32 23.5 -54t53.5 -22q32 0 54.5 22.5t22.5 54.5t-22.5 54.5t-54.5 22.5q-48 0 -69 -43l-189 42q-17 5 -21 -13l-60 -268q-154 -6 -265 -83 q-30 32 -74 32q-43 0 -73 -30t-30 -72q0 -30 16 -55t42 -38q-5 -25 -5 -48q0 -122 120 -208.5t289 -86.5q170 0 290 86.5t120 208.5q0 25 -6 49q25 13 40.5 37.5t15.5 54.5zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960 q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
416
  <glyph unicode="&#xf1a3;" d="M866 697l90 27v62q0 79 -58 135t-138 56t-138 -55.5t-58 -134.5v-283q0 -20 -14 -33.5t-33 -13.5t-32.5 13.5t-13.5 33.5v120h-151v-122q0 -82 57.5 -139t139.5 -57q81 0 138.5 56.5t57.5 136.5v280q0 19 13.5 33t33.5 14q19 0 32.5 -14t13.5 -33v-54zM1199 502v122h-150 v-126q0 -20 -13.5 -33.5t-33.5 -13.5q-19 0 -32.5 14t-13.5 33v123l-90 -26l-60 28v-123q0 -80 58 -137t139 -57t138.5 57t57.5 139zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103 t385.5 -103t279.5 -279.5t103 -385.5z" />
454
  <glyph unicode="&#xf1cb;" horiz-adv-x="1792" d="M216 367l603 -402v359l-334 223zM154 511l193 129l-193 129v-258zM973 -35l603 402l-269 180l-334 -223v-359zM896 458l272 182l-272 182l-272 -182zM485 733l334 223v359l-603 -402zM1445 640l193 -129v258zM1307 733l269 180l-603 402v-359zM1792 913v-546 q0 -41 -34 -64l-819 -546q-21 -13 -43 -13t-43 13l-819 546q-34 23 -34 64v546q0 41 34 64l819 546q21 13 43 13t43 -13l819 -546q34 -23 34 -64z" />
455
  <glyph unicode="&#xf1cc;" horiz-adv-x="2048" d="M1800 764q111 -46 179.5 -145.5t68.5 -221.5q0 -164 -118 -280.5t-285 -116.5q-4 0 -11.5 0.5t-10.5 0.5h-1209h-1h-2h-5q-170 10 -288 125.5t-118 280.5q0 110 55 203t147 147q-12 39 -12 82q0 115 82 196t199 81q95 0 172 -58q75 154 222.5 248t326.5 94 q166 0 306 -80.5t221.5 -218.5t81.5 -301q0 -6 -0.5 -18t-0.5 -18zM468 498q0 -122 84 -193t208 -71q137 0 240 99q-16 20 -47.5 56.5t-43.5 50.5q-67 -65 -144 -65q-55 0 -93.5 33.5t-38.5 87.5q0 53 38.5 87t91.5 34q44 0 84.5 -21t73 -55t65 -75t69 -82t77 -75t97 -55 t121.5 -21q121 0 204.5 71.5t83.5 190.5q0 121 -84 192t-207 71q-143 0 -241 -97q14 -16 29.5 -34t34.5 -40t29 -34q66 64 142 64q52 0 92 -33t40 -84q0 -57 -37 -91.5t-94 -34.5q-43 0 -82.5 21t-72 55t-65.5 75t-69.5 82t-77.5 75t-96.5 55t-118.5 21q-122 0 -207 -70.5 t-85 -189.5z" />
456
  <glyph unicode="&#xf1cd;" horiz-adv-x="1792" d="M896 1536q182 0 348 -71t286 -191t191 -286t71 -348t-71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71zM896 1408q-190 0 -361 -90l194 -194q82 28 167 28t167 -28l194 194q-171 90 -361 90zM218 279l194 194 q-28 82 -28 167t28 167l-194 194q-90 -171 -90 -361t90 -361zM896 -128q190 0 361 90l-194 194q-82 -28 -167 -28t-167 28l-194 -194q171 -90 361 -90zM896 256q159 0 271.5 112.5t112.5 271.5t-112.5 271.5t-271.5 112.5t-271.5 -112.5t-112.5 -271.5t112.5 -271.5 t271.5 -112.5zM1380 473l194 -194q90 171 90 361t-90 361l-194 -194q28 -82 28 -167t-28 -167z" />
457
+ <glyph unicode="&#xf1ce;" horiz-adv-x="1792" d="M1760 640q0 -176 -68.5 -336t-184 -275.5t-275.5 -184t-336 -68.5t-336 68.5t-275.5 184t-184 275.5t-68.5 336q0 213 97 398.5t265 305.5t374 151v-228q-221 -45 -366.5 -221t-145.5 -406q0 -130 51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5 t136.5 204t51 248.5q0 230 -145.5 406t-366.5 221v228q206 -31 374 -151t265 -305.5t97 -398.5z" />
458
  <glyph unicode="&#xf1d0;" horiz-adv-x="1792" d="M19 662q8 217 116 406t305 318h5q0 -1 -1 -3q-8 -8 -28 -33.5t-52 -76.5t-60 -110.5t-44.5 -135.5t-14 -150.5t39 -157.5t108.5 -154q50 -50 102 -69.5t90.5 -11.5t69.5 23.5t47 32.5l16 16q39 51 53 116.5t6.5 122.5t-21 107t-26.5 80l-14 29q-10 25 -30.5 49.5t-43 41 t-43.5 29.5t-35 19l-13 6l104 115q39 -17 78 -52t59 -61l19 -27q1 48 -18.5 103.5t-40.5 87.5l-20 31l161 183l160 -181q-33 -46 -52.5 -102.5t-22.5 -90.5l-4 -33q22 37 61.5 72.5t67.5 52.5l28 17l103 -115q-44 -14 -85 -50t-60 -65l-19 -29q-31 -56 -48 -133.5t-7 -170 t57 -156.5q33 -45 77.5 -60.5t85 -5.5t76 26.5t57.5 33.5l21 16q60 53 96.5 115t48.5 121.5t10 121.5t-18 118t-37 107.5t-45.5 93t-45 72t-34.5 47.5l-13 17q-14 13 -7 13l10 -3q40 -29 62.5 -46t62 -50t64 -58t58.5 -65t55.5 -77t45.5 -88t38 -103t23.5 -117t10.5 -136 q3 -259 -108 -465t-312 -321t-456 -115q-185 0 -351 74t-283.5 198t-184 293t-60.5 353z" />
459
  <glyph unicode="&#xf1d1;" horiz-adv-x="1792" d="M874 -102v-66q-208 6 -385 109.5t-283 275.5l58 34q29 -49 73 -99l65 57q148 -168 368 -212l-17 -86q65 -12 121 -13zM276 428l-83 -28q22 -60 49 -112l-57 -33q-98 180 -98 385t98 385l57 -33q-30 -56 -49 -112l82 -28q-35 -100 -35 -212q0 -109 36 -212zM1528 251 l58 -34q-106 -172 -283 -275.5t-385 -109.5v66q56 1 121 13l-17 86q220 44 368 212l65 -57q44 50 73 99zM1377 805l-233 -80q14 -42 14 -85t-14 -85l232 -80q-31 -92 -98 -169l-185 162q-57 -67 -147 -85l48 -241q-52 -10 -98 -10t-98 10l48 241q-90 18 -147 85l-185 -162 q-67 77 -98 169l232 80q-14 42 -14 85t14 85l-233 80q33 93 99 169l185 -162q59 68 147 86l-48 240q44 10 98 10t98 -10l-48 -240q88 -18 147 -86l185 162q66 -76 99 -169zM874 1448v-66q-65 -2 -121 -13l17 -86q-220 -42 -368 -211l-65 56q-38 -42 -73 -98l-57 33 q106 172 282 275.5t385 109.5zM1705 640q0 -205 -98 -385l-57 33q27 52 49 112l-83 28q36 103 36 212q0 112 -35 212l82 28q-19 56 -49 112l57 33q98 -180 98 -385zM1585 1063l-57 -33q-35 56 -73 98l-65 -56q-148 169 -368 211l17 86q-56 11 -121 13v66q209 -6 385 -109.5 t282 -275.5zM1748 640q0 173 -67.5 331t-181.5 272t-272 181.5t-331 67.5t-331 -67.5t-272 -181.5t-181.5 -272t-67.5 -331t67.5 -331t181.5 -272t272 -181.5t331 -67.5t331 67.5t272 181.5t181.5 272t67.5 331zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71 t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
460
  <glyph unicode="&#xf1d2;" d="M582 228q0 -66 -93 -66q-107 0 -107 63q0 64 98 64q102 0 102 -61zM546 694q0 -85 -74 -85q-77 0 -77 84q0 90 77 90q36 0 55 -25.5t19 -63.5zM712 769v125q-78 -29 -135 -29q-50 29 -110 29q-86 0 -145 -57t-59 -143q0 -50 29.5 -102t73.5 -67v-3q-38 -17 -38 -85 q0 -53 41 -77v-3q-113 -37 -113 -139q0 -45 20 -78.5t54 -51t72 -25.5t81 -8q224 0 224 188q0 67 -48 99t-126 46q-27 5 -51.5 20.5t-24.5 39.5q0 44 49 52q77 15 122 70t45 134q0 24 -10 52q37 9 49 13zM771 350h137q-2 27 -2 82v387q0 46 2 69h-137q3 -23 3 -71v-392 q0 -50 -3 -75zM1280 366v121q-30 -21 -68 -21q-53 0 -53 82v225h52q9 0 26.5 -1t26.5 -1v117h-105q0 82 3 102h-140q4 -24 4 -55v-47h-60v-117q36 3 37 3q3 0 11 -0.5t12 -0.5v-2h-2v-217q0 -37 2.5 -64t11.5 -56.5t24.5 -48.5t43.5 -31t66 -12q64 0 108 24zM924 1072 q0 36 -24 63.5t-60 27.5t-60.5 -27t-24.5 -64q0 -36 25 -62.5t60 -26.5t59.5 27t24.5 62zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
484
  <glyph unicode="&#xf1eb;" horiz-adv-x="2048" d="M1024 13q-20 0 -93 73.5t-73 93.5q0 32 62.5 54t103.5 22t103.5 -22t62.5 -54q0 -20 -73 -93.5t-93 -73.5zM1294 284q-2 0 -40 25t-101.5 50t-128.5 25t-128.5 -25t-101 -50t-40.5 -25q-18 0 -93.5 75t-75.5 93q0 13 10 23q78 77 196 121t233 44t233 -44t196 -121 q10 -10 10 -23q0 -18 -75.5 -93t-93.5 -75zM1567 556q-11 0 -23 8q-136 105 -252 154.5t-268 49.5q-85 0 -170.5 -22t-149 -53t-113.5 -62t-79 -53t-31 -22q-17 0 -92 75t-75 93q0 12 10 22q132 132 320 205t380 73t380 -73t320 -205q10 -10 10 -22q0 -18 -75 -93t-92 -75z M1838 827q-11 0 -22 9q-179 157 -371.5 236.5t-420.5 79.5t-420.5 -79.5t-371.5 -236.5q-11 -9 -22 -9q-17 0 -92.5 75t-75.5 93q0 13 10 23q187 186 445 288t527 102t527 -102t445 -288q10 -10 10 -23q0 -18 -75.5 -93t-92.5 -75z" />
485
  <glyph unicode="&#xf1ec;" horiz-adv-x="1792" d="M384 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM384 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5 t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 0q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5 t37.5 90.5zM384 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1152 384q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM768 768q0 53 -37.5 90.5t-90.5 37.5 t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1536 0v384q0 52 -38 90t-90 38t-90 -38t-38 -90v-384q0 -52 38 -90t90 -38t90 38t38 90zM1152 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1536 1088v256q0 26 -19 45t-45 19h-1280q-26 0 -45 -19t-19 -45v-256q0 -26 19 -45t45 -19h1280q26 0 45 19t19 45zM1536 768q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5zM1664 1408v-1536q0 -52 -38 -90t-90 -38 h-1408q-52 0 -90 38t-38 90v1536q0 52 38 90t90 38h1408q52 0 90 -38t38 -90z" />
486
  <glyph unicode="&#xf1ed;" d="M1519 890q18 -84 -4 -204q-87 -444 -565 -444h-44q-25 0 -44 -16.5t-24 -42.5l-4 -19l-55 -346l-2 -15q-5 -26 -24.5 -42.5t-44.5 -16.5h-251q-21 0 -33 15t-9 36q9 56 26.5 168t26.5 168t27 167.5t27 167.5q5 37 43 37h131q133 -2 236 21q175 39 287 144q102 95 155 246 q24 70 35 133q1 6 2.5 7.5t3.5 1t6 -3.5q79 -59 98 -162zM1347 1172q0 -107 -46 -236q-80 -233 -302 -315q-113 -40 -252 -42q0 -1 -90 -1l-90 1q-100 0 -118 -96q-2 -8 -85 -530q-1 -10 -12 -10h-295q-22 0 -36.5 16.5t-11.5 38.5l232 1471q5 29 27.5 48t51.5 19h598 q34 0 97.5 -13t111.5 -32q107 -41 163.5 -123t56.5 -196z" />
487
+ <glyph unicode="&#xf1ee;" horiz-adv-x="1792" d="M441 864q32 0 52 -26q266 -364 362 -774h-446q-127 441 -367 749q-12 16 -3 33.5t29 17.5h373zM1000 507q-49 -199 -125 -393q-79 310 -256 594q40 221 44 449q211 -340 337 -650zM1099 1216q235 -324 384.5 -698.5t184.5 -773.5h-451q-41 665 -553 1472h435zM1792 640 q0 -424 -101 -812q-67 560 -359 1083q-25 301 -106 584q-4 16 5.5 28.5t25.5 12.5h359q21 0 38.5 -13t22.5 -33q115 -409 115 -850z" />
488
  <glyph unicode="&#xf1f0;" horiz-adv-x="2304" d="M1975 546h-138q14 37 66 179l3 9q4 10 10 26t9 26l12 -55zM531 611l-58 295q-11 54 -75 54h-268l-2 -13q311 -79 403 -336zM710 960l-162 -438l-17 89q-26 70 -85 129.5t-131 88.5l135 -510h175l261 641h-176zM849 318h166l104 642h-166zM1617 944q-69 27 -149 27 q-123 0 -201 -59t-79 -153q-1 -102 145 -174q48 -23 67 -41t19 -39q0 -30 -30 -46t-69 -16q-86 0 -156 33l-22 11l-23 -144q74 -34 185 -34q130 -1 208.5 59t80.5 160q0 106 -140 174q-49 25 -71 42t-22 38q0 22 24.5 38.5t70.5 16.5q70 1 124 -24l15 -8zM2042 960h-128 q-65 0 -87 -54l-246 -588h174l35 96h212q5 -22 20 -96h154zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
489
  <glyph unicode="&#xf1f1;" horiz-adv-x="2304" d="M671 603h-13q-47 0 -47 -32q0 -22 20 -22q17 0 28 15t12 39zM1066 639h62v3q1 4 0.5 6.5t-1 7t-2 8t-4.5 6.5t-7.5 5t-11.5 2q-28 0 -36 -38zM1606 603h-12q-48 0 -48 -32q0 -22 20 -22q17 0 28 15t12 39zM1925 629q0 41 -30 41q-19 0 -31 -20t-12 -51q0 -42 28 -42 q20 0 32.5 20t12.5 52zM480 770h87l-44 -262h-56l32 201l-71 -201h-39l-4 200l-34 -200h-53l44 262h81l2 -163zM733 663q0 -6 -4 -42q-16 -101 -17 -113h-47l1 22q-20 -26 -58 -26q-23 0 -37.5 16t-14.5 42q0 39 26 60.5t73 21.5q14 0 23 -1q0 3 0.5 5.5t1 4.5t0.5 3 q0 20 -36 20q-29 0 -59 -10q0 4 7 48q38 11 67 11q74 0 74 -62zM889 721l-8 -49q-22 3 -41 3q-27 0 -27 -17q0 -8 4.5 -12t21.5 -11q40 -19 40 -60q0 -72 -87 -71q-34 0 -58 6q0 2 7 49q29 -8 51 -8q32 0 32 19q0 7 -4.5 11.5t-21.5 12.5q-43 20 -43 59q0 72 84 72 q30 0 50 -4zM977 721h28l-7 -52h-29q-2 -17 -6.5 -40.5t-7 -38.5t-2.5 -18q0 -16 19 -16q8 0 16 2l-8 -47q-21 -7 -40 -7q-43 0 -45 47q0 12 8 56q3 20 25 146h55zM1180 648q0 -23 -7 -52h-111q-3 -22 10 -33t38 -11q30 0 58 14l-9 -54q-30 -8 -57 -8q-95 0 -95 95 q0 55 27.5 90.5t69.5 35.5q35 0 55.5 -21t20.5 -56zM1319 722q-13 -23 -22 -62q-22 2 -31 -24t-25 -128h-56l3 14q22 130 29 199h51l-3 -33q14 21 25.5 29.5t28.5 4.5zM1506 763l-9 -57q-28 14 -50 14q-31 0 -51 -27.5t-20 -70.5q0 -30 13.5 -47t38.5 -17q21 0 48 13 l-10 -59q-28 -8 -50 -8q-45 0 -71.5 30.5t-26.5 82.5q0 70 35.5 114.5t91.5 44.5q26 0 61 -13zM1668 663q0 -18 -4 -42q-13 -79 -17 -113h-46l1 22q-20 -26 -59 -26q-23 0 -37 16t-14 42q0 39 25.5 60.5t72.5 21.5q15 0 23 -1q2 7 2 13q0 20 -36 20q-29 0 -59 -10q0 4 8 48 q38 11 67 11q73 0 73 -62zM1809 722q-14 -24 -21 -62q-23 2 -31.5 -23t-25.5 -129h-56l3 14q19 104 29 199h52q0 -11 -4 -33q15 21 26.5 29.5t27.5 4.5zM1950 770h56l-43 -262h-53l3 19q-23 -23 -52 -23q-31 0 -49.5 24t-18.5 64q0 53 27.5 92t64.5 39q31 0 53 -29z M2061 640q0 148 -72.5 273t-198 198t-273.5 73q-181 0 -328 -110q127 -116 171 -284h-50q-44 150 -158 253q-114 -103 -158 -253h-50q44 168 171 284q-147 110 -328 110q-148 0 -273.5 -73t-198 -198t-72.5 -273t72.5 -273t198 -198t273.5 -73q181 0 328 110 q-120 111 -165 264h50q46 -138 152 -233q106 95 152 233h50q-45 -153 -165 -264q147 -110 328 -110q148 0 273.5 73t198 198t72.5 273zM2304 1280v-1280q0 -52 -38 -90t-90 -38h-2048q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h2048q52 0 90 -38t38 -90z" />
490
  <glyph unicode="&#xf1f2;" horiz-adv-x="2304" d="M313 759q0 -51 -36 -84q-29 -26 -89 -26h-17v220h17q61 0 89 -27q36 -31 36 -83zM2089 824q0 -52 -64 -52h-19v101h20q63 0 63 -49zM380 759q0 74 -50 120.5t-129 46.5h-95v-333h95q74 0 119 38q60 51 60 128zM410 593h65v333h-65v-333zM730 694q0 40 -20.5 62t-75.5 42 q-29 10 -39.5 19t-10.5 23q0 16 13.5 26.5t34.5 10.5q29 0 53 -27l34 44q-41 37 -98 37q-44 0 -74 -27.5t-30 -67.5q0 -35 18 -55.5t64 -36.5q37 -13 45 -19q19 -12 19 -34q0 -20 -14 -33.5t-36 -13.5q-48 0 -71 44l-42 -40q44 -64 115 -64q51 0 83 30.5t32 79.5zM1008 604 v77q-37 -37 -78 -37q-49 0 -80.5 32.5t-31.5 82.5q0 48 31.5 81.5t77.5 33.5q43 0 81 -38v77q-40 20 -80 20q-74 0 -125.5 -50.5t-51.5 -123.5t51 -123.5t125 -50.5q42 0 81 19zM2240 0v527q-65 -40 -144.5 -84t-237.5 -117t-329.5 -137.5t-417.5 -134.5t-504 -118h1569 q26 0 45 19t19 45zM1389 757q0 75 -53 128t-128 53t-128 -53t-53 -128t53 -128t128 -53t128 53t53 128zM1541 584l144 342h-71l-90 -224l-89 224h-71l142 -342h35zM1714 593h184v56h-119v90h115v56h-115v74h119v57h-184v-333zM2105 593h80l-105 140q76 16 76 94q0 47 -31 73 t-87 26h-97v-333h65v133h9zM2304 1274v-1268q0 -56 -38.5 -95t-93.5 -39h-2040q-55 0 -93.5 39t-38.5 95v1268q0 56 38.5 95t93.5 39h2040q55 0 93.5 -39t38.5 -95z" />
555
  <glyph unicode="&#xf237;" d="M1536 1536l-192 -448h192v-192h-274l-55 -128h329v-192h-411l-357 -832l-357 832h-411v192h329l-55 128h-274v192h192l-192 448h256l323 -768h378l323 768h256zM768 320l108 256h-216z" />
556
  <glyph unicode="&#xf238;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM768 192q80 0 136 56t56 136t-56 136t-136 56 t-136 -56t-56 -136t56 -136t136 -56zM1344 768v512h-1152v-512h1152z" />
557
  <glyph unicode="&#xf239;" d="M1088 1536q185 0 316.5 -93.5t131.5 -226.5v-896q0 -130 -125.5 -222t-305.5 -97l213 -202q16 -15 8 -35t-30 -20h-1056q-22 0 -30 20t8 35l213 202q-180 5 -305.5 97t-125.5 222v896q0 133 131.5 226.5t316.5 93.5h640zM288 224q66 0 113 47t47 113t-47 113t-113 47 t-113 -47t-47 -113t47 -113t113 -47zM704 768v512h-544v-512h544zM1248 224q66 0 113 47t47 113t-47 113t-113 47t-113 -47t-47 -113t47 -113t113 -47zM1408 768v512h-576v-512h576z" />
558
+ <glyph unicode="&#xf23a;" horiz-adv-x="1792" d="M597 1115v-1173q0 -25 -12.5 -42.5t-36.5 -17.5q-17 0 -33 8l-465 233q-21 10 -35.5 33.5t-14.5 46.5v1140q0 20 10 34t29 14q14 0 44 -15l511 -256q3 -3 3 -5zM661 1014l534 -866l-534 266v600zM1792 996v-1054q0 -25 -14 -40.5t-38 -15.5t-47 13l-441 220zM1789 1116 q0 -3 -256.5 -419.5t-300.5 -487.5l-390 634l324 527q17 28 52 28q14 0 26 -6l541 -270q4 -2 4 -6z" />
559
  <glyph unicode="&#xf23b;" d="M809 532l266 499h-112l-157 -312q-24 -48 -44 -92l-42 92l-155 312h-120l263 -493v-324h101v318zM1536 1408v-1536h-1536v1536h1536z" />
560
  <glyph unicode="&#xf23c;" horiz-adv-x="2296" d="M478 -139q-8 -16 -27 -34.5t-37 -25.5q-25 -9 -51.5 3.5t-28.5 31.5q-1 22 40 55t68 38q23 4 34 -21.5t2 -46.5zM1819 -139q7 -16 26 -34.5t38 -25.5q25 -9 51.5 3.5t27.5 31.5q2 22 -39.5 55t-68.5 38q-22 4 -33 -21.5t-2 -46.5zM1867 -30q13 -27 56.5 -59.5t77.5 -41.5 q45 -13 82 4.5t37 50.5q0 46 -67.5 100.5t-115.5 59.5q-40 5 -63.5 -37.5t-6.5 -76.5zM428 -30q-13 -27 -56 -59.5t-77 -41.5q-45 -13 -82 4.5t-37 50.5q0 46 67.5 100.5t115.5 59.5q40 5 63 -37.5t6 -76.5zM1158 1094h1q-41 0 -76 -15q27 -8 44 -30.5t17 -49.5 q0 -35 -27 -60t-65 -25q-52 0 -80 43q-5 -23 -5 -42q0 -74 56 -126.5t135 -52.5q80 0 136 52.5t56 126.5t-56 126.5t-136 52.5zM1462 1312q-99 109 -220.5 131.5t-245.5 -44.5q27 60 82.5 96.5t118 39.5t121.5 -17t99.5 -74.5t44.5 -131.5zM2212 73q8 -11 -11 -42 q7 -23 7 -40q1 -56 -44.5 -112.5t-109.5 -91.5t-118 -37q-48 -2 -92 21.5t-66 65.5q-687 -25 -1259 0q-23 -41 -66.5 -65t-92.5 -22q-86 3 -179.5 80.5t-92.5 160.5q2 22 7 40q-19 31 -11 42q6 10 31 1q14 22 41 51q-7 29 2 38q11 10 39 -4q29 20 59 34q0 29 13 37 q23 12 51 -16q35 5 61 -2q18 -4 38 -19v73q-11 0 -18 2q-53 10 -97 44.5t-55 87.5q-9 38 0 81q15 62 93 95q2 17 19 35.5t36 23.5t33 -7.5t19 -30.5h13q46 -5 60 -23q3 -3 5 -7q10 1 30.5 3.5t30.5 3.5q-15 11 -30 17q-23 40 -91 43q0 6 1 10q-62 2 -118.5 18.5t-84.5 47.5 q-32 36 -42.5 92t-2.5 112q16 126 90 179q23 16 52 4.5t32 -40.5q0 -1 1.5 -14t2.5 -21t3 -20t5.5 -19t8.5 -10q27 -14 76 -12q48 46 98 74q-40 4 -162 -14l47 46q61 58 163 111q145 73 282 86q-20 8 -41 15.5t-47 14t-42.5 10.5t-47.5 11t-43 10q595 126 904 -139 q98 -84 158 -222q85 -10 121 9h1q5 3 8.5 10t5.5 19t3 19.5t3 21.5l1 14q3 28 32 40t52 -5q73 -52 91 -178q7 -57 -3.5 -113t-42.5 -91q-28 -32 -83.5 -48.5t-115.5 -18.5v-10q-71 -2 -95 -43q-14 -5 -31 -17q11 -1 32 -3.5t30 -3.5q1 4 5 8q16 18 60 23h13q5 18 19 30t33 8 t36 -23t19 -36q79 -32 93 -95q9 -40 1 -81q-12 -53 -56 -88t-97 -44q-10 -2 -17 -2q0 -49 -1 -73q20 15 38 19q26 7 61 2q28 28 51 16q14 -9 14 -37q33 -16 59 -34q27 13 38 4q10 -10 2 -38q28 -30 41 -51q23 8 31 -1zM1937 1025q0 -29 -9 -54q82 -32 112 -132 q4 37 -9.5 98.5t-41.5 90.5q-20 19 -36 17t-16 -20zM1859 925q35 -42 47.5 -108.5t-0.5 -124.5q67 13 97 45q13 14 18 28q-3 64 -31 114.5t-79 66.5q-15 -15 -52 -21zM1822 921q-30 0 -44 1q42 -115 53 -239q21 0 43 3q16 68 1 135t-53 100zM258 839q30 100 112 132 q-9 25 -9 54q0 18 -16.5 20t-35.5 -17q-28 -29 -41.5 -90.5t-9.5 -98.5zM294 737q29 -31 97 -45q-13 58 -0.5 124.5t47.5 108.5v0q-37 6 -52 21q-51 -16 -78.5 -66t-31.5 -115q9 -17 18 -28zM471 683q14 124 73 235q-19 -4 -55 -18l-45 -19v1q-46 -89 -20 -196q25 -3 47 -3z M1434 644q8 -38 16.5 -108.5t11.5 -89.5q3 -18 9.5 -21.5t23.5 4.5q40 20 62 85.5t23 125.5q-24 2 -146 4zM1152 1285q-116 0 -199 -82.5t-83 -198.5q0 -117 83 -199.5t199 -82.5t199 82.5t83 199.5q0 116 -83 198.5t-199 82.5zM1380 646q-106 2 -211 0v1q-1 -27 2.5 -86 t13.5 -66q29 -14 93.5 -14.5t95.5 10.5q9 3 11 39t-0.5 69.5t-4.5 46.5zM1112 447q8 4 9.5 48t-0.5 88t-4 63v1q-212 -3 -214 -3q-4 -20 -7 -62t0 -83t14 -46q34 -15 101 -16t101 10zM718 636q-16 -59 4.5 -118.5t77.5 -84.5q15 -8 24 -5t12 21q3 16 8 90t10 103 q-69 -2 -136 -6zM591 510q3 -23 -34 -36q132 -141 271.5 -240t305.5 -154q172 49 310.5 146t293.5 250q-33 13 -30 34l3 9v1v-1q-17 2 -50 5.5t-48 4.5q-26 -90 -82 -132q-51 -38 -82 1q-5 6 -9 14q-7 13 -17 62q-2 -5 -5 -9t-7.5 -7t-8 -5.5t-9.5 -4l-10 -2.5t-12 -2 l-12 -1.5t-13.5 -1t-13.5 -0.5q-106 -9 -163 11q-4 -17 -10 -26.5t-21 -15t-23 -7t-36 -3.5q-2 0 -3 -0.5t-3 -0.5h-3q-179 -17 -203 40q-2 -63 -56 -54q-47 8 -91 54q-12 13 -20 26q-17 29 -26 65q-58 -6 -87 -10q1 -2 4 -10zM507 -118q3 14 3 30q-17 71 -51 130t-73 70 q-41 12 -101.5 -14.5t-104.5 -80t-39 -107.5q35 -53 100 -93t119 -42q51 -2 94 28t53 79zM510 53q23 -63 27 -119q195 113 392 174q-98 52 -180.5 120t-179.5 165q-6 -4 -29 -13q0 -2 -1 -5t-1 -4q31 -18 22 -37q-12 -23 -56 -34q-10 -13 -29 -24h-1q-2 -83 1 -150 q19 -34 35 -73zM579 -113q532 -21 1145 0q-254 147 -428 196q-76 -35 -156 -57q-8 -3 -16 0q-65 21 -129 49q-208 -60 -416 -188h-1v-1q1 0 1 1zM1763 -67q4 54 28 120q14 38 33 71l-1 -1q3 77 3 153q-15 8 -30 25q-42 9 -56 33q-9 20 22 38q-2 4 -2 9q-16 4 -28 12 q-204 -190 -383 -284q198 -59 414 -176zM2155 -90q5 54 -39 107.5t-104 80t-102 14.5q-38 -11 -72.5 -70.5t-51.5 -129.5q0 -16 3 -30q10 -49 53 -79t94 -28q54 2 119 42t100 93z" />
561
  <glyph unicode="&#xf23d;" horiz-adv-x="2304" d="M1524 -25q0 -68 -48 -116t-116 -48t-116.5 48t-48.5 116t48.5 116.5t116.5 48.5t116 -48.5t48 -116.5zM775 -25q0 -68 -48.5 -116t-116.5 -48t-116 48t-48 116t48 116.5t116 48.5t116.5 -48.5t48.5 -116.5zM0 1469q57 -60 110.5 -104.5t121 -82t136 -63t166 -45.5 t200 -31.5t250 -18.5t304 -9.5t372.5 -2.5q139 0 244.5 -5t181 -16.5t124 -27.5t71 -39.5t24 -51.5t-19.5 -64t-56.5 -76.5t-89.5 -91t-116 -104.5t-139 -119q-185 -157 -286 -247q29 51 76.5 109t94 105.5t94.5 98.5t83 91.5t54 80.5t13 70t-45.5 55.5t-116.5 41t-204 23.5 t-304 5q-168 -2 -314 6t-256 23t-204.5 41t-159.5 51.5t-122.5 62.5t-91.5 66.5t-68 71.5t-50.5 69.5t-40 68t-36.5 59.5z" />
600
  <glyph unicode="&#xf267;" horiz-adv-x="1792" d="M949 643q0 -26 -16.5 -45t-41.5 -19q-26 0 -45 16.5t-19 41.5q0 26 17 45t42 19t44 -16.5t19 -41.5zM964 585l350 581q-9 -8 -67.5 -62.5t-125.5 -116.5t-136.5 -127t-117 -110.5t-50.5 -51.5l-349 -580q7 7 67 62t126 116.5t136 127t117 111t50 50.5zM1611 640 q0 -201 -104 -371q-3 2 -17 11t-26.5 16.5t-16.5 7.5q-13 0 -13 -13q0 -10 59 -44q-74 -112 -184.5 -190.5t-241.5 -110.5l-16 67q-1 10 -15 10q-5 0 -8 -5.5t-2 -9.5l16 -68q-72 -15 -146 -15q-199 0 -372 105q1 2 13 20.5t21.5 33.5t9.5 19q0 13 -13 13q-6 0 -17 -14.5 t-22.5 -34.5t-13.5 -23q-113 75 -192 187.5t-110 244.5l69 15q10 3 10 15q0 5 -5.5 8t-10.5 2l-68 -15q-14 72 -14 139q0 206 109 379q2 -1 18.5 -12t30 -19t17.5 -8q13 0 13 12q0 6 -12.5 15.5t-32.5 21.5l-20 12q77 112 189 189t244 107l15 -67q2 -10 15 -10q5 0 8 5.5 t2 10.5l-15 66q71 13 134 13q204 0 379 -109q-39 -56 -39 -65q0 -13 12 -13q11 0 48 64q111 -75 187.5 -186t107.5 -241l-56 -12q-10 -2 -10 -16q0 -5 5.5 -8t9.5 -2l57 13q14 -72 14 -140zM1696 640q0 163 -63.5 311t-170.5 255t-255 170.5t-311 63.5t-311 -63.5 t-255 -170.5t-170.5 -255t-63.5 -311t63.5 -311t170.5 -255t255 -170.5t311 -63.5t311 63.5t255 170.5t170.5 255t63.5 311zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191 t191 -286t71 -348z" />
601
  <glyph unicode="&#xf268;" horiz-adv-x="1792" d="M893 1536q240 2 451 -120q232 -134 352 -372l-742 39q-160 9 -294 -74.5t-185 -229.5l-276 424q128 159 311 245.5t383 87.5zM146 1131l337 -663q72 -143 211 -217t293 -45l-230 -451q-212 33 -385 157.5t-272.5 316t-99.5 411.5q0 267 146 491zM1732 962 q58 -150 59.5 -310.5t-48.5 -306t-153 -272t-246 -209.5q-230 -133 -498 -119l405 623q88 131 82.5 290.5t-106.5 277.5zM896 942q125 0 213.5 -88.5t88.5 -213.5t-88.5 -213.5t-213.5 -88.5t-213.5 88.5t-88.5 213.5t88.5 213.5t213.5 88.5z" />
602
  <glyph unicode="&#xf269;" horiz-adv-x="1792" d="M903 -256q-283 0 -504.5 150.5t-329.5 398.5q-58 131 -67 301t26 332.5t111 312t179 242.5l-11 -281q11 14 68 15.5t70 -15.5q42 81 160.5 138t234.5 59q-54 -45 -119.5 -148.5t-58.5 -163.5q25 -8 62.5 -13.5t63 -7.5t68 -4t50.5 -3q15 -5 9.5 -45.5t-30.5 -75.5 q-5 -7 -16.5 -18.5t-56.5 -35.5t-101 -34l15 -189l-139 67q-18 -43 -7.5 -81.5t36 -66.5t65.5 -41.5t81 -6.5q51 9 98 34.5t83.5 45t73.5 17.5q61 -4 89.5 -33t19.5 -65q-1 -2 -2.5 -5.5t-8.5 -12.5t-18 -15.5t-31.5 -10.5t-46.5 -1q-60 -95 -144.5 -135.5t-209.5 -29.5 q74 -61 162.5 -82.5t168.5 -6t154.5 52t128 87.5t80.5 104q43 91 39 192.5t-37.5 188.5t-78.5 125q87 -38 137 -79.5t77 -112.5q15 170 -57.5 343t-209.5 284q265 -77 412 -279.5t151 -517.5q2 -127 -40.5 -255t-123.5 -238t-189 -196t-247.5 -135.5t-288.5 -49.5z" />
603
+ <glyph unicode="&#xf26a;" horiz-adv-x="1792" d="M1493 1308q-165 110 -359 110q-155 0 -293 -73t-240 -200q-75 -93 -119.5 -218t-48.5 -266v-42q4 -141 48.5 -266t119.5 -218q102 -127 240 -200t293 -73q194 0 359 110q-121 -108 -274.5 -168t-322.5 -60q-29 0 -43 1q-175 8 -333 82t-272 193t-181 281t-67 339 q0 182 71 348t191 286t286 191t348 71h3q168 -1 320.5 -60.5t273.5 -167.5zM1792 640q0 -192 -77 -362.5t-213 -296.5q-104 -63 -222 -63q-137 0 -255 84q154 56 253.5 233t99.5 405q0 227 -99 404t-253 234q119 83 254 83q119 0 226 -65q135 -125 210.5 -295t75.5 -361z " />
604
+ <glyph unicode="&#xf26b;" horiz-adv-x="1792" d="M1792 599q0 -56 -7 -104h-1151q0 -146 109.5 -244.5t257.5 -98.5q99 0 185.5 46.5t136.5 130.5h423q-56 -159 -170.5 -281t-267.5 -188.5t-321 -66.5q-187 0 -356 83q-228 -116 -394 -116q-237 0 -237 263q0 115 45 275q17 60 109 229q199 360 475 606 q-184 -79 -427 -354q63 274 283.5 449.5t501.5 175.5q30 0 45 -1q255 117 433 117q64 0 116 -13t94.5 -40.5t66.5 -76.5t24 -115q0 -116 -75 -286q101 -182 101 -390zM1722 1239q0 83 -53 132t-137 49q-108 0 -254 -70q121 -47 222.5 -131.5t170.5 -195.5q51 135 51 216z M128 2q0 -86 48.5 -132.5t134.5 -46.5q115 0 266 83q-122 72 -213.5 183t-137.5 245q-98 -205 -98 -332zM632 715h728q-5 142 -113 237t-251 95q-144 0 -251.5 -95t-112.5 -237z" />
605
  <glyph unicode="&#xf26c;" horiz-adv-x="2048" d="M1792 288v960q0 13 -9.5 22.5t-22.5 9.5h-1600q-13 0 -22.5 -9.5t-9.5 -22.5v-960q0 -13 9.5 -22.5t22.5 -9.5h1600q13 0 22.5 9.5t9.5 22.5zM1920 1248v-960q0 -66 -47 -113t-113 -47h-736v-128h352q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-832q-14 0 -23 9t-9 23 v64q0 14 9 23t23 9h352v128h-736q-66 0 -113 47t-47 113v960q0 66 47 113t113 47h1600q66 0 113 -47t47 -113z" />
606
  <glyph unicode="&#xf26d;" horiz-adv-x="1792" d="M138 1408h197q-70 -64 -126 -149q-36 -56 -59 -115t-30 -125.5t-8.5 -120t10.5 -132t21 -126t28 -136.5q4 -19 6 -28q51 -238 81 -329q57 -171 152 -275h-272q-48 0 -82 34t-34 82v1304q0 48 34 82t82 34zM1346 1408h308q48 0 82 -34t34 -82v-1304q0 -48 -34 -82t-82 -34 h-178q212 210 196 565l-469 -101q-2 -45 -12 -82t-31 -72t-59.5 -59.5t-93.5 -36.5q-123 -26 -199 40q-32 27 -53 61t-51.5 129t-64.5 258q-35 163 -45.5 263t-5.5 139t23 77q20 41 62.5 73t102.5 45q45 12 83.5 6.5t67 -17t54 -35t43 -48t34.5 -56.5l468 100 q-68 175 -180 287z" />
607
+ <glyph unicode="&#xf26e;" d="M1401 -11l-6 -6q-113 -114 -259 -175q-154 -64 -317 -64q-165 0 -317 64q-148 63 -259 175q-113 112 -175 258q-42 103 -54 189q-4 28 48 36q51 8 56 -20q1 -1 1 -4q18 -90 46 -159q50 -124 152 -226q98 -98 226 -152q132 -56 276 -56q143 0 276 56q128 55 225 152l6 6 q10 10 25 6q12 -3 33 -22q36 -37 17 -58zM929 604l-66 -66l63 -63q21 -21 -7 -49q-17 -17 -32 -17q-10 0 -19 10l-62 61l-66 -66q-5 -5 -15 -5q-15 0 -31 16l-2 2q-18 15 -18 29q0 7 8 17l66 65l-66 66q-16 16 14 45q18 18 31 18q6 0 13 -5l65 -66l65 65q18 17 48 -13 q27 -27 11 -44zM1400 547q0 -118 -46 -228q-45 -105 -126 -186q-80 -80 -187 -126t-228 -46t-228 46t-187 126q-82 82 -125 186q-15 32 -15 40h-1q-9 27 43 44q50 16 60 -12q37 -99 97 -167h1v339v2q3 136 102 232q105 103 253 103q147 0 251 -103t104 -249 q0 -147 -104.5 -251t-250.5 -104q-58 0 -112 16q-28 11 -13 61q16 51 44 43l14 -3q14 -3 32.5 -6t30.5 -3q104 0 176 71.5t72 174.5q0 101 -72 171q-71 71 -175 71q-107 0 -178 -80q-64 -72 -64 -160v-413q110 -67 242 -67q96 0 185 36.5t156 103.5t103.5 155t36.5 183 q0 198 -141 339q-140 140 -339 140q-200 0 -340 -140q-53 -53 -77 -87l-2 -2q-8 -11 -13 -15.5t-21.5 -9.5t-38.5 3q-21 5 -36.5 16.5t-15.5 26.5v680q0 15 10.5 26.5t27.5 11.5h877q30 0 30 -55t-30 -55h-811v-483h1q40 42 102 84t108 61q109 46 231 46q121 0 228 -46 t187 -126q81 -81 126 -186q46 -112 46 -229zM1369 1128q9 -8 9 -18t-5.5 -18t-16.5 -21q-26 -26 -39 -26q-9 0 -16 7q-106 91 -207 133q-128 56 -276 56q-133 0 -262 -49q-27 -10 -45 37q-9 25 -8 38q3 16 16 20q130 57 299 57q164 0 316 -64q137 -58 235 -152z" />
608
  <glyph unicode="&#xf270;" horiz-adv-x="1792" d="M1551 60q15 6 26 3t11 -17.5t-15 -33.5q-13 -16 -44 -43.5t-95.5 -68t-141 -74t-188 -58t-229.5 -24.5q-119 0 -238 31t-209 76.5t-172.5 104t-132.5 105t-84 87.5q-8 9 -10 16.5t1 12t8 7t11.5 2t11.5 -4.5q192 -117 300 -166q389 -176 799 -90q190 40 391 135z M1758 175q11 -16 2.5 -69.5t-28.5 -102.5q-34 -83 -85 -124q-17 -14 -26 -9t0 24q21 45 44.5 121.5t6.5 98.5q-5 7 -15.5 11.5t-27 6t-29.5 2.5t-35 0t-31.5 -2t-31 -3t-22.5 -2q-6 -1 -13 -1.5t-11 -1t-8.5 -1t-7 -0.5h-5.5h-4.5t-3 0.5t-2 1.5l-1.5 3q-6 16 47 40t103 30 q46 7 108 1t76 -24zM1364 618q0 -31 13.5 -64t32 -58t37.5 -46t33 -32l13 -11l-227 -224q-40 37 -79 75.5t-58 58.5l-19 20q-11 11 -25 33q-38 -59 -97.5 -102.5t-127.5 -63.5t-140 -23t-137.5 21t-117.5 65.5t-83 113t-31 162.5q0 84 28 154t72 116.5t106.5 83t122.5 57 t130 34.5t119.5 18.5t99.5 6.5v127q0 65 -21 97q-34 53 -121 53q-6 0 -16.5 -1t-40.5 -12t-56 -29.5t-56 -59.5t-48 -96l-294 27q0 60 22 119t67 113t108 95t151.5 65.5t190.5 24.5q100 0 181 -25t129.5 -61.5t81 -83t45 -86t12.5 -73.5v-589zM692 597q0 -86 70 -133 q66 -44 139 -22q84 25 114 123q14 45 14 101v162q-59 -2 -111 -12t-106.5 -33.5t-87 -71t-32.5 -114.5z" />
609
  <glyph unicode="&#xf271;" horiz-adv-x="1792" d="M1536 1280q52 0 90 -38t38 -90v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h128zM1152 1376v-288q0 -14 9 -23t23 -9 h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM384 1376v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23zM1536 -128v1024h-1408v-1024h1408zM896 448h224q14 0 23 -9t9 -23v-64q0 -14 -9 -23t-23 -9h-224 v-224q0 -14 -9 -23t-23 -9h-64q-14 0 -23 9t-9 23v224h-224q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h224v224q0 14 9 23t23 9h64q14 0 23 -9t9 -23v-224z" />
610
  <glyph unicode="&#xf272;" horiz-adv-x="1792" d="M1152 416v-64q0 -14 -9 -23t-23 -9h-576q-14 0 -23 9t-9 23v64q0 14 9 23t23 9h576q14 0 23 -9t9 -23zM128 -128h1408v1024h-1408v-1024zM512 1088v288q0 14 -9 23t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1280 1088v288q0 14 -9 23 t-23 9h-64q-14 0 -23 -9t-9 -23v-288q0 -14 9 -23t23 -9h64q14 0 23 9t9 23zM1664 1152v-1280q0 -52 -38 -90t-90 -38h-1408q-52 0 -90 38t-38 90v1280q0 52 38 90t90 38h128v96q0 66 47 113t113 47h64q66 0 113 -47t47 -113v-96h384v96q0 66 47 113t113 47h64q66 0 113 -47 t47 -113v-96h128q52 0 90 -38t38 -90z" />
621
  <glyph unicode="&#xf27d;" horiz-adv-x="1792" d="M1709 1018q-10 -236 -332 -651q-333 -431 -562 -431q-142 0 -240 263q-44 160 -132 482q-72 262 -157 262q-18 0 -127 -76l-77 98q24 21 108 96.5t130 115.5q156 138 241 146q95 9 153 -55.5t81 -203.5q44 -287 66 -373q55 -249 120 -249q51 0 154 161q101 161 109 246 q13 139 -109 139q-57 0 -121 -26q120 393 459 382q251 -8 236 -326z" />
622
  <glyph unicode="&#xf27e;" d="M0 1408h1536v-1536h-1536v1536zM1085 293l-221 631l221 297h-634l221 -297l-221 -631l317 -304z" />
623
  <glyph unicode="&#xf280;" d="M0 1408h1536v-1536h-1536v1536zM908 1088l-12 -33l75 -83l-31 -114l25 -25l107 57l107 -57l25 25l-31 114l75 83l-12 33h-95l-53 96h-32l-53 -96h-95zM641 925q32 0 44.5 -16t11.5 -63l174 21q0 55 -17.5 92.5t-50.5 56t-69 25.5t-85 7q-133 0 -199 -57.5t-66 -182.5v-72 h-96v-128h76q20 0 20 -8v-382q0 -14 -5 -20t-18 -7l-73 -7v-88h448v86l-149 14q-6 1 -8.5 1.5t-3.5 2.5t-0.5 4t1 7t0.5 10v387h191l38 128h-231q-6 0 -2 6t4 9v80q0 27 1.5 40.5t7.5 28t19.5 20t36.5 5.5zM1248 96v86l-54 9q-7 1 -9.5 2.5t-2.5 3t1 7.5t1 12v520h-275 l-23 -101l83 -22q23 -7 23 -27v-370q0 -14 -6 -18.5t-20 -6.5l-70 -9v-86h352z" />
624
+ <glyph unicode="&#xf281;" horiz-adv-x="1792" d="M1792 690q0 -58 -29.5 -105.5t-79.5 -72.5q12 -46 12 -96q0 -155 -106.5 -287t-290.5 -208.5t-400 -76.5t-399.5 76.5t-290 208.5t-106.5 287q0 47 11 94q-51 25 -82 73.5t-31 106.5q0 82 58 140.5t141 58.5q85 0 145 -63q218 152 515 162l116 521q3 13 15 21t26 5 l369 -81q18 37 54 59.5t79 22.5q62 0 106 -43.5t44 -105.5t-44 -106t-106 -44t-105.5 43.5t-43.5 105.5l-334 74l-104 -472q300 -9 519 -160q58 61 143 61q83 0 141 -58.5t58 -140.5zM418 491q0 -62 43.5 -106t105.5 -44t106 44t44 106t-44 105.5t-106 43.5q-61 0 -105 -44 t-44 -105zM1228 136q11 11 11 26t-11 26q-10 10 -25 10t-26 -10q-41 -42 -121 -62t-160 -20t-160 20t-121 62q-11 10 -26 10t-25 -10q-11 -10 -11 -25.5t11 -26.5q43 -43 118.5 -68t122.5 -29.5t91 -4.5t91 4.5t122.5 29.5t118.5 68zM1225 341q62 0 105.5 44t43.5 106 q0 61 -44 105t-105 44q-62 0 -106 -43.5t-44 -105.5t44 -106t106 -44z" />
625
+ <glyph unicode="&#xf282;" horiz-adv-x="1792" d="M69 741h1q16 126 58.5 241.5t115 217t167.5 176t223.5 117.5t276.5 43q231 0 414 -105.5t294 -303.5q104 -187 104 -442v-188h-1125q1 -111 53.5 -192.5t136.5 -122.5t189.5 -57t213 -3t208 46.5t173.5 84.5v-377q-92 -55 -229.5 -92t-312.5 -38t-316 53 q-189 73 -311.5 249t-124.5 372q-3 242 111 412t325 268q-48 -60 -78 -125.5t-46 -159.5h635q8 77 -8 140t-47 101.5t-70.5 66.5t-80.5 41t-75 20.5t-56 8.5l-22 1q-135 -5 -259.5 -44.5t-223.5 -104.5t-176 -140.5t-138 -163.5z" />
626
+ <glyph unicode="&#xf283;" horiz-adv-x="2304" d="M0 32v608h2304v-608q0 -66 -47 -113t-113 -47h-1984q-66 0 -113 47t-47 113zM640 256v-128h384v128h-384zM256 256v-128h256v128h-256zM2144 1408q66 0 113 -47t47 -113v-224h-2304v224q0 66 47 113t113 47h1984z" />
627
+ <glyph unicode="&#xf284;" horiz-adv-x="1792" d="M1549 857q55 0 85.5 -28.5t30.5 -83.5t-34 -82t-91 -27h-136v-177h-25v398h170zM1710 267l-4 -11l-5 -10q-113 -230 -330.5 -366t-474.5 -136q-182 0 -348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71q244 0 454.5 -124t329.5 -338l2 -4l8 -16 q-30 -15 -136.5 -68.5t-163.5 -84.5q-6 -3 -479 -268q384 -183 799 -366zM896 -234q250 0 462.5 132.5t322.5 357.5l-287 129q-72 -140 -206 -222t-292 -82q-151 0 -280 75t-204 204t-75 280t75 280t204 204t280 75t280 -73.5t204 -204.5l280 143q-116 208 -321 329 t-443 121q-119 0 -232.5 -31.5t-209 -87.5t-176.5 -137t-137 -176.5t-87.5 -209t-31.5 -232.5t31.5 -232.5t87.5 -209t137 -176.5t176.5 -137t209 -87.5t232.5 -31.5z" />
628
+ <glyph unicode="&#xf285;" horiz-adv-x="1792" d="M1427 827l-614 386l92 151h855zM405 562l-184 116v858l1183 -743zM1424 697l147 -95v-858l-532 335zM1387 718l-500 -802h-855l356 571z" />
629
+ <glyph unicode="&#xf286;" horiz-adv-x="1792" d="M640 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1152 528v224q0 16 -16 16h-96q-16 0 -16 -16v-224q0 -16 16 -16h96q16 0 16 16zM1664 496v-752h-640v320q0 80 -56 136t-136 56t-136 -56t-56 -136v-320h-640v752q0 16 16 16h96 q16 0 16 -16v-112h128v624q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 6 2.5 9.5t8.5 5t9.5 2t11.5 0t9 -0.5v391q-32 15 -32 50q0 23 16.5 39t38.5 16t38.5 -16t16.5 -39q0 -35 -32 -50v-17q45 10 83 10q21 0 59.5 -7.5t54.5 -7.5 q17 0 47 7.5t37 7.5q16 0 16 -16v-210q0 -15 -35 -21.5t-62 -6.5q-18 0 -54.5 7.5t-55.5 7.5q-40 0 -90 -12v-133q1 0 9 0.5t11.5 0t9.5 -2t8.5 -5t2.5 -9.5v-112h128v112q0 16 16 16h96q16 0 16 -16v-112h128v112q0 16 16 16h96q16 0 16 -16v-624h128v112q0 16 16 16h96 q16 0 16 -16z" />
630
+ <glyph unicode="&#xf287;" horiz-adv-x="2304" d="M2288 731q16 -8 16 -27t-16 -27l-320 -192q-8 -5 -16 -5q-9 0 -16 4q-16 10 -16 28v128h-858q37 -58 83 -165q16 -37 24.5 -55t24 -49t27 -47t27 -34t31.5 -26t33 -8h96v96q0 14 9 23t23 9h320q14 0 23 -9t9 -23v-320q0 -14 -9 -23t-23 -9h-320q-14 0 -23 9t-9 23v96h-96 q-32 0 -61 10t-51 23.5t-45 40.5t-37 46t-33.5 57t-28.5 57.5t-28 60.5q-23 53 -37 81.5t-36 65t-44.5 53.5t-46.5 17h-360q-22 -84 -91 -138t-157 -54q-106 0 -181 75t-75 181t75 181t181 75q88 0 157 -54t91 -138h104q24 0 46.5 17t44.5 53.5t36 65t37 81.5q19 41 28 60.5 t28.5 57.5t33.5 57t37 46t45 40.5t51 23.5t61 10h107q21 57 70 92.5t111 35.5q80 0 136 -56t56 -136t-56 -136t-136 -56q-62 0 -111 35.5t-70 92.5h-107q-17 0 -33 -8t-31.5 -26t-27 -34t-27 -47t-24 -49t-24.5 -55q-46 -107 -83 -165h1114v128q0 18 16 28t32 -1z" />
631
+ <glyph unicode="&#xf288;" horiz-adv-x="1792" d="M1150 774q0 -56 -39.5 -95t-95.5 -39h-253v269h253q56 0 95.5 -39.5t39.5 -95.5zM1329 774q0 130 -91.5 222t-222.5 92h-433v-896h180v269h253q130 0 222 91.5t92 221.5zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348 t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
632
+ <glyph unicode="&#xf289;" horiz-adv-x="2304" d="M1645 438q0 59 -34 106.5t-87 68.5q-7 -45 -23 -92q-7 -24 -27.5 -38t-44.5 -14q-12 0 -24 3q-31 10 -45 38.5t-4 58.5q23 71 23 143q0 123 -61 227.5t-166 165.5t-228 61q-134 0 -247 -73t-167 -194q108 -28 188 -106q22 -23 22 -55t-22 -54t-54 -22t-55 22 q-75 75 -180 75q-106 0 -181 -74.5t-75 -180.5t75 -180.5t181 -74.5h1046q79 0 134.5 55.5t55.5 133.5zM1798 438q0 -142 -100.5 -242t-242.5 -100h-1046q-169 0 -289 119.5t-120 288.5q0 153 100 267t249 136q62 184 221 298t354 114q235 0 408.5 -158.5t196.5 -389.5 q116 -25 192.5 -118.5t76.5 -214.5zM2048 438q0 -175 -97 -319q-23 -33 -64 -33q-24 0 -43 13q-26 17 -32 48.5t12 57.5q71 104 71 233t-71 233q-18 26 -12 57t32 49t57.5 11.5t49.5 -32.5q97 -142 97 -318zM2304 438q0 -244 -134 -443q-23 -34 -64 -34q-23 0 -42 13 q-26 18 -32.5 49t11.5 57q108 164 108 358q0 195 -108 357q-18 26 -11.5 57.5t32.5 48.5q26 18 57 12t49 -33q134 -198 134 -442z" />
633
+ <glyph unicode="&#xf28a;" d="M1500 -13q0 -89 -63 -152.5t-153 -63.5t-153.5 63.5t-63.5 152.5q0 90 63.5 153.5t153.5 63.5t153 -63.5t63 -153.5zM1267 268q-115 -15 -192.5 -102.5t-77.5 -205.5q0 -74 33 -138q-146 -78 -379 -78q-109 0 -201 21t-153.5 54.5t-110.5 76.5t-76 85t-44.5 83 t-23.5 66.5t-6 39.5q0 19 4.5 42.5t18.5 56t36.5 58t64 43.5t94.5 18t94 -17.5t63 -41t35.5 -53t17.5 -49t4 -33.5q0 -34 -23 -81q28 -27 82 -42t93 -17l40 -1q115 0 190 51t75 133q0 26 -9 48.5t-31.5 44.5t-49.5 41t-74 44t-93.5 47.5t-119.5 56.5q-28 13 -43 20 q-116 55 -187 100t-122.5 102t-72 125.5t-20.5 162.5q0 78 20.5 150t66 137.5t112.5 114t166.5 77t221.5 28.5q120 0 220 -26t164.5 -67t109.5 -94t64 -105.5t19 -103.5q0 -46 -15 -82.5t-36.5 -58t-48.5 -36t-49 -19.5t-39 -5h-8h-32t-39 5t-44 14t-41 28t-37 46t-24 70.5 t-10 97.5q-15 16 -59 25.5t-81 10.5l-37 1q-68 0 -117.5 -31t-70.5 -70t-21 -76q0 -24 5 -43t24 -46t53 -51t97 -53.5t150 -58.5q76 -25 138.5 -53.5t109 -55.5t83 -59t60.5 -59.5t41 -62.5t26.5 -62t14.5 -63.5t6 -62t1 -62.5z" />
634
+ <glyph unicode="&#xf28b;" d="M704 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1152 352v576q0 14 -9 23t-23 9h-256q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h256q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103 t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
635
+ <glyph unicode="&#xf28c;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM864 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h192q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-192z" />
636
+ <glyph unicode="&#xf28d;" d="M1088 352v576q0 14 -9 23t-23 9h-576q-14 0 -23 -9t-9 -23v-576q0 -14 9 -23t23 -9h576q14 0 23 9t9 23zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
637
+ <glyph unicode="&#xf28e;" d="M768 1408q209 0 385.5 -103t279.5 -279.5t103 -385.5t-103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103zM768 96q148 0 273 73t198 198t73 273t-73 273t-198 198t-273 73t-273 -73t-198 -198t-73 -273 t73 -273t198 -198t273 -73zM480 320q-14 0 -23 9t-9 23v576q0 14 9 23t23 9h576q14 0 23 -9t9 -23v-576q0 -14 -9 -23t-23 -9h-576z" />
638
+ <glyph unicode="&#xf290;" horiz-adv-x="1792" d="M1757 128l35 -313q3 -28 -16 -50q-19 -21 -48 -21h-1664q-29 0 -48 21q-19 22 -16 50l35 313h1722zM1664 967l86 -775h-1708l86 775q3 24 21 40.5t43 16.5h256v-128q0 -53 37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5v128h384v-128q0 -53 37.5 -90.5t90.5 -37.5 t90.5 37.5t37.5 90.5v128h256q25 0 43 -16.5t21 -40.5zM1280 1152v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 106 -75 181t-181 75t-181 -75t-75 -181v-256q0 -26 -19 -45t-45 -19t-45 19t-19 45v256q0 159 112.5 271.5t271.5 112.5t271.5 -112.5t112.5 -271.5z" />
639
+ <glyph unicode="&#xf291;" horiz-adv-x="2048" d="M1920 768q53 0 90.5 -37.5t37.5 -90.5t-37.5 -90.5t-90.5 -37.5h-15l-115 -662q-8 -46 -44 -76t-82 -30h-1280q-46 0 -82 30t-44 76l-115 662h-15q-53 0 -90.5 37.5t-37.5 90.5t37.5 90.5t90.5 37.5h1792zM485 -32q26 2 43.5 22.5t15.5 46.5l-32 416q-2 26 -22.5 43.5 t-46.5 15.5t-43.5 -22.5t-15.5 -46.5l32 -416q2 -25 20.5 -42t43.5 -17h5zM896 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1280 32v416q0 26 -19 45t-45 19t-45 -19t-19 -45v-416q0 -26 19 -45t45 -19t45 19t19 45zM1632 27l32 416 q2 26 -15.5 46.5t-43.5 22.5t-46.5 -15.5t-22.5 -43.5l-32 -416q-2 -26 15.5 -46.5t43.5 -22.5h5q25 0 43.5 17t20.5 42zM476 1244l-93 -412h-132l101 441q19 88 89 143.5t160 55.5h167q0 26 19 45t45 19h384q26 0 45 -19t19 -45h167q90 0 160 -55.5t89 -143.5l101 -441 h-132l-93 412q-11 44 -45.5 72t-79.5 28h-167q0 -26 -19 -45t-45 -19h-384q-26 0 -45 19t-19 45h-167q-45 0 -79.5 -28t-45.5 -72z" />
640
+ <glyph unicode="&#xf292;" horiz-adv-x="1792" d="M991 512l64 256h-254l-64 -256h254zM1759 1016l-56 -224q-7 -24 -31 -24h-327l-64 -256h311q15 0 25 -12q10 -14 6 -28l-56 -224q-5 -24 -31 -24h-327l-81 -328q-7 -24 -31 -24h-224q-16 0 -26 12q-9 12 -6 28l78 312h-254l-81 -328q-7 -24 -31 -24h-225q-15 0 -25 12 q-9 12 -6 28l78 312h-311q-15 0 -25 12q-9 12 -6 28l56 224q7 24 31 24h327l64 256h-311q-15 0 -25 12q-10 14 -6 28l56 224q5 24 31 24h327l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h254l81 328q7 24 32 24h224q15 0 25 -12q9 -12 6 -28l-78 -312h311 q15 0 25 -12q9 -12 6 -28z" />
641
+ <glyph unicode="&#xf293;" d="M841 483l148 -148l-149 -149zM840 1094l149 -149l-148 -148zM710 -130l464 464l-306 306l306 306l-464 464v-611l-255 255l-93 -93l320 -321l-320 -321l93 -93l255 255v-611zM1429 640q0 -209 -32 -365.5t-87.5 -257t-140.5 -162.5t-181.5 -86.5t-219.5 -24.5 t-219.5 24.5t-181.5 86.5t-140.5 162.5t-87.5 257t-32 365.5t32 365.5t87.5 257t140.5 162.5t181.5 86.5t219.5 24.5t219.5 -24.5t181.5 -86.5t140.5 -162.5t87.5 -257t32 -365.5z" />
642
+ <glyph unicode="&#xf294;" horiz-adv-x="1024" d="M596 113l173 172l-173 172v-344zM596 823l173 172l-173 172v-344zM628 640l356 -356l-539 -540v711l-297 -296l-108 108l372 373l-372 373l108 108l297 -296v711l539 -540z" />
643
+ <glyph unicode="&#xf295;" d="M1280 256q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM512 1024q0 52 -38 90t-90 38t-90 -38t-38 -90t38 -90t90 -38t90 38t38 90zM1536 256q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5t271.5 -112.5 t112.5 -271.5zM1440 1344q0 -20 -13 -38l-1056 -1408q-19 -26 -51 -26h-160q-26 0 -45 19t-19 45q0 20 13 38l1056 1408q19 26 51 26h160q26 0 45 -19t19 -45zM768 1024q0 -159 -112.5 -271.5t-271.5 -112.5t-271.5 112.5t-112.5 271.5t112.5 271.5t271.5 112.5 t271.5 -112.5t112.5 -271.5z" />
644
+ <glyph unicode="&#xf296;" horiz-adv-x="1792" d="M104 830l792 -1015l-868 630q-18 13 -25 34.5t0 42.5l101 308v0zM566 830h660l-330 -1015v0zM368 1442l198 -612h-462l198 612q8 23 33 23t33 -23zM1688 830l101 -308q7 -21 0 -42.5t-25 -34.5l-868 -630l792 1015v0zM1688 830h-462l198 612q8 23 33 23t33 -23z" />
645
+ <glyph unicode="&#xf297;" horiz-adv-x="1792" d="M384 704h160v224h-160v-224zM1221 372v92q-104 -36 -243 -38q-135 -1 -259.5 46.5t-220.5 122.5l1 -96q88 -80 212 -128.5t272 -47.5q129 0 238 49zM640 704h640v224h-640v-224zM1792 736q0 -187 -99 -352q89 -102 89 -229q0 -157 -129.5 -268t-313.5 -111 q-122 0 -225 52.5t-161 140.5q-19 -1 -57 -1t-57 1q-58 -88 -161 -140.5t-225 -52.5q-184 0 -313.5 111t-129.5 268q0 127 89 229q-99 165 -99 352q0 209 120 385.5t326.5 279.5t449.5 103t449.5 -103t326.5 -279.5t120 -385.5z" />
646
+ <glyph unicode="&#xf298;" d="M515 625v-128h-252v128h252zM515 880v-127h-252v127h252zM1273 369v-128h-341v128h341zM1273 625v-128h-672v128h672zM1273 880v-127h-672v127h672zM1408 20v1240q0 8 -6 14t-14 6h-32l-378 -256l-210 171l-210 -171l-378 256h-32q-8 0 -14 -6t-6 -14v-1240q0 -8 6 -14 t14 -6h1240q8 0 14 6t6 14zM553 1130l185 150h-406zM983 1130l221 150h-406zM1536 1260v-1240q0 -62 -43 -105t-105 -43h-1240q-62 0 -105 43t-43 105v1240q0 62 43 105t105 43h1240q62 0 105 -43t43 -105z" />
647
+ <glyph unicode="&#xf299;" horiz-adv-x="1792" d="M896 720q-104 196 -160 278q-139 202 -347 318q-34 19 -70 36q-89 40 -94 32t34 -38l39 -31q62 -43 112.5 -93.5t94.5 -116.5t70.5 -113t70.5 -131q9 -17 13 -25q44 -84 84 -153t98 -154t115.5 -150t131 -123.5t148.5 -90.5q153 -66 154 -60q1 3 -49 37q-53 36 -81 57 q-77 58 -179 211t-185 310zM549 177q-76 60 -132.5 125t-98 143.5t-71 154.5t-58.5 186t-52 209t-60.5 252t-76.5 289q273 0 497.5 -36t379 -92t271 -144.5t185.5 -172.5t110 -198.5t56 -199.5t12.5 -198.5t-9.5 -173t-20 -143.5t-13 -107l323 -327h-104l-281 285 q-22 -2 -91.5 -14t-121.5 -19t-138 -6t-160.5 17t-167.5 59t-179 111z" />
648
+ <glyph unicode="&#xf29a;" horiz-adv-x="1792" d="M1374 879q-6 26 -28.5 39.5t-48.5 7.5q-261 -62 -401 -62t-401 62q-26 6 -48.5 -7.5t-28.5 -39.5t7.5 -48.5t39.5 -28.5q194 -46 303 -58q-2 -158 -15.5 -269t-26.5 -155.5t-41 -115.5l-9 -21q-10 -25 1 -49t36 -34q9 -4 23 -4q44 0 60 41l8 20q54 139 71 259h42 q17 -120 71 -259l8 -20q16 -41 60 -41q14 0 23 4q25 10 36 34t1 49l-9 21q-28 71 -41 115.5t-26.5 155.5t-15.5 269q109 12 303 58q26 6 39.5 28.5t7.5 48.5zM1024 1024q0 53 -37.5 90.5t-90.5 37.5t-90.5 -37.5t-37.5 -90.5t37.5 -90.5t90.5 -37.5t90.5 37.5t37.5 90.5z M1600 640q0 -143 -55.5 -273.5t-150 -225t-225 -150t-273.5 -55.5t-273.5 55.5t-225 150t-150 225t-55.5 273.5t55.5 273.5t150 225t225 150t273.5 55.5t273.5 -55.5t225 -150t150 -225t55.5 -273.5zM896 1408q-156 0 -298 -61t-245 -164t-164 -245t-61 -298t61 -298 t164 -245t245 -164t298 -61t298 61t245 164t164 245t61 298t-61 298t-164 245t-245 164t-298 61zM1792 640q0 -182 -71 -348t-191 -286t-286 -191t-348 -71t-348 71t-286 191t-191 286t-71 348t71 348t191 286t286 191t348 71t348 -71t286 -191t191 -286t71 -348z" />
649
+ <glyph unicode="&#xf29b;" d="M1438 723q34 -35 29 -82l-44 -551q-4 -42 -34.5 -70t-71.5 -28q-6 0 -9 1q-44 3 -72.5 36.5t-25.5 77.5l35 429l-143 -8q55 -113 55 -240q0 -216 -148 -372l-137 137q91 101 91 235q0 145 -102.5 248t-247.5 103q-134 0 -236 -92l-137 138q120 114 284 141l264 300 l-149 87l-181 -161q-33 -30 -77 -27.5t-73 35.5t-26.5 77t34.5 73l239 213q26 23 60 26.5t64 -14.5l488 -283q36 -21 48 -68q17 -67 -26 -117l-205 -232l371 20q49 3 83 -32zM1240 1180q-74 0 -126 52t-52 126t52 126t126 52t126.5 -52t52.5 -126t-52.5 -126t-126.5 -52z M613 -62q106 0 196 61l139 -139q-146 -116 -335 -116q-148 0 -273.5 73t-198.5 198t-73 273q0 188 116 336l139 -139q-60 -88 -60 -197q0 -145 102.5 -247.5t247.5 -102.5z" />
650
+ <glyph unicode="&#xf29c;" d="M880 336v-160q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v160q0 14 9 23t23 9h160q14 0 23 -9t9 -23zM1136 832q0 -50 -15 -90t-45.5 -69t-52 -44t-59.5 -36q-32 -18 -46.5 -28t-26 -24t-11.5 -29v-32q0 -14 -9 -23t-23 -9h-160q-14 0 -23 9t-9 23v68q0 35 10.5 64.5 t24 47.5t39 35.5t41 25.5t44.5 21q53 25 75 43t22 49q0 42 -43.5 71.5t-95.5 29.5q-56 0 -95 -27q-29 -20 -80 -83q-9 -12 -25 -12q-11 0 -19 6l-108 82q-10 7 -12 20t5 23q122 192 349 192q129 0 238.5 -89.5t109.5 -214.5zM768 1280q-130 0 -248.5 -51t-204 -136.5 t-136.5 -204t-51 -248.5t51 -248.5t136.5 -204t204 -136.5t248.5 -51t248.5 51t204 136.5t136.5 204t51 248.5t-51 248.5t-136.5 204t-204 136.5t-248.5 51zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5 t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
651
+ <glyph unicode="&#xf29d;" horiz-adv-x="1408" d="M366 1225q-64 0 -110 45.5t-46 110.5q0 64 46 109.5t110 45.5t109.5 -45.5t45.5 -109.5q0 -65 -45.5 -110.5t-109.5 -45.5zM917 583q0 -50 -30 -67.5t-63.5 -6.5t-47.5 34l-367 438q-7 12 -14 15.5t-11 1.5l-3 -3q-7 -8 4 -21l122 -139l1 -354l-161 -457 q-67 -192 -92 -234q-16 -26 -28 -32q-50 -26 -103 -1q-29 13 -41.5 43t-9.5 57q2 17 197 618l5 416l-85 -164l35 -222q4 -24 -1 -42t-14 -27.5t-19 -16t-17 -7.5l-7 -2q-19 -3 -34.5 3t-24 16t-14 22t-7.5 19.5t-2 9.5l-46 299l211 381q23 34 113 34q75 0 107 -40l424 -521 q7 -5 14 -17l3 -3l-1 -1q7 -13 7 -29zM514 433q43 -113 88.5 -225t69.5 -168l24 -55q36 -93 42 -125q11 -70 -36 -97q-35 -22 -66 -16t-51 22t-29 35h-1q-6 16 -8 25l-124 351zM1338 -159q31 -49 31 -57q0 -5 -3 -7q-9 -5 -14.5 0.5t-15.5 26t-16 30.5q-114 172 -423 661 q3 -1 7 1t7 4l3 2q11 9 11 17z" />
652
+ <glyph unicode="&#xf29e;" horiz-adv-x="2304" d="M504 542h171l-1 265zM1530 641q0 87 -50.5 140t-146.5 53h-54v-388h52q91 0 145 57t54 138zM956 1018l1 -756q0 -14 -9.5 -24t-23.5 -10h-216q-14 0 -23.5 10t-9.5 24v62h-291l-55 -81q-10 -15 -28 -15h-267q-21 0 -30.5 18t3.5 35l556 757q9 14 27 14h332q14 0 24 -10 t10 -24zM1783 641q0 -193 -125.5 -303t-324.5 -110h-270q-14 0 -24 10t-10 24v756q0 14 10 24t24 10h268q200 0 326 -109t126 -302zM1939 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5 t-7.5 60t-20 91.5t-41 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2123 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-45 -108t-74 -102.5h-51q38 45 66.5 104.5t41.5 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5 h43q41 -47 72 -107t45.5 -111.5t23 -96t10.5 -70.5zM2304 640q0 -11 -0.5 -29t-8 -71.5t-21.5 -102t-44.5 -108t-73.5 -102.5h-51q38 45 66 104.5t41 112t21 98t9 72.5l1 27q0 8 -0.5 22.5t-7.5 60t-19.5 91.5t-40.5 111.5t-66 124.5h43q41 -47 72 -107t45.5 -111.5t23 -96 t9.5 -70.5z" />
653
+ <glyph unicode="&#xf2a0;" horiz-adv-x="1408" d="M617 -153q0 11 -13 58t-31 107t-20 69q-1 4 -5 26.5t-8.5 36t-13.5 21.5q-15 14 -51 14q-23 0 -70 -5.5t-71 -5.5q-34 0 -47 11q-6 5 -11 15.5t-7.5 20t-6.5 24t-5 18.5q-37 128 -37 255t37 255q1 4 5 18.5t6.5 24t7.5 20t11 15.5q13 11 47 11q24 0 71 -5.5t70 -5.5 q36 0 51 14q9 8 13.5 21.5t8.5 36t5 26.5q2 9 20 69t31 107t13 58q0 22 -43.5 52.5t-75.5 42.5q-20 8 -45 8q-34 0 -98 -18q-57 -17 -96.5 -40.5t-71 -66t-46 -70t-45.5 -94.5q-6 -12 -9 -19q-49 -107 -68 -216t-19 -244t19 -244t68 -216q56 -122 83 -161q63 -91 179 -127 l6 -2q64 -18 98 -18q25 0 45 8q32 12 75.5 42.5t43.5 52.5zM776 760q-26 0 -45 19t-19 45.5t19 45.5q37 37 37 90q0 52 -37 91q-19 19 -19 45t19 45t45 19t45 -19q75 -75 75 -181t-75 -181q-21 -19 -45 -19zM957 579q-27 0 -45 19q-19 19 -19 45t19 45q112 114 112 272 t-112 272q-19 19 -19 45t19 45t45 19t45 -19q150 -150 150 -362t-150 -362q-18 -19 -45 -19zM1138 398q-27 0 -45 19q-19 19 -19 45t19 45q90 91 138.5 208t48.5 245t-48.5 245t-138.5 208q-19 19 -19 45t19 45t45 19t45 -19q109 -109 167 -249t58 -294t-58 -294t-167 -249 q-18 -19 -45 -19z" />
654
+ <glyph unicode="&#xf2a1;" horiz-adv-x="2176" d="M192 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM704 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 352 q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 352q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1472 864q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 864 q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM1984 1376q-66 0 -113 -47t-47 -113t47 -113t113 -47t113 47t47 113t-47 113t-113 47zM384 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 192q0 -80 -56 -136 t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM384 1216q0 -80 -56 -136t-136 -56 t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 192q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM896 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 192q0 -80 -56 -136t-136 -56t-136 56 t-56 136t56 136t136 56t136 -56t56 -136zM1664 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM2176 704q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136zM1664 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136 t56 136t136 56t136 -56t56 -136zM2176 1216q0 -80 -56 -136t-136 -56t-136 56t-56 136t56 136t136 56t136 -56t56 -136z" />
655
+ <glyph unicode="&#xf2a2;" horiz-adv-x="1792" d="M128 -192q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM320 0q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45zM365 365l256 -256l-90 -90l-256 256zM704 384q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45t45 19t45 -19t19 -45z M1411 704q0 -59 -11.5 -108.5t-37.5 -93.5t-44 -67.5t-53 -64.5q-31 -35 -45.5 -54t-33.5 -50t-26.5 -64t-7.5 -74q0 -159 -112.5 -271.5t-271.5 -112.5q-26 0 -45 19t-19 45t19 45t45 19q106 0 181 75t75 181q0 57 11.5 105.5t37 91t43.5 66.5t52 63q40 46 59.5 72 t37.5 74.5t18 103.5q0 185 -131.5 316.5t-316.5 131.5t-316.5 -131.5t-131.5 -316.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 117 45.5 223.5t123 184t184 123t223.5 45.5t223.5 -45.5t184 -123t123 -184t45.5 -223.5zM896 576q0 -26 -19 -45t-45 -19t-45 19t-19 45t19 45 t45 19t45 -19t19 -45zM1184 704q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 93 -65.5 158.5t-158.5 65.5q-92 0 -158 -65.5t-66 -158.5q0 -26 -19 -45t-45 -19t-45 19t-19 45q0 146 103 249t249 103t249 -103t103 -249zM1578 993q10 -25 -1 -49t-36 -34q-9 -4 -23 -4 q-19 0 -35.5 11t-23.5 30q-68 178 -224 295q-21 16 -25 42t12 47q17 21 43 25t47 -12q183 -137 266 -351zM1788 1074q9 -25 -1.5 -49t-35.5 -34q-11 -4 -23 -4q-44 0 -60 41q-92 238 -297 393q-22 16 -25.5 42t12.5 47q16 22 42 25.5t47 -12.5q235 -175 341 -449z" />
656
+ <glyph unicode="&#xf2a3;" horiz-adv-x="2304" d="M1032 576q-59 2 -84 55q-17 34 -48 53.5t-68 19.5q-53 0 -90.5 -37.5t-37.5 -90.5q0 -56 36 -89l10 -8q34 -31 82 -31q37 0 68 19.5t48 53.5q25 53 84 55zM1600 704q0 56 -36 89l-10 8q-34 31 -82 31q-37 0 -68 -19.5t-48 -53.5q-25 -53 -84 -55q59 -2 84 -55 q17 -34 48 -53.5t68 -19.5q53 0 90.5 37.5t37.5 90.5zM1174 925q-17 -35 -55 -48t-73 4q-62 31 -134 31q-51 0 -99 -17q3 0 9.5 0.5t9.5 0.5q92 0 170.5 -50t118.5 -133q17 -36 3.5 -73.5t-49.5 -54.5q-18 -9 -39 -9q21 0 39 -9q36 -17 49.5 -54.5t-3.5 -73.5 q-40 -83 -118.5 -133t-170.5 -50h-6q-16 2 -44 4l-290 27l-239 -120q-14 -7 -29 -7q-40 0 -57 35l-160 320q-11 23 -4 47.5t29 37.5l209 119l148 267q17 155 91.5 291.5t195.5 236.5q31 25 70.5 21.5t64.5 -34.5t21.5 -70t-34.5 -65q-70 -59 -117 -128q123 84 267 101 q40 5 71.5 -19t35.5 -64q5 -40 -19 -71.5t-64 -35.5q-84 -10 -159 -55q46 10 99 10q115 0 218 -50q36 -18 49 -55.5t-5 -73.5zM2137 1085l160 -320q11 -23 4 -47.5t-29 -37.5l-209 -119l-148 -267q-17 -155 -91.5 -291.5t-195.5 -236.5q-26 -22 -61 -22q-45 0 -74 35 q-25 31 -21.5 70t34.5 65q70 59 117 128q-123 -84 -267 -101q-4 -1 -12 -1q-36 0 -63.5 24t-31.5 60q-5 40 19 71.5t64 35.5q84 10 159 55q-46 -10 -99 -10q-115 0 -218 50q-36 18 -49 55.5t5 73.5q17 35 55 48t73 -4q62 -31 134 -31q51 0 99 17q-3 0 -9.5 -0.5t-9.5 -0.5 q-92 0 -170.5 50t-118.5 133q-17 36 -3.5 73.5t49.5 54.5q18 9 39 9q-21 0 -39 9q-36 17 -49.5 54.5t3.5 73.5q40 83 118.5 133t170.5 50h6h1q14 -2 42 -4l291 -27l239 120q14 7 29 7q40 0 57 -35z" />
657
+ <glyph unicode="&#xf2a4;" horiz-adv-x="1792" d="M1056 704q0 -26 19 -45t45 -19t45 19t19 45q0 146 -103 249t-249 103t-249 -103t-103 -249q0 -26 19 -45t45 -19t45 19t19 45q0 93 66 158.5t158 65.5t158 -65.5t66 -158.5zM835 1280q-117 0 -223.5 -45.5t-184 -123t-123 -184t-45.5 -223.5q0 -26 19 -45t45 -19t45 19 t19 45q0 185 131.5 316.5t316.5 131.5t316.5 -131.5t131.5 -316.5q0 -55 -18 -103.5t-37.5 -74.5t-59.5 -72q-34 -39 -52 -63t-43.5 -66.5t-37 -91t-11.5 -105.5q0 -106 -75 -181t-181 -75q-26 0 -45 -19t-19 -45t19 -45t45 -19q159 0 271.5 112.5t112.5 271.5q0 41 7.5 74 t26.5 64t33.5 50t45.5 54q35 41 53 64.5t44 67.5t37.5 93.5t11.5 108.5q0 117 -45.5 223.5t-123 184t-184 123t-223.5 45.5zM591 561l226 -226l-579 -579q-12 -12 -29 -12t-29 12l-168 168q-12 12 -12 29t12 29zM1612 1524l168 -168q12 -12 12 -29t-12 -30l-233 -233 l-26 -25l-71 -71q-66 153 -195 258l91 91l207 207q13 12 30 12t29 -12z" />
658
+ <glyph unicode="&#xf2a5;" d="M866 1021q0 -27 -13 -94q-11 -50 -31.5 -150t-30.5 -150q-2 -11 -4.5 -12.5t-13.5 -2.5q-20 -2 -31 -2q-58 0 -84 49.5t-26 113.5q0 88 35 174t103 124q28 14 51 14q28 0 36.5 -16.5t8.5 -47.5zM1352 597q0 14 -39 75.5t-52 66.5q-21 8 -34 8q-91 0 -226 -77l-2 2 q3 22 27.5 135t24.5 178q0 233 -242 233q-24 0 -68 -6q-94 -17 -168.5 -89.5t-111.5 -166.5t-37 -189q0 -146 80.5 -225t227.5 -79q25 0 25 -3t-1 -5q-4 -34 -26 -117q-14 -52 -51.5 -101t-82.5 -49q-42 0 -42 47q0 24 10.5 47.5t25 39.5t29.5 28.5t26 20t11 8.5q0 3 -7 10 q-24 22 -58.5 36.5t-65.5 14.5q-35 0 -63.5 -34t-41 -75t-12.5 -75q0 -88 51.5 -142t138.5 -54q82 0 155 53t117.5 126t65.5 153q6 22 15.5 66.5t14.5 66.5q3 12 14 18q118 60 227 60q48 0 127 -18q1 -1 4 -1q5 0 9.5 4.5t4.5 8.5zM1536 1120v-960q0 -119 -84.5 -203.5 t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5t84.5 -203.5z" />
659
+ <glyph unicode="&#xf2a6;" horiz-adv-x="1535" d="M744 1231q0 24 -2 38.5t-8.5 30t-21 23t-37.5 7.5q-39 0 -78 -23q-105 -58 -159 -190.5t-54 -269.5q0 -44 8.5 -85.5t26.5 -80.5t52.5 -62.5t81.5 -23.5q4 0 18 -0.5t20 0t16 3t15 8.5t7 16q16 77 48 231.5t48 231.5q19 91 19 146zM1498 575q0 -7 -7.5 -13.5t-15.5 -6.5 l-6 1q-22 3 -62 11t-72 12.5t-63 4.5q-167 0 -351 -93q-15 -8 -21 -27q-10 -36 -24.5 -105.5t-22.5 -100.5q-23 -91 -70 -179.5t-112.5 -164.5t-154.5 -123t-185 -47q-135 0 -214.5 83.5t-79.5 219.5q0 53 19.5 117t63 116.5t97.5 52.5q38 0 120 -33.5t83 -61.5 q0 -1 -16.5 -12.5t-39.5 -31t-46 -44.5t-39 -61t-16 -74q0 -33 16.5 -53t48.5 -20q45 0 85 31.5t66.5 78t48 105.5t32.5 107t16 90v9q0 2 -3.5 3.5t-8.5 1.5h-10t-10 -0.5t-6 -0.5q-227 0 -352 122.5t-125 348.5q0 108 34.5 221t96 210t156 167.5t204.5 89.5q52 9 106 9 q374 0 374 -360q0 -98 -38 -273t-43 -211l3 -3q101 57 182.5 88t167.5 31q22 0 53 -13q19 -7 80 -102.5t61 -116.5z" />
660
+ <glyph unicode="&#xf2a7;" horiz-adv-x="1664" d="M831 863q32 0 59 -18l222 -148q61 -40 110 -97l146 -170q40 -46 29 -106l-72 -413q-6 -32 -29.5 -53.5t-55.5 -25.5l-527 -56l-352 -32h-9q-39 0 -67.5 28t-28.5 68q0 37 27 64t65 32l260 32h-448q-41 0 -69.5 30t-26.5 71q2 39 32 65t69 26l442 1l-521 64q-41 5 -66 37 t-19 73q6 35 34.5 57.5t65.5 22.5h10l481 -60l-351 94q-38 10 -62 41.5t-18 68.5q6 36 33 58.5t62 22.5q6 0 20 -2l448 -96l217 -37q1 0 3 -0.5t3 -0.5q23 0 30.5 23t-12.5 36l-186 125q-35 23 -42 63.5t18 73.5q27 38 76 38zM761 661l186 -125l-218 37l-5 2l-36 38 l-238 262q-1 1 -2.5 3.5t-2.5 3.5q-24 31 -18.5 70t37.5 64q31 23 68 17.5t64 -33.5l142 -147l-4 -4t-5 -4q-32 -45 -23 -99t55 -85zM1648 1115l15 -266q4 -73 -11 -147l-48 -219q-12 -59 -67 -87l-106 -54q2 62 -39 109l-146 170q-53 61 -117 103l-222 148q-34 23 -76 23 q-51 0 -88 -37l-235 312q-25 33 -18 73.5t41 63.5q33 22 71.5 14t62.5 -40l266 -352l-262 455q-21 35 -10.5 75t47.5 59q35 18 72.5 6t57.5 -46l241 -420l-136 337q-15 35 -4.5 74t44.5 56q37 19 76 6t56 -51l193 -415l101 -196q8 -15 23 -17.5t27 7.5t11 26l-12 224 q-2 41 26 71t69 31q39 0 67 -28.5t30 -67.5z" />
661
+ <glyph unicode="&#xf2a8;" horiz-adv-x="1792" d="M335 180q-2 0 -6 2q-86 57 -168.5 145t-139.5 180q-21 30 -21 69q0 9 2 19t4 18t7 18t8.5 16t10.5 17t10 15t12 15.5t11 14.5q184 251 452 365q-110 198 -110 211q0 19 17 29q116 64 128 64q18 0 28 -16l124 -229q92 19 192 19q266 0 497.5 -137.5t378.5 -369.5 q20 -31 20 -69t-20 -69q-91 -142 -218.5 -253.5t-278.5 -175.5q110 -198 110 -211q0 -20 -17 -29q-116 -64 -127 -64q-19 0 -29 16l-124 229l-64 119l-444 820l7 7q-58 -24 -99 -47q3 -5 127 -234t243 -449t119 -223q0 -7 -9 -9q-13 -3 -72 -3q-57 0 -60 7l-456 841 q-39 -28 -82 -68q24 -43 214 -393.5t190 -354.5q0 -10 -11 -10q-14 0 -82.5 22t-72.5 28l-106 197l-224 413q-44 -53 -78 -106q2 -3 18 -25t23 -34l176 -327q0 -10 -10 -10zM1165 282l49 -91q273 111 450 385q-180 277 -459 389q67 -64 103 -148.5t36 -176.5 q0 -106 -47 -200.5t-132 -157.5zM848 896q0 -20 14 -34t34 -14q86 0 147 -61t61 -147q0 -20 14 -34t34 -14t34 14t14 34q0 126 -89 215t-215 89q-20 0 -34 -14t-14 -34zM1214 961l-9 4l7 -7z" />
662
+ <glyph unicode="&#xf2a9;" horiz-adv-x="1280" d="M1050 430q0 -215 -147 -374q-148 -161 -378 -161q-232 0 -378 161q-147 159 -147 374q0 147 68 270.5t189 196.5t268 73q96 0 182 -31q-32 -62 -39 -126q-66 28 -143 28q-167 0 -280.5 -123t-113.5 -291q0 -170 112.5 -288.5t281.5 -118.5t281 118.5t112 288.5 q0 89 -32 166q66 13 123 49q41 -98 41 -212zM846 619q0 -192 -79.5 -345t-238.5 -253l-14 -1q-29 0 -62 5q83 32 146.5 102.5t99.5 154.5t58.5 189t30 192.5t7.5 178.5q0 69 -3 103q55 -160 55 -326zM791 947v-2q-73 214 -206 440q88 -59 142.5 -186.5t63.5 -251.5z M1035 744q-83 0 -160 75q218 120 290 247q19 37 21 56q-42 -94 -139.5 -166.5t-204.5 -97.5q-35 54 -35 113q0 37 17 79t43 68q46 44 157 74q59 16 106 58.5t74 100.5q74 -105 74 -253q0 -109 -24 -170q-32 -77 -88.5 -130.5t-130.5 -53.5z" />
663
+ <glyph unicode="&#xf2aa;" d="M1050 495q0 78 -28 147q-41 -25 -85 -34q22 -50 22 -114q0 -117 -77 -198.5t-193 -81.5t-193.5 81.5t-77.5 198.5q0 115 78 199.5t193 84.5q53 0 98 -19q4 43 27 87q-60 21 -125 21q-154 0 -257.5 -108.5t-103.5 -263.5t103.5 -261t257.5 -106t257.5 106.5t103.5 260.5z M872 850q2 -24 2 -71q0 -63 -5 -123t-20.5 -132.5t-40.5 -130t-68.5 -106t-100.5 -70.5q21 -3 42 -3h10q219 139 219 411q0 116 -38 225zM872 850q-4 80 -44 171.5t-98 130.5q92 -156 142 -302zM1207 955q0 102 -51 174q-41 -86 -124 -109q-69 -19 -109 -53.5t-40 -99.5 q0 -40 24 -77q74 17 140.5 67t95.5 115q-4 -52 -74.5 -111.5t-138.5 -97.5q52 -52 110 -52q51 0 90 37t60 90q17 43 17 117zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960q119 0 203.5 -84.5 t84.5 -203.5z" />
664
+ <glyph unicode="&#xf2ab;" d="M1279 388q0 22 -22 27q-67 15 -118 59t-80 108q-7 19 -7 25q0 15 19.5 26t43 17t43 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-12 0 -32 -8t-31 -8q-4 0 -12 2q5 95 5 114q0 79 -17 114q-36 78 -103 121.5t-152 43.5q-199 0 -275 -165q-17 -35 -17 -114q0 -19 5 -114 q-4 -2 -14 -2q-12 0 -32 7.5t-30 7.5q-21 0 -38.5 -12t-17.5 -32q0 -21 19.5 -35.5t43 -20.5t43 -17t19.5 -26q0 -6 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -46 137 -68q2 -5 6 -26t11.5 -30.5t23.5 -9.5q12 0 37.5 4.5t39.5 4.5q35 0 67 -15t54 -32.5t57.5 -32.5 t76.5 -15q43 0 79 15t57.5 32.5t53.5 32.5t67 15q14 0 39.5 -4t38.5 -4q16 0 23 10t11 30t6 25q137 22 137 68zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5 t103 -385.5z" />
665
+ <glyph unicode="&#xf2ac;" horiz-adv-x="1664" d="M848 1408q134 1 240.5 -68.5t163.5 -192.5q27 -58 27 -179q0 -47 -9 -191q14 -7 28 -7q18 0 51 13.5t51 13.5q29 0 56 -18t27 -46q0 -32 -31.5 -54t-69 -31.5t-69 -29t-31.5 -47.5q0 -15 12 -43q37 -82 102.5 -150t144.5 -101q28 -12 80 -23q28 -6 28 -35 q0 -70 -219 -103q-7 -11 -11 -39t-14 -46.5t-33 -18.5q-20 0 -62 6.5t-64 6.5q-37 0 -62 -5q-32 -5 -63 -22.5t-58 -38t-58 -40.5t-76 -33.5t-99 -13.5q-52 0 -96.5 13.5t-75 33.5t-57.5 40.5t-58 38t-62 22.5q-26 5 -63 5q-24 0 -65.5 -7.5t-58.5 -7.5q-25 0 -35 18.5 t-14 47.5t-11 40q-219 33 -219 103q0 29 28 35q52 11 80 23q78 32 144.5 101t102.5 150q12 28 12 43q0 28 -31.5 47.5t-69.5 29.5t-69.5 31.5t-31.5 52.5q0 27 26 45.5t55 18.5q15 0 48 -13t53 -13q18 0 32 7q-9 142 -9 190q0 122 27 180q64 137 172 198t264 63z" />
666
+ <glyph unicode="&#xf2ad;" d="M1280 388q0 22 -22 27q-67 14 -118 58t-80 109q-7 14 -7 25q0 15 19.5 26t42.5 17t42.5 20.5t19.5 36.5q0 19 -18.5 31.5t-38.5 12.5q-11 0 -31 -8t-32 -8q-4 0 -12 2q5 63 5 115q0 78 -17 114q-36 78 -102.5 121.5t-152.5 43.5q-198 0 -275 -165q-18 -38 -18 -115 q0 -38 6 -114q-10 -2 -15 -2q-11 0 -31.5 8t-30.5 8q-20 0 -37.5 -12.5t-17.5 -32.5q0 -21 19.5 -35.5t42.5 -20.5t42.5 -17t19.5 -26q0 -11 -7 -25q-64 -138 -198 -167q-22 -5 -22 -27q0 -47 138 -69q2 -5 6 -26t11 -30.5t23 -9.5q13 0 38.5 5t38.5 5q35 0 67.5 -15 t54.5 -32.5t57.5 -32.5t76.5 -15q43 0 79 15t57.5 32.5t54 32.5t67.5 15q13 0 39 -4.5t39 -4.5q15 0 22.5 9.5t11.5 31t5 24.5q138 22 138 69zM1536 1120v-960q0 -119 -84.5 -203.5t-203.5 -84.5h-960q-119 0 -203.5 84.5t-84.5 203.5v960q0 119 84.5 203.5t203.5 84.5h960 q119 0 203.5 -84.5t84.5 -203.5z" />
667
+ <glyph unicode="&#xf2ae;" horiz-adv-x="2304" d="M2304 1536q-69 -46 -125 -92t-89 -81t-59.5 -71.5t-37.5 -57.5t-22 -44.5t-14 -29.5q-10 -18 -35.5 -136.5t-48.5 -164.5q-15 -29 -50 -60.5t-67.5 -50.5t-72.5 -41t-48 -28q-47 -31 -151 -231q-341 14 -630 -158q-92 -53 -303 -179q47 16 86 31t55 22l15 7 q71 27 163 64.5t133.5 53.5t108 34.5t142.5 31.5q186 31 465 -7q1 0 10 -3q11 -6 14 -17t-3 -22l-194 -345q-15 -29 -47 -22q-128 24 -354 24q-146 0 -402 -44.5t-392 -46.5q-82 -1 -149 13t-107 37t-61 40t-33 34l-1 1v2q0 6 6 6q138 0 371 55q192 366 374.5 524t383.5 158 q5 0 14.5 -0.5t38 -5t55 -12t61.5 -24.5t63 -39.5t54 -59t40 -82.5l102 177q2 4 21 42.5t44.5 86.5t61 109.5t84 133.5t100.5 137q66 82 128 141.5t121.5 96.5t92.5 53.5t88 39.5z" />
668
+ <glyph unicode="&#xf2b0;" d="M1322 640q0 -45 -5 -76l-236 14l224 -78q-19 -73 -58 -141l-214 103l177 -158q-44 -61 -107 -108l-157 178l103 -215q-61 -37 -140 -59l-79 228l14 -240q-38 -6 -76 -6t-76 6l14 238l-78 -226q-74 19 -140 59l103 215l-157 -178q-59 43 -108 108l178 158l-214 -104 q-39 69 -58 141l224 79l-237 -14q-5 42 -5 76q0 35 5 77l238 -14l-225 79q19 73 58 140l214 -104l-177 159q46 61 107 108l158 -178l-103 215q67 39 140 58l77 -224l-13 236q36 6 75 6q38 0 76 -6l-14 -237l78 225q74 -19 140 -59l-103 -214l158 178q61 -47 107 -108 l-177 -159l213 104q37 -62 58 -141l-224 -78l237 14q5 -31 5 -77zM1352 640q0 160 -78.5 295.5t-213 214t-292.5 78.5q-119 0 -227 -46.5t-186.5 -125t-124.5 -187.5t-46 -229q0 -119 46 -228t124.5 -187.5t186.5 -125t227 -46.5q158 0 292.5 78.5t213 214t78.5 294.5z M1425 1023v-766l-657 -383l-657 383v766l657 383zM768 -183l708 412v823l-708 411l-708 -411v-823zM1536 1088v-896l-768 -448l-768 448v896l768 448z" />
669
+ <glyph unicode="&#xf2b1;" horiz-adv-x="1664" d="M339 1318h691l-26 -72h-665q-110 0 -188.5 -79t-78.5 -189v-771q0 -95 60.5 -169.5t153.5 -93.5q23 -5 98 -5v-72h-45q-140 0 -239.5 100t-99.5 240v771q0 140 99.5 240t239.5 100zM1190 1536h247l-482 -1294q-23 -61 -40.5 -103.5t-45 -98t-54 -93.5t-64.5 -78.5 t-79.5 -65t-95.5 -41t-116 -18.5v195q163 26 220 182q20 52 20 105q0 54 -20 106l-285 733h228l187 -585zM1664 978v-1111h-795q37 55 45 73h678v1038q0 85 -49.5 155t-129.5 99l25 67q101 -34 163.5 -123.5t62.5 -197.5z" />
670
+ <glyph unicode="&#xf2b2;" horiz-adv-x="1792" d="M852 1227q0 -29 -17 -52.5t-45 -23.5t-45 23.5t-17 52.5t17 52.5t45 23.5t45 -23.5t17 -52.5zM688 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50 -21.5t-20 -51.5v-114q0 -30 20.5 -52t49.5 -22q30 0 50.5 22t20.5 52zM860 -149v114q0 30 -20 51.5t-50 21.5t-50.5 -21.5 t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22q29 0 49.5 22t20.5 52zM1034 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1208 -149v114q0 30 -20.5 51.5t-50.5 21.5t-50.5 -21.5t-20.5 -51.5v-114 q0 -30 20.5 -52t50.5 -22t50.5 22t20.5 52zM1476 535q-84 -160 -232 -259.5t-323 -99.5q-123 0 -229.5 51.5t-178.5 137t-113 197.5t-41 232q0 88 21 174q-104 -175 -104 -390q0 -162 65 -312t185 -251q30 57 91 57q56 0 86 -50q32 50 87 50q56 0 86 -50q32 50 87 50t87 -50 q30 50 86 50q28 0 52.5 -15.5t37.5 -40.5q112 94 177 231.5t73 287.5zM1326 564q0 75 -72 75q-17 0 -47 -6q-95 -19 -149 -19q-226 0 -226 243q0 86 30 204q-83 -127 -83 -275q0 -150 89 -260.5t235 -110.5q111 0 210 70q13 48 13 79zM884 1223q0 50 -32 89.5t-81 39.5 t-81 -39.5t-32 -89.5q0 -51 31.5 -90.5t81.5 -39.5t81.5 39.5t31.5 90.5zM1513 884q0 96 -37.5 179t-113 137t-173.5 54q-77 0 -149 -35t-127 -94q-48 -159 -48 -268q0 -104 45.5 -157t147.5 -53q53 0 142 19q36 6 53 6q51 0 77.5 -28t26.5 -80q0 -26 -4 -46 q75 68 117.5 165.5t42.5 200.5zM1792 667q0 -111 -33.5 -249.5t-93.5 -204.5q-58 -64 -195 -142.5t-228 -104.5l-4 -1v-114q0 -43 -29.5 -75t-72.5 -32q-56 0 -86 50q-32 -50 -87 -50t-87 50q-30 -50 -86 -50q-55 0 -87 50q-30 -50 -86 -50q-47 0 -75 33.5t-28 81.5 q-90 -68 -198 -68q-118 0 -211 80q54 1 106 20q-113 31 -182 127q32 -7 71 -7q89 0 164 46q-192 192 -240 306q-24 56 -24 160q0 57 9 125.5t31.5 146.5t55 141t86.5 105t120 42q59 0 81 -52q19 29 42 54q2 3 12 13t13 16q10 15 23 38t25 42t28 39q87 111 211.5 177 t260.5 66q35 0 62 -4q59 64 146 64q83 0 140 -57q5 -5 5 -12q0 -5 -6 -13.5t-12.5 -16t-16 -17l-10.5 -10.5q17 -6 36 -18t19 -24q0 -6 -16 -25q157 -138 197 -378q25 30 60 30q45 0 100 -49q90 -80 90 -279z" />
671
+ <glyph unicode="&#xf2b3;" d="M917 631q0 33 -6 64h-362v-132h217q-12 -76 -74.5 -120.5t-142.5 -44.5q-99 0 -169 71.5t-70 170.5t70 170.5t169 71.5q93 0 153 -59l104 101q-108 100 -257 100q-160 0 -272 -112.5t-112 -271.5t112 -271.5t272 -112.5q165 0 266.5 105t101.5 270zM1262 585h109v110 h-109v110h-110v-110h-110v-110h110v-110h110v110zM1536 640q0 -209 -103 -385.5t-279.5 -279.5t-385.5 -103t-385.5 103t-279.5 279.5t-103 385.5t103 385.5t279.5 279.5t385.5 103t385.5 -103t279.5 -279.5t103 -385.5z" />
672
+ <glyph unicode="&#xf2b4;" d="M1536 1024v-839q0 -48 -49 -62q-174 -52 -338 -52q-73 0 -215.5 29.5t-227.5 29.5q-164 0 -370 -48v-338h-160v1368q-63 25 -101 81t-38 124q0 91 64 155t155 64t155 -64t64 -155q0 -68 -38 -124t-101 -81v-68q190 44 343 44q99 0 198 -15q14 -2 111.5 -22.5t149.5 -20.5 q77 0 165 18q11 2 80 21t89 19q26 0 45 -19t19 -45z" />
673
+ <glyph unicode="&#xf2b5;" horiz-adv-x="1792" />
674
+ <glyph unicode="&#xf2b6;" horiz-adv-x="1792" />
675
+ <glyph unicode="&#xf2b7;" horiz-adv-x="1792" />
676
+ <glyph unicode="&#xf2b8;" horiz-adv-x="1792" />
677
+ <glyph unicode="&#xf2b9;" horiz-adv-x="1792" />
678
+ <glyph unicode="&#xf2ba;" horiz-adv-x="1792" />
679
+ <glyph unicode="&#xf2bb;" horiz-adv-x="1792" />
680
+ <glyph unicode="&#xf2bc;" horiz-adv-x="1792" />
681
+ <glyph unicode="&#xf2bd;" horiz-adv-x="1792" />
682
+ <glyph unicode="&#xf2be;" horiz-adv-x="1792" />
683
  <glyph unicode="&#xf500;" horiz-adv-x="1792" />
684
  </font>
685
  </defs></svg>
icons/fontawesome/font/fontawesome-webfont.ttf CHANGED
Binary file
icons/fontawesome/font/fontawesome-webfont.woff CHANGED
Binary file
icons/fontawesome/font/fontawesome-webfont.woff2 CHANGED
Binary file
icons/fontawesome/style.css CHANGED
@@ -1,12 +1,12 @@
1
 
2
  @font-face {
3
  font-family: 'sow-fontawesome';
4
- src: url('font/fontawesome-webfont.eot?v=4.4.0');
5
- src: url('font/fontawesome-webfont.eot?#iefix&v=4.4.0') format('embedded-opentype'),
6
- url('font/fontawesome-webfont.woff2?v=4.4.0') format('woff2'),
7
- url('font/fontawesome-webfont.woff?v=4.4.0') format('woff'),
8
- url('font/fontawesome-webfont.ttf?v=4.4.0') format('truetype'),
9
- url('font/fontawesome-webfont.svg?v=4.4.0#fontawesomeregular') format('svg');
10
  font-weight: normal;
11
  font-style: normal;
12
  }
@@ -27,4 +27,4 @@
27
 
28
  .sow-icon-fontawesome[data-sow-icon]:before {
29
  content: attr(data-sow-icon);
30
- }
1
 
2
  @font-face {
3
  font-family: 'sow-fontawesome';
4
+ src: url('font/fontawesome-webfont.eot?v=4.6.3');
5
+ src: url('font/fontawesome-webfont.eot?#iefix&v=4.6.3') format('embedded-opentype'),
6
+ url('font/fontawesome-webfont.woff2?v=4.6.3') format('woff2'),
7
+ url('font/fontawesome-webfont.woff?v=4.6.3') format('woff'),
8
+ url('font/fontawesome-webfont.ttf?v=4.6.3') format('truetype'),
9
+ url('font/fontawesome-webfont.svg?v=4.6.3#fontawesomeregular') format('svg');
10
  font-weight: normal;
11
  font-style: normal;
12
  }
27
 
28
  .sow-icon-fontawesome[data-sow-icon]:before {
29
  content: attr(data-sow-icon);
30
+ }
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
  === SiteOrigin Widgets Bundle ===
2
  Tags: bundle, widget, button, slider, image, carousel, price table, google maps, tinymce, social links
3
  Requires at least: 3.9
4
- Tested up to: 4.6
5
- Stable tag: 1.7.1
6
- Build time: 2016-09-21T16:57:15+02:00
7
  License: GPLv3 or later
8
  Contributors: gpriday, braam-genis
9
 
@@ -51,6 +51,20 @@ The SiteOrigin Widgets Bundle is the perfect platform to build widgets for your
51
 
52
  == Changelog ==
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  = 1.7.1 - 21 September 2016 =
55
  * Fixed case of Maps widget in sidebar causing an error on pages without that sidebar.
56
  * Fixed icon field CSS.
1
  === SiteOrigin Widgets Bundle ===
2
  Tags: bundle, widget, button, slider, image, carousel, price table, google maps, tinymce, social links
3
  Requires at least: 3.9
4
+ Tested up to: 4.7
5
+ Stable tag: 1.7.2
6
+ Build time: 2016-11-10T09:26:59+02:00
7
  License: GPLv3 or later
8
  Contributors: gpriday, braam-genis
9
 
51
 
52
  == Changelog ==
53
 
54
+ = 1.7.2 - 09 November 2016 =
55
+ * Made fixes to pass PHP 7 compatibility checks.
56
+ * Image Widget: Get alt and title text from chosen image.
57
+ * Replaced markup parser with more actively maintained one.
58
+ * Simple Masonry: ensure resize on load
59
+ * Image Grid: Allow 0 as valid spacing value.
60
+ * Editor Widget: Call `WP_Embed::run_shortcode` on Editor widget content
61
+ * Maps: Added missing `typeof` causing maps api not to load properly.
62
+ * Icon: Fixed URL output.
63
+ * Fixed double slash in URLs.
64
+ * Features: Use Measurement fields.
65
+ * Apply modify_form to form arrays created in the constructor.
66
+ * Contact Form: add email default email subject if no subject defined.
67
+
68
  = 1.7.1 - 21 September 2016 =
69
  * Fixed case of Maps widget in sidebar causing an error on pages without that sidebar.
70
  * Fixed icon field CSS.
so-widgets-bundle.php CHANGED
@@ -2,7 +2,7 @@
2
  /*
3
  Plugin Name: SiteOrigin Widgets Bundle
4
  Description: A collection of all widgets, neatly bundled into a single plugin. It's also a framework to code your own widgets on top of.
5
- Version: 1.7.1
6
  Text Domain: so-widgets-bundle
7
  Domain Path: /languages
8
  Author: SiteOrigin
@@ -12,7 +12,7 @@ License: GPL3
12
  License URI: https://www.gnu.org/licenses/gpl-3.0.txt
13
  */
14
 
15
- define('SOW_BUNDLE_VERSION', '1.7.1');
16
  define('SOW_BUNDLE_BASE_FILE', __FILE__);
17
 
18
  // Allow JS suffix to be pre-set
2
  /*
3
  Plugin Name: SiteOrigin Widgets Bundle
4
  Description: A collection of all widgets, neatly bundled into a single plugin. It's also a framework to code your own widgets on top of.
5
+ Version: 1.7.2
6
  Text Domain: so-widgets-bundle
7
  Domain Path: /languages
8
  Author: SiteOrigin
12
  License URI: https://www.gnu.org/licenses/gpl-3.0.txt
13
  */
14
 
15
+ define('SOW_BUNDLE_VERSION', '1.7.2');
16
  define('SOW_BUNDLE_BASE_FILE', __FILE__);
17
 
18
  // Allow JS suffix to be pre-set
widgets/button/button.php CHANGED
@@ -78,29 +78,29 @@ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget {
78
  ),
79
  ),
80
 
81
- 'design' => array(
82
- 'type' => 'section',
83
- 'label' => __('Design and layout', 'so-widgets-bundle'),
84
- 'hide' => true,
85
- 'fields' => array(
86
-
87
- 'width' => array(
88
- 'type' => 'measurement',
89
- 'label' => __( 'Width', 'so-widgets-bundle' ),
90
- 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' )
91
- ),
92
 
93
- 'align' => array(
94
- 'type' => 'select',
95
- 'label' => __('Align', 'so-widgets-bundle'),
96
- 'default' => 'center',
97
- 'options' => array(
98
- 'left' => __('Left', 'so-widgets-bundle'),
99
- 'right' => __('Right', 'so-widgets-bundle'),
100
- 'center' => __('Center', 'so-widgets-bundle'),
101
- 'justify' => __('Justify', 'so-widgets-bundle'),
102
- ),
103
  ),
 
104
 
105
  'theme' => array(
106
  'type' => 'select',
@@ -179,6 +179,12 @@ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget {
179
  'description' => __('An ID attribute allows you to target this button in Javascript.', 'so-widgets-bundle'),
180
  ),
181
 
 
 
 
 
 
 
182
  'title' => array(
183
  'type' => 'text',
184
  'label' => __('Title attribute', 'so-widgets-bundle'),
@@ -200,6 +206,24 @@ class SiteOrigin_Widget_Button_Widget extends SiteOrigin_Widget {
200
  return $instance['design']['theme'];
201
  }
202
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  /**
204
  * Get the variables that we'll be injecting into the less stylesheet.
205
  *
78
  ),
79
  ),
80
 
81
+ 'design' => array(
82
+ 'type' => 'section',
83
+ 'label' => __('Design and layout', 'so-widgets-bundle'),
84
+ 'hide' => true,
85
+ 'fields' => array(
86
+
87
+ 'width' => array(
88
+ 'type' => 'measurement',
89
+ 'label' => __( 'Width', 'so-widgets-bundle' ),
90
+ 'description' => __( 'Leave blank to let the button resize according to content.', 'so-widgets-bundle' )
91
+ ),
92
 
93
+ 'align' => array(
94
+ 'type' => 'select',
95
+ 'label' => __('Align', 'so-widgets-bundle'),
96
+ 'default' => 'center',
97
+ 'options' => array(
98
+ 'left' => __('Left', 'so-widgets-bundle'),
99
+ 'right' => __('Right', 'so-widgets-bundle'),
100
+ 'center' => __('Center', 'so-widgets-bundle'),
101
+ 'justify' => __('Justify', 'so-widgets-bundle'),
 
102
  ),
103
+ ),
104
 
105
  'theme' => array(
106
  'type' => 'select',
179
  'description' => __('An ID attribute allows you to target this button in Javascript.', 'so-widgets-bundle'),
180
  ),
181
 
182
+ 'classes' => array(
183
+ 'type' => 'text',
184
+ 'label' => __('Button Classes', 'so-widgets-bundle'),
185
+ 'description' => __('Additional CSS classes added to the button link.', 'so-widgets-bundle'),
186
+ ),
187
+
188
  'title' => array(
189
  'type' => 'text',
190
  'label' => __('Title attribute', 'so-widgets-bundle'),
206
  return $instance['design']['theme'];
207
  }
208
 
209
+ /**
210
+ * Get the variables for the button widget.
211
+ *
212
+ * @param $instance
213
+ * @param $args
214
+ *
215
+ * @return array
216
+ */
217
+ function get_template_variables( $instance, $args ) {
218
+ $vars = array();
219
+
220
+ if( ! empty( $instance[ 'attributes' ][ 'classes' ] ) ) {
221
+ $vars[ 'classes' ] = explode( ' ', $instance[ 'attributes' ][ 'classes' ] );
222
+ }
223
+
224
+ return $vars;
225
+ }
226
+
227
  /**
228
  * Get the variables that we'll be injecting into the less stylesheet.
229
  *
widgets/button/tpl/default.php CHANGED
@@ -1,12 +1,15 @@
1
  <?php
2
- $classes = array();
 
 
 
3
  if( !empty($instance['design']['hover']) ) $classes[] = 'ow-button-hover';
4
  ?>
5
  <div class="ow-button-base ow-button-align-<?php echo esc_attr($instance['design']['align']) ?>">
6
 
7
  <?php
8
  $button_attributes = array(
9
- 'class' => esc_attr(implode(' ', $classes))
10
  );
11
  if(!empty($instance['new_window'])) $button_attributes['target'] = '_blank';
12
  if(!empty($instance['url'])) $button_attributes['href'] = sow_esc_url($instance['url']);
1
  <?php
2
+ /**
3
+ * @var array $classes
4
+ */
5
+
6
  if( !empty($instance['design']['hover']) ) $classes[] = 'ow-button-hover';
7
  ?>
8
  <div class="ow-button-base ow-button-align-<?php echo esc_attr($instance['design']['align']) ?>">
9
 
10
  <?php
11
  $button_attributes = array(
12
+ 'class' => esc_attr( implode(' ', $classes) )
13
  );
14
  if(!empty($instance['new_window'])) $button_attributes['target'] = '_blank';
15
  if(!empty($instance['url'])) $button_attributes['href'] = sow_esc_url($instance['url']);
widgets/contact/contact.php CHANGED
@@ -173,20 +173,20 @@ class SiteOrigin_Widgets_ContactForm_Widget extends SiteOrigin_Widget {
173
 
174
  'recaptcha' => array(
175
  'type' => 'section',
176
- 'label' => __('Recaptcha', 'so-widgets-bundle'),
177
  'fields' => array(
178
  'use_captcha' => array(
179
  'type' => 'checkbox',
180
- 'label' => __( 'Use Captcha', 'so-widgets-bundle' ),
181
  'default' => false,
182
  ),
183
  'site_key' => array(
184
  'type' => 'text',
185
- 'label' => __( 'ReCaptcha Site Key', 'so-widgets-bundle' ),
186
  ),
187
  'secret_key' => array(
188
  'type' => 'text',
189
- 'label' => __( 'ReCaptcha Secret Key', 'so-widgets-bundle' ),
190
  ),
191
  'theme' => array(
192
  'type' => 'select',
@@ -846,6 +846,11 @@ class SiteOrigin_Widgets_ContactForm_Widget extends SiteOrigin_Widget {
846
  }
847
  }
848
 
 
 
 
 
 
849
  // Add in the default subject prefix
850
  if( !empty( $email_fields['subject'] ) && !empty($instance['settings']['subject_prefix']) ) {
851
  $email_fields['subject'] = $instance['settings']['subject_prefix'] . ' ' . $email_fields['subject'];
173
 
174
  'recaptcha' => array(
175
  'type' => 'section',
176
+ 'label' => __('reCAPTCHA', 'so-widgets-bundle'),
177
  'fields' => array(
178
  'use_captcha' => array(
179
  'type' => 'checkbox',
180
+ 'label' => __( 'Use reCAPTCHA', 'so-widgets-bundle' ),
181
  'default' => false,
182
  ),
183
  'site_key' => array(
184
  'type' => 'text',
185
+ 'label' => __( 'reCAPTCHA Site Key', 'so-widgets-bundle' ),
186
  ),
187
  'secret_key' => array(
188
  'type' => 'text',
189
+ 'label' => __( 'reCAPTCHA Secret Key', 'so-widgets-bundle' ),
190
  ),
191
  'theme' => array(
192
  'type' => 'select',
846
  }
847
  }
848
 
849
+ // Add in the default subject if no subject field is defined in the form at all
850
+ if ( !isset( $email_fields['subject'] ) && !empty($instance['settings']['default_subject']) ) {
851
+ $email_fields['subject'] = $instance['settings']['default_subject'];
852
+ }
853
+
854
  // Add in the default subject prefix
855
  if( !empty( $email_fields['subject'] ) && !empty($instance['settings']['subject_prefix']) ) {
856
  $email_fields['subject'] = $instance['settings']['subject_prefix'] . ' ' . $email_fields['subject'];
widgets/editor/editor.php CHANGED
@@ -61,6 +61,7 @@ class SiteOrigin_Widget_Editor_Widget extends SiteOrigin_Widget {
61
 
62
  // Run some known stuff
63
  if( !empty($GLOBALS['wp_embed']) ) {
 
64
  $instance['text'] = $GLOBALS['wp_embed']->autoembed( $instance['text'] );
65
  }
66
  if (function_exists('wp_make_content_images_responsive')) {
61
 
62
  // Run some known stuff
63
  if( !empty($GLOBALS['wp_embed']) ) {
64
+ $instance['text'] = $GLOBALS['wp_embed']->run_shortcode( $instance['text'] );
65
  $instance['text'] = $GLOBALS['wp_embed']->autoembed( $instance['text'] );
66
  }
67
  if (function_exists('wp_make_content_images_responsive')) {
widgets/features/tpl/default.php CHANGED
@@ -15,7 +15,7 @@ $last_row = floor( ( count($instance['features']) - 1 ) / $instance['per_row'] )
15
  <?php if( !empty( $feature['more_url'] ) && $instance['icon_link'] ) echo '<a href="' . sow_esc_url( $feature['more_url'] ) . '" ' . ( $instance['new_window'] ? 'target="_blank"' : '' ) . '>'; ?>
16
  <div
17
  class="sow-icon-container <?php echo !empty($instance['container_shape']) ? 'sow-container-' . esc_attr($instance['container_shape']) : 'sow-container-none'?>"
18
- style="font-size: <?php echo intval($instance['container_size']) ?>px; color: <?php echo esc_attr($feature['container_color']) ?>; width: <?php echo intval($instance['container_size']) ?>px; height: <?php echo intval($instance['container_size']) ?>px;">
19
  <?php
20
  $icon_styles = array();
21
  if( !empty($feature['icon_image']) ) {
@@ -23,7 +23,7 @@ $last_row = floor( ( count($instance['features']) - 1 ) / $instance['per_row'] )
23
  $attachment = wp_get_attachment_image_src( $feature['icon_image'], $size );
24
  if(!empty($attachment)) {
25
  $icon_styles[] = 'background-image: url(' . sow_esc_url($attachment[0]) . ')';
26
- if(!empty($instance['icon_size'])) $icon_styles[] = 'font-size: '.intval($instance['icon_size']).'px';
27
 
28
  ?><div class="sow-icon-image" style="<?php echo implode('; ', $icon_styles) ?>"></div><?php
29
  }
15
  <?php if( !empty( $feature['more_url'] ) && $instance['icon_link'] ) echo '<a href="' . sow_esc_url( $feature['more_url'] ) . '" ' . ( $instance['new_window'] ? 'target="_blank"' : '' ) . '>'; ?>
16
  <div
17
  class="sow-icon-container <?php echo !empty($instance['container_shape']) ? 'sow-container-' . esc_attr($instance['container_shape']) : 'sow-container-none'?>"
18
+ style="font-size: <?php echo intval($instance['container_size']) . esc_attr( $instance['container_size_unit'] ); ?>; color: <?php echo esc_attr($feature['container_color']) ?>; width: <?php echo intval($instance['container_size']) . esc_attr( $instance['container_size_unit'] ); ?>; height: <?php echo intval($instance['container_size']) . esc_attr( $instance['container_size_unit'] ); ?>;">
19
  <?php
20
  $icon_styles = array();
21
  if( !empty($feature['icon_image']) ) {
23
  $attachment = wp_get_attachment_image_src( $feature['icon_image'], $size );
24
  if(!empty($attachment)) {
25
  $icon_styles[] = 'background-image: url(' . sow_esc_url($attachment[0]) . ')';
26
+ if(!empty($instance['icon_size'])) $icon_styles[] = 'font-size: '.intval($instance['icon_size']) . esc_attr( $instance['icon_size_unit'] );
27
 
28
  ?><div class="sow-icon-image" style="<?php echo implode('; ', $icon_styles) ?>"></div><?php
29
  }
widgets/google-map/google-map.php CHANGED
@@ -202,6 +202,12 @@ class SiteOrigin_Widget_GoogleMap_Widget extends SiteOrigin_Widget {
202
  'always' => __( 'Always', 'so-widgets-bundle' ),
203
  )
204
  ),
 
 
 
 
 
 
205
  )
206
  ),
207
  'styles' => array(
@@ -419,6 +425,7 @@ class SiteOrigin_Widget_GoogleMap_Widget extends SiteOrigin_Widget {
419
  'markers_draggable' => isset( $markers['markers_draggable'] ) ? $markers['markers_draggable'] : '',
420
  'marker_at_center' => !empty( $markers['marker_at_center'] ),
421
  'marker_info_display' => $markers['info_display'],
 
422
  'marker_positions' => isset( $markers['marker_positions'] ) ? $markers['marker_positions'] : '',
423
  'map_name' => ! empty( $styles ) ? $styles['map_name'] : '',
424
  'map_styles' => ! empty( $styles ) ? $styles['styles'] : '',
202
  'always' => __( 'Always', 'so-widgets-bundle' ),
203
  )
204
  ),
205
+ 'info_multiple' => array(
206
+ 'type' => 'checkbox',
207
+ 'label' => __( 'Allow multiple simultaneous Info Windows?', 'so-widgets-bundle' ),
208
+ 'default' => true,
209
+ 'description' => __( 'This setting is ignored when Info Windows are set to always display.' )
210
+ ),
211
  )
212
  ),
213
  'styles' => array(
425
  'markers_draggable' => isset( $markers['markers_draggable'] ) ? $markers['markers_draggable'] : '',
426
  'marker_at_center' => !empty( $markers['marker_at_center'] ),
427
  'marker_info_display' => $markers['info_display'],
428
+ 'marker_info_multiple' => $markers['info_multiple'],
429
  'marker_positions' => isset( $markers['marker_positions'] ) ? $markers['marker_positions'] : '',
430
  'map_name' => ! empty( $styles ) ? $styles['map_name'] : '',
431
  'map_styles' => ! empty( $styles ) ? $styles['styles'] : '',
widgets/google-map/js/js-map.js CHANGED
@@ -155,6 +155,7 @@ sowb.SiteOriginGoogleMap = function($) {
155
  showMarkers: function(markerPositions, map, options) {
156
  if ( markerPositions && markerPositions.length ) {
157
  var geocoder = new google.maps.Geocoder();
 
158
  markerPositions.forEach(
159
  function (mrkr) {
160
  var geocodeMarker = function () {
@@ -179,14 +180,27 @@ sowb.SiteOriginGoogleMap = function($) {
179
  var infoDisplay = options.markerInfoDisplay;
180
  infoWindowOptions.disableAutoPan = infoDisplay == 'always';
181
  var infoWindow = new google.maps.InfoWindow(infoWindowOptions);
 
 
182
  if (infoDisplay == 'always') {
 
183
  infoWindow.open(map, marker);
184
- marker.addListener('click', function () {
185
- infoWindow.open(map, marker);
186
- });
187
- } else {
188
- marker.addListener(infoDisplay, function () {
189
- infoWindow.open(map, marker);
 
 
 
 
 
 
 
 
 
 
190
  });
191
  }
192
  }
@@ -194,11 +208,11 @@ sowb.SiteOriginGoogleMap = function($) {
194
  //try again please
195
  setTimeout(geocodeMarker, Math.random() * 1000, mrkr);
196
  }
197
- });
198
- };
199
  //set random delays of 0 - 1 seconds when geocoding markers to try avoid hitting the query limit
200
  setTimeout(geocodeMarker, Math.random() * 1000, mrkr);
201
- }
202
  );
203
  }
204
  },
@@ -352,7 +366,7 @@ function soGoogleMapInitialize() {
352
 
353
  jQuery(function ($) {
354
  var mapOptions = $( '.sow-google-map-canvas' ).data( 'options' );
355
- var mapsApiLoaded = typeof window.google !== 'undefined' && window.google.maps !== 'undefined';
356
  var isLoaded = function (element) {
357
  var lib = window.google.maps[element];
358
  return window.google.maps.hasOwnProperty(element) && typeof lib !== 'undefined' && lib !== null;
155
  showMarkers: function(markerPositions, map, options) {
156
  if ( markerPositions && markerPositions.length ) {
157
  var geocoder = new google.maps.Geocoder();
158
+ this.infoWindows = [];
159
  markerPositions.forEach(
160
  function (mrkr) {
161
  var geocodeMarker = function () {
180
  var infoDisplay = options.markerInfoDisplay;
181
  infoWindowOptions.disableAutoPan = infoDisplay == 'always';
182
  var infoWindow = new google.maps.InfoWindow(infoWindowOptions);
183
+ this.infoWindows.push(infoWindow);
184
+ var openEvent = infoDisplay;
185
  if (infoDisplay == 'always') {
186
+ openEvent = 'click';
187
  infoWindow.open(map, marker);
188
+ }
189
+ marker.addListener(openEvent, function () {
190
+ infoWindow.open(map, marker);
191
+ if(infoDisplay != 'always' && !options.markerInfoMultiple) {
192
+ this.infoWindows.forEach(function(iw) {
193
+ if (iw !== infoWindow) {
194
+ iw.close();
195
+ }
196
+ });
197
+ }
198
+ }.bind(this));
199
+ if(infoDisplay == 'mouseover') {
200
+ marker.addListener('mouseout', function () {
201
+ setTimeout(function() {
202
+ infoWindow.close();
203
+ }, 100);
204
  });
205
  }
206
  }
208
  //try again please
209
  setTimeout(geocodeMarker, Math.random() * 1000, mrkr);
210
  }
211
+ }.bind(this));
212
+ }.bind(this);
213
  //set random delays of 0 - 1 seconds when geocoding markers to try avoid hitting the query limit
214
  setTimeout(geocodeMarker, Math.random() * 1000, mrkr);
215
+ }.bind(this)
216
  );
217
  }
218
  },
366
 
367
  jQuery(function ($) {
368
  var mapOptions = $( '.sow-google-map-canvas' ).data( 'options' );
369
+ var mapsApiLoaded = typeof window.google !== 'undefined' && typeof window.google.maps !== 'undefined';
370
  var isLoaded = function (element) {
371
  var lib = window.google.maps[element];
372
  return window.google.maps.hasOwnProperty(element) && typeof lib !== 'undefined' && lib !== null;
widgets/google-map/js/js-map.min.js CHANGED
@@ -1 +1 @@
1
- function soGoogleMapInitialize(){new sowb.SiteOriginGoogleMap(window.jQuery).initMaps()}var sowb=window.sowb||{};sowb.SiteOriginGoogleMap=function(e){return{DEFAULT_LOCATIONS:["Addo Elephant National Park, R335, Addo","Cape Town, Western Cape, South Africa","San Francisco Bay Area, CA, United States","New York, NY, United States"],showMap:function(e,o,t){var i=Number(t.zoom);i||(i=14);var n="user_map_style",a={zoom:i,scrollwheel:t.scrollZoom,draggable:t.draggable,disableDefaultUI:t.disableUi,zoomControl:t.zoomControl,panControl:t.panControl,center:o,mapTypeControlOptions:{mapTypeIds:[google.maps.MapTypeId.ROADMAP,n]}},r=new google.maps.Map(e,a),s={name:t.mapName},l=t.mapStyles;if(l){var d=new google.maps.StyledMapType(l,s);r.mapTypes.set(n,d),r.setMapTypeId(n)}if(t.markerAtCenter&&(this.centerMarker=new google.maps.Marker({position:o,map:r,draggable:t.markersDraggable,icon:t.markerIcon,title:""})),t.keepCentered){var p;google.maps.event.addDomListener(r,"idle",function(){p=r.getCenter()}),google.maps.event.addDomListener(window,"resize",function(){r.setCenter(p)})}this.linkAutocompleteField(t.autocomplete,t.autocompleteElement,r,t),this.showMarkers(t.markerPositions,r,t),this.showDirections(t.directions,r,t)},linkAutocompleteField:function(o,t,i,n){if(o&&t){var a=function(e){this.inputAddress!=e&&(this.inputAddress=e,this.getLocation(this.inputAddress).done(function(e){i.setZoom(15),i.setCenter(e),this.centerMarker&&(this.centerMarker.setPosition(e),this.centerMarker.setTitle(this.inputAddress))}.bind(this)))}.bind(this),r=e(t);o.addListener("place_changed",function(){var e=o.getPlace();i.setZoom(15),e.geometry&&(i.setCenter(e.geometry.location),this.centerMarker&&this.centerMarker.setPosition(e.geometry.location))}.bind(this)),google.maps.event.addDomListener(t,"keypress",function(e){var o=e.keyCode||e.which;"13"==o&&e.preventDefault()}),r.focusin(function(){if(!this.resultsObserver){var o=document.querySelector(".pac-container");this.resultsObserver=new MutationObserver(function(){var o=e(e(".pac-item").get(0)),t=o.find(".pac-item-query").text(),i=o.find("span").not("[class]").text(),n=t+(i?", "+i:"");n&&a(n)});var t={attributes:!0,childList:!0,characterData:!0};this.resultsObserver.observe(o,t)}}.bind(this));var s=function(e){this.getGeocoder().geocode({location:e},function(o,t){if(t==google.maps.GeocoderStatus.OK&&o.length>0){var i=o[0].formatted_address;r.val(i),this.centerMarker&&(this.centerMarker.setPosition(e),this.centerMarker.setTitle(i))}}.bind(this))}.bind(this);i.addListener("click",function(e){s(e.latLng)}),this.centerMarker.addListener("dragend",function(e){s(e.latLng)})}},showMarkers:function(e,o,t){if(e&&e.length){var i=new google.maps.Geocoder;e.forEach(function(e){var n=function(){i.geocode({address:e.place},function(i,a){if(a==google.maps.GeocoderStatus.OK){var r=new google.maps.Marker({position:i[0].geometry.location,map:o,draggable:t.markersDraggable,icon:t.markerIcon,title:""});if(e.hasOwnProperty("info")&&e.info){var s={content:e.info};e.hasOwnProperty("info_max_width")&&e.info_max_width&&(s.maxWidth=e.info_max_width);var l=t.markerInfoDisplay;s.disableAutoPan="always"==l;var d=new google.maps.InfoWindow(s);"always"==l?(d.open(o,r),r.addListener("click",function(){d.open(o,r)})):r.addListener(l,function(){d.open(o,r)})}}else a==google.maps.GeocoderStatus.OVER_QUERY_LIMIT&&setTimeout(n,1e3*Math.random(),e)})};setTimeout(n,1e3*Math.random(),e)})}},showDirections:function(e,o){if(e){e.waypoints&&e.waypoints.length&&e.waypoints.map(function(e){e.stopover=Boolean(e.stopover)});var t=new google.maps.DirectionsRenderer;t.setMap(o);var i=new google.maps.DirectionsService;i.route({origin:e.origin,destination:e.destination,travelMode:e.travelMode.toUpperCase(),avoidHighways:e.avoidHighways,avoidTolls:e.avoidTolls,waypoints:e.waypoints,optimizeWaypoints:e.optimizeWaypoints},function(e,o){o==google.maps.DirectionsStatus.OK&&t.setDirections(e)})}},initMaps:function(){var o=e(".sow-google-map-autocomplete"),t=new e.Deferred;0==o.length?t.resolve():o.each(function(o,i){var n=new google.maps.places.Autocomplete(i,{types:["address"]}),a=e(i).siblings(".sow-google-map-canvas");if(a.length>0){var r=a.data("options");r.autocomplete=n,r.autocompleteElement=i,this.getLocation(r.address).done(function(e){this.showMap(a.get(0),e,r),a.data("initialized",!0),t.resolve()}.bind(this)).fail(function(){a.append("<div><p><strong>There were no results for the place you entered. Please try another.</strong></p></div>"),t.reject()})}}.bind(this)),t.done(function(){e(".sow-google-map-canvas").each(function(o,t){var i=e(t);if(i.data("initialized"))return!0;var n=i.data("options"),a=n.address;if(!a){var r=n.markerPositions;r&&r.length&&(a=r[0].place)}this.getLocation(a).done(function(e){this.showMap(i.get(0),e,n),i.data("initialized")}.bind(this)).fail(function(){i.append("<div><p><strong>There were no results for the place you entered. Please try another.</strong></p></div>")})}.bind(this))}.bind(this))},getGeocoder:function(){return this._geocoder||(this._geocoder=new google.maps.Geocoder),this._geocoder},getLocation:function(o){var t,i=new e.Deferred,n={address:o};if(o&&o.indexOf(",")>-1){var a=o.split(",");a&&2==a.length&&(t=new google.maps.LatLng(a[0],a[1]),isNaN(t.lat())||isNaN(t.lng())||(n={location:{lat:t.lat(),lng:t.lng()}}))}if(n.hasOwnProperty("location"))i.resolve(n.location);else if(n.hasOwnProperty("address")){if(!n.address){var r=parseInt(Math.random()*this.DEFAULT_LOCATIONS.length);n.address=this.DEFAULT_LOCATIONS[r]}this.getGeocoder().geocode(n,function(e,o){o==google.maps.GeocoderStatus.OK?i.resolve(e[0].geometry.location):o==google.maps.GeocoderStatus.ZERO_RESULTS&&i.reject(o)})}return i}}},jQuery(function(e){var o=e(".sow-google-map-canvas").data("options"),t="undefined"!=typeof window.google&&"undefined"!==window.google.maps,i=function(e){var o=window.google.maps[e];return window.google.maps.hasOwnProperty(e)&&"undefined"!=typeof o&&null!==o},n="undefined"!=typeof o.libraries&&null!==o.libraries;if(n&&(t=t&&o.libraries.every(i)),t)soGoogleMapInitialize();else{var a="https://maps.googleapis.com/maps/api/js?v=3.exp&callback=soGoogleMapInitialize";o&&(n&&(a+="&libraries="+o.libraries.join(",")),o.apiKey&&(a+="&key="+o.apiKey));var r=e('<script type="text/javascript" src="'+a+'">');e("body").append(r)}});
1
+ function soGoogleMapInitialize(){new sowb.SiteOriginGoogleMap(window.jQuery).initMaps()}var sowb=window.sowb||{};sowb.SiteOriginGoogleMap=function(e){return{DEFAULT_LOCATIONS:["Addo Elephant National Park, R335, Addo","Cape Town, Western Cape, South Africa","San Francisco Bay Area, CA, United States","New York, NY, United States"],showMap:function(e,o,t){var i=Number(t.zoom);i||(i=14);var n="user_map_style",a={zoom:i,scrollwheel:t.scrollZoom,draggable:t.draggable,disableDefaultUI:t.disableUi,zoomControl:t.zoomControl,panControl:t.panControl,center:o,mapTypeControlOptions:{mapTypeIds:[google.maps.MapTypeId.ROADMAP,n]}},s=new google.maps.Map(e,a),r={name:t.mapName},l=t.mapStyles;if(l){var d=new google.maps.StyledMapType(l,r);s.mapTypes.set(n,d),s.setMapTypeId(n)}if(t.markerAtCenter&&(this.centerMarker=new google.maps.Marker({position:o,map:s,draggable:t.markersDraggable,icon:t.markerIcon,title:""})),t.keepCentered){var c;google.maps.event.addDomListener(s,"idle",function(){c=s.getCenter()}),google.maps.event.addDomListener(window,"resize",function(){s.setCenter(c)})}this.linkAutocompleteField(t.autocomplete,t.autocompleteElement,s,t),this.showMarkers(t.markerPositions,s,t),this.showDirections(t.directions,s,t)},linkAutocompleteField:function(o,t,i,n){if(o&&t){var a=function(e){this.inputAddress!=e&&(this.inputAddress=e,this.getLocation(this.inputAddress).done(function(e){i.setZoom(15),i.setCenter(e),this.centerMarker&&(this.centerMarker.setPosition(e),this.centerMarker.setTitle(this.inputAddress))}.bind(this)))}.bind(this),s=e(t);o.addListener("place_changed",function(){var e=o.getPlace();i.setZoom(15),e.geometry&&(i.setCenter(e.geometry.location),this.centerMarker&&this.centerMarker.setPosition(e.geometry.location))}.bind(this)),google.maps.event.addDomListener(t,"keypress",function(e){var o=e.keyCode||e.which;"13"==o&&e.preventDefault()}),s.focusin(function(){if(!this.resultsObserver){var o=document.querySelector(".pac-container");this.resultsObserver=new MutationObserver(function(){var o=e(e(".pac-item").get(0)),t=o.find(".pac-item-query").text(),i=o.find("span").not("[class]").text(),n=t+(i?", "+i:"");n&&a(n)});var t={attributes:!0,childList:!0,characterData:!0};this.resultsObserver.observe(o,t)}}.bind(this));var r=function(e){this.getGeocoder().geocode({location:e},function(o,t){if(t==google.maps.GeocoderStatus.OK&&o.length>0){var i=o[0].formatted_address;s.val(i),this.centerMarker&&(this.centerMarker.setPosition(e),this.centerMarker.setTitle(i))}}.bind(this))}.bind(this);i.addListener("click",function(e){r(e.latLng)}),this.centerMarker.addListener("dragend",function(e){r(e.latLng)})}},showMarkers:function(e,o,t){if(e&&e.length){var i=new google.maps.Geocoder;this.infoWindows=[],e.forEach(function(e){var n=function(){i.geocode({address:e.place},function(i,a){if(a==google.maps.GeocoderStatus.OK){var s=new google.maps.Marker({position:i[0].geometry.location,map:o,draggable:t.markersDraggable,icon:t.markerIcon,title:""});if(e.hasOwnProperty("info")&&e.info){var r={content:e.info};e.hasOwnProperty("info_max_width")&&e.info_max_width&&(r.maxWidth=e.info_max_width);var l=t.markerInfoDisplay;r.disableAutoPan="always"==l;var d=new google.maps.InfoWindow(r);this.infoWindows.push(d);var c=l;"always"==l&&(c="click",d.open(o,s)),s.addListener(c,function(){d.open(o,s),"always"==l||t.markerInfoMultiple||this.infoWindows.forEach(function(e){e!==d&&e.close()})}.bind(this)),"mouseover"==l&&s.addListener("mouseout",function(){setTimeout(function(){d.close()},100)})}}else a==google.maps.GeocoderStatus.OVER_QUERY_LIMIT&&setTimeout(n,1e3*Math.random(),e)}.bind(this))}.bind(this);setTimeout(n,1e3*Math.random(),e)}.bind(this))}},showDirections:function(e,o){if(e){e.waypoints&&e.waypoints.length&&e.waypoints.map(function(e){e.stopover=Boolean(e.stopover)});var t=new google.maps.DirectionsRenderer;t.setMap(o);var i=new google.maps.DirectionsService;i.route({origin:e.origin,destination:e.destination,travelMode:e.travelMode.toUpperCase(),avoidHighways:e.avoidHighways,avoidTolls:e.avoidTolls,waypoints:e.waypoints,optimizeWaypoints:e.optimizeWaypoints},function(e,o){o==google.maps.DirectionsStatus.OK&&t.setDirections(e)})}},initMaps:function(){var o=e(".sow-google-map-autocomplete"),t=new e.Deferred;0==o.length?t.resolve():o.each(function(o,i){var n=new google.maps.places.Autocomplete(i,{types:["address"]}),a=e(i).siblings(".sow-google-map-canvas");if(a.length>0){var s=a.data("options");s.autocomplete=n,s.autocompleteElement=i,this.getLocation(s.address).done(function(e){this.showMap(a.get(0),e,s),a.data("initialized",!0),t.resolve()}.bind(this)).fail(function(){a.append("<div><p><strong>There were no results for the place you entered. Please try another.</strong></p></div>"),t.reject()})}}.bind(this)),t.done(function(){e(".sow-google-map-canvas").each(function(o,t){var i=e(t);if(i.data("initialized"))return!0;var n=i.data("options"),a=n.address;if(!a){var s=n.markerPositions;s&&s.length&&(a=s[0].place)}this.getLocation(a).done(function(e){this.showMap(i.get(0),e,n),i.data("initialized")}.bind(this)).fail(function(){i.append("<div><p><strong>There were no results for the place you entered. Please try another.</strong></p></div>")})}.bind(this))}.bind(this))},getGeocoder:function(){return this._geocoder||(this._geocoder=new google.maps.Geocoder),this._geocoder},getLocation:function(o){var t,i=new e.Deferred,n={address:o};if(o&&o.indexOf(",")>-1){var a=o.split(",");a&&2==a.length&&(t=new google.maps.LatLng(a[0],a[1]),isNaN(t.lat())||isNaN(t.lng())||(n={location:{lat:t.lat(),lng:t.lng()}}))}if(n.hasOwnProperty("location"))i.resolve(n.location);else if(n.hasOwnProperty("address")){if(!n.address){var s=parseInt(Math.random()*this.DEFAULT_LOCATIONS.length);n.address=this.DEFAULT_LOCATIONS[s]}this.getGeocoder().geocode(n,function(e,o){o==google.maps.GeocoderStatus.OK?i.resolve(e[0].geometry.location):o==google.maps.GeocoderStatus.ZERO_RESULTS&&i.reject(o)})}return i}}},jQuery(function(e){var o=e(".sow-google-map-canvas").data("options"),t="undefined"!=typeof window.google&&"undefined"!=typeof window.google.maps,i=function(e){var o=window.google.maps[e];return window.google.maps.hasOwnProperty(e)&&"undefined"!=typeof o&&null!==o},n="undefined"!=typeof o.libraries&&null!==o.libraries;if(n&&(t=t&&o.libraries.every(i)),t)soGoogleMapInitialize();else{var a="https://maps.googleapis.com/maps/api/js?v=3.exp&callback=soGoogleMapInitialize";o&&(n&&(a+="&libraries="+o.libraries.join(",")),o.apiKey&&(a+="&key="+o.apiKey));var s=e('<script type="text/javascript" src="'+a+'">');e("body").append(s)}});
widgets/icon/tpl/default.php CHANGED
@@ -7,13 +7,11 @@
7
  ?>
8
 
9
  <div class="sow-icon-container sow-icon">
10
- <?php if ( ! empty( $url ) ) { ?>
11
- <a href="<?php esc_attr_e( $url ) ?>" <?php if ( ! empty( $new_window ) ) echo 'target="_blank"'; ?>>
12
- <?php } ?>
13
- <?php
14
- echo siteorigin_widget_get_icon( $icon );
15
- ?>
16
- <?php if ( ! empty( $url ) ) { ?>
17
- </a>
18
- <?php } ?>
19
  </div>
7
  ?>
8
 
9
  <div class="sow-icon-container sow-icon">
10
+ <?php if ( ! empty( $url ) ) : ?>
11
+ <a href="<?php echo sow_esc_url( $url ) ?>" <?php if ( ! empty( $new_window ) ) echo 'target="_blank"'; ?>>
12
+ <?php endif; ?>
13
+ <?php echo siteorigin_widget_get_icon( $icon ); ?>
14
+ <?php if ( ! empty( $url ) ) : ?>
15
+ </a>
16
+ <?php endif; ?>
 
 
17
  </div>
widgets/image-grid/image-grid.php CHANGED
@@ -111,7 +111,7 @@ class SiteOrigin_Widgets_ImageGrid_Widget extends SiteOrigin_Widget {
111
  */
112
  function get_less_variables( $instance ) {
113
  $less = array();
114
- if( !empty( $instance['display']['spacing'] ) ) {
115
  $less['spacing'] = intval($instance['display']['spacing']) . 'px';
116
  }
117
 
111
  */
112
  function get_less_variables( $instance ) {
113
  $less = array();
114
+ if( isset( $instance['display']['spacing'] ) ) {
115
  $less['spacing'] = intval($instance['display']['spacing']) . 'px';
116
  }
117
 
widgets/image/image.php CHANGED
@@ -103,17 +103,18 @@ class SiteOrigin_Widget_Image_Widget extends SiteOrigin_Widget {
103
 
104
  public function get_template_variables( $instance, $args ) {
105
  return array(
106
- 'title' => $instance['title'],
107
  'title_position' => $instance['title_position'],
108
  'image' => $instance['image'],
109
  'size' => $instance['size'],
110
  'image_fallback' => ! empty( $instance['image_fallback'] ) ? $instance['image_fallback'] : false,
111
- 'alt' => $instance['alt'],
112
  'url' => $instance['url'],
113
  'new_window' => $instance['new_window'],
114
  );
115
  }
116
 
 
117
  function get_less_variables($instance){
118
  return array(
119
  'image_alignment' => $instance['align'],
103
 
104
  public function get_template_variables( $instance, $args ) {
105
  return array(
106
+ 'title' => !empty( $instance['title'] ) ? $instance['title'] : get_the_title( $instance['image'] ),
107
  'title_position' => $instance['title_position'],
108
  'image' => $instance['image'],
109
  'size' => $instance['size'],
110
  'image_fallback' => ! empty( $instance['image_fallback'] ) ? $instance['image_fallback'] : false,
111
+ 'alt' => !empty( $instance['alt'] ) ? $instance['alt'] : get_post_meta( $instance['image'], '_wp_attachment_image_alt', true ),
112
  'url' => $instance['url'],
113
  'new_window' => $instance['new_window'],
114
  );
115
  }
116
 
117
+
118
  function get_less_variables($instance){
119
  return array(
120
  'image_alignment' => $instance['align'],
widgets/image/tpl/default.php CHANGED
@@ -12,7 +12,7 @@
12
  ?>
13
 
14
  <?php if( $title_position == 'above' ) : ?>
15
- <?php echo $args['before_title'] . esc_html( $title ) . $args['after_title']; ?>
16
  <?php endif; ?>
17
 
18
  <?php
@@ -38,8 +38,8 @@ $attr = apply_filters( 'siteorigin_widgets_image_attr', $attr, $instance, $this
38
 
39
  $classes = array('so-widget-image');
40
 
41
- if(!empty($title)) $attr['title'] = $title;
42
- if(!empty($alt)) $attr['alt'] = $alt;
43
 
44
  ?>
45
  <div class="sow-image-container">
@@ -49,5 +49,5 @@ if(!empty($alt)) $attr['alt'] = $alt;
49
  </div>
50
 
51
  <?php if( $title_position == 'below' ) : ?>
52
- <?php echo $args['before_title'] . esc_html( $title ) . $args['after_title']; ?>
53
  <?php endif; ?>
12
  ?>
13
 
14
  <?php if( $title_position == 'above' ) : ?>
15
+ <?php echo $args['before_title'] . wp_kses_post( $title ) . $args['after_title']; ?>
16
  <?php endif; ?>
17
 
18
  <?php
38
 
39
  $classes = array('so-widget-image');
40
 
41
+ if( !empty( $title ) ) $attr['title'] = $title;
42
+ if( !empty( $alt ) ) $attr['alt'] = $alt;
43
 
44
  ?>
45
  <div class="sow-image-container">
49
  </div>
50
 
51
  <?php if( $title_position == 'below' ) : ?>
52
+ <?php echo $args['before_title'] . wp_kses_post( $title ) . $args['after_title']; ?>
53
  <?php endif; ?>
widgets/simple-masonry/js/simple-masonry.js CHANGED
@@ -60,7 +60,13 @@ jQuery(function ($) {
60
  });
61
  });
62
  };
 
 
63
 
64
  $(window).on('resize panelsStretchRows', resizeMasonry);
65
- resizeMasonry();
 
 
 
 
66
  });
60
  });
61
  });
62
  };
63
+
64
+ resizeMasonry();
65
 
66
  $(window).on('resize panelsStretchRows', resizeMasonry);
67
+
68
+ // Ensure that the masonry has resized correct on load.
69
+ setTimeout( function () {
70
+ resizeMasonry();
71
+ }, 100 );
72
  });
widgets/simple-masonry/js/simple-masonry.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(function(t){var a=t(".sow-masonry-grid"),i=function(){a.each(function(){var a=t(this),i=a.data("layouts"),e=window.matchMedia("(max-width: "+i.tablet.breakPoint+"px)"),h=window.matchMedia("(max-width: "+i.mobile.breakPoint+"px)"),o=i.desktop;h.matches?o=i.mobile:e.matches&&(o=i.tablet);var s=o.numColumns;a.css("width","auto");var r=o.gutter*(s-1),n=Math.floor((a.width()-r)/s);a.width(n*s+r),a.imagesLoaded(function(){a.find("> .sow-masonry-grid-item").each(function(){var a=t(this),i=a.data("colSpan");i=Math.max(Math.min(i,o.numColumns),1),a.width(n*i+o.gutter*(i-1));var e=a.data("rowSpan");e=Math.max(Math.min(e,o.numColumns),1);var h=o.rowHeight||n;a.css("height",h*e+o.gutter*(e-1));var s=a.find("> img,> a > img"),r=s.attr("height")>0?s.attr("width")/s.attr("height"):1,m=a.height()>0?a.width()/a.height():1;if(r=parseFloat(r.toFixed(3)),m=parseFloat(m.toFixed(3)),r>m){s.css("width","auto"),s.css("height","100%"),s.css("margin-top","");var d=(s.width()-a.width())*-.5;s.css("margin-left",d+"px")}else{s.css("height","auto"),s.css("width","100%"),s.css("margin-left","");var c=(s.height()-a.height())*-.5;s.css("margin-top",c+"px")}}),a.packery({itemSelector:".sow-masonry-grid-item",columnWidth:n,gutter:o.gutter})})})};t(window).on("resize panelsStretchRows",i),i()});
1
+ jQuery(function(t){var a=t(".sow-masonry-grid"),i=function(){a.each(function(){var a=t(this),i=a.data("layouts"),e=window.matchMedia("(max-width: "+i.tablet.breakPoint+"px)"),h=window.matchMedia("(max-width: "+i.mobile.breakPoint+"px)"),o=i.desktop;h.matches?o=i.mobile:e.matches&&(o=i.tablet);var s=o.numColumns;a.css("width","auto");var r=o.gutter*(s-1),n=Math.floor((a.width()-r)/s);a.width(n*s+r),a.imagesLoaded(function(){a.find("> .sow-masonry-grid-item").each(function(){var a=t(this),i=a.data("colSpan");i=Math.max(Math.min(i,o.numColumns),1),a.width(n*i+o.gutter*(i-1));var e=a.data("rowSpan");e=Math.max(Math.min(e,o.numColumns),1);var h=o.rowHeight||n;a.css("height",h*e+o.gutter*(e-1));var s=a.find("> img,> a > img"),r=s.attr("height")>0?s.attr("width")/s.attr("height"):1,m=a.height()>0?a.width()/a.height():1;if(r=parseFloat(r.toFixed(3)),m=parseFloat(m.toFixed(3)),r>m){s.css("width","auto"),s.css("height","100%"),s.css("margin-top","");var d=(s.width()-a.width())*-.5;s.css("margin-left",d+"px")}else{s.css("height","auto"),s.css("width","100%"),s.css("margin-left","");var c=(s.height()-a.height())*-.5;s.css("margin-top",c+"px")}}),a.packery({itemSelector:".sow-masonry-grid-item",columnWidth:n,gutter:o.gutter})})})};i(),t(window).on("resize panelsStretchRows",i),setTimeout(function(){i()},100)});
widgets/social-media-buttons/data/networks.php CHANGED
@@ -31,6 +31,12 @@ return array(
31
  'icon_color' => '#FFFFFF',
32
  'button_color' => '#99C4E6'
33
  ),
 
 
 
 
 
 
34
  'linkedin' => array(
35
  'label' => __( 'LinkedIn', 'so-widgets-bundle' ),
36
  'base_url' => 'https://www.linkedin.com/',
@@ -268,4 +274,4 @@ return array(
268
  'icon_color' => '#FFFFFF',
269
  'button_color' => '#CF3427'
270
  )
271
- );
31
  'icon_color' => '#FFFFFF',
32
  'button_color' => '#99C4E6'
33
  ),
34
+ 'snapchat' => array(
35
+ 'label' => __( 'Snapchat', 'so-widgets-bundle' ),
36
+ 'base_url' => 'https://www.snapchat.com/',
37
+ 'icon_color' => '#FFFFFF',
38
+ 'button_color' => '#FFFC00'
39
+ ),
40
  'linkedin' => array(
41
  'label' => __( 'LinkedIn', 'so-widgets-bundle' ),
42
  'base_url' => 'https://www.linkedin.com/',
274
  'icon_color' => '#FFFFFF',
275
  'button_color' => '#CF3427'
276
  )
277
+ );
widgets/social-media-buttons/tpl/default.php CHANGED
@@ -8,8 +8,8 @@
8
  'class' => esc_attr( implode(' ', $classes) ),
9
  'title' => sprintf( __( '%s on %s', 'so-widgets-bundle' ), get_bloginfo( 'name' ), ucwords( str_replace( '-', ' ', $network['name'] ) ) ),
10
  );
11
- if(!empty($instance['design']['new_window'])) $button_attributes['target'] = '_blank';
12
- if ( ! empty( $network['url'] ) ) $button_attributes['href'] = sow_esc_url( $network['url'] );
13
  ?>
14
 
15
  <a <?php foreach($button_attributes as $name => $val) echo $name . '="' . esc_attr( $val ) . '" ' ?>>
@@ -20,4 +20,4 @@
20
  </span>
21
  </a>
22
  <?php endforeach; ?>
23
- </div>
8
  'class' => esc_attr( implode(' ', $classes) ),
9
  'title' => sprintf( __( '%s on %s', 'so-widgets-bundle' ), get_bloginfo( 'name' ), ucwords( str_replace( '-', ' ', $network['name'] ) ) ),
10
  );
11
+ if( !empty( $instance['design']['new_window'] ) ) $button_attributes['target'] = '_blank';
12
+ if ( ! empty( $network['url'] ) ) $button_attributes['href'] = sow_esc_url( trim( $network['url'] ) );
13
  ?>
14
 
15
  <a <?php foreach($button_attributes as $name => $val) echo $name . '="' . esc_attr( $val ) . '" ' ?>>
20
  </span>
21
  </a>
22
  <?php endforeach; ?>
23
+ </div>