├── .editorconfig ├── LICENSE ├── README.md ├── favicon.ico ├── icon.png ├── icons.svg ├── index.html ├── manifest.json ├── package.json ├── sass ├── _grid.scss ├── _layout.scss ├── _markdown.scss ├── _normalize.scss ├── _print.scss ├── _syntax.scss ├── _utilities.scss ├── _variables.scss ├── components │ ├── _alerts.scss │ ├── _buttons.scss │ ├── _cards.scss │ ├── _details.scss │ ├── _dropzone.scss │ ├── _forms.scss │ ├── _icons.scss │ ├── _list-group.scss │ ├── _loading-indicator.scss │ ├── _progress-bar.scss │ ├── _tables.scss │ ├── _tags.scss │ ├── _tooltips.scss │ └── components.scss └── index.scss ├── screenshot.png └── tawian-frontend.css /.editorconfig: -------------------------------------------------------------------------------- 1 | # editorconfig.org 2 | root = true 3 | 4 | [*] 5 | charset = utf-8 6 | end_of_line = lf 7 | indent_size = 3 8 | indent_style = space 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | 12 | [*.scss] 13 | indent_size = 2 14 | 15 | [*.md] 16 | trim_trailing_whitespace = false 17 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2016 tawian 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # [Tawian Frontend](http://maxbeier.github.io/tawian-frontend) [![npm package][npm-badge]][npm] 2 | 3 | Simple CSS framework with a markdowny touch. Intended for developer facing applications. 4 | 5 | 6 | ## Usage 7 | 8 | ```html 9 | 10 | 11 | ``` 12 | 13 | or via [npm][npm] 14 | 15 | ```sh 16 | npm install --save tawian-frontend typeface-cousine 17 | ``` 18 | 19 | And then, for example (as used in [curious-containers/cc-ui](https://github.com/curious-containers/cc-ui)): 20 | 21 | ```js 22 | import 'tawian-frontend'; 23 | import 'typeface-cousine'; 24 | ``` 25 | 26 | To use the icons, you have to place [icons.svg](https://raw.githubusercontent.com/maxbeier/tawian-frontend/master/icons.svg) at the root of your public path (or anywhere else and adjust the path in the icons svg code) or inline them in your HTML to make them work in Edge. 27 | 28 | 29 | ## Preview 30 | 31 | [![Screenshot](https://raw.githubusercontent.com/maxbeier/tawian-frontend/master/screenshot.png)](http://maxbeier.github.io/tawian-frontend/) 32 | 33 | 34 | ## Build 35 | 36 | ```sh 37 | npm run build 38 | 39 | npm run watch # builds continuously 40 | ``` 41 | 42 | 43 | ## Credits 44 | 45 | The project was inspired by [hack](https://github.com/egoist/hack). 46 | 47 | 48 | [npm-badge]: https://img.shields.io/npm/v/tawian-frontend.svg?style=flat-square 49 | [npm]: https://www.npmjs.org/package/tawian-frontend 50 | -------------------------------------------------------------------------------- /favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxbeier/tawian-frontend/54b95a21abb47f562368b7e8bdc576ef004db139/favicon.ico -------------------------------------------------------------------------------- /icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxbeier/tawian-frontend/54b95a21abb47f562368b7e8bdc576ef004db139/icon.png -------------------------------------------------------------------------------- /icons.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | Tawian 9 | 10 | 11 | 12 | 13 | 14 | 15 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 49 | 50 |
51 | 52 |

Tawian frontend

53 | 54 |

Components

55 | 56 |

Links and Typo

57 | 58 |

Lead ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

59 | 60 |

61 | Lorem ipsum dolor sit amet adipisicing elit, sed do eiusmod italic incididunt ut bold et dolore magna aliqua. Ut enim ad highlight minim veniam, deletion quis nostrud exercitation insertation ullamco laboris underlined nisi ut aliquip ex small ea commodo consequat abbr. Duis aute irure dolor in reprehenderit + Space in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.1 62 |

63 | 64 |

Truncate Truncate Truncate Truncate Truncate Truncate Truncate Truncate Truncate Truncate Truncate Truncate

65 | 66 | 67 |

List

68 | 69 |
70 |
71 |
    72 |
  • Item 73 |
      74 |
    • Sub Item
    • 75 |
    • Sub Item
    • 76 |
    • Sub Item
    • 77 |
    78 |
  • 79 |
  • Item
  • 80 |
  • Item
  • 81 |
82 |
83 |
84 |
    85 |
  1. One
  2. 86 |
  3. Two
  4. 87 |
  5. Three 88 |
      89 |
    1. Three One
    2. 90 |
    3. Three Two
    4. 91 |
    92 |
  6. 93 |
  7. Four
  8. 94 |
95 |
96 |
97 | 98 | 99 |

Blockquote

100 | 101 |
102 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptates quis cumque similique voluptas facilis fugit inventore odit, quidem et ab, quos, blanditiis iure! Ipsum nostrum corrupti architecto fugit, culpa expedita. someone 103 |
104 | 105 | 106 |

Code

107 | 108 |

You can use inline code, inline sample output or code blocks. Use .scroll to prevent code wrapping.

109 | 110 |
while true; do { echo -e "HTTP/1.1 200 OK\r\n"; cat index.html; } | nc -l 8080; done
111 |
112 | 113 | $ time sleep 3
3.00 real 0.00 user 0.00 sys
$ exit
114 | 115 |

Horizontal Rule

116 | 117 |
118 | 119 | 120 |

Form

121 | 122 |

Inline Form

123 | 124 |
125 | 126 | 127 | 128 | 136 |
137 | 138 | 139 |

Horizontal Form (default on larger screens)

140 | 141 |
142 | 143 | 147 | 148 | 152 | 153 | 157 | 158 | 162 | 163 | 172 | 173 | 183 | 184 | 193 | 194 | 198 | 199 | 200 | 201 |
202 | 203 | 204 |

Stateful Form

205 | 206 |
207 | 208 | 212 | 213 | 217 | 218 |
219 | 220 | 221 |

Help Block

222 | 223 |
224 | 225 | 230 | 231 | 236 | 237 | 242 | 243 |
244 | 245 | 246 |

Disabled

247 | 248 |
249 | 250 | 254 | 255 | 261 | 262 | 266 | 267 |
268 | 269 | 270 |

Readonly

271 | 272 |
273 | 274 | 278 | 279 | 283 | 284 |
285 | 286 | 287 |

Required

288 | 289 |
290 | 291 | 295 | 296 | 300 | 301 |
302 | 303 | 304 |

Vertical Form (default on smaller screens)

305 | 306 |
307 |
308 |
309 | 313 | 314 | 323 | 324 | 328 | 329 | 333 | 334 | 338 |
339 |
340 | 349 | 350 | 360 | 361 | 365 | 366 | 367 |
368 |
369 | 370 |
371 | 372 | 373 |

File Input with Dropzones, e.g. react-dropzone

374 | 375 |
376 |
377 |
Drop Files
378 |
379 |
380 |
Active Style
381 |
382 |
383 |
Rejected Style
384 |
385 |
386 | 387 | 388 |

Table

389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 |
statesparamparamparam
cell states908070
normal state608580
row state806560
Table with fixed layout and caption
421 | 422 |
423 |
424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 |
classesparamparamparam
narrow
striped
/
/
/
/
472 |
473 |
474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 |
classesparamparamparam
wide
hoverable
/
504 |
505 |
506 | 507 | 508 |

List Group

509 | 510 |
511 |
512 |
    513 |
  • Cras justo odio
  • 514 |
  • DISABLED
  • 515 |
  • Morbi leo risus Tag
  • 516 |
  • ACTIVE
  • 517 |
  • Porta ac consectetur
  • 518 |
519 |
520 |
521 | 528 |
529 |
530 |
531 | 532 | 533 | 534 | 535 | 536 |
537 |
538 |
539 | 540 | 541 |

Progress bar

542 | 543 |
544 |
545 |

546 |

547 |
50kb / 125kb
548 |
549 |

550 | 551 |

552 |

553 |
20%
554 |
555 |

556 |
557 |
558 | with .narrow 559 |
560 |
561 |
562 |
563 |
564 | 565 |
566 |
567 |
568 |
569 |
570 | 571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 | 579 |

580 | For advanced progress bars consider progressbar.js. 581 |

582 | 583 | 584 |

Buttons

585 | 586 |

587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 |

596 | 597 |

598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 |

606 | 607 |

608 | 609 |

610 | 611 | 612 |

Button Groups

613 | 614 |
615 |
616 |
617 | 618 | 619 | 620 |
621 |
622 | 623 |
624 |
625 | 628 | 631 |
632 |
633 | 634 | 635 | 636 |
637 |
638 | 639 |
640 |
641 | 642 | 643 |
644 |
645 | 646 |
647 |
648 | 649 | 650 | 651 | 652 | 653 |
654 |
655 | 656 |
657 | 660 |
661 | 662 | 663 | 664 | 665 |
666 | 669 |
670 | 671 |
672 |
673 | Prefix 674 | 675 | 676 | 677 | Postfix 678 |
679 |
680 |
681 | 682 | 683 |

Loading Indicator

684 | 685 | 686 | 687 | 688 |

Tags

689 | 690 |

691 | Tags have different states like 692 | normal and 693 | success and 694 | info and 695 | warning and 696 | error. 697 |

698 | 699 | 700 |

Icons from bytesize-icons

701 | 702 |

The icons don't work in IE / Edge. Consider inlining the svg file for Edge or svg4everybody for IE.

703 | 704 |

705 | 706 | 709 | 712 | 715 | 716 | 719 | 722 | 725 | 726 | Yay 727 |

728 |

729 | Can be sized, e.g. normal, medium or large. 730 |

731 | 732 |

733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 |

819 | 820 | 821 |

Tooltips naive version, might be out of screen

822 | 823 |
824 |
825 | 826 |
827 |
828 | 829 |
830 |
831 | 832 |
833 |
834 | 835 |
836 |
837 | 838 | 839 |

Cards

840 | 841 |

842 |

843 |
TITLE
844 |
845 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Expedita, quas ex vero enim in doloribus officiis ullam vel nam esse sapiente velit incidunt. Eaque quod et, aut maiores excepturi sint. 846 |
847 |
848 |

849 | 850 |
851 |
852 |
853 |
in grid
854 |
855 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Expedita, quas ex vero enim in doloribus officiis ullam vel nam esse sapiente velit incidunt. Eaque quod et, aut maiores excepturi sint. 856 |
857 |
858 |
859 |
860 |
861 |
with list group
862 |
863 | Cras justo odio 864 | Dapibus ac facilisis in 865 | Morbi leo risus 866 | Vestibulum at eros 867 | Porta ac consectetur 868 |
869 |
870 |
871 |
872 |
873 |
with image
874 | Image 875 |
and a second body
876 |
echo "and a third"
877 |
878 |
879 |
880 | 881 | 882 |

Alerts

883 | 884 |
885 |

Default message

886 |

Info message

887 |

Warning message

888 |

Success message

889 |

Error message

890 |
891 | 892 | 893 |

Images and Figures

894 | 895 |

You can use Image inline.

896 | 897 |

.full-width

898 | 899 | Image 900 | 901 |

Figure with Caption

902 | 903 |
904 | Image 905 |
Bildbeschreibung
906 |
907 | 908 | 909 |

Details & Summary

910 | 911 |
912 | Hidden Text Sample 913 |

Lorem ipsum dolor sit amet, consectetur adipisicing elit. Voluptatum molestiae et dicta, vero alias ab tempore obcaecati tempora odit voluptates. Eum inventore omnis, ullam rerum tenetur optio quasi a totam!

914 |
915 | 916 |
917 | Hidden Code Sample 918 | $ time sleep 3
3.00 real 0.00 user 0.00 sys
$ exit
919 |
920 | 921 |

Toggleable Cards

922 | 923 |
924 | Card Header 925 |
926 | Lorem ipsum dolor sit amet, consectetur adipisicing elit. Expedita, quas ex vero enim in doloribus officiis ullam vel nam esse sapiente velit incidunt. Eaque quod et, aut maiores excepturi sint. 927 |
928 | $ time sleep 3
3.00 real 0.00 user 0.00 sys
$ exit
929 |
930 | 931 | 932 |

Basic

933 | 934 |

Use .container to centralize the main content.

935 | 936 |

Use .site-header, .site-main and .site-footer for the main sectioning elements.

937 | 938 |

.site-header contains .site-nav which is not responsive by default but can be appended by .responsive-nav to collapse and show a hamburger icon on smaller screens. It can carry .responsive-nav-animated to add a sliding animation to the nav.

939 | 940 | 941 |

Grid

942 | 943 |
944 | 945 |
946 |
947 |
space
948 |
can be
949 |
flexibly
950 |
distributed
951 |
952 |
953 | 954 |
955 |
956 |
or
957 |
fixed
958 |
4
959 |
960 |
961 | 962 |
963 |
964 |
4
965 |
8
966 |
967 |
968 | 969 |
970 |
1
971 |
1
972 |
1
973 |
1
974 |
1
975 |
1
976 |
1
977 |
1
978 |
1
979 |
1
980 |
1
981 |
1
982 |
983 | 984 |
985 | 986 |

Inline Grid

987 | 988 |
989 | 990 | 991 | take the size they need 992 |
993 | 994 | 995 |

Modifiers

996 | 997 |
998 |
999 |

.grid modifiers

1000 |
    1001 |
  • To change spacing use grid-narrow or grid-wide
  • 1002 |
1003 |
    1004 |
  • To align items with align-items use 1005 |
      1006 |
    • grid-top: To top
    • 1007 |
    • grid-middle: To middle
    • 1008 |
    • grid-bottom: To bottom
    • 1009 |
    • grid-stretch: Stretch items
    • 1010 |
    • grid-baseline: To baseline
    • 1011 |
    1012 |
  • 1013 |
1014 |
    1015 |
  • To layout contents with justify-content use 1016 |
      1017 |
    • grid-left: To left
    • 1018 |
    • grid-center: To center
    • 1019 |
    • grid-right: To right
    • 1020 |
    • grid-between: Add spaces between items
    • 1021 |
    • grid-around: Add spaces around items
    • 1022 |
    1023 |
  • 1024 |
1025 |
1026 |
1027 |

.cell modifiers

1028 |
    1029 |
  • grid-top: To top
  • 1030 |
  • grid-middle: To middle
  • 1031 |
  • grid-bottom: To bottom
  • 1032 |
1033 |
    1034 |
  • cell-1: Set item width to 8.3% of parent
  • 1035 |
  • cell-2: Set item width to 16.7% of parent
  • 1036 |
  • cell-3: Set item width to 25% of parent
  • 1037 |
  • cell-4: Set item width to 33% of parent
  • 1038 |
  • cell-5: Set item width to 41.7% of parent
  • 1039 |
  • cell-6: Set item width to 50% of parent
  • 1040 |
  • cell-7: Set item width to 58.3% of parent
  • 1041 |
  • cell-8: Set item width to 66.7% of parent
  • 1042 |
  • cell-9: Set item width to 75% of parent
  • 1043 |
  • cell-10: Set item width to 83.3% of parent
  • 1044 |
  • cell-11: Set item width to 91.7% of parent
  • 1045 |
  • cell-12: Set item width to 100% of parent
  • 1046 |
1047 |
1048 |
1049 | 1050 |
1051 |
    1052 |
  1. 1053 |

    Example footnote text.

    1054 |
  2. 1055 |
1056 |
1057 | 1058 |
1059 | 1060 | 1063 | 1064 |
1065 | 1066 | 1067 | 1072 | 1073 | 1074 | 1075 | 1076 | 1077 | -------------------------------------------------------------------------------- /manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Tawian", 3 | "short_name": "Tawian", 4 | "theme_color": "#2196f3", 5 | "background_color": "#ffffff", 6 | "icons": [{ 7 | "src": "icon.png", 8 | "sizes": "512x512", 9 | "type": "image/png" 10 | }], 11 | "start_url": "index.html", 12 | "display": "standalone", 13 | "orientation": "portrait" 14 | } 15 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tawian-frontend", 3 | "version": "2.1.4", 4 | "description": "Simple CSS framework for Tawian", 5 | "main": "tawian-frontend.css", 6 | "style": "tawian-frontend.css", 7 | "files": [ 8 | "LICENSE", 9 | "tawian-frontend.css", 10 | "icons.svg" 11 | ], 12 | "repository": "maxbeier/tawian-frontend", 13 | "author": "Maximilian Beier", 14 | "license": "MIT", 15 | "keywords": [ 16 | "frontend", 17 | "framework" 18 | ], 19 | "bugs": "https://github.com/maxbeier/tawian-frontend/issues", 20 | "homepage": "http://maxbeier.github.io/tawian-frontend", 21 | "scripts": { 22 | "build": "sass sass/index.scss --style compressed | postcss --use autoprefixer > tawian-frontend.css", 23 | "watch": "fswatch -o sass/* | xargs -n1 sh -c 'sass sass/index.scss --style compressed | postcss --use autoprefixer > tawian-frontend.css'", 24 | "version": "npm run build; git add tawian-frontend.css" 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /sass/_grid.scss: -------------------------------------------------------------------------------- 1 | // Grid ------------------------------------------------------ 2 | 3 | .grid { 4 | display: flex; 5 | flex-wrap: wrap; 6 | } 7 | 8 | .grid-top { align-items: flex-start; } 9 | .grid-middle { align-items: center; } 10 | .grid-bottom { align-items: flex-end; } 11 | .grid-stretch { align-items: stretch; } 12 | .grid-baseline { align-items: baseline; } 13 | 14 | .grid-left { justify-content: flex-start; } 15 | .grid-center { justify-content: center; } 16 | .grid-right { justify-content: flex-end; } 17 | .grid-between { justify-content: space-between; } 18 | .grid-around { justify-content: space-around; } 19 | 20 | 21 | // Cells ------------------------------------------------------ 22 | 23 | .cell { flex: 1; } 24 | .cell > *:last-child { margin-bottom: 0; } 25 | 26 | .cell-top { margin-bottom: auto; } 27 | .cell-middle { margin: auto 0; } 28 | .cell-bottom { margin-top: auto; } 29 | 30 | .cell-1 { flex: 0 0 calc(100% * 1 / 12); min-width: calc(100% * 1 / 12); } // `min-width` for IE 31 | .cell-2 { flex: 0 0 calc(100% * 2 / 12); min-width: calc(100% * 2 / 12); } 32 | .cell-3 { flex: 0 0 calc(100% * 3 / 12); min-width: calc(100% * 3 / 12); } 33 | .cell-4 { flex: 0 0 calc(100% * 4 / 12); min-width: calc(100% * 4 / 12); } 34 | .cell-5 { flex: 0 0 calc(100% * 5 / 12); min-width: calc(100% * 5 / 12); } 35 | .cell-6 { flex: 0 0 calc(100% * 6 / 12); min-width: calc(100% * 6 / 12); } 36 | .cell-7 { flex: 0 0 calc(100% * 7 / 12); min-width: calc(100% * 7 / 12); } 37 | .cell-8 { flex: 0 0 calc(100% * 8 / 12); min-width: calc(100% * 8 / 12); } 38 | .cell-9 { flex: 0 0 calc(100% * 9 / 12); min-width: calc(100% * 9 / 12); } 39 | .cell-10 { flex: 0 0 calc(100% * 10 / 12); min-width: calc(100% * 10 / 12); } 40 | .cell-11 { flex: 0 0 calc(100% * 11 / 12); min-width: calc(100% * 11 / 12); } 41 | .cell-12 { flex: 0 0 calc(100% * 12 / 12); min-width: calc(100% * 12 / 12); } 42 | 43 | 44 | // Inner Spacing ---------------------------------------------- 45 | 46 | @mixin spacing ($width) { 47 | margin-left: -$width; 48 | margin-top: -$width; 49 | 50 | .cell { 51 | padding-left: $width; 52 | padding-top: $width; 53 | } 54 | } 55 | 56 | .grid { @include spacing (1rem); } 57 | .grid-narrow { @include spacing (0); } 58 | .grid-wide { @include spacing (2rem); } 59 | 60 | .grid-inline { 61 | display: flex; 62 | flex-wrap: wrap; 63 | align-items: baseline; 64 | 65 | & > *:not(:last-child) { margin-right: 1rem; } 66 | } 67 | 68 | 69 | // Responsiveness --------------------------------------------- 70 | 71 | @media #{$medium} { 72 | .grid { 73 | flex-direction: column; 74 | flex-wrap: nowrap; // prevents image overflow bug 75 | } 76 | 77 | .cell { 78 | flex: 0 0 auto; 79 | min-width: auto; 80 | } 81 | 82 | .grid-inline { 83 | display: flex; 84 | flex-wrap: wrap; 85 | align-items: baseline; 86 | 87 | & > * { flex: 1 1 100%; } 88 | & > *:not(:last-child) { margin: 0 0 .75rem; } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /sass/_layout.scss: -------------------------------------------------------------------------------- 1 | // Basic Styles ----------------------------------------------- 2 | 3 | // check vertical rhythm (with a baseline of 24px) 4 | // body { background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAAYCAYAAADQ+yzZAAAAF0lEQVQYV2NkgALG4cEoLy//39nZyQgAHvQEGSEIElQAAAAASUVORK5CYII=); } 5 | 6 | * { 7 | box-sizing: border-box; 8 | text-rendering: geometricPrecision; 9 | } 10 | 11 | ::selection { background: $blue-100; } 12 | 13 | html, 14 | button, 15 | input, 16 | optgroup, 17 | select, 18 | textarea { 19 | color: $grey-900; 20 | font-size: 16px; 21 | line-height: 1.5; 22 | font-family: "Cousine", Menlo, Lucida Console, Courier New, monospace; 23 | } 24 | 25 | code, 26 | pre, 27 | samp, 28 | kbd { 29 | font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; 30 | } 31 | 32 | h1, 33 | h2, 34 | h3, 35 | h4, 36 | h5, 37 | h6 { 38 | line-height: 1.5rem; 39 | margin-top: 1.5rem; 40 | margin-bottom: 1.5rem; 41 | 42 | &.pure, 43 | .grid & { 44 | &:before { display: none; } 45 | } 46 | 47 | .grid & { 48 | margin-top: 0rem; 49 | margin-bottom: 1rem; 50 | } 51 | 52 | & > small { 53 | color: $grey; 54 | line-height: 1.5; 55 | } 56 | } 57 | 58 | h1 { 59 | font-size: 1.5rem; 60 | } 61 | h2 { 62 | font-size: 1.25rem; 63 | } 64 | 65 | p, 66 | ul, 67 | ol, 68 | pre, 69 | form, 70 | table, 71 | blockquote { 72 | margin-top: 0; 73 | margin-bottom: 1.5rem; 74 | } 75 | 76 | ul ul, 77 | ol ol, 78 | ul ol, 79 | ol ul { margin-bottom: 0; } 80 | 81 | small { font-size: .75em; } 82 | 83 | 84 | // Page ------------------------------------------------------- 85 | 86 | .container { 87 | max-width: $container; 88 | margin-left: auto; 89 | margin-right: auto; 90 | padding-left: 1rem; 91 | padding-right: 1rem; 92 | } 93 | 94 | .site-header { 95 | display: flex; 96 | flex-wrap: wrap; 97 | align-items: center; 98 | padding: .875rem 0 .625rem; 99 | } 100 | 101 | .site-title { 102 | font-size: 2rem; 103 | color: $blue-grey-600; 104 | } 105 | 106 | .site-search { margin: 0; } 107 | 108 | .site-nav { 109 | display: inline-flex; 110 | align-items: baseline; 111 | margin-left: auto; 112 | margin-top: -.25rem; // diff of .site-header padding 113 | 114 | ul { 115 | display: inline-flex; 116 | flex-wrap: wrap; 117 | align-items: center; 118 | justify-content: flex-end; 119 | margin: 0; 120 | } 121 | 122 | li { 123 | padding-left: 2ch; 124 | 125 | &:last-child { padding-right: 0; } 126 | &:before { display: none; } 127 | } 128 | 129 | &.nav-separated { 130 | overflow: hidden; 131 | 132 | & > ul { margin-right: -2ch; } 133 | 134 | li { 135 | padding-left: 1ch; 136 | 137 | &:after { 138 | content: "|"; 139 | color: $grey-200; 140 | padding-left: 1ch; 141 | } 142 | } 143 | } 144 | 145 | .active { font-weight: bold; } 146 | 147 | @media #{$medium} { 148 | flex: 1; 149 | flex-direction: column; 150 | text-align: right; 151 | 152 | li { padding-top: 1rem; } 153 | } 154 | } 155 | 156 | .responsive-nav { 157 | display: none; 158 | flex: 1; 159 | text-align: right; 160 | 161 | label { 162 | cursor: pointer; 163 | color: $blue-grey-600; 164 | } 165 | 166 | svg { 167 | width: 2rem; 168 | height: 2rem; 169 | stroke-width: 2.5px; 170 | } 171 | 172 | & + input[type=checkbox] { display: none; } 173 | 174 | @media #{$medium} { 175 | display: block; 176 | 177 | & ~ .site-nav { 178 | display: none; 179 | min-width: 100%; // so it gets its own row 180 | flex-basis: 100%; 181 | } 182 | 183 | & + input[type=checkbox]:checked ~ .site-nav { display: block; } 184 | 185 | // Animated Version (uses a magic number and timing is slighly off) 186 | &.responsive-nav-animated { 187 | & ~ .site-nav { 188 | display: block; 189 | max-height: 0; 190 | transition: max-height .5s ease-out; 191 | overflow: hidden; 192 | } 193 | 194 | & + input[type=checkbox]:checked ~ .site-nav { 195 | max-height: 10rem; // magic number; should be as near at the real value as possible to reduce perceived delays while the animation hides unused space 196 | transition-timing-function: ease-in; 197 | } 198 | } 199 | } 200 | } 201 | 202 | .site-main { 203 | margin-top: 3rem; 204 | margin-bottom: 3rem; 205 | } 206 | 207 | .site-footer { 208 | margin-top: 3rem; 209 | padding: 3rem 0; 210 | color: $grey-400; 211 | text-align: center; 212 | 213 | a { color: $blue-300; } 214 | } 215 | -------------------------------------------------------------------------------- /sass/_markdown.scss: -------------------------------------------------------------------------------- 1 | // From https://github.com/mrcoles/markdown-css and https://github.com/egoist/hack 2 | 3 | 4 | // Normalize ------------------------------------------------- 5 | 6 | h1, 7 | h2, 8 | h3, 9 | h4, 10 | h5, 11 | h6, 12 | ol, 13 | ul, 14 | li, 15 | code, 16 | blockquote { 17 | margin: 0; 18 | padding: 0; 19 | font-size: 1rem; 20 | } 21 | 22 | 23 | // Headings --------------------------------------------------- 24 | 25 | h1, 26 | h2, 27 | h3, 28 | h4, 29 | h5, 30 | h6 { 31 | position: relative; 32 | 33 | &:before { 34 | position: absolute; 35 | left: -4.675rem; 36 | width: 4rem; 37 | text-align: right; 38 | color: $grey-400; 39 | } 40 | 41 | @media screen and (max-width : $container + 4rem) { 42 | &:before { 43 | position: static; 44 | padding-right: 1ch; 45 | } 46 | } 47 | } 48 | 49 | h1:before { content: "#"; } 50 | h2:before { content: "##"; } 51 | h3:before { content: "###"; } 52 | h4:before { content: "####"; } 53 | h5:before { content: "#####"; } 54 | h6:before { content: "######"; } 55 | 56 | 57 | // Lists ------------------------------------------------------ 58 | 59 | ol { counter-reset: ol; } 60 | 61 | ul > li { padding-left: 2ch; } 62 | ol > li { padding-left: 3ch; } 63 | 64 | li { 65 | position: relative; 66 | display: block; 67 | 68 | &:before { 69 | position: absolute; 70 | top: 0; 71 | left: 0; 72 | color: $grey-400; 73 | } 74 | } 75 | 76 | ul > li:before { content: "–"; } 77 | 78 | ol > li:before { 79 | content: counter(ol) "."; 80 | counter-increment: ol; 81 | } 82 | 83 | 84 | // Horizontal Rules ------------------------------------------- 85 | 86 | hr { 87 | height: 1rem; 88 | margin: 1.75rem 0; 89 | border: 0; 90 | 91 | &:after { 92 | display: block; 93 | height: 1rem; 94 | overflow: hidden; 95 | content: "* * *"; 96 | text-align: center; 97 | overflow: hidden; 98 | color: $grey-400; 99 | font-size: .75rem; 100 | } 101 | } 102 | 103 | %dashed { 104 | content: "– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –"; 105 | position: absolute; 106 | left: 0; 107 | overflow: hidden; 108 | width: 100%; 109 | height: 1rem; 110 | line-height: 1; 111 | word-wrap: break-word; 112 | text-align: justify; 113 | letter-spacing: -.25rem; 114 | font-size: 1rem; 115 | color: $grey-300; 116 | } 117 | 118 | .dashed-top { 119 | position: relative; 120 | &:before { 121 | @extend %dashed; 122 | top: -.5rem; 123 | } 124 | } 125 | 126 | .dashed-bottom { 127 | position: relative; 128 | &:after { 129 | @extend %dashed; 130 | bottom: -.5rem; 131 | } 132 | } 133 | 134 | hr.dashed { 135 | @extend .dashed-top; 136 | margin: 2rem 0 1rem; 137 | } 138 | -------------------------------------------------------------------------------- /sass/_normalize.scss: -------------------------------------------------------------------------------- 1 | /*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */ 2 | 3 | /** 4 | * 1. Change the default font family in all browsers (opinionated). 5 | * 2. Correct the line height in all browsers. 6 | * 3. Prevent adjustments of font size after orientation changes in 7 | * IE on Windows Phone and in iOS. 8 | */ 9 | 10 | /* Document 11 | ========================================================================== */ 12 | 13 | html { 14 | font-family: sans-serif; /* 1 */ 15 | line-height: 1.15; /* 2 */ 16 | -ms-text-size-adjust: 100%; /* 3 */ 17 | -webkit-text-size-adjust: 100%; /* 3 */ 18 | } 19 | 20 | /* Sections 21 | ========================================================================== */ 22 | 23 | /** 24 | * Remove the margin in all browsers (opinionated). 25 | */ 26 | 27 | body { 28 | margin: 0; 29 | } 30 | 31 | /** 32 | * Add the correct display in IE 9-. 33 | */ 34 | 35 | article, 36 | aside, 37 | footer, 38 | header, 39 | nav, 40 | section { 41 | display: block; 42 | } 43 | 44 | /** 45 | * Correct the font size and margin on `h1` elements within `section` and 46 | * `article` contexts in Chrome, Firefox, and Safari. 47 | */ 48 | 49 | h1 { 50 | font-size: 2em; 51 | margin: 0.67em 0; 52 | } 53 | 54 | /* Grouping content 55 | ========================================================================== */ 56 | 57 | /** 58 | * Add the correct display in IE 9-. 59 | * 1. Add the correct display in IE. 60 | */ 61 | 62 | figcaption, 63 | figure, 64 | main { /* 1 */ 65 | display: block; 66 | } 67 | 68 | /** 69 | * Add the correct margin in IE 8. 70 | */ 71 | 72 | figure { 73 | margin: 1em 40px; 74 | } 75 | 76 | /** 77 | * 1. Add the correct box sizing in Firefox. 78 | * 2. Show the overflow in Edge and IE. 79 | */ 80 | 81 | hr { 82 | box-sizing: content-box; /* 1 */ 83 | height: 0; /* 1 */ 84 | overflow: visible; /* 2 */ 85 | } 86 | 87 | /** 88 | * 1. Correct the inheritance and scaling of font size in all browsers. 89 | * 2. Correct the odd `em` font sizing in all browsers. 90 | */ 91 | 92 | pre { 93 | font-family: monospace, monospace; /* 1 */ 94 | font-size: 1em; /* 2 */ 95 | } 96 | 97 | /* Text-level semantics 98 | ========================================================================== */ 99 | 100 | /** 101 | * 1. Remove the gray background on active links in IE 10. 102 | * 2. Remove gaps in links underline in iOS 8+ and Safari 8+. 103 | */ 104 | 105 | a { 106 | background-color: transparent; /* 1 */ 107 | -webkit-text-decoration-skip: objects; /* 2 */ 108 | } 109 | 110 | /** 111 | * Remove the outline on focused links when they are also active or hovered 112 | * in all browsers (opinionated). 113 | */ 114 | 115 | a:active, 116 | a:hover { 117 | outline-width: 0; 118 | } 119 | 120 | /** 121 | * 1. Remove the bottom border in Firefox 39-. 122 | * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. 123 | */ 124 | 125 | abbr[title] { 126 | border-bottom: none; /* 1 */ 127 | text-decoration: underline; /* 2 */ 128 | text-decoration: underline dotted; /* 2 */ 129 | } 130 | 131 | /** 132 | * Prevent the duplicate application of `bolder` by the next rule in Safari 6. 133 | */ 134 | 135 | b, 136 | strong { 137 | font-weight: inherit; 138 | } 139 | 140 | /** 141 | * Add the correct font weight in Chrome, Edge, and Safari. 142 | */ 143 | 144 | b, 145 | strong { 146 | font-weight: bolder; 147 | } 148 | 149 | /** 150 | * 1. Correct the inheritance and scaling of font size in all browsers. 151 | * 2. Correct the odd `em` font sizing in all browsers. 152 | */ 153 | 154 | code, 155 | kbd, 156 | samp { 157 | font-family: monospace, monospace; /* 1 */ 158 | font-size: 1em; /* 2 */ 159 | } 160 | 161 | /** 162 | * Add the correct font style in Android 4.3-. 163 | */ 164 | 165 | dfn { 166 | font-style: italic; 167 | } 168 | 169 | /** 170 | * Add the correct background and color in IE 9-. 171 | */ 172 | 173 | mark { 174 | background-color: #ff0; 175 | color: #000; 176 | } 177 | 178 | /** 179 | * Add the correct font size in all browsers. 180 | */ 181 | 182 | small { 183 | font-size: 80%; 184 | } 185 | 186 | /** 187 | * Prevent `sub` and `sup` elements from affecting the line height in 188 | * all browsers. 189 | */ 190 | 191 | sub, 192 | sup { 193 | font-size: 75%; 194 | line-height: 0; 195 | position: relative; 196 | vertical-align: baseline; 197 | } 198 | 199 | sub { 200 | bottom: -0.25em; 201 | } 202 | 203 | sup { 204 | top: -0.5em; 205 | } 206 | 207 | /* Embedded content 208 | ========================================================================== */ 209 | 210 | /** 211 | * Add the correct display in IE 9-. 212 | */ 213 | 214 | audio, 215 | video { 216 | display: inline-block; 217 | } 218 | 219 | /** 220 | * Add the correct display in iOS 4-7. 221 | */ 222 | 223 | audio:not([controls]) { 224 | display: none; 225 | height: 0; 226 | } 227 | 228 | /** 229 | * Remove the border on images inside links in IE 10-. 230 | */ 231 | 232 | img { 233 | border-style: none; 234 | } 235 | 236 | /** 237 | * Hide the overflow in IE. 238 | */ 239 | 240 | svg:not(:root) { 241 | overflow: hidden; 242 | } 243 | 244 | /* Forms 245 | ========================================================================== */ 246 | 247 | /** 248 | * 1. Change the font styles in all browsers (opinionated). 249 | * 2. Remove the margin in Firefox and Safari. 250 | */ 251 | 252 | button, 253 | input, 254 | optgroup, 255 | select, 256 | textarea { 257 | font-family: sans-serif; /* 1 */ 258 | font-size: 100%; /* 1 */ 259 | line-height: 1.15; /* 1 */ 260 | margin: 0; /* 2 */ 261 | } 262 | 263 | /** 264 | * Show the overflow in IE. 265 | * 1. Show the overflow in Edge. 266 | */ 267 | 268 | button, 269 | input { /* 1 */ 270 | overflow: visible; 271 | } 272 | 273 | /** 274 | * Remove the inheritance of text transform in Edge, Firefox, and IE. 275 | * 1. Remove the inheritance of text transform in Firefox. 276 | */ 277 | 278 | button, 279 | select { /* 1 */ 280 | text-transform: none; 281 | } 282 | 283 | /** 284 | * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video` 285 | * controls in Android 4. 286 | * 2. Correct the inability to style clickable types in iOS and Safari. 287 | */ 288 | 289 | button, 290 | html [type="button"], /* 1 */ 291 | [type="reset"], 292 | [type="submit"] { 293 | -webkit-appearance: button; /* 2 */ 294 | } 295 | 296 | /** 297 | * Remove the inner border and padding in Firefox. 298 | */ 299 | 300 | button::-moz-focus-inner, 301 | [type="button"]::-moz-focus-inner, 302 | [type="reset"]::-moz-focus-inner, 303 | [type="submit"]::-moz-focus-inner { 304 | border-style: none; 305 | padding: 0; 306 | } 307 | 308 | /** 309 | * Restore the focus styles unset by the previous rule. 310 | */ 311 | 312 | button:-moz-focusring, 313 | [type="button"]:-moz-focusring, 314 | [type="reset"]:-moz-focusring, 315 | [type="submit"]:-moz-focusring { 316 | outline: 1px dotted ButtonText; 317 | } 318 | 319 | /** 320 | * Change the border, margin, and padding in all browsers (opinionated). 321 | */ 322 | 323 | fieldset { 324 | border: 1px solid #c0c0c0; 325 | margin: 0 2px; 326 | padding: 0.35em 0.625em 0.75em; 327 | } 328 | 329 | /** 330 | * 1. Correct the text wrapping in Edge and IE. 331 | * 2. Correct the color inheritance from `fieldset` elements in IE. 332 | * 3. Remove the padding so developers are not caught out when they zero out 333 | * `fieldset` elements in all browsers. 334 | */ 335 | 336 | legend { 337 | box-sizing: border-box; /* 1 */ 338 | color: inherit; /* 2 */ 339 | display: table; /* 1 */ 340 | max-width: 100%; /* 1 */ 341 | padding: 0; /* 3 */ 342 | white-space: normal; /* 1 */ 343 | } 344 | 345 | /** 346 | * 1. Add the correct display in IE 9-. 347 | * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera. 348 | */ 349 | 350 | progress { 351 | display: inline-block; /* 1 */ 352 | vertical-align: baseline; /* 2 */ 353 | } 354 | 355 | /** 356 | * Remove the default vertical scrollbar in IE. 357 | */ 358 | 359 | textarea { 360 | overflow: auto; 361 | } 362 | 363 | /** 364 | * 1. Add the correct box sizing in IE 10-. 365 | * 2. Remove the padding in IE 10-. 366 | */ 367 | 368 | [type="checkbox"], 369 | [type="radio"] { 370 | box-sizing: border-box; /* 1 */ 371 | padding: 0; /* 2 */ 372 | } 373 | 374 | /** 375 | * Correct the cursor style of increment and decrement buttons in Chrome. 376 | */ 377 | 378 | [type="number"]::-webkit-inner-spin-button, 379 | [type="number"]::-webkit-outer-spin-button { 380 | height: auto; 381 | } 382 | 383 | /** 384 | * 1. Correct the odd appearance in Chrome and Safari. 385 | * 2. Correct the outline style in Safari. 386 | */ 387 | 388 | [type="search"] { 389 | -webkit-appearance: textfield; /* 1 */ 390 | outline-offset: -2px; /* 2 */ 391 | } 392 | 393 | /** 394 | * Remove the inner padding and cancel buttons in Chrome and Safari on macOS. 395 | */ 396 | 397 | [type="search"]::-webkit-search-cancel-button, 398 | [type="search"]::-webkit-search-decoration { 399 | -webkit-appearance: none; 400 | } 401 | 402 | /** 403 | * 1. Correct the inability to style clickable types in iOS and Safari. 404 | * 2. Change font properties to `inherit` in Safari. 405 | */ 406 | 407 | ::-webkit-file-upload-button { 408 | -webkit-appearance: button; /* 1 */ 409 | font: inherit; /* 2 */ 410 | } 411 | 412 | /* Interactive 413 | ========================================================================== */ 414 | 415 | /* 416 | * Add the correct display in IE 9-. 417 | * 1. Add the correct display in Edge, IE, and Firefox. 418 | */ 419 | 420 | details, /* 1 */ 421 | menu { 422 | display: block; 423 | } 424 | 425 | /* 426 | * Add the correct display in all browsers. 427 | */ 428 | 429 | summary { 430 | display: list-item; 431 | } 432 | 433 | /* Scripting 434 | ========================================================================== */ 435 | 436 | /** 437 | * Add the correct display in IE 9-. 438 | */ 439 | 440 | canvas { 441 | display: inline-block; 442 | } 443 | 444 | /** 445 | * Add the correct display in IE. 446 | */ 447 | 448 | template { 449 | display: none; 450 | } 451 | 452 | /* Hidden 453 | ========================================================================== */ 454 | 455 | /** 456 | * Add the correct display in IE 10-. 457 | */ 458 | 459 | [hidden] { 460 | display: none; 461 | } 462 | -------------------------------------------------------------------------------- /sass/_print.scss: -------------------------------------------------------------------------------- 1 | @media print { 2 | 3 | html, 4 | button, 5 | input, 6 | optgroup, 7 | select, 8 | textarea { 9 | font-size: 14px; 10 | line-height: 1.15; 11 | text-size-adjust: 100%; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | text-rendering: optimizeLegibility; 15 | } 16 | 17 | h1, 18 | h2, 19 | h3, 20 | h4, 21 | h5, 22 | h6 { 23 | &:before { display: none; } 24 | } 25 | 26 | *, 27 | *:before, 28 | *:after, 29 | *:first-letter, 30 | p:first-line, 31 | div:first-line, 32 | blockquote:first-line, 33 | li:first-line { 34 | background: transparent !important; 35 | color: #000 !important; 36 | box-shadow: none !important; 37 | text-shadow: none !important; 38 | } 39 | 40 | a[href]:after { 41 | content: " (" attr(href) ")"; 42 | } 43 | 44 | abbr[title]:after { 45 | content: " (" attr(title) ")"; 46 | } 47 | 48 | .btn { border: 1px solid #000; } 49 | 50 | .no-print { display: none !important; } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /sass/_syntax.scss: -------------------------------------------------------------------------------- 1 | // From https://github.com/poole/lanyon/blob/master/public/css/syntax.css 2 | 3 | .highlight .hll { background-color: #ffc; } 4 | .highlight .c { color: #999; } /* Comment */ 5 | .highlight .err { color: #a00; background-color: #faa } /* Error */ 6 | .highlight .k { color: #069; } /* Keyword */ 7 | .highlight .o { color: #555 } /* Operator */ 8 | .highlight .cm { color: #09f; font-style: italic } /* Comment.Multiline */ 9 | .highlight .cp { color: #099 } /* Comment.Preproc */ 10 | .highlight .c1 { color: #999; } /* Comment.Single */ 11 | .highlight .cs { color: #999; } /* Comment.Special */ 12 | .highlight .gd { background-color: #fcc; border: 1px solid #c00 } /* Generic.Deleted */ 13 | .highlight .ge { font-style: italic } /* Generic.Emph */ 14 | .highlight .gr { color: #f00 } /* Generic.Error */ 15 | .highlight .gh { color: #030; } /* Generic.Heading */ 16 | .highlight .gi { background-color: #cfc; border: 1px solid #0c0 } /* Generic.Inserted */ 17 | .highlight .go { color: #aaa } /* Generic.Output */ 18 | .highlight .gp { color: #009; } /* Generic.Prompt */ 19 | .highlight .gs { } /* Generic.Strong */ 20 | .highlight .gu { color: #030; } /* Generic.Subheading */ 21 | .highlight .gt { color: #9c6 } /* Generic.Traceback */ 22 | .highlight .kc { color: #069; } /* Keyword.Constant */ 23 | .highlight .kd { color: #069; } /* Keyword.Declaration */ 24 | .highlight .kn { color: #069; } /* Keyword.Namespace */ 25 | .highlight .kp { color: #069 } /* Keyword.Pseudo */ 26 | .highlight .kr { color: #069; } /* Keyword.Reserved */ 27 | .highlight .kt { color: #078; } /* Keyword.Type */ 28 | .highlight .m { color: #f60 } /* Literal.Number */ 29 | .highlight .s { color: #d44950 } /* Literal.String */ 30 | .highlight .na { color: #4f9fcf } /* Name.Attribute */ 31 | .highlight .nb { color: #366 } /* Name.Builtin */ 32 | .highlight .nc { color: #0a8; } /* Name.Class */ 33 | .highlight .no { color: #360 } /* Name.Constant */ 34 | .highlight .nd { color: #99f } /* Name.Decorator */ 35 | .highlight .ni { color: #999; } /* Name.Entity */ 36 | .highlight .ne { color: #c00; } /* Name.Exception */ 37 | .highlight .nf { color: #c0f } /* Name.Function */ 38 | .highlight .nl { color: #99f } /* Name.Label */ 39 | .highlight .nn { color: #0cf; } /* Name.Namespace */ 40 | .highlight .nt { color: #2f6f9f; } /* Name.Tag */ 41 | .highlight .nv { color: #033 } /* Name.Variable */ 42 | .highlight .ow { color: #000; } /* Operator.Word */ 43 | .highlight .w { color: #bbb } /* Text.Whitespace */ 44 | .highlight .mf { color: #f60 } /* Literal.Number.Float */ 45 | .highlight .mh { color: #f60 } /* Literal.Number.Hex */ 46 | .highlight .mi { color: #f60 } /* Literal.Number.Integer */ 47 | .highlight .mo { color: #f60 } /* Literal.Number.Oct */ 48 | .highlight .sb { color: #c30 } /* Literal.String.Backtick */ 49 | .highlight .sc { color: #c30 } /* Literal.String.Char */ 50 | .highlight .sd { color: #c30; font-style: italic } /* Literal.String.Doc */ 51 | .highlight .s2 { color: #c30 } /* Literal.String.Double */ 52 | .highlight .se { color: #c30; } /* Literal.String.Escape */ 53 | .highlight .sh { color: #c30 } /* Literal.String.Heredoc */ 54 | .highlight .si { color: #a00 } /* Literal.String.Interpol */ 55 | .highlight .sx { color: #c30 } /* Literal.String.Other */ 56 | .highlight .sr { color: #3aa } /* Literal.String.Regex */ 57 | .highlight .s1 { color: #c30 } /* Literal.String.Single */ 58 | .highlight .ss { color: #fc3 } /* Literal.String.Symbol */ 59 | .highlight .bp { color: #366 } /* Name.Builtin.Pseudo */ 60 | .highlight .vc { color: #033 } /* Name.Variable.Class */ 61 | .highlight .vg { color: #033 } /* Name.Variable.Global */ 62 | .highlight .vi { color: #033 } /* Name.Variable.Instance */ 63 | .highlight .il { color: #f60 } /* Literal.Number.Integer.Long */ 64 | -------------------------------------------------------------------------------- /sass/_utilities.scss: -------------------------------------------------------------------------------- 1 | // Space and Size --------------------------------------------- 2 | 3 | .narrow { padding: 0 !important; } 4 | .inner { padding: .5rem .75rem .25rem !important; } 5 | .inner-wide { padding: 1rem 1rem .75rem !important; } 6 | 7 | .p-t-0 { padding-top: 0 !important; } 8 | .p-t-1 { padding-top: 1.5rem !important; } 9 | .p-t-2 { padding-top: 3.0rem !important; } 10 | .p-t-3 { padding-top: 4.5rem !important; } 11 | 12 | .p-b-0 { padding-bottom: 0 !important; } 13 | .p-b-1 { padding-bottom: 1.5rem !important; } 14 | .p-b-2 { padding-bottom: 3.0rem !important; } 15 | .p-b-3 { padding-bottom: 4.5rem !important; } 16 | 17 | .m-t-0 { margin-top: 0 !important; } 18 | .m-t-1 { margin-top: 1.5rem !important; } 19 | .m-t-2 { margin-top: 3.0rem !important; } 20 | .m-t-3 { margin-top: 4.5rem !important; } 21 | 22 | .m-b-0 { margin-bottom: 0 !important; } 23 | .m-b-1 { margin-bottom: 1.5rem !important; } 24 | .m-b-2 { margin-bottom: 3.0rem !important; } 25 | .m-b-3 { margin-bottom: 4.5rem !important; } 26 | 27 | .pull-left { float: left !important; } 28 | .pull-right { float: right !important; } 29 | 30 | .full-width { width: 100% !important; } 31 | .block { display: block !important; } 32 | 33 | 34 | // Hiding ----------------------------------------------------- 35 | 36 | .invisible { visibility: hidden !important; } 37 | 38 | .hidden { display: none !important; } 39 | 40 | .hide-text { 41 | font: 0/0 a; 42 | color: transparent; 43 | text-shadow: none; 44 | background-color: transparent; 45 | border: 0; 46 | } 47 | 48 | @media #{$large} { 49 | .hidden-if-large { display: none !important; } 50 | } 51 | 52 | @media #{$medium} { 53 | .hidden-if-medium { display: none !important; } 54 | } 55 | 56 | @media #{$small} { 57 | .hidden-if-small { display: none !important; } 58 | } 59 | 60 | 61 | // Text ------------------------------------------------------- 62 | 63 | .lead { 64 | margin-bottom: 1.5rem; 65 | font-size: 1.25em; 66 | line-height: 1.2em; 67 | 68 | } 69 | 70 | .truncate { 71 | overflow: hidden; 72 | white-space: nowrap; 73 | text-overflow: ellipsis; 74 | } 75 | 76 | .text-left { text-align: left; } 77 | .text-center { text-align: center; } 78 | .text-right { text-align: right; } 79 | 80 | .text-bold { font-weight: bold; } 81 | .text-italic { font-style: italic; } 82 | 83 | 84 | // Color ------------------------------------------------------ 85 | 86 | .bg-muted { background-color: $grey-100 !important; } 87 | .bg-active { background-color: $blue-100 !important; } 88 | .bg-success { background-color: $green-100 !important; } 89 | .bg-info { background-color: $cyan-100 !important; } 90 | .bg-warning { background-color: $orange-100 !important; } 91 | .bg-error { background-color: $red-100 !important; } 92 | 93 | .text-muted { color: $grey; } 94 | .text-primary { color: $blue; } 95 | .text-success { color: $green; } 96 | .text-info { color: $cyan; } 97 | .text-warning { color: $orange; } 98 | .text-error { color: $red; } 99 | -------------------------------------------------------------------------------- /sass/_variables.scss: -------------------------------------------------------------------------------- 1 | $container: 64rem; 2 | $breakpoint-medium: 48rem; 3 | $breakpoint-small: 30rem; 4 | 5 | $small: "screen and (max-width : #{$breakpoint-small})"; 6 | $medium: "screen and (max-width : #{$breakpoint-medium})"; 7 | $large: "screen and (min-width : #{$breakpoint-medium})"; 8 | 9 | $button-radius: 2px; 10 | $border-width: 1px; 11 | $form-border-width: 2px; 12 | $form-label-width: 10rem; 13 | 14 | 15 | // Material Design Colors ------------------------------------- 16 | 17 | $black: #000000; 18 | $white: #ffffff; 19 | 20 | $red: #f44336; 21 | $red-50: #ffebee; 22 | $red-100: #ffcdd2; 23 | $red-200: #ef9a9a; 24 | $red-300: #e57373; 25 | $red-400: #ef5350; 26 | $red-500: $red; 27 | $red-600: #e53935; 28 | $red-700: #d32f2f; 29 | $red-800: #c62828; 30 | $red-900: #b71c1c; 31 | 32 | $red-a100: #ff8a80; 33 | $red-a200: #ff5252; 34 | $red-a400: #ff1744; 35 | $red-a700: #d50000; 36 | 37 | $pink: #e91e63; 38 | $pink-50: #fce4ec; 39 | $pink-100: #f8bbd0; 40 | $pink-200: #f48fb1; 41 | $pink-300: #f06292; 42 | $pink-400: #ec407a; 43 | $pink-500: $pink; 44 | $pink-600: #d81b60; 45 | $pink-700: #c2185b; 46 | $pink-800: #ad1457; 47 | $pink-900: #880e4f; 48 | 49 | $pink-a100: #ff80ab; 50 | $pink-a200: #ff4081; 51 | $pink-a400: #f50057; 52 | $pink-a700: #c51162; 53 | 54 | $purple: #9c27b0; 55 | $purple-50: #f3e5f5; 56 | $purple-100: #e1bee7; 57 | $purple-200: #ce93d8; 58 | $purple-300: #ba68c8; 59 | $purple-400: #ab47bc; 60 | $purple-500: $purple; 61 | $purple-600: #8e24aa; 62 | $purple-700: #7b1fa2; 63 | $purple-800: #6a1b9a; 64 | $purple-900: #4a148c; 65 | 66 | $purple-a100: #ea80fc; 67 | $purple-a200: #e040fb; 68 | $purple-a400: #d500f9; 69 | $purple-a700: #aa00ff; 70 | 71 | $deep-purple: #673ab7; 72 | $deep-purple-50: #ede7f6; 73 | $deep-purple-100: #d1c4e9; 74 | $deep-purple-200: #b39ddb; 75 | $deep-purple-300: #9575cd; 76 | $deep-purple-400: #7e57c2; 77 | $deep-purple-500: $deep-purple; 78 | $deep-purple-600: #5e35b1; 79 | $deep-purple-700: #512da8; 80 | $deep-purple-800: #4527a0; 81 | $deep-purple-900: #311b92; 82 | 83 | $deep-purple-a100: #b388ff; 84 | $deep-purple-a200: #7c4dff; 85 | $deep-purple-a400: #651fff; 86 | $deep-purple-a700: #6200ea; 87 | 88 | $indigo: #3f51b5; 89 | $indigo-50: #e8eaf6; 90 | $indigo-100: #c5cae9; 91 | $indigo-200: #9fa8da; 92 | $indigo-300: #7986cb; 93 | $indigo-400: #5c6bc0; 94 | $indigo-500: $indigo; 95 | $indigo-600: #3949ab; 96 | $indigo-700: #303f9f; 97 | $indigo-800: #283593; 98 | $indigo-900: #1a237e; 99 | 100 | $indigo-a100: #8c9eff; 101 | $indigo-a200: #536dfe; 102 | $indigo-a400: #3d5afe; 103 | $indigo-a700: #304ffe; 104 | 105 | $blue: #2196f3; 106 | $blue-50: #e3f2fd; 107 | $blue-100: #bbdefb; 108 | $blue-200: #90caf9; 109 | $blue-300: #64b5f6; 110 | $blue-400: #42a5f5; 111 | $blue-500: $blue; 112 | $blue-600: #1e88e5; 113 | $blue-700: #1976d2; 114 | $blue-800: #1565c0; 115 | $blue-900: #0d47a1; 116 | 117 | $blue-a100: #82b1ff; 118 | $blue-a200: #448aff; 119 | $blue-a400: #2979ff; 120 | $blue-a700: #2962ff; 121 | 122 | $light-blue: #03a9f4; 123 | $light-blue-50: #e1f5fe; 124 | $light-blue-100: #b3e5fc; 125 | $light-blue-200: #81d4fa; 126 | $light-blue-300: #4fc3f7; 127 | $light-blue-400: #29b6f6; 128 | $light-blue-500: $light-blue; 129 | $light-blue-600: #039be5; 130 | $light-blue-700: #0288d1; 131 | $light-blue-800: #0277bd; 132 | $light-blue-900: #01579b; 133 | 134 | $light-blue-a100: #80d8ff; 135 | $light-blue-a200: #40c4ff; 136 | $light-blue-a400: #00b0ff; 137 | $light-blue-a700: #0091ea; 138 | 139 | $cyan: #00bcd4; 140 | $cyan-50: #e0f7fa; 141 | $cyan-100: #b2ebf2; 142 | $cyan-200: #80deea; 143 | $cyan-300: #4dd0e1; 144 | $cyan-400: #26c6da; 145 | $cyan-500: $cyan; 146 | $cyan-600: #00acc1; 147 | $cyan-700: #0097a7; 148 | $cyan-800: #00838f; 149 | $cyan-900: #006064; 150 | 151 | $cyan-a100: #84ffff; 152 | $cyan-a200: #18ffff; 153 | $cyan-a400: #00e5ff; 154 | $cyan-a700: #00b8d4; 155 | 156 | $teal: #009688; 157 | $teal-50: #e0f2f1; 158 | $teal-100: #b2dfdb; 159 | $teal-200: #80cbc4; 160 | $teal-300: #4db6ac; 161 | $teal-400: #26a69a; 162 | $teal-500: $teal; 163 | $teal-600: #00897b; 164 | $teal-700: #00796b; 165 | $teal-800: #00695c; 166 | $teal-900: #004d40; 167 | 168 | $teal-a100: #a7ffeb; 169 | $teal-a200: #64ffda; 170 | $teal-a400: #1de9b6; 171 | $teal-a700: #00bfa5; 172 | 173 | $green: #4caf50; 174 | $green-50: #e8f5e9; 175 | $green-100: #c8e6c9; 176 | $green-200: #a5d6a7; 177 | $green-300: #81c784; 178 | $green-400: #66bb6a; 179 | $green-500: $green; 180 | $green-600: #43a047; 181 | $green-700: #388e3c; 182 | $green-800: #2e7d32; 183 | $green-900: #1b5e20; 184 | 185 | $green-a100: #b9f6ca; 186 | $green-a200: #69f0ae; 187 | $green-a400: #00e676; 188 | $green-a700: #00c853; 189 | 190 | $light-green: #8bc34a; 191 | $light-green-50: #f1f8e9; 192 | $light-green-100: #dcedc8; 193 | $light-green-200: #c5e1a5; 194 | $light-green-300: #aed581; 195 | $light-green-400: #9ccc65; 196 | $light-green-500: $light-green; 197 | $light-green-600: #7cb342; 198 | $light-green-700: #689f38; 199 | $light-green-800: #558b2f; 200 | $light-green-900: #33691e; 201 | 202 | $light-green-a100: #ccff90; 203 | $light-green-a200: #b2ff59; 204 | $light-green-a400: #76ff03; 205 | $light-green-a700: #64dd17; 206 | 207 | $lime: #cddc39; 208 | $lime-50: #f9fbe7; 209 | $lime-100: #f0f4c3; 210 | $lime-200: #e6ee9c; 211 | $lime-300: #dce775; 212 | $lime-400: #d4e157; 213 | $lime-500: $lime; 214 | $lime-600: #c0ca33; 215 | $lime-700: #afb42b; 216 | $lime-800: #9e9d24; 217 | $lime-900: #827717; 218 | 219 | $lime-a100: #f4ff81; 220 | $lime-a200: #eeff41; 221 | $lime-a400: #c6ff00; 222 | $lime-a700: #aeea00; 223 | 224 | $yellow: #ffeb3b; 225 | $yellow-50: #fffde7; 226 | $yellow-100: #fff9c4; 227 | $yellow-200: #fff59d; 228 | $yellow-300: #fff176; 229 | $yellow-400: #ffee58; 230 | $yellow-500: $yellow; 231 | $yellow-600: #fdd835; 232 | $yellow-700: #fbc02d; 233 | $yellow-800: #f9a825; 234 | $yellow-900: #f57f17; 235 | 236 | $yellow-a100: #ffff8d; 237 | $yellow-a200: #ffff00; 238 | $yellow-a400: #ffea00; 239 | $yellow-a700: #ffd600; 240 | 241 | $amber: #ffc107; 242 | $amber-50: #fff8e1; 243 | $amber-100: #ffecb3; 244 | $amber-200: #ffe082; 245 | $amber-300: #ffd54f; 246 | $amber-400: #ffca28; 247 | $amber-500: $amber; 248 | $amber-600: #ffb300; 249 | $amber-700: #ffa000; 250 | $amber-800: #ff8f00; 251 | $amber-900: #ff6f00; 252 | 253 | $amber-a100: #ffe57f; 254 | $amber-a200: #ffd740; 255 | $amber-a400: #ffc400; 256 | $amber-a700: #ffab00; 257 | 258 | $orange: #ff9800; 259 | $orange-50: #fff3e0; 260 | $orange-100: #ffe0b2; 261 | $orange-200: #ffcc80; 262 | $orange-300: #ffb74d; 263 | $orange-400: #ffa726; 264 | $orange-500: $orange; 265 | $orange-600: #fb8c00; 266 | $orange-700: #f57c00; 267 | $orange-800: #ef6c00; 268 | $orange-900: #e65100; 269 | 270 | $orange-a100: #ffd180; 271 | $orange-a200: #ffab40; 272 | $orange-a400: #ff9100; 273 | $orange-a700: #ff6d00; 274 | 275 | $deep-orange: #ff5722; 276 | $deep-orange-50: #fbe9e7; 277 | $deep-orange-100: #ffccbc; 278 | $deep-orange-200: #ffab91; 279 | $deep-orange-300: #ff8a65; 280 | $deep-orange-400: #ff7043; 281 | $deep-orange-500: $deep-orange; 282 | $deep-orange-600: #f4511e; 283 | $deep-orange-700: #e64a19; 284 | $deep-orange-800: #d84315; 285 | $deep-orange-900: #bf360c; 286 | 287 | $deep-orange-a100: #ff9e80; 288 | $deep-orange-a200: #ff6e40; 289 | $deep-orange-a400: #ff3d00; 290 | $deep-orange-a700: #dd2c00; 291 | 292 | $brown: #795548; 293 | $brown-50: #efebe9; 294 | $brown-100: #d7ccc8; 295 | $brown-200: #bcaaa4; 296 | $brown-300: #a1887f; 297 | $brown-400: #8d6e63; 298 | $brown-500: $brown; 299 | $brown-600: #6d4c41; 300 | $brown-700: #5d4037; 301 | $brown-800: #4e342e; 302 | $brown-900: #3e2723; 303 | 304 | $grey: #9e9e9e; 305 | $grey-50: #fafafa; 306 | $grey-100: #f5f5f5; 307 | $grey-200: #eeeeee; 308 | $grey-300: #e0e0e0; 309 | $grey-400: #bdbdbd; 310 | $grey-500: $grey; 311 | $grey-600: #757575; 312 | $grey-700: #616161; 313 | $grey-800: #424242; 314 | $grey-900: #212121; 315 | 316 | $blue-grey: #607d8b; 317 | $blue-grey-50: #eceff1; 318 | $blue-grey-100: #cfd8dc; 319 | $blue-grey-200: #b0bec5; 320 | $blue-grey-300: #90a4ae; 321 | $blue-grey-400: #78909c; 322 | $blue-grey-500: $blue-grey; 323 | $blue-grey-600: #546e7a; 324 | $blue-grey-700: #455a64; 325 | $blue-grey-800: #37474f; 326 | $blue-grey-900: #263238; 327 | -------------------------------------------------------------------------------- /sass/components/_alerts.scss: -------------------------------------------------------------------------------- 1 | @mixin alert ($color, $background-color) { 2 | color: $color; 3 | border-color: $color; 4 | background-color: $background-color; 5 | } 6 | 7 | .alert { 8 | position: relative; 9 | padding: calc(.5rem - 2px) .75rem .25rem; 10 | border: $border-width solid; 11 | border-radius: $button-radius; 12 | 13 | .close { 14 | float: right; 15 | margin: -.5rem -.75rem 0 0; 16 | padding: calc(.5rem + 1px) .75rem 0; 17 | opacity: .5; 18 | border: 0; 19 | background: none; 20 | font-size: 1.5rem; 21 | line-height: 1; 22 | color: inherit; 23 | cursor: pointer; 24 | 25 | &:hover { 26 | opacity: 1; 27 | text-decoration: none; 28 | } 29 | } 30 | } 31 | 32 | .alert { @include alert ($grey-700, $grey-50); } 33 | .alert-success { @include alert ($green-700, $green-50); } 34 | .alert-info { @include alert ($cyan-700, $cyan-50); } 35 | .alert-warning { @include alert ($orange-700, $orange-50); } 36 | .alert-error { @include alert ($red-700, $red-50); } 37 | -------------------------------------------------------------------------------- /sass/components/_buttons.scss: -------------------------------------------------------------------------------- 1 | // top right bottom left 2 | $button-border-width: 2px; 3 | $border-strength: .2; 4 | $button-padding: calc(.5rem - 3px) .75rem calc(.25rem - 1px); 5 | $dark: rgba(0,0,0,$border-strength); 6 | $light: rgba(255,255,255,$border-strength); 7 | $border-outset: $light $dark $dark $light; 8 | $border-inset: $dark $light $light $dark; 9 | 10 | @mixin button ($color, $hover-color) { 11 | background-color: $color; 12 | 13 | &:hover, 14 | &:focus { 15 | background-color: $hover-color; 16 | } 17 | 18 | &.btn-ghost { 19 | border-color: $color; 20 | color: $color; 21 | } 22 | } 23 | 24 | 25 | // Button ----------------------------------------------------- 26 | 27 | .btn { 28 | position: relative; 29 | padding: $button-padding; 30 | border-width: $button-border-width; 31 | border-style: solid; 32 | border-radius: $button-radius; 33 | border-color: $border-outset; 34 | outline: none; 35 | cursor: pointer; 36 | user-select: none; 37 | color: $white; 38 | 39 | &:hover, 40 | &:focus { 41 | text-decoration: none; 42 | border-color: $border-inset; 43 | } 44 | 45 | &:active { 46 | box-shadow: inset 0 1px 3px rgba(0, 0, 0, .2); 47 | } 48 | 49 | &.btn-ghost { 50 | background-color: transparent; 51 | 52 | &:hover, 53 | &:focus { 54 | color: $white; 55 | border-color: $border-inset; 56 | } 57 | } 58 | } 59 | 60 | .btn-primary { @include button ($blue, $blue-700); } 61 | .btn-success { @include button ($green, $green-700); } 62 | .btn-info { @include button ($cyan, $cyan-700); } 63 | .btn-warning { @include button ($orange, $orange-700); } 64 | .btn-error { @include button ($red, $red-700); } 65 | 66 | .btn-default { 67 | background-color: $grey-200; 68 | color: $grey-700; 69 | 70 | &:hover, 71 | &:focus { 72 | background-color: $grey-400; 73 | color: $white; 74 | } 75 | 76 | &.btn-ghost { 77 | border-color: $grey-400; 78 | color: $grey-700; 79 | } 80 | } 81 | 82 | .btn-link { 83 | border-color: transparent; 84 | background-color: transparent; 85 | color: $blue; 86 | 87 | &:hover, 88 | &:focus { 89 | border-color: transparent; 90 | color: $blue-700; 91 | text-decoration: underline; 92 | } 93 | } 94 | 95 | .btn[disabled] { 96 | cursor: not-allowed; 97 | 98 | &, 99 | &:hover, 100 | &:focus { 101 | background-color: $grey-100; 102 | border-color: $border-outset; 103 | color: $grey-400; 104 | } 105 | 106 | &.btn-ghost, 107 | &.btn-ghost:hover { 108 | background-color: transparent; 109 | border-color: $grey-400; 110 | color: $grey-400; 111 | } 112 | } 113 | 114 | 115 | // Button Group ----------------------------------------------- 116 | 117 | .btn-addon { 118 | padding: $button-padding; 119 | border: $button-border-width solid transparent; 120 | 121 | &:first-child { padding-left: 0; } 122 | } 123 | 124 | .btn-group { 125 | @extend .input-group; 126 | 127 | .btn { 128 | flex-grow: 1; 129 | border-radius: 0; 130 | word-break: break-all; 131 | word-break: break-word; // If supported 132 | 133 | &:first-of-type { border-radius: $button-radius 0 0 $button-radius; } 134 | &:last-of-type { border-radius: 0 $button-radius $button-radius 0; } 135 | } 136 | 137 | .btn-ghost:not(:first-child) { margin-left: -$button-border-width; } 138 | } 139 | -------------------------------------------------------------------------------- /sass/components/_cards.scss: -------------------------------------------------------------------------------- 1 | @mixin card ($color) { 2 | border: $border-width solid $color; 3 | 4 | .card-header { 5 | color: $white; 6 | background-color: $color; 7 | border-bottom-color: $color; 8 | font-weight: normal; 9 | } 10 | } 11 | 12 | .card { 13 | border: $border-width solid $grey-300; 14 | border-radius: $button-radius; 15 | 16 | .card-header { 17 | display: block; 18 | padding: calc(.5rem - 1px) .75rem .25rem; 19 | background-color: $grey-200; 20 | text-align: center; 21 | font-weight: bold; 22 | color: $grey-800; 23 | } 24 | 25 | .card-body { 26 | padding: calc(.5rem - 2px) .75rem .25rem; 27 | &:last-child { margin-bottom: 0; } 28 | } 29 | 30 | & > * + * { 31 | border: 0; 32 | border-radius: 0; 33 | border-top: $border-width solid; 34 | border-color: inherit; 35 | } 36 | 37 | &.card-success { @include card ($green); } 38 | &.card-info { @include card ($cyan); } 39 | &.card-warning { @include card ($orange); } 40 | &.card-error { @include card ($red); } 41 | } 42 | 43 | // Chrome bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589475 44 | details.card > * + * { border-color: $grey-300; } 45 | -------------------------------------------------------------------------------- /sass/components/_details.scss: -------------------------------------------------------------------------------- 1 | // Faulty in Safari: http://stackoverflow.com/questions/40556442/safari-renders-wrong-after-details-element-when-use-rem-font-size 2 | 3 | details { margin-bottom: 1rem; } 4 | 5 | summary { 6 | outline: none; 7 | &:hover { cursor: pointer; } 8 | } 9 | 10 | details:not(.card) { 11 | padding-left: 1rem; 12 | 13 | summary { 14 | margin-bottom: 1rem; 15 | margin-left: -1rem; 16 | 17 | &:hover { 18 | background-color: $grey-100; 19 | box-shadow: -.5rem -.1rem 0 .5rem $grey-100; 20 | } 21 | } 22 | } 23 | 24 | details.card { 25 | summary::-webkit-details-marker { 26 | display: none; 27 | } 28 | 29 | summary::before { 30 | content: '▶'; 31 | float: left; 32 | padding-right: .75rem; 33 | color: $grey; 34 | } 35 | 36 | &[open] summary::before { 37 | content: '▼'; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /sass/components/_dropzone.scss: -------------------------------------------------------------------------------- 1 | .dropzone { 2 | display: flex; 3 | align-items: center; 4 | justify-content: center; 5 | height: 9rem; 6 | padding: 1rem; 7 | border: 2px dashed $grey-300; 8 | text-align: center; 9 | color: $grey-400; 10 | cursor: pointer; 11 | 12 | &.active, 13 | &.rejected { color: $grey; } 14 | 15 | &.active { background-color: $grey-50; } 16 | &.rejected { background-color: $red-50; } 17 | } 18 | -------------------------------------------------------------------------------- /sass/components/_forms.scss: -------------------------------------------------------------------------------- 1 | // Raw Elements ----------------------------------------------- 2 | 3 | input[type='email'], 4 | input[type='number'], 5 | input[type='password'], 6 | input[type='search'], 7 | input[type='tel'], 8 | input[type='text'], 9 | input[type='url'], 10 | textarea, 11 | select { 12 | padding: calc(.5rem - 3px) .625rem calc(.25rem - 1px); 13 | appearance: none; 14 | border: 2px solid $grey-300; 15 | border-radius: $button-radius; 16 | background-color: transparent; 17 | box-shadow: none; 18 | outline: 0; 19 | 20 | &:focus { 21 | border-color: $grey-500; 22 | } 23 | } 24 | 25 | input[type="file"] { 26 | line-height: 1; 27 | background-color: transparent; // Edge 28 | } 29 | 30 | input::-webkit-file-upload-button { 31 | padding: .2rem .3rem .05rem; 32 | background-color: $white; 33 | border: 2px solid $grey-400; 34 | border-radius: $button-radius; 35 | } 36 | 37 | input::placeholder { color: $grey-400; } 38 | 39 | select { 40 | padding-right: 1.8rem; 41 | background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2214%22%20viewBox%3D%220%200%2029%2014%22%20width%3D%2229%22%3E%3Cpath%20fill%3D%22%23e0e0e0%22%20d%3D%22M9.37727%203.625l5.08154%206.93523L19.54036%203.625%22%2F%3E%3C%2Fsvg%3E'); 42 | background-repeat: no-repeat; 43 | background-position: center right; 44 | 45 | &:focus { 46 | background-image: url('data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2214%22%20viewBox%3D%220%200%2029%2014%22%20width%3D%2229%22%3E%3Cpath%20fill%3D%22%239e9e9e%22%20d%3D%22M9.37727%203.625l5.08154%206.93523L19.54036%203.625%22%2F%3E%3C%2Fsvg%3E'); 47 | } 48 | } 49 | 50 | select::-ms-expand { display: none; } 51 | 52 | textarea { 53 | height: auto; 54 | min-height: 2rem; 55 | } 56 | 57 | 58 | // Form ------------------------------------------------------ 59 | 60 | .form { 61 | @media #{$small} { width: 100%; } 62 | } 63 | 64 | 65 | // Group ------------------------------------------------------ 66 | 67 | .form-group { 68 | display: flex; 69 | flex-wrap: wrap; 70 | margin-bottom: 1.5rem; 71 | } 72 | 73 | 74 | // Label ------------------------------------------------------ 75 | 76 | .form-label { 77 | order: 1; 78 | position: relative; 79 | min-width: $form-label-width; 80 | height: 2rem; // so border-bottom style works for textareas as well 81 | color: $grey-800; 82 | border-bottom: $form-border-width solid $grey-300; 83 | line-height: 2rem; 84 | } 85 | 86 | 87 | // Control ---------------------------------------------------- 88 | 89 | html .form-control { // specificity fight against input[type] 90 | flex: 1; 91 | order: 2; 92 | min-width: calc(100% - #{$form-label-width}); 93 | padding: .25rem 1rem 0; 94 | border: 0; 95 | border-bottom: $form-border-width solid $grey-300; 96 | border-radius: 0; // iOS 97 | 98 | &:focus { border-color: $grey-500; } 99 | 100 | label + label { padding-left: 2rem; } 101 | } 102 | 103 | textarea.form-control { 104 | padding-left: calc(1rem - #{$form-border-width}); 105 | // resize: none; 106 | border-bottom: $form-border-width solid $grey-300; 107 | border-left: $form-border-width solid $grey-300; 108 | 109 | & + .form-label:before { // paint over the little border 110 | position: absolute; 111 | content: ''; 112 | width: $form-border-width; 113 | background-color: $white; 114 | right: -$form-border-width; 115 | top: 0; 116 | bottom: 0; 117 | } 118 | } 119 | 120 | select.form-control { border-radius: 0; } 121 | 122 | 123 | // States ----------------------------------------------------- 124 | 125 | @mixin state ($color, $focus-color) { 126 | .help-block, 127 | .form-label { color: $color; } 128 | 129 | input, 130 | textarea, 131 | select, 132 | .form-label, 133 | .form-control { 134 | border-color: $color; 135 | &:focus { border-color: $focus-color; } 136 | } 137 | } 138 | 139 | .form-success { @include state ($green, $green-800); } 140 | .form-info { @include state ($cyan, $cyan-800); } 141 | .form-warning { @include state ($orange, $orange-800); } 142 | .form-error { @include state ($red, $red-800); } 143 | 144 | .form-control:disabled, 145 | .form-control:disabled + .form-label { 146 | cursor: not-allowed; 147 | color: $grey-400; 148 | -webkit-text-fill-color: $grey-400; // Safari 149 | opacity: 1; // iOS 150 | } 151 | 152 | .form-control[readonly], 153 | .form-control[readonly] + .form-label { 154 | color: $grey; 155 | } 156 | 157 | .form-control:required + .form-label:after { 158 | content: " *"; 159 | color: $red-400; 160 | } 161 | 162 | 163 | // Help Block ------------------------------------------------- 164 | 165 | .help-block { 166 | order: 3; 167 | min-width: 100%; 168 | flex-basis: 100%; 169 | margin-top: .5rem; 170 | padding-left: 1rem + $form-label-width; 171 | color: $grey; 172 | } 173 | 174 | // Input Group ------------------------------------------------ 175 | 176 | .input-group { 177 | display: inline-flex; 178 | flex-wrap: wrap; 179 | // & > *:not(:first-child) { margin-left: -2px; } // maybe? 180 | } 181 | 182 | // Vertical / Responsive -------------------------------------- 183 | 184 | @mixin form-control { 185 | display: flex; 186 | flex-wrap: wrap; 187 | min-width: 100%; 188 | flex-basis: 100%; 189 | padding: 0 0 .15rem; 190 | 191 | label { padding-right: 1rem; } 192 | label + label { padding-left: 0; } 193 | } 194 | 195 | @mixin form-vertical { 196 | .form-label { 197 | border-bottom: none; 198 | min-width: 100%; 199 | flex-basis: 100%; 200 | } 201 | 202 | textarea.form-control { 203 | & + .form-label:before { display: none; } // paint over the little border 204 | padding-left: 0; 205 | border-left: none; 206 | } 207 | 208 | .help-block { padding-left: 0; } 209 | } 210 | 211 | .form-vertical { 212 | @include form-vertical; 213 | .form-control { @include form-control; } 214 | } 215 | 216 | @media #{$medium} { 217 | @include form-vertical; 218 | html .form-control { @include form-control; } 219 | } 220 | -------------------------------------------------------------------------------- /sass/components/_icons.scss: -------------------------------------------------------------------------------- 1 | // svg, 2 | // svg symbol { overflow: visible; } 3 | 4 | .i { 5 | position: relative; 6 | top: .0625em; 7 | width: .75rem; 8 | height: .75rem; 9 | fill: none; 10 | font-size: inherit; 11 | stroke: currentColor; 12 | stroke-width: 4px; 13 | stroke-linecap: round; 14 | stroke-linejoin: round; 15 | } 16 | 17 | .i-medium .i, 18 | .i.i-medium { 19 | width: 1.5rem; 20 | height: 1.5rem; 21 | stroke-width: 2px; 22 | } 23 | 24 | .i-large .i, 25 | .i.i-large { 26 | width: 2rem; 27 | height: 2rem; 28 | stroke-width: 2px; 29 | } 30 | -------------------------------------------------------------------------------- /sass/components/_list-group.scss: -------------------------------------------------------------------------------- 1 | .list-striped > *:nth-child(even):not(.btn) { 2 | background-color: $grey-100; 3 | } 4 | 5 | .list-group { 6 | padding: 0; 7 | border: $border-width solid $grey-300; 8 | border-radius: $button-radius; 9 | 10 | & > * { 11 | display: block; 12 | margin: 0; 13 | padding: calc(.5rem - 1px) .5rem .25rem; 14 | border: 0; 15 | 16 | &:first-child { padding-top: calc(.5rem - 2px); } 17 | } 18 | 19 | & > a, 20 | & > button { 21 | width: 100%; 22 | border-radius: 0; 23 | } 24 | 25 | button:not(.btn) { 26 | @extend a; 27 | text-align: left; 28 | background-color: $white; 29 | } 30 | 31 | & > li:before { display: none; } 32 | 33 | & > *:not(:last-child) { 34 | border-bottom: $border-width solid $grey-300; 35 | } 36 | 37 | & > .disabled { 38 | color: $grey; 39 | cursor: not-allowed; 40 | background-color: $grey-200; 41 | } 42 | 43 | & > .active.active, 44 | & > .active.active:hover { 45 | color: $white; 46 | background-color: $blue; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /sass/components/_loading-indicator.scss: -------------------------------------------------------------------------------- 1 | .loading { 2 | display: inline-block; 3 | overflow: hidden; 4 | height: 1.3em; 5 | margin-top: -.3em; 6 | line-height: 1.5em; 7 | vertical-align: text-bottom; 8 | 9 | &::after { 10 | display: inline-table; 11 | white-space: pre; 12 | 13 | content: "\A.\A..\A..."; 14 | text-align: left; 15 | animation: spin 2s steps(4) infinite; 16 | } 17 | } 18 | 19 | @keyframes spin { to { transform: translateY(-6em); } } 20 | -------------------------------------------------------------------------------- /sass/components/_progress-bar.scss: -------------------------------------------------------------------------------- 1 | .progress-bar { 2 | height: 1rem; 3 | background-color: $grey-300; 4 | 5 | &.narrow { height: 0.5rem; } 6 | 7 | &.progress-bar-show-percent { 8 | margin-top: 2rem; 9 | 10 | & > div { 11 | &:before { // Arrow 12 | content: ''; 13 | border: 6px solid transparent; 14 | border-top-color: $grey; 15 | position: absolute; 16 | top: -12px; 17 | right: -6px; 18 | } 19 | &:after { // Text 20 | color: $grey-600; 21 | content: attr(data-filled); 22 | display: block; 23 | font-size: 12px; 24 | white-space: nowrap; 25 | position: absolute; 26 | border: 6px solid transparent; 27 | top: -36px; 28 | right: 0; 29 | transform: translateX(50%); 30 | } 31 | } 32 | } 33 | 34 | & > div { // Filling 35 | position: relative; 36 | height: 100%; 37 | width: 0; 38 | max-width: 100%; 39 | background-color: $grey; 40 | transition: width .3s ease; 41 | text-align: center; 42 | font-size: 12px; 43 | color: $white; 44 | } 45 | 46 | &.progress-primary > div { background-color: $blue; } 47 | &.progress-success > div { background-color: $green; } 48 | &.progress-info > div { background-color: $cyan; } 49 | &.progress-warning > div { background-color: $orange; } 50 | &.progress-error > div { background-color: $red; } 51 | } 52 | -------------------------------------------------------------------------------- /sass/components/_tables.scss: -------------------------------------------------------------------------------- 1 | // Table ------------------------------------------------------ 2 | 3 | table { 4 | width: 100%; 5 | border-collapse: collapse; 6 | border-spacing: 0; 7 | } 8 | 9 | td, 10 | th { 11 | vertical-align: top; 12 | border: $border-width solid $grey-300; 13 | padding: calc(.5rem - 1px) .5rem .3rem; 14 | } 15 | 16 | thead th { 17 | color: $grey-800; 18 | text-align: center; 19 | background-color: $grey-200; 20 | } 21 | 22 | caption { 23 | caption-side: bottom; 24 | padding-top: .75rem; 25 | color: $grey; 26 | } 27 | 28 | // Modifiers -------------------------------------------------- 29 | 30 | .table-fixed { table-layout: fixed; } 31 | 32 | .table-striped tr:nth-child(even) td { 33 | background-color: $grey-100; 34 | } 35 | 36 | .table-hover tr:hover td { 37 | background-color: $grey-200; 38 | } 39 | 40 | .table-narrow td, 41 | .table-narrow th { padding: calc(.25rem - 1px) .5rem 0; } 42 | 43 | .table-wide td, 44 | .table-wide th { padding: calc(.875rem - 1px) 1rem .625rem; } 45 | 46 | thead.text-left > tr > th { text-align: left; } 47 | 48 | 49 | // States ----------------------------------------------------- 50 | 51 | // TODO re-evaluate 52 | 53 | // @mixin cell-border ($border-color) { 54 | // border-top-color: $border-color; 55 | // border-bottom-color: $border-color; 56 | // } 57 | 58 | // table { 59 | // .bg-active { @include cell-border ($blue-200); } 60 | // .bg-success { @include cell-border ($green-200); } 61 | // .bg-info { @include cell-border ($cyan-200); } 62 | // .bg-warning { @include cell-border ($orange-200); } 63 | // .bg-error { @include cell-border ($red-200); } 64 | // } 65 | -------------------------------------------------------------------------------- /sass/components/_tags.scss: -------------------------------------------------------------------------------- 1 | @mixin tag ($color) { 2 | color: $white; 3 | background-color: $color; 4 | box-shadow: 0 -1px 0 3px $color, inset 0 0 0 1px $color; // second shadow to fix a glitch in Edge 5 | } 6 | 7 | .tag { 8 | @include tag ($grey); 9 | 10 | position: relative; 11 | top: -.1em; 12 | padding: 0 .25em; 13 | border-radius: 1px; 14 | font-size: .8em; 15 | font-weight: normal; 16 | white-space: nowrap; 17 | vertical-align: baseline; 18 | text-rendering: optimizeLegibility; // more readable with smaller font sizes 19 | 20 | &:empty { display: none; } // don't show if empty 21 | 22 | &.tag-primary { @include tag ($blue); } 23 | &.tag-success { @include tag ($green); } 24 | &.tag-info { @include tag ($cyan); } 25 | &.tag-warning { @include tag ($orange); } 26 | &.tag-error { @include tag ($red); } 27 | } 28 | 29 | 30 | -------------------------------------------------------------------------------- /sass/components/_tooltips.scss: -------------------------------------------------------------------------------- 1 | // Based on https://github.com/mightyCrow/wenk 2 | 3 | @keyframes tooltip-appear { to { opacity: 1; } } 4 | 5 | [data-tooltip] { 6 | position: relative; 7 | 8 | &:after { 9 | content: attr(data-tooltip); 10 | position: absolute; 11 | z-index: 1; 12 | bottom: 100%; 13 | left: 50%; 14 | display: none; 15 | padding: calc(.5rem - 2px) .5rem .25rem; 16 | transform: translate(-50%, -.5rem); 17 | pointer-events: none; 18 | box-shadow: 0 0 0 .25rem $white; 19 | border: $border-width solid $grey-300; 20 | border-radius: 2px; 21 | background-color: $grey-50; 22 | white-space: pre; 23 | color: $grey-900; 24 | opacity: 0; 25 | } 26 | 27 | &:focus:after, 28 | &:hover:after { 29 | display: block; 30 | animation: tooltip-appear .1s ease-in .1s forwards; 31 | } 32 | 33 | &.tooltip-bottom:after { 34 | bottom: auto; 35 | top: 100%; 36 | left: 50%; 37 | transform: translate(-50%, .5rem); 38 | } 39 | 40 | &.tooltip-left:after { 41 | bottom: auto; 42 | left: auto; 43 | top: 50%; 44 | right: 100%; 45 | transform: translate(-.5rem, -50%); 46 | } 47 | 48 | &.tooltip-right:after { 49 | bottom: auto; 50 | top: 50%; 51 | left: 100%; 52 | transform: translate(.5rem, -50%); 53 | } 54 | 55 | @mixin tooltip-state ($color) { 56 | color: $white; 57 | background-color: $color; 58 | } 59 | 60 | &.tooltip-active:after { @include tooltip-state ($blue); } 61 | &.tooltip-success:after { @include tooltip-state ($green); } 62 | &.tooltip-info:after { @include tooltip-state ($cyan); } 63 | &.tooltip-warning:after { @include tooltip-state ($orange); } 64 | &.tooltip-error:after { @include tooltip-state ($red); } 65 | } 66 | -------------------------------------------------------------------------------- /sass/components/components.scss: -------------------------------------------------------------------------------- 1 | @import 'alerts'; 2 | @import 'forms'; 3 | @import 'buttons'; 4 | @import 'list-group'; 5 | @import 'cards'; // styles contained .list-group 6 | @import 'loading-indicator'; 7 | @import 'progress-bar'; 8 | @import 'tables'; 9 | @import 'tags'; 10 | @import 'tooltips'; 11 | @import 'icons'; 12 | @import 'details'; 13 | @import 'dropzone'; 14 | 15 | 16 | // Code ------------------------------------------------------ 17 | 18 | code { 19 | padding: .25em .25em .125em; 20 | border-radius: 2px; 21 | background-color: $grey-100; 22 | } 23 | 24 | samp { 25 | display: inline-block; 26 | margin-top: -3px; 27 | padding: 1px .25em 0; 28 | background-color: $grey-50; 29 | } 30 | 31 | pre { padding: calc(.75rem - 1px) 1rem; } 32 | 33 | samp, 34 | pre { 35 | border: $border-width solid $grey-300; 36 | border-radius: 2px; 37 | white-space: pre-wrap; 38 | word-wrap: break-word; 39 | word-break: break-all; 40 | page-break-inside: avoid; 41 | 42 | &.scroll { 43 | overflow: auto; 44 | white-space: pre; 45 | } 46 | } 47 | 48 | pre code { 49 | padding: 0; 50 | color: inherit; 51 | background-color: transparent; 52 | } 53 | 54 | 55 | // Links ----------------------------------------------------- 56 | 57 | a { 58 | cursor: pointer; 59 | color: $blue; 60 | text-decoration: none; 61 | 62 | &:hover { 63 | color: $blue-700; 64 | text-decoration: underline; 65 | } 66 | } 67 | 68 | 69 | // Images ----------------------------------------------------- 70 | 71 | img { 72 | max-width: 100%; 73 | 74 | &.full-width { display: block; } 75 | } 76 | 77 | figure { 78 | margin: 0; 79 | 80 | img { width: 100%; } 81 | } 82 | 83 | figcaption { 84 | text-align: center; 85 | color: $grey; 86 | } 87 | 88 | 89 | // Quotes ----------------------------------------------------- 90 | 91 | blockquote { 92 | overflow: hidden; 93 | padding-left: 1rem; 94 | border-left: .25rem solid $grey-300; 95 | & > *:last-child { margin-bottom: 0; } 96 | } 97 | 98 | cite { 99 | float: right; 100 | color: $grey; 101 | &:before { content: "– "; } 102 | } 103 | 104 | 105 | // Inline Text Elements --------------------------------------- 106 | 107 | mark { 108 | box-decoration-break: clone; 109 | background-color: $yellow-200; 110 | box-shadow: 0 -1px 0 3px $yellow-200; 111 | 112 | mark { 113 | background-color: $yellow-600; 114 | box-shadow: 0 -1px 0 3px $yellow-600; 115 | } 116 | 117 | samp, kbd, code { 118 | background-color: $yellow-50; 119 | } 120 | } 121 | 122 | abbr[title] { 123 | text-decoration: none; 124 | border-bottom: 2px dashed $grey-300; 125 | } 126 | 127 | kbd { 128 | display: inline-block; 129 | padding: .1em .4em 0; 130 | vertical-align: middle; 131 | color: $grey-800; 132 | border: solid 1px $grey-200; 133 | border-bottom-color: $grey-300; 134 | border-radius: 3px; 135 | background-color: $grey-50; 136 | box-shadow: inset 0 -1px 0 $grey-300; 137 | font-size: .9em; 138 | } 139 | 140 | // Footnotes -------------------------------------------------- 141 | 142 | .footnotes { 143 | padding-top: 3rem; 144 | margin-top: 1.5rem; 145 | } 146 | -------------------------------------------------------------------------------- /sass/index.scss: -------------------------------------------------------------------------------- 1 | @import 'variables'; 2 | @import 'normalize'; 3 | @import 'markdown'; 4 | @import 'grid'; 5 | @import 'layout'; 6 | @import 'components/components'; 7 | @import 'utilities'; 8 | @import "syntax"; 9 | @import "print"; 10 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/maxbeier/tawian-frontend/54b95a21abb47f562368b7e8bdc576ef004db139/screenshot.png -------------------------------------------------------------------------------- /tawian-frontend.css: -------------------------------------------------------------------------------- 1 | /*! normalize.css v5.0.0 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,footer,header,nav,section{display:block}h1{font-size:2em;margin:0.67em 0}figcaption,figure,main{display:block}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;box-sizing:content-box;height:0;overflow:visible}pre{font-family:monospace, monospace;font-size:1em}a,.list-group button:not(.btn){background-color:transparent;-webkit-text-decoration-skip:objects}a:active,.list-group button:active:not(.btn),a:hover,.list-group button:hover:not(.btn){outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}b,strong{font-weight:inherit}b,strong{font-weight:bolder}code,kbd,samp{font-family:monospace, monospace;font-size:1em}dfn{font-style:italic}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-0.25em}sup{top:-0.5em}audio,video{display:inline-block}audio:not([controls]){display:none;height:0}img{border-style:none}svg:not(:root){overflow:hidden}button,input,optgroup,select,textarea{font-family:sans-serif;font-size:100%;line-height:1.15;margin:0}button,input{overflow:visible}button,select{text-transform:none}button,html [type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button::-moz-focus-inner,[type="button"]::-moz-focus-inner,[type="reset"]::-moz-focus-inner,[type="submit"]::-moz-focus-inner{border-style:none;padding:0}button:-moz-focusring,[type="button"]:-moz-focusring,[type="reset"]:-moz-focusring,[type="submit"]:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:0.35em 0.625em 0.75em}legend{-webkit-box-sizing:border-box;box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}progress{display:inline-block;vertical-align:baseline}textarea{overflow:auto}[type="checkbox"],[type="radio"]{-webkit-box-sizing:border-box;box-sizing:border-box;padding:0}[type="number"]::-webkit-inner-spin-button,[type="number"]::-webkit-outer-spin-button{height:auto}[type="search"]{-webkit-appearance:textfield;outline-offset:-2px}[type="search"]::-webkit-search-cancel-button,[type="search"]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}details,menu{display:block}summary{display:list-item}canvas{display:inline-block}template{display:none}[hidden]{display:none}h1,h2,h3,h4,h5,h6,ol,ul,li,code,blockquote{margin:0;padding:0;font-size:1rem}h1,h2,h3,h4,h5,h6{position:relative}h1:before,h2:before,h3:before,h4:before,h5:before,h6:before{position:absolute;left:-4.675rem;width:4rem;text-align:right;color:#bdbdbd}@media screen and (max-width: 68rem){h1:before,h2:before,h3:before,h4:before,h5:before,h6:before{position:static;padding-right:1ch}}h1:before{content:"#"}h2:before{content:"##"}h3:before{content:"###"}h4:before{content:"####"}h5:before{content:"#####"}h6:before{content:"######"}ol{counter-reset:ol}ul>li{padding-left:2ch}ol>li{padding-left:3ch}li{position:relative;display:block}li:before{position:absolute;top:0;left:0;color:#bdbdbd}ul>li:before{content:"–"}ol>li:before{content:counter(ol) ".";counter-increment:ol}hr{height:1rem;margin:1.75rem 0;border:0}hr:after{display:block;height:1rem;overflow:hidden;content:"* * *";text-align:center;overflow:hidden;color:#bdbdbd;font-size:.75rem}.dashed-top:before,hr.dashed:before,.dashed-bottom:after{content:"– – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – – –";position:absolute;left:0;overflow:hidden;width:100%;height:1rem;line-height:1;word-wrap:break-word;text-align:justify;letter-spacing:-.25rem;font-size:1rem;color:#e0e0e0}.dashed-top,hr.dashed{position:relative}.dashed-top:before,hr.dashed:before{top:-.5rem}.dashed-bottom{position:relative}.dashed-bottom:after{bottom:-.5rem}hr.dashed{margin:2rem 0 1rem}.grid{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.grid-top{-webkit-box-align:start;-ms-flex-align:start;align-items:flex-start}.grid-middle{-webkit-box-align:center;-ms-flex-align:center;align-items:center}.grid-bottom{-webkit-box-align:end;-ms-flex-align:end;align-items:flex-end}.grid-stretch{-webkit-box-align:stretch;-ms-flex-align:stretch;align-items:stretch}.grid-baseline{-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.grid-left{-webkit-box-pack:start;-ms-flex-pack:start;justify-content:flex-start}.grid-center{-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center}.grid-right{-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end}.grid-between{-webkit-box-pack:justify;-ms-flex-pack:justify;justify-content:space-between}.grid-around{-ms-flex-pack:distribute;justify-content:space-around}.cell{-webkit-box-flex:1;-ms-flex:1;flex:1}.cell>*:last-child{margin-bottom:0}.cell-top{margin-bottom:auto}.cell-middle{margin:auto 0}.cell-bottom{margin-top:auto}.cell-1{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 1 / 12);flex:0 0 calc(100% * 1 / 12);min-width:calc(100% * 1 / 12)}.cell-2{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 2 / 12);flex:0 0 calc(100% * 2 / 12);min-width:calc(100% * 2 / 12)}.cell-3{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 3 / 12);flex:0 0 calc(100% * 3 / 12);min-width:calc(100% * 3 / 12)}.cell-4{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 4 / 12);flex:0 0 calc(100% * 4 / 12);min-width:calc(100% * 4 / 12)}.cell-5{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 5 / 12);flex:0 0 calc(100% * 5 / 12);min-width:calc(100% * 5 / 12)}.cell-6{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 6 / 12);flex:0 0 calc(100% * 6 / 12);min-width:calc(100% * 6 / 12)}.cell-7{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 7 / 12);flex:0 0 calc(100% * 7 / 12);min-width:calc(100% * 7 / 12)}.cell-8{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 8 / 12);flex:0 0 calc(100% * 8 / 12);min-width:calc(100% * 8 / 12)}.cell-9{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 9 / 12);flex:0 0 calc(100% * 9 / 12);min-width:calc(100% * 9 / 12)}.cell-10{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 10 / 12);flex:0 0 calc(100% * 10 / 12);min-width:calc(100% * 10 / 12)}.cell-11{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 11 / 12);flex:0 0 calc(100% * 11 / 12);min-width:calc(100% * 11 / 12)}.cell-12{-webkit-box-flex:0;-ms-flex:0 0 calc(100% * 12 / 12);flex:0 0 calc(100% * 12 / 12);min-width:calc(100% * 12 / 12)}.grid{margin-left:-1rem;margin-top:-1rem}.grid .cell{padding-left:1rem;padding-top:1rem}.grid-narrow{margin-left:0;margin-top:0}.grid-narrow .cell{padding-left:0;padding-top:0}.grid-wide{margin-left:-2rem;margin-top:-2rem}.grid-wide .cell{padding-left:2rem;padding-top:2rem}.grid-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.grid-inline>*:not(:last-child){margin-right:1rem}@media screen and (max-width: 48rem){.grid{-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;-ms-flex-wrap:nowrap;flex-wrap:nowrap}.cell{-webkit-box-flex:0;-ms-flex:0 0 auto;flex:0 0 auto;min-width:auto}.grid-inline{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline}.grid-inline>*{-webkit-box-flex:1;-ms-flex:1 1 100%;flex:1 1 100%}.grid-inline>*:not(:last-child){margin:0 0 .75rem}}*{-webkit-box-sizing:border-box;box-sizing:border-box;text-rendering:geometricPrecision}::-moz-selection{background:#bbdefb}::selection{background:#bbdefb}html,button,input,optgroup,select,textarea{color:#212121;font-size:16px;line-height:1.5;font-family:"Cousine", Menlo, Lucida Console, Courier New, monospace}code,pre,samp,kbd{font-family:"SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace}h1,h2,h3,h4,h5,h6{line-height:1.5rem;margin-top:1.5rem;margin-bottom:1.5rem}h1.pure:before,.grid h1:before,h2.pure:before,.grid h2:before,h3.pure:before,.grid h3:before,h4.pure:before,.grid h4:before,h5.pure:before,.grid h5:before,h6.pure:before,.grid h6:before{display:none}.grid h1,.grid h2,.grid h3,.grid h4,.grid h5,.grid h6{margin-top:0rem;margin-bottom:1rem}h1>small,h2>small,h3>small,h4>small,h5>small,h6>small{color:#9e9e9e;line-height:1.5}h1{font-size:1.5rem}h2{font-size:1.25rem}p,ul,ol,pre,form,table,blockquote{margin-top:0;margin-bottom:1.5rem}ul ul,ol ol,ul ol,ol ul{margin-bottom:0}small{font-size:.75em}.container{max-width:64rem;margin-left:auto;margin-right:auto;padding-left:1rem;padding-right:1rem}.site-header{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding:.875rem 0 .625rem}.site-title{font-size:2rem;color:#546e7a}.site-search{margin:0}.site-nav{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-webkit-box-align:baseline;-ms-flex-align:baseline;align-items:baseline;margin-left:auto;margin-top:-.25rem}.site-nav ul{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:end;-ms-flex-pack:end;justify-content:flex-end;margin:0}.site-nav li{padding-left:2ch}.site-nav li:last-child{padding-right:0}.site-nav li:before{display:none}.site-nav.nav-separated{overflow:hidden}.site-nav.nav-separated>ul{margin-right:-2ch}.site-nav.nav-separated li{padding-left:1ch}.site-nav.nav-separated li:after{content:"|";color:#eee;padding-left:1ch}.site-nav .active{font-weight:bold}@media screen and (max-width: 48rem){.site-nav{-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-orient:vertical;-webkit-box-direction:normal;-ms-flex-direction:column;flex-direction:column;text-align:right}.site-nav li{padding-top:1rem}}.responsive-nav{display:none;-webkit-box-flex:1;-ms-flex:1;flex:1;text-align:right}.responsive-nav label{cursor:pointer;color:#546e7a}.responsive-nav svg{width:2rem;height:2rem;stroke-width:2.5px}.responsive-nav+input[type=checkbox]{display:none}@media screen and (max-width: 48rem){.responsive-nav{display:block}.responsive-nav ~ .site-nav{display:none;min-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.responsive-nav+input[type=checkbox]:checked ~ .site-nav{display:block}.responsive-nav.responsive-nav-animated ~ .site-nav{display:block;max-height:0;-webkit-transition:max-height .5s ease-out;transition:max-height .5s ease-out;overflow:hidden}.responsive-nav.responsive-nav-animated+input[type=checkbox]:checked ~ .site-nav{max-height:10rem;-webkit-transition-timing-function:ease-in;transition-timing-function:ease-in}}.site-main{margin-top:3rem;margin-bottom:3rem}.site-footer{margin-top:3rem;padding:3rem 0;color:#bdbdbd;text-align:center}.site-footer a,.site-footer .list-group button:not(.btn),.list-group .site-footer button:not(.btn){color:#64b5f6}.alert{position:relative;padding:calc(.5rem - 2px) 0.75rem 0.25rem;border:1px solid;border-radius:2px}.alert .close{float:right;margin:-.5rem -.75rem 0 0;padding:calc(.5rem + 1px) 0.75rem 0;opacity:.5;border:0;background:none;font-size:1.5rem;line-height:1;color:inherit;cursor:pointer}.alert .close:hover{opacity:1;text-decoration:none}.alert{color:#616161;border-color:#616161;background-color:#fafafa}.alert-success{color:#388e3c;border-color:#388e3c;background-color:#e8f5e9}.alert-info{color:#0097a7;border-color:#0097a7;background-color:#e0f7fa}.alert-warning{color:#f57c00;border-color:#f57c00;background-color:#fff3e0}.alert-error{color:#d32f2f;border-color:#d32f2f;background-color:#ffebee}input[type='email'],input[type='number'],input[type='password'],input[type='search'],input[type='tel'],input[type='text'],input[type='url'],textarea,select{padding:calc(.5rem - 3px) 0.625rem calc(.25rem - 1px);-webkit-appearance:none;-moz-appearance:none;appearance:none;border:2px solid #e0e0e0;border-radius:2px;background-color:transparent;-webkit-box-shadow:none;box-shadow:none;outline:0}input[type='email']:focus,input[type='number']:focus,input[type='password']:focus,input[type='search']:focus,input[type='tel']:focus,input[type='text']:focus,input[type='url']:focus,textarea:focus,select:focus{border-color:#9e9e9e}input[type="file"]{line-height:1;background-color:transparent}input::-webkit-file-upload-button{padding:.2rem .3rem .05rem;background-color:#fff;border:2px solid #bdbdbd;border-radius:2px}input::-webkit-input-placeholder{color:#bdbdbd}input:-ms-input-placeholder{color:#bdbdbd}input::placeholder{color:#bdbdbd}select{padding-right:1.8rem;background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2214%22%20viewBox%3D%220%200%2029%2014%22%20width%3D%2229%22%3E%3Cpath%20fill%3D%22%23e0e0e0%22%20d%3D%22M9.37727%203.625l5.08154%206.93523L19.54036%203.625%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:center right}select:focus{background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%2214%22%20viewBox%3D%220%200%2029%2014%22%20width%3D%2229%22%3E%3Cpath%20fill%3D%22%239e9e9e%22%20d%3D%22M9.37727%203.625l5.08154%206.93523L19.54036%203.625%22%2F%3E%3C%2Fsvg%3E")}select::-ms-expand{display:none}textarea{height:auto;min-height:2rem}@media screen and (max-width: 30rem){.form{width:100%}}.form-group{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-bottom:1.5rem}.form-label{-webkit-box-ordinal-group:2;-ms-flex-order:1;order:1;position:relative;min-width:10rem;height:2rem;color:#424242;border-bottom:2px solid #e0e0e0;line-height:2rem}html .form-control{-webkit-box-flex:1;-ms-flex:1;flex:1;-webkit-box-ordinal-group:3;-ms-flex-order:2;order:2;min-width:calc(100% - 10rem);padding:.25rem 1rem 0;border:0;border-bottom:2px solid #e0e0e0;border-radius:0}html .form-control:focus{border-color:#9e9e9e}html .form-control label+label{padding-left:2rem}textarea.form-control{padding-left:calc(1rem - 2px);border-bottom:2px solid #e0e0e0;border-left:2px solid #e0e0e0}textarea.form-control+.form-label:before{position:absolute;content:'';width:2px;background-color:#fff;right:-2px;top:0;bottom:0}select.form-control{border-radius:0}.form-success .help-block,.form-success .form-label{color:#4caf50}.form-success input,.form-success textarea,.form-success select,.form-success .form-label,.form-success .form-control{border-color:#4caf50}.form-success input:focus,.form-success textarea:focus,.form-success select:focus,.form-success .form-label:focus,.form-success .form-control:focus{border-color:#2e7d32}.form-info .help-block,.form-info .form-label{color:#00bcd4}.form-info input,.form-info textarea,.form-info select,.form-info .form-label,.form-info .form-control{border-color:#00bcd4}.form-info input:focus,.form-info textarea:focus,.form-info select:focus,.form-info .form-label:focus,.form-info .form-control:focus{border-color:#00838f}.form-warning .help-block,.form-warning .form-label{color:#ff9800}.form-warning input,.form-warning textarea,.form-warning select,.form-warning .form-label,.form-warning .form-control{border-color:#ff9800}.form-warning input:focus,.form-warning textarea:focus,.form-warning select:focus,.form-warning .form-label:focus,.form-warning .form-control:focus{border-color:#ef6c00}.form-error .help-block,.form-error .form-label{color:#f44336}.form-error input,.form-error textarea,.form-error select,.form-error .form-label,.form-error .form-control{border-color:#f44336}.form-error input:focus,.form-error textarea:focus,.form-error select:focus,.form-error .form-label:focus,.form-error .form-control:focus{border-color:#c62828}.form-control:disabled,.form-control:disabled+.form-label{cursor:not-allowed;color:#bdbdbd;-webkit-text-fill-color:#bdbdbd;opacity:1}.form-control[readonly],.form-control[readonly]+.form-label{color:#9e9e9e}.form-control:required+.form-label:after{content:" *";color:#ef5350}.help-block{-webkit-box-ordinal-group:4;-ms-flex-order:3;order:3;min-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%;margin-top:.5rem;padding-left:11rem;color:#9e9e9e}.input-group,.btn-group{display:-webkit-inline-box;display:-ms-inline-flexbox;display:inline-flex;-ms-flex-wrap:wrap;flex-wrap:wrap}.form-vertical .form-label{border-bottom:none;min-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}.form-vertical textarea.form-control{padding-left:0;border-left:none}.form-vertical textarea.form-control+.form-label:before{display:none}.form-vertical .help-block{padding-left:0}.form-vertical .form-control{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding:0 0 .15rem}.form-vertical .form-control label{padding-right:1rem}.form-vertical .form-control label+label{padding-left:0}@media screen and (max-width: 48rem){.form-label{border-bottom:none;min-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%}textarea.form-control{padding-left:0;border-left:none}textarea.form-control+.form-label:before{display:none}.help-block{padding-left:0}html .form-control{display:-webkit-box;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;min-width:100%;-ms-flex-preferred-size:100%;flex-basis:100%;padding:0 0 .15rem}html .form-control label{padding-right:1rem}html .form-control label+label{padding-left:0}}.btn{position:relative;padding:calc(.5rem - 3px) 0.75rem calc(.25rem - 1px);border-width:2px;border-style:solid;border-radius:2px;border-color:rgba(255,255,255,0.2) rgba(0,0,0,0.2) rgba(0,0,0,0.2) rgba(255,255,255,0.2);outline:none;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;color:#fff}.btn:hover,.btn:focus{text-decoration:none;border-color:rgba(0,0,0,0.2) rgba(255,255,255,0.2) rgba(255,255,255,0.2) rgba(0,0,0,0.2)}.btn:active{-webkit-box-shadow:inset 0 1px 3px rgba(0,0,0,0.2);box-shadow:inset 0 1px 3px rgba(0,0,0,0.2)}.btn.btn-ghost{background-color:transparent}.btn.btn-ghost:hover,.btn.btn-ghost:focus{color:#fff;border-color:rgba(0,0,0,0.2) rgba(255,255,255,0.2) rgba(255,255,255,0.2) rgba(0,0,0,0.2)}.btn-primary{background-color:#2196f3}.btn-primary:hover,.btn-primary:focus{background-color:#1976d2}.btn-primary.btn-ghost{border-color:#2196f3;color:#2196f3}.btn-success{background-color:#4caf50}.btn-success:hover,.btn-success:focus{background-color:#388e3c}.btn-success.btn-ghost{border-color:#4caf50;color:#4caf50}.btn-info{background-color:#00bcd4}.btn-info:hover,.btn-info:focus{background-color:#0097a7}.btn-info.btn-ghost{border-color:#00bcd4;color:#00bcd4}.btn-warning{background-color:#ff9800}.btn-warning:hover,.btn-warning:focus{background-color:#f57c00}.btn-warning.btn-ghost{border-color:#ff9800;color:#ff9800}.btn-error{background-color:#f44336}.btn-error:hover,.btn-error:focus{background-color:#d32f2f}.btn-error.btn-ghost{border-color:#f44336;color:#f44336}.btn-default{background-color:#eee;color:#616161}.btn-default:hover,.btn-default:focus{background-color:#bdbdbd;color:#fff}.btn-default.btn-ghost{border-color:#bdbdbd;color:#616161}.btn-link{border-color:transparent;background-color:transparent;color:#2196f3}.btn-link:hover,.btn-link:focus{border-color:transparent;color:#1976d2;text-decoration:underline}.btn[disabled]{cursor:not-allowed}.btn[disabled],.btn[disabled]:hover,.btn[disabled]:focus{background-color:#f5f5f5;border-color:rgba(255,255,255,0.2) rgba(0,0,0,0.2) rgba(0,0,0,0.2) rgba(255,255,255,0.2);color:#bdbdbd}.btn[disabled].btn-ghost,.btn[disabled].btn-ghost:hover{background-color:transparent;border-color:#bdbdbd;color:#bdbdbd}.btn-addon{padding:calc(.5rem - 3px) 0.75rem calc(.25rem - 1px);border:2px solid transparent}.btn-addon:first-child{padding-left:0}.btn-group .btn{-webkit-box-flex:1;-ms-flex-positive:1;flex-grow:1;border-radius:0;word-break:break-all;word-break:break-word}.btn-group .btn:first-of-type{border-radius:2px 0 0 2px}.btn-group .btn:last-of-type{border-radius:0 2px 2px 0}.btn-group .btn-ghost:not(:first-child){margin-left:-2px}.list-striped>*:nth-child(even):not(.btn){background-color:#f5f5f5}.list-group{padding:0;border:1px solid #e0e0e0;border-radius:2px}.list-group>*{display:block;margin:0;padding:calc(.5rem - 1px) 0.5rem 0.25rem;border:0}.list-group>*:first-child{padding-top:calc(.5rem - 2px)}.list-group>a,.list-group>button:not(.btn),.list-group>button{width:100%;border-radius:0}.list-group button:not(.btn){text-align:left;background-color:#fff}.list-group>li:before{display:none}.list-group>*:not(:last-child){border-bottom:1px solid #e0e0e0}.list-group>.disabled{color:#9e9e9e;cursor:not-allowed;background-color:#eee}.list-group>.active.active,.list-group>.active.active:hover{color:#fff;background-color:#2196f3}.card{border:1px solid #e0e0e0;border-radius:2px}.card .card-header{display:block;padding:calc(.5rem - 1px) 0.75rem 0.25rem;background-color:#eee;text-align:center;font-weight:bold;color:#424242}.card .card-body{padding:calc(.5rem - 2px) 0.75rem 0.25rem}.card .card-body:last-child{margin-bottom:0}.card>*+*{border:0;border-radius:0;border-top:1px solid;border-color:inherit}.card.card-success{border:1px solid #4caf50}.card.card-success .card-header{color:#fff;background-color:#4caf50;border-bottom-color:#4caf50;font-weight:normal}.card.card-info{border:1px solid #00bcd4}.card.card-info .card-header{color:#fff;background-color:#00bcd4;border-bottom-color:#00bcd4;font-weight:normal}.card.card-warning{border:1px solid #ff9800}.card.card-warning .card-header{color:#fff;background-color:#ff9800;border-bottom-color:#ff9800;font-weight:normal}.card.card-error{border:1px solid #f44336}.card.card-error .card-header{color:#fff;background-color:#f44336;border-bottom-color:#f44336;font-weight:normal}details.card>*+*{border-color:#e0e0e0}.loading{display:inline-block;overflow:hidden;height:1.3em;margin-top:-.3em;line-height:1.5em;vertical-align:text-bottom}.loading::after{display:inline-table;white-space:pre;content:"\A.\A..\A...";text-align:left;-webkit-animation:spin 2s steps(4) infinite;animation:spin 2s steps(4) infinite}@-webkit-keyframes spin{to{-webkit-transform:translateY(-6em);transform:translateY(-6em)}}@keyframes spin{to{-webkit-transform:translateY(-6em);transform:translateY(-6em)}}.progress-bar{height:1rem;background-color:#e0e0e0}.progress-bar.narrow{height:0.5rem}.progress-bar.progress-bar-show-percent{margin-top:2rem}.progress-bar.progress-bar-show-percent>div:before{content:'';border:6px solid transparent;border-top-color:#9e9e9e;position:absolute;top:-12px;right:-6px}.progress-bar.progress-bar-show-percent>div:after{color:#757575;content:attr(data-filled);display:block;font-size:12px;white-space:nowrap;position:absolute;border:6px solid transparent;top:-36px;right:0;-webkit-transform:translateX(50%);transform:translateX(50%)}.progress-bar>div{position:relative;height:100%;width:0;max-width:100%;background-color:#9e9e9e;-webkit-transition:width .3s ease;transition:width .3s ease;text-align:center;font-size:12px;color:#fff}.progress-bar.progress-primary>div{background-color:#2196f3}.progress-bar.progress-success>div{background-color:#4caf50}.progress-bar.progress-info>div{background-color:#00bcd4}.progress-bar.progress-warning>div{background-color:#ff9800}.progress-bar.progress-error>div{background-color:#f44336}table{width:100%;border-collapse:collapse;border-spacing:0}td,th{vertical-align:top;border:1px solid #e0e0e0;padding:calc(.5rem - 1px) 0.5rem 0.3rem}thead th{color:#424242;text-align:center;background-color:#eee}caption{caption-side:bottom;padding-top:.75rem;color:#9e9e9e}.table-fixed{table-layout:fixed}.table-striped tr:nth-child(even) td{background-color:#f5f5f5}.table-hover tr:hover td{background-color:#eee}.table-narrow td,.table-narrow th{padding:calc(.25rem - 1px) 0.5rem 0}.table-wide td,.table-wide th{padding:calc(.875rem - 1px) 1rem 0.625rem}thead.text-left>tr>th{text-align:left}.tag{color:#fff;background-color:#9e9e9e;-webkit-box-shadow:0 -1px 0 3px #9e9e9e,inset 0 0 0 1px #9e9e9e;box-shadow:0 -1px 0 3px #9e9e9e,inset 0 0 0 1px #9e9e9e;position:relative;top:-.1em;padding:0 .25em;border-radius:1px;font-size:.8em;font-weight:normal;white-space:nowrap;vertical-align:baseline;text-rendering:optimizeLegibility}.tag:empty{display:none}.tag.tag-primary{color:#fff;background-color:#2196f3;-webkit-box-shadow:0 -1px 0 3px #2196f3,inset 0 0 0 1px #2196f3;box-shadow:0 -1px 0 3px #2196f3,inset 0 0 0 1px #2196f3}.tag.tag-success{color:#fff;background-color:#4caf50;-webkit-box-shadow:0 -1px 0 3px #4caf50,inset 0 0 0 1px #4caf50;box-shadow:0 -1px 0 3px #4caf50,inset 0 0 0 1px #4caf50}.tag.tag-info{color:#fff;background-color:#00bcd4;-webkit-box-shadow:0 -1px 0 3px #00bcd4,inset 0 0 0 1px #00bcd4;box-shadow:0 -1px 0 3px #00bcd4,inset 0 0 0 1px #00bcd4}.tag.tag-warning{color:#fff;background-color:#ff9800;-webkit-box-shadow:0 -1px 0 3px #ff9800,inset 0 0 0 1px #ff9800;box-shadow:0 -1px 0 3px #ff9800,inset 0 0 0 1px #ff9800}.tag.tag-error{color:#fff;background-color:#f44336;-webkit-box-shadow:0 -1px 0 3px #f44336,inset 0 0 0 1px #f44336;box-shadow:0 -1px 0 3px #f44336,inset 0 0 0 1px #f44336}@-webkit-keyframes tooltip-appear{to{opacity:1}}@keyframes tooltip-appear{to{opacity:1}}[data-tooltip]{position:relative}[data-tooltip]:after{content:attr(data-tooltip);position:absolute;z-index:1;bottom:100%;left:50%;display:none;padding:calc(.5rem - 2px) 0.5rem 0.25rem;-webkit-transform:translate(-50%, -0.5rem);transform:translate(-50%, -0.5rem);pointer-events:none;-webkit-box-shadow:0 0 0 0.25rem #fff;box-shadow:0 0 0 0.25rem #fff;border:1px solid #e0e0e0;border-radius:2px;background-color:#fafafa;white-space:pre;color:#212121;opacity:0}[data-tooltip]:focus:after,[data-tooltip]:hover:after{display:block;-webkit-animation:tooltip-appear .1s ease-in .1s forwards;animation:tooltip-appear .1s ease-in .1s forwards}[data-tooltip].tooltip-bottom:after{bottom:auto;top:100%;left:50%;-webkit-transform:translate(-50%, 0.5rem);transform:translate(-50%, 0.5rem)}[data-tooltip].tooltip-left:after{bottom:auto;left:auto;top:50%;right:100%;-webkit-transform:translate(-0.5rem, -50%);transform:translate(-0.5rem, -50%)}[data-tooltip].tooltip-right:after{bottom:auto;top:50%;left:100%;-webkit-transform:translate(0.5rem, -50%);transform:translate(0.5rem, -50%)}[data-tooltip].tooltip-active:after{color:#fff;background-color:#2196f3}[data-tooltip].tooltip-success:after{color:#fff;background-color:#4caf50}[data-tooltip].tooltip-info:after{color:#fff;background-color:#00bcd4}[data-tooltip].tooltip-warning:after{color:#fff;background-color:#ff9800}[data-tooltip].tooltip-error:after{color:#fff;background-color:#f44336}.i{position:relative;top:.0625em;width:.75rem;height:.75rem;fill:none;font-size:inherit;stroke:currentColor;stroke-width:4px;stroke-linecap:round;stroke-linejoin:round}.i-medium .i,.i.i-medium{width:1.5rem;height:1.5rem;stroke-width:2px}.i-large .i,.i.i-large{width:2rem;height:2rem;stroke-width:2px}details{margin-bottom:1rem}summary{outline:none}summary:hover{cursor:pointer}details:not(.card){padding-left:1rem}details:not(.card) summary{margin-bottom:1rem;margin-left:-1rem}details:not(.card) summary:hover{background-color:#f5f5f5;-webkit-box-shadow:-0.5rem -0.1rem 0 0.5rem #f5f5f5;box-shadow:-0.5rem -0.1rem 0 0.5rem #f5f5f5}details.card summary::-webkit-details-marker{display:none}details.card summary::before{content:'▶';float:left;padding-right:.75rem;color:#9e9e9e}details.card[open] summary::before{content:'▼'}.dropzone{display:-webkit-box;display:-ms-flexbox;display:flex;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;justify-content:center;height:9rem;padding:1rem;border:2px dashed #e0e0e0;text-align:center;color:#bdbdbd;cursor:pointer}.dropzone.active,.dropzone.rejected{color:#9e9e9e}.dropzone.active{background-color:#fafafa}.dropzone.rejected{background-color:#ffebee}code{padding:.25em .25em .125em;border-radius:2px;background-color:#f5f5f5}samp{display:inline-block;margin-top:-3px;padding:1px .25em 0;background-color:#fafafa}pre{padding:calc(.75rem - 1px) 1rem}samp,pre{border:1px solid #e0e0e0;border-radius:2px;white-space:pre-wrap;word-wrap:break-word;word-break:break-all;page-break-inside:avoid}samp.scroll,pre.scroll{overflow:auto;white-space:pre}pre code{padding:0;color:inherit;background-color:transparent}a,.list-group button:not(.btn){cursor:pointer;color:#2196f3;text-decoration:none}a:hover,.list-group button:hover:not(.btn){color:#1976d2;text-decoration:underline}img{max-width:100%}img.full-width{display:block}figure{margin:0}figure img{width:100%}figcaption{text-align:center;color:#9e9e9e}blockquote{overflow:hidden;padding-left:1rem;border-left:0.25rem solid #e0e0e0}blockquote>*:last-child{margin-bottom:0}cite{float:right;color:#9e9e9e}cite:before{content:"– "}mark{-webkit-box-decoration-break:clone;box-decoration-break:clone;background-color:#fff59d;-webkit-box-shadow:0 -1px 0 3px #fff59d;box-shadow:0 -1px 0 3px #fff59d}mark mark{background-color:#fdd835;-webkit-box-shadow:0 -1px 0 3px #fdd835;box-shadow:0 -1px 0 3px #fdd835}mark samp,mark kbd,mark code{background-color:#fffde7}abbr[title]{text-decoration:none;border-bottom:2px dashed #e0e0e0}kbd{display:inline-block;padding:.1em .4em 0;vertical-align:middle;color:#424242;border:solid 1px #eee;border-bottom-color:#e0e0e0;border-radius:3px;background-color:#fafafa;-webkit-box-shadow:inset 0 -1px 0 #e0e0e0;box-shadow:inset 0 -1px 0 #e0e0e0;font-size:.9em}.footnotes{padding-top:3rem;margin-top:1.5rem}.narrow{padding:0 !important}.inner{padding:.5rem .75rem .25rem !important}.inner-wide{padding:1rem 1rem .75rem !important}.p-t-0{padding-top:0 !important}.p-t-1{padding-top:1.5rem !important}.p-t-2{padding-top:3.0rem !important}.p-t-3{padding-top:4.5rem !important}.p-b-0{padding-bottom:0 !important}.p-b-1{padding-bottom:1.5rem !important}.p-b-2{padding-bottom:3.0rem !important}.p-b-3{padding-bottom:4.5rem !important}.m-t-0{margin-top:0 !important}.m-t-1{margin-top:1.5rem !important}.m-t-2{margin-top:3.0rem !important}.m-t-3{margin-top:4.5rem !important}.m-b-0{margin-bottom:0 !important}.m-b-1{margin-bottom:1.5rem !important}.m-b-2{margin-bottom:3.0rem !important}.m-b-3{margin-bottom:4.5rem !important}.pull-left{float:left !important}.pull-right{float:right !important}.full-width{width:100% !important}.block{display:block !important}.invisible{visibility:hidden !important}.hidden{display:none !important}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}@media screen and (min-width: 48rem){.hidden-if-large{display:none !important}}@media screen and (max-width: 48rem){.hidden-if-medium{display:none !important}}@media screen and (max-width: 30rem){.hidden-if-small{display:none !important}}.lead{margin-bottom:1.5rem;font-size:1.25em;line-height:1.2em}.truncate{overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.text-left{text-align:left}.text-center{text-align:center}.text-right{text-align:right}.text-bold{font-weight:bold}.text-italic{font-style:italic}.bg-muted{background-color:#f5f5f5 !important}.bg-active{background-color:#bbdefb !important}.bg-success{background-color:#c8e6c9 !important}.bg-info{background-color:#b2ebf2 !important}.bg-warning{background-color:#ffe0b2 !important}.bg-error{background-color:#ffcdd2 !important}.text-muted{color:#9e9e9e}.text-primary{color:#2196f3}.text-success{color:#4caf50}.text-info{color:#00bcd4}.text-warning{color:#ff9800}.text-error{color:#f44336}.highlight .hll{background-color:#ffc}.highlight .c{color:#999}.highlight .err{color:#a00;background-color:#faa}.highlight .k{color:#069}.highlight .o{color:#555}.highlight .cm{color:#09f;font-style:italic}.highlight .cp{color:#099}.highlight .c1{color:#999}.highlight .cs{color:#999}.highlight .gd{background-color:#fcc;border:1px solid #c00}.highlight .ge{font-style:italic}.highlight .gr{color:red}.highlight .gh{color:#030}.highlight .gi{background-color:#cfc;border:1px solid #0c0}.highlight .go{color:#aaa}.highlight .gp{color:#009}.highlight .gu{color:#030}.highlight .gt{color:#9c6}.highlight .kc{color:#069}.highlight .kd{color:#069}.highlight .kn{color:#069}.highlight .kp{color:#069}.highlight .kr{color:#069}.highlight .kt{color:#078}.highlight .m{color:#f60}.highlight .s{color:#d44950}.highlight .na{color:#4f9fcf}.highlight .nb{color:#366}.highlight .nc{color:#0a8}.highlight .no{color:#360}.highlight .nd{color:#99f}.highlight .ni{color:#999}.highlight .ne{color:#c00}.highlight .nf{color:#c0f}.highlight .nl{color:#99f}.highlight .nn{color:#0cf}.highlight .nt{color:#2f6f9f}.highlight .nv{color:#033}.highlight .ow{color:#000}.highlight .w{color:#bbb}.highlight .mf{color:#f60}.highlight .mh{color:#f60}.highlight .mi{color:#f60}.highlight .mo{color:#f60}.highlight .sb{color:#c30}.highlight .sc{color:#c30}.highlight .sd{color:#c30;font-style:italic}.highlight .s2{color:#c30}.highlight .se{color:#c30}.highlight .sh{color:#c30}.highlight .si{color:#a00}.highlight .sx{color:#c30}.highlight .sr{color:#3aa}.highlight .s1{color:#c30}.highlight .ss{color:#fc3}.highlight .bp{color:#366}.highlight .vc{color:#033}.highlight .vg{color:#033}.highlight .vi{color:#033}.highlight .il{color:#f60}@media print{html,button,input,optgroup,select,textarea{font-size:14px;line-height:1.15;-webkit-text-size-adjust:100%;-moz-text-size-adjust:100%;-ms-text-size-adjust:100%;text-size-adjust:100%;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}h1:before,h2:before,h3:before,h4:before,h5:before,h6:before{display:none}*,*:before,*:after,*:first-letter,p:first-line,div:first-line,blockquote:first-line,li:first-line{background:transparent !important;color:#000 !important;-webkit-box-shadow:none !important;box-shadow:none !important;text-shadow:none !important}a[href]:after,.list-group button[href]:not(.btn):after{content:" (" attr(href) ")"}abbr[title]:after{content:" (" attr(title) ")"}.btn{border:1px solid #000}.no-print{display:none !important}} 2 | 3 | /*# sourceMappingURL=data:application/json;base64,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bUNBQW1DLENBQUMsWUFBWSxhQUFhLENBQUMsY0FBYyxhQUFhLENBQUMsY0FBYyxhQUFhLENBQUMsV0FBVyxhQUFhLENBQUMsY0FBYyxhQUFhLENBQUMsWUFBWSxhQUFhLENBQUMsZ0JBQWdCLHFCQUFxQixDQUFDLGNBQWMsVUFBVSxDQUFDLGdCQUFnQixXQUFXLHFCQUFxQixDQUFDLGNBQWMsVUFBVSxDQUFDLGNBQWMsVUFBVSxDQUFDLGVBQWUsV0FBVyxpQkFBaUIsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLHNCQUFzQixxQkFBcUIsQ0FBQyxlQUFlLGlCQUFpQixDQUFDLGVBQWUsU0FBUyxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsc0JBQXNCLHFCQUFxQixDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGNBQWMsVUFBVSxDQUFDLGNBQWMsYUFBYSxDQUFDLGVBQWUsYUFBYSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsYUFBYSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGNBQWMsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsVUFBVSxDQUFDLGVBQWUsV0FBVyxpQkFBaUIsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxlQUFlLFVBQVUsQ0FBQyxhQUFhLDJDQUEyQyxlQUFlLGlCQUFpQiw4QkFBc0IsQUFBdEIsMkJBQXNCLEFBQXRCLDBCQUFzQixBQUF0QixzQkFBc0IsbUNBQW1DLGtDQUFrQyxpQ0FBaUMsQ0FBQyw0REFBNEQsWUFBWSxDQUFDLGtHQUFrRyxrQ0FBa0Msc0JBQXNCLG1DQUEyQixBQUEzQiwyQkFBMkIsMkJBQTJCLENBQUMsdURBQXVELDJCQUEyQixDQUFDLGtCQUFrQiw0QkFBNEIsQ0FBQyxLQUFLLHFCQUFxQixDQUFDLFVBQVUsdUJBQXVCLENBQUMsQ0FBQyIsImZpbGUiOiJzdGRpbiIsInNvdXJjZXNDb250ZW50IjpbIi8qISBub3JtYWxpemUuY3NzIHY1LjAuMCB8IE1JVCBMaWNlbnNlIHwgZ2l0aHViLmNvbS9uZWNvbGFzL25vcm1hbGl6ZS5jc3MgKi9odG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7bGluZS1oZWlnaHQ6MS4xNTstbXMtdGV4dC1zaXplLWFkanVzdDoxMDAlOy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9YXJ0aWNsZSxhc2lkZSxmb290ZXIsaGVhZGVyLG5hdixzZWN0aW9ue2Rpc3BsYXk6YmxvY2t9aDF7Zm9udC1zaXplOjJlbTttYXJnaW46MC42N2VtIDB9ZmlnY2FwdGlvbixmaWd1cmUsbWFpbntkaXNwbGF5OmJsb2NrfWZpZ3VyZXttYXJnaW46MWVtIDQwcHh9aHJ7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MDtvdmVyZmxvdzp2aXNpYmxlfXByZXtmb250LWZhbWlseTptb25vc3BhY2UsIG1vbm9zcGFjZTtmb250LXNpemU6MWVtfWEsLmxpc3QtZ3JvdXAgYnV0dG9uOm5vdCguYnRuKXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50Oy13ZWJraXQtdGV4dC1kZWNvcmF0aW9uLXNraXA6b2JqZWN0c31hOmFjdGl2ZSwubGlzdC1ncm91cCBidXR0b246YWN0aXZlOm5vdCguYnRuKSxhOmhvdmVyLC5saXN0LWdyb3VwIGJ1dHRvbjpob3Zlcjpub3QoLmJ0bil7b3V0bGluZS13aWR0aDowfWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmluaGVyaXR9YixzdHJvbmd7Zm9udC13ZWlnaHQ6Ym9sZGVyfWNvZGUsa2JkLHNhbXB7Zm9udC1mYW1pbHk6bW9ub3NwYWNlLCBtb25vc3BhY2U7Zm9udC1zaXplOjFlbX1kZm57Zm9udC1zdHlsZTppdGFsaWN9bWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZjA7Y29sb3I6IzAwMH1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LTAuMjVlbX1zdXB7dG9wOi0wLjVlbX1hdWRpbyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9ja31hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfWltZ3tib3JkZXItc3R5bGU6bm9uZX1zdmc6bm90KDpyb290KXtvdmVyZmxvdzpoaWRkZW59YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtmb250LWZhbWlseTpzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxMDAlO2xpbmUtaGVpZ2h0OjEuMTU7bWFyZ2luOjB9YnV0dG9uLGlucHV0e292ZXJmbG93OnZpc2libGV9YnV0dG9uLHNlbGVjdHt0ZXh0LXRyYW5zZm9ybTpub25lfWJ1dHRvbixodG1sIFt0eXBlPVwiYnV0dG9uXCJdLFt0eXBlPVwicmVzZXRcIl0sW3R5cGU9XCJzdWJtaXRcIl17LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbn1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9XCJidXR0b25cIl06Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9XCJyZXNldFwiXTo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT1cInN1Ym1pdFwiXTo6LW1vei1mb2N1cy1pbm5lcntib3JkZXItc3R5bGU6bm9uZTtwYWRkaW5nOjB9YnV0dG9uOi1tb3otZm9jdXNyaW5nLFt0eXBlPVwiYnV0dG9uXCJdOi1tb3otZm9jdXNyaW5nLFt0eXBlPVwicmVzZXRcIl06LW1vei1mb2N1c3JpbmcsW3R5cGU9XCJzdWJtaXRcIl06LW1vei1mb2N1c3Jpbmd7b3V0bGluZToxcHggZG90dGVkIEJ1dHRvblRleHR9ZmllbGRzZXR7Ym9yZGVyOjFweCBzb2xpZCAjYzBjMGMwO21hcmdpbjowIDJweDtwYWRkaW5nOjAuMzVlbSAwLjYyNWVtIDAuNzVlbX1sZWdlbmR7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7ZGlzcGxheTp0YWJsZTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm9ybWFsfXByb2dyZXNze2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRleHRhcmVhe292ZXJmbG93OmF1dG99W3R5cGU9XCJjaGVja2JveFwiXSxbdHlwZT1cInJhZGlvXCJde2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9W3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sW3R5cGU9XCJudW1iZXJcIl06Oi13ZWJraXQtb3V0ZXItc3Bpbi1idXR0b257aGVpZ2h0OmF1dG99W3R5cGU9XCJzZWFyY2hcIl17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtvdXRsaW5lLW9mZnNldDotMnB4fVt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9uLFt0eXBlPVwic2VhcmNoXCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9ZGV0YWlscyxtZW51e2Rpc3BsYXk6YmxvY2t9c3VtbWFyeXtkaXNwbGF5Omxpc3QtaXRlbX1jYW52YXN7ZGlzcGxheTppbmxpbmUtYmxvY2t9dGVtcGxhdGV7ZGlzcGxheTpub25lfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX1oMSxoMixoMyxoNCxoNSxoNixvbCx1bCxsaSxjb2RlLGJsb2NrcXVvdGV7bWFyZ2luOjA7cGFkZGluZzowO2ZvbnQtc2l6ZToxcmVtfWgxLGgyLGgzLGg0LGg1LGg2e3Bvc2l0aW9uOnJlbGF0aXZlfWgxOmJlZm9yZSxoMjpiZWZvcmUsaDM6YmVmb3JlLGg0OmJlZm9yZSxoNTpiZWZvcmUsaDY6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTQuNjc1cmVtO3dpZHRoOjRyZW07dGV4dC1hbGlnbjpyaWdodDtjb2xvcjojYmRiZGJkfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDY4cmVtKXtoMTpiZWZvcmUsaDI6YmVmb3JlLGgzOmJlZm9yZSxoNDpiZWZvcmUsaDU6YmVmb3JlLGg2OmJlZm9yZXtwb3NpdGlvbjpzdGF0aWM7cGFkZGluZy1yaWdodDoxY2h9fWgxOmJlZm9yZXtjb250ZW50OlwiI1wifWgyOmJlZm9yZXtjb250ZW50OlwiIyNcIn1oMzpiZWZvcmV7Y29udGVudDpcIiMjI1wifWg0OmJlZm9yZXtjb250ZW50OlwiIyMjI1wifWg1OmJlZm9yZXtjb250ZW50OlwiIyMjIyNcIn1oNjpiZWZvcmV7Y29udGVudDpcIiMjIyMjI1wifW9se2NvdW50ZXItcmVzZXQ6b2x9dWw+bGl7cGFkZGluZy1sZWZ0OjJjaH1vbD5saXtwYWRkaW5nLWxlZnQ6M2NofWxpe3Bvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2t9bGk6YmVmb3Jle3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtjb2xvcjojYmRiZGJkfXVsPmxpOmJlZm9yZXtjb250ZW50Olwi4oCTXCJ9b2w+bGk6YmVmb3Jle2NvbnRlbnQ6Y291bnRlcihvbCkgXCIuXCI7Y291bnRlci1pbmNyZW1lbnQ6b2x9aHJ7aGVpZ2h0OjFyZW07bWFyZ2luOjEuNzVyZW0gMDtib3JkZXI6MH1ocjphZnRlcntkaXNwbGF5OmJsb2NrO2hlaWdodDoxcmVtO292ZXJmbG93OmhpZGRlbjtjb250ZW50Olwi77yKIO+8iiDvvIpcIjt0ZXh0LWFsaWduOmNlbnRlcjtvdmVyZmxvdzpoaWRkZW47Y29sb3I6I2JkYmRiZDtmb250LXNpemU6Ljc1cmVtfS5kYXNoZWQtdG9wOmJlZm9yZSxoci5kYXNoZWQ6YmVmb3JlLC5kYXNoZWQtYm90dG9tOmFmdGVye2NvbnRlbnQ6XCLigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTIOKAkyDigJMg4oCTXCI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO292ZXJmbG93OmhpZGRlbjt3aWR0aDoxMDAlO2hlaWdodDoxcmVtO2xpbmUtaGVpZ2h0OjE7d29yZC13cmFwOmJyZWFrLXdvcmQ7dGV4dC1hbGlnbjpqdXN0aWZ5O2xldHRlci1zcGFjaW5nOi0uMjVyZW07Zm9udC1zaXplOjFyZW07Y29sb3I6I2UwZTBlMH0uZGFzaGVkLXRvcCxoci5kYXNoZWR7cG9zaXRpb246cmVsYXRpdmV9LmRhc2hlZC10b3A6YmVmb3JlLGhyLmRhc2hlZDpiZWZvcmV7dG9wOi0uNXJlbX0uZGFzaGVkLWJvdHRvbXtwb3NpdGlvbjpyZWxhdGl2ZX0uZGFzaGVkLWJvdHRvbTphZnRlcntib3R0b206LS41cmVtfWhyLmRhc2hlZHttYXJnaW46MnJlbSAwIDFyZW19LmdyaWR7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwfS5ncmlkLXRvcHthbGlnbi1pdGVtczpmbGV4LXN0YXJ0fS5ncmlkLW1pZGRsZXthbGlnbi1pdGVtczpjZW50ZXJ9LmdyaWQtYm90dG9te2FsaWduLWl0ZW1zOmZsZXgtZW5kfS5ncmlkLXN0cmV0Y2h7YWxpZ24taXRlbXM6c3RyZXRjaH0uZ3JpZC1iYXNlbGluZXthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JpZC1sZWZ0e2p1c3RpZnktY29udGVudDpmbGV4LXN0YXJ0fS5ncmlkLWNlbnRlcntqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyfS5ncmlkLXJpZ2h0e2p1c3RpZnktY29udGVudDpmbGV4LWVuZH0uZ3JpZC1iZXR3ZWVue2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVufS5ncmlkLWFyb3VuZHtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYXJvdW5kfS5jZWxse2ZsZXg6MX0uY2VsbD4qOmxhc3QtY2hpbGR7bWFyZ2luLWJvdHRvbTowfS5jZWxsLXRvcHttYXJnaW4tYm90dG9tOmF1dG99LmNlbGwtbWlkZGxle21hcmdpbjphdXRvIDB9LmNlbGwtYm90dG9te21hcmdpbi10b3A6YXV0b30uY2VsbC0xe2ZsZXg6MCAwIGNhbGMoMTAwJSAqICAxIC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgMSAvIDEyKX0uY2VsbC0ye2ZsZXg6MCAwIGNhbGMoMTAwJSAqICAyIC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgMiAvIDEyKX0uY2VsbC0ze2ZsZXg6MCAwIGNhbGMoMTAwJSAqICAzIC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgMyAvIDEyKX0uY2VsbC00e2ZsZXg6MCAwIGNhbGMoMTAwJSAqICA0IC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgNCAvIDEyKX0uY2VsbC01e2ZsZXg6MCAwIGNhbGMoMTAwJSAqICA1IC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgNSAvIDEyKX0uY2VsbC02e2ZsZXg6MCAwIGNhbGMoMTAwJSAqICA2IC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgNiAvIDEyKX0uY2VsbC03e2ZsZXg6MCAwIGNhbGMoMTAwJSAqICA3IC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgNyAvIDEyKX0uY2VsbC04e2ZsZXg6MCAwIGNhbGMoMTAwJSAqICA4IC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgOCAvIDEyKX0uY2VsbC05e2ZsZXg6MCAwIGNhbGMoMTAwJSAqICA5IC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAgOSAvIDEyKX0uY2VsbC0xMHtmbGV4OjAgMCBjYWxjKDEwMCUgKiAxMCAvIDEyKTttaW4td2lkdGg6Y2FsYygxMDAlICogMTAgLyAxMil9LmNlbGwtMTF7ZmxleDowIDAgY2FsYygxMDAlICogMTEgLyAxMik7bWluLXdpZHRoOmNhbGMoMTAwJSAqIDExIC8gMTIpfS5jZWxsLTEye2ZsZXg6MCAwIGNhbGMoMTAwJSAqIDEyIC8gMTIpO21pbi13aWR0aDpjYWxjKDEwMCUgKiAxMiAvIDEyKX0uZ3JpZHttYXJnaW4tbGVmdDotMXJlbTttYXJnaW4tdG9wOi0xcmVtfS5ncmlkIC5jZWxse3BhZGRpbmctbGVmdDoxcmVtO3BhZGRpbmctdG9wOjFyZW19LmdyaWQtbmFycm93e21hcmdpbi1sZWZ0OjA7bWFyZ2luLXRvcDowfS5ncmlkLW5hcnJvdyAuY2VsbHtwYWRkaW5nLWxlZnQ6MDtwYWRkaW5nLXRvcDowfS5ncmlkLXdpZGV7bWFyZ2luLWxlZnQ6LTJyZW07bWFyZ2luLXRvcDotMnJlbX0uZ3JpZC13aWRlIC5jZWxse3BhZGRpbmctbGVmdDoycmVtO3BhZGRpbmctdG9wOjJyZW19LmdyaWQtaW5saW5le2Rpc3BsYXk6ZmxleDtmbGV4LXdyYXA6d3JhcDthbGlnbi1pdGVtczpiYXNlbGluZX0uZ3JpZC1pbmxpbmU+Kjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbi1yaWdodDoxcmVtfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4cmVtKXsuZ3JpZHtmbGV4LWRpcmVjdGlvbjpjb2x1bW47ZmxleC13cmFwOm5vd3JhcH0uY2VsbHtmbGV4OjAgMCBhdXRvO21pbi13aWR0aDphdXRvfS5ncmlkLWlubGluZXtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6YmFzZWxpbmV9LmdyaWQtaW5saW5lPip7ZmxleDoxIDEgMTAwJX0uZ3JpZC1pbmxpbmU+Kjpub3QoOmxhc3QtY2hpbGQpe21hcmdpbjowIDAgLjc1cmVtfX0qe2JveC1zaXppbmc6Ym9yZGVyLWJveDt0ZXh0LXJlbmRlcmluZzpnZW9tZXRyaWNQcmVjaXNpb259OjpzZWxlY3Rpb257YmFja2dyb3VuZDojYmJkZWZifWh0bWwsYnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtjb2xvcjojMjEyMTIxO2ZvbnQtc2l6ZToxNnB4O2xpbmUtaGVpZ2h0OjEuNTtmb250LWZhbWlseTpcIkNvdXNpbmVcIiwgTWVubG8sIEx1Y2lkYSBDb25zb2xlLCBDb3VyaWVyIE5ldywgbW9ub3NwYWNlfWNvZGUscHJlLHNhbXAsa2Jke2ZvbnQtZmFtaWx5OlwiU0ZNb25vLVJlZ3VsYXJcIiwgQ29uc29sYXMsIFwiTGliZXJhdGlvbiBNb25vXCIsIE1lbmxvLCBDb3VyaWVyLCBtb25vc3BhY2V9aDEsaDIsaDMsaDQsaDUsaDZ7bGluZS1oZWlnaHQ6MS41cmVtO21hcmdpbi10b3A6MS41cmVtO21hcmdpbi1ib3R0b206MS41cmVtfWgxLnB1cmU6YmVmb3JlLC5ncmlkIGgxOmJlZm9yZSxoMi5wdXJlOmJlZm9yZSwuZ3JpZCBoMjpiZWZvcmUsaDMucHVyZTpiZWZvcmUsLmdyaWQgaDM6YmVmb3JlLGg0LnB1cmU6YmVmb3JlLC5ncmlkIGg0OmJlZm9yZSxoNS5wdXJlOmJlZm9yZSwuZ3JpZCBoNTpiZWZvcmUsaDYucHVyZTpiZWZvcmUsLmdyaWQgaDY6YmVmb3Jle2Rpc3BsYXk6bm9uZX0uZ3JpZCBoMSwuZ3JpZCBoMiwuZ3JpZCBoMywuZ3JpZCBoNCwuZ3JpZCBoNSwuZ3JpZCBoNnttYXJnaW4tdG9wOjByZW07bWFyZ2luLWJvdHRvbToxcmVtfWgxPnNtYWxsLGgyPnNtYWxsLGgzPnNtYWxsLGg0PnNtYWxsLGg1PnNtYWxsLGg2PnNtYWxse2NvbG9yOiM5ZTllOWU7bGluZS1oZWlnaHQ6MS41fWgxe2ZvbnQtc2l6ZToxLjVyZW19aDJ7Zm9udC1zaXplOjEuMjVyZW19cCx1bCxvbCxwcmUsZm9ybSx0YWJsZSxibG9ja3F1b3Rle21hcmdpbi10b3A6MDttYXJnaW4tYm90dG9tOjEuNXJlbX11bCB1bCxvbCBvbCx1bCBvbCxvbCB1bHttYXJnaW4tYm90dG9tOjB9c21hbGx7Zm9udC1zaXplOi43NWVtfS5jb250YWluZXJ7bWF4LXdpZHRoOjY0cmVtO21hcmdpbi1sZWZ0OmF1dG87bWFyZ2luLXJpZ2h0OmF1dG87cGFkZGluZy1sZWZ0OjFyZW07cGFkZGluZy1yaWdodDoxcmVtfS5zaXRlLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO3BhZGRpbmc6Ljg3NXJlbSAwIC42MjVyZW19LnNpdGUtdGl0bGV7Zm9udC1zaXplOjJyZW07Y29sb3I6IzU0NmU3YX0uc2l0ZS1zZWFyY2h7bWFyZ2luOjB9LnNpdGUtbmF2e2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6YmFzZWxpbmU7bWFyZ2luLWxlZnQ6YXV0bzttYXJnaW4tdG9wOi0uMjVyZW19LnNpdGUtbmF2IHVse2Rpc3BsYXk6aW5saW5lLWZsZXg7ZmxleC13cmFwOndyYXA7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpmbGV4LWVuZDttYXJnaW46MH0uc2l0ZS1uYXYgbGl7cGFkZGluZy1sZWZ0OjJjaH0uc2l0ZS1uYXYgbGk6bGFzdC1jaGlsZHtwYWRkaW5nLXJpZ2h0OjB9LnNpdGUtbmF2IGxpOmJlZm9yZXtkaXNwbGF5Om5vbmV9LnNpdGUtbmF2Lm5hdi1zZXBhcmF0ZWR7b3ZlcmZsb3c6aGlkZGVufS5zaXRlLW5hdi5uYXYtc2VwYXJhdGVkPnVse21hcmdpbi1yaWdodDotMmNofS5zaXRlLW5hdi5uYXYtc2VwYXJhdGVkIGxpe3BhZGRpbmctbGVmdDoxY2h9LnNpdGUtbmF2Lm5hdi1zZXBhcmF0ZWQgbGk6YWZ0ZXJ7Y29udGVudDpcInxcIjtjb2xvcjojZWVlO3BhZGRpbmctbGVmdDoxY2h9LnNpdGUtbmF2IC5hY3RpdmV7Zm9udC13ZWlnaHQ6Ym9sZH1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OHJlbSl7LnNpdGUtbmF2e2ZsZXg6MTtmbGV4LWRpcmVjdGlvbjpjb2x1bW47dGV4dC1hbGlnbjpyaWdodH0uc2l0ZS1uYXYgbGl7cGFkZGluZy10b3A6MXJlbX19LnJlc3BvbnNpdmUtbmF2e2Rpc3BsYXk6bm9uZTtmbGV4OjE7dGV4dC1hbGlnbjpyaWdodH0ucmVzcG9uc2l2ZS1uYXYgbGFiZWx7Y3Vyc29yOnBvaW50ZXI7Y29sb3I6IzU0NmU3YX0ucmVzcG9uc2l2ZS1uYXYgc3Zne3dpZHRoOjJyZW07aGVpZ2h0OjJyZW07c3Ryb2tlLXdpZHRoOjIuNXB4fS5yZXNwb25zaXZlLW5hditpbnB1dFt0eXBlPWNoZWNrYm94XXtkaXNwbGF5Om5vbmV9QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNDhyZW0pey5yZXNwb25zaXZlLW5hdntkaXNwbGF5OmJsb2NrfS5yZXNwb25zaXZlLW5hdiB+IC5zaXRlLW5hdntkaXNwbGF5Om5vbmU7bWluLXdpZHRoOjEwMCU7ZmxleC1iYXNpczoxMDAlfS5yZXNwb25zaXZlLW5hditpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkIH4gLnNpdGUtbmF2e2Rpc3BsYXk6YmxvY2t9LnJlc3BvbnNpdmUtbmF2LnJlc3BvbnNpdmUtbmF2LWFuaW1hdGVkIH4gLnNpdGUtbmF2e2Rpc3BsYXk6YmxvY2s7bWF4LWhlaWdodDowO3RyYW5zaXRpb246bWF4LWhlaWdodCAuNXMgZWFzZS1vdXQ7b3ZlcmZsb3c6aGlkZGVufS5yZXNwb25zaXZlLW5hdi5yZXNwb25zaXZlLW5hdi1hbmltYXRlZCtpbnB1dFt0eXBlPWNoZWNrYm94XTpjaGVja2VkIH4gLnNpdGUtbmF2e21heC1oZWlnaHQ6MTByZW07dHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb246ZWFzZS1pbn19LnNpdGUtbWFpbnttYXJnaW4tdG9wOjNyZW07bWFyZ2luLWJvdHRvbTozcmVtfS5zaXRlLWZvb3RlcnttYXJnaW4tdG9wOjNyZW07cGFkZGluZzozcmVtIDA7Y29sb3I6I2JkYmRiZDt0ZXh0LWFsaWduOmNlbnRlcn0uc2l0ZS1mb290ZXIgYSwuc2l0ZS1mb290ZXIgLmxpc3QtZ3JvdXAgYnV0dG9uOm5vdCguYnRuKSwubGlzdC1ncm91cCAuc2l0ZS1mb290ZXIgYnV0dG9uOm5vdCguYnRuKXtjb2xvcjojNjRiNWY2fS5hbGVydHtwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOmNhbGMoLjVyZW0gLSAycHgpIDAuNzVyZW0gMC4yNXJlbTtib3JkZXI6MXB4IHNvbGlkO2JvcmRlci1yYWRpdXM6MnB4fS5hbGVydCAuY2xvc2V7ZmxvYXQ6cmlnaHQ7bWFyZ2luOi0uNXJlbSAtLjc1cmVtIDAgMDtwYWRkaW5nOmNhbGMoLjVyZW0gKyAxcHgpIDAuNzVyZW0gMDtvcGFjaXR5Oi41O2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtmb250LXNpemU6MS41cmVtO2xpbmUtaGVpZ2h0OjE7Y29sb3I6aW5oZXJpdDtjdXJzb3I6cG9pbnRlcn0uYWxlcnQgLmNsb3NlOmhvdmVye29wYWNpdHk6MTt0ZXh0LWRlY29yYXRpb246bm9uZX0uYWxlcnR7Y29sb3I6IzYxNjE2MTtib3JkZXItY29sb3I6IzYxNjE2MTtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9LmFsZXJ0LXN1Y2Nlc3N7Y29sb3I6IzM4OGUzYztib3JkZXItY29sb3I6IzM4OGUzYztiYWNrZ3JvdW5kLWNvbG9yOiNlOGY1ZTl9LmFsZXJ0LWluZm97Y29sb3I6IzAwOTdhNztib3JkZXItY29sb3I6IzAwOTdhNztiYWNrZ3JvdW5kLWNvbG9yOiNlMGY3ZmF9LmFsZXJ0LXdhcm5pbmd7Y29sb3I6I2Y1N2MwMDtib3JkZXItY29sb3I6I2Y1N2MwMDtiYWNrZ3JvdW5kLWNvbG9yOiNmZmYzZTB9LmFsZXJ0LWVycm9ye2NvbG9yOiNkMzJmMmY7Ym9yZGVyLWNvbG9yOiNkMzJmMmY7YmFja2dyb3VuZC1jb2xvcjojZmZlYmVlfWlucHV0W3R5cGU9J2VtYWlsJ10saW5wdXRbdHlwZT0nbnVtYmVyJ10saW5wdXRbdHlwZT0ncGFzc3dvcmQnXSxpbnB1dFt0eXBlPSdzZWFyY2gnXSxpbnB1dFt0eXBlPSd0ZWwnXSxpbnB1dFt0eXBlPSd0ZXh0J10saW5wdXRbdHlwZT0ndXJsJ10sdGV4dGFyZWEsc2VsZWN0e3BhZGRpbmc6Y2FsYyguNXJlbSAtIDNweCkgMC42MjVyZW0gY2FsYyguMjVyZW0gLSAxcHgpO2FwcGVhcmFuY2U6bm9uZTtib3JkZXI6MnB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoycHg7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudDtib3gtc2hhZG93Om5vbmU7b3V0bGluZTowfWlucHV0W3R5cGU9J2VtYWlsJ106Zm9jdXMsaW5wdXRbdHlwZT0nbnVtYmVyJ106Zm9jdXMsaW5wdXRbdHlwZT0ncGFzc3dvcmQnXTpmb2N1cyxpbnB1dFt0eXBlPSdzZWFyY2gnXTpmb2N1cyxpbnB1dFt0eXBlPSd0ZWwnXTpmb2N1cyxpbnB1dFt0eXBlPSd0ZXh0J106Zm9jdXMsaW5wdXRbdHlwZT0ndXJsJ106Zm9jdXMsdGV4dGFyZWE6Zm9jdXMsc2VsZWN0OmZvY3Vze2JvcmRlci1jb2xvcjojOWU5ZTllfWlucHV0W3R5cGU9XCJmaWxlXCJde2xpbmUtaGVpZ2h0OjE7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH1pbnB1dDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257cGFkZGluZzouMnJlbSAuM3JlbSAuMDVyZW07YmFja2dyb3VuZC1jb2xvcjojZmZmO2JvcmRlcjoycHggc29saWQgI2JkYmRiZDtib3JkZXItcmFkaXVzOjJweH1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6I2JkYmRiZH1zZWxlY3R7cGFkZGluZy1yaWdodDoxLjhyZW07YmFja2dyb3VuZC1pbWFnZTp1cmwoXCJkYXRhOmltYWdlL3N2Zyt4bWw7Y2hhcnNldD11dGYtOCwlM0NzdmclMjB4bWxucyUzRCUyMmh0dHAlM0ElMkYlMkZ3d3cudzMub3JnJTJGMjAwMCUyRnN2ZyUyMiUyMGhlaWdodCUzRCUyMjE0JTIyJTIwdmlld0JveCUzRCUyMjAlMjAwJTIwMjklMjAxNCUyMiUyMHdpZHRoJTNEJTIyMjklMjIlM0UlM0NwYXRoJTIwZmlsbCUzRCUyMiUyM2UwZTBlMCUyMiUyMGQlM0QlMjJNOS4zNzcyNyUyMDMuNjI1bDUuMDgxNTQlMjA2LjkzNTIzTDE5LjU0MDM2JTIwMy42MjUlMjIlMkYlM0UlM0MlMkZzdmclM0VcIik7YmFja2dyb3VuZC1yZXBlYXQ6bm8tcmVwZWF0O2JhY2tncm91bmQtcG9zaXRpb246Y2VudGVyIHJpZ2h0fXNlbGVjdDpmb2N1c3tiYWNrZ3JvdW5kLWltYWdlOnVybChcImRhdGE6aW1hZ2Uvc3ZnK3htbDtjaGFyc2V0PXV0Zi04LCUzQ3N2ZyUyMHhtbG5zJTNEJTIyaHR0cCUzQSUyRiUyRnd3dy53My5vcmclMkYyMDAwJTJGc3ZnJTIyJTIwaGVpZ2h0JTNEJTIyMTQlMjIlMjB2aWV3Qm94JTNEJTIyMCUyMDAlMjAyOSUyMDE0JTIyJTIwd2lkdGglM0QlMjIyOSUyMiUzRSUzQ3BhdGglMjBmaWxsJTNEJTIyJTIzOWU5ZTllJTIyJTIwZCUzRCUyMk05LjM3NzI3JTIwMy42MjVsNS4wODE1NCUyMDYuOTM1MjNMMTkuNTQwMzYlMjAzLjYyNSUyMiUyRiUzRSUzQyUyRnN2ZyUzRVwiKX1zZWxlY3Q6Oi1tcy1leHBhbmR7ZGlzcGxheTpub25lfXRleHRhcmVhe2hlaWdodDphdXRvO21pbi1oZWlnaHQ6MnJlbX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiAzMHJlbSl7LmZvcm17d2lkdGg6MTAwJX19LmZvcm0tZ3JvdXB7ZGlzcGxheTpmbGV4O2ZsZXgtd3JhcDp3cmFwO21hcmdpbi1ib3R0b206MS41cmVtfS5mb3JtLWxhYmVse29yZGVyOjE7cG9zaXRpb246cmVsYXRpdmU7bWluLXdpZHRoOjEwcmVtO2hlaWdodDoycmVtO2NvbG9yOiM0MjQyNDI7Ym9yZGVyLWJvdHRvbToycHggc29saWQgI2UwZTBlMDtsaW5lLWhlaWdodDoycmVtfWh0bWwgLmZvcm0tY29udHJvbHtmbGV4OjE7b3JkZXI6MjttaW4td2lkdGg6Y2FsYygxMDAlIC0gMTByZW0pO3BhZGRpbmc6LjI1cmVtIDFyZW0gMDtib3JkZXI6MDtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1yYWRpdXM6MH1odG1sIC5mb3JtLWNvbnRyb2w6Zm9jdXN7Ym9yZGVyLWNvbG9yOiM5ZTllOWV9aHRtbCAuZm9ybS1jb250cm9sIGxhYmVsK2xhYmVse3BhZGRpbmctbGVmdDoycmVtfXRleHRhcmVhLmZvcm0tY29udHJvbHtwYWRkaW5nLWxlZnQ6Y2FsYygxcmVtIC0gMnB4KTtib3JkZXItYm90dG9tOjJweCBzb2xpZCAjZTBlMGUwO2JvcmRlci1sZWZ0OjJweCBzb2xpZCAjZTBlMGUwfXRleHRhcmVhLmZvcm0tY29udHJvbCsuZm9ybS1sYWJlbDpiZWZvcmV7cG9zaXRpb246YWJzb2x1dGU7Y29udGVudDonJzt3aWR0aDoycHg7YmFja2dyb3VuZC1jb2xvcjojZmZmO3JpZ2h0Oi0ycHg7dG9wOjA7Ym90dG9tOjB9c2VsZWN0LmZvcm0tY29udHJvbHtib3JkZXItcmFkaXVzOjB9LmZvcm0tc3VjY2VzcyAuaGVscC1ibG9jaywuZm9ybS1zdWNjZXNzIC5mb3JtLWxhYmVse2NvbG9yOiM0Y2FmNTB9LmZvcm0tc3VjY2VzcyBpbnB1dCwuZm9ybS1zdWNjZXNzIHRleHRhcmVhLC5mb3JtLXN1Y2Nlc3Mgc2VsZWN0LC5mb3JtLXN1Y2Nlc3MgLmZvcm0tbGFiZWwsLmZvcm0tc3VjY2VzcyAuZm9ybS1jb250cm9se2JvcmRlci1jb2xvcjojNGNhZjUwfS5mb3JtLXN1Y2Nlc3MgaW5wdXQ6Zm9jdXMsLmZvcm0tc3VjY2VzcyB0ZXh0YXJlYTpmb2N1cywuZm9ybS1zdWNjZXNzIHNlbGVjdDpmb2N1cywuZm9ybS1zdWNjZXNzIC5mb3JtLWxhYmVsOmZvY3VzLC5mb3JtLXN1Y2Nlc3MgLmZvcm0tY29udHJvbDpmb2N1c3tib3JkZXItY29sb3I6IzJlN2QzMn0uZm9ybS1pbmZvIC5oZWxwLWJsb2NrLC5mb3JtLWluZm8gLmZvcm0tbGFiZWx7Y29sb3I6IzAwYmNkNH0uZm9ybS1pbmZvIGlucHV0LC5mb3JtLWluZm8gdGV4dGFyZWEsLmZvcm0taW5mbyBzZWxlY3QsLmZvcm0taW5mbyAuZm9ybS1sYWJlbCwuZm9ybS1pbmZvIC5mb3JtLWNvbnRyb2x7Ym9yZGVyLWNvbG9yOiMwMGJjZDR9LmZvcm0taW5mbyBpbnB1dDpmb2N1cywuZm9ybS1pbmZvIHRleHRhcmVhOmZvY3VzLC5mb3JtLWluZm8gc2VsZWN0OmZvY3VzLC5mb3JtLWluZm8gLmZvcm0tbGFiZWw6Zm9jdXMsLmZvcm0taW5mbyAuZm9ybS1jb250cm9sOmZvY3Vze2JvcmRlci1jb2xvcjojMDA4MzhmfS5mb3JtLXdhcm5pbmcgLmhlbHAtYmxvY2ssLmZvcm0td2FybmluZyAuZm9ybS1sYWJlbHtjb2xvcjojZmY5ODAwfS5mb3JtLXdhcm5pbmcgaW5wdXQsLmZvcm0td2FybmluZyB0ZXh0YXJlYSwuZm9ybS13YXJuaW5nIHNlbGVjdCwuZm9ybS13YXJuaW5nIC5mb3JtLWxhYmVsLC5mb3JtLXdhcm5pbmcgLmZvcm0tY29udHJvbHtib3JkZXItY29sb3I6I2ZmOTgwMH0uZm9ybS13YXJuaW5nIGlucHV0OmZvY3VzLC5mb3JtLXdhcm5pbmcgdGV4dGFyZWE6Zm9jdXMsLmZvcm0td2FybmluZyBzZWxlY3Q6Zm9jdXMsLmZvcm0td2FybmluZyAuZm9ybS1sYWJlbDpmb2N1cywuZm9ybS13YXJuaW5nIC5mb3JtLWNvbnRyb2w6Zm9jdXN7Ym9yZGVyLWNvbG9yOiNlZjZjMDB9LmZvcm0tZXJyb3IgLmhlbHAtYmxvY2ssLmZvcm0tZXJyb3IgLmZvcm0tbGFiZWx7Y29sb3I6I2Y0NDMzNn0uZm9ybS1lcnJvciBpbnB1dCwuZm9ybS1lcnJvciB0ZXh0YXJlYSwuZm9ybS1lcnJvciBzZWxlY3QsLmZvcm0tZXJyb3IgLmZvcm0tbGFiZWwsLmZvcm0tZXJyb3IgLmZvcm0tY29udHJvbHtib3JkZXItY29sb3I6I2Y0NDMzNn0uZm9ybS1lcnJvciBpbnB1dDpmb2N1cywuZm9ybS1lcnJvciB0ZXh0YXJlYTpmb2N1cywuZm9ybS1lcnJvciBzZWxlY3Q6Zm9jdXMsLmZvcm0tZXJyb3IgLmZvcm0tbGFiZWw6Zm9jdXMsLmZvcm0tZXJyb3IgLmZvcm0tY29udHJvbDpmb2N1c3tib3JkZXItY29sb3I6I2M2MjgyOH0uZm9ybS1jb250cm9sOmRpc2FibGVkLC5mb3JtLWNvbnRyb2w6ZGlzYWJsZWQrLmZvcm0tbGFiZWx7Y3Vyc29yOm5vdC1hbGxvd2VkO2NvbG9yOiNiZGJkYmQ7LXdlYmtpdC10ZXh0LWZpbGwtY29sb3I6I2JkYmRiZDtvcGFjaXR5OjF9LmZvcm0tY29udHJvbFtyZWFkb25seV0sLmZvcm0tY29udHJvbFtyZWFkb25seV0rLmZvcm0tbGFiZWx7Y29sb3I6IzllOWU5ZX0uZm9ybS1jb250cm9sOnJlcXVpcmVkKy5mb3JtLWxhYmVsOmFmdGVye2NvbnRlbnQ6XCIgKlwiO2NvbG9yOiNlZjUzNTB9LmhlbHAtYmxvY2t7b3JkZXI6MzttaW4td2lkdGg6MTAwJTtmbGV4LWJhc2lzOjEwMCU7bWFyZ2luLXRvcDouNXJlbTtwYWRkaW5nLWxlZnQ6MTFyZW07Y29sb3I6IzllOWU5ZX0uaW5wdXQtZ3JvdXAsLmJ0bi1ncm91cHtkaXNwbGF5OmlubGluZS1mbGV4O2ZsZXgtd3JhcDp3cmFwfS5mb3JtLXZlcnRpY2FsIC5mb3JtLWxhYmVse2JvcmRlci1ib3R0b206bm9uZTttaW4td2lkdGg6MTAwJTtmbGV4LWJhc2lzOjEwMCV9LmZvcm0tdmVydGljYWwgdGV4dGFyZWEuZm9ybS1jb250cm9se3BhZGRpbmctbGVmdDowO2JvcmRlci1sZWZ0Om5vbmV9LmZvcm0tdmVydGljYWwgdGV4dGFyZWEuZm9ybS1jb250cm9sKy5mb3JtLWxhYmVsOmJlZm9yZXtkaXNwbGF5Om5vbmV9LmZvcm0tdmVydGljYWwgLmhlbHAtYmxvY2t7cGFkZGluZy1sZWZ0OjB9LmZvcm0tdmVydGljYWwgLmZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLXdpZHRoOjEwMCU7ZmxleC1iYXNpczoxMDAlO3BhZGRpbmc6MCAwIC4xNXJlbX0uZm9ybS12ZXJ0aWNhbCAuZm9ybS1jb250cm9sIGxhYmVse3BhZGRpbmctcmlnaHQ6MXJlbX0uZm9ybS12ZXJ0aWNhbCAuZm9ybS1jb250cm9sIGxhYmVsK2xhYmVse3BhZGRpbmctbGVmdDowfUBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDQ4cmVtKXsuZm9ybS1sYWJlbHtib3JkZXItYm90dG9tOm5vbmU7bWluLXdpZHRoOjEwMCU7ZmxleC1iYXNpczoxMDAlfXRleHRhcmVhLmZvcm0tY29udHJvbHtwYWRkaW5nLWxlZnQ6MDtib3JkZXItbGVmdDpub25lfXRleHRhcmVhLmZvcm0tY29udHJvbCsuZm9ybS1sYWJlbDpiZWZvcmV7ZGlzcGxheTpub25lfS5oZWxwLWJsb2Nre3BhZGRpbmctbGVmdDowfWh0bWwgLmZvcm0tY29udHJvbHtkaXNwbGF5OmZsZXg7ZmxleC13cmFwOndyYXA7bWluLXdpZHRoOjEwMCU7ZmxleC1iYXNpczoxMDAlO3BhZGRpbmc6MCAwIC4xNXJlbX1odG1sIC5mb3JtLWNvbnRyb2wgbGFiZWx7cGFkZGluZy1yaWdodDoxcmVtfWh0bWwgLmZvcm0tY29udHJvbCBsYWJlbCtsYWJlbHtwYWRkaW5nLWxlZnQ6MH19LmJ0bntwb3NpdGlvbjpyZWxhdGl2ZTtwYWRkaW5nOmNhbGMoLjVyZW0gLSAzcHgpIDAuNzVyZW0gY2FsYyguMjVyZW0gLSAxcHgpO2JvcmRlci13aWR0aDoycHg7Ym9yZGVyLXN0eWxlOnNvbGlkO2JvcmRlci1yYWRpdXM6MnB4O2JvcmRlci1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuMikgcmdiYSgwLDAsMCwwLjIpIHJnYmEoMCwwLDAsMC4yKSByZ2JhKDI1NSwyNTUsMjU1LDAuMik7b3V0bGluZTpub25lO2N1cnNvcjpwb2ludGVyO3VzZXItc2VsZWN0Om5vbmU7Y29sb3I6I2ZmZn0uYnRuOmhvdmVyLC5idG46Zm9jdXN7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyLWNvbG9yOnJnYmEoMCwwLDAsMC4yKSByZ2JhKDI1NSwyNTUsMjU1LDAuMikgcmdiYSgyNTUsMjU1LDI1NSwwLjIpIHJnYmEoMCwwLDAsMC4yKX0uYnRuOmFjdGl2ZXtib3gtc2hhZG93Omluc2V0IDAgMXB4IDNweCByZ2JhKDAsMCwwLDAuMil9LmJ0bi5idG4tZ2hvc3R7YmFja2dyb3VuZC1jb2xvcjp0cmFuc3BhcmVudH0uYnRuLmJ0bi1naG9zdDpob3ZlciwuYnRuLmJ0bi1naG9zdDpmb2N1c3tjb2xvcjojZmZmO2JvcmRlci1jb2xvcjpyZ2JhKDAsMCwwLDAuMikgcmdiYSgyNTUsMjU1LDI1NSwwLjIpIHJnYmEoMjU1LDI1NSwyNTUsMC4yKSByZ2JhKDAsMCwwLDAuMil9LmJ0bi1wcmltYXJ5e2JhY2tncm91bmQtY29sb3I6IzIxOTZmM30uYnRuLXByaW1hcnk6aG92ZXIsLmJ0bi1wcmltYXJ5OmZvY3Vze2JhY2tncm91bmQtY29sb3I6IzE5NzZkMn0uYnRuLXByaW1hcnkuYnRuLWdob3N0e2JvcmRlci1jb2xvcjojMjE5NmYzO2NvbG9yOiMyMTk2ZjN9LmJ0bi1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6IzRjYWY1MH0uYnRuLXN1Y2Nlc3M6aG92ZXIsLmJ0bi1zdWNjZXNzOmZvY3Vze2JhY2tncm91bmQtY29sb3I6IzM4OGUzY30uYnRuLXN1Y2Nlc3MuYnRuLWdob3N0e2JvcmRlci1jb2xvcjojNGNhZjUwO2NvbG9yOiM0Y2FmNTB9LmJ0bi1pbmZve2JhY2tncm91bmQtY29sb3I6IzAwYmNkNH0uYnRuLWluZm86aG92ZXIsLmJ0bi1pbmZvOmZvY3Vze2JhY2tncm91bmQtY29sb3I6IzAwOTdhN30uYnRuLWluZm8uYnRuLWdob3N0e2JvcmRlci1jb2xvcjojMDBiY2Q0O2NvbG9yOiMwMGJjZDR9LmJ0bi13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH0uYnRuLXdhcm5pbmc6aG92ZXIsLmJ0bi13YXJuaW5nOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2Y1N2MwMH0uYnRuLXdhcm5pbmcuYnRuLWdob3N0e2JvcmRlci1jb2xvcjojZmY5ODAwO2NvbG9yOiNmZjk4MDB9LmJ0bi1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOiNmNDQzMzZ9LmJ0bi1lcnJvcjpob3ZlciwuYnRuLWVycm9yOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2QzMmYyZn0uYnRuLWVycm9yLmJ0bi1naG9zdHtib3JkZXItY29sb3I6I2Y0NDMzNjtjb2xvcjojZjQ0MzM2fS5idG4tZGVmYXVsdHtiYWNrZ3JvdW5kLWNvbG9yOiNlZWU7Y29sb3I6IzYxNjE2MX0uYnRuLWRlZmF1bHQ6aG92ZXIsLmJ0bi1kZWZhdWx0OmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2JkYmRiZDtjb2xvcjojZmZmfS5idG4tZGVmYXVsdC5idG4tZ2hvc3R7Ym9yZGVyLWNvbG9yOiNiZGJkYmQ7Y29sb3I6IzYxNjE2MX0uYnRuLWxpbmt7Ym9yZGVyLWNvbG9yOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnQ7Y29sb3I6IzIxOTZmM30uYnRuLWxpbms6aG92ZXIsLmJ0bi1saW5rOmZvY3Vze2JvcmRlci1jb2xvcjp0cmFuc3BhcmVudDtjb2xvcjojMTk3NmQyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9LmJ0bltkaXNhYmxlZF17Y3Vyc29yOm5vdC1hbGxvd2VkfS5idG5bZGlzYWJsZWRdLC5idG5bZGlzYWJsZWRdOmhvdmVyLC5idG5bZGlzYWJsZWRdOmZvY3Vze2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNTtib3JkZXItY29sb3I6cmdiYSgyNTUsMjU1LDI1NSwwLjIpIHJnYmEoMCwwLDAsMC4yKSByZ2JhKDAsMCwwLDAuMikgcmdiYSgyNTUsMjU1LDI1NSwwLjIpO2NvbG9yOiNiZGJkYmR9LmJ0bltkaXNhYmxlZF0uYnRuLWdob3N0LC5idG5bZGlzYWJsZWRdLmJ0bi1naG9zdDpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlci1jb2xvcjojYmRiZGJkO2NvbG9yOiNiZGJkYmR9LmJ0bi1hZGRvbntwYWRkaW5nOmNhbGMoLjVyZW0gLSAzcHgpIDAuNzVyZW0gY2FsYyguMjVyZW0gLSAxcHgpO2JvcmRlcjoycHggc29saWQgdHJhbnNwYXJlbnR9LmJ0bi1hZGRvbjpmaXJzdC1jaGlsZHtwYWRkaW5nLWxlZnQ6MH0uYnRuLWdyb3VwIC5idG57ZmxleC1ncm93OjE7Ym9yZGVyLXJhZGl1czowO3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtYnJlYWs6YnJlYWstd29yZH0uYnRuLWdyb3VwIC5idG46Zmlyc3Qtb2YtdHlwZXtib3JkZXItcmFkaXVzOjJweCAwIDAgMnB4fS5idG4tZ3JvdXAgLmJ0bjpsYXN0LW9mLXR5cGV7Ym9yZGVyLXJhZGl1czowIDJweCAycHggMH0uYnRuLWdyb3VwIC5idG4tZ2hvc3Q6bm90KDpmaXJzdC1jaGlsZCl7bWFyZ2luLWxlZnQ6LTJweH0ubGlzdC1zdHJpcGVkPio6bnRoLWNoaWxkKGV2ZW4pOm5vdCguYnRuKXtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjV9Lmxpc3QtZ3JvdXB7cGFkZGluZzowO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjJweH0ubGlzdC1ncm91cD4qe2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjA7cGFkZGluZzpjYWxjKC41cmVtIC0gMXB4KSAwLjVyZW0gMC4yNXJlbTtib3JkZXI6MH0ubGlzdC1ncm91cD4qOmZpcnN0LWNoaWxke3BhZGRpbmctdG9wOmNhbGMoLjVyZW0gLSAycHgpfS5saXN0LWdyb3VwPmEsLmxpc3QtZ3JvdXA+YnV0dG9uOm5vdCguYnRuKSwubGlzdC1ncm91cD5idXR0b257d2lkdGg6MTAwJTtib3JkZXItcmFkaXVzOjB9Lmxpc3QtZ3JvdXAgYnV0dG9uOm5vdCguYnRuKXt0ZXh0LWFsaWduOmxlZnQ7YmFja2dyb3VuZC1jb2xvcjojZmZmfS5saXN0LWdyb3VwPmxpOmJlZm9yZXtkaXNwbGF5Om5vbmV9Lmxpc3QtZ3JvdXA+Kjpub3QoOmxhc3QtY2hpbGQpe2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlMGUwZTB9Lmxpc3QtZ3JvdXA+LmRpc2FibGVke2NvbG9yOiM5ZTllOWU7Y3Vyc29yOm5vdC1hbGxvd2VkO2JhY2tncm91bmQtY29sb3I6I2VlZX0ubGlzdC1ncm91cD4uYWN0aXZlLmFjdGl2ZSwubGlzdC1ncm91cD4uYWN0aXZlLmFjdGl2ZTpob3Zlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIxOTZmM30uY2FyZHtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoycHh9LmNhcmQgLmNhcmQtaGVhZGVye2Rpc3BsYXk6YmxvY2s7cGFkZGluZzpjYWxjKC41cmVtIC0gMXB4KSAwLjc1cmVtIDAuMjVyZW07YmFja2dyb3VuZC1jb2xvcjojZWVlO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtd2VpZ2h0OmJvbGQ7Y29sb3I6IzQyNDI0Mn0uY2FyZCAuY2FyZC1ib2R5e3BhZGRpbmc6Y2FsYyguNXJlbSAtIDJweCkgMC43NXJlbSAwLjI1cmVtfS5jYXJkIC5jYXJkLWJvZHk6bGFzdC1jaGlsZHttYXJnaW4tYm90dG9tOjB9LmNhcmQ+Kisqe2JvcmRlcjowO2JvcmRlci1yYWRpdXM6MDtib3JkZXItdG9wOjFweCBzb2xpZDtib3JkZXItY29sb3I6aW5oZXJpdH0uY2FyZC5jYXJkLXN1Y2Nlc3N7Ym9yZGVyOjFweCBzb2xpZCAjNGNhZjUwfS5jYXJkLmNhcmQtc3VjY2VzcyAuY2FyZC1oZWFkZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0Y2FmNTA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojNGNhZjUwO2ZvbnQtd2VpZ2h0Om5vcm1hbH0uY2FyZC5jYXJkLWluZm97Ym9yZGVyOjFweCBzb2xpZCAjMDBiY2Q0fS5jYXJkLmNhcmQtaW5mbyAuY2FyZC1oZWFkZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMwMGJjZDQ7Ym9yZGVyLWJvdHRvbS1jb2xvcjojMDBiY2Q0O2ZvbnQtd2VpZ2h0Om5vcm1hbH0uY2FyZC5jYXJkLXdhcm5pbmd7Ym9yZGVyOjFweCBzb2xpZCAjZmY5ODAwfS5jYXJkLmNhcmQtd2FybmluZyAuY2FyZC1oZWFkZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZmY5ODAwO2ZvbnQtd2VpZ2h0Om5vcm1hbH0uY2FyZC5jYXJkLWVycm9ye2JvcmRlcjoxcHggc29saWQgI2Y0NDMzNn0uY2FyZC5jYXJkLWVycm9yIC5jYXJkLWhlYWRlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtib3JkZXItYm90dG9tLWNvbG9yOiNmNDQzMzY7Zm9udC13ZWlnaHQ6bm9ybWFsfWRldGFpbHMuY2FyZD4qKyp7Ym9yZGVyLWNvbG9yOiNlMGUwZTB9LmxvYWRpbmd7ZGlzcGxheTppbmxpbmUtYmxvY2s7b3ZlcmZsb3c6aGlkZGVuO2hlaWdodDoxLjNlbTttYXJnaW4tdG9wOi0uM2VtO2xpbmUtaGVpZ2h0OjEuNWVtO3ZlcnRpY2FsLWFsaWduOnRleHQtYm90dG9tfS5sb2FkaW5nOjphZnRlcntkaXNwbGF5OmlubGluZS10YWJsZTt3aGl0ZS1zcGFjZTpwcmU7Y29udGVudDpcIlxcQS5cXEEuLlxcQS4uLlwiO3RleHQtYWxpZ246bGVmdDthbmltYXRpb246c3BpbiAycyBzdGVwcyg0KSBpbmZpbml0ZX1Aa2V5ZnJhbWVzIHNwaW57dG97dHJhbnNmb3JtOnRyYW5zbGF0ZVkoLTZlbSl9fS5wcm9ncmVzcy1iYXJ7aGVpZ2h0OjFyZW07YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwfS5wcm9ncmVzcy1iYXIubmFycm93e2hlaWdodDowLjVyZW19LnByb2dyZXNzLWJhci5wcm9ncmVzcy1iYXItc2hvdy1wZXJjZW50e21hcmdpbi10b3A6MnJlbX0ucHJvZ3Jlc3MtYmFyLnByb2dyZXNzLWJhci1zaG93LXBlcmNlbnQ+ZGl2OmJlZm9yZXtjb250ZW50OicnO2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7Ym9yZGVyLXRvcC1jb2xvcjojOWU5ZTllO3Bvc2l0aW9uOmFic29sdXRlO3RvcDotMTJweDtyaWdodDotNnB4fS5wcm9ncmVzcy1iYXIucHJvZ3Jlc3MtYmFyLXNob3ctcGVyY2VudD5kaXY6YWZ0ZXJ7Y29sb3I6Izc1NzU3NTtjb250ZW50OmF0dHIoZGF0YS1maWxsZWQpO2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEycHg7d2hpdGUtc3BhY2U6bm93cmFwO3Bvc2l0aW9uOmFic29sdXRlO2JvcmRlcjo2cHggc29saWQgdHJhbnNwYXJlbnQ7dG9wOi0zNnB4O3JpZ2h0OjA7dHJhbnNmb3JtOnRyYW5zbGF0ZVgoNTAlKX0ucHJvZ3Jlc3MtYmFyPmRpdntwb3NpdGlvbjpyZWxhdGl2ZTtoZWlnaHQ6MTAwJTt3aWR0aDowO21heC13aWR0aDoxMDAlO2JhY2tncm91bmQtY29sb3I6IzllOWU5ZTt0cmFuc2l0aW9uOndpZHRoIC4zcyBlYXNlO3RleHQtYWxpZ246Y2VudGVyO2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiNmZmZ9LnByb2dyZXNzLWJhci5wcm9ncmVzcy1wcmltYXJ5PmRpdntiYWNrZ3JvdW5kLWNvbG9yOiMyMTk2ZjN9LnByb2dyZXNzLWJhci5wcm9ncmVzcy1zdWNjZXNzPmRpdntiYWNrZ3JvdW5kLWNvbG9yOiM0Y2FmNTB9LnByb2dyZXNzLWJhci5wcm9ncmVzcy1pbmZvPmRpdntiYWNrZ3JvdW5kLWNvbG9yOiMwMGJjZDR9LnByb2dyZXNzLWJhci5wcm9ncmVzcy13YXJuaW5nPmRpdntiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDB9LnByb2dyZXNzLWJhci5wcm9ncmVzcy1lcnJvcj5kaXZ7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fXRhYmxle3dpZHRoOjEwMCU7Ym9yZGVyLWNvbGxhcHNlOmNvbGxhcHNlO2JvcmRlci1zcGFjaW5nOjB9dGQsdGh7dmVydGljYWwtYWxpZ246dG9wO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtwYWRkaW5nOmNhbGMoLjVyZW0gLSAxcHgpIDAuNXJlbSAwLjNyZW19dGhlYWQgdGh7Y29sb3I6IzQyNDI0Mjt0ZXh0LWFsaWduOmNlbnRlcjtiYWNrZ3JvdW5kLWNvbG9yOiNlZWV9Y2FwdGlvbntjYXB0aW9uLXNpZGU6Ym90dG9tO3BhZGRpbmctdG9wOi43NXJlbTtjb2xvcjojOWU5ZTllfS50YWJsZS1maXhlZHt0YWJsZS1sYXlvdXQ6Zml4ZWR9LnRhYmxlLXN0cmlwZWQgdHI6bnRoLWNoaWxkKGV2ZW4pIHRke2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX0udGFibGUtaG92ZXIgdHI6aG92ZXIgdGR7YmFja2dyb3VuZC1jb2xvcjojZWVlfS50YWJsZS1uYXJyb3cgdGQsLnRhYmxlLW5hcnJvdyB0aHtwYWRkaW5nOmNhbGMoLjI1cmVtIC0gMXB4KSAwLjVyZW0gMH0udGFibGUtd2lkZSB0ZCwudGFibGUtd2lkZSB0aHtwYWRkaW5nOmNhbGMoLjg3NXJlbSAtIDFweCkgMXJlbSAwLjYyNXJlbX10aGVhZC50ZXh0LWxlZnQ+dHI+dGh7dGV4dC1hbGlnbjpsZWZ0fS50YWd7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM5ZTllOWU7Ym94LXNoYWRvdzowIC0xcHggMCAzcHggIzllOWU5ZSxpbnNldCAwIDAgMCAxcHggIzllOWU5ZTtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LS4xZW07cGFkZGluZzowIC4yNWVtO2JvcmRlci1yYWRpdXM6MXB4O2ZvbnQtc2l6ZTouOGVtO2ZvbnQtd2VpZ2h0Om5vcm1hbDt3aGl0ZS1zcGFjZTpub3dyYXA7dmVydGljYWwtYWxpZ246YmFzZWxpbmU7dGV4dC1yZW5kZXJpbmc6b3B0aW1pemVMZWdpYmlsaXR5fS50YWc6ZW1wdHl7ZGlzcGxheTpub25lfS50YWcudGFnLXByaW1hcnl7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMTk2ZjM7Ym94LXNoYWRvdzowIC0xcHggMCAzcHggIzIxOTZmMyxpbnNldCAwIDAgMCAxcHggIzIxOTZmM30udGFnLnRhZy1zdWNjZXNze2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojNGNhZjUwO2JveC1zaGFkb3c6MCAtMXB4IDAgM3B4ICM0Y2FmNTAsaW5zZXQgMCAwIDAgMXB4ICM0Y2FmNTB9LnRhZy50YWctaW5mb3tjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzAwYmNkNDtib3gtc2hhZG93OjAgLTFweCAwIDNweCAjMDBiY2Q0LGluc2V0IDAgMCAwIDFweCAjMDBiY2Q0fS50YWcudGFnLXdhcm5pbmd7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiNmZjk4MDA7Ym94LXNoYWRvdzowIC0xcHggMCAzcHggI2ZmOTgwMCxpbnNldCAwIDAgMCAxcHggI2ZmOTgwMH0udGFnLnRhZy1lcnJvcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2Y0NDMzNjtib3gtc2hhZG93OjAgLTFweCAwIDNweCAjZjQ0MzM2LGluc2V0IDAgMCAwIDFweCAjZjQ0MzM2fUBrZXlmcmFtZXMgdG9vbHRpcC1hcHBlYXJ7dG97b3BhY2l0eToxfX1bZGF0YS10b29sdGlwXXtwb3NpdGlvbjpyZWxhdGl2ZX1bZGF0YS10b29sdGlwXTphZnRlcntjb250ZW50OmF0dHIoZGF0YS10b29sdGlwKTtwb3NpdGlvbjphYnNvbHV0ZTt6LWluZGV4OjE7Ym90dG9tOjEwMCU7bGVmdDo1MCU7ZGlzcGxheTpub25lO3BhZGRpbmc6Y2FsYyguNXJlbSAtIDJweCkgMC41cmVtIDAuMjVyZW07dHJhbnNmb3JtOnRyYW5zbGF0ZSgtNTAlLCAtMC41cmVtKTtwb2ludGVyLWV2ZW50czpub25lO2JveC1zaGFkb3c6MCAwIDAgMC4yNXJlbSAjZmZmO2JvcmRlcjoxcHggc29saWQgI2UwZTBlMDtib3JkZXItcmFkaXVzOjJweDtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmE7d2hpdGUtc3BhY2U6cHJlO2NvbG9yOiMyMTIxMjE7b3BhY2l0eTowfVtkYXRhLXRvb2x0aXBdOmZvY3VzOmFmdGVyLFtkYXRhLXRvb2x0aXBdOmhvdmVyOmFmdGVye2Rpc3BsYXk6YmxvY2s7YW5pbWF0aW9uOnRvb2x0aXAtYXBwZWFyIC4xcyBlYXNlLWluIC4xcyBmb3J3YXJkc31bZGF0YS10b29sdGlwXS50b29sdGlwLWJvdHRvbTphZnRlcntib3R0b206YXV0bzt0b3A6MTAwJTtsZWZ0OjUwJTt0cmFuc2Zvcm06dHJhbnNsYXRlKC01MCUsIDAuNXJlbSl9W2RhdGEtdG9vbHRpcF0udG9vbHRpcC1sZWZ0OmFmdGVye2JvdHRvbTphdXRvO2xlZnQ6YXV0bzt0b3A6NTAlO3JpZ2h0OjEwMCU7dHJhbnNmb3JtOnRyYW5zbGF0ZSgtMC41cmVtLCAtNTAlKX1bZGF0YS10b29sdGlwXS50b29sdGlwLXJpZ2h0OmFmdGVye2JvdHRvbTphdXRvO3RvcDo1MCU7bGVmdDoxMDAlO3RyYW5zZm9ybTp0cmFuc2xhdGUoMC41cmVtLCAtNTAlKX1bZGF0YS10b29sdGlwXS50b29sdGlwLWFjdGl2ZTphZnRlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6IzIxOTZmM31bZGF0YS10b29sdGlwXS50b29sdGlwLXN1Y2Nlc3M6YWZ0ZXJ7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiM0Y2FmNTB9W2RhdGEtdG9vbHRpcF0udG9vbHRpcC1pbmZvOmFmdGVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojMDBiY2Q0fVtkYXRhLXRvb2x0aXBdLnRvb2x0aXAtd2FybmluZzphZnRlcntjb2xvcjojZmZmO2JhY2tncm91bmQtY29sb3I6I2ZmOTgwMH1bZGF0YS10b29sdGlwXS50b29sdGlwLWVycm9yOmFmdGVye2NvbG9yOiNmZmY7YmFja2dyb3VuZC1jb2xvcjojZjQ0MzM2fS5pe3Bvc2l0aW9uOnJlbGF0aXZlO3RvcDouMDYyNWVtO3dpZHRoOi43NXJlbTtoZWlnaHQ6Ljc1cmVtO2ZpbGw6bm9uZTtmb250LXNpemU6aW5oZXJpdDtzdHJva2U6Y3VycmVudENvbG9yO3N0cm9rZS13aWR0aDo0cHg7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kfS5pLW1lZGl1bSAuaSwuaS5pLW1lZGl1bXt3aWR0aDoxLjVyZW07aGVpZ2h0OjEuNXJlbTtzdHJva2Utd2lkdGg6MnB4fS5pLWxhcmdlIC5pLC5pLmktbGFyZ2V7d2lkdGg6MnJlbTtoZWlnaHQ6MnJlbTtzdHJva2Utd2lkdGg6MnB4fWRldGFpbHN7bWFyZ2luLWJvdHRvbToxcmVtfXN1bW1hcnl7b3V0bGluZTpub25lfXN1bW1hcnk6aG92ZXJ7Y3Vyc29yOnBvaW50ZXJ9ZGV0YWlsczpub3QoLmNhcmQpe3BhZGRpbmctbGVmdDoxcmVtfWRldGFpbHM6bm90KC5jYXJkKSBzdW1tYXJ5e21hcmdpbi1ib3R0b206MXJlbTttYXJnaW4tbGVmdDotMXJlbX1kZXRhaWxzOm5vdCguY2FyZCkgc3VtbWFyeTpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjU7Ym94LXNoYWRvdzotMC41cmVtIC0wLjFyZW0gMCAwLjVyZW0gI2Y1ZjVmNX1kZXRhaWxzLmNhcmQgc3VtbWFyeTo6LXdlYmtpdC1kZXRhaWxzLW1hcmtlcntkaXNwbGF5Om5vbmV9ZGV0YWlscy5jYXJkIHN1bW1hcnk6OmJlZm9yZXtjb250ZW50OifilrYnO2Zsb2F0OmxlZnQ7cGFkZGluZy1yaWdodDouNzVyZW07Y29sb3I6IzllOWU5ZX1kZXRhaWxzLmNhcmRbb3Blbl0gc3VtbWFyeTo6YmVmb3Jle2NvbnRlbnQ6J+KWvCd9LmRyb3B6b25le2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjtoZWlnaHQ6OXJlbTtwYWRkaW5nOjFyZW07Ym9yZGVyOjJweCBkYXNoZWQgI2UwZTBlMDt0ZXh0LWFsaWduOmNlbnRlcjtjb2xvcjojYmRiZGJkO2N1cnNvcjpwb2ludGVyfS5kcm9wem9uZS5hY3RpdmUsLmRyb3B6b25lLnJlamVjdGVke2NvbG9yOiM5ZTllOWV9LmRyb3B6b25lLmFjdGl2ZXtiYWNrZ3JvdW5kLWNvbG9yOiNmYWZhZmF9LmRyb3B6b25lLnJlamVjdGVke2JhY2tncm91bmQtY29sb3I6I2ZmZWJlZX1jb2Rle3BhZGRpbmc6LjI1ZW0gLjI1ZW0gLjEyNWVtO2JvcmRlci1yYWRpdXM6MnB4O2JhY2tncm91bmQtY29sb3I6I2Y1ZjVmNX1zYW1we2Rpc3BsYXk6aW5saW5lLWJsb2NrO21hcmdpbi10b3A6LTNweDtwYWRkaW5nOjFweCAuMjVlbSAwO2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYX1wcmV7cGFkZGluZzpjYWxjKC43NXJlbSAtIDFweCkgMXJlbX1zYW1wLHByZXtib3JkZXI6MXB4IHNvbGlkICNlMGUwZTA7Ym9yZGVyLXJhZGl1czoycHg7d2hpdGUtc3BhY2U6cHJlLXdyYXA7d29yZC13cmFwOmJyZWFrLXdvcmQ7d29yZC1icmVhazpicmVhay1hbGw7cGFnZS1icmVhay1pbnNpZGU6YXZvaWR9c2FtcC5zY3JvbGwscHJlLnNjcm9sbHtvdmVyZmxvdzphdXRvO3doaXRlLXNwYWNlOnByZX1wcmUgY29kZXtwYWRkaW5nOjA7Y29sb3I6aW5oZXJpdDtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWEsLmxpc3QtZ3JvdXAgYnV0dG9uOm5vdCguYnRuKXtjdXJzb3I6cG9pbnRlcjtjb2xvcjojMjE5NmYzO3RleHQtZGVjb3JhdGlvbjpub25lfWE6aG92ZXIsLmxpc3QtZ3JvdXAgYnV0dG9uOmhvdmVyOm5vdCguYnRuKXtjb2xvcjojMTk3NmQyO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmV9aW1ne21heC13aWR0aDoxMDAlfWltZy5mdWxsLXdpZHRoe2Rpc3BsYXk6YmxvY2t9ZmlndXJle21hcmdpbjowfWZpZ3VyZSBpbWd7d2lkdGg6MTAwJX1maWdjYXB0aW9ue3RleHQtYWxpZ246Y2VudGVyO2NvbG9yOiM5ZTllOWV9YmxvY2txdW90ZXtvdmVyZmxvdzpoaWRkZW47cGFkZGluZy1sZWZ0OjFyZW07Ym9yZGVyLWxlZnQ6MC4yNXJlbSBzb2xpZCAjZTBlMGUwfWJsb2NrcXVvdGU+KjpsYXN0LWNoaWxke21hcmdpbi1ib3R0b206MH1jaXRle2Zsb2F0OnJpZ2h0O2NvbG9yOiM5ZTllOWV9Y2l0ZTpiZWZvcmV7Y29udGVudDpcIuKAkyBcIn1tYXJre2JveC1kZWNvcmF0aW9uLWJyZWFrOmNsb25lO2JhY2tncm91bmQtY29sb3I6I2ZmZjU5ZDtib3gtc2hhZG93OjAgLTFweCAwIDNweCAjZmZmNTlkfW1hcmsgbWFya3tiYWNrZ3JvdW5kLWNvbG9yOiNmZGQ4MzU7Ym94LXNoYWRvdzowIC0xcHggMCAzcHggI2ZkZDgzNX1tYXJrIHNhbXAsbWFyayBrYmQsbWFyayBjb2Rle2JhY2tncm91bmQtY29sb3I6I2ZmZmRlN31hYmJyW3RpdGxlXXt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItYm90dG9tOjJweCBkYXNoZWQgI2UwZTBlMH1rYmR7ZGlzcGxheTppbmxpbmUtYmxvY2s7cGFkZGluZzouMWVtIC40ZW0gMDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Y29sb3I6IzQyNDI0Mjtib3JkZXI6c29saWQgMXB4ICNlZWU7Ym9yZGVyLWJvdHRvbS1jb2xvcjojZTBlMGUwO2JvcmRlci1yYWRpdXM6M3B4O2JhY2tncm91bmQtY29sb3I6I2ZhZmFmYTtib3gtc2hhZG93Omluc2V0IDAgLTFweCAwICNlMGUwZTA7Zm9udC1zaXplOi45ZW19LmZvb3Rub3Rlc3twYWRkaW5nLXRvcDozcmVtO21hcmdpbi10b3A6MS41cmVtfS5uYXJyb3d7cGFkZGluZzowICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0uaW5uZXJ7cGFkZGluZzouNXJlbSAuNzVyZW0gLjI1cmVtICAgICAgICAgICAgICFpbXBvcnRhbnR9LmlubmVyLXdpZGV7cGFkZGluZzoxcmVtIDFyZW0gLjc1cmVtICAgICAgICAgICAhaW1wb3J0YW50fS5wLXQtMHtwYWRkaW5nLXRvcDowICAgICAgICAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0ucC10LTF7cGFkZGluZy10b3A6MS41cmVtICAgICAgICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9LnAtdC0ye3BhZGRpbmctdG9wOjMuMHJlbSAgICAgICAgICAgICAgICAgICAgICAhaW1wb3J0YW50fS5wLXQtM3twYWRkaW5nLXRvcDo0LjVyZW0gICAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0ucC1iLTB7cGFkZGluZy1ib3R0b206MCAgICAgICAgICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9LnAtYi0xe3BhZGRpbmctYm90dG9tOjEuNXJlbSAgICAgICAgICAgICAgICAgICAhaW1wb3J0YW50fS5wLWItMntwYWRkaW5nLWJvdHRvbTozLjByZW0gICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0ucC1iLTN7cGFkZGluZy1ib3R0b206NC41cmVtICAgICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9Lm0tdC0we21hcmdpbi10b3A6MCAgICAgICAgICAgICAgICAgICAgICAgICAgICAhaW1wb3J0YW50fS5tLXQtMXttYXJnaW4tdG9wOjEuNXJlbSAgICAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0ubS10LTJ7bWFyZ2luLXRvcDozLjByZW0gICAgICAgICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9Lm0tdC0ze21hcmdpbi10b3A6NC41cmVtICAgICAgICAgICAgICAgICAgICAgICAhaW1wb3J0YW50fS5tLWItMHttYXJnaW4tYm90dG9tOjAgICAgICAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0ubS1iLTF7bWFyZ2luLWJvdHRvbToxLjVyZW0gICAgICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9Lm0tYi0ye21hcmdpbi1ib3R0b206My4wcmVtICAgICAgICAgICAgICAgICAgICAhaW1wb3J0YW50fS5tLWItM3ttYXJnaW4tYm90dG9tOjQuNXJlbSAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0ucHVsbC1sZWZ0e2Zsb2F0OmxlZnQgICAgICAgICAgICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9LnB1bGwtcmlnaHR7ZmxvYXQ6cmlnaHQgICAgICAgICAgICAgICAgICAgICAgICAhaW1wb3J0YW50fS5mdWxsLXdpZHRoe3dpZHRoOjEwMCUgICAgICAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0uYmxvY2t7ZGlzcGxheTpibG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9LmludmlzaWJsZXt2aXNpYmlsaXR5OmhpZGRlbiAgICAgICAgICAgICAgICAgICAhaW1wb3J0YW50fS5oaWRkZW57ZGlzcGxheTpub25lICAgICAgICAgICAgICAgICAgICAgICAgICAgIWltcG9ydGFudH0uaGlkZS10ZXh0e2ZvbnQ6MC8wIGE7Y29sb3I6dHJhbnNwYXJlbnQ7dGV4dC1zaGFkb3c6bm9uZTtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50O2JvcmRlcjowfUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDQ4cmVtKXsuaGlkZGVuLWlmLWxhcmdle2Rpc3BsYXk6bm9uZSAgICAgICAgICAgICAgICAhaW1wb3J0YW50fX1AbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA0OHJlbSl7LmhpZGRlbi1pZi1tZWRpdW17ZGlzcGxheTpub25lICAgICAgICAgICAgICAgIWltcG9ydGFudH19QG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogMzByZW0pey5oaWRkZW4taWYtc21hbGx7ZGlzcGxheTpub25lICAgICAgICAgICAgICAgICFpbXBvcnRhbnR9fS5sZWFke21hcmdpbi1ib3R0b206MS41cmVtO2ZvbnQtc2l6ZToxLjI1ZW07bGluZS1oZWlnaHQ6MS4yZW19LnRydW5jYXRle292ZXJmbG93OmhpZGRlbjt3aGl0ZS1zcGFjZTpub3dyYXA7dGV4dC1vdmVyZmxvdzplbGxpcHNpc30udGV4dC1sZWZ0e3RleHQtYWxpZ246bGVmdH0udGV4dC1jZW50ZXJ7dGV4dC1hbGlnbjpjZW50ZXJ9LnRleHQtcmlnaHR7dGV4dC1hbGlnbjpyaWdodH0udGV4dC1ib2xke2ZvbnQtd2VpZ2h0OmJvbGR9LnRleHQtaXRhbGlje2ZvbnQtc3R5bGU6aXRhbGljfS5iZy1tdXRlZHtiYWNrZ3JvdW5kLWNvbG9yOiNmNWY1ZjUgIWltcG9ydGFudH0uYmctYWN0aXZle2JhY2tncm91bmQtY29sb3I6I2JiZGVmYiAhaW1wb3J0YW50fS5iZy1zdWNjZXNze2JhY2tncm91bmQtY29sb3I6I2M4ZTZjOSAhaW1wb3J0YW50fS5iZy1pbmZve2JhY2tncm91bmQtY29sb3I6I2IyZWJmMiAhaW1wb3J0YW50fS5iZy13YXJuaW5ne2JhY2tncm91bmQtY29sb3I6I2ZmZTBiMiAhaW1wb3J0YW50fS5iZy1lcnJvcntiYWNrZ3JvdW5kLWNvbG9yOiNmZmNkZDIgIWltcG9ydGFudH0udGV4dC1tdXRlZHtjb2xvcjojOWU5ZTllfS50ZXh0LXByaW1hcnl7Y29sb3I6IzIxOTZmM30udGV4dC1zdWNjZXNze2NvbG9yOiM0Y2FmNTB9LnRleHQtaW5mb3tjb2xvcjojMDBiY2Q0fS50ZXh0LXdhcm5pbmd7Y29sb3I6I2ZmOTgwMH0udGV4dC1lcnJvcntjb2xvcjojZjQ0MzM2fS5oaWdobGlnaHQgLmhsbHtiYWNrZ3JvdW5kLWNvbG9yOiNmZmN9LmhpZ2hsaWdodCAuY3tjb2xvcjojOTk5fS5oaWdobGlnaHQgLmVycntjb2xvcjojYTAwO2JhY2tncm91bmQtY29sb3I6I2ZhYX0uaGlnaGxpZ2h0IC5re2NvbG9yOiMwNjl9LmhpZ2hsaWdodCAub3tjb2xvcjojNTU1fS5oaWdobGlnaHQgLmNte2NvbG9yOiMwOWY7Zm9udC1zdHlsZTppdGFsaWN9LmhpZ2hsaWdodCAuY3B7Y29sb3I6IzA5OX0uaGlnaGxpZ2h0IC5jMXtjb2xvcjojOTk5fS5oaWdobGlnaHQgLmNze2NvbG9yOiM5OTl9LmhpZ2hsaWdodCAuZ2R7YmFja2dyb3VuZC1jb2xvcjojZmNjO2JvcmRlcjoxcHggc29saWQgI2MwMH0uaGlnaGxpZ2h0IC5nZXtmb250LXN0eWxlOml0YWxpY30uaGlnaGxpZ2h0IC5ncntjb2xvcjpyZWR9LmhpZ2hsaWdodCAuZ2h7Y29sb3I6IzAzMH0uaGlnaGxpZ2h0IC5naXtiYWNrZ3JvdW5kLWNvbG9yOiNjZmM7Ym9yZGVyOjFweCBzb2xpZCAjMGMwfS5oaWdobGlnaHQgLmdve2NvbG9yOiNhYWF9LmhpZ2hsaWdodCAuZ3B7Y29sb3I6IzAwOX0uaGlnaGxpZ2h0IC5ndXtjb2xvcjojMDMwfS5oaWdobGlnaHQgLmd0e2NvbG9yOiM5YzZ9LmhpZ2hsaWdodCAua2N7Y29sb3I6IzA2OX0uaGlnaGxpZ2h0IC5rZHtjb2xvcjojMDY5fS5oaWdobGlnaHQgLmtue2NvbG9yOiMwNjl9LmhpZ2hsaWdodCAua3B7Y29sb3I6IzA2OX0uaGlnaGxpZ2h0IC5rcntjb2xvcjojMDY5fS5oaWdobGlnaHQgLmt0e2NvbG9yOiMwNzh9LmhpZ2hsaWdodCAubXtjb2xvcjojZjYwfS5oaWdobGlnaHQgLnN7Y29sb3I6I2Q0NDk1MH0uaGlnaGxpZ2h0IC5uYXtjb2xvcjojNGY5ZmNmfS5oaWdobGlnaHQgLm5ie2NvbG9yOiMzNjZ9LmhpZ2hsaWdodCAubmN7Y29sb3I6IzBhOH0uaGlnaGxpZ2h0IC5ub3tjb2xvcjojMzYwfS5oaWdobGlnaHQgLm5ke2NvbG9yOiM5OWZ9LmhpZ2hsaWdodCAubml7Y29sb3I6Izk5OX0uaGlnaGxpZ2h0IC5uZXtjb2xvcjojYzAwfS5oaWdobGlnaHQgLm5me2NvbG9yOiNjMGZ9LmhpZ2hsaWdodCAubmx7Y29sb3I6Izk5Zn0uaGlnaGxpZ2h0IC5ubntjb2xvcjojMGNmfS5oaWdobGlnaHQgLm50e2NvbG9yOiMyZjZmOWZ9LmhpZ2hsaWdodCAubnZ7Y29sb3I6IzAzM30uaGlnaGxpZ2h0IC5vd3tjb2xvcjojMDAwfS5oaWdobGlnaHQgLnd7Y29sb3I6I2JiYn0uaGlnaGxpZ2h0IC5tZntjb2xvcjojZjYwfS5oaWdobGlnaHQgLm1oe2NvbG9yOiNmNjB9LmhpZ2hsaWdodCAubWl7Y29sb3I6I2Y2MH0uaGlnaGxpZ2h0IC5tb3tjb2xvcjojZjYwfS5oaWdobGlnaHQgLnNie2NvbG9yOiNjMzB9LmhpZ2hsaWdodCAuc2N7Y29sb3I6I2MzMH0uaGlnaGxpZ2h0IC5zZHtjb2xvcjojYzMwO2ZvbnQtc3R5bGU6aXRhbGljfS5oaWdobGlnaHQgLnMye2NvbG9yOiNjMzB9LmhpZ2hsaWdodCAuc2V7Y29sb3I6I2MzMH0uaGlnaGxpZ2h0IC5zaHtjb2xvcjojYzMwfS5oaWdobGlnaHQgLnNpe2NvbG9yOiNhMDB9LmhpZ2hsaWdodCAuc3h7Y29sb3I6I2MzMH0uaGlnaGxpZ2h0IC5zcntjb2xvcjojM2FhfS5oaWdobGlnaHQgLnMxe2NvbG9yOiNjMzB9LmhpZ2hsaWdodCAuc3N7Y29sb3I6I2ZjM30uaGlnaGxpZ2h0IC5icHtjb2xvcjojMzY2fS5oaWdobGlnaHQgLnZje2NvbG9yOiMwMzN9LmhpZ2hsaWdodCAudmd7Y29sb3I6IzAzM30uaGlnaGxpZ2h0IC52aXtjb2xvcjojMDMzfS5oaWdobGlnaHQgLmlse2NvbG9yOiNmNjB9QG1lZGlhIHByaW50e2h0bWwsYnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtmb250LXNpemU6MTRweDtsaW5lLWhlaWdodDoxLjE1O3RleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LWZvbnQtc21vb3RoaW5nOmFudGlhbGlhc2VkOy1tb3otb3N4LWZvbnQtc21vb3RoaW5nOmdyYXlzY2FsZTt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZUxlZ2liaWxpdHl9aDE6YmVmb3JlLGgyOmJlZm9yZSxoMzpiZWZvcmUsaDQ6YmVmb3JlLGg1OmJlZm9yZSxoNjpiZWZvcmV7ZGlzcGxheTpub25lfSosKjpiZWZvcmUsKjphZnRlciwqOmZpcnN0LWxldHRlcixwOmZpcnN0LWxpbmUsZGl2OmZpcnN0LWxpbmUsYmxvY2txdW90ZTpmaXJzdC1saW5lLGxpOmZpcnN0LWxpbmV7YmFja2dyb3VuZDp0cmFuc3BhcmVudCAhaW1wb3J0YW50O2NvbG9yOiMwMDAgIWltcG9ydGFudDtib3gtc2hhZG93Om5vbmUgIWltcG9ydGFudDt0ZXh0LXNoYWRvdzpub25lICFpbXBvcnRhbnR9YVtocmVmXTphZnRlciwubGlzdC1ncm91cCBidXR0b25baHJlZl06bm90KC5idG4pOmFmdGVye2NvbnRlbnQ6XCIgKFwiIGF0dHIoaHJlZikgXCIpXCJ9YWJiclt0aXRsZV06YWZ0ZXJ7Y29udGVudDpcIiAoXCIgYXR0cih0aXRsZSkgXCIpXCJ9LmJ0bntib3JkZXI6MXB4IHNvbGlkICMwMDB9Lm5vLXByaW50e2Rpc3BsYXk6bm9uZSAhaW1wb3J0YW50fX1cbiJdfQ== */ --------------------------------------------------------------------------------