From 9172e608a05b5e5cc0ae453e116b748938a0000f Mon Sep 17 00:00:00 2001
From: Florian Bogner <f.bogner@pcsg.de>
Date: Mon, 15 May 2017 11:50:13 +0200
Subject: [PATCH] feat: Added storepageurl to the table, added more plugins
 from the store

---
 bin/backend/controls/UploadWindow.js          |   10 +-
 bin/backend/controls/settings/Plugins.js      |  112 +-
 locale.xml                                    |   12 +
 .../Text2Speech/icons/icona-audio.png         |  Bin 0 -> 335 bytes
 plugins/ckeditor4/Text2Speech/plugin.js       |   69 +
 .../ckeditor4/autocorrect/dialogs/options.js  |  273 ++
 .../autocorrect/icons/autocorrect--.png       |  Bin 0 -> 382 bytes
 .../autocorrect/icons/autocorrect.png         |  Bin 0 -> 420 bytes
 .../autocorrect/icons/hidpi/autocorrect-.png  |  Bin 0 -> 595 bytes
 .../autocorrect/icons/hidpi/autocorrect.png   |  Bin 0 -> 618 bytes
 plugins/ckeditor4/autocorrect/lang/en.js      |   23 +
 plugins/ckeditor4/autocorrect/lang/ru.js      |   22 +
 plugins/ckeditor4/autocorrect/plugin.js       | 1002 ++++++
 plugins/ckeditor4/base64image/LICENSE.md      | 1244 +++++++
 plugins/ckeditor4/base64image/README.md       |   21 +
 .../base64image/dialogs/base64image.js        |  503 +++
 .../base64image/icons/base64image.png         |  Bin 0 -> 3175 bytes
 .../base64image/icons/hidpi/base64image.png   |  Bin 0 -> 4112 bytes
 plugins/ckeditor4/base64image/lang/af.js      |   12 +
 plugins/ckeditor4/base64image/lang/ar.js      |   12 +
 plugins/ckeditor4/base64image/lang/bg.js      |   12 +
 plugins/ckeditor4/base64image/lang/bn.js      |   12 +
 plugins/ckeditor4/base64image/lang/bs.js      |   12 +
 plugins/ckeditor4/base64image/lang/ca.js      |   12 +
 plugins/ckeditor4/base64image/lang/cs.js      |   12 +
 plugins/ckeditor4/base64image/lang/cy.js      |   12 +
 plugins/ckeditor4/base64image/lang/da.js      |   12 +
 plugins/ckeditor4/base64image/lang/de.js      |   12 +
 plugins/ckeditor4/base64image/lang/el.js      |   12 +
 plugins/ckeditor4/base64image/lang/en-au.js   |   12 +
 plugins/ckeditor4/base64image/lang/en-ca.js   |   12 +
 plugins/ckeditor4/base64image/lang/en-gb.js   |   12 +
 plugins/ckeditor4/base64image/lang/en.js      |   12 +
 plugins/ckeditor4/base64image/lang/eo.js      |   12 +
 plugins/ckeditor4/base64image/lang/es.js      |   12 +
 plugins/ckeditor4/base64image/lang/et.js      |   12 +
 plugins/ckeditor4/base64image/lang/eu.js      |   12 +
 plugins/ckeditor4/base64image/lang/fa.js      |   12 +
 plugins/ckeditor4/base64image/lang/fi.js      |   12 +
 plugins/ckeditor4/base64image/lang/fo.js      |   12 +
 plugins/ckeditor4/base64image/lang/fr-ca.js   |   12 +
 plugins/ckeditor4/base64image/lang/fr.js      |   12 +
 plugins/ckeditor4/base64image/lang/gl.js      |   12 +
 plugins/ckeditor4/base64image/lang/gu.js      |   12 +
 plugins/ckeditor4/base64image/lang/he.js      |   12 +
 plugins/ckeditor4/base64image/lang/hi.js      |   12 +
 plugins/ckeditor4/base64image/lang/hr.js      |   12 +
 plugins/ckeditor4/base64image/lang/hu.js      |   12 +
 plugins/ckeditor4/base64image/lang/id.js      |   12 +
 plugins/ckeditor4/base64image/lang/is.js      |   12 +
 plugins/ckeditor4/base64image/lang/it.js      |   12 +
 plugins/ckeditor4/base64image/lang/ja.js      |   12 +
 plugins/ckeditor4/base64image/lang/ka.js      |   12 +
 plugins/ckeditor4/base64image/lang/km.js      |   12 +
 plugins/ckeditor4/base64image/lang/ko.js      |   12 +
 plugins/ckeditor4/base64image/lang/ku.js      |   12 +
 plugins/ckeditor4/base64image/lang/lt.js      |   12 +
 plugins/ckeditor4/base64image/lang/lv.js      |   12 +
 plugins/ckeditor4/base64image/lang/mk.js      |   12 +
 plugins/ckeditor4/base64image/lang/mn.js      |   12 +
 plugins/ckeditor4/base64image/lang/ms.js      |   12 +
 plugins/ckeditor4/base64image/lang/nb.js      |   12 +
 plugins/ckeditor4/base64image/lang/nl.js      |   12 +
 plugins/ckeditor4/base64image/lang/no.js      |   12 +
 plugins/ckeditor4/base64image/lang/pl.js      |   12 +
 plugins/ckeditor4/base64image/lang/pt-br.js   |   12 +
 plugins/ckeditor4/base64image/lang/pt.js      |   12 +
 plugins/ckeditor4/base64image/lang/ro.js      |   12 +
 plugins/ckeditor4/base64image/lang/ru.js      |   12 +
 plugins/ckeditor4/base64image/lang/si.js      |   12 +
 plugins/ckeditor4/base64image/lang/sk.js      |   12 +
 plugins/ckeditor4/base64image/lang/sl.js      |   12 +
 plugins/ckeditor4/base64image/lang/sq.js      |   12 +
 plugins/ckeditor4/base64image/lang/sr-latn.js |   12 +
 plugins/ckeditor4/base64image/lang/sr.js      |   12 +
 plugins/ckeditor4/base64image/lang/sv.js      |   12 +
 plugins/ckeditor4/base64image/lang/th.js      |   12 +
 plugins/ckeditor4/base64image/lang/tr.js      |   12 +
 plugins/ckeditor4/base64image/lang/ug.js      |   12 +
 plugins/ckeditor4/base64image/lang/uk.js      |   12 +
 plugins/ckeditor4/base64image/lang/vi.js      |   12 +
 plugins/ckeditor4/base64image/lang/zh-cn.js   |   12 +
 plugins/ckeditor4/base64image/lang/zh.js      |   12 +
 plugins/ckeditor4/base64image/plugin.js       |   57 +
 .../ckeditor4/ckawesome/dialogs/ckawesome.css |    5 +
 .../ckeditor4/ckawesome/dialogs/ckawesome.js  |  149 +
 .../ckeditor4/ckawesome/icons/ckawesome.png   |  Bin 0 -> 1523 bytes
 plugins/ckeditor4/ckawesome/plugin.js         |   33 +
 .../resources/select2/select2.full.min.css    |    1 +
 .../resources/select2/select2.full.min.js     |    3 +
 .../.gitattributes                            |    5 +
 .../ckeditortablecellsselection/.gitignore    |    1 +
 .../ckeditortablecellsselection/LICENSE       |   21 +
 .../ckeditortablecellsselection/README.md     |   20 +
 .../ckeditortablecellsselection.gif           |  Bin 0 -> 508340 bytes
 .../js/tablecellsselection.js                 |  601 ++++
 .../ckeditortablecellsselection/plugin.js     |  456 +++
 .../styles/tablecellsselection.css            |   28 +
 .../ckwebspeech/dialogs/ckwebspeech.js        |    1 +
 .../ckeditor4/ckwebspeech/icons/speech.gif    |  Bin 0 -> 418 bytes
 .../ckwebspeech/icons/webspeech-enable.gif    |  Bin 0 -> 1764 bytes
 .../ckwebspeech/icons/webspeech-settings.png  |  Bin 0 -> 406 bytes
 .../ckeditor4/ckwebspeech/icons/webspeech.png |  Bin 0 -> 451 bytes
 plugins/ckeditor4/ckwebspeech/plugin.js       |    1 +
 plugins/ckeditor4/codeTag                     |    1 +
 plugins/ckeditor4/crossreference/LICENSE.md   | 1242 +++++++
 plugins/ckeditor4/crossreference/README.md    |  271 ++
 .../dialogs/crossreference-anchor.js          |  119 +
 .../dialogs/crossreference-link.js            |  241 ++
 .../icons/crossreference-anchor.png           |  Bin 0 -> 458 bytes
 .../icons/crossreference-link.png             |  Bin 0 -> 603 bytes
 .../icons/crossreference-update.png           |  Bin 0 -> 652 bytes
 .../crossreference/icons/crossreference.png   |  Bin 0 -> 469 bytes
 .../icons/hidpi/crossreference-anchor.png     |  Bin 0 -> 913 bytes
 .../icons/hidpi/crossreference-link.png       |  Bin 0 -> 1392 bytes
 .../icons/hidpi/crossreference-update.png     |  Bin 0 -> 1463 bytes
 .../icons/hidpi/crossreference.png            |  Bin 0 -> 898 bytes
 plugins/ckeditor4/crossreference/lang/en.js   |   21 +
 plugins/ckeditor4/crossreference/lang/ru.js   |   21 +
 plugins/ckeditor4/crossreference/plugin.js    |  449 +++
 plugins/ckeditor4/cssanim/css/cssanim.css     | 2938 +++++++++++++++++
 .../ckeditor4/cssanim/css/prefixfree.min.js   |   18 +
 .../cssanim/dialogs/css3animation.png         |  Bin 0 -> 6029 bytes
 .../ckeditor4/cssanim/dialogs/cssaddanim.js   |  472 +++
 .../cssanim/dialogs/cssaddanim.min.js         |    1 +
 plugins/ckeditor4/cssanim/dialogs/cssanim.js  |  528 +++
 .../ckeditor4/cssanim/dialogs/cssanim.min.js  |    1 +
 plugins/ckeditor4/cssanim/icons/cssanim.png   |  Bin 0 -> 1776 bytes
 plugins/ckeditor4/cssanim/images/add.png      |  Bin 0 -> 8388 bytes
 plugins/ckeditor4/cssanim/images/del.png      |  Bin 0 -> 12056 bytes
 plugins/ckeditor4/cssanim/images/edit.png     |  Bin 0 -> 4046 bytes
 .../ckeditor4/cssanim/images/highlight.png    |  Bin 0 -> 18537 bytes
 plugins/ckeditor4/cssanim/images/lamp.png     |  Bin 0 -> 7547 bytes
 plugins/ckeditor4/cssanim/lang/en.js          |   62 +
 plugins/ckeditor4/cssanim/lang/fr.js          |   62 +
 .../cssanim/parseCSS3AnimationShorthand.js    |   61 +
 .../parseCSS3AnimationShorthand.min.js        |    1 +
 plugins/ckeditor4/cssanim/plugin.js           | 1049 ++++++
 .../ckeditor4/enhancedcolorbutton/CHANGES.md  |   24 +
 .../ckeditor4/enhancedcolorbutton/LICENSE.md  | 1643 +++++++++
 .../ckeditor4/enhancedcolorbutton/README.md   |   37 +
 .../enhancedcolorbutton/css/content.css       |   34 +
 .../enhancedcolorbutton/icons/bgcolor.png     |  Bin 0 -> 906 bytes
 .../enhancedcolorbutton/icons/bgcolor2.png    |  Bin 0 -> 906 bytes
 .../icons/hidpi/bgcolor.png                   |  Bin 0 -> 2169 bytes
 .../icons/hidpi/bgcolor2.png                  |  Bin 0 -> 2169 bytes
 .../icons/hidpi/textcolor.png                 |  Bin 0 -> 1725 bytes
 .../icons/hidpi/textcolor2.png                |  Bin 0 -> 1725 bytes
 .../enhancedcolorbutton/icons/textcolor.png   |  Bin 0 -> 813 bytes
 .../enhancedcolorbutton/icons/textcolor2.png  |  Bin 0 -> 813 bytes
 .../ckeditor4/enhancedcolorbutton/lang/af.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ar.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/bg.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/bn.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/bs.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ca.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/cs.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/cy.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/da.js  |   53 +
 .../enhancedcolorbutton/lang/de-ch.js         |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/de.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/el.js  |   53 +
 .../enhancedcolorbutton/lang/en-au.js         |   53 +
 .../enhancedcolorbutton/lang/en-ca.js         |   53 +
 .../enhancedcolorbutton/lang/en-gb.js         |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/en.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/eo.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/es.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/et.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/eu.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/fa.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/fi.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/fo.js  |   53 +
 .../enhancedcolorbutton/lang/fr-ca.js         |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/fr.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/gl.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/gu.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/he.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/hi.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/hr.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/hu.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/id.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/is.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/it.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ja.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ka.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/km.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ko.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ku.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/lt.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/lv.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/mk.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/mn.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ms.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/nb.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/nl.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/no.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/pl.js  |   53 +
 .../enhancedcolorbutton/lang/pt-br.js         |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/pt.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ro.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ru.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/si.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/sk.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/sl.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/sq.js  |   53 +
 .../enhancedcolorbutton/lang/sr-latn.js       |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/sr.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/sv.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/th.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/tr.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/tt.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/ug.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/uk.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/vi.js  |   53 +
 .../enhancedcolorbutton/lang/zh-cn.js         |   53 +
 .../ckeditor4/enhancedcolorbutton/lang/zh.js  |   53 +
 .../ckeditor4/enhancedcolorbutton/plugin.js   |  408 +++
 .../tests/enhancedcolorbutton.html            |    1 +
 .../tests/enhancedcolorbutton.js              |  174 +
 .../tests/manual/enableautomatic.html         |   16 +
 .../tests/manual/enableautomatic.md           |   17 +
 plugins/ckeditor4/eqneditor/_notes/dwsync.xml |    1 +
 .../eqneditor/dialogs/_notes/dwsync.xml       |    1 +
 .../ckeditor4/eqneditor/dialogs/eqneditor.js  |   87 +
 .../eqneditor/dialogs/lang/_notes/dwsync.xml  |    1 +
 .../ckeditor4/eqneditor/dialogs/lang/en.js    |    8 +
 .../eqneditor/icons/_notes/dwsync.xml         |    1 +
 .../ckeditor4/eqneditor/icons/eqneditor.png   |  Bin 0 -> 1093 bytes
 .../eqneditor/lang/_notes/dwsync.xml          |    1 +
 plugins/ckeditor4/eqneditor/lang/en.js        |    8 +
 plugins/ckeditor4/eqneditor/plugin.js         |  102 +
 plugins/ckeditor4/fixed/plugin.js             |   47 +
 plugins/ckeditor4/floating-tools/README.md    |   20 +
 plugins/ckeditor4/floating-tools/plugin.js    |  582 ++++
 .../ckeditor4/footnotes/dialogs/footnotes.js  |  175 +
 .../ckeditor4/footnotes/icons/footnotes.png   |  Bin 0 -> 402 bytes
 plugins/ckeditor4/footnotes/plugin.js         |  317 ++
 plugins/ckeditor4/googlethisterm/LICENSE      |   21 +
 plugins/ckeditor4/googlethisterm/README.md    |    2 +
 plugins/ckeditor4/googlethisterm/plugin.js    |   41 +
 .../html5audio/dialogs/html5audio.js          |  117 +
 .../ckeditor4/html5audio/icons/html5audio.png |  Bin 0 -> 560 bytes
 plugins/ckeditor4/html5audio/lang/de.js       |   13 +
 plugins/ckeditor4/html5audio/lang/en.js       |   13 +
 plugins/ckeditor4/html5audio/lang/es.js       |   13 +
 plugins/ckeditor4/html5audio/lang/eu.js       |   13 +
 plugins/ckeditor4/html5audio/lang/fr.js       |   13 +
 plugins/ckeditor4/html5audio/lang/ru.js       |   13 +
 plugins/ckeditor4/html5audio/lang/uk.js       |   13 +
 plugins/ckeditor4/html5audio/lang/uz.js       |   13 +
 plugins/ckeditor4/html5audio/plugin.js        |  112 +
 .../html5video/dialogs/html5video.js          |  161 +
 .../ckeditor4/html5video/icons/html5video.png |  Bin 0 -> 14773 bytes
 plugins/ckeditor4/html5video/lang/de.js       |   14 +
 plugins/ckeditor4/html5video/lang/en.js       |   15 +
 plugins/ckeditor4/html5video/lang/es.js       |   14 +
 plugins/ckeditor4/html5video/lang/eu.js       |   14 +
 plugins/ckeditor4/html5video/lang/fr.js       |   14 +
 plugins/ckeditor4/html5video/lang/ru.js       |   15 +
 plugins/ckeditor4/html5video/lang/uk.js       |   14 +
 plugins/ckeditor4/html5video/lang/uz.js       |   14 +
 plugins/ckeditor4/html5video/plugin.js        |  139 +
 plugins/ckeditor4/inserthtml4x                |    1 +
 plugins/ckeditor4/lineheight/LICENSE          |   22 +
 plugins/ckeditor4/lineheight/README.md        |    2 +
 plugins/ckeditor4/lineheight/lang/LANG.js     |    3 +
 plugins/ckeditor4/lineheight/lang/ar.js       |    3 +
 plugins/ckeditor4/lineheight/lang/de.js       |    3 +
 plugins/ckeditor4/lineheight/lang/en.js       |    3 +
 plugins/ckeditor4/lineheight/lang/es.js       |    3 +
 plugins/ckeditor4/lineheight/lang/fr.js       |    3 +
 plugins/ckeditor4/lineheight/lang/ko.js       |    3 +
 plugins/ckeditor4/lineheight/lang/pt.js       |    3 +
 plugins/ckeditor4/lineheight/plugin.js        |   81 +
 plugins/ckeditor4/lineheight/readme.txt       |   30 +
 .../loremipsum/icons/hidpi/loremipsum.png     |  Bin 0 -> 401 bytes
 .../ckeditor4/loremipsum/icons/loremipsum.png |  Bin 0 -> 293 bytes
 plugins/ckeditor4/loremipsum/lang/en.js       |    8 +
 plugins/ckeditor4/loremipsum/lang/fr.js       |    8 +
 plugins/ckeditor4/loremipsum/plugin.js        |  131 +
 plugins/ckeditor4/markdown/.gitattributes     |   22 +
 plugins/ckeditor4/markdown/.gitignore         |  215 ++
 plugins/ckeditor4/markdown/README.md          |   60 +
 .../ckeditor4/markdown/css/codemirror.min.css |    1 +
 .../markdown/icons/hidpi/markdown.png         |  Bin 0 -> 3022 bytes
 plugins/ckeditor4/markdown/icons/markdown.png |  Bin 0 -> 3026 bytes
 .../markdown/js/codemirror-gfm-min.js         |   25 +
 plugins/ckeditor4/markdown/js/marked.js       | 1272 +++++++
 plugins/ckeditor4/markdown/js/to-markdown.js  |  530 +++
 plugins/ckeditor4/markdown/plugin.js          |  194 ++
 plugins/ckeditor4/markdown/theme/3024-day.css |   38 +
 .../ckeditor4/markdown/theme/3024-night.css   |   37 +
 .../markdown/theme/ambiance-mobile.css        |    5 +
 plugins/ckeditor4/markdown/theme/ambiance.css |   77 +
 .../ckeditor4/markdown/theme/base16-dark.css  |   36 +
 .../ckeditor4/markdown/theme/base16-light.css |   36 +
 .../ckeditor4/markdown/theme/blackboard.css   |   30 +
 plugins/ckeditor4/markdown/theme/cobalt.css   |   23 +
 plugins/ckeditor4/markdown/theme/eclipse.css  |   23 +
 plugins/ckeditor4/markdown/theme/elegant.css  |   13 +
 .../ckeditor4/markdown/theme/erlang-dark.css  |   32 +
 .../ckeditor4/markdown/theme/lesser-dark.css  |   45 +
 plugins/ckeditor4/markdown/theme/mbo.css      |   35 +
 plugins/ckeditor4/markdown/theme/mdn-like.css |   44 +
 plugins/ckeditor4/markdown/theme/midnight.css |   45 +
 plugins/ckeditor4/markdown/theme/monokai.css  |   31 +
 plugins/ckeditor4/markdown/theme/neat.css     |   12 +
 plugins/ckeditor4/markdown/theme/neo.css      |   43 +
 plugins/ckeditor4/markdown/theme/night.css    |   26 +
 .../ckeditor4/markdown/theme/paraiso-dark.css |   36 +
 .../markdown/theme/paraiso-light.css          |   36 +
 .../markdown/theme/pastel-on-dark.css         |   50 +
 plugins/ckeditor4/markdown/theme/rubyblue.css |   23 +
 .../ckeditor4/markdown/theme/solarized.css    |  170 +
 .../ckeditor4/markdown/theme/the-matrix.css   |   28 +
 .../theme/tomorrow-night-eighties.css         |   36 +
 plugins/ckeditor4/markdown/theme/twilight.css |   30 +
 .../ckeditor4/markdown/theme/vibrant-ink.css  |   32 +
 plugins/ckeditor4/markdown/theme/xq-dark.css  |   51 +
 plugins/ckeditor4/markdown/theme/xq-light.css |   43 +
 .../page2images/icons/page2images.png         |  Bin 0 -> 7326 bytes
 plugins/ckeditor4/page2images/plugin.js       |   94 +
 plugins/ckeditor4/pastebase64/plugin.js       |   70 +
 plugins/ckeditor4/pbckcode/CHANGELOG.md       |   44 +
 plugins/ckeditor4/pbckcode/LICENSE            |  201 ++
 plugins/ckeditor4/pbckcode/README.md          |  179 +
 .../pbckcode/dialogs/PBSyntaxHighlighter.js   |  102 +
 .../ckeditor4/pbckcode/dialogs/pbckcode.js    |  205 ++
 plugins/ckeditor4/pbckcode/dialogs/style.css  |   38 +
 plugins/ckeditor4/pbckcode/icons/.DS_Store    |  Bin 0 -> 6148 bytes
 .../pbckcode/icons/hidpi/pbckcode.png         |  Bin 0 -> 2269 bytes
 plugins/ckeditor4/pbckcode/icons/pbckcode.png |  Bin 0 -> 1632 bytes
 plugins/ckeditor4/pbckcode/lang/en.js         |   13 +
 plugins/ckeditor4/pbckcode/lang/fr.js         |   13 +
 plugins/ckeditor4/pbckcode/lang/ru.js         |   13 +
 plugins/ckeditor4/pbckcode/lang/tr.js         |   13 +
 plugins/ckeditor4/pbckcode/plugin.js          |  109 +
 plugins/ckeditor4/pre/dialogs/pre.js          |  142 +
 plugins/ckeditor4/pre/icons/pre.png           |  Bin 0 -> 1020 bytes
 plugins/ckeditor4/pre/lang/en.js              |   19 +
 plugins/ckeditor4/pre/lang/ru.js              |   18 +
 plugins/ckeditor4/pre/plugin.js               |  202 ++
 plugins/ckeditor4/prism/LICENSE.txt           |  502 +++
 plugins/ckeditor4/prism/README.md             |   38 +
 .../prism/lib/prism/prism_patched.min.css     |    1 +
 .../prism/lib/prism/prism_patched.min.js      |    4 +
 plugins/ckeditor4/prism/plugin.js             |  130 +
 .../icons/hidpi/selectall.png                 |  Bin 0 -> 1093 bytes
 .../selectallcontextmenu/icons/selectall.png  |  Bin 0 -> 665 bytes
 .../ckeditor4/selectallcontextmenu/lang/af.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ar.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/bg.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/bn.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/bs.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ca.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/cs.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/cy.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/da.js |    7 +
 .../selectallcontextmenu/lang/de-ch.js        |    7 +
 .../ckeditor4/selectallcontextmenu/lang/de.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/el.js |    7 +
 .../selectallcontextmenu/lang/en-au.js        |    7 +
 .../selectallcontextmenu/lang/en-ca.js        |    7 +
 .../selectallcontextmenu/lang/en-gb.js        |    7 +
 .../ckeditor4/selectallcontextmenu/lang/en.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/eo.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/es.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/et.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/eu.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/fa.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/fi.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/fo.js |    7 +
 .../selectallcontextmenu/lang/fr-ca.js        |    7 +
 .../ckeditor4/selectallcontextmenu/lang/fr.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/gl.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/gu.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/he.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/hi.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/hr.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/hu.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/id.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/is.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/it.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ja.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ka.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/km.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ko.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ku.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/lt.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/lv.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/mk.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/mn.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ms.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/nb.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/nl.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/no.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/pl.js |    7 +
 .../selectallcontextmenu/lang/pt-br.js        |    7 +
 .../ckeditor4/selectallcontextmenu/lang/pt.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ro.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ru.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/si.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/sk.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/sl.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/sq.js |    7 +
 .../selectallcontextmenu/lang/sr-latn.js      |    7 +
 .../ckeditor4/selectallcontextmenu/lang/sr.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/sv.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/th.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/tr.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/tt.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/ug.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/uk.js |    7 +
 .../ckeditor4/selectallcontextmenu/lang/vi.js |    7 +
 .../selectallcontextmenu/lang/zh-cn.js        |    7 +
 .../ckeditor4/selectallcontextmenu/lang/zh.js |    7 +
 .../ckeditor4/selectallcontextmenu/plugin.js  |   76 +
 plugins/ckeditor4/smallerselection/plugin.js  |   80 +
 plugins/ckeditor4/symbol/dialogs/lang/en.js   |  181 +
 plugins/ckeditor4/symbol/dialogs/symbol.js    |   18 +
 plugins/ckeditor4/symbol/icons/symbol.png     |  Bin 0 -> 212 bytes
 plugins/ckeditor4/symbol/lang/en.js           |    1 +
 plugins/ckeditor4/symbol/plugin.js            |   15 +
 plugins/ckeditor4/textselection/plugin.js     |  423 +++
 .../textselection/samples/textselection.html  |  125 +
 plugins/ckeditor4/texttransform/LICENSE.md    |   28 +
 plugins/ckeditor4/texttransform/README.md     |   55 +
 .../images/transformCapitalize.png            |  Bin 0 -> 1410 bytes
 .../images/transformSwitcher.png              |  Bin 0 -> 1542 bytes
 .../texttransform/images/transformToLower.png |  Bin 0 -> 1152 bytes
 .../texttransform/images/transformToUpper.png |  Bin 0 -> 1211 bytes
 plugins/ckeditor4/texttransform/lang/en.js    |   17 +
 plugins/ckeditor4/texttransform/lang/tr.js    |   41 +
 plugins/ckeditor4/texttransform/plugin.js     |  151 +
 plugins/ckeditor4/token/LICENSE               |  340 ++
 plugins/ckeditor4/token/ReadMe.md             |  103 +
 plugins/ckeditor4/token/dialogs/token.js      |   46 +
 plugins/ckeditor4/token/icons/hidpi/token.png |  Bin 0 -> 14976 bytes
 plugins/ckeditor4/token/icons/token.png       |  Bin 0 -> 14658 bytes
 plugins/ckeditor4/token/lang/en.js            |    6 +
 plugins/ckeditor4/token/lang/ru.js            |    6 +
 plugins/ckeditor4/token/plugin.js             |  115 +
 plugins/ckeditor4/tweetabletext/README.md     |   58 +
 .../tweetabletext/css/tweetabletext.css       |    7 +
 .../tweetabletext/dialogs/tweetabletext.js    |   92 +
 .../tweetabletext/icons/tweetabletext.png     |  Bin 0 -> 1509 bytes
 plugins/ckeditor4/tweetabletext/plugin.js     |   78 +
 .../videodetector/dialogs/videoDialog.js      |  143 +
 .../videodetector/icons/icon_black.png        |  Bin 0 -> 656 bytes
 .../videodetector/icons/icon_white.png        |  Bin 0 -> 983 bytes
 .../videodetector/icons/videodetector.svg     |   14 +
 plugins/ckeditor4/videodetector/plugin.js     |   31 +
 .../ckeditor4/videodetector/videodetector.css |   48 +
 plugins/ckeditor4/wordcount/README.md         |   92 +
 plugins/ckeditor4/wordcount/css/wordcount.css |    3 +
 plugins/ckeditor4/wordcount/lang/ar.js        |   11 +
 plugins/ckeditor4/wordcount/lang/ca.js        |   13 +
 plugins/ckeditor4/wordcount/lang/da.js        |   13 +
 plugins/ckeditor4/wordcount/lang/de.js        |   13 +
 plugins/ckeditor4/wordcount/lang/el.js        |   13 +
 plugins/ckeditor4/wordcount/lang/en.js        |   13 +
 plugins/ckeditor4/wordcount/lang/es.js        |   13 +
 plugins/ckeditor4/wordcount/lang/eu.js        |   13 +
 plugins/ckeditor4/wordcount/lang/fa.js        |   12 +
 plugins/ckeditor4/wordcount/lang/fi.js        |   14 +
 plugins/ckeditor4/wordcount/lang/fr.js        |   11 +
 plugins/ckeditor4/wordcount/lang/he.js        |   13 +
 plugins/ckeditor4/wordcount/lang/hr.js        |   13 +
 plugins/ckeditor4/wordcount/lang/hu.js        |   13 +
 plugins/ckeditor4/wordcount/lang/it.js        |   14 +
 plugins/ckeditor4/wordcount/lang/ja.js        |   13 +
 plugins/ckeditor4/wordcount/lang/nl.js        |   13 +
 plugins/ckeditor4/wordcount/lang/no.js        |   10 +
 plugins/ckeditor4/wordcount/lang/pl.js        |   13 +
 plugins/ckeditor4/wordcount/lang/pt-br.js     |   13 +
 plugins/ckeditor4/wordcount/lang/pt.js        |    9 +
 plugins/ckeditor4/wordcount/lang/ru.js        |   13 +
 plugins/ckeditor4/wordcount/lang/sk.js        |   14 +
 plugins/ckeditor4/wordcount/lang/sv.js        |   13 +
 plugins/ckeditor4/wordcount/lang/tr.js        |   13 +
 plugins/ckeditor4/wordcount/lang/zh-cn.js     |   13 +
 plugins/ckeditor4/wordcount/plugin.js         |  430 +++
 .../wordcount/samples/wordcount.html          |   61 +
 .../samples/wordcountWithMaxCount.html        |  110 +
 plugins/ckeditor4/youtube/LICENSE.md          |   15 +
 plugins/ckeditor4/youtube/images/icon.png     |  Bin 0 -> 419 bytes
 plugins/ckeditor4/youtube/lang/ar.js          |   24 +
 plugins/ckeditor4/youtube/lang/cs.js          |   25 +
 plugins/ckeditor4/youtube/lang/de.js          |   24 +
 plugins/ckeditor4/youtube/lang/el.js          |   23 +
 plugins/ckeditor4/youtube/lang/en.js          |   25 +
 plugins/ckeditor4/youtube/lang/es.js          |   24 +
 plugins/ckeditor4/youtube/lang/et.js          |   24 +
 plugins/ckeditor4/youtube/lang/fi.js          |   24 +
 plugins/ckeditor4/youtube/lang/fr.js          |   24 +
 plugins/ckeditor4/youtube/lang/he.js          |   24 +
 plugins/ckeditor4/youtube/lang/hu.js          |   24 +
 plugins/ckeditor4/youtube/lang/it.js          |   24 +
 plugins/ckeditor4/youtube/lang/ja.js          |   24 +
 plugins/ckeditor4/youtube/lang/ko.js          |   25 +
 plugins/ckeditor4/youtube/lang/nb.js          |   24 +
 plugins/ckeditor4/youtube/lang/nl.js          |   25 +
 plugins/ckeditor4/youtube/lang/nn.js          |   24 +
 plugins/ckeditor4/youtube/lang/pl.js          |   24 +
 plugins/ckeditor4/youtube/lang/pt-br.js       |   25 +
 plugins/ckeditor4/youtube/lang/pt.js          |   25 +
 plugins/ckeditor4/youtube/lang/ru.js          |   24 +
 plugins/ckeditor4/youtube/lang/sk.js          |   24 +
 plugins/ckeditor4/youtube/lang/tr.js          |   24 +
 plugins/ckeditor4/youtube/lang/vi.js          |   24 +
 plugins/ckeditor4/youtube/lang/zh.js          |   24 +
 plugins/ckeditor4/youtube/plugin.js           |  448 +++
 plugins/ckeditor4/zoom/plugin.js              |  109 +
 plugins/dependencies.json                     |   47 +
 515 files changed, 31995 insertions(+), 41 deletions(-)
 create mode 100644 plugins/ckeditor4/Text2Speech/icons/icona-audio.png
 create mode 100644 plugins/ckeditor4/Text2Speech/plugin.js
 create mode 100644 plugins/ckeditor4/autocorrect/dialogs/options.js
 create mode 100644 plugins/ckeditor4/autocorrect/icons/autocorrect--.png
 create mode 100644 plugins/ckeditor4/autocorrect/icons/autocorrect.png
 create mode 100644 plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect-.png
 create mode 100644 plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect.png
 create mode 100644 plugins/ckeditor4/autocorrect/lang/en.js
 create mode 100644 plugins/ckeditor4/autocorrect/lang/ru.js
 create mode 100644 plugins/ckeditor4/autocorrect/plugin.js
 create mode 100644 plugins/ckeditor4/base64image/LICENSE.md
 create mode 100644 plugins/ckeditor4/base64image/README.md
 create mode 100644 plugins/ckeditor4/base64image/dialogs/base64image.js
 create mode 100644 plugins/ckeditor4/base64image/icons/base64image.png
 create mode 100644 plugins/ckeditor4/base64image/icons/hidpi/base64image.png
 create mode 100644 plugins/ckeditor4/base64image/lang/af.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ar.js
 create mode 100644 plugins/ckeditor4/base64image/lang/bg.js
 create mode 100644 plugins/ckeditor4/base64image/lang/bn.js
 create mode 100644 plugins/ckeditor4/base64image/lang/bs.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ca.js
 create mode 100644 plugins/ckeditor4/base64image/lang/cs.js
 create mode 100644 plugins/ckeditor4/base64image/lang/cy.js
 create mode 100644 plugins/ckeditor4/base64image/lang/da.js
 create mode 100644 plugins/ckeditor4/base64image/lang/de.js
 create mode 100644 plugins/ckeditor4/base64image/lang/el.js
 create mode 100644 plugins/ckeditor4/base64image/lang/en-au.js
 create mode 100644 plugins/ckeditor4/base64image/lang/en-ca.js
 create mode 100644 plugins/ckeditor4/base64image/lang/en-gb.js
 create mode 100644 plugins/ckeditor4/base64image/lang/en.js
 create mode 100644 plugins/ckeditor4/base64image/lang/eo.js
 create mode 100644 plugins/ckeditor4/base64image/lang/es.js
 create mode 100644 plugins/ckeditor4/base64image/lang/et.js
 create mode 100644 plugins/ckeditor4/base64image/lang/eu.js
 create mode 100644 plugins/ckeditor4/base64image/lang/fa.js
 create mode 100644 plugins/ckeditor4/base64image/lang/fi.js
 create mode 100644 plugins/ckeditor4/base64image/lang/fo.js
 create mode 100644 plugins/ckeditor4/base64image/lang/fr-ca.js
 create mode 100644 plugins/ckeditor4/base64image/lang/fr.js
 create mode 100644 plugins/ckeditor4/base64image/lang/gl.js
 create mode 100644 plugins/ckeditor4/base64image/lang/gu.js
 create mode 100644 plugins/ckeditor4/base64image/lang/he.js
 create mode 100644 plugins/ckeditor4/base64image/lang/hi.js
 create mode 100644 plugins/ckeditor4/base64image/lang/hr.js
 create mode 100644 plugins/ckeditor4/base64image/lang/hu.js
 create mode 100644 plugins/ckeditor4/base64image/lang/id.js
 create mode 100644 plugins/ckeditor4/base64image/lang/is.js
 create mode 100644 plugins/ckeditor4/base64image/lang/it.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ja.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ka.js
 create mode 100644 plugins/ckeditor4/base64image/lang/km.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ko.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ku.js
 create mode 100644 plugins/ckeditor4/base64image/lang/lt.js
 create mode 100644 plugins/ckeditor4/base64image/lang/lv.js
 create mode 100644 plugins/ckeditor4/base64image/lang/mk.js
 create mode 100644 plugins/ckeditor4/base64image/lang/mn.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ms.js
 create mode 100644 plugins/ckeditor4/base64image/lang/nb.js
 create mode 100644 plugins/ckeditor4/base64image/lang/nl.js
 create mode 100644 plugins/ckeditor4/base64image/lang/no.js
 create mode 100644 plugins/ckeditor4/base64image/lang/pl.js
 create mode 100644 plugins/ckeditor4/base64image/lang/pt-br.js
 create mode 100644 plugins/ckeditor4/base64image/lang/pt.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ro.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ru.js
 create mode 100644 plugins/ckeditor4/base64image/lang/si.js
 create mode 100644 plugins/ckeditor4/base64image/lang/sk.js
 create mode 100644 plugins/ckeditor4/base64image/lang/sl.js
 create mode 100644 plugins/ckeditor4/base64image/lang/sq.js
 create mode 100644 plugins/ckeditor4/base64image/lang/sr-latn.js
 create mode 100644 plugins/ckeditor4/base64image/lang/sr.js
 create mode 100644 plugins/ckeditor4/base64image/lang/sv.js
 create mode 100644 plugins/ckeditor4/base64image/lang/th.js
 create mode 100644 plugins/ckeditor4/base64image/lang/tr.js
 create mode 100644 plugins/ckeditor4/base64image/lang/ug.js
 create mode 100644 plugins/ckeditor4/base64image/lang/uk.js
 create mode 100644 plugins/ckeditor4/base64image/lang/vi.js
 create mode 100644 plugins/ckeditor4/base64image/lang/zh-cn.js
 create mode 100644 plugins/ckeditor4/base64image/lang/zh.js
 create mode 100644 plugins/ckeditor4/base64image/plugin.js
 create mode 100644 plugins/ckeditor4/ckawesome/dialogs/ckawesome.css
 create mode 100644 plugins/ckeditor4/ckawesome/dialogs/ckawesome.js
 create mode 100644 plugins/ckeditor4/ckawesome/icons/ckawesome.png
 create mode 100644 plugins/ckeditor4/ckawesome/plugin.js
 create mode 100644 plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css
 create mode 100644 plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/.gitattributes
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/.gitignore
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/LICENSE
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/README.md
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/ckeditortablecellsselection.gif
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/plugin.js
 create mode 100644 plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css
 create mode 100644 plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js
 create mode 100644 plugins/ckeditor4/ckwebspeech/icons/speech.gif
 create mode 100644 plugins/ckeditor4/ckwebspeech/icons/webspeech-enable.gif
 create mode 100644 plugins/ckeditor4/ckwebspeech/icons/webspeech-settings.png
 create mode 100644 plugins/ckeditor4/ckwebspeech/icons/webspeech.png
 create mode 100644 plugins/ckeditor4/ckwebspeech/plugin.js
 create mode 160000 plugins/ckeditor4/codeTag
 create mode 100644 plugins/ckeditor4/crossreference/LICENSE.md
 create mode 100644 plugins/ckeditor4/crossreference/README.md
 create mode 100644 plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js
 create mode 100644 plugins/ckeditor4/crossreference/dialogs/crossreference-link.js
 create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference-anchor.png
 create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference-link.png
 create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference-update.png
 create mode 100644 plugins/ckeditor4/crossreference/icons/crossreference.png
 create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference-anchor.png
 create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference-link.png
 create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference-update.png
 create mode 100644 plugins/ckeditor4/crossreference/icons/hidpi/crossreference.png
 create mode 100644 plugins/ckeditor4/crossreference/lang/en.js
 create mode 100644 plugins/ckeditor4/crossreference/lang/ru.js
 create mode 100644 plugins/ckeditor4/crossreference/plugin.js
 create mode 100644 plugins/ckeditor4/cssanim/css/cssanim.css
 create mode 100644 plugins/ckeditor4/cssanim/css/prefixfree.min.js
 create mode 100644 plugins/ckeditor4/cssanim/dialogs/css3animation.png
 create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssaddanim.js
 create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js
 create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssanim.js
 create mode 100644 plugins/ckeditor4/cssanim/dialogs/cssanim.min.js
 create mode 100644 plugins/ckeditor4/cssanim/icons/cssanim.png
 create mode 100644 plugins/ckeditor4/cssanim/images/add.png
 create mode 100644 plugins/ckeditor4/cssanim/images/del.png
 create mode 100644 plugins/ckeditor4/cssanim/images/edit.png
 create mode 100644 plugins/ckeditor4/cssanim/images/highlight.png
 create mode 100644 plugins/ckeditor4/cssanim/images/lamp.png
 create mode 100644 plugins/ckeditor4/cssanim/lang/en.js
 create mode 100644 plugins/ckeditor4/cssanim/lang/fr.js
 create mode 100644 plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js
 create mode 100644 plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js
 create mode 100644 plugins/ckeditor4/cssanim/plugin.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/CHANGES.md
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/LICENSE.md
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/README.md
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/css/content.css
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor2.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor2.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor2.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/textcolor.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/icons/textcolor2.png
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/af.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ar.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/bg.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/bn.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/bs.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ca.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/cs.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/cy.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/da.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/de.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/el.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/en.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/eo.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/es.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/et.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/eu.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fa.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fi.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fo.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/fr.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/gl.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/gu.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/he.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/hi.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/hr.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/hu.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/id.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/is.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/it.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ja.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ka.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/km.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ko.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ku.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/lt.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/lv.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/mk.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/mn.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ms.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/nb.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/nl.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/no.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/pl.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/pt.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ro.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ru.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/si.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sk.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sl.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sq.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sr.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/sv.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/th.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/tr.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/tt.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/ug.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/uk.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/vi.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/lang/zh.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/plugin.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html
 create mode 100644 plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md
 create mode 100755 plugins/ckeditor4/eqneditor/_notes/dwsync.xml
 create mode 100755 plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml
 create mode 100755 plugins/ckeditor4/eqneditor/dialogs/eqneditor.js
 create mode 100755 plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml
 create mode 100755 plugins/ckeditor4/eqneditor/dialogs/lang/en.js
 create mode 100755 plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml
 create mode 100755 plugins/ckeditor4/eqneditor/icons/eqneditor.png
 create mode 100755 plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml
 create mode 100755 plugins/ckeditor4/eqneditor/lang/en.js
 create mode 100755 plugins/ckeditor4/eqneditor/plugin.js
 create mode 100644 plugins/ckeditor4/fixed/plugin.js
 create mode 100644 plugins/ckeditor4/floating-tools/README.md
 create mode 100644 plugins/ckeditor4/floating-tools/plugin.js
 create mode 100644 plugins/ckeditor4/footnotes/dialogs/footnotes.js
 create mode 100644 plugins/ckeditor4/footnotes/icons/footnotes.png
 create mode 100644 plugins/ckeditor4/footnotes/plugin.js
 create mode 100644 plugins/ckeditor4/googlethisterm/LICENSE
 create mode 100644 plugins/ckeditor4/googlethisterm/README.md
 create mode 100644 plugins/ckeditor4/googlethisterm/plugin.js
 create mode 100755 plugins/ckeditor4/html5audio/dialogs/html5audio.js
 create mode 100755 plugins/ckeditor4/html5audio/icons/html5audio.png
 create mode 100644 plugins/ckeditor4/html5audio/lang/de.js
 create mode 100755 plugins/ckeditor4/html5audio/lang/en.js
 create mode 100644 plugins/ckeditor4/html5audio/lang/es.js
 create mode 100755 plugins/ckeditor4/html5audio/lang/eu.js
 create mode 100644 plugins/ckeditor4/html5audio/lang/fr.js
 create mode 100644 plugins/ckeditor4/html5audio/lang/ru.js
 create mode 100644 plugins/ckeditor4/html5audio/lang/uk.js
 create mode 100644 plugins/ckeditor4/html5audio/lang/uz.js
 create mode 100755 plugins/ckeditor4/html5audio/plugin.js
 create mode 100644 plugins/ckeditor4/html5video/dialogs/html5video.js
 create mode 100644 plugins/ckeditor4/html5video/icons/html5video.png
 create mode 100644 plugins/ckeditor4/html5video/lang/de.js
 create mode 100644 plugins/ckeditor4/html5video/lang/en.js
 create mode 100644 plugins/ckeditor4/html5video/lang/es.js
 create mode 100644 plugins/ckeditor4/html5video/lang/eu.js
 create mode 100644 plugins/ckeditor4/html5video/lang/fr.js
 create mode 100644 plugins/ckeditor4/html5video/lang/ru.js
 create mode 100644 plugins/ckeditor4/html5video/lang/uk.js
 create mode 100644 plugins/ckeditor4/html5video/lang/uz.js
 create mode 100644 plugins/ckeditor4/html5video/plugin.js
 create mode 160000 plugins/ckeditor4/inserthtml4x
 create mode 100644 plugins/ckeditor4/lineheight/LICENSE
 create mode 100644 plugins/ckeditor4/lineheight/README.md
 create mode 100644 plugins/ckeditor4/lineheight/lang/LANG.js
 create mode 100644 plugins/ckeditor4/lineheight/lang/ar.js
 create mode 100644 plugins/ckeditor4/lineheight/lang/de.js
 create mode 100644 plugins/ckeditor4/lineheight/lang/en.js
 create mode 100644 plugins/ckeditor4/lineheight/lang/es.js
 create mode 100644 plugins/ckeditor4/lineheight/lang/fr.js
 create mode 100644 plugins/ckeditor4/lineheight/lang/ko.js
 create mode 100644 plugins/ckeditor4/lineheight/lang/pt.js
 create mode 100644 plugins/ckeditor4/lineheight/plugin.js
 create mode 100644 plugins/ckeditor4/lineheight/readme.txt
 create mode 100644 plugins/ckeditor4/loremipsum/icons/hidpi/loremipsum.png
 create mode 100644 plugins/ckeditor4/loremipsum/icons/loremipsum.png
 create mode 100644 plugins/ckeditor4/loremipsum/lang/en.js
 create mode 100644 plugins/ckeditor4/loremipsum/lang/fr.js
 create mode 100644 plugins/ckeditor4/loremipsum/plugin.js
 create mode 100755 plugins/ckeditor4/markdown/.gitattributes
 create mode 100755 plugins/ckeditor4/markdown/.gitignore
 create mode 100755 plugins/ckeditor4/markdown/README.md
 create mode 100755 plugins/ckeditor4/markdown/css/codemirror.min.css
 create mode 100755 plugins/ckeditor4/markdown/icons/hidpi/markdown.png
 create mode 100755 plugins/ckeditor4/markdown/icons/markdown.png
 create mode 100755 plugins/ckeditor4/markdown/js/codemirror-gfm-min.js
 create mode 100755 plugins/ckeditor4/markdown/js/marked.js
 create mode 100755 plugins/ckeditor4/markdown/js/to-markdown.js
 create mode 100755 plugins/ckeditor4/markdown/plugin.js
 create mode 100755 plugins/ckeditor4/markdown/theme/3024-day.css
 create mode 100755 plugins/ckeditor4/markdown/theme/3024-night.css
 create mode 100755 plugins/ckeditor4/markdown/theme/ambiance-mobile.css
 create mode 100755 plugins/ckeditor4/markdown/theme/ambiance.css
 create mode 100755 plugins/ckeditor4/markdown/theme/base16-dark.css
 create mode 100755 plugins/ckeditor4/markdown/theme/base16-light.css
 create mode 100755 plugins/ckeditor4/markdown/theme/blackboard.css
 create mode 100755 plugins/ckeditor4/markdown/theme/cobalt.css
 create mode 100755 plugins/ckeditor4/markdown/theme/eclipse.css
 create mode 100755 plugins/ckeditor4/markdown/theme/elegant.css
 create mode 100755 plugins/ckeditor4/markdown/theme/erlang-dark.css
 create mode 100755 plugins/ckeditor4/markdown/theme/lesser-dark.css
 create mode 100755 plugins/ckeditor4/markdown/theme/mbo.css
 create mode 100755 plugins/ckeditor4/markdown/theme/mdn-like.css
 create mode 100755 plugins/ckeditor4/markdown/theme/midnight.css
 create mode 100755 plugins/ckeditor4/markdown/theme/monokai.css
 create mode 100755 plugins/ckeditor4/markdown/theme/neat.css
 create mode 100755 plugins/ckeditor4/markdown/theme/neo.css
 create mode 100755 plugins/ckeditor4/markdown/theme/night.css
 create mode 100755 plugins/ckeditor4/markdown/theme/paraiso-dark.css
 create mode 100755 plugins/ckeditor4/markdown/theme/paraiso-light.css
 create mode 100755 plugins/ckeditor4/markdown/theme/pastel-on-dark.css
 create mode 100755 plugins/ckeditor4/markdown/theme/rubyblue.css
 create mode 100755 plugins/ckeditor4/markdown/theme/solarized.css
 create mode 100755 plugins/ckeditor4/markdown/theme/the-matrix.css
 create mode 100755 plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css
 create mode 100755 plugins/ckeditor4/markdown/theme/twilight.css
 create mode 100755 plugins/ckeditor4/markdown/theme/vibrant-ink.css
 create mode 100755 plugins/ckeditor4/markdown/theme/xq-dark.css
 create mode 100755 plugins/ckeditor4/markdown/theme/xq-light.css
 create mode 100644 plugins/ckeditor4/page2images/icons/page2images.png
 create mode 100644 plugins/ckeditor4/page2images/plugin.js
 create mode 100755 plugins/ckeditor4/pastebase64/plugin.js
 create mode 100644 plugins/ckeditor4/pbckcode/CHANGELOG.md
 create mode 100644 plugins/ckeditor4/pbckcode/LICENSE
 create mode 100755 plugins/ckeditor4/pbckcode/README.md
 create mode 100755 plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js
 create mode 100755 plugins/ckeditor4/pbckcode/dialogs/pbckcode.js
 create mode 100755 plugins/ckeditor4/pbckcode/dialogs/style.css
 create mode 100644 plugins/ckeditor4/pbckcode/icons/.DS_Store
 create mode 100644 plugins/ckeditor4/pbckcode/icons/hidpi/pbckcode.png
 create mode 100644 plugins/ckeditor4/pbckcode/icons/pbckcode.png
 create mode 100755 plugins/ckeditor4/pbckcode/lang/en.js
 create mode 100755 plugins/ckeditor4/pbckcode/lang/fr.js
 create mode 100644 plugins/ckeditor4/pbckcode/lang/ru.js
 create mode 100644 plugins/ckeditor4/pbckcode/lang/tr.js
 create mode 100755 plugins/ckeditor4/pbckcode/plugin.js
 create mode 100644 plugins/ckeditor4/pre/dialogs/pre.js
 create mode 100644 plugins/ckeditor4/pre/icons/pre.png
 create mode 100644 plugins/ckeditor4/pre/lang/en.js
 create mode 100644 plugins/ckeditor4/pre/lang/ru.js
 create mode 100644 plugins/ckeditor4/pre/plugin.js
 create mode 100644 plugins/ckeditor4/prism/LICENSE.txt
 create mode 100644 plugins/ckeditor4/prism/README.md
 create mode 100644 plugins/ckeditor4/prism/lib/prism/prism_patched.min.css
 create mode 100644 plugins/ckeditor4/prism/lib/prism/prism_patched.min.js
 create mode 100644 plugins/ckeditor4/prism/plugin.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/icons/hidpi/selectall.png
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/icons/selectall.png
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/af.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ar.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/bg.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/bn.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/bs.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ca.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/cs.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/cy.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/da.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/de.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/el.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en-au.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/en.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/eo.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/es.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/et.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/eu.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fa.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fi.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fo.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/fr.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/gl.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/gu.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/he.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/hi.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/hr.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/hu.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/id.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/is.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/it.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ja.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ka.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/km.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ko.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ku.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/lt.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/lv.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/mk.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/mn.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ms.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/nb.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/nl.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/no.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/pl.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/pt.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ro.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ru.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/si.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sk.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sl.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sq.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sr.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/sv.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/th.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/tr.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/tt.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/ug.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/uk.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/vi.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/lang/zh.js
 create mode 100644 plugins/ckeditor4/selectallcontextmenu/plugin.js
 create mode 100644 plugins/ckeditor4/smallerselection/plugin.js
 create mode 100644 plugins/ckeditor4/symbol/dialogs/lang/en.js
 create mode 100644 plugins/ckeditor4/symbol/dialogs/symbol.js
 create mode 100644 plugins/ckeditor4/symbol/icons/symbol.png
 create mode 100644 plugins/ckeditor4/symbol/lang/en.js
 create mode 100644 plugins/ckeditor4/symbol/plugin.js
 create mode 100644 plugins/ckeditor4/textselection/plugin.js
 create mode 100644 plugins/ckeditor4/textselection/samples/textselection.html
 create mode 100644 plugins/ckeditor4/texttransform/LICENSE.md
 create mode 100644 plugins/ckeditor4/texttransform/README.md
 create mode 100644 plugins/ckeditor4/texttransform/images/transformCapitalize.png
 create mode 100644 plugins/ckeditor4/texttransform/images/transformSwitcher.png
 create mode 100644 plugins/ckeditor4/texttransform/images/transformToLower.png
 create mode 100644 plugins/ckeditor4/texttransform/images/transformToUpper.png
 create mode 100644 plugins/ckeditor4/texttransform/lang/en.js
 create mode 100644 plugins/ckeditor4/texttransform/lang/tr.js
 create mode 100644 plugins/ckeditor4/texttransform/plugin.js
 create mode 100644 plugins/ckeditor4/token/LICENSE
 create mode 100644 plugins/ckeditor4/token/ReadMe.md
 create mode 100644 plugins/ckeditor4/token/dialogs/token.js
 create mode 100644 plugins/ckeditor4/token/icons/hidpi/token.png
 create mode 100644 plugins/ckeditor4/token/icons/token.png
 create mode 100644 plugins/ckeditor4/token/lang/en.js
 create mode 100644 plugins/ckeditor4/token/lang/ru.js
 create mode 100644 plugins/ckeditor4/token/plugin.js
 create mode 100644 plugins/ckeditor4/tweetabletext/README.md
 create mode 100755 plugins/ckeditor4/tweetabletext/css/tweetabletext.css
 create mode 100755 plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js
 create mode 100755 plugins/ckeditor4/tweetabletext/icons/tweetabletext.png
 create mode 100755 plugins/ckeditor4/tweetabletext/plugin.js
 create mode 100644 plugins/ckeditor4/videodetector/dialogs/videoDialog.js
 create mode 100644 plugins/ckeditor4/videodetector/icons/icon_black.png
 create mode 100644 plugins/ckeditor4/videodetector/icons/icon_white.png
 create mode 100644 plugins/ckeditor4/videodetector/icons/videodetector.svg
 create mode 100644 plugins/ckeditor4/videodetector/plugin.js
 create mode 100644 plugins/ckeditor4/videodetector/videodetector.css
 create mode 100644 plugins/ckeditor4/wordcount/README.md
 create mode 100644 plugins/ckeditor4/wordcount/css/wordcount.css
 create mode 100644 plugins/ckeditor4/wordcount/lang/ar.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/ca.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/da.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/de.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/el.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/en.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/es.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/eu.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/fa.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/fi.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/fr.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/he.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/hr.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/hu.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/it.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/ja.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/nl.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/no.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/pl.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/pt-br.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/pt.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/ru.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/sk.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/sv.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/tr.js
 create mode 100644 plugins/ckeditor4/wordcount/lang/zh-cn.js
 create mode 100644 plugins/ckeditor4/wordcount/plugin.js
 create mode 100644 plugins/ckeditor4/wordcount/samples/wordcount.html
 create mode 100644 plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html
 create mode 100644 plugins/ckeditor4/youtube/LICENSE.md
 create mode 100644 plugins/ckeditor4/youtube/images/icon.png
 create mode 100644 plugins/ckeditor4/youtube/lang/ar.js
 create mode 100644 plugins/ckeditor4/youtube/lang/cs.js
 create mode 100644 plugins/ckeditor4/youtube/lang/de.js
 create mode 100644 plugins/ckeditor4/youtube/lang/el.js
 create mode 100644 plugins/ckeditor4/youtube/lang/en.js
 create mode 100644 plugins/ckeditor4/youtube/lang/es.js
 create mode 100644 plugins/ckeditor4/youtube/lang/et.js
 create mode 100644 plugins/ckeditor4/youtube/lang/fi.js
 create mode 100644 plugins/ckeditor4/youtube/lang/fr.js
 create mode 100644 plugins/ckeditor4/youtube/lang/he.js
 create mode 100644 plugins/ckeditor4/youtube/lang/hu.js
 create mode 100644 plugins/ckeditor4/youtube/lang/it.js
 create mode 100644 plugins/ckeditor4/youtube/lang/ja.js
 create mode 100644 plugins/ckeditor4/youtube/lang/ko.js
 create mode 100644 plugins/ckeditor4/youtube/lang/nb.js
 create mode 100644 plugins/ckeditor4/youtube/lang/nl.js
 create mode 100644 plugins/ckeditor4/youtube/lang/nn.js
 create mode 100644 plugins/ckeditor4/youtube/lang/pl.js
 create mode 100644 plugins/ckeditor4/youtube/lang/pt-br.js
 create mode 100644 plugins/ckeditor4/youtube/lang/pt.js
 create mode 100644 plugins/ckeditor4/youtube/lang/ru.js
 create mode 100644 plugins/ckeditor4/youtube/lang/sk.js
 create mode 100644 plugins/ckeditor4/youtube/lang/tr.js
 create mode 100644 plugins/ckeditor4/youtube/lang/vi.js
 create mode 100644 plugins/ckeditor4/youtube/lang/zh.js
 create mode 100644 plugins/ckeditor4/youtube/plugin.js
 create mode 100644 plugins/ckeditor4/zoom/plugin.js

diff --git a/bin/backend/controls/UploadWindow.js b/bin/backend/controls/UploadWindow.js
index d742e4d..62bb4dc 100644
--- a/bin/backend/controls/UploadWindow.js
+++ b/bin/backend/controls/UploadWindow.js
@@ -64,7 +64,7 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/UploadWindow', [
                     onComplete: self.$onComplete
                 },
                 styles      : {
-                    height: '95%'
+                    height: '80%'
                 }
             });
 
@@ -72,6 +72,14 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/UploadWindow', [
             this.$Upload.setParam('extract', 0);
 
             this.$Upload.inject(Content);
+
+            var description = new Element("div", {
+                "html" : QUILocale.get("quiqqer/ckeditor4", "message.settings.upload.warning.external"),
+                "class": "content-message-attention",
+                "style": "margin-top: 10px;"
+            });
+            description.inject(Content);
+
         },
 
 
diff --git a/bin/backend/controls/settings/Plugins.js b/bin/backend/controls/settings/Plugins.js
index fd6c47f..559a8c9 100644
--- a/bin/backend/controls/settings/Plugins.js
+++ b/bin/backend/controls/settings/Plugins.js
@@ -16,7 +16,10 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [
             '$onImport',
             '$onResize',
             '$onRefresh',
-            '$toggleState'
+            '$toggleState',
+            '$onTblClick',
+            '$onTblDblClick',
+            '$openStorePage'
         ],
 
         options: {},
@@ -54,7 +57,7 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [
 
 
             this.$Grid = new Grid(Container, {
-                buttons    : [{
+                buttons: [{
                     name    : 'state',
                     text    : QUILocale.get(
                         "quiqqer/ckeditor4",
@@ -74,6 +77,7 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [
                         onClick: this.$displayUpload
                     }
                 }],
+
                 height     : "500",
                 columnModel: [
                     {
@@ -93,49 +97,22 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [
                         dataIndex: 'name',
                         dataType : 'string',
                         width    : 400
+                    },
+                    {
+                        header   : QUILocale.get(
+                            "quiqqer/ckeditor4",
+                            "editors.settings.plugins.table.header.url"
+                        ),
+                        dataIndex: 'url',
+                        dataType : 'string',
+                        width    : 400
                     }
                 ]
             });
 
             this.$Grid.addEvents({
-
-                onDblClick: function () {
-                    this.$openStorePage();
-                    // this.$toggleState();
-                }.bind(this),
-
-                onClick: function () {
-
-                    var TableButtons = self.$Grid.getAttribute('buttons');
-
-                    var StateBtn = TableButtons.state;
-
-                    var data = self.$Grid.getSelectedData()[0];
-
-                    if (!data) {
-                        return;
-                    }
-
-
-                    if (data.state === 0) {
-                        StateBtn.setAttribute("text", QUILocale.get(
-                            "quiqqer/ckeditor4",
-                            "editors.settings.plugins.table.button.activate"
-                        ));
-                    }
-
-                    if (data.state === 1) {
-                        StateBtn.setAttribute("text", QUILocale.get(
-                            "quiqqer/ckeditor4",
-                            "editors.settings.plugins.table.button.deactivate"
-                        ));
-                    }
-
-                    if (StateBtn && self.$canToggle) {
-                        StateBtn.enable();
-                    }
-                }
-
+                onDblClick: self.$onTblDblClick,
+                onClick   : self.$onTblClick
             });
 
 
@@ -199,6 +176,8 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [
 
                     for (var i = 0, len = result.length; i < len; i++) {
 
+                        result[i].url = '<a target="_blank" href="' + self.$getStorePageUrl(result[i].name) + '">' + self.$getStorePageUrl(result[i].name) + '</a>';
+
                         if (result[i].state === 0) {
                             result[i].icon = new Element("span", {
                                 'class': 'fa fa-times fa-2x'
@@ -286,6 +265,17 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [
             window.open(url, '_blank');
         },
 
+        /**
+         * Gets the store page url of the given plugin
+         */
+        $getStorePageUrl: function (pluginName) {
+
+            var url = "http://ckeditor.com/addon/";
+
+            url = url + pluginName;
+            return url;
+        },
+
         /**
          * Returns the currently selected name
          *
@@ -356,6 +346,48 @@ define('package/quiqqer/ckeditor4/bin/backend/controls/settings/Plugins', [
                 }).open();
             });
 
+        },
+
+        /**
+         * event: onClick table row
+         */
+        $onTblClick: function () {
+            var self = this;
+
+            var TableButtons = self.$Grid.getAttribute('buttons');
+            var StateBtn     = TableButtons.state;
+            var data         = self.$Grid.getSelectedData()[0];
+
+            if (!data) {
+                return;
+            }
+
+            if (data.state === 0) {
+                StateBtn.setAttribute("text", QUILocale.get(
+                    "quiqqer/ckeditor4",
+                    "editors.settings.plugins.table.button.activate"
+                ));
+            }
+
+            if (data.state === 1) {
+                StateBtn.setAttribute("text", QUILocale.get(
+                    "quiqqer/ckeditor4",
+                    "editors.settings.plugins.table.button.deactivate"
+                ));
+            }
+
+            if (StateBtn && self.$canToggle) {
+                StateBtn.enable();
+            }
+
+        },
+
+        /**
+         * event: onCoubleClick table row
+         */
+        $onTblDblClick: function () {
+            //this.$openStorePage();
+            this.$toggleState();
         }
     });
 });
\ No newline at end of file
diff --git a/locale.xml b/locale.xml
index 807885a..902e9c4 100644
--- a/locale.xml
+++ b/locale.xml
@@ -65,6 +65,10 @@
             <de><![CDATA[Name]]></de>
             <en><![CDATA[Name]]></en>
         </locale>
+        <locale name="editors.settings.plugins.table.header.url">
+            <de><![CDATA[Storeseite]]></de>
+            <en><![CDATA[Storepage]]></en>
+        </locale>
         <locale name="editors.settings.plugins.table.button.activate">
             <de><![CDATA[Aktivieren]]></de>
             <en><![CDATA[Activate]]></en>
@@ -85,6 +89,14 @@
             <de><![CDATA[Plugin erfolgreich deaktiviert]]></de>
             <en><![CDATA[Plugin disabled successfully]]></en>
         </locale>
+        <locale name="message.settings.upload.warning.external">
+            <de>
+                <![CDATA[Achtung: Sie sind dabei Software von externen Quellen zu installieren. Dies kann Ihr System beschädigen.]]>
+            </de>
+            <en>
+                <![CDATA[Attention: You are installing software by third party authors. These can damage your system.]]>
+            </en>
+        </locale>
 
         <!-- Permissions -->
         <locale name="permission.quiqqer.editors.ckeditor._header">
diff --git a/plugins/ckeditor4/Text2Speech/icons/icona-audio.png b/plugins/ckeditor4/Text2Speech/icons/icona-audio.png
new file mode 100644
index 0000000000000000000000000000000000000000..eb713f498f203087bb7183e31638369951d53ab8
GIT binary patch
literal 335
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6;>1s;*b
z3=G`DAk4@xYmNj^@S~@TV~EA+wU=%E4m$|6Jv^?a<leDB*)eaYqo2c3(-)eW8k#<?
z&ax+EWAz#`G%^J}tpwaRh%la&SSw_$Fmt8b`*Y{dZQndISG%B7@l`@^eXF?jnnS#7
zy6Mdpt9MPBZ}4%quTt6S&+(HkD~Uca{A?|z+o*l!@O|$eN<~~Vww~D|?>N7Lr>tu?
zuWwqV#vVS4qtP05Ejm9ecF87-<n$)avk{&1K;e(hL+?3{rP4Xq7u&9tT)6SM0Q){6
zyJNa~1@k}57nBl|FOYBz_nerT^FZ59Nbq%9>FGY{GTX%`G^_M4?O$6|HM!_`x|X?h
ddhPzt=Kt!<h4$JCR02KE;OXk;vd$@?2>`1xda?ij

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/Text2Speech/plugin.js b/plugins/ckeditor4/Text2Speech/plugin.js
new file mode 100644
index 0000000..3564858
--- /dev/null
+++ b/plugins/ckeditor4/Text2Speech/plugin.js
@@ -0,0 +1,69 @@
+/* 
+ Text2Speech 
+ Version 0.1
+
+ This plugin allows read the selected text
+ 
+ Copyright OrionsSoftware.org 2015
+ Written by Umberto Boria.
+*/
+
+CKEDITOR.plugins.add('Text2Speech',
+{
+	//icons: "icona-audio",
+    init: function (editor) {
+    var pluginName = 'Text2Speech';
+    var cmd = editor.addCommand('t2s', { exec: Text2Speech });
+        editor.ui.addButton('t2s_button',
+            {
+                label: 'Leggimi',
+                icon: this.path + 'icons/icona-audio.png',
+                command: 't2s'
+            });
+        
+    }
+});
+
+function Text2Speech(e) {
+	//Verifico cosa c'è nella prima text_1
+	var text2speech='';
+	var url='';
+    my_instance();
+	text2speech = my_instance().document.getBody().getText();
+	url = 'https://translate.google.com/translate_tts?tl=it&q='+text2speech;
+	if (text2speech>'') {winopen('https://translate.google.com/translate_tts?tl=it&q='+text2speech,100,100);text2speech='';}
+	
+}
+
+function winopen (url,l,h) {
+	//Apertura di una finestra per poi toglierle il fuoco
+	sleep (50);
+	winunder = window.open(url,'height=' + h + ',width=' + l + ',menubar=no,location=no,status=no,toolbar=no,top=10,left=10');
+}
+
+function my_instance() {
+	for (var ID in CKEDITOR.instances)
+	{
+		if (CKEDITOR.instances[ID].focusManager.hasFocus) {return CKEDITOR.instances[ID]; }
+	}
+}
+
+//Function for read automatic from selection
+function selected_text(obj) {
+//In test
+	if (document.selection) { // Internet Explorer
+		obj.focus();
+ 		return document.selection.createRange().text;
+ 	} else if (obj.selectionStart || obj.selectionStart == '0') { // Others
+ 		return obj.value.substring(obj.selectionStart, obj.selectionEnd);
+ 	} else {
+ 		return obj.value; // Fallback
+ 	} 
+}
+
+//Function for pause
+function sleep(milliseconds) {
+           var currentTime = new Date().getTime();
+           while (currentTime + milliseconds >= new Date().getTime()) {
+           }
+       }
\ No newline at end of file
diff --git a/plugins/ckeditor4/autocorrect/dialogs/options.js b/plugins/ckeditor4/autocorrect/dialogs/options.js
new file mode 100644
index 0000000..a376bac
--- /dev/null
+++ b/plugins/ckeditor4/autocorrect/dialogs/options.js
@@ -0,0 +1,273 @@
+/**
+ * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+( function() {
+	var plugin = CKEDITOR.plugins.autocorrect;
+
+	function setupOption() {
+		this.setValue(plugin.getOption(this.option));
+	}
+
+	function commitOption() {
+		plugin.setOption(this.option, this.getValue());
+	}
+
+	CKEDITOR.dialog.add( 'autocorrectOptions', function( editor ) {
+		var lang = editor.lang.autocorrect;
+		return {
+				title: lang.autocorrect,
+				resizable: CKEDITOR.DIALOG_RESIZE_NONE,
+				minWidth: 350,
+				minHeight: 170,
+				onOk: function() {
+					this.commitContent();
+				},
+				contents: [
+					{
+					id: 'autocorrect',
+					label: lang.autocorrect,
+					title: lang.autocorrect,
+					accessKey: '',
+					elements: [
+							{
+							type: 'vbox',
+							padding: 0,
+							children: [
+								{
+								type: 'checkbox',
+								id: 'useReplacementTableCheckbox',
+								option: 'useReplacementTable',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.replaceTextAsYouType
+							},
+							{
+								type: 'html',
+								html: '<div style="height: 150px;overflow-y: scroll;border: 1px solid #afafaf"></div>',
+								setup: function() {
+									this.getElement().setHtml('');
+									var option = plugin.getOption('replacementTable');
+									var table = document.createElement('table');
+									table.style.width = '100%';
+									table.style.tableLayout = 'fixed';
+									var tbody = table.appendChild(document.createElement('tbody'));
+									for (var prop in option) {
+										var row = document.createElement('tr');
+										var cell1 = document.createElement('td');
+										cell1.appendChild(document.createTextNode(prop));
+										cell1.style.borderBottom = '1px solid #afafaf';
+										cell1.style.padding = '0 5px';
+										var cell2 = document.createElement('td');
+										row.appendChild(cell1);
+										cell2.appendChild(document.createTextNode(option[prop]));
+										cell2.style.borderBottom = '1px solid #afafaf';
+										cell2.style.padding = '0 5px';
+										row.appendChild(cell2);
+										tbody.appendChild(row);
+									}
+									this.getElement().append(new CKEDITOR.dom.element(table));
+								}
+							}]
+						}
+					]
+				},
+					{
+					id: 'autoformatAsYouType',
+					label: lang.autoformatAsYouType,
+					title: lang.autoformatAsYouType,
+					accessKey: '',
+					elements: [
+						{
+						type: 'fieldset',
+						label: CKEDITOR.tools.htmlEncode( lang.replaceAsYouType ),
+						children: [
+							{
+							type: 'vbox',
+							padding: 0,
+							children: [
+								{
+								type: 'checkbox',
+								id: 'smartQuotesCheckbox',
+								option: 'smartQuotesAsYouType',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.smartQuotesOption
+							},
+								{
+								type: 'checkbox',
+								id: 'formatOrdinalsCheckbox',
+								option: 'formatOrdinalsAsYouType',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.formatOrdinalsOption
+							},
+								{
+								type: 'checkbox',
+								id: 'replaceHyphensCheckbox',
+								option: 'replaceHyphensAsYouType',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.replaceHyphensOption
+							},
+								{
+								type: 'checkbox',
+								id: 'recognizeUrlsCheckbox',
+								option: 'recognizeUrlsAsYouType',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.recognizeUrlsOption
+							}
+							]
+						}
+						]
+					},
+						{
+						type: 'fieldset',
+						label: CKEDITOR.tools.htmlEncode( lang.applyAsYouType ),
+						children: [
+							{
+							type: 'vbox',
+							padding: 0,
+							children: [
+								{
+								type: 'checkbox',
+								id: 'formatBulletedListsCheckbox',
+								option: 'formatBulletedListsAsYouType',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.formatBulletedListsOption
+							},
+								{
+								type: 'checkbox',
+								id: 'formatNumberedListsCheckbox',
+								option: 'formatNumberedListsAsYouType',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.formatNumberedListsOption
+							},
+								{
+								type: 'checkbox',
+								id: 'createHorizontalRulesCheckbox',
+								option: 'createHorizontalRulesAsYouType',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.createHorizontalRulesOption
+							}
+							]
+						}
+						]
+					}
+					]
+				},
+					{
+					id: 'replace',
+					label: lang.autoformat,
+					accessKey: '',
+					elements: [
+						{
+						type: 'fieldset',
+						label: CKEDITOR.tools.htmlEncode( lang.replace ),
+						children: [
+							{
+							type: 'vbox',
+							padding: 0,
+							children: [
+								{
+								type: 'checkbox',
+								id: 'smartQuotesCheckbox',
+								option: 'smartQuotes',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.smartQuotesOption
+							},
+								{
+								type: 'checkbox',
+								id: 'formatOrdinalsCheckbox',
+								option: 'formatOrdinals',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.formatOrdinalsOption
+							},
+								{
+								type: 'checkbox',
+								id: 'replaceHyphensCheckbox',
+								option: 'replaceHyphens',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.replaceHyphensOption
+							},
+								{
+								type: 'checkbox',
+								id: 'recognizeUrlsCheckbox',
+								option: 'recognizeUrls',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.recognizeUrlsOption
+							}
+							]
+						}
+						]
+					},
+						{
+						type: 'fieldset',
+						label: CKEDITOR.tools.htmlEncode( lang.apply ),
+						children: [
+							{
+							type: 'vbox',
+							padding: 0,
+							children: [
+								{
+								type: 'checkbox',
+								id: 'formatBulletedListsCheckbox',
+								option: 'formatBulletedLists',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.formatBulletedListsOption
+							},
+								{
+								type: 'checkbox',
+								id: 'formatNumberedListsCheckbox',
+								option: 'formatNumberedLists',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.formatNumberedListsOption
+							},
+								{
+								type: 'checkbox',
+								id: 'createHorizontalRulesCheckbox',
+								option: 'createHorizontalRules',
+								setup: setupOption,
+								commit: commitOption,
+								isChanged: false,
+								label: lang.createHorizontalRulesOption
+							}
+							]
+						}
+						]
+					}
+					]
+				}
+				],
+				onShow: function() {
+					this.setupContent();
+				}
+		};
+	} );
+
+} )();
diff --git a/plugins/ckeditor4/autocorrect/icons/autocorrect--.png b/plugins/ckeditor4/autocorrect/icons/autocorrect--.png
new file mode 100644
index 0000000000000000000000000000000000000000..2a5313b3853fa42180a84d6ccbe8f5c4433c5309
GIT binary patch
literal 382
zcmV-^0fGLBP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000ie
z000ie0hKEb8vp<RAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd
zMgRZ-1W80eRCwB?lQFVHKoEw1JE~*?Vh0e23B(cv0wt77RJnkVLrAy)*N_rOWKN){
z5-4S}dDPpt?Awldx@W%ryQ_!U_Z{CD3jmJed`v0JlA(ZO;Eo*&KK>*7Sd4u|rAd~B
z=Xn^%5p`YDxG0K9lH{j_EBR3rQ8*z4rfK4K3wfUJ^E}hDqA1XHow*HYnuhv<ARq{W
zliJ5s^=X=@bjz}S-FXXW+m`y<wxK8r#BqEYHgmO!!!Yb=nqpm7@H~$&3?WI<{TWnM
zg>_xQaU5LNJw3h!==&ao5EzC5RaKdfW{_pszAOtgO@nRQFL&iFpzAuwvJBt%|6DZY
c+wc4w0Mi&<zs~V}&;S4c07*qoM6N<$g5MUI-T(jq

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/autocorrect/icons/autocorrect.png b/plugins/ckeditor4/autocorrect/icons/autocorrect.png
new file mode 100644
index 0000000000000000000000000000000000000000..75513f60d30782b2d93e7f9f1c8dcbb64994c91e
GIT binary patch
literal 420
zcmV;V0bBlwP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00009a7bBm000id
z000id0mpBsWB>pFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd
zMgRZ-DoI2^RCwByk+EvSFcd`}ye*5t!d^W4ClVn{A(Nm(#zLV(r_is-V#p7K(5;K7
zPTjkd4qg&6^aBbd;Gvu@Rq8lSnmo855clZ5D**%$5%H=@kcd2nyHna7j4^dE$8pSN
zvw5=CuAFl?=djk^90iETxc&Naxdcdn6@YUN@BMZ(8r}8+j4^M)Jef=YD9e(vECIwh
z2k_~=-wubvyFGx2Tm`c+hTjqXM#36Fdw?WKUfc0imFaW}AoKaW3p)e=&rQ>iWf`hU
zQ54-2dpq|5WH1=qt15Y(vtF-REEc;C+Byn|<M<<rBI>&4pE(4G$hE3cRn=F!{j(FK
zY5G2!&Ax$gx3IGk058CUwYCA|;sibIUYwx!dyeTO;9T_rxNLU5p8){5imsEK*VoAa
O0000<MNUMnLSTaX)~<;F

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect-.png b/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect-.png
new file mode 100644
index 0000000000000000000000000000000000000000..efa1aa555dfde3fc8cb3f87ff09b0b6879a1237f
GIT binary patch
literal 595
zcmV-Z0<8UsP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F800009a7bBm000id
z000id0mpBsWB>pFAY({UO#lFTB>(_`g8%^e{{R4h=>PzAFaQARU;qF*m;eA5Z<1fd
zMgRZ-*-1n}RCwC#m$9poQ5ePz?!6Eg5e@Mz4PP`0W*px04yH{G;*f)ZgK$TsQI}6>
zY71OloE@BMwLicJU2?EFp&?9fVA3V~el6E9u_5Ao7Tg2RaHi*X;63mAyfGklNX0Gz
zwlBqEktp=<1GqZ>6@Zh1ixeOTg6qv@^TxL3^Es>4idwC9?5qfZSR#?|MC6;Qva3?5
zgfS-W6hK6t?lZU6o>wZB3~>CrM)cRm^SmQf{jd+9*Xsei1LDpAMC8#v^G2gV7=~Yg
zdrn)iwf5Dnd7)5Xu~+~+aXJf<$>d!T33mZTqY=Oh;EGcK5ozt3cRC$_DR9&2H1vJ{
zs;ZuCn^&t<*6Z~ec;I{-i^%Ej>$BM`>2!J}BJ&HioB^ona9{OrBq9Uf_fK5b!0F~I
zj>qF)%=7vD_t|WA2DDrPyx9N*LGaT&lgTidOaKPJiStO7N~LaFYu6X8mwvy$`31Kk
z$%Mw3=bP8J+iid^!2L)<sWB$5s-IPrdc95<h9U4cvQ#W0bycNYF0))N0iHz`%RSFK
zvev%O<#OS4It6&Suk|_uFvgTrbv+yo0p0@FB3(?ZwXeI~?kC_QaOV)4Q3*H)9v*5n
h8vxbI<@8VWV*n`xS^d0!GDiRa002ovPDHLkV1nzf2l4;_

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect.png b/plugins/ckeditor4/autocorrect/icons/hidpi/autocorrect.png
new file mode 100644
index 0000000000000000000000000000000000000000..e4097d9ce7bf6edd28780ac5df89c6ce4d3c7ad6
GIT binary patch
literal 618
zcmV-w0+s!VP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU!3`s;mRCwC#mc2^@F&M_vk3}k?gQ!p(
z1pfdLK^G?nDYT&2Nf!k{3xXCW2N4IyE|%^E72LFif`TXx>gM3$pi?UjLdB1Qpfx_P
z<Vw8e(t2&Jh!6a@UN5;k$@Av!82hRY@CvwsOVG$F5a+xIvz9Fee*rzLLa7Y6rR(&2
z+M@3wIQRSgTsJ^IpPxvjQk!-Sj#$ioC!5W-!R-y#h|C3p!AGCZH*PnAeZ}Bu(29n8
zyoAU=I-S;<&>83k@20`uz#tke@iIgPNW#Q}%7n^*Q(T(`4paM8;c)dkIeNWb7Kucf
zJRVO>7l$Dlv;o|J7U};ZFhq4_nn8aw8a;73odvU@Q0Vg*2n1LnktnpyWHKxq4nO8{
zxsXwqs%=M_RAm1QvJw$=_JZ3|5y&#fVYLls6{b7_(pfwnrx*@EyKXsY6%=Z6xm+7K
zZi&eiMIfsmoJ!{z&<CgMu~=+Ob$26zQpS?Wq{Au#S=&+!InawvE4)G(4=~*>Aa#OK
zqu#(28gz-rbIl|_isz*BH4J`*<1v=rVfW_c#AArwa`$59yHp!g#Joz<MPST$1~h{U
zFo6#5?1$tQ(DL7j7t)j501>cSM&K5ONBesiTvw8#9nmgW0Q2CG)j_lZ1G)x35kb|q
zlHCaEs*)@4AHjbFe?EfWTLTu~cU4ze-)Vn3f)4=(0KMdBFJd%cHUIzs07*qoM6N<$
Eg5&E62LJ#7

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/autocorrect/lang/en.js b/plugins/ckeditor4/autocorrect/lang/en.js
new file mode 100644
index 0000000..394de11
--- /dev/null
+++ b/plugins/ckeditor4/autocorrect/lang/en.js
@@ -0,0 +1,23 @@
+CKEDITOR.plugins.setLang( 'autocorrect', 'en', {
+	toolbar: 'AutoCorrect',
+	autocorrect: 'AutoCorrect',
+	disable: 'Disable AutoCorrect',
+	enable: 'Enable AutoCorrect',
+	autocorrectNow: 'AutoCorrect Now',
+	options: 'AutoCorrect Options',
+	autoformat: 'AutoFormat',
+	autoformatAsYouType: 'AutoFormat As You Type',
+	replaceTextAsYouType: 'Replace text as you type',
+	replaceAsYouType: 'Replace as you type',
+	applyAsYouType: 'Apply as you type',
+	apply: 'Apply',
+	replace: 'Replace',
+	smartQuotesOption: '"Straight quotes" with “smart quotes”',
+	formatOrdinalsOption: 'Ordinals (1st) with superscript',
+	replaceHyphensOption: 'Hyphens (--) with dash(—)',
+	recognizeUrlsOption: 'Internet and network paths with hyperlinks',
+	formatBulletedListsOption: 'Automatic bulleted lists',
+	formatNumberedListsOption: 'Automatic numbered lists',
+	createHorizontalRulesOption: 'Horizontal rules',
+	replaceFractionsOption: 'Fractions (1/2) with fraction character (½)'
+});
diff --git a/plugins/ckeditor4/autocorrect/lang/ru.js b/plugins/ckeditor4/autocorrect/lang/ru.js
new file mode 100644
index 0000000..175b461
--- /dev/null
+++ b/plugins/ckeditor4/autocorrect/lang/ru.js
@@ -0,0 +1,22 @@
+CKEDITOR.plugins.setLang( 'autocorrect', 'ru', {
+	toolbar: 'Автозамена',
+	autocorrect: 'Автозамена',
+	disable: 'Отключить автозамену',
+	enable: 'Включить автозамену',
+	autocorrectNow: 'Произвести автозамену',
+	options: 'Параметры автозамены',
+	autoformat: 'Автоформат',
+	autoformatAsYouType: 'Автоформат при вводе',
+	replaceTextAsYouType: 'Заменять текст при вводе',
+	replaceAsYouType: 'Заменять при вводе',
+	applyAsYouType: 'Применять при вводе',
+	apply: 'Применять',
+	replace: 'Заменять',
+	smartQuotesOption: '"Прямые" кавычки «парными»',
+	formatOrdinalsOption: 'Английские порядковые (1st) надстрочными знаками',
+	replaceHyphensOption: 'Дефисы (--) на тире (—)',
+	recognizeUrlsOption: 'Адреса Интернета и сетевые пути гиперссылками',
+	formatBulletedListsOption: 'Стили маркированных списков',
+	formatNumberedListsOption: 'Стили нумерованных списков',
+	createHorizontalRulesOption: 'Горизонтальные линии'
+});
diff --git a/plugins/ckeditor4/autocorrect/plugin.js b/plugins/ckeditor4/autocorrect/plugin.js
new file mode 100644
index 0000000..91f57d7
--- /dev/null
+++ b/plugins/ckeditor4/autocorrect/plugin.js
@@ -0,0 +1,1002 @@
+/**
+ * @license TODO
+ */
+
+/**
+ * @fileOverview TODO
+ */
+
+(function() {
+	var localStorage = window.localStorage;
+	if (!localStorage) {
+		localStorage = {
+			getItem: function(key) {
+				return null;
+			},
+			setItem: function(key, value) {
+			}
+		};
+	}
+	var dynamicOptions = [
+		'useReplacementTable',
+		'recognizeUrlsAsYouType',
+		'recognizeUrls',
+		'replaceHyphensAsYouType',
+		'replaceHyphens',
+		'formatOrdinalsAsYouType',
+		'formatOrdinals',
+		'smartQuotesAsYouType',
+		'smartQuotes',
+		'createHorizontalRulesAsYouType',
+		'createHorizontalRules',
+		'formatBulletedListsAsYouType',
+		'formatBulletedLists',
+		'formatNumberedListsAsYouType',
+		'formatNumberedLists'
+	];
+	var autocorrect = CKEDITOR.plugins.autocorrect = {
+		getOption: function(key) {
+			return CKEDITOR.config['autocorrect_' + key];
+		},
+		setOption: function(key, value) {
+			localStorage.setItem('autocorrect_' + key, value);
+			CKEDITOR.config['autocorrect_' + key] = value;
+		}
+	};
+
+	var isBookmark = CKEDITOR.dom.walker.bookmark();
+
+	function arrayToMap(array) {
+		var map = {};
+		for (var i = 0; i < array.length; i++)
+			map[array[i]] = true;
+		return map;
+	}
+
+	function loadOptions() {
+		for (var i = 0; i < dynamicOptions.length; i++) {
+			var key = dynamicOptions[i];
+			var localValue = null;
+			try {
+				localValue = JSON.parse(localStorage.getItem('autocorrect_' + key));
+			} catch (e) {}
+			if (localValue !== null) {
+				CKEDITOR.config['autocorrect_' + key] = localValue;
+			}
+		}
+	}
+
+	function CharacterIterator(range) {
+		var walker = new CKEDITOR.dom.walker( range );
+		walker.evaluator = function( node ) { return (node.type === CKEDITOR.NODE_TEXT && !isBookmark(node)) || (node.type === CKEDITOR.NODE_ELEMENT && node.getName() == 'br'); };
+		walker.current = range.startContainer;
+		this.walker = walker;
+		this.referenceNode = range.startContainer;
+		this.referenceCharacter = null;
+		this.referenceCharacterOffset = range.startOffset;
+	}
+
+	CharacterIterator.prototype.nextCharacter = function() {
+		// TODO
+		return null;
+	};
+
+	CharacterIterator.prototype.previousCharacter = function() {
+		while (this.referenceCharacterOffset === 0) {
+			this.walker.current = this.referenceNode;
+			this.referenceNode = this.walker.previous();
+			if (!this.referenceNode)
+				return null;
+			if (this.referenceNode.type === CKEDITOR.NODE_ELEMENT && this.referenceNode.getName() == 'br')
+				return null;
+			this.referenceCharacterOffset = this.referenceNode.getText().length;
+		}
+		if (this.referenceCharacterOffset === 0)
+			return null;
+		this.referenceCharacter = this.referenceNode.getText()[--this.referenceCharacterOffset];
+		// Sometimes Chrome inserts U+200B Zero Width Space
+		// if (this.referenceCharacter == String.fromCharCode(8203))
+		// 	return this.previousCharacter();
+		return this.referenceCharacter;
+	};
+
+	CKEDITOR.plugins.add( 'autocorrect', {
+		requires: 'menubutton',
+		lang: 'en,ru',
+		icons: 'autocorrect', // %REMOVE_LINE_CORE%
+		hidpi: true, // %REMOVE_LINE_CORE%
+		init: function( editor ) {
+			var config = editor.config;
+			var lang = editor.lang.autocorrect;
+			loadOptions();
+			editor.addCommand( 'autocorrect', {
+				exec: function(editor) {
+					editor.fire( 'saveSnapshot' );
+					var selectedRange = editor.getSelection().getRanges().shift();
+					var bookmark = selectedRange.createBookmark();
+
+					var walkerRange;
+					if (selectedRange.collapsed) {
+						walkerRange = new CKEDITOR.dom.range(editor.editable());
+						walkerRange.selectNodeContents(editor.editable());
+					} else {
+						walkerRange = selectedRange.clone();
+					}
+
+					var walker = new CKEDITOR.dom.walker( walkerRange );
+					editor.editable().$.normalize();
+					walker.evaluator = function( node ) { return node.type === CKEDITOR.NODE_TEXT && !isBookmark(node); };
+					var node;
+					while (node = walker.next()) {
+						var next = getNext(node);
+						var parent = getBlockParent(node);
+						walker.current = correctTextNode(node, (parent.isBlockBoundary() && !next) || next && next.type === CKEDITOR.NODE_ELEMENT && next.getName() === 'br');
+						if (parent.getName() === 'p' && !skipBreaks(next)) {
+							correctParagraph(parent);
+						}
+					}
+
+					editor.getSelection().selectBookmarks([bookmark]);
+					editor.fire( 'saveSnapshot' );
+				}
+			} );
+
+			var command = editor.addCommand('toggleAutocorrect', {
+				preserveState: true,
+				canUndo: false,
+
+				exec: function( editor ) {
+					this.setState(isEnabled() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_ON);
+				}
+			});
+
+			var isEnabled = function() {
+				return command.state === CKEDITOR.TRISTATE_ON;
+			};
+
+			var optionsCommand = editor.addCommand( 'autocorrectOptions', new CKEDITOR.dialogCommand( 'autocorrectOptions' ) );
+			optionsCommand.canUndo = false;
+			optionsCommand.readOnly = 1;
+
+			CKEDITOR.dialog.add( 'autocorrectOptions', this.path + 'dialogs/options.js' );
+
+			var menuGroup = 'autocorrectButton';
+			editor.addMenuGroup( menuGroup );
+
+			// combine menu items to render
+			var uiMenuItems = {};
+
+			// always added
+			uiMenuItems.autoCorrectWhileTyping = {
+				label: lang.disable,
+				group: menuGroup,
+				command: 'toggleAutocorrect'
+			};
+
+			uiMenuItems.autoCorrectNow = {
+				label: lang.autocorrectNow,
+				command: 'autocorrect',
+				group: menuGroup
+			};
+
+			uiMenuItems.autocorrectOptions = {
+				label: lang.options,
+				command: 'autocorrectOptions',
+				group: menuGroup
+			};
+
+			editor.addMenuItems( uiMenuItems );
+
+			editor.ui.add( 'AutoCorrect', CKEDITOR.UI_MENUBUTTON, {
+				label: lang.toolbar,
+				modes: { wysiwyg: 1 },
+				toolbar: 'spellchecker,20',
+				onRender: function() {
+					command.on( 'state', function() {
+						this.setState( command.state );
+					}, this );
+				},
+				onMenu: function() {
+					editor.getMenuItem( 'autoCorrectWhileTyping' ).label = isEnabled() ? lang.disable : lang.enable;
+
+					return {
+						autoCorrectWhileTyping: CKEDITOR.TRISTATE_OFF,
+						autoCorrectNow: CKEDITOR.TRISTATE_OFF,
+						autocorrectOptions: CKEDITOR.TRISTATE_OFF
+					};
+				}
+			});
+
+			var showInitialState = function( evt ) {
+				evt.removeListener();
+				command.setState( config.autocorrect_enabled ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
+			};
+
+			editor.on( 'instanceReady', showInitialState );
+
+			var isTyping = false;
+
+			function getOption(key) {
+				return autocorrect.getOption(isTyping ? key + 'AsYouType' : key);
+			}
+
+			function skipBreaks(node, isBackwards) {
+				while (node && ((node.type == CKEDITOR.NODE_ELEMENT && node.getName() == 'br') || isBookmark(node))) {
+					node = isBackwards ? node.getPrevious() : node.getNext();
+				}
+				return node;
+			}
+
+			function isWhitespace(ch) {
+				return ch === ' ' || ch === ' ';
+			}
+
+			function isPunctuation(ch) {
+				return ch === '.' || ch === ',' || ch === '!' || ch === '?' || ch === '/';
+			}
+
+			function isWordPart(ch) {
+				return ch >= 'A' && ch <= 'Z'
+					|| ch >= 'a' && ch <= 'z'
+					|| ch >= 'а' && ch <= 'я'
+					|| ch >= 'А' && ch <= 'Я'
+					|| ch == 'ё' || ch == 'Ё'
+					|| ch >= '0' && ch <= '9';
+			}
+
+			function isPairOpenCharacter(ch) {
+				return ch == '"' || ch == '\'' || ch == '«' || ch == '‘' || ch == '“' || ch == '„' || ch == '(' || ch == '[' || ch == '{';
+			}
+
+			function isPairClosingCharacter(ch) {
+				return ch == '"' || ch == '\'' || ch == '»' || ch == '’' || ch == '”' || ch == '“' || ch == ')' || ch == ']' || ch == '}';
+			}
+
+			var hyperlinkExcludedTail = arrayToMap(['.', ',', '?', '!', ':', '(', ')', '[', ']', '{', '}', '"', '\'', '‘', '’', '“', '”', '«', '»', '<', '>']);
+			function isHyperlinkExcludedTail(ch) {
+				return ch in hyperlinkExcludedTail;
+			}
+
+			function moveCursorIntoTextNode(cursor) {
+				if (cursor.startContainer.type == CKEDITOR.NODE_ELEMENT) {
+					var rawStartNode = cursor.startContainer.getChild(cursor.startOffset);
+					var startOffset = 0;
+					// Skip ending <br>'s in Firefox, skip bookmark
+					var startNode = skipBreaks(rawStartNode, true);
+					if (startNode) {
+						if (startNode != rawStartNode) {
+							// We moved outside bookmark to the end of previous text node
+							startOffset = startNode.getText().length;
+						}
+						while (startNode.type == CKEDITOR.NODE_ELEMENT) {
+							startNode = startNode.getFirst();
+						}
+					} else {
+						startNode = new CKEDITOR.dom.text('');
+						cursor.insertNode(startNode);
+					}
+					cursor.setStart(startNode, startOffset);
+					cursor.collapse(true);
+				}
+			}
+
+			function correctOnInput(cursor) {
+				moveCursorIntoTextNode(cursor);
+				var input = cursor.startContainer.getText().substring(cursor.startOffset-1, cursor.startOffset);
+
+				if (getOption('replaceHyphens') && isPairOpenCharacter(input))
+					replaceHyphenPairInWord(cursor, input);
+
+				if (getOption('smartQuotes') && replaceDoubleQuote(cursor, input))
+					return;
+
+				if (getOption('smartQuotes') && replaceSingleQuote(cursor, input))
+					return;
+
+				if (isWhitespace(input))
+					autoCorrectOnWhitespace(cursor, input);
+
+				if (isPunctuation(input) || isWhitespace(input))
+					autoCorrectOnDelimiter(cursor, input);
+			}
+
+			function correctOnEnter(cursor) {
+				moveCursorIntoTextNode(cursor);
+
+				if (getOption('replaceHyphens'))
+					replaceHyphens(cursor, '');
+
+				autoCorrectOnDelimiter(cursor, '');
+			}
+
+			function correctTextNode(node, isBlockEnding) {
+				var cursor = new CKEDITOR.dom.range(editor.editable());
+				cursor.setStart(node, 0);
+				cursor.collapse(true);
+				while (cursor.startOffset < cursor.startContainer.getText().length) {
+					cursor.setStart(cursor.startContainer, cursor.startOffset + 1);
+					cursor.setEnd(cursor.startContainer, cursor.startOffset);
+					correctOnInput(cursor);
+					if (isBlockEnding && cursor.endOffset == cursor.startContainer.getText().length) {
+						// "Emulate" Enter key
+						correctOnEnter(cursor);
+					}
+				}
+				return cursor.startContainer;
+
+			}
+
+			function correctParagraph(p) {
+				if (!p)
+					return;
+
+				// FIXME this way is wrong
+				var content = p.getText();
+
+				if (getOption('createHorizontalRules'))
+					insertHorizontalRule(p, content);
+			}
+
+			function getNext(node) {
+				var next = node.getNext();
+				while (next && isBookmark(next)) {
+					next = next.getNext();
+				}
+				return next;
+			}
+
+			function replaceRangeContent(range, data) {
+				var walker = new CKEDITOR.dom.walker( range );
+				walker.evaluator = function( node ) { return node.type === CKEDITOR.NODE_ELEMENT && isBookmark(node); };
+				var bm;
+				var bookmarks = [];
+				while (bm = walker.next()) {
+					bookmarks.push(bm);
+				}
+				range.deleteContents();
+				for (var i = 0; i < bookmarks.length; i++) {
+					range.insertNode(bookmarks[i]);
+				}
+				range.insertNode(new CKEDITOR.dom.text(data));
+			}
+
+			function replaceHyphenPairInWord(cursor, input) {
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				if (input && !iterator.previousCharacter())
+					return;
+
+				var hypenPairRange = new CKEDITOR.dom.range(editor.editable());
+
+				var needle = '--';
+				var charAfterHypens = input;
+
+				var ch;
+				var i = needle.length - 1;
+				while ((ch = iterator.previousCharacter()) && !isWhitespace(ch)) {
+					if (ch == needle[i]) {
+						if (i == needle.length - 1)
+							hypenPairRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset + 1);
+						i--;
+						if (i < 0)
+							break;
+					} else {
+						charAfterHypens = ch;
+						i = needle.length - 1;
+					}
+				}
+				if (i >= 0)
+					return false;
+
+				if (charAfterHypens && !(isWhitespace(charAfterHypens) || isWordPart(charAfterHypens) || isPairOpenCharacter(charAfterHypens)))
+					return false;
+
+				hypenPairRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+
+				var charBeforeHypens = iterator.previousCharacter();
+
+				if (!charBeforeHypens || !(isWordPart(charBeforeHypens) || isPairClosingCharacter(charBeforeHypens)))
+					return false;
+
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				replaceRangeContent(hypenPairRange, '—');
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+			}
+
+			function replaceHyphens(cursor, input) {
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				if (input && !iterator.previousCharacter())
+					return;
+
+				var hypensRange = new CKEDITOR.dom.range(editor.editable());
+				hypensRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+
+				var leftChar = iterator.previousCharacter();
+				if (leftChar !== '-')
+					return false;
+
+				hypensRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+				var charBeforeHyphen = iterator.previousCharacter();
+				if (charBeforeHyphen == '-') {
+					hypensRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+					charBeforeHyphen = iterator.previousCharacter();
+				}
+
+				if (!isWhitespace(charBeforeHyphen))
+					return false;
+
+				var dash = config.autocorrect_dash;
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				replaceRangeContent(hypensRange, dash);
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+			}
+
+			function autoCorrectOnWhitespace(cursor, inputChar) {
+				if (getOption('formatBulletedLists') && formatBulletedList(cursor, inputChar))
+					return;
+
+				if (getOption('formatNumberedLists') && formatNumberedList(cursor, inputChar))
+					return;
+
+				if (getOption('replaceHyphens'))
+					replaceHyphens(cursor, inputChar);
+			}
+
+			function autoCorrectOnDelimiter(cursor, delimiter) {
+				if (getOption('recognizeUrls') && formatHyperlink(cursor, delimiter))
+					return;
+
+				if (config.autocorrect_useReplacementTable)
+					replaceSequence(cursor, delimiter);
+
+				if (getOption('formatOrdinals'))
+					formatOrdinals(cursor, delimiter);
+
+				if (getOption('replaceHyphens'))
+					replaceHyphenPairInWord(cursor, delimiter);
+			}
+
+			var bookmark;
+			function beforeReplace() {
+				if (!isTyping)
+					return;
+				editor.fire( 'saveSnapshot' );
+				bookmark = editor.getSelection().getRanges().shift().createBookmark();
+			}
+
+			function afterReplace() {
+				if (!isTyping)
+					return;
+				editor.getSelection().selectBookmarks([bookmark]);
+				editor.fire( 'saveSnapshot' );
+			}
+
+			var replacementTable = config.autocorrect_replacementTable;
+			function replaceSequence(cursor, input) {
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				if (input && !iterator.previousCharacter())
+					return;
+
+				var replacement;
+				var match;
+				var matchRange = new CKEDITOR.dom.range(editor.editable());
+				matchRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+				var sequence = '';
+				var ch;
+				while ((ch = iterator.previousCharacter()) && !isWhitespace(ch)) {
+					sequence = ch + sequence;
+					if (sequence in replacementTable) {
+						match = sequence;
+						replacement = replacementTable[match];
+						matchRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+					}
+				}
+
+				if (!replacement)
+					return false;
+
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				replaceRangeContent(matchRange, replacement);
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+
+				return true;
+			}
+
+			var urlRe = /^(http:|https:|ftp:|mailto:|tel:|skype:|www\.).+$/i;
+			function formatHyperlink(cursor, input) {
+				if (isPunctuation(input))
+					return;
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				if (input && !iterator.previousCharacter())
+					return;
+
+				var matchRange = new CKEDITOR.dom.range(editor.editable());
+				matchRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+				var tail = true;
+				var match = '';
+				var ch;
+				while ((ch = iterator.previousCharacter()) && ch != ' ' && ch != ' ') {
+					// exclude trailing punctuation
+					if (tail && isHyperlinkExcludedTail(ch)) {
+						matchRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+						continue;
+					}
+					match = ch + match;
+					tail = false;
+					matchRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+				}
+
+				match = match.match(urlRe);
+
+				if (!match)
+					return false;
+
+				var url = match[0];
+				var href = match[1].toLowerCase() === 'www.' ? 'http://' + url : url;
+
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				var attributes = {'data-cke-saved-href': href, href: href};
+				var style = new CKEDITOR.style({ element: 'a', attributes: attributes } );
+				style.type = CKEDITOR.STYLE_INLINE; // need to override... dunno why.
+				style.applyToRange( matchRange );
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+
+				return true;
+			}
+
+			var suffixes = {'st': true, 'nd': true, 'rd': true, 'th': true};
+			function formatOrdinals(cursor, delimiter) {
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				if (delimiter && !iterator.previousCharacter())
+					return;
+
+				var suffixRange = new CKEDITOR.dom.range(editor.editable());
+				suffixRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+				var suffix = '';
+				var ch;
+				for (var i = 0; i < 2; i++) {
+					ch = iterator.previousCharacter();
+					if (!ch)
+						break;
+					suffix = ch + suffix;
+				}
+				if (!(suffix in suffixes))
+					return false;
+				suffixRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+
+				var number = '';
+				while (ch = iterator.previousCharacter()) {
+					if (ch >= '0' && ch <= '9')
+						number = ch + number;
+					else if (isWordPart(ch))
+						return false;
+					else
+						break;
+				}
+
+				var n = number % 100;
+				if (n > 9 && n < 20) {
+					if (suffix !== 'th')
+						return false;
+				} else {
+					n = number % 10;
+					if (n == 1) {
+						if (suffix !== 'st')
+							return false;
+					} else if (n == 2) {
+						if (suffix !== 'nd')
+							return false;
+					} else if (n == 3) {
+						if (suffix !== 'rd')
+							return false;
+					} else if (suffix !== 'th')
+						return false;
+				}
+
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				var style = new CKEDITOR.style({ element: 'sup' } );
+				style.applyToRange( suffixRange );
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+
+				return true;
+			}
+
+			var horizontalRuleRe = /^(-{3,}|_{3,})$/;
+			function insertHorizontalRule(parent, content) {
+				var match = content.match(horizontalRuleRe);
+				if (!match)
+					return false;
+
+				var hr = editor.document.createElement( 'hr' );
+				hr.replace(parent);
+
+				return true;
+			}
+
+			var bulletedListMarkers = arrayToMap(['*', '+', '•']);
+			function formatBulletedList(cursor, input) {
+				var parent = getBlockParent(cursor.startContainer);
+
+				if (parent.getName() !== 'p')
+					return;
+
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				var markerRange = new CKEDITOR.dom.range(editor.editable());
+				markerRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+
+				if (input && !iterator.previousCharacter())
+					return;
+
+				var marker = iterator.previousCharacter();
+
+				if (!marker || !(marker in bulletedListMarkers))
+					return false;
+
+				markerRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+
+				if (iterator.previousCharacter())
+					return false;
+
+				var previous = parent.getPrevious();
+
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				markerRange.deleteContents();
+				if (!isTyping && previous && previous.type == CKEDITOR.NODE_ELEMENT && previous.getName() == 'ul') {
+					appendContentsToList(parent, previous);
+				} else {
+					replaceContentsWithList([parent], 'ul', null);
+				}
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+
+				return true;
+			}
+
+			function formatNumberedList(cursor, input) {
+				var parent = getBlockParent(cursor.startContainer);
+
+				if (parent.getName() !== 'p')
+					return;
+
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				var markerRange = new CKEDITOR.dom.range(editor.editable());
+				markerRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+
+				if (input && !iterator.previousCharacter())
+					return;
+
+				var delimiter = iterator.previousCharacter();
+				if (!(delimiter in {'.': true, ')': true}))
+					return false;
+
+				var start = '';
+				var ch;
+				while ((ch = iterator.previousCharacter()) && ch != ' ' && ch != ' ') {
+					start = ch + start;
+					markerRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+				}
+
+				var type;
+				if (start.match(/^[0-9]+$/))
+					type = '1';
+				else if (start.match(/^[ivxlcdm]+$/))
+					type = 'i';
+				else if (start.match(/^[IVXLCDM]+$/))
+					type = 'I';
+				else if (start.match(/^[a-z]$/))
+					type = 'a';
+				else if (start.match(/^[A-Z]$/))
+					type = 'A';
+				else
+					return false;
+
+				if (iterator.previousCharacter())
+					return false;
+
+				var startNumber = toNumber(start, type);
+
+				parent = getBlockParent(cursor.startContainer);
+				var previous = parent.getPrevious();
+
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				markerRange.deleteContents();
+				if (!isTyping && previous && previous.type == CKEDITOR.NODE_ELEMENT && previous.getName() == 'ol' && previous.getAttribute('type') == type && getLastNumber(previous) == startNumber - 1) {
+					appendContentsToList(parent, previous);
+				} else {
+					var attributes = startNumber === 1 ? {type: type} : {type: type, start: startNumber};
+					replaceContentsWithList([parent], 'ol', attributes);
+				}
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+
+				return true;
+			}
+
+			var doubleQuotes = config.autocorrect_doubleQuotes;
+			function replaceDoubleQuote(cursor, input) {
+				if (input !== '"')
+					return false;
+
+				replaceQuote(cursor, doubleQuotes);
+				return true;
+			}
+
+			var singleQuotes = config.autocorrect_singleQuotes;
+			function replaceSingleQuote(cursor, input) {
+				if (input !== '\'')
+					return false;
+
+				replaceQuote(cursor, singleQuotes);
+				return true;
+			}
+
+			function replaceQuote(cursor, quotes) {
+				var iteratorRange = new CKEDITOR.dom.range(editor.editable());
+				iteratorRange.selectNodeContents(getBlockParent(cursor.startContainer));
+				var iterator = new CharacterIterator(iteratorRange);
+				iterator.referenceNode = cursor.startContainer;
+				iterator.referenceCharacterOffset = cursor.startOffset;
+
+				var quoteRange = new CKEDITOR.dom.range(editor.editable());
+				quoteRange.setEnd(iterator.referenceNode, iterator.referenceCharacterOffset);
+				iterator.previousCharacter();
+				quoteRange.setStart(iterator.referenceNode, iterator.referenceCharacterOffset);
+
+				var leftChar = iterator.previousCharacter();
+
+				var isClosingQuote = leftChar ? '  –—([{'.indexOf(leftChar) < 0 : false;
+				var replacement = quotes[Number(isClosingQuote)];
+
+				beforeReplace();
+				var bookmark = cursor.createBookmark();
+				replaceRangeContent(quoteRange, replacement);
+				cursor.moveToBookmark(bookmark);
+				moveCursorIntoTextNode(cursor);
+				afterReplace();
+			}
+
+			function getBlockParent(node) {
+				while (node && (node.type !== CKEDITOR.NODE_ELEMENT || (node.getName() in CKEDITOR.dtd.$inline || node.getName() in CKEDITOR.dtd.$empty ))) {
+					node = node.getParent();
+				}
+				return node;
+			}
+
+			function getLastNumber(list) {
+				return list.$.start + list.getChildCount() - 1;
+			}
+
+			function replaceContentsWithList(listContents, type, attributes) {
+				// Insert the list to the DOM tree.
+				var insertAnchor = listContents[ listContents.length - 1 ].getNext(),
+					listNode = editor.document.createElement( type );
+
+				var commonParent = listContents[0].getParent();
+
+				var contentBlock;
+
+				while ( listContents.length ) {
+					contentBlock = listContents.shift();
+					appendContentsToList(contentBlock, listNode);
+				}
+
+				// Apply list root dir only if it has been explicitly declared.
+				// if ( listDir && explicitDirection )
+				// 	listNode.setAttribute( 'dir', listDir );
+
+				if (attributes)
+					listNode.setAttributes(attributes);
+
+				if ( insertAnchor )
+					listNode.insertBefore( insertAnchor );
+				else
+					listNode.appendTo( commonParent );
+			}
+
+			function appendContentsToList(contentBlock, listNode) {
+				var listItem = editor.document.createElement( 'li' );
+
+				// If current block should be preserved, append it to list item instead of
+				// transforming it to <li> element.
+				if ( false /*shouldPreserveBlock( contentBlock )*/ )
+					contentBlock.appendTo( listItem );
+				else {
+					contentBlock.copyAttributes( listItem );
+					// Remove direction attribute after it was merged into list root. (#7657)
+					/*if ( listDir && contentBlock.getDirection() ) {
+						listItem.removeStyle( 'direction' );
+						listItem.removeAttribute( 'dir' );
+					}*/
+					contentBlock.moveChildren( listItem );
+					contentBlock.remove();
+				}
+
+				listItem.appendTo( listNode );
+			}
+
+			function characterPosition(character) {
+				var alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
+				return alpha.indexOf(character) + 1;
+			}
+
+			function toArabic(number) {
+				if (!number) return 0;
+				if (number.substring(0, 1) == "M") return 1000 + toArabic(number.substring(1));
+				if (number.substring(0, 2) == "CM") return 900 + toArabic(number.substring(2));
+				if (number.substring(0, 1) == "D") return 500 + toArabic(number.substring(1));
+				if (number.substring(0, 2) == "CD") return 400 + toArabic(number.substring(2));
+				if (number.substring(0, 1) == "C") return 100 + toArabic(number.substring(1));
+				if (number.substring(0, 2) == "XC") return 90 + toArabic(number.substring(2));
+				if (number.substring(0, 1) == "L") return 50 + toArabic(number.substring(1));
+				if (number.substring(0, 2) == "XL") return 40 + toArabic(number.substring(2));
+				if (number.substring(0, 1) == "X") return 10 + toArabic(number.substring(1));
+				if (number.substring(0, 2) == "IX") return 9 + toArabic(number.substring(2));
+				if (number.substring(0, 1) == "V") return 5 + toArabic(number.substring(1));
+				if (number.substring(0, 2) == "IV") return 4 + toArabic(number.substring(2));
+				if (number.substring(0, 1) == "I") return 1 + toArabic(number.substring(1));
+			}
+
+			function toNumber(start, type) {
+				switch (type) {
+					case '1':
+						return start|0;
+					case 'i':
+						return toArabic(start.toUpperCase());
+					case 'I':
+						return toArabic(start);
+					case 'a':
+						return characterPosition(start.toUpperCase());
+					case 'A':
+						return characterPosition(start);
+				}
+			}
+
+			editor.on( 'key', function( event ) {
+				if (event.data.keyCode != 2228237 && event.data.keyCode != 13)
+					return;
+				if (!isEnabled())
+					return;
+				if (editor.mode !== 'wysiwyg')
+					return;
+
+				var cursor = editor.getSelection().getRanges().shift();
+				var paragraph = null;
+
+				if (event.data.keyCode === 13) {
+					var parent = getBlockParent(cursor.startContainer);
+					if (parent.getName() === 'p') {
+						paragraph = parent;
+					}
+				}
+
+				setTimeout(function() {
+					isTyping = true;
+					correctOnEnter(cursor);
+					correctParagraph(paragraph);
+					isTyping = false;
+				});
+			});
+
+			editor.on( 'contentDom', function() {
+				editor.editable().on( 'keypress', function( event ) {
+					if ( event.data.$.charCode === 0 )
+						return;
+					if (!isEnabled())
+						return;
+
+					setTimeout(function() {
+						isTyping = true;
+						var cursor = editor.getSelection().getRanges().shift();
+						correctOnInput(cursor);
+						isTyping = false;
+					});
+				});
+			});
+		}
+	});
+
+})();
+
+
+/**
+ * 
+ *
+ * @cfg
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.autocorrect_enabled = true;
+// language specific
+CKEDITOR.config.autocorrect_replacementTable = {"-->": "→", "-+": "∓", "->": "→", "...": "…", "(c)": "©", "(e)": "€", "(r)": "®", "(tm)": "™", "(o)": "˚", "+-": "±", "<-": "←", "<--": "←", "<-->": "↔", "<->": "↔", "<<": "«", ">>": "»", "~=": "≈", "1/2": "½", "1/4": "¼", "3/4": "¾"};
+
+CKEDITOR.config.autocorrect_useReplacementTable = true;
+
+CKEDITOR.config.autocorrect_recognizeUrlsAsYouType = true;
+
+CKEDITOR.config.autocorrect_recognizeUrls = true;
+// language specific
+CKEDITOR.config.autocorrect_dash = '–';
+
+CKEDITOR.config.autocorrect_replaceHyphensAsYouType = true;
+
+CKEDITOR.config.autocorrect_replaceHyphens = true;
+
+CKEDITOR.config.autocorrect_formatOrdinalsAsYouType = true;
+
+CKEDITOR.config.autocorrect_formatOrdinals = true;
+
+// language specific
+CKEDITOR.config.autocorrect_singleQuotes = "‘’";
+
+CKEDITOR.config.autocorrect_smartQuotesAsYouType = true;
+
+CKEDITOR.config.autocorrect_smartQuotes = true;
+// language specific
+CKEDITOR.config.autocorrect_doubleQuotes = "“”";
+
+CKEDITOR.config.autocorrect_createHorizontalRulesAsYouType = true;
+
+CKEDITOR.config.autocorrect_createHorizontalRules = true;
+
+CKEDITOR.config.autocorrect_formatBulletedListsAsYouType = true;
+
+CKEDITOR.config.autocorrect_formatBulletedLists = true;
+
+CKEDITOR.config.autocorrect_formatNumberedListsAsYouType = true;
+
+CKEDITOR.config.autocorrect_formatNumberedLists = true;
+
+// XXX table autocreation?
+// XXX upper first word of a sentense?
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/LICENSE.md b/plugins/ckeditor4/base64image/LICENSE.md
new file mode 100644
index 0000000..921d325
--- /dev/null
+++ b/plugins/ckeditor4/base64image/LICENSE.md
@@ -0,0 +1,1244 @@
+Software License Agreement
+==========================
+
+Base64Image Plugin for CKEditor - Adds images from local client as base64
+string into the source without server side processing. You can also add
+external image urls into the source.
+
+Created by ALL-INKL.COM - Neue Medien Münnich - 04. Feb 2014
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+
+Appendix A: The GPL License
+---------------------------
+
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software-to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+GNU GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+----------------------------
+
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software-to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages-typically libraries-of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+GNU LESSER GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+---------------------------
+
+MOZILLA PUBLIC LICENSE
+Version 1.1
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     http://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the  "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above.  If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting  the provisions above and replace  them with the notice and
+     other provisions required by the [___] License.  If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+
diff --git a/plugins/ckeditor4/base64image/README.md b/plugins/ckeditor4/base64image/README.md
new file mode 100644
index 0000000..413d40c
--- /dev/null
+++ b/plugins/ckeditor4/base64image/README.md
@@ -0,0 +1,21 @@
+Base64Image Plugin for CKEditor 4
+=================================
+
+Created by ALL-INKL.COM - Neue Medien Münnich - 04. Feb 2014
+
+Adds images from local client as base64 string into the source without server
+side processing. You can also add external image urls into the source.
+
+## Requirements
+The Browser must support the JavaScript File API.
+
+## Installation
+
+ 1. Download the plugin from http://github.com/nmmf/base64image
+ 
+ 2. Extract (decompress) the downloaded file into the plugins folder of your
+	CKEditor installation.
+	Example: http://example.com/ckeditor/plugins/base64image
+	
+ 3. Enable the plugin by using the extraPlugins configuration setting.
+	Example: CKEDITOR.config.extraPlugins = "base64image";
diff --git a/plugins/ckeditor4/base64image/dialogs/base64image.js b/plugins/ckeditor4/base64image/dialogs/base64image.js
new file mode 100644
index 0000000..65d860c
--- /dev/null
+++ b/plugins/ckeditor4/base64image/dialogs/base64image.js
@@ -0,0 +1,503 @@
+/*
+ * Created by ALL-INKL.COM - Neue Medien Muennich - 04. Feb 2014
+ * Licensed under the terms of GPL, LGPL and MPL licenses.
+ */
+CKEDITOR.dialog.add("base64imageDialog", function(editor){
+	
+	var t = null,
+		selectedImg = null,
+		orgWidth = null, orgHeight = null,
+		imgPreview = null, urlCB = null, urlI = null, fileCB = null, imgScal = 1, lock = true;
+	
+	/* Check File Reader Support */
+	function fileSupport() {
+		var r = false, n = null;
+		try {
+			if(FileReader) {
+				var n = document.createElement("input");
+				if(n && "files" in n) r = true;
+			}
+		} catch(e) { r = false; }
+		n = null;
+		return r;
+	}
+	var fsupport = fileSupport();
+	
+	/* Load preview image */
+	function imagePreviewLoad(s) {
+		
+		/* no preview */
+		if(typeof(s) != "string" || !s) {
+			imgPreview.getElement().setHtml("");
+			return;
+		}
+		
+		/* Create image */
+		var i = new Image();
+		
+		/* Display loading text in preview element */
+		imgPreview.getElement().setHtml("Loading...");
+		
+		/* When image is loaded */
+		i.onload = function() {
+			
+			/* Remove preview */
+			imgPreview.getElement().setHtml("");
+			
+			/* Set attributes */
+			if(orgWidth == null || orgHeight == null) {
+				t.setValueOf("tab-properties", "width", this.width);
+				t.setValueOf("tab-properties", "height", this.height);
+				imgScal = 1;
+				if(this.height > 0 && this.width > 0) imgScal = this.width / this.height;
+				if(imgScal <= 0) imgScal = 1;
+			} else {
+				orgWidth = null;
+				orgHeight = null;
+			}
+			this.id = editor.id+"previewimage";
+			this.setAttribute("style", "max-width:400px;max-height:100px;");
+			this.setAttribute("alt", "");
+			
+			/* Insert preview image */
+			try {
+				var p = imgPreview.getElement().$;
+				if(p) p.appendChild(this);
+			} catch(e) {}
+			
+		};
+		
+		/* Error Function */
+		i.onerror = function(){ imgPreview.getElement().setHtml(""); };
+		i.onabort = function(){ imgPreview.getElement().setHtml(""); };
+		
+		/* Load image */
+		i.src = s;
+	}
+	
+	/* Change input values and preview image */
+	function imagePreview(src){
+		
+		/* Remove preview */
+		imgPreview.getElement().setHtml("");
+		
+		if(src == "base64") {
+			
+			/* Disable Checkboxes */
+			if(urlCB) urlCB.setValue(false, true);
+			if(fileCB) fileCB.setValue(false, true);
+			
+		} else if(src == "url") {
+			
+			/* Ensable Image URL Checkbox */
+			if(urlCB) urlCB.setValue(true, true);
+			if(fileCB) fileCB.setValue(false, true);
+			
+			/* Load preview image */
+			if(urlI) imagePreviewLoad(urlI.getValue());
+			
+		} else if(fsupport) {
+			
+			/* Ensable Image File Checkbox */
+			if(urlCB) urlCB.setValue(false, true);
+			if(fileCB) fileCB.setValue(true, true);
+			
+			/* Read file and load preview */
+			var fileI = t.getContentElement("tab-source", "file");
+			var n = null;
+			try { n = fileI.getInputElement().$; } catch(e) { n = null; }
+			if(n && "files" in n && n.files && n.files.length > 0 && n.files[0]) {
+				if("type" in n.files[0] && !n.files[0].type.match("image.*")) return;
+				if(!FileReader) return;
+				imgPreview.getElement().setHtml("Loading...");
+				var fr = new FileReader();
+				fr.onload = (function(f) { return function(e) {
+					imgPreview.getElement().setHtml("");
+					imagePreviewLoad(e.target.result);
+				}; })(n.files[0]);
+				fr.onerror = function(){ imgPreview.getElement().setHtml(""); };
+				fr.onabort = function(){ imgPreview.getElement().setHtml(""); };
+				fr.readAsDataURL(n.files[0]);
+			}
+		}
+	};
+	
+	/* Calculate image dimensions */
+	function getImageDimensions() {
+		var o = {
+			"w" : t.getContentElement("tab-properties", "width").getValue(),
+			"h" : t.getContentElement("tab-properties", "height").getValue(),
+			"uw" : "px",
+			"uh" : "px"
+		};
+		if(o.w.indexOf("%") >= 0) o.uw = "%";
+		if(o.h.indexOf("%") >= 0) o.uh = "%";
+		o.w = parseInt(o.w, 10);
+		o.h = parseInt(o.h, 10);
+		if(isNaN(o.w)) o.w = 0;
+		if(isNaN(o.h)) o.h = 0;
+		return o;
+	}
+	
+	/* Set image dimensions */
+	function imageDimensions(src) {
+		var o = getImageDimensions();
+		var u = "px";
+		if(src == "width") {
+			if(o.uw == "%") u = "%";
+			o.h = Math.round(o.w / imgScal);
+		} else {
+			if(o.uh == "%") u = "%";
+			o.w = Math.round(o.h * imgScal); 
+		}
+		if(u == "%") {
+			o.w += "%";
+			o.h += "%";
+		}
+		t.getContentElement("tab-properties", "width").setValue(o.w),
+		t.getContentElement("tab-properties", "height").setValue(o.h)
+	}
+	
+	/* Set integer Value */
+	function integerValue(elem) {
+		var v = elem.getValue(), u = "";
+		if(v.indexOf("%") >= 0) u = "%";
+		v = parseInt(v, 10);
+		if(isNaN(v)) v = 0;
+		elem.setValue(v+u);
+	}
+	
+	if(fsupport) {
+		
+		/* Dialog with file and url image source */
+		var sourceElements = [
+			{
+				type: "hbox",
+				widths: ["70px"],
+				children: [
+					{
+						type: "checkbox",
+						id: "urlcheckbox",
+						style: "margin-top:5px",
+						label: editor.lang.common.url+":"
+					},
+					{
+						type: "text",
+						id: "url",
+						label: "",
+						onChange: function(){ imagePreview("url"); }
+					}
+				]
+			},
+			{
+				type: "hbox",
+				widths: ["70px"],
+				children: [
+					{
+						type: "checkbox",
+						id: "filecheckbox",
+						style: "margin-top:5px",
+						label: editor.lang.common.upload+":"
+					},
+					{
+						type: "file",
+						id: "file",
+						label: "",
+						onChange: function(){ imagePreview("file"); }
+					}
+				]
+			},
+			{
+				type: "html",
+				id: "preview",
+				html: new CKEDITOR.template("<div style=\"text-align:center;\"></div>").output()
+			}
+		];
+		
+	} else {
+		
+		/* Dialog with url image source */
+		var sourceElements = [
+			{
+				type: "text",
+				id: "url",
+				label: editor.lang.common.url,
+				onChange: function(){ imagePreview("url"); }
+			},
+			{
+				type: "html",
+				id: "preview",
+				html: new CKEDITOR.template("<div style=\"text-align:center;\"></div>").output()
+			}
+		];
+	}
+	
+	/* Dialog */
+    return {
+		title: editor.lang.common.image,
+        minWidth: 450,
+        minHeight: 180,
+		onLoad: function(){
+			
+			if(fsupport) {
+				
+				/* Get checkboxes */
+				urlCB = this.getContentElement("tab-source", "urlcheckbox");
+				fileCB = this.getContentElement("tab-source", "filecheckbox");
+				
+				/* Checkbox Events */
+				urlCB.getInputElement().on("click", function(){ imagePreview("url"); });
+				fileCB.getInputElement().on("click", function(){ imagePreview("file"); });
+				
+			}
+			
+			/* Get url input element */
+			urlI = this.getContentElement("tab-source", "url");
+			
+			/* Get image preview element */
+			imgPreview = this.getContentElement("tab-source", "preview");
+			
+			/* Constrain proportions or not */
+			this.getContentElement("tab-properties", "lock").getInputElement().on("click", function(){
+				if(this.getValue()) lock = true; else lock = false;
+				if(lock) imageDimensions("width");
+			}, this.getContentElement("tab-properties", "lock"));
+			
+			/* Change Attributes Events  */
+			this.getContentElement("tab-properties", "width").getInputElement().on("keyup", function(){ if(lock) imageDimensions("width"); });
+			this.getContentElement("tab-properties", "height").getInputElement().on("keyup", function(){ if(lock) imageDimensions("height"); });
+			this.getContentElement("tab-properties", "vmargin").getInputElement().on("keyup", function(){ integerValue(this); }, this.getContentElement("tab-properties", "vmargin"));
+			this.getContentElement("tab-properties", "hmargin").getInputElement().on("keyup", function(){ integerValue(this); }, this.getContentElement("tab-properties", "hmargin"));
+			this.getContentElement("tab-properties", "border").getInputElement().on("keyup", function(){ integerValue(this); }, this.getContentElement("tab-properties", "border"));
+			
+		},
+		onShow: function(){
+			
+			/* Remove preview */
+			imgPreview.getElement().setHtml("");
+			
+			t = this, orgWidth = null, orgHeight = null, imgScal = 1, lock = true;
+			
+			/* selected image or null */
+			selectedImg = editor.getSelection();
+			if(selectedImg) selectedImg = selectedImg.getSelectedElement();
+			if(!selectedImg || selectedImg.getName() !== "img") selectedImg = null;
+			
+			/* Set input values */
+			t.setValueOf("tab-properties", "lock", lock);
+			t.setValueOf("tab-properties", "vmargin", "0");
+			t.setValueOf("tab-properties", "hmargin", "0");
+			t.setValueOf("tab-properties", "border", "0");
+			t.setValueOf("tab-properties", "align", "none");
+			if(selectedImg) {
+				
+				/* Set input values from selected image */
+				if(typeof(selectedImg.getAttribute("width")) == "string") orgWidth = selectedImg.getAttribute("width");
+				if(typeof(selectedImg.getAttribute("height")) == "string") orgHeight = selectedImg.getAttribute("height");
+				if((orgWidth == null || orgHeight == null) && selectedImg.$) {
+					orgWidth = selectedImg.$.width;
+					orgHeight = selectedImg.$.height;
+				}
+				if(orgWidth != null && orgHeight != null) {
+					t.setValueOf("tab-properties", "width", orgWidth);
+					t.setValueOf("tab-properties", "height", orgHeight);
+					orgWidth = parseInt(orgWidth, 10);
+					orgHeight = parseInt(orgHeight, 10);
+					imgScal = 1;
+					if(!isNaN(orgWidth) && !isNaN(orgHeight) && orgHeight > 0 && orgWidth > 0) imgScal = orgWidth / orgHeight;
+					if(imgScal <= 0) imgScal = 1;
+				}
+				
+				if(typeof(selectedImg.getAttribute("src")) == "string") {
+					if(selectedImg.getAttribute("src").indexOf("data:") === 0) {
+						imagePreview("base64");
+						imagePreviewLoad(selectedImg.getAttribute("src"));
+					} else {
+						t.setValueOf("tab-source", "url", selectedImg.getAttribute("src"));
+					}
+				}
+				if(typeof(selectedImg.getAttribute("alt")) == "string") t.setValueOf("tab-properties", "alt", selectedImg.getAttribute("alt"));
+				if(typeof(selectedImg.getAttribute("hspace")) == "string") t.setValueOf("tab-properties", "hmargin", selectedImg.getAttribute("hspace"));
+				if(typeof(selectedImg.getAttribute("vspace")) == "string") t.setValueOf("tab-properties", "vmargin", selectedImg.getAttribute("vspace"));
+				if(typeof(selectedImg.getAttribute("border")) == "string") t.setValueOf("tab-properties", "border", selectedImg.getAttribute("border"));
+				if(typeof(selectedImg.getAttribute("align")) == "string") {
+					switch(selectedImg.getAttribute("align")) {
+						case "top":
+						case "text-top":
+							t.setValueOf("tab-properties", "align", "top");
+							break;
+						case "baseline":
+						case "bottom":
+						case "text-bottom":
+							t.setValueOf("tab-properties", "align", "bottom");
+							break;
+						case "left":
+							t.setValueOf("tab-properties", "align", "left");
+							break;
+						case "right":
+							t.setValueOf("tab-properties", "align", "right");
+							break;
+					}
+				}
+				t.selectPage("tab-properties");
+			}
+			
+		},
+		onOk : function(){
+			
+			/* Get image source */
+			var src = "";
+			try { src = CKEDITOR.document.getById(editor.id+"previewimage").$.src; } catch(e) { src = ""; }
+			if(typeof(src) != "string" || src == null || src === "") return;
+			
+			/* selected image or new image */
+			if(selectedImg) var newImg = selectedImg; else var newImg = editor.document.createElement("img");
+			newImg.setAttribute("src", src);
+			src = null;
+			
+			/* Set attributes */
+			newImg.setAttribute("alt", t.getValueOf("tab-properties", "alt").replace(/^\s+/, "").replace(/\s+$/, ""));
+			var attr = {
+				"width" : ["width", "width:#;", "integer", 1],
+				"height" : ["height", "height:#;", "integer", 1],
+				"vmargin" : ["vspace", "margin-top:#;margin-bottom:#;", "integer", 0],
+				"hmargin" : ["hspace", "margin-left:#;margin-right:#;", "integer", 0],
+				"align" : ["align", ""],
+				"border" : ["border", "border:# solid black;", "integer", 0]
+			}, css = [], value, cssvalue, attrvalue, k;
+			for(k in attr) {
+				
+				value = t.getValueOf("tab-properties", k);
+				attrvalue = value;
+				cssvalue = value;
+				unit = "px";
+				
+				if(k == "align") {
+					switch(value) {
+						case "top":
+						case "bottom":
+							attr[k][1] = "vertical-align:#;";
+							break;
+						case "left":
+						case "right":
+							attr[k][1] = "float:#;";
+							break;
+						default:
+							value = null;
+							break;
+					}
+				}
+				
+				if(attr[k][2] == "integer") {
+					if(value.indexOf("%") >= 0) unit = "%";
+					value = parseInt(value, 10);
+					if(isNaN(value)) value = null; else if(value < attr[k][3]) value = null;
+					if(value != null) {
+						if(unit == "%") {
+							attrvalue = value+"%";
+							cssvalue = value+"%";
+						} else {
+							attrvalue = value;
+							cssvalue = value+"px";
+						}
+					}
+				}
+				
+				if(value != null) {
+					newImg.setAttribute(attr[k][0], attrvalue);
+					css.push(attr[k][1].replace(/#/g, cssvalue));
+				}
+				
+			}
+			if(css.length > 0) newImg.setAttribute("style", css.join(""));
+			
+			/* Insert new image */
+			if(!selectedImg) editor.insertElement(newImg);
+			
+			/* Resize image */
+			if(editor.plugins.imageresize) editor.plugins.imageresize.resize(editor, newImg, 800, 800);
+			
+		},
+		
+		/* Dialog form */
+        contents: [
+            {
+                id: "tab-source",
+                label: editor.lang.common.generalTab,
+                elements: sourceElements
+            },
+            {
+                id: "tab-properties",
+                label: editor.lang.common.advancedTab,
+                elements: [
+                    {
+                        type: "text",
+                        id: "alt",
+                        label: editor.lang.base64image.alt
+                    },
+                    {
+						type: 'hbox',
+						widths: ["15%", "15%", "70%"],
+						children: [
+							{
+								type: "text",
+								width: "45px",
+								id: "width",
+								label: editor.lang.common.width
+							},
+							{
+								type: "text",
+								width: "45px",
+								id: "height",
+								label: editor.lang.common.height
+							},
+							{
+								type: "checkbox",
+								id: "lock",
+								label: editor.lang.base64image.lockRatio,
+								style: "margin-top:18px;"
+							}
+						]
+                    },
+					{
+						type: 'hbox',
+						widths: ["23%", "30%", "30%", "17%"],
+						style: "margin-top:10px;",
+						children: [
+							{
+								type: "select",
+								id: "align",
+								label: editor.lang.common.align,
+								items: [
+									[editor.lang.common.notSet, "none"],
+									[editor.lang.common.alignTop, "top"],
+									[editor.lang.common.alignBottom, "bottom"],
+									[editor.lang.common.alignLeft, "left"],
+									[editor.lang.common.alignRight, "right"]
+								]
+							},
+							{
+								type: "text",
+								width: "45px",
+								id: "vmargin",
+								label: editor.lang.base64image.vSpace
+							},
+							{
+								type: "text",
+								width: "45px",
+								id: "hmargin",
+								label: editor.lang.base64image.hSpace
+							},
+							{
+								type: "text",
+								width: "45px",
+								id: "border",
+								label: editor.lang.base64image.border
+							}
+						]
+					}
+                ]
+            }
+        ]
+    };
+});
diff --git a/plugins/ckeditor4/base64image/icons/base64image.png b/plugins/ckeditor4/base64image/icons/base64image.png
new file mode 100644
index 0000000000000000000000000000000000000000..81bea2d28eee2d994eaf92b37189fc8fd993f481
GIT binary patch
literal 3175
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
N002ovPDHLkV1iU+<4yno

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/base64image/icons/hidpi/base64image.png b/plugins/ckeditor4/base64image/icons/hidpi/base64image.png
new file mode 100644
index 0000000000000000000000000000000000000000..00a962bc5c775fa7d99fab1836928bd32fa22610
GIT binary patch
literal 4112
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
O0000<MNUMnLSTZZfR@()

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/base64image/lang/af.js b/plugins/ckeditor4/base64image/lang/af.js
new file mode 100644
index 0000000..2c5aa9a
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/af.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","af",{
+	"alt":"Alternatiewe teks",
+	"lockRatio":"Vaste proporsie",
+	"vSpace":"VSpasie",
+	"hSpace":"HSpasie",
+	"border":"Rand"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ar.js b/plugins/ckeditor4/base64image/lang/ar.js
new file mode 100644
index 0000000..474ce1e
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ar.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ar",{
+	"alt":"عنوان الصورة",
+	"lockRatio":"تناسق الحجم",
+	"vSpace":"تباعد عمودي",
+	"hSpace":"تباعد أفقي",
+	"border":"سمك الحدود"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/bg.js b/plugins/ckeditor4/base64image/lang/bg.js
new file mode 100644
index 0000000..c0e2324
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/bg.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","bg",{
+	"alt":"Алтернативен текст",
+	"lockRatio":"Заключване на съотношението",
+	"vSpace":"Вертикален отстъп",
+	"hSpace":"Хоризонтален отстъп",
+	"border":"Рамка"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/bn.js b/plugins/ckeditor4/base64image/lang/bn.js
new file mode 100644
index 0000000..faf767a
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/bn.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","bn",{
+	"alt":"বিকল্প টেক্সট",
+	"lockRatio":"অনুপাত লক কর",
+	"vSpace":"ভার্টিকেল স্পেস",
+	"hSpace":"হরাইজন্টাল স্পেস",
+	"border":"বর্ডার"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/bs.js b/plugins/ckeditor4/base64image/lang/bs.js
new file mode 100644
index 0000000..ee37a1d
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/bs.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","bs",{
+	"alt":"Tekst na slici",
+	"lockRatio":"Zakljuèaj odnos",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Okvir"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ca.js b/plugins/ckeditor4/base64image/lang/ca.js
new file mode 100644
index 0000000..9d3cf9d
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ca.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ca",{
+	"alt":"Text alternatiu",
+	"lockRatio":"Bloqueja les proporcions",
+	"vSpace":"Espaiat vert.",
+	"hSpace":"Espaiat horit.",
+	"border":"Vora"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/cs.js b/plugins/ckeditor4/base64image/lang/cs.js
new file mode 100644
index 0000000..c0838dd
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/cs.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","cs",{
+	"alt":"Alternativní text",
+	"lockRatio":"Zámek",
+	"vSpace":"Vertikální mezera",
+	"hSpace":"Horizontální mezera",
+	"border":"Okraje"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/cy.js b/plugins/ckeditor4/base64image/lang/cy.js
new file mode 100644
index 0000000..0d93168
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/cy.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","cy",{
+	"alt":"Testun Amgen",
+	"lockRatio":"Cloi Cymhareb",
+	"vSpace":"BwlchF",
+	"hSpace":"BwlchLl",
+	"border":"Ymyl"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/da.js b/plugins/ckeditor4/base64image/lang/da.js
new file mode 100644
index 0000000..42190f7
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/da.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","da",{
+	"alt":"Alternativ tekst",
+	"lockRatio":"Lås størrelsesforhold",
+	"vSpace":"Lodret margen",
+	"hSpace":"Vandret margen",
+	"border":"Ramme"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/de.js b/plugins/ckeditor4/base64image/lang/de.js
new file mode 100644
index 0000000..807539e
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/de.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","de",{
+	"alt":"Alternativer Text",
+	"lockRatio":"Größenverhältnis beibehalten",
+	"vSpace":"Vertikal-Abstand",
+	"hSpace":"Horizontal-Abstand",
+	"border":"Rahmen"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/el.js b/plugins/ckeditor4/base64image/lang/el.js
new file mode 100644
index 0000000..d34e372
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/el.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","el",{
+	"alt":"Εναλλακτικό Κείμενο",
+	"lockRatio":"Κλείδωμα Αναλογίας",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Περίγραμμα"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/en-au.js b/plugins/ckeditor4/base64image/lang/en-au.js
new file mode 100644
index 0000000..af9334a
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/en-au.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","en-au",{
+	"alt":"Alternative Text",
+	"lockRatio":"Lock Ratio",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Border"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/en-ca.js b/plugins/ckeditor4/base64image/lang/en-ca.js
new file mode 100644
index 0000000..186508e
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/en-ca.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","en-ca",{
+	"alt":"Alternative Text",
+	"lockRatio":"Lock Ratio",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Border"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/en-gb.js b/plugins/ckeditor4/base64image/lang/en-gb.js
new file mode 100644
index 0000000..b913639
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/en-gb.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","en-gb",{
+	"alt":"Alternative Text",
+	"lockRatio":"Lock Ratio",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Border"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/en.js b/plugins/ckeditor4/base64image/lang/en.js
new file mode 100644
index 0000000..85e2991
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/en.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","en",{
+	"alt":"Alternative Text",
+	"lockRatio":"Lock Ratio",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Border"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/eo.js b/plugins/ckeditor4/base64image/lang/eo.js
new file mode 100644
index 0000000..d33444b
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/eo.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","eo",{
+	"alt":"AnstataÅ­iga Teksto",
+	"lockRatio":"Konservi Proporcion",
+	"vSpace":"Vertikala Spaco",
+	"hSpace":"Horizontala Spaco",
+	"border":"Bordero"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/es.js b/plugins/ckeditor4/base64image/lang/es.js
new file mode 100644
index 0000000..0d45ced
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/es.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","es",{
+	"alt":"Texto Alternativo",
+	"lockRatio":"Proporcional",
+	"vSpace":"Esp.Vert",
+	"hSpace":"Esp.Horiz",
+	"border":"Borde"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/et.js b/plugins/ckeditor4/base64image/lang/et.js
new file mode 100644
index 0000000..ceee085
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/et.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","et",{
+	"alt":"Alternatiivne tekst",
+	"lockRatio":"Lukusta kuvasuhe",
+	"vSpace":"V. vaheruum",
+	"hSpace":"H. vaheruum",
+	"border":"Joon"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/eu.js b/plugins/ckeditor4/base64image/lang/eu.js
new file mode 100644
index 0000000..d12abc2
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/eu.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","eu",{
+	"alt":"Ordezko Testua",
+	"lockRatio":"Erlazioa Blokeatu",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Ertza"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/fa.js b/plugins/ckeditor4/base64image/lang/fa.js
new file mode 100644
index 0000000..d414603
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/fa.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","fa",{
+	"alt":"متن جایگزین",
+	"lockRatio":"قفل کردن نسبت",
+	"vSpace":"فاصلهٴ عمودی",
+	"hSpace":"فاصلهٴ افقی",
+	"border":"لبه"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/fi.js b/plugins/ckeditor4/base64image/lang/fi.js
new file mode 100644
index 0000000..d5f8086
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/fi.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","fi",{
+	"alt":"Vaihtoehtoinen teksti",
+	"lockRatio":"Lukitse suhteet",
+	"vSpace":"Pystytila",
+	"hSpace":"Vaakatila",
+	"border":"Kehys"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/fo.js b/plugins/ckeditor4/base64image/lang/fo.js
new file mode 100644
index 0000000..6fa49c6
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/fo.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","fo",{
+	"alt":"Alternativur tekstur",
+	"lockRatio":"Læs lutfallið",
+	"vSpace":"Vinstri breddi",
+	"hSpace":"Høgri breddi",
+	"border":"Bordi"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/fr-ca.js b/plugins/ckeditor4/base64image/lang/fr-ca.js
new file mode 100644
index 0000000..b5d9209
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/fr-ca.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","fr-ca",{
+	"alt":"Texte alternatif",
+	"lockRatio":"Verrouiller les proportions",
+	"vSpace":"Espacement vertical",
+	"hSpace":"Espacement horizontal",
+	"border":"Bordure"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/fr.js b/plugins/ckeditor4/base64image/lang/fr.js
new file mode 100644
index 0000000..68c9cfa
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/fr.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","fr",{
+	"alt":"Texte de remplacement",
+	"lockRatio":"Conserver les proportions",
+	"vSpace":"Espacement vertical",
+	"hSpace":"Espacement horizontal",
+	"border":"Bordure"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/gl.js b/plugins/ckeditor4/base64image/lang/gl.js
new file mode 100644
index 0000000..67e5aec
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/gl.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","gl",{
+	"alt":"Texto alternativo",
+	"lockRatio":"Proporcional",
+	"vSpace":"Esp.Vert.",
+	"hSpace":"Esp.Horiz.",
+	"border":"Bordo"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/gu.js b/plugins/ckeditor4/base64image/lang/gu.js
new file mode 100644
index 0000000..deb1b9e
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/gu.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","gu",{
+	"alt":"ઑલ્ટર્નટ ટેક્સ્ટ",
+	"lockRatio":"લૉક ગુણોત્તર",
+	"vSpace":"લંબરૂપ જગ્યા",
+	"hSpace":"સમસ્તરીય જગ્યા",
+	"border":"બોર્ડર"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/he.js b/plugins/ckeditor4/base64image/lang/he.js
new file mode 100644
index 0000000..af2fc43
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/he.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","he",{
+	"alt":"טקסט חלופי",
+	"lockRatio":"נעילת היחס",
+	"vSpace":"מרווח אנכי",
+	"hSpace":"מרווח אופקי",
+	"border":"מסגרת"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/hi.js b/plugins/ckeditor4/base64image/lang/hi.js
new file mode 100644
index 0000000..fd6900f
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/hi.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","hi",{
+	"alt":"वैकल्पिक टेक्स्ट",
+	"lockRatio":"लॉक अनुपात",
+	"vSpace":"वर्टिकल स्पेस",
+	"hSpace":"हॉरिज़ॉन्टल स्पेस",
+	"border":"बॉर्डर"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/hr.js b/plugins/ckeditor4/base64image/lang/hr.js
new file mode 100644
index 0000000..3e434f8
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/hr.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","hr",{
+	"alt":"Alternativni tekst",
+	"lockRatio":"Zaključaj odnos",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Okvir"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/hu.js b/plugins/ckeditor4/base64image/lang/hu.js
new file mode 100644
index 0000000..18a16d0
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/hu.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","hu",{
+	"alt":"Buborék szöveg",
+	"lockRatio":"Arány megtartása",
+	"vSpace":"Függ. táv",
+	"hSpace":"Vízsz. táv",
+	"border":"Keret"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/id.js b/plugins/ckeditor4/base64image/lang/id.js
new file mode 100644
index 0000000..596180e
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/id.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","id",{
+	"alt":"Teks alternatif",
+	"lockRatio":"Lock Ratio",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Batas"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/is.js b/plugins/ckeditor4/base64image/lang/is.js
new file mode 100644
index 0000000..b87b08a
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/is.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","is",{
+	"alt":"Baklægur texti",
+	"lockRatio":"Festa stærðarhlutfall",
+	"vSpace":"Hægri bil",
+	"hSpace":"Vinstri bil",
+	"border":"Rammi"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/it.js b/plugins/ckeditor4/base64image/lang/it.js
new file mode 100644
index 0000000..505e080
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/it.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","it",{
+	"alt":"Testo alternativo",
+	"lockRatio":"Blocca rapporto",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Bordo"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ja.js b/plugins/ckeditor4/base64image/lang/ja.js
new file mode 100644
index 0000000..35d6cd1
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ja.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ja",{
+	"alt":"代替テキスト",
+	"lockRatio":"比率を固定",
+	"vSpace":"åž‚ç›´é–“éš”",
+	"hSpace":"水平間隔",
+	"border":"枠線の幅"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ka.js b/plugins/ckeditor4/base64image/lang/ka.js
new file mode 100644
index 0000000..9d9a7fd
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ka.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ka",{
+	"alt":"სანაცვლო ტექსტი",
+	"lockRatio":"პროპორციის შენარჩუნება",
+	"vSpace":"ჰორიზონტალური სივრცე",
+	"hSpace":"ვერტიკალური სივრცე",
+	"border":"ჩარჩო"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/km.js b/plugins/ckeditor4/base64image/lang/km.js
new file mode 100644
index 0000000..77f329d
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/km.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","km",{
+	"alt":"អត្ថបទជំនួស",
+	"lockRatio":"អត្រាឡុក",
+	"vSpace":"VSpace",
+	"hSpace":"គំលាតទទឹង",
+	"border":"ស៊ុម"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ko.js b/plugins/ckeditor4/base64image/lang/ko.js
new file mode 100644
index 0000000..7518cbd
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ko.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ko",{
+	"alt":"이미지 설명",
+	"lockRatio":"비율 유지",
+	"vSpace":"수직여백",
+	"hSpace":"수평여백",
+	"border":"테두리"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ku.js b/plugins/ckeditor4/base64image/lang/ku.js
new file mode 100644
index 0000000..1eb91af
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ku.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ku",{
+	"alt":"جێگرەوەی دەق",
+	"lockRatio":"داخستنی ڕێژه",
+	"vSpace":"بۆشایی ئەستونی",
+	"hSpace":"بۆشایی ئاسۆیی",
+	"border":"پەراوێز"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/lt.js b/plugins/ckeditor4/base64image/lang/lt.js
new file mode 100644
index 0000000..db7c073
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/lt.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","lt",{
+	"alt":"Alternatyvus Tekstas",
+	"lockRatio":"IÅ¡laikyti proporcijÄ…",
+	"vSpace":"Vert.ErdvÄ—",
+	"hSpace":"Hor.ErdvÄ—",
+	"border":"RÄ—melis"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/lv.js b/plugins/ckeditor4/base64image/lang/lv.js
new file mode 100644
index 0000000..800e637
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/lv.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","lv",{
+	"alt":"Alternatīvais teksts",
+	"lockRatio":"Nemainīga Augstuma/Platuma attiecība",
+	"vSpace":"Horizontālā telpa",
+	"hSpace":"Vertikālā telpa",
+	"border":"Rāmis"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/mk.js b/plugins/ckeditor4/base64image/lang/mk.js
new file mode 100644
index 0000000..2697468
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/mk.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","mk",{
+	"alt":"Alternative Text",
+	"lockRatio":"Lock Ratio",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Border"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/mn.js b/plugins/ckeditor4/base64image/lang/mn.js
new file mode 100644
index 0000000..b69b4b6
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/mn.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","mn",{
+	"alt":"Зургийг орлох бичвэр",
+	"lockRatio":"Радио түгжих",
+	"vSpace":"Босоо зай",
+	"hSpace":"Хөндлөн зай",
+	"border":"Хүрээ"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ms.js b/plugins/ckeditor4/base64image/lang/ms.js
new file mode 100644
index 0000000..9e2143b
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ms.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ms",{
+	"alt":"Text Alternatif",
+	"lockRatio":"Tetapkan Nisbah",
+	"vSpace":"Ruang Menegak",
+	"hSpace":"Ruang Melintang",
+	"border":"Border"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/nb.js b/plugins/ckeditor4/base64image/lang/nb.js
new file mode 100644
index 0000000..8c4511d
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/nb.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","nb",{
+	"alt":"Alternativ tekst",
+	"lockRatio":"LÃ¥s forhold",
+	"vSpace":"VMarg",
+	"hSpace":"HMarg",
+	"border":"Ramme"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/nl.js b/plugins/ckeditor4/base64image/lang/nl.js
new file mode 100644
index 0000000..1e3bae1
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/nl.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","nl",{
+	"alt":"Alternatieve tekst",
+	"lockRatio":"Afmetingen vergrendelen",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Rand"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/no.js b/plugins/ckeditor4/base64image/lang/no.js
new file mode 100644
index 0000000..8124e6f
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/no.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","no",{
+	"alt":"Alternativ tekst",
+	"lockRatio":"LÃ¥s forhold",
+	"vSpace":"VMarg",
+	"hSpace":"HMarg",
+	"border":"Ramme"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/pl.js b/plugins/ckeditor4/base64image/lang/pl.js
new file mode 100644
index 0000000..6752acb
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/pl.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","pl",{
+	"alt":"Tekst zastępczy",
+	"lockRatio":"Zablokuj proporcje",
+	"vSpace":"Odstęp pionowy",
+	"hSpace":"Odstęp poziomy",
+	"border":"Obramowanie"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/pt-br.js b/plugins/ckeditor4/base64image/lang/pt-br.js
new file mode 100644
index 0000000..43addff
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/pt-br.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","pt-br",{
+	"alt":"Texto Alternativo",
+	"lockRatio":"Travar Proporções",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Borda"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/pt.js b/plugins/ckeditor4/base64image/lang/pt.js
new file mode 100644
index 0000000..2c829b6
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/pt.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","pt",{
+	"alt":"Texto Alternativo",
+	"lockRatio":"Proporcional",
+	"vSpace":"Esp.Vert",
+	"hSpace":"Esp.Horiz",
+	"border":"Limite"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ro.js b/plugins/ckeditor4/base64image/lang/ro.js
new file mode 100644
index 0000000..4c1172d
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ro.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ro",{
+	"alt":"Text alternativ",
+	"lockRatio":"Păstrează proporţiile",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Margine"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ru.js b/plugins/ckeditor4/base64image/lang/ru.js
new file mode 100644
index 0000000..33bdb6c
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ru.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ru",{
+	"alt":"Альтернативный текст",
+	"lockRatio":"Сохранять пропорции",
+	"vSpace":"Вертик. отступ",
+	"hSpace":"Гориз. отступ",
+	"border":"Граница"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/si.js b/plugins/ckeditor4/base64image/lang/si.js
new file mode 100644
index 0000000..b354d4e
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/si.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","si",{
+	"alt":"විකල්ප ",
+	"lockRatio":"නවතන අනුපාතය ",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"සීමාවවල "
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/sk.js b/plugins/ckeditor4/base64image/lang/sk.js
new file mode 100644
index 0000000..04da313
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/sk.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","sk",{
+	"alt":"Alternatívny text",
+	"lockRatio":"Pomer zámky",
+	"vSpace":"V-medzera",
+	"hSpace":"H-medzera",
+	"border":"Rám (border)"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/sl.js b/plugins/ckeditor4/base64image/lang/sl.js
new file mode 100644
index 0000000..649168e
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/sl.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","sl",{
+	"alt":"Nadomestno besedilo",
+	"lockRatio":"Zakleni razmerje",
+	"vSpace":"Navpični razmik",
+	"hSpace":"Vodoravni razmik",
+	"border":"Obroba"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/sq.js b/plugins/ckeditor4/base64image/lang/sq.js
new file mode 100644
index 0000000..71e2e34
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/sq.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","sq",{
+	"alt":"Tekst Alternativ",
+	"lockRatio":"Mbyll Racionin",
+	"vSpace":"Hapësira Vertikale",
+	"hSpace":"HSpace",
+	"border":"Korniza"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/sr-latn.js b/plugins/ckeditor4/base64image/lang/sr-latn.js
new file mode 100644
index 0000000..5a62e28
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/sr-latn.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","sr-latn",{
+	"alt":"Alternativni tekst",
+	"lockRatio":"Zaključaj odnos",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Okvir"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/sr.js b/plugins/ckeditor4/base64image/lang/sr.js
new file mode 100644
index 0000000..461ff07
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/sr.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","sr",{
+	"alt":"Алтернативни текст",
+	"lockRatio":"Закључај однос",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"Оквир"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/sv.js b/plugins/ckeditor4/base64image/lang/sv.js
new file mode 100644
index 0000000..d619fe7
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/sv.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","sv",{
+	"alt":"Alternativ text",
+	"lockRatio":"Lås höjd/bredd förhållanden",
+	"vSpace":"Vert. marginal",
+	"hSpace":"Horis. marginal",
+	"border":"Kant"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/th.js b/plugins/ckeditor4/base64image/lang/th.js
new file mode 100644
index 0000000..d78d78d
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/th.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","th",{
+	"alt":"คำประกอบรูปภาพ",
+	"lockRatio":"กำหนดอัตราส่วน กว้าง-สูง แบบคงที่",
+	"vSpace":"ระยะแนวตั้ง",
+	"hSpace":"ระยะแนวนอน",
+	"border":"ขนาดขอบรูป"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/tr.js b/plugins/ckeditor4/base64image/lang/tr.js
new file mode 100644
index 0000000..e9b665b
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/tr.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","tr",{
+	"alt":"Alternatif Yazı",
+	"lockRatio":"Oranı Kilitle",
+	"vSpace":"Dikey BoÅŸluk",
+	"hSpace":"Yatay BoÅŸluk",
+	"border":"Kenar"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/ug.js b/plugins/ckeditor4/base64image/lang/ug.js
new file mode 100644
index 0000000..000ce1c
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/ug.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","ug",{
+	"alt":"تېكىست ئالماشتۇر",
+	"lockRatio":"نىسبەتنى قۇلۇپلا",
+	"vSpace":"بويىغا ئارىلىقى",
+	"hSpace":"توغرىسىغا ئارىلىقى",
+	"border":"گىرۋەك چوڭلۇقى"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/uk.js b/plugins/ckeditor4/base64image/lang/uk.js
new file mode 100644
index 0000000..a43cbbc
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/uk.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","uk",{
+	"alt":"Альтернативний текст",
+	"lockRatio":"Зберегти пропорції",
+	"vSpace":"Верт. відступ",
+	"hSpace":"Гориз. відступ",
+	"border":"Рамка"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/vi.js b/plugins/ckeditor4/base64image/lang/vi.js
new file mode 100644
index 0000000..4e5ec38
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/vi.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","vi",{
+	"alt":"Chú thích ảnh",
+	"lockRatio":"Giữ nguyên tỷ lệ",
+	"vSpace":"Khoảng đệm dọc",
+	"hSpace":"Khoảng đệm ngang",
+	"border":"Đường viền"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/zh-cn.js b/plugins/ckeditor4/base64image/lang/zh-cn.js
new file mode 100644
index 0000000..2d09c52
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/zh-cn.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","zh-cn",{
+	"alt":"替换文本",
+	"lockRatio":"锁定比例",
+	"vSpace":"垂直间距",
+	"hSpace":"水平间距",
+	"border":"边框大小"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/lang/zh.js b/plugins/ckeditor4/base64image/lang/zh.js
new file mode 100644
index 0000000..72c3f24
--- /dev/null
+++ b/plugins/ckeditor4/base64image/lang/zh.js
@@ -0,0 +1,12 @@
+/*
+Translation from original CKEDITOR language files:
+Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang("base64image","zh",{
+	"alt":"替代文字",
+	"lockRatio":"固定比例",
+	"vSpace":"VSpace",
+	"hSpace":"HSpace",
+	"border":"框線"
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/base64image/plugin.js b/plugins/ckeditor4/base64image/plugin.js
new file mode 100644
index 0000000..1e3c989
--- /dev/null
+++ b/plugins/ckeditor4/base64image/plugin.js
@@ -0,0 +1,57 @@
+/*
+ * Base64Image Plugin for CKEditor (http://github.com/nmmf/base64image)
+ * Created by ALL-INKL.COM - Neue Medien M�nnich - 04. Feb 2014
+ * Licensed under the terms of GPL, LGPL and MPL licenses.
+ */
+CKEDITOR.plugins.add("base64image", {
+	lang 	: 	["af","ar","bg","bn","bs","ca","cs","cy","da","de","el","en","en-au","en-ca","en-gb","eo","es","et","eu","fa","fi","fo","fr","fr-ca","gl","gu","he","hi","hr","hu","id","is","it","ja","ka","km","ko","ku","lt","lv","mk","mn","ms","nb","nl","no","pl","pt","pt-br","ro","ru","si","sk","sl","sq","sr","sr-latn","sv","th","tr","ug","uk","vi","zh","zh-cn"],
+	requires: 	"dialog",
+	icons	:	"base64image",
+	hidpi	:	true,
+    init	: 	function(editor){
+					var pluginName = 'base64imageDialog';
+					
+					editor.ui.addButton("base64image", {
+						label: editor.lang.common.image,
+						command: pluginName,
+						toolbar: "insert"
+					});
+					CKEDITOR.dialog.add(pluginName, this.path+"dialogs/base64image.js");
+					
+					var allowed = 'img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}',
+						required = 'img[alt,src]';
+					
+					editor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName, {
+						allowedContent: allowed,
+						requiredContent: required,
+						contentTransformations: [
+							[ 'img{width}: sizeToStyle', 'img[width]: sizeToAttribute' ],
+							[ 'img{float}: alignmentToStyle', 'img[align]: alignmentToAttribute' ]
+						]
+					} ) );
+					editor.on("doubleclick", function(evt){
+						if(evt.data.element && !evt.data.element.isReadOnly() && evt.data.element.getName() === "img") {
+							evt.data.dialog = pluginName;
+							editor.getSelection().selectElement(evt.data.element);
+						}
+					});
+					if(editor.addMenuItem) {
+						editor.addMenuGroup("base64imageGroup");
+						editor.addMenuItem("base64imageItem", {
+							label: editor.lang.common.image,
+							icon: this.path+"icons/base64image.png",
+							command: pluginName,
+							group: "base64imageGroup"
+						});
+					}
+					if(editor.contextMenu) {
+						editor.contextMenu.addListener(function(element, selection) {
+							if(element && element.getName() === "img") {
+								editor.getSelection().selectElement(element);
+								return { base64imageItem: CKEDITOR.TRISTATE_ON };
+							}
+							return null;
+						});
+					}
+				}
+});
diff --git a/plugins/ckeditor4/ckawesome/dialogs/ckawesome.css b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.css
new file mode 100644
index 0000000..3ccc7e8
--- /dev/null
+++ b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.css
@@ -0,0 +1,5 @@
+div.cke_dialog_ui_input_select, .cke_dialog_ui_input_select{ width: 100%; }
+.select2-drop, .select2-dropdown, .select2-container{ z-index: 100000 !important; }
+.select2-dropdown{ 	margin-left: 8px; }
+.select2-chosen{ margin-top: 7px; }
+.select2-results__option span{ color: #000; font-size: 12px !important; font-family: Arial; display:block; white-space: nowrap; overflow:hidden; }
\ No newline at end of file
diff --git a/plugins/ckeditor4/ckawesome/dialogs/ckawesome.js b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.js
new file mode 100644
index 0000000..f7065a1
--- /dev/null
+++ b/plugins/ckeditor4/ckawesome/dialogs/ckawesome.js
@@ -0,0 +1,149 @@
+
+CKEDITOR.dialog.add('ckawesomeDialog', function( editor ) {
+	function getCKAwesomeIcons(selectList ){
+	     var result = [];
+	     var scriptUrl = editor.fontawesomePath;
+	     
+	     $.ajax({
+	        url: scriptUrl,
+	        type: 'get',
+	        dataType: 'html',
+	        async: false,
+	        success: function(response) {
+	        	var excludeStyles = [".fa.",".fa",".fa-lg",".fa-2x",".fa-3x",".fa-4x",".fa-5x",".fa-fw",".fa-ul",".fa-ul>",".fa-li",".fa-border",".fa-pull-left",".fa-pull-right",".fa-spin",".fa-pulse",".fa-rotate-90",".fa-rotate-180",".fa-rotate-270",".fa-flip-horizontal",".fa-flip-vertical",".fa-stack",".fa-stack-1x",".fa-stack-2x",".fa-inverse"];
+	        	var regxstyles = new RegExp(/\.[a-zA-Z_][\w-_]*[^\.\s\{#:\,;]/,"g" );
+	        	var styles = response.match(regxstyles);
+	        	styles.sort();
+	        	$.each(styles, function( index, value ) {
+	        		var xstart=value.substring(0, 3).substring(1);
+	        		if (xstart != 'fa' || excludeStyles.indexOf(value) > 0){ return; }
+	        		value = value.substring(1);
+	        		selectList.add(value, value);
+	        	})
+
+	        },
+	        error: function (jqXHR, exception) {
+	            alert("Error loading Font Awesome css: \n" + scriptUrl);
+	        },
+	     });
+	}
+
+	function getSelectionOptions(selectList, start, inc, many){
+	    var result = [];
+	    var val = start; 
+	    
+	    result.push(start);
+	    
+	    many = many > 0 ? many : 5;
+	    for(var i = 0; i < many; i++){
+	    	val += inc;
+	    	result.push(val);
+	    }
+	    
+	    $.each(result, function( index, value ) {
+	   		selectList.add(value, value);
+	   	})
+	}
+
+	function formatCKAwesome (icon) {
+	  if (!icon.id) { return icon.text; }
+	  var text = icon.text.replace(/fa-|\.|\-/gi, " ");
+	  var icon = $('<span class="ckawesome_options"><i class="fa ' + icon.element.value + ' fa-fw"></i> ' + text + "</span>");
+	  return icon;
+	};
+	
+    return {
+        title: 'Insert CKAwesome',
+        minWidth: 200,
+        minHeight: 200,
+
+        contents: [
+            {
+                id: 'options',
+                label: 'Basic Settings',
+                elements: [
+                    {
+					    type: 'select',
+					    id: 'ckawesomebox',
+					    label: 'Select font Awesome',
+					    validate: CKEDITOR.dialog.validate.notEmpty( "Font Awesome field cannot be empty." ),
+					    items: [[ editor.lang.common.notSet, '' ]],
+					    onLoad: function () {
+						   	getCKAwesomeIcons(this);
+						   	var selectbx = $('#' + this.getInputElement().getAttribute('id'));  
+						   	$(selectbx).select2({ width: "100%", templateResult: formatCKAwesome, templateSelection: formatCKAwesome});
+					    },
+					    onShow: function(){
+					    	var selectbx = $('#' + this.getInputElement().getAttribute('id'));  
+					    	$(selectbx).val('').trigger('change') ;
+					    }
+                    },
+                    {
+                        type: 'select',
+                        id: 'textsize',
+                        label: 'Select  size',
+                        items: [[ editor.lang.common.notSet, '' ]],
+                        onLoad: function (widget) {
+                        	getSelectionOptions(this, 8, 1, 42);
+                        }
+                    },
+                    {   
+                        type: "hbox",
+                        padding: 0,
+                        widths: ["80%", "20%"],
+                        children: [
+                            {
+                                id: 'fontcolor',
+                                type: 'text',
+                                label: 'Select color',
+                                onChange: function( element ) {
+                                	var idEl = $('#' +this.getInputElement().getAttribute('id'));
+                                	idEl.css("background-color", idEl.val());
+                                },
+                                onKeyUp: function( element ) {
+                                	var idEl = $('#' + this.getInputElement().getAttribute('id'));
+                                	idEl.css("background-color", idEl.val());
+                                },
+        					    onShow: function(){
+        					    	var idEl = $('#' + this.getInputElement().getAttribute('id'));  
+                                	idEl.css("background-color", "");
+        					    }
+                            },
+                            {
+                                type: "button",
+                                id: "fontcolorChooser",
+                                "class": "colorChooser",
+                                label: "Color",
+                                style: "margin-left: 8px",
+                                onLoad: function () {
+                                    this.getElement().getParent().setStyle("vertical-align", "bottom")
+                                },
+                                onClick: function () {
+                                    editor.getColorFromDialog(function (color) {
+                                        color && this.getDialog().getContentElement("options", "fontcolor").setValue( color );
+                                        this.focus()
+                                    }, this)
+                                }
+                            }
+                        ]
+                    }
+                ]
+            },
+        ],
+        onOk: function() {
+            var dialog = this;
+
+            var cka = editor.document.createElement( 'span' );
+            var cka_size = dialog.getValueOf( 'options', 'textsize' );
+            var cka_color = dialog.getValueOf( 'options', 'fontcolor' );
+            var cka_class = "fa fa-fw " + dialog.getValueOf( 'options', 'ckawesomebox' );
+            var cka_style = ( cka_size != '' ? 'font-size: '+cka_size+'px;' : '' ) + ( cka_color != '' ? 'color: '+cka_color+';' : '' ) ;
+            
+            cka.setAttribute( 'class', cka_class );
+            if ( cka_style ) cka.setAttribute( 'style', cka_style );
+            
+            editor.insertElement( cka );
+        }
+    };
+});
+
diff --git a/plugins/ckeditor4/ckawesome/icons/ckawesome.png b/plugins/ckeditor4/ckawesome/icons/ckawesome.png
new file mode 100644
index 0000000000000000000000000000000000000000..479af143bf2dcdfb595df72fc6a1834744f94bc0
GIT binary patch
literal 1523
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*9U+m?bhpB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+*
zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn
zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV
z#Ms10N5ROz&_Lh7P~Xr%*U-Ysz|6|TSOE%@fVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj
z%k|2Q_413-^$jg8E%gnI^o@*kfhu&1EAvVcD|GXUm0>2hq!uR^WfqiV=I1GZOiWD5
zFD<cE0=g99h1>$Tv3bSNU;+l1ennz|zM-B0$V)JVzP|XC=H|jx7ncO3BHWAB;Np<V
zf>iyW)Z+ZoqGVvir744~DzI`cN=+=uFAB-e&w+(vKt_H^esM;Afr4|eDOi=Sua#$B
zaY<rca;m3`trAe5US?*Bm64OFxw(slrJIqHiJ_sZnT4~lv#X1XrK5?ln}La;B}}hN
zesXDUYF-IUZwf-MBTl`b1dv+*wAm%KD6=dz#jPkmR{`u%t4!Q(F~?~hRBsAyw^-oR
zs}FRHJ}5eoq8BCvOfw)RJh1{f@Z_GF2TbEdz{Jcs?b|d42Btz!7srr_TXTYZJwgH{
zY`@<#e}DF~y7301jX@WAxP&gX2y$%<a}?m%7PLfuMMiL5(Zxls3TvaLsOs{>iYT%=
zPTVY*wKO8?NlHS~GlN-X^;Yk{-+MPZoO$zv4g7rlzxRHhTYaulKDz76<ZZ7Owf$6m
zUASP&t4}+lnd5I)zt`PT7U%B$TXn}r)tH@y(psgCt-bqZ-}P_{wzz8D(s|u~!5UpP
zzWr6d|Gs;3$}L;5JNe7c2Zt|daB3C^J-fm&<*N$E(i>|u+S4>!B%L@a0=T^^9Sb`n
zWNKTUo-`Mj!q}4Iw_)=-o1%}eK7RI{di4H{b#5hdEN?~%%lb`{f4pju_{u3pi&#qo
zjy<@T5ydbipjBYf)TJA8c|vo~UcB(($e%OMect+1Y<PY6$#FX|og42mZ+Waargp#e
zc-Zvh`7wG&et-1HwVC|Ri060T9QnW$y$wsf+zpakmK$ta7RSvJQrR8C*ZAbT#v%Q7
zKkZdq$3*r>$WBj`T48v`Hj-7r$*x8~szJ^E%x4Yb3tyV<MDnjH;5n^azUh5xo<P0j
zwvf6_BLAbG@H0MVlKb;ajHAU~<v(9z`<oBba(-;TxTmckQA%=U$McX|eawfqY_{d^
zOFnGmE4d@z@#NX!>4JNY*j250`7b8rm$%l;6~&hRSHs@+PM!KfJ?)v;Ygxa_i+!I`
z7A|XR){;K0EYK%epzXZ*Y`XrJC30VGe7q_;W1Yj{g;gf9H*7Eb*IAf<gX^1o&X!f*
zLnF9@Jm<0IXSz59&+}XExkg7Ne99?N!3{a=l9#6>Rm|d^S0;0MlaI2v#n(5#rk#{&
r?)dMuw)<<B*aT(Sn?C<S_p?ecgeyqdpN}@S1r@`du6{1-oD!M<X9PXb

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/ckawesome/plugin.js b/plugins/ckeditor4/ckawesome/plugin.js
new file mode 100644
index 0000000..dabb9ef
--- /dev/null
+++ b/plugins/ckeditor4/ckawesome/plugin.js
@@ -0,0 +1,33 @@
+/**
+ *   CKAwesome 
+ *   =========
+ *   http://blackdevelop.com/io/ckawesome/
+ *   
+ *   Copyright (C) 2017 by Blackdevelop.com
+ *   Licence under GNU GPL v3.
+ */
+
+CKEDITOR.on('instanceReady',function () { CKEDITOR.document.appendStyleSheet(CKEDITOR.plugins.getPath('ckawesome') + 'resources/select2/select2.full.min.css');   });
+CKEDITOR.on('instanceReady',function () { CKEDITOR.document.appendStyleSheet(CKEDITOR.plugins.getPath('ckawesome') + 'dialogs/ckawesome.css');   });
+CKEDITOR.scriptLoader.load(CKEDITOR.plugins.getPath('ckawesome') + 'resources/select2/select2.full.min.js');
+CKEDITOR.dtd.$removeEmpty.span = 0;
+CKEDITOR.plugins.add('ckawesome', {
+    requires: 'colordialog',
+    icons: 'ckawesome',
+    
+    init: function(editor) {
+    	var config = editor.config;
+    	editor.fontawesomePath = config.fontawesomePath ? config.fontawesomePath : CKEDITOR.plugins.getPath('ckawesome') + 'fontawesome/css/font-awesome.min.css';
+
+    	CKEDITOR.document.appendStyleSheet(editor.fontawesomePath);
+    	editor.addContentsCss(editor.fontawesomePath);
+    	
+        CKEDITOR.dialog.add('ckawesomeDialog', this.path + 'dialogs/ckawesome.js');
+        editor.addCommand( 'ckawesome', new CKEDITOR.dialogCommand( 'ckawesomeDialog', { allowedContent: 'span[class,style]{color,font-size}(*);' }));
+        editor.ui.addButton( 'ckawesome', {
+              label: 'Insert CKAwesome',
+              command: 'ckawesome',
+              toolbar: 'insert',
+        });
+    }
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css
new file mode 100644
index 0000000..76de04d
--- /dev/null
+++ b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.css
@@ -0,0 +1 @@
+.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;height:1px !important;margin:-1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__placeholder{color:#999;margin-top:5px;float:left}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb}
diff --git a/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js
new file mode 100644
index 0000000..684edf3
--- /dev/null
+++ b/plugins/ckeditor4/ckawesome/resources/select2/select2.full.min.js
@@ -0,0 +1,3 @@
+/*! Select2 4.0.3 | https://github.com/select2/select2/blob/master/LICENSE.md */!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b=function(){if(a&&a.fn&&a.fn.select2&&a.fn.select2.amd)var b=a.fn.select2.amd;var b;return function(){if(!b||!b.requirejs){b?c=b:b={};var a,c,d;!function(b){function e(a,b){return u.call(a,b)}function f(a,b){var c,d,e,f,g,h,i,j,k,l,m,n=b&&b.split("/"),o=s.map,p=o&&o["*"]||{};if(a&&"."===a.charAt(0))if(b){for(a=a.split("/"),g=a.length-1,s.nodeIdCompat&&w.test(a[g])&&(a[g]=a[g].replace(w,"")),a=n.slice(0,n.length-1).concat(a),k=0;k<a.length;k+=1)if(m=a[k],"."===m)a.splice(k,1),k-=1;else if(".."===m){if(1===k&&(".."===a[2]||".."===a[0]))break;k>0&&(a.splice(k-1,2),k-=2)}a=a.join("/")}else 0===a.indexOf("./")&&(a=a.substring(2));if((n||p)&&o){for(c=a.split("/"),k=c.length;k>0;k-=1){if(d=c.slice(0,k).join("/"),n)for(l=n.length;l>0;l-=1)if(e=o[n.slice(0,l).join("/")],e&&(e=e[d])){f=e,h=k;break}if(f)break;!i&&p&&p[d]&&(i=p[d],j=k)}!f&&i&&(f=i,h=j),f&&(c.splice(0,h,f),a=c.join("/"))}return a}function g(a,c){return function(){var d=v.call(arguments,0);return"string"!=typeof d[0]&&1===d.length&&d.push(null),n.apply(b,d.concat([a,c]))}}function h(a){return function(b){return f(b,a)}}function i(a){return function(b){q[a]=b}}function j(a){if(e(r,a)){var c=r[a];delete r[a],t[a]=!0,m.apply(b,c)}if(!e(q,a)&&!e(t,a))throw new Error("No "+a);return q[a]}function k(a){var b,c=a?a.indexOf("!"):-1;return c>-1&&(b=a.substring(0,c),a=a.substring(c+1,a.length)),[b,a]}function l(a){return function(){return s&&s.config&&s.config[a]||{}}}var m,n,o,p,q={},r={},s={},t={},u=Object.prototype.hasOwnProperty,v=[].slice,w=/\.js$/;o=function(a,b){var c,d=k(a),e=d[0];return a=d[1],e&&(e=f(e,b),c=j(e)),e?a=c&&c.normalize?c.normalize(a,h(b)):f(a,b):(a=f(a,b),d=k(a),e=d[0],a=d[1],e&&(c=j(e))),{f:e?e+"!"+a:a,n:a,pr:e,p:c}},p={require:function(a){return g(a)},exports:function(a){var b=q[a];return"undefined"!=typeof b?b:q[a]={}},module:function(a){return{id:a,uri:"",exports:q[a],config:l(a)}}},m=function(a,c,d,f){var h,k,l,m,n,s,u=[],v=typeof d;if(f=f||a,"undefined"===v||"function"===v){for(c=!c.length&&d.length?["require","exports","module"]:c,n=0;n<c.length;n+=1)if(m=o(c[n],f),k=m.f,"require"===k)u[n]=p.require(a);else if("exports"===k)u[n]=p.exports(a),s=!0;else if("module"===k)h=u[n]=p.module(a);else if(e(q,k)||e(r,k)||e(t,k))u[n]=j(k);else{if(!m.p)throw new Error(a+" missing "+k);m.p.load(m.n,g(f,!0),i(k),{}),u[n]=q[k]}l=d?d.apply(q[a],u):void 0,a&&(h&&h.exports!==b&&h.exports!==q[a]?q[a]=h.exports:l===b&&s||(q[a]=l))}else a&&(q[a]=d)},a=c=n=function(a,c,d,e,f){if("string"==typeof a)return p[a]?p[a](c):j(o(a,c).f);if(!a.splice){if(s=a,s.deps&&n(s.deps,s.callback),!c)return;c.splice?(a=c,c=d,d=null):a=b}return c=c||function(){},"function"==typeof d&&(d=e,e=f),e?m(b,a,c,d):setTimeout(function(){m(b,a,c,d)},4),n},n.config=function(a){return n(a)},a._defined=q,d=function(a,b,c){if("string"!=typeof a)throw new Error("See almond README: incorrect module build, no module name");b.splice||(c=b,b=[]),e(q,a)||e(r,a)||(r[a]=[a,b,c])},d.amd={jQuery:!0}}(),b.requirejs=a,b.require=c,b.define=d}}(),b.define("almond",function(){}),b.define("jquery",[],function(){var b=a||$;return null==b&&console&&console.error&&console.error("Select2: An instance of jQuery or a jQuery-compatible library was not found. Make sure that you are including jQuery before Select2 on your web page."),b}),b.define("select2/utils",["jquery"],function(a){function b(a){var b=a.prototype,c=[];for(var d in b){var e=b[d];"function"==typeof e&&"constructor"!==d&&c.push(d)}return c}var c={};c.Extend=function(a,b){function c(){this.constructor=a}var d={}.hasOwnProperty;for(var e in b)d.call(b,e)&&(a[e]=b[e]);return c.prototype=b.prototype,a.prototype=new c,a.__super__=b.prototype,a},c.Decorate=function(a,c){function d(){var b=Array.prototype.unshift,d=c.prototype.constructor.length,e=a.prototype.constructor;d>0&&(b.call(arguments,a.prototype.constructor),e=c.prototype.constructor),e.apply(this,arguments)}function e(){this.constructor=d}var f=b(c),g=b(a);c.displayName=a.displayName,d.prototype=new e;for(var h=0;h<g.length;h++){var i=g[h];d.prototype[i]=a.prototype[i]}for(var j=(function(a){var b=function(){};a in d.prototype&&(b=d.prototype[a]);var e=c.prototype[a];return function(){var a=Array.prototype.unshift;return a.call(arguments,b),e.apply(this,arguments)}}),k=0;k<f.length;k++){var l=f[k];d.prototype[l]=j(l)}return d};var d=function(){this.listeners={}};return d.prototype.on=function(a,b){this.listeners=this.listeners||{},a in this.listeners?this.listeners[a].push(b):this.listeners[a]=[b]},d.prototype.trigger=function(a){var b=Array.prototype.slice,c=b.call(arguments,1);this.listeners=this.listeners||{},null==c&&(c=[]),0===c.length&&c.push({}),c[0]._type=a,a in this.listeners&&this.invoke(this.listeners[a],b.call(arguments,1)),"*"in this.listeners&&this.invoke(this.listeners["*"],arguments)},d.prototype.invoke=function(a,b){for(var c=0,d=a.length;d>c;c++)a[c].apply(this,b)},c.Observable=d,c.generateChars=function(a){for(var b="",c=0;a>c;c++){var d=Math.floor(36*Math.random());b+=d.toString(36)}return b},c.bind=function(a,b){return function(){a.apply(b,arguments)}},c._convertData=function(a){for(var b in a){var c=b.split("-"),d=a;if(1!==c.length){for(var e=0;e<c.length;e++){var f=c[e];f=f.substring(0,1).toLowerCase()+f.substring(1),f in d||(d[f]={}),e==c.length-1&&(d[f]=a[b]),d=d[f]}delete a[b]}}return a},c.hasScroll=function(b,c){var d=a(c),e=c.style.overflowX,f=c.style.overflowY;return e!==f||"hidden"!==f&&"visible"!==f?"scroll"===e||"scroll"===f?!0:d.innerHeight()<c.scrollHeight||d.innerWidth()<c.scrollWidth:!1},c.escapeMarkup=function(a){var b={"\\":"&#92;","&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#47;"};return"string"!=typeof a?a:String(a).replace(/[&<>"'\/\\]/g,function(a){return b[a]})},c.appendMany=function(b,c){if("1.7"===a.fn.jquery.substr(0,3)){var d=a();a.map(c,function(a){d=d.add(a)}),c=d}b.append(c)},c}),b.define("select2/results",["jquery","./utils"],function(a,b){function c(a,b,d){this.$element=a,this.data=d,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<ul class="select2-results__options" role="tree"></ul>');return this.options.get("multiple")&&b.attr("aria-multiselectable","true"),this.$results=b,b},c.prototype.clear=function(){this.$results.empty()},c.prototype.displayMessage=function(b){var c=this.options.get("escapeMarkup");this.clear(),this.hideLoading();var d=a('<li role="treeitem" aria-live="assertive" class="select2-results__option"></li>'),e=this.options.get("translations").get(b.message);d.append(c(e(b.args))),d[0].className+=" select2-results__message",this.$results.append(d)},c.prototype.hideMessages=function(){this.$results.find(".select2-results__message").remove()},c.prototype.append=function(a){this.hideLoading();var b=[];if(null==a.results||0===a.results.length)return void(0===this.$results.children().length&&this.trigger("results:message",{message:"noResults"}));a.results=this.sort(a.results);for(var c=0;c<a.results.length;c++){var d=a.results[c],e=this.option(d);b.push(e)}this.$results.append(b)},c.prototype.position=function(a,b){var c=b.find(".select2-results");c.append(a)},c.prototype.sort=function(a){var b=this.options.get("sorter");return b(a)},c.prototype.highlightFirstItem=function(){var a=this.$results.find(".select2-results__option[aria-selected]"),b=a.filter("[aria-selected=true]");b.length>0?b.first().trigger("mouseenter"):a.first().trigger("mouseenter"),this.ensureHighlightVisible()},c.prototype.setClasses=function(){var b=this;this.data.current(function(c){var d=a.map(c,function(a){return a.id.toString()}),e=b.$results.find(".select2-results__option[aria-selected]");e.each(function(){var b=a(this),c=a.data(this,"data"),e=""+c.id;null!=c.element&&c.element.selected||null==c.element&&a.inArray(e,d)>-1?b.attr("aria-selected","true"):b.attr("aria-selected","false")})})},c.prototype.showLoading=function(a){this.hideLoading();var b=this.options.get("translations").get("searching"),c={disabled:!0,loading:!0,text:b(a)},d=this.option(c);d.className+=" loading-results",this.$results.prepend(d)},c.prototype.hideLoading=function(){this.$results.find(".loading-results").remove()},c.prototype.option=function(b){var c=document.createElement("li");c.className="select2-results__option";var d={role:"treeitem","aria-selected":"false"};b.disabled&&(delete d["aria-selected"],d["aria-disabled"]="true"),null==b.id&&delete d["aria-selected"],null!=b._resultId&&(c.id=b._resultId),b.title&&(c.title=b.title),b.children&&(d.role="group",d["aria-label"]=b.text,delete d["aria-selected"]);for(var e in d){var f=d[e];c.setAttribute(e,f)}if(b.children){var g=a(c),h=document.createElement("strong");h.className="select2-results__group";a(h);this.template(b,h);for(var i=[],j=0;j<b.children.length;j++){var k=b.children[j],l=this.option(k);i.push(l)}var m=a("<ul></ul>",{"class":"select2-results__options select2-results__options--nested"});m.append(i),g.append(h),g.append(m)}else this.template(b,c);return a.data(c,"data",b),c},c.prototype.bind=function(b,c){var d=this,e=b.id+"-results";this.$results.attr("id",e),b.on("results:all",function(a){d.clear(),d.append(a.data),b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("results:append",function(a){d.append(a.data),b.isOpen()&&d.setClasses()}),b.on("query",function(a){d.hideMessages(),d.showLoading(a)}),b.on("select",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("unselect",function(){b.isOpen()&&(d.setClasses(),d.highlightFirstItem())}),b.on("open",function(){d.$results.attr("aria-expanded","true"),d.$results.attr("aria-hidden","false"),d.setClasses(),d.ensureHighlightVisible()}),b.on("close",function(){d.$results.attr("aria-expanded","false"),d.$results.attr("aria-hidden","true"),d.$results.removeAttr("aria-activedescendant")}),b.on("results:toggle",function(){var a=d.getHighlightedResults();0!==a.length&&a.trigger("mouseup")}),b.on("results:select",function(){var a=d.getHighlightedResults();if(0!==a.length){var b=a.data("data");"true"==a.attr("aria-selected")?d.trigger("close",{}):d.trigger("select",{data:b})}}),b.on("results:previous",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a);if(0!==c){var e=c-1;0===a.length&&(e=0);var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top,h=f.offset().top,i=d.$results.scrollTop()+(h-g);0===e?d.$results.scrollTop(0):0>h-g&&d.$results.scrollTop(i)}}),b.on("results:next",function(){var a=d.getHighlightedResults(),b=d.$results.find("[aria-selected]"),c=b.index(a),e=c+1;if(!(e>=b.length)){var f=b.eq(e);f.trigger("mouseenter");var g=d.$results.offset().top+d.$results.outerHeight(!1),h=f.offset().top+f.outerHeight(!1),i=d.$results.scrollTop()+h-g;0===e?d.$results.scrollTop(0):h>g&&d.$results.scrollTop(i)}}),b.on("results:focus",function(a){a.element.addClass("select2-results__option--highlighted")}),b.on("results:message",function(a){d.displayMessage(a)}),a.fn.mousewheel&&this.$results.on("mousewheel",function(a){var b=d.$results.scrollTop(),c=d.$results.get(0).scrollHeight-b+a.deltaY,e=a.deltaY>0&&b-a.deltaY<=0,f=a.deltaY<0&&c<=d.$results.height();e?(d.$results.scrollTop(0),a.preventDefault(),a.stopPropagation()):f&&(d.$results.scrollTop(d.$results.get(0).scrollHeight-d.$results.height()),a.preventDefault(),a.stopPropagation())}),this.$results.on("mouseup",".select2-results__option[aria-selected]",function(b){var c=a(this),e=c.data("data");return"true"===c.attr("aria-selected")?void(d.options.get("multiple")?d.trigger("unselect",{originalEvent:b,data:e}):d.trigger("close",{})):void d.trigger("select",{originalEvent:b,data:e})}),this.$results.on("mouseenter",".select2-results__option[aria-selected]",function(b){var c=a(this).data("data");d.getHighlightedResults().removeClass("select2-results__option--highlighted"),d.trigger("results:focus",{data:c,element:a(this)})})},c.prototype.getHighlightedResults=function(){var a=this.$results.find(".select2-results__option--highlighted");return a},c.prototype.destroy=function(){this.$results.remove()},c.prototype.ensureHighlightVisible=function(){var a=this.getHighlightedResults();if(0!==a.length){var b=this.$results.find("[aria-selected]"),c=b.index(a),d=this.$results.offset().top,e=a.offset().top,f=this.$results.scrollTop()+(e-d),g=e-d;f-=2*a.outerHeight(!1),2>=c?this.$results.scrollTop(0):(g>this.$results.outerHeight()||0>g)&&this.$results.scrollTop(f)}},c.prototype.template=function(b,c){var d=this.options.get("templateResult"),e=this.options.get("escapeMarkup"),f=d(b,c);null==f?c.style.display="none":"string"==typeof f?c.innerHTML=e(f):a(c).append(f)},c}),b.define("select2/keys",[],function(){var a={BACKSPACE:8,TAB:9,ENTER:13,SHIFT:16,CTRL:17,ALT:18,ESC:27,SPACE:32,PAGE_UP:33,PAGE_DOWN:34,END:35,HOME:36,LEFT:37,UP:38,RIGHT:39,DOWN:40,DELETE:46};return a}),b.define("select2/selection/base",["jquery","../utils","../keys"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,b.Observable),d.prototype.render=function(){var b=a('<span class="select2-selection" role="combobox"  aria-haspopup="true" aria-expanded="false"></span>');return this._tabindex=0,null!=this.$element.data("old-tabindex")?this._tabindex=this.$element.data("old-tabindex"):null!=this.$element.attr("tabindex")&&(this._tabindex=this.$element.attr("tabindex")),b.attr("title",this.$element.attr("title")),b.attr("tabindex",this._tabindex),this.$selection=b,b},d.prototype.bind=function(a,b){var d=this,e=(a.id+"-container",a.id+"-results");this.container=a,this.$selection.on("focus",function(a){d.trigger("focus",a)}),this.$selection.on("blur",function(a){d._handleBlur(a)}),this.$selection.on("keydown",function(a){d.trigger("keypress",a),a.which===c.SPACE&&a.preventDefault()}),a.on("results:focus",function(a){d.$selection.attr("aria-activedescendant",a.data._resultId)}),a.on("selection:update",function(a){d.update(a.data)}),a.on("open",function(){d.$selection.attr("aria-expanded","true"),d.$selection.attr("aria-owns",e),d._attachCloseHandler(a)}),a.on("close",function(){d.$selection.attr("aria-expanded","false"),d.$selection.removeAttr("aria-activedescendant"),d.$selection.removeAttr("aria-owns"),d.$selection.focus(),d._detachCloseHandler(a)}),a.on("enable",function(){d.$selection.attr("tabindex",d._tabindex)}),a.on("disable",function(){d.$selection.attr("tabindex","-1")})},d.prototype._handleBlur=function(b){var c=this;window.setTimeout(function(){document.activeElement==c.$selection[0]||a.contains(c.$selection[0],document.activeElement)||c.trigger("blur",b)},1)},d.prototype._attachCloseHandler=function(b){a(document.body).on("mousedown.select2."+b.id,function(b){var c=a(b.target),d=c.closest(".select2"),e=a(".select2.select2-container--open");e.each(function(){var b=a(this);if(this!=d[0]){var c=b.data("element");c.select2("close")}})})},d.prototype._detachCloseHandler=function(b){a(document.body).off("mousedown.select2."+b.id)},d.prototype.position=function(a,b){var c=b.find(".selection");c.append(a)},d.prototype.destroy=function(){this._detachCloseHandler(this.container)},d.prototype.update=function(a){throw new Error("The `update` method must be defined in child classes.")},d}),b.define("select2/selection/single",["jquery","./base","../utils","../keys"],function(a,b,c,d){function e(){e.__super__.constructor.apply(this,arguments)}return c.Extend(e,b),e.prototype.render=function(){var a=e.__super__.render.call(this);return a.addClass("select2-selection--single"),a.html('<span class="select2-selection__rendered"></span><span class="select2-selection__arrow" role="presentation"><b role="presentation"></b></span>'),a},e.prototype.bind=function(a,b){var c=this;e.__super__.bind.apply(this,arguments);var d=a.id+"-container";this.$selection.find(".select2-selection__rendered").attr("id",d),this.$selection.attr("aria-labelledby",d),this.$selection.on("mousedown",function(a){1===a.which&&c.trigger("toggle",{originalEvent:a})}),this.$selection.on("focus",function(a){}),this.$selection.on("blur",function(a){}),a.on("focus",function(b){a.isOpen()||c.$selection.focus()}),a.on("selection:update",function(a){c.update(a.data)})},e.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},e.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},e.prototype.selectionContainer=function(){return a("<span></span>")},e.prototype.update=function(a){if(0===a.length)return void this.clear();var b=a[0],c=this.$selection.find(".select2-selection__rendered"),d=this.display(b,c);c.empty().append(d),c.prop("title",b.title||b.text)},e}),b.define("select2/selection/multiple",["jquery","./base","../utils"],function(a,b,c){function d(a,b){d.__super__.constructor.apply(this,arguments)}return c.Extend(d,b),d.prototype.render=function(){var a=d.__super__.render.call(this);return a.addClass("select2-selection--multiple"),a.html('<ul class="select2-selection__rendered"></ul>'),a},d.prototype.bind=function(b,c){var e=this;d.__super__.bind.apply(this,arguments),this.$selection.on("click",function(a){e.trigger("toggle",{originalEvent:a})}),this.$selection.on("click",".select2-selection__choice__remove",function(b){if(!e.options.get("disabled")){var c=a(this),d=c.parent(),f=d.data("data");e.trigger("unselect",{originalEvent:b,data:f})}})},d.prototype.clear=function(){this.$selection.find(".select2-selection__rendered").empty()},d.prototype.display=function(a,b){var c=this.options.get("templateSelection"),d=this.options.get("escapeMarkup");return d(c(a,b))},d.prototype.selectionContainer=function(){var b=a('<li class="select2-selection__choice"><span class="select2-selection__choice__remove" role="presentation">&times;</span></li>');return b},d.prototype.update=function(a){if(this.clear(),0!==a.length){for(var b=[],d=0;d<a.length;d++){var e=a[d],f=this.selectionContainer(),g=this.display(e,f);f.append(g),f.prop("title",e.title||e.text),f.data("data",e),b.push(f)}var h=this.$selection.find(".select2-selection__rendered");c.appendMany(h,b)}},d}),b.define("select2/selection/placeholder",["../utils"],function(a){function b(a,b,c){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c)}return b.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},b.prototype.createPlaceholder=function(a,b){var c=this.selectionContainer();return c.html(this.display(b)),c.addClass("select2-selection__placeholder").removeClass("select2-selection__choice"),c},b.prototype.update=function(a,b){var c=1==b.length&&b[0].id!=this.placeholder.id,d=b.length>1;if(d||c)return a.call(this,b);this.clear();var e=this.createPlaceholder(this.placeholder);this.$selection.find(".select2-selection__rendered").append(e)},b}),b.define("select2/selection/allowClear",["jquery","../keys"],function(a,b){function c(){}return c.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),null==this.placeholder&&this.options.get("debug")&&window.console&&console.error&&console.error("Select2: The `allowClear` option should be used in combination with the `placeholder` option."),this.$selection.on("mousedown",".select2-selection__clear",function(a){d._handleClear(a)}),b.on("keypress",function(a){d._handleKeyboardClear(a,b)})},c.prototype._handleClear=function(a,b){if(!this.options.get("disabled")){var c=this.$selection.find(".select2-selection__clear");if(0!==c.length){b.stopPropagation();for(var d=c.data("data"),e=0;e<d.length;e++){var f={data:d[e]};if(this.trigger("unselect",f),f.prevented)return}this.$element.val(this.placeholder.id).trigger("change"),this.trigger("toggle",{})}}},c.prototype._handleKeyboardClear=function(a,c,d){d.isOpen()||(c.which==b.DELETE||c.which==b.BACKSPACE)&&this._handleClear(c)},c.prototype.update=function(b,c){if(b.call(this,c),!(this.$selection.find(".select2-selection__placeholder").length>0||0===c.length)){var d=a('<span class="select2-selection__clear">&times;</span>');d.data("data",c),this.$selection.find(".select2-selection__rendered").prepend(d)}},c}),b.define("select2/selection/search",["jquery","../utils","../keys"],function(a,b,c){function d(a,b,c){a.call(this,b,c)}return d.prototype.render=function(b){var c=a('<li class="select2-search select2-search--inline"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" aria-autocomplete="list" /></li>');this.$searchContainer=c,this.$search=c.find("input");var d=b.call(this);return this._transferTabIndex(),d},d.prototype.bind=function(a,b,d){var e=this;a.call(this,b,d),b.on("open",function(){e.$search.trigger("focus")}),b.on("close",function(){e.$search.val(""),e.$search.removeAttr("aria-activedescendant"),e.$search.trigger("focus")}),b.on("enable",function(){e.$search.prop("disabled",!1),e._transferTabIndex()}),b.on("disable",function(){e.$search.prop("disabled",!0)}),b.on("focus",function(a){e.$search.trigger("focus")}),b.on("results:focus",function(a){e.$search.attr("aria-activedescendant",a.id)}),this.$selection.on("focusin",".select2-search--inline",function(a){e.trigger("focus",a)}),this.$selection.on("focusout",".select2-search--inline",function(a){e._handleBlur(a)}),this.$selection.on("keydown",".select2-search--inline",function(a){a.stopPropagation(),e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented();var b=a.which;if(b===c.BACKSPACE&&""===e.$search.val()){var d=e.$searchContainer.prev(".select2-selection__choice");if(d.length>0){var f=d.data("data");e.searchRemoveChoice(f),a.preventDefault()}}});var f=document.documentMode,g=f&&11>=f;this.$selection.on("input.searchcheck",".select2-search--inline",function(a){return g?void e.$selection.off("input.search input.searchcheck"):void e.$selection.off("keyup.search")}),this.$selection.on("keyup.search input.search",".select2-search--inline",function(a){if(g&&"input"===a.type)return void e.$selection.off("input.search input.searchcheck");var b=a.which;b!=c.SHIFT&&b!=c.CTRL&&b!=c.ALT&&b!=c.TAB&&e.handleSearch(a)})},d.prototype._transferTabIndex=function(a){this.$search.attr("tabindex",this.$selection.attr("tabindex")),this.$selection.attr("tabindex","-1")},d.prototype.createPlaceholder=function(a,b){this.$search.attr("placeholder",b.text)},d.prototype.update=function(a,b){var c=this.$search[0]==document.activeElement;this.$search.attr("placeholder",""),a.call(this,b),this.$selection.find(".select2-selection__rendered").append(this.$searchContainer),this.resizeSearch(),c&&this.$search.focus()},d.prototype.handleSearch=function(){if(this.resizeSearch(),!this._keyUpPrevented){var a=this.$search.val();this.trigger("query",{term:a})}this._keyUpPrevented=!1},d.prototype.searchRemoveChoice=function(a,b){this.trigger("unselect",{data:b}),this.$search.val(b.text),this.handleSearch()},d.prototype.resizeSearch=function(){this.$search.css("width","25px");var a="";if(""!==this.$search.attr("placeholder"))a=this.$selection.find(".select2-selection__rendered").innerWidth();else{var b=this.$search.val().length+1;a=.75*b+"em"}this.$search.css("width",a)},d}),b.define("select2/selection/eventRelay",["jquery"],function(a){function b(){}return b.prototype.bind=function(b,c,d){var e=this,f=["open","opening","close","closing","select","selecting","unselect","unselecting"],g=["opening","closing","selecting","unselecting"];b.call(this,c,d),c.on("*",function(b,c){if(-1!==a.inArray(b,f)){c=c||{};var d=a.Event("select2:"+b,{params:c});e.$element.trigger(d),-1!==a.inArray(b,g)&&(c.prevented=d.isDefaultPrevented())}})},b}),b.define("select2/translation",["jquery","require"],function(a,b){function c(a){this.dict=a||{}}return c.prototype.all=function(){return this.dict},c.prototype.get=function(a){return this.dict[a]},c.prototype.extend=function(b){this.dict=a.extend({},b.all(),this.dict)},c._cache={},c.loadPath=function(a){if(!(a in c._cache)){var d=b(a);c._cache[a]=d}return new c(c._cache[a])},c}),b.define("select2/diacritics",[],function(){var a={"Ⓐ":"A","A":"A","À":"A","Á":"A","Â":"A","Ầ":"A","Ấ":"A","Ẫ":"A","Ẩ":"A","Ã":"A","Ā":"A","Ă":"A","Ằ":"A","Ắ":"A","Ẵ":"A","Ẳ":"A","Ȧ":"A","Ǡ":"A","Ä":"A","Ǟ":"A","Ả":"A","Å":"A","Ǻ":"A","Ǎ":"A","Ȁ":"A","Ȃ":"A","Ạ":"A","Ậ":"A","Ặ":"A","Ḁ":"A","Ą":"A","Ⱥ":"A","Ɐ":"A","Ꜳ":"AA","Æ":"AE","Ǽ":"AE","Ǣ":"AE","Ꜵ":"AO","Ꜷ":"AU","Ꜹ":"AV","Ꜻ":"AV","Ꜽ":"AY","Ⓑ":"B","B":"B","Ḃ":"B","Ḅ":"B","Ḇ":"B","Ƀ":"B","Ƃ":"B","Ɓ":"B","Ⓒ":"C","C":"C","Ć":"C","Ĉ":"C","Ċ":"C","Č":"C","Ç":"C","Ḉ":"C","Ƈ":"C","Ȼ":"C","Ꜿ":"C","Ⓓ":"D","D":"D","Ḋ":"D","Ď":"D","Ḍ":"D","Ḑ":"D","Ḓ":"D","Ḏ":"D","Đ":"D","Ƌ":"D","Ɗ":"D","Ɖ":"D","Ꝺ":"D","DZ":"DZ","DŽ":"DZ","Dz":"Dz","Dž":"Dz","Ⓔ":"E","E":"E","È":"E","É":"E","Ê":"E","Ề":"E","Ế":"E","Ễ":"E","Ể":"E","Ẽ":"E","Ē":"E","Ḕ":"E","Ḗ":"E","Ĕ":"E","Ė":"E","Ë":"E","Ẻ":"E","Ě":"E","Ȅ":"E","Ȇ":"E","Ẹ":"E","Ệ":"E","Ȩ":"E","Ḝ":"E","Ę":"E","Ḙ":"E","Ḛ":"E","Ɛ":"E","Ǝ":"E","Ⓕ":"F","F":"F","Ḟ":"F","Ƒ":"F","Ꝼ":"F","Ⓖ":"G","G":"G","Ǵ":"G","Ĝ":"G","Ḡ":"G","Ğ":"G","Ġ":"G","Ǧ":"G","Ģ":"G","Ǥ":"G","Ɠ":"G","Ꞡ":"G","Ᵹ":"G","Ꝿ":"G","Ⓗ":"H","H":"H","Ĥ":"H","Ḣ":"H","Ḧ":"H","Ȟ":"H","Ḥ":"H","Ḩ":"H","Ḫ":"H","Ħ":"H","Ⱨ":"H","Ⱶ":"H","Ɥ":"H","Ⓘ":"I","I":"I","Ì":"I","Í":"I","Î":"I","Ĩ":"I","Ī":"I","Ĭ":"I","İ":"I","Ï":"I","Ḯ":"I","Ỉ":"I","Ǐ":"I","Ȉ":"I","Ȋ":"I","Ị":"I","Į":"I","Ḭ":"I","Ɨ":"I","Ⓙ":"J","J":"J","Ĵ":"J","Ɉ":"J","Ⓚ":"K","K":"K","Ḱ":"K","Ǩ":"K","Ḳ":"K","Ķ":"K","Ḵ":"K","Ƙ":"K","Ⱪ":"K","Ꝁ":"K","Ꝃ":"K","Ꝅ":"K","Ꞣ":"K","Ⓛ":"L","L":"L","Ŀ":"L","Ĺ":"L","Ľ":"L","Ḷ":"L","Ḹ":"L","Ļ":"L","Ḽ":"L","Ḻ":"L","Ł":"L","Ƚ":"L","Ɫ":"L","Ⱡ":"L","Ꝉ":"L","Ꝇ":"L","Ꞁ":"L","LJ":"LJ","Lj":"Lj","Ⓜ":"M","M":"M","Ḿ":"M","Ṁ":"M","Ṃ":"M","Ɱ":"M","Ɯ":"M","Ⓝ":"N","N":"N","Ǹ":"N","Ń":"N","Ñ":"N","Ṅ":"N","Ň":"N","Ṇ":"N","Ņ":"N","Ṋ":"N","Ṉ":"N","Ƞ":"N","Ɲ":"N","Ꞑ":"N","Ꞥ":"N","NJ":"NJ","Nj":"Nj","Ⓞ":"O","O":"O","Ò":"O","Ó":"O","Ô":"O","Ồ":"O","Ố":"O","Ỗ":"O","Ổ":"O","Õ":"O","Ṍ":"O","Ȭ":"O","Ṏ":"O","Ō":"O","Ṑ":"O","Ṓ":"O","Ŏ":"O","Ȯ":"O","Ȱ":"O","Ö":"O","Ȫ":"O","Ỏ":"O","Ő":"O","Ǒ":"O","Ȍ":"O","Ȏ":"O","Ơ":"O","Ờ":"O","Ớ":"O","Ỡ":"O","Ở":"O","Ợ":"O","Ọ":"O","Ộ":"O","Ǫ":"O","Ǭ":"O","Ø":"O","Ǿ":"O","Ɔ":"O","Ɵ":"O","Ꝋ":"O","Ꝍ":"O","Ƣ":"OI","Ꝏ":"OO","Ȣ":"OU","Ⓟ":"P","P":"P","Ṕ":"P","Ṗ":"P","Ƥ":"P","Ᵽ":"P","Ꝑ":"P","Ꝓ":"P","Ꝕ":"P","Ⓠ":"Q","Q":"Q","Ꝗ":"Q","Ꝙ":"Q","Ɋ":"Q","Ⓡ":"R","R":"R","Ŕ":"R","Ṙ":"R","Ř":"R","Ȑ":"R","Ȓ":"R","Ṛ":"R","Ṝ":"R","Ŗ":"R","Ṟ":"R","Ɍ":"R","Ɽ":"R","Ꝛ":"R","Ꞧ":"R","Ꞃ":"R","Ⓢ":"S","S":"S","ẞ":"S","Ś":"S","Ṥ":"S","Ŝ":"S","Ṡ":"S","Š":"S","Ṧ":"S","Ṣ":"S","Ṩ":"S","Ș":"S","Ş":"S","Ȿ":"S","Ꞩ":"S","Ꞅ":"S","Ⓣ":"T","T":"T","Ṫ":"T","Ť":"T","Ṭ":"T","Ț":"T","Ţ":"T","Ṱ":"T","Ṯ":"T","Ŧ":"T","Ƭ":"T","Ʈ":"T","Ⱦ":"T","Ꞇ":"T","Ꜩ":"TZ","Ⓤ":"U","U":"U","Ù":"U","Ú":"U","Û":"U","Ũ":"U","Ṹ":"U","Ū":"U","Ṻ":"U","Ŭ":"U","Ü":"U","Ǜ":"U","Ǘ":"U","Ǖ":"U","Ǚ":"U","Ủ":"U","Ů":"U","Ű":"U","Ǔ":"U","Ȕ":"U","Ȗ":"U","Ư":"U","Ừ":"U","Ứ":"U","Ữ":"U","Ử":"U","Ự":"U","Ụ":"U","Ṳ":"U","Ų":"U","Ṷ":"U","Ṵ":"U","Ʉ":"U","Ⓥ":"V","V":"V","Ṽ":"V","Ṿ":"V","Ʋ":"V","Ꝟ":"V","Ʌ":"V","Ꝡ":"VY","Ⓦ":"W","W":"W","Ẁ":"W","Ẃ":"W","Ŵ":"W","Ẇ":"W","Ẅ":"W","Ẉ":"W","Ⱳ":"W","Ⓧ":"X","X":"X","Ẋ":"X","Ẍ":"X","Ⓨ":"Y","Y":"Y","Ỳ":"Y","Ý":"Y","Ŷ":"Y","Ỹ":"Y","Ȳ":"Y","Ẏ":"Y","Ÿ":"Y","Ỷ":"Y","Ỵ":"Y","Ƴ":"Y","Ɏ":"Y","Ỿ":"Y","Ⓩ":"Z","Z":"Z","Ź":"Z","Ẑ":"Z","Ż":"Z","Ž":"Z","Ẓ":"Z","Ẕ":"Z","Ƶ":"Z","Ȥ":"Z","Ɀ":"Z","Ⱬ":"Z","Ꝣ":"Z","ⓐ":"a","a":"a","ẚ":"a","à":"a","á":"a","â":"a","ầ":"a","ấ":"a","ẫ":"a","ẩ":"a","ã":"a","ā":"a","ă":"a","ằ":"a","ắ":"a","ẵ":"a","ẳ":"a","ȧ":"a","ǡ":"a","ä":"a","ǟ":"a","ả":"a","å":"a","ǻ":"a","ǎ":"a","ȁ":"a","ȃ":"a","ạ":"a","ậ":"a","ặ":"a","ḁ":"a","ą":"a","ⱥ":"a","ɐ":"a","ꜳ":"aa","æ":"ae","ǽ":"ae","ǣ":"ae","ꜵ":"ao","ꜷ":"au","ꜹ":"av","ꜻ":"av","ꜽ":"ay","ⓑ":"b","b":"b","ḃ":"b","ḅ":"b","ḇ":"b","ƀ":"b","ƃ":"b","ɓ":"b","ⓒ":"c","c":"c","ć":"c","ĉ":"c","ċ":"c","č":"c","ç":"c","ḉ":"c","ƈ":"c","ȼ":"c","ꜿ":"c","ↄ":"c","ⓓ":"d","d":"d","ḋ":"d","ď":"d","ḍ":"d","ḑ":"d","ḓ":"d","ḏ":"d","đ":"d","ƌ":"d","ɖ":"d","ɗ":"d","ꝺ":"d","dz":"dz","dž":"dz","ⓔ":"e","e":"e","è":"e","é":"e","ê":"e","ề":"e","ế":"e","ễ":"e","ể":"e","ẽ":"e","ē":"e","ḕ":"e","ḗ":"e","ĕ":"e","ė":"e","ë":"e","ẻ":"e","ě":"e","ȅ":"e","ȇ":"e","ẹ":"e","ệ":"e","ȩ":"e","ḝ":"e","ę":"e","ḙ":"e","ḛ":"e","ɇ":"e","ɛ":"e","ǝ":"e","ⓕ":"f","f":"f","ḟ":"f","ƒ":"f","ꝼ":"f","ⓖ":"g","g":"g","ǵ":"g","ĝ":"g","ḡ":"g","ğ":"g","ġ":"g","ǧ":"g","ģ":"g","ǥ":"g","ɠ":"g","ꞡ":"g","ᵹ":"g","ꝿ":"g","ⓗ":"h","h":"h","ĥ":"h","ḣ":"h","ḧ":"h","ȟ":"h","ḥ":"h","ḩ":"h","ḫ":"h","ẖ":"h","ħ":"h","ⱨ":"h","ⱶ":"h","ɥ":"h","ƕ":"hv","ⓘ":"i","i":"i","ì":"i","í":"i","î":"i","ĩ":"i","ī":"i","ĭ":"i","ï":"i","ḯ":"i","ỉ":"i","ǐ":"i","ȉ":"i","ȋ":"i","ị":"i","į":"i","ḭ":"i","ɨ":"i","ı":"i","ⓙ":"j","j":"j","ĵ":"j","ǰ":"j","ɉ":"j","ⓚ":"k","k":"k","ḱ":"k","ǩ":"k","ḳ":"k","ķ":"k","ḵ":"k","ƙ":"k","ⱪ":"k","ꝁ":"k","ꝃ":"k","ꝅ":"k","ꞣ":"k","ⓛ":"l","l":"l","ŀ":"l","ĺ":"l","ľ":"l","ḷ":"l","ḹ":"l","ļ":"l","ḽ":"l","ḻ":"l","ſ":"l","ł":"l","ƚ":"l","ɫ":"l","ⱡ":"l","ꝉ":"l","ꞁ":"l","ꝇ":"l","lj":"lj","ⓜ":"m","m":"m","ḿ":"m","ṁ":"m","ṃ":"m","ɱ":"m","ɯ":"m","ⓝ":"n","n":"n","ǹ":"n","ń":"n","ñ":"n","ṅ":"n","ň":"n","ṇ":"n","ņ":"n","ṋ":"n","ṉ":"n","ƞ":"n","ɲ":"n","ʼn":"n","ꞑ":"n","ꞥ":"n","nj":"nj","ⓞ":"o","o":"o","ò":"o","ó":"o","ô":"o","ồ":"o","ố":"o","ỗ":"o","ổ":"o","õ":"o","ṍ":"o","ȭ":"o","ṏ":"o","ō":"o","ṑ":"o","ṓ":"o","ŏ":"o","ȯ":"o","ȱ":"o","ö":"o","ȫ":"o","ỏ":"o","ő":"o","ǒ":"o","ȍ":"o","ȏ":"o","ơ":"o","ờ":"o","ớ":"o","ỡ":"o","ở":"o","ợ":"o","ọ":"o","ộ":"o","ǫ":"o","ǭ":"o","ø":"o","ǿ":"o","ɔ":"o","ꝋ":"o","ꝍ":"o","ɵ":"o","ƣ":"oi","ȣ":"ou","ꝏ":"oo","ⓟ":"p","p":"p","ṕ":"p","ṗ":"p","ƥ":"p","ᵽ":"p","ꝑ":"p","ꝓ":"p","ꝕ":"p","ⓠ":"q","q":"q","ɋ":"q","ꝗ":"q","ꝙ":"q","ⓡ":"r","r":"r","ŕ":"r","ṙ":"r","ř":"r","ȑ":"r","ȓ":"r","ṛ":"r","ṝ":"r","ŗ":"r","ṟ":"r","ɍ":"r","ɽ":"r","ꝛ":"r","ꞧ":"r","ꞃ":"r","ⓢ":"s","s":"s","ß":"s","ś":"s","ṥ":"s","ŝ":"s","ṡ":"s","š":"s","ṧ":"s","ṣ":"s","ṩ":"s","ș":"s","ş":"s","ȿ":"s","ꞩ":"s","ꞅ":"s","ẛ":"s","ⓣ":"t","t":"t","ṫ":"t","ẗ":"t","ť":"t","ṭ":"t","ț":"t","ţ":"t","ṱ":"t","ṯ":"t","ŧ":"t","ƭ":"t","ʈ":"t","ⱦ":"t","ꞇ":"t","ꜩ":"tz","ⓤ":"u","u":"u","ù":"u","ú":"u","û":"u","ũ":"u","ṹ":"u","ū":"u","ṻ":"u","ŭ":"u","ü":"u","ǜ":"u","ǘ":"u","ǖ":"u","ǚ":"u","ủ":"u","ů":"u","ű":"u","ǔ":"u","ȕ":"u","ȗ":"u","ư":"u","ừ":"u","ứ":"u","ữ":"u","ử":"u","ự":"u","ụ":"u","ṳ":"u","ų":"u","ṷ":"u","ṵ":"u","ʉ":"u","ⓥ":"v","v":"v","ṽ":"v","ṿ":"v","ʋ":"v","ꝟ":"v","ʌ":"v","ꝡ":"vy","ⓦ":"w","w":"w","ẁ":"w","ẃ":"w","ŵ":"w","ẇ":"w","ẅ":"w","ẘ":"w","ẉ":"w","ⱳ":"w","ⓧ":"x","x":"x","ẋ":"x","ẍ":"x","ⓨ":"y","y":"y","ỳ":"y","ý":"y","ŷ":"y","ỹ":"y","ȳ":"y","ẏ":"y","ÿ":"y","ỷ":"y","ẙ":"y","ỵ":"y","ƴ":"y","ɏ":"y","ỿ":"y","ⓩ":"z","z":"z","ź":"z","ẑ":"z","ż":"z","ž":"z","ẓ":"z","ẕ":"z","ƶ":"z","ȥ":"z","ɀ":"z","ⱬ":"z","ꝣ":"z","Ά":"Α","Έ":"Ε","Ή":"Η","Ί":"Ι","Ϊ":"Ι","Ό":"Ο","Ύ":"Υ","Ϋ":"Υ","Ώ":"Ω","ά":"α","έ":"ε","ή":"η","ί":"ι","ϊ":"ι","ΐ":"ι","ό":"ο","ύ":"υ","ϋ":"υ","ΰ":"υ","ω":"ω","ς":"σ"};return a}),b.define("select2/data/base",["../utils"],function(a){function b(a,c){b.__super__.constructor.call(this)}return a.Extend(b,a.Observable),b.prototype.current=function(a){throw new Error("The `current` method must be defined in child classes.")},b.prototype.query=function(a,b){throw new Error("The `query` method must be defined in child classes.")},b.prototype.bind=function(a,b){},b.prototype.destroy=function(){},b.prototype.generateResultId=function(b,c){var d=b.id+"-result-";return d+=a.generateChars(4),d+=null!=c.id?"-"+c.id.toString():"-"+a.generateChars(4)},b}),b.define("select2/data/select",["./base","../utils","jquery"],function(a,b,c){function d(a,b){this.$element=a,this.options=b,d.__super__.constructor.call(this)}return b.Extend(d,a),d.prototype.current=function(a){var b=[],d=this;this.$element.find(":selected").each(function(){var a=c(this),e=d.item(a);b.push(e)}),a(b)},d.prototype.select=function(a){var b=this;if(a.selected=!0,c(a.element).is("option"))return a.element.selected=!0,void this.$element.trigger("change");
+if(this.$element.prop("multiple"))this.current(function(d){var e=[];a=[a],a.push.apply(a,d);for(var f=0;f<a.length;f++){var g=a[f].id;-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")});else{var d=a.id;this.$element.val(d),this.$element.trigger("change")}},d.prototype.unselect=function(a){var b=this;if(this.$element.prop("multiple"))return a.selected=!1,c(a.element).is("option")?(a.element.selected=!1,void this.$element.trigger("change")):void this.current(function(d){for(var e=[],f=0;f<d.length;f++){var g=d[f].id;g!==a.id&&-1===c.inArray(g,e)&&e.push(g)}b.$element.val(e),b.$element.trigger("change")})},d.prototype.bind=function(a,b){var c=this;this.container=a,a.on("select",function(a){c.select(a.data)}),a.on("unselect",function(a){c.unselect(a.data)})},d.prototype.destroy=function(){this.$element.find("*").each(function(){c.removeData(this,"data")})},d.prototype.query=function(a,b){var d=[],e=this,f=this.$element.children();f.each(function(){var b=c(this);if(b.is("option")||b.is("optgroup")){var f=e.item(b),g=e.matches(a,f);null!==g&&d.push(g)}}),b({results:d})},d.prototype.addOptions=function(a){b.appendMany(this.$element,a)},d.prototype.option=function(a){var b;a.children?(b=document.createElement("optgroup"),b.label=a.text):(b=document.createElement("option"),void 0!==b.textContent?b.textContent=a.text:b.innerText=a.text),a.id&&(b.value=a.id),a.disabled&&(b.disabled=!0),a.selected&&(b.selected=!0),a.title&&(b.title=a.title);var d=c(b),e=this._normalizeItem(a);return e.element=b,c.data(b,"data",e),d},d.prototype.item=function(a){var b={};if(b=c.data(a[0],"data"),null!=b)return b;if(a.is("option"))b={id:a.val(),text:a.text(),disabled:a.prop("disabled"),selected:a.prop("selected"),title:a.prop("title")};else if(a.is("optgroup")){b={text:a.prop("label"),children:[],title:a.prop("title")};for(var d=a.children("option"),e=[],f=0;f<d.length;f++){var g=c(d[f]),h=this.item(g);e.push(h)}b.children=e}return b=this._normalizeItem(b),b.element=a[0],c.data(a[0],"data",b),b},d.prototype._normalizeItem=function(a){c.isPlainObject(a)||(a={id:a,text:a}),a=c.extend({},{text:""},a);var b={selected:!1,disabled:!1};return null!=a.id&&(a.id=a.id.toString()),null!=a.text&&(a.text=a.text.toString()),null==a._resultId&&a.id&&null!=this.container&&(a._resultId=this.generateResultId(this.container,a)),c.extend({},b,a)},d.prototype.matches=function(a,b){var c=this.options.get("matcher");return c(a,b)},d}),b.define("select2/data/array",["./select","../utils","jquery"],function(a,b,c){function d(a,b){var c=b.get("data")||[];d.__super__.constructor.call(this,a,b),this.addOptions(this.convertToOptions(c))}return b.Extend(d,a),d.prototype.select=function(a){var b=this.$element.find("option").filter(function(b,c){return c.value==a.id.toString()});0===b.length&&(b=this.option(a),this.addOptions(b)),d.__super__.select.call(this,a)},d.prototype.convertToOptions=function(a){function d(a){return function(){return c(this).val()==a.id}}for(var e=this,f=this.$element.find("option"),g=f.map(function(){return e.item(c(this)).id}).get(),h=[],i=0;i<a.length;i++){var j=this._normalizeItem(a[i]);if(c.inArray(j.id,g)>=0){var k=f.filter(d(j)),l=this.item(k),m=c.extend(!0,{},j,l),n=this.option(m);k.replaceWith(n)}else{var o=this.option(j);if(j.children){var p=this.convertToOptions(j.children);b.appendMany(o,p)}h.push(o)}}return h},d}),b.define("select2/data/ajax",["./array","../utils","jquery"],function(a,b,c){function d(a,b){this.ajaxOptions=this._applyDefaults(b.get("ajax")),null!=this.ajaxOptions.processResults&&(this.processResults=this.ajaxOptions.processResults),d.__super__.constructor.call(this,a,b)}return b.Extend(d,a),d.prototype._applyDefaults=function(a){var b={data:function(a){return c.extend({},a,{q:a.term})},transport:function(a,b,d){var e=c.ajax(a);return e.then(b),e.fail(d),e}};return c.extend({},b,a,!0)},d.prototype.processResults=function(a){return a},d.prototype.query=function(a,b){function d(){var d=f.transport(f,function(d){var f=e.processResults(d,a);e.options.get("debug")&&window.console&&console.error&&(f&&f.results&&c.isArray(f.results)||console.error("Select2: The AJAX results did not return an array in the `results` key of the response.")),b(f)},function(){d.status&&"0"===d.status||e.trigger("results:message",{message:"errorLoading"})});e._request=d}var e=this;null!=this._request&&(c.isFunction(this._request.abort)&&this._request.abort(),this._request=null);var f=c.extend({type:"GET"},this.ajaxOptions);"function"==typeof f.url&&(f.url=f.url.call(this.$element,a)),"function"==typeof f.data&&(f.data=f.data.call(this.$element,a)),this.ajaxOptions.delay&&null!=a.term?(this._queryTimeout&&window.clearTimeout(this._queryTimeout),this._queryTimeout=window.setTimeout(d,this.ajaxOptions.delay)):d()},d}),b.define("select2/data/tags",["jquery"],function(a){function b(b,c,d){var e=d.get("tags"),f=d.get("createTag");void 0!==f&&(this.createTag=f);var g=d.get("insertTag");if(void 0!==g&&(this.insertTag=g),b.call(this,c,d),a.isArray(e))for(var h=0;h<e.length;h++){var i=e[h],j=this._normalizeItem(i),k=this.option(j);this.$element.append(k)}}return b.prototype.query=function(a,b,c){function d(a,f){for(var g=a.results,h=0;h<g.length;h++){var i=g[h],j=null!=i.children&&!d({results:i.children},!0),k=i.text===b.term;if(k||j)return f?!1:(a.data=g,void c(a))}if(f)return!0;var l=e.createTag(b);if(null!=l){var m=e.option(l);m.attr("data-select2-tag",!0),e.addOptions([m]),e.insertTag(g,l)}a.results=g,c(a)}var e=this;return this._removeOldTags(),null==b.term||null!=b.page?void a.call(this,b,c):void a.call(this,b,d)},b.prototype.createTag=function(b,c){var d=a.trim(c.term);return""===d?null:{id:d,text:d}},b.prototype.insertTag=function(a,b,c){b.unshift(c)},b.prototype._removeOldTags=function(b){var c=(this._lastTag,this.$element.find("option[data-select2-tag]"));c.each(function(){this.selected||a(this).remove()})},b}),b.define("select2/data/tokenizer",["jquery"],function(a){function b(a,b,c){var d=c.get("tokenizer");void 0!==d&&(this.tokenizer=d),a.call(this,b,c)}return b.prototype.bind=function(a,b,c){a.call(this,b,c),this.$search=b.dropdown.$search||b.selection.$search||c.find(".select2-search__field")},b.prototype.query=function(b,c,d){function e(b){var c=g._normalizeItem(b),d=g.$element.find("option").filter(function(){return a(this).val()===c.id});if(!d.length){var e=g.option(c);e.attr("data-select2-tag",!0),g._removeOldTags(),g.addOptions([e])}f(c)}function f(a){g.trigger("select",{data:a})}var g=this;c.term=c.term||"";var h=this.tokenizer(c,this.options,e);h.term!==c.term&&(this.$search.length&&(this.$search.val(h.term),this.$search.focus()),c.term=h.term),b.call(this,c,d)},b.prototype.tokenizer=function(b,c,d,e){for(var f=d.get("tokenSeparators")||[],g=c.term,h=0,i=this.createTag||function(a){return{id:a.term,text:a.term}};h<g.length;){var j=g[h];if(-1!==a.inArray(j,f)){var k=g.substr(0,h),l=a.extend({},c,{term:k}),m=i(l);null!=m?(e(m),g=g.substr(h+1)||"",h=0):h++}else h++}return{term:g}},b}),b.define("select2/data/minimumInputLength",[],function(){function a(a,b,c){this.minimumInputLength=c.get("minimumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",b.term.length<this.minimumInputLength?void this.trigger("results:message",{message:"inputTooShort",args:{minimum:this.minimumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumInputLength",[],function(){function a(a,b,c){this.maximumInputLength=c.get("maximumInputLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){return b.term=b.term||"",this.maximumInputLength>0&&b.term.length>this.maximumInputLength?void this.trigger("results:message",{message:"inputTooLong",args:{maximum:this.maximumInputLength,input:b.term,params:b}}):void a.call(this,b,c)},a}),b.define("select2/data/maximumSelectionLength",[],function(){function a(a,b,c){this.maximumSelectionLength=c.get("maximumSelectionLength"),a.call(this,b,c)}return a.prototype.query=function(a,b,c){var d=this;this.current(function(e){var f=null!=e?e.length:0;return d.maximumSelectionLength>0&&f>=d.maximumSelectionLength?void d.trigger("results:message",{message:"maximumSelected",args:{maximum:d.maximumSelectionLength}}):void a.call(d,b,c)})},a}),b.define("select2/dropdown",["jquery","./utils"],function(a,b){function c(a,b){this.$element=a,this.options=b,c.__super__.constructor.call(this)}return b.Extend(c,b.Observable),c.prototype.render=function(){var b=a('<span class="select2-dropdown"><span class="select2-results"></span></span>');return b.attr("dir",this.options.get("dir")),this.$dropdown=b,b},c.prototype.bind=function(){},c.prototype.position=function(a,b){},c.prototype.destroy=function(){this.$dropdown.remove()},c}),b.define("select2/dropdown/search",["jquery","../utils"],function(a,b){function c(){}return c.prototype.render=function(b){var c=b.call(this),d=a('<span class="select2-search select2-search--dropdown"><input class="select2-search__field" type="search" tabindex="-1" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false" role="textbox" /></span>');return this.$searchContainer=d,this.$search=d.find("input"),c.prepend(d),c},c.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),this.$search.on("keydown",function(a){e.trigger("keypress",a),e._keyUpPrevented=a.isDefaultPrevented()}),this.$search.on("input",function(b){a(this).off("keyup")}),this.$search.on("keyup input",function(a){e.handleSearch(a)}),c.on("open",function(){e.$search.attr("tabindex",0),e.$search.focus(),window.setTimeout(function(){e.$search.focus()},0)}),c.on("close",function(){e.$search.attr("tabindex",-1),e.$search.val("")}),c.on("focus",function(){c.isOpen()&&e.$search.focus()}),c.on("results:all",function(a){if(null==a.query.term||""===a.query.term){var b=e.showSearch(a);b?e.$searchContainer.removeClass("select2-search--hide"):e.$searchContainer.addClass("select2-search--hide")}})},c.prototype.handleSearch=function(a){if(!this._keyUpPrevented){var b=this.$search.val();this.trigger("query",{term:b})}this._keyUpPrevented=!1},c.prototype.showSearch=function(a,b){return!0},c}),b.define("select2/dropdown/hidePlaceholder",[],function(){function a(a,b,c,d){this.placeholder=this.normalizePlaceholder(c.get("placeholder")),a.call(this,b,c,d)}return a.prototype.append=function(a,b){b.results=this.removePlaceholder(b.results),a.call(this,b)},a.prototype.normalizePlaceholder=function(a,b){return"string"==typeof b&&(b={id:"",text:b}),b},a.prototype.removePlaceholder=function(a,b){for(var c=b.slice(0),d=b.length-1;d>=0;d--){var e=b[d];this.placeholder.id===e.id&&c.splice(d,1)}return c},a}),b.define("select2/dropdown/infiniteScroll",["jquery"],function(a){function b(a,b,c,d){this.lastParams={},a.call(this,b,c,d),this.$loadingMore=this.createLoadingMore(),this.loading=!1}return b.prototype.append=function(a,b){this.$loadingMore.remove(),this.loading=!1,a.call(this,b),this.showLoadingMore(b)&&this.$results.append(this.$loadingMore)},b.prototype.bind=function(b,c,d){var e=this;b.call(this,c,d),c.on("query",function(a){e.lastParams=a,e.loading=!0}),c.on("query:append",function(a){e.lastParams=a,e.loading=!0}),this.$results.on("scroll",function(){var b=a.contains(document.documentElement,e.$loadingMore[0]);if(!e.loading&&b){var c=e.$results.offset().top+e.$results.outerHeight(!1),d=e.$loadingMore.offset().top+e.$loadingMore.outerHeight(!1);c+50>=d&&e.loadMore()}})},b.prototype.loadMore=function(){this.loading=!0;var b=a.extend({},{page:1},this.lastParams);b.page++,this.trigger("query:append",b)},b.prototype.showLoadingMore=function(a,b){return b.pagination&&b.pagination.more},b.prototype.createLoadingMore=function(){var b=a('<li class="select2-results__option select2-results__option--load-more"role="treeitem" aria-disabled="true"></li>'),c=this.options.get("translations").get("loadingMore");return b.html(c(this.lastParams)),b},b}),b.define("select2/dropdown/attachBody",["jquery","../utils"],function(a,b){function c(b,c,d){this.$dropdownParent=d.get("dropdownParent")||a(document.body),b.call(this,c,d)}return c.prototype.bind=function(a,b,c){var d=this,e=!1;a.call(this,b,c),b.on("open",function(){d._showDropdown(),d._attachPositioningHandler(b),e||(e=!0,b.on("results:all",function(){d._positionDropdown(),d._resizeDropdown()}),b.on("results:append",function(){d._positionDropdown(),d._resizeDropdown()}))}),b.on("close",function(){d._hideDropdown(),d._detachPositioningHandler(b)}),this.$dropdownContainer.on("mousedown",function(a){a.stopPropagation()})},c.prototype.destroy=function(a){a.call(this),this.$dropdownContainer.remove()},c.prototype.position=function(a,b,c){b.attr("class",c.attr("class")),b.removeClass("select2"),b.addClass("select2-container--open"),b.css({position:"absolute",top:-999999}),this.$container=c},c.prototype.render=function(b){var c=a("<span></span>"),d=b.call(this);return c.append(d),this.$dropdownContainer=c,c},c.prototype._hideDropdown=function(a){this.$dropdownContainer.detach()},c.prototype._attachPositioningHandler=function(c,d){var e=this,f="scroll.select2."+d.id,g="resize.select2."+d.id,h="orientationchange.select2."+d.id,i=this.$container.parents().filter(b.hasScroll);i.each(function(){a(this).data("select2-scroll-position",{x:a(this).scrollLeft(),y:a(this).scrollTop()})}),i.on(f,function(b){var c=a(this).data("select2-scroll-position");a(this).scrollTop(c.y)}),a(window).on(f+" "+g+" "+h,function(a){e._positionDropdown(),e._resizeDropdown()})},c.prototype._detachPositioningHandler=function(c,d){var e="scroll.select2."+d.id,f="resize.select2."+d.id,g="orientationchange.select2."+d.id,h=this.$container.parents().filter(b.hasScroll);h.off(e),a(window).off(e+" "+f+" "+g)},c.prototype._positionDropdown=function(){var b=a(window),c=this.$dropdown.hasClass("select2-dropdown--above"),d=this.$dropdown.hasClass("select2-dropdown--below"),e=null,f=this.$container.offset();f.bottom=f.top+this.$container.outerHeight(!1);var g={height:this.$container.outerHeight(!1)};g.top=f.top,g.bottom=f.top+g.height;var h={height:this.$dropdown.outerHeight(!1)},i={top:b.scrollTop(),bottom:b.scrollTop()+b.height()},j=i.top<f.top-h.height,k=i.bottom>f.bottom+h.height,l={left:f.left,top:g.bottom},m=this.$dropdownParent;"static"===m.css("position")&&(m=m.offsetParent());var n=m.offset();l.top-=n.top,l.left-=n.left,c||d||(e="below"),k||!j||c?!j&&k&&c&&(e="below"):e="above",("above"==e||c&&"below"!==e)&&(l.top=g.top-n.top-h.height),null!=e&&(this.$dropdown.removeClass("select2-dropdown--below select2-dropdown--above").addClass("select2-dropdown--"+e),this.$container.removeClass("select2-container--below select2-container--above").addClass("select2-container--"+e)),this.$dropdownContainer.css(l)},c.prototype._resizeDropdown=function(){var a={width:this.$container.outerWidth(!1)+"px"};this.options.get("dropdownAutoWidth")&&(a.minWidth=a.width,a.position="relative",a.width="auto"),this.$dropdown.css(a)},c.prototype._showDropdown=function(a){this.$dropdownContainer.appendTo(this.$dropdownParent),this._positionDropdown(),this._resizeDropdown()},c}),b.define("select2/dropdown/minimumResultsForSearch",[],function(){function a(b){for(var c=0,d=0;d<b.length;d++){var e=b[d];e.children?c+=a(e.children):c++}return c}function b(a,b,c,d){this.minimumResultsForSearch=c.get("minimumResultsForSearch"),this.minimumResultsForSearch<0&&(this.minimumResultsForSearch=1/0),a.call(this,b,c,d)}return b.prototype.showSearch=function(b,c){return a(c.data.results)<this.minimumResultsForSearch?!1:b.call(this,c)},b}),b.define("select2/dropdown/selectOnClose",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("close",function(a){d._handleSelectOnClose(a)})},a.prototype._handleSelectOnClose=function(a,b){if(b&&null!=b.originalSelect2Event){var c=b.originalSelect2Event;if("select"===c._type||"unselect"===c._type)return}var d=this.getHighlightedResults();if(!(d.length<1)){var e=d.data("data");null!=e.element&&e.element.selected||null==e.element&&e.selected||this.trigger("select",{data:e})}},a}),b.define("select2/dropdown/closeOnSelect",[],function(){function a(){}return a.prototype.bind=function(a,b,c){var d=this;a.call(this,b,c),b.on("select",function(a){d._selectTriggered(a)}),b.on("unselect",function(a){d._selectTriggered(a)})},a.prototype._selectTriggered=function(a,b){var c=b.originalEvent;c&&c.ctrlKey||this.trigger("close",{originalEvent:c,originalSelect2Event:b})},a}),b.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(a){var b=a.input.length-a.maximum,c="Please delete "+b+" character";return 1!=b&&(c+="s"),c},inputTooShort:function(a){var b=a.minimum-a.input.length,c="Please enter "+b+" or more characters";return c},loadingMore:function(){return"Loading more results…"},maximumSelected:function(a){var b="You can only select "+a.maximum+" item";return 1!=a.maximum&&(b+="s"),b},noResults:function(){return"No results found"},searching:function(){return"Searching…"}}}),b.define("select2/defaults",["jquery","require","./results","./selection/single","./selection/multiple","./selection/placeholder","./selection/allowClear","./selection/search","./selection/eventRelay","./utils","./translation","./diacritics","./data/select","./data/array","./data/ajax","./data/tags","./data/tokenizer","./data/minimumInputLength","./data/maximumInputLength","./data/maximumSelectionLength","./dropdown","./dropdown/search","./dropdown/hidePlaceholder","./dropdown/infiniteScroll","./dropdown/attachBody","./dropdown/minimumResultsForSearch","./dropdown/selectOnClose","./dropdown/closeOnSelect","./i18n/en"],function(a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C){function D(){this.reset()}D.prototype.apply=function(l){if(l=a.extend(!0,{},this.defaults,l),null==l.dataAdapter){if(null!=l.ajax?l.dataAdapter=o:null!=l.data?l.dataAdapter=n:l.dataAdapter=m,l.minimumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,r)),l.maximumInputLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,s)),l.maximumSelectionLength>0&&(l.dataAdapter=j.Decorate(l.dataAdapter,t)),l.tags&&(l.dataAdapter=j.Decorate(l.dataAdapter,p)),(null!=l.tokenSeparators||null!=l.tokenizer)&&(l.dataAdapter=j.Decorate(l.dataAdapter,q)),null!=l.query){var C=b(l.amdBase+"compat/query");l.dataAdapter=j.Decorate(l.dataAdapter,C)}if(null!=l.initSelection){var D=b(l.amdBase+"compat/initSelection");l.dataAdapter=j.Decorate(l.dataAdapter,D)}}if(null==l.resultsAdapter&&(l.resultsAdapter=c,null!=l.ajax&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,x)),null!=l.placeholder&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,w)),l.selectOnClose&&(l.resultsAdapter=j.Decorate(l.resultsAdapter,A))),null==l.dropdownAdapter){if(l.multiple)l.dropdownAdapter=u;else{var E=j.Decorate(u,v);l.dropdownAdapter=E}if(0!==l.minimumResultsForSearch&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,z)),l.closeOnSelect&&(l.dropdownAdapter=j.Decorate(l.dropdownAdapter,B)),null!=l.dropdownCssClass||null!=l.dropdownCss||null!=l.adaptDropdownCssClass){var F=b(l.amdBase+"compat/dropdownCss");l.dropdownAdapter=j.Decorate(l.dropdownAdapter,F)}l.dropdownAdapter=j.Decorate(l.dropdownAdapter,y)}if(null==l.selectionAdapter){if(l.multiple?l.selectionAdapter=e:l.selectionAdapter=d,null!=l.placeholder&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,f)),l.allowClear&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,g)),l.multiple&&(l.selectionAdapter=j.Decorate(l.selectionAdapter,h)),null!=l.containerCssClass||null!=l.containerCss||null!=l.adaptContainerCssClass){var G=b(l.amdBase+"compat/containerCss");l.selectionAdapter=j.Decorate(l.selectionAdapter,G)}l.selectionAdapter=j.Decorate(l.selectionAdapter,i)}if("string"==typeof l.language)if(l.language.indexOf("-")>0){var H=l.language.split("-"),I=H[0];l.language=[l.language,I]}else l.language=[l.language];if(a.isArray(l.language)){var J=new k;l.language.push("en");for(var K=l.language,L=0;L<K.length;L++){var M=K[L],N={};try{N=k.loadPath(M)}catch(O){try{M=this.defaults.amdLanguageBase+M,N=k.loadPath(M)}catch(P){l.debug&&window.console&&console.warn&&console.warn('Select2: The language file for "'+M+'" could not be automatically loaded. A fallback will be used instead.');continue}}J.extend(N)}l.translations=J}else{var Q=k.loadPath(this.defaults.amdLanguageBase+"en"),R=new k(l.language);R.extend(Q),l.translations=R}return l},D.prototype.reset=function(){function b(a){function b(a){return l[a]||a}return a.replace(/[^\u0000-\u007E]/g,b)}function c(d,e){if(""===a.trim(d.term))return e;if(e.children&&e.children.length>0){for(var f=a.extend(!0,{},e),g=e.children.length-1;g>=0;g--){var h=e.children[g],i=c(d,h);null==i&&f.children.splice(g,1)}return f.children.length>0?f:c(d,f)}var j=b(e.text).toUpperCase(),k=b(d.term).toUpperCase();return j.indexOf(k)>-1?e:null}this.defaults={amdBase:"./",amdLanguageBase:"./i18n/",closeOnSelect:!0,debug:!1,dropdownAutoWidth:!1,escapeMarkup:j.escapeMarkup,language:C,matcher:c,minimumInputLength:0,maximumInputLength:0,maximumSelectionLength:0,minimumResultsForSearch:0,selectOnClose:!1,sorter:function(a){return a},templateResult:function(a){return a.text},templateSelection:function(a){return a.text},theme:"default",width:"resolve"}},D.prototype.set=function(b,c){var d=a.camelCase(b),e={};e[d]=c;var f=j._convertData(e);a.extend(this.defaults,f)};var E=new D;return E}),b.define("select2/options",["require","jquery","./defaults","./utils"],function(a,b,c,d){function e(b,e){if(this.options=b,null!=e&&this.fromElement(e),this.options=c.apply(this.options),e&&e.is("input")){var f=a(this.get("amdBase")+"compat/inputData");this.options.dataAdapter=d.Decorate(this.options.dataAdapter,f)}}return e.prototype.fromElement=function(a){var c=["select2"];null==this.options.multiple&&(this.options.multiple=a.prop("multiple")),null==this.options.disabled&&(this.options.disabled=a.prop("disabled")),null==this.options.language&&(a.prop("lang")?this.options.language=a.prop("lang").toLowerCase():a.closest("[lang]").prop("lang")&&(this.options.language=a.closest("[lang]").prop("lang"))),null==this.options.dir&&(a.prop("dir")?this.options.dir=a.prop("dir"):a.closest("[dir]").prop("dir")?this.options.dir=a.closest("[dir]").prop("dir"):this.options.dir="ltr"),a.prop("disabled",this.options.disabled),a.prop("multiple",this.options.multiple),a.data("select2Tags")&&(this.options.debug&&window.console&&console.warn&&console.warn('Select2: The `data-select2-tags` attribute has been changed to use the `data-data` and `data-tags="true"` attributes and will be removed in future versions of Select2.'),a.data("data",a.data("select2Tags")),a.data("tags",!0)),a.data("ajaxUrl")&&(this.options.debug&&window.console&&console.warn&&console.warn("Select2: The `data-ajax-url` attribute has been changed to `data-ajax--url` and support for the old attribute will be removed in future versions of Select2."),a.attr("ajax--url",a.data("ajaxUrl")),a.data("ajax--url",a.data("ajaxUrl")));var e={};e=b.fn.jquery&&"1."==b.fn.jquery.substr(0,2)&&a[0].dataset?b.extend(!0,{},a[0].dataset,a.data()):a.data();var f=b.extend(!0,{},e);f=d._convertData(f);for(var g in f)b.inArray(g,c)>-1||(b.isPlainObject(this.options[g])?b.extend(this.options[g],f[g]):this.options[g]=f[g]);return this},e.prototype.get=function(a){return this.options[a]},e.prototype.set=function(a,b){this.options[a]=b},e}),b.define("select2/core",["jquery","./options","./utils","./keys"],function(a,b,c,d){var e=function(a,c){null!=a.data("select2")&&a.data("select2").destroy(),this.$element=a,this.id=this._generateId(a),c=c||{},this.options=new b(c,a),e.__super__.constructor.call(this);var d=a.attr("tabindex")||0;a.data("old-tabindex",d),a.attr("tabindex","-1");var f=this.options.get("dataAdapter");this.dataAdapter=new f(a,this.options);var g=this.render();this._placeContainer(g);var h=this.options.get("selectionAdapter");this.selection=new h(a,this.options),this.$selection=this.selection.render(),this.selection.position(this.$selection,g);var i=this.options.get("dropdownAdapter");this.dropdown=new i(a,this.options),this.$dropdown=this.dropdown.render(),this.dropdown.position(this.$dropdown,g);var j=this.options.get("resultsAdapter");this.results=new j(a,this.options,this.dataAdapter),this.$results=this.results.render(),this.results.position(this.$results,this.$dropdown);var k=this;this._bindAdapters(),this._registerDomEvents(),this._registerDataEvents(),this._registerSelectionEvents(),this._registerDropdownEvents(),this._registerResultsEvents(),this._registerEvents(),this.dataAdapter.current(function(a){k.trigger("selection:update",{data:a})}),a.addClass("select2-hidden-accessible"),a.attr("aria-hidden","true"),this._syncAttributes(),a.data("select2",this)};return c.Extend(e,c.Observable),e.prototype._generateId=function(a){var b="";return b=null!=a.attr("id")?a.attr("id"):null!=a.attr("name")?a.attr("name")+"-"+c.generateChars(2):c.generateChars(4),b=b.replace(/(:|\.|\[|\]|,)/g,""),b="select2-"+b},e.prototype._placeContainer=function(a){a.insertAfter(this.$element);var b=this._resolveWidth(this.$element,this.options.get("width"));null!=b&&a.css("width",b)},e.prototype._resolveWidth=function(a,b){var c=/^width:(([-+]?([0-9]*\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;if("resolve"==b){var d=this._resolveWidth(a,"style");return null!=d?d:this._resolveWidth(a,"element")}if("element"==b){var e=a.outerWidth(!1);return 0>=e?"auto":e+"px"}if("style"==b){var f=a.attr("style");if("string"!=typeof f)return null;for(var g=f.split(";"),h=0,i=g.length;i>h;h+=1){var j=g[h].replace(/\s/g,""),k=j.match(c);if(null!==k&&k.length>=1)return k[1]}return null}return b},e.prototype._bindAdapters=function(){this.dataAdapter.bind(this,this.$container),this.selection.bind(this,this.$container),this.dropdown.bind(this,this.$container),this.results.bind(this,this.$container)},e.prototype._registerDomEvents=function(){var b=this;this.$element.on("change.select2",function(){b.dataAdapter.current(function(a){b.trigger("selection:update",{data:a})})}),this.$element.on("focus.select2",function(a){b.trigger("focus",a)}),this._syncA=c.bind(this._syncAttributes,this),this._syncS=c.bind(this._syncSubtree,this),this.$element[0].attachEvent&&this.$element[0].attachEvent("onpropertychange",this._syncA);var d=window.MutationObserver||window.WebKitMutationObserver||window.MozMutationObserver;null!=d?(this._observer=new d(function(c){a.each(c,b._syncA),a.each(c,b._syncS)}),this._observer.observe(this.$element[0],{attributes:!0,childList:!0,subtree:!1})):this.$element[0].addEventListener&&(this.$element[0].addEventListener("DOMAttrModified",b._syncA,!1),this.$element[0].addEventListener("DOMNodeInserted",b._syncS,!1),this.$element[0].addEventListener("DOMNodeRemoved",b._syncS,!1))},e.prototype._registerDataEvents=function(){var a=this;this.dataAdapter.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerSelectionEvents=function(){var b=this,c=["toggle","focus"];this.selection.on("toggle",function(){b.toggleDropdown()}),this.selection.on("focus",function(a){b.focus(a)}),this.selection.on("*",function(d,e){-1===a.inArray(d,c)&&b.trigger(d,e)})},e.prototype._registerDropdownEvents=function(){var a=this;this.dropdown.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerResultsEvents=function(){var a=this;this.results.on("*",function(b,c){a.trigger(b,c)})},e.prototype._registerEvents=function(){var a=this;this.on("open",function(){a.$container.addClass("select2-container--open")}),this.on("close",function(){a.$container.removeClass("select2-container--open")}),this.on("enable",function(){a.$container.removeClass("select2-container--disabled")}),this.on("disable",function(){a.$container.addClass("select2-container--disabled")}),this.on("blur",function(){a.$container.removeClass("select2-container--focus")}),this.on("query",function(b){a.isOpen()||a.trigger("open",{}),this.dataAdapter.query(b,function(c){a.trigger("results:all",{data:c,query:b})})}),this.on("query:append",function(b){this.dataAdapter.query(b,function(c){a.trigger("results:append",{data:c,query:b})})}),this.on("keypress",function(b){var c=b.which;a.isOpen()?c===d.ESC||c===d.TAB||c===d.UP&&b.altKey?(a.close(),b.preventDefault()):c===d.ENTER?(a.trigger("results:select",{}),b.preventDefault()):c===d.SPACE&&b.ctrlKey?(a.trigger("results:toggle",{}),b.preventDefault()):c===d.UP?(a.trigger("results:previous",{}),b.preventDefault()):c===d.DOWN&&(a.trigger("results:next",{}),b.preventDefault()):(c===d.ENTER||c===d.SPACE||c===d.DOWN&&b.altKey)&&(a.open(),b.preventDefault())})},e.prototype._syncAttributes=function(){this.options.set("disabled",this.$element.prop("disabled")),this.options.get("disabled")?(this.isOpen()&&this.close(),this.trigger("disable",{})):this.trigger("enable",{})},e.prototype._syncSubtree=function(a,b){var c=!1,d=this;if(!a||!a.target||"OPTION"===a.target.nodeName||"OPTGROUP"===a.target.nodeName){if(b)if(b.addedNodes&&b.addedNodes.length>0)for(var e=0;e<b.addedNodes.length;e++){var f=b.addedNodes[e];f.selected&&(c=!0)}else b.removedNodes&&b.removedNodes.length>0&&(c=!0);else c=!0;c&&this.dataAdapter.current(function(a){d.trigger("selection:update",{data:a})})}},e.prototype.trigger=function(a,b){var c=e.__super__.trigger,d={open:"opening",close:"closing",select:"selecting",unselect:"unselecting"};if(void 0===b&&(b={}),a in d){var f=d[a],g={prevented:!1,name:a,args:b};if(c.call(this,f,g),g.prevented)return void(b.prevented=!0)}c.call(this,a,b)},e.prototype.toggleDropdown=function(){this.options.get("disabled")||(this.isOpen()?this.close():this.open())},e.prototype.open=function(){this.isOpen()||this.trigger("query",{})},e.prototype.close=function(){this.isOpen()&&this.trigger("close",{})},e.prototype.isOpen=function(){return this.$container.hasClass("select2-container--open")},e.prototype.hasFocus=function(){return this.$container.hasClass("select2-container--focus")},e.prototype.focus=function(a){this.hasFocus()||(this.$container.addClass("select2-container--focus"),this.trigger("focus",{}))},e.prototype.enable=function(a){this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("enable")` method has been deprecated and will be removed in later Select2 versions. Use $element.prop("disabled") instead.'),(null==a||0===a.length)&&(a=[!0]);var b=!a[0];this.$element.prop("disabled",b)},e.prototype.data=function(){this.options.get("debug")&&arguments.length>0&&window.console&&console.warn&&console.warn('Select2: Data can no longer be set using `select2("data")`. You should consider setting the value instead using `$element.val()`.');var a=[];return this.dataAdapter.current(function(b){a=b}),a},e.prototype.val=function(b){if(this.options.get("debug")&&window.console&&console.warn&&console.warn('Select2: The `select2("val")` method has been deprecated and will be removed in later Select2 versions. Use $element.val() instead.'),null==b||0===b.length)return this.$element.val();var c=b[0];a.isArray(c)&&(c=a.map(c,function(a){return a.toString()})),this.$element.val(c).trigger("change")},e.prototype.destroy=function(){this.$container.remove(),this.$element[0].detachEvent&&this.$element[0].detachEvent("onpropertychange",this._syncA),null!=this._observer?(this._observer.disconnect(),this._observer=null):this.$element[0].removeEventListener&&(this.$element[0].removeEventListener("DOMAttrModified",this._syncA,!1),this.$element[0].removeEventListener("DOMNodeInserted",this._syncS,!1),this.$element[0].removeEventListener("DOMNodeRemoved",this._syncS,!1)),this._syncA=null,this._syncS=null,this.$element.off(".select2"),this.$element.attr("tabindex",this.$element.data("old-tabindex")),this.$element.removeClass("select2-hidden-accessible"),this.$element.attr("aria-hidden","false"),this.$element.removeData("select2"),this.dataAdapter.destroy(),this.selection.destroy(),this.dropdown.destroy(),this.results.destroy(),this.dataAdapter=null,this.selection=null,this.dropdown=null,this.results=null;
+},e.prototype.render=function(){var b=a('<span class="select2 select2-container"><span class="selection"></span><span class="dropdown-wrapper" aria-hidden="true"></span></span>');return b.attr("dir",this.options.get("dir")),this.$container=b,this.$container.addClass("select2-container--"+this.options.get("theme")),b.data("element",this.$element),b},e}),b.define("select2/compat/utils",["jquery"],function(a){function b(b,c,d){var e,f,g=[];e=a.trim(b.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0===this.indexOf("select2-")&&g.push(this)})),e=a.trim(c.attr("class")),e&&(e=""+e,a(e.split(/\s+/)).each(function(){0!==this.indexOf("select2-")&&(f=d(this),null!=f&&g.push(f))})),b.attr("class",g.join(" "))}return{syncCssClasses:b}}),b.define("select2/compat/containerCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("containerCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptContainerCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("containerCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/dropdownCss",["jquery","./utils"],function(a,b){function c(a){return null}function d(){}return d.prototype.render=function(d){var e=d.call(this),f=this.options.get("dropdownCssClass")||"";a.isFunction(f)&&(f=f(this.$element));var g=this.options.get("adaptDropdownCssClass");if(g=g||c,-1!==f.indexOf(":all:")){f=f.replace(":all:","");var h=g;g=function(a){var b=h(a);return null!=b?b+" "+a:a}}var i=this.options.get("dropdownCss")||{};return a.isFunction(i)&&(i=i(this.$element)),b.syncCssClasses(e,this.$element,g),e.css(i),e.addClass(f),e},d}),b.define("select2/compat/initSelection",["jquery"],function(a){function b(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `initSelection` option has been deprecated in favor of a custom data adapter that overrides the `current` method. This method is now called multiple times instead of a single time when the instance is initialized. Support will be removed for the `initSelection` option in future versions of Select2"),this.initSelection=c.get("initSelection"),this._isInitialized=!1,a.call(this,b,c)}return b.prototype.current=function(b,c){var d=this;return this._isInitialized?void b.call(this,c):void this.initSelection.call(null,this.$element,function(b){d._isInitialized=!0,a.isArray(b)||(b=[b]),c(b)})},b}),b.define("select2/compat/inputData",["jquery"],function(a){function b(a,b,c){this._currentData=[],this._valueSeparator=c.get("valueSeparator")||",","hidden"===b.prop("type")&&c.get("debug")&&console&&console.warn&&console.warn("Select2: Using a hidden input with Select2 is no longer supported and may stop working in the future. It is recommended to use a `<select>` element instead."),a.call(this,b,c)}return b.prototype.current=function(b,c){function d(b,c){var e=[];return b.selected||-1!==a.inArray(b.id,c)?(b.selected=!0,e.push(b)):b.selected=!1,b.children&&e.push.apply(e,d(b.children,c)),e}for(var e=[],f=0;f<this._currentData.length;f++){var g=this._currentData[f];e.push.apply(e,d(g,this.$element.val().split(this._valueSeparator)))}c(e)},b.prototype.select=function(b,c){if(this.options.get("multiple")){var d=this.$element.val();d+=this._valueSeparator+c.id,this.$element.val(d),this.$element.trigger("change")}else this.current(function(b){a.map(b,function(a){a.selected=!1})}),this.$element.val(c.id),this.$element.trigger("change")},b.prototype.unselect=function(a,b){var c=this;b.selected=!1,this.current(function(a){for(var d=[],e=0;e<a.length;e++){var f=a[e];b.id!=f.id&&d.push(f.id)}c.$element.val(d.join(c._valueSeparator)),c.$element.trigger("change")})},b.prototype.query=function(a,b,c){for(var d=[],e=0;e<this._currentData.length;e++){var f=this._currentData[e],g=this.matches(b,f);null!==g&&d.push(g)}c({results:d})},b.prototype.addOptions=function(b,c){var d=a.map(c,function(b){return a.data(b[0],"data")});this._currentData.push.apply(this._currentData,d)},b}),b.define("select2/compat/matcher",["jquery"],function(a){function b(b){function c(c,d){var e=a.extend(!0,{},d);if(null==c.term||""===a.trim(c.term))return e;if(d.children){for(var f=d.children.length-1;f>=0;f--){var g=d.children[f],h=b(c.term,g.text,g);h||e.children.splice(f,1)}if(e.children.length>0)return e}return b(c.term,d.text,d)?e:null}return c}return b}),b.define("select2/compat/query",[],function(){function a(a,b,c){c.get("debug")&&window.console&&console.warn&&console.warn("Select2: The `query` option has been deprecated in favor of a custom data adapter that overrides the `query` method. Support will be removed for the `query` option in future versions of Select2."),a.call(this,b,c)}return a.prototype.query=function(a,b,c){b.callback=c;var d=this.options.get("query");d.call(null,b)},a}),b.define("select2/dropdown/attachContainer",[],function(){function a(a,b,c){a.call(this,b,c)}return a.prototype.position=function(a,b,c){var d=c.find(".dropdown-wrapper");d.append(b),b.addClass("select2-dropdown--below"),c.addClass("select2-container--below")},a}),b.define("select2/dropdown/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$dropdown.on(d.join(" "),function(a){a.stopPropagation()})},a}),b.define("select2/selection/stopPropagation",[],function(){function a(){}return a.prototype.bind=function(a,b,c){a.call(this,b,c);var d=["blur","change","click","dblclick","focus","focusin","focusout","input","keydown","keyup","keypress","mousedown","mouseenter","mouseleave","mousemove","mouseover","mouseup","search","touchend","touchstart"];this.$selection.on(d.join(" "),function(a){a.stopPropagation()})},a}),function(c){"function"==typeof b.define&&b.define.amd?b.define("jquery-mousewheel",["jquery"],c):"object"==typeof exports?module.exports=c:c(a)}(function(a){function b(b){var g=b||window.event,h=i.call(arguments,1),j=0,l=0,m=0,n=0,o=0,p=0;if(b=a.event.fix(g),b.type="mousewheel","detail"in g&&(m=-1*g.detail),"wheelDelta"in g&&(m=g.wheelDelta),"wheelDeltaY"in g&&(m=g.wheelDeltaY),"wheelDeltaX"in g&&(l=-1*g.wheelDeltaX),"axis"in g&&g.axis===g.HORIZONTAL_AXIS&&(l=-1*m,m=0),j=0===m?l:m,"deltaY"in g&&(m=-1*g.deltaY,j=m),"deltaX"in g&&(l=g.deltaX,0===m&&(j=-1*l)),0!==m||0!==l){if(1===g.deltaMode){var q=a.data(this,"mousewheel-line-height");j*=q,m*=q,l*=q}else if(2===g.deltaMode){var r=a.data(this,"mousewheel-page-height");j*=r,m*=r,l*=r}if(n=Math.max(Math.abs(m),Math.abs(l)),(!f||f>n)&&(f=n,d(g,n)&&(f/=40)),d(g,n)&&(j/=40,l/=40,m/=40),j=Math[j>=1?"floor":"ceil"](j/f),l=Math[l>=1?"floor":"ceil"](l/f),m=Math[m>=1?"floor":"ceil"](m/f),k.settings.normalizeOffset&&this.getBoundingClientRect){var s=this.getBoundingClientRect();o=b.clientX-s.left,p=b.clientY-s.top}return b.deltaX=l,b.deltaY=m,b.deltaFactor=f,b.offsetX=o,b.offsetY=p,b.deltaMode=0,h.unshift(b,j,l,m),e&&clearTimeout(e),e=setTimeout(c,200),(a.event.dispatch||a.event.handle).apply(this,h)}}function c(){f=null}function d(a,b){return k.settings.adjustOldDeltas&&"mousewheel"===a.type&&b%120===0}var e,f,g=["wheel","mousewheel","DOMMouseScroll","MozMousePixelScroll"],h="onwheel"in document||document.documentMode>=9?["wheel"]:["mousewheel","DomMouseScroll","MozMousePixelScroll"],i=Array.prototype.slice;if(a.event.fixHooks)for(var j=g.length;j;)a.event.fixHooks[g[--j]]=a.event.mouseHooks;var k=a.event.special.mousewheel={version:"3.1.12",setup:function(){if(this.addEventListener)for(var c=h.length;c;)this.addEventListener(h[--c],b,!1);else this.onmousewheel=b;a.data(this,"mousewheel-line-height",k.getLineHeight(this)),a.data(this,"mousewheel-page-height",k.getPageHeight(this))},teardown:function(){if(this.removeEventListener)for(var c=h.length;c;)this.removeEventListener(h[--c],b,!1);else this.onmousewheel=null;a.removeData(this,"mousewheel-line-height"),a.removeData(this,"mousewheel-page-height")},getLineHeight:function(b){var c=a(b),d=c["offsetParent"in a.fn?"offsetParent":"parent"]();return d.length||(d=a("body")),parseInt(d.css("fontSize"),10)||parseInt(c.css("fontSize"),10)||16},getPageHeight:function(b){return a(b).height()},settings:{adjustOldDeltas:!0,normalizeOffset:!0}};a.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})}),b.define("jquery.select2",["jquery","jquery-mousewheel","./select2/core","./select2/defaults"],function(a,b,c,d){if(null==a.fn.select2){var e=["open","close","destroy"];a.fn.select2=function(b){if(b=b||{},"object"==typeof b)return this.each(function(){var d=a.extend(!0,{},b);new c(a(this),d)}),this;if("string"==typeof b){var d,f=Array.prototype.slice.call(arguments,1);return this.each(function(){var c=a(this).data("select2");null==c&&window.console&&console.error&&console.error("The select2('"+b+"') method was called on an element that is not using Select2."),d=c[b].apply(c,f)}),a.inArray(b,e)>-1?this:d}throw new Error("Invalid arguments for Select2: "+b)}}return null==a.fn.select2.defaults&&(a.fn.select2.defaults=d),c}),{define:b.define,require:b.require}}(),c=b.require("jquery.select2");return a.fn.select2.amd=b,c});
\ No newline at end of file
diff --git a/plugins/ckeditor4/ckeditortablecellsselection/.gitattributes b/plugins/ckeditor4/ckeditortablecellsselection/.gitattributes
new file mode 100644
index 0000000..a8df6a3
--- /dev/null
+++ b/plugins/ckeditor4/ckeditortablecellsselection/.gitattributes
@@ -0,0 +1,5 @@
+/.gitattributes export-ignore
+/.gitignore     export-ignore
+/LICENSE        export-ignore
+/README.md      export-ignore
+/ckeditortablecellsselection.gif  export-ignore
diff --git a/plugins/ckeditor4/ckeditortablecellsselection/.gitignore b/plugins/ckeditor4/ckeditortablecellsselection/.gitignore
new file mode 100644
index 0000000..1da8522
--- /dev/null
+++ b/plugins/ckeditor4/ckeditortablecellsselection/.gitignore
@@ -0,0 +1 @@
+.idea
diff --git a/plugins/ckeditor4/ckeditortablecellsselection/LICENSE b/plugins/ckeditor4/ckeditortablecellsselection/LICENSE
new file mode 100644
index 0000000..f12904d
--- /dev/null
+++ b/plugins/ckeditor4/ckeditortablecellsselection/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Valerij Ivashchenko
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/plugins/ckeditor4/ckeditortablecellsselection/README.md b/plugins/ckeditor4/ckeditortablecellsselection/README.md
new file mode 100644
index 0000000..af167e0
--- /dev/null
+++ b/plugins/ckeditor4/ckeditortablecellsselection/README.md
@@ -0,0 +1,20 @@
+# CKEditorTableCellsSelection
+CKEditor plugin for intuitive table cells selection (like MS Excel or Google Docs).
+This is wrapper for CKEditor about [tablecellsselection jQuery plugin](https://github.com/likemusic/tablecellsselection)
+
+![CKEditorTableCellsSelection](ckeditortablecellsselection.gif)
+
+#Usage example
+```javascript
+CKEDITOR.replace( 'editor1',{
+    extraPlugins:'ckeditortablecellsselection'
+});
+```
+
+For more info see ["Installing Plugins" official documentation](http://docs.ckeditor.com/#!/guide/dev_plugins)
+
+# TODO
+Integrate with CKEditor Selection API.
+
+# Licence
+The MIT License (MIT).
diff --git a/plugins/ckeditor4/ckeditortablecellsselection/ckeditortablecellsselection.gif b/plugins/ckeditor4/ckeditortablecellsselection/ckeditortablecellsselection.gif
new file mode 100644
index 0000000000000000000000000000000000000000..7681ef334b70bab8ab2f9ebe81346899cf2b73a8
GIT binary patch
literal 508340
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%0AqZ)5ubjYk=)bm6$x10&ZFA0H4dTED@#P@XDXo
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

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js b/plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js
new file mode 100644
index 0000000..54e3d80
--- /dev/null
+++ b/plugins/ckeditor4/ckeditortablecellsselection/js/tablecellsselection.js
@@ -0,0 +1,601 @@
+"use strict";
+
+(function($, window, document, undefined) {
+
+    var settings;
+    
+    var systemSettings = {
+        dataKey : 'cellsSelector',
+        eventNamespace: 'cellsselector'
+    };
+
+    var isMouseDown = false;//нажата ли левая клавиша мыши
+
+    var methods = {
+        init: function(options){
+            //console.log('method>init');
+            var defaultSettings = {
+                selectableTableClass : 'tcs',//класс добавляемый к таблицам
+                selectedCellClass : 'tcs-selected',//класс добавляемый к выделенным ячейкам таблицы
+                selectionEnabled: 'tcs-selection-enabled' //???
+            };
+        
+            settings = 
+    		    (!options) ? defaultSettings
+                : $.extend(defaultSettings,options);
+            //todo: set listenets on all document for handle all tables added to html
+    		return this.filter("table").each(initTableIfNeed);
+        },
+
+        destroy: function(){
+            //console.log('method>destroy');
+            return this.each(function(){
+                destroyTable($(this));
+                //$(window).unbind('.cellsselector');
+            });
+        },
+
+        selectedCells: function(){
+            //this - $table
+            //console.log('selectedCells');
+            return getSelectedCells(this);
+        },
+        /*
+        getSelectedCells: function(){},
+        setSelectedCells: function(){},
+        selectCells: function(){},
+        selectCell: function(){},
+
+        selectAll: function(){},
+        deselectAll: function(){},
+        */
+        //todo: implement
+        removeDocumentHtmlChanges: removeDocumentHtmlChanges,
+        addDocumentHtmlChanges: addDocumentHtmlChanges
+    };
+
+    //----------- INIT
+
+    /** Инициализирует таблицу если она неинициализированна */
+    function initTableIfNeed(index, table)
+    {
+        var $table = $(table),
+            data = $table.data(systemSettings.dataKey);
+
+        //плагин еще не проинициализирован
+        if(!data){
+            //инициализируем
+            initTable($table);
+            $table.data(systemSettings.dataKey,getInitialData());
+        }
+        
+        //initTableCellsSelector(el);
+        //$(this).__proto__.csHandler = new Handler(settings, this, document);
+        //if(!$(this).csHandler) $(this).__proto__.csHandler = new Handler(settings, this, document);
+        //else $(this).csHandler.restart(); 
+      
+    }
+
+    /** Возварщает исходные данные таблицы */
+    function getInitialData()
+    {
+        return {
+            selFrom: false,
+            selTo: false,
+            isHighlighted: undefined,
+            $currTR: $(),//todo: нужны ли?
+            $currTH: $(),//todo: нужны ли?
+            $currCell: $() //todo: нужны ли?
+        };
+    }
+
+    /** Инициализирует таблицу */
+    function initTable($table){
+        //addData()???
+        addTableHtmlChanges($table);
+
+        addEventListeners($table);
+
+        function addEventListeners($table)
+        {
+            //console.log('addInitialEventListeners');
+            addInitialSelectionEventListeners($table);
+            addInitialCopyPasteEventListeners($table);
+
+            function addInitialSelectionEventListeners($table)
+            {
+                //console.log('addInitialSelectionEventListeners');
+
+                $table
+                    .on(getEventNameWithPluginNamespace('mouseover'),onMouseOver)//.mouseover(onMouseOver)
+                    .on(getEventNameWithPluginNamespace('mousedown'),onMouseDown)//.mousedown(onMouseDown)
+                    //.on(getEventNameWithPluginNamespace('dragstart'),onDragStart)
+                    .on(getEventNameWithPluginNamespace('mouseup'),onMouseUp);//.mouseup(onMouseUp);
+
+                //клик на документе вне таблицы
+                $($table[0].ownerDocument).on(getEventNameWithPluginNamespace('click'),onOutTableClick);
+                //or $table.closest(":root"); - html
+                //or $('html')
+                //or $(document)
+
+                function onMouseOver(event)
+                {
+                    //console.log('mouseover table');
+                    var pluginData = getPluginDataByEvent(event);
+
+                    var $target = pluginData.$target;
+
+                    //таблица
+                    var $table = pluginData.$table;
+
+                    //ячейку
+                    var $cell = pluginData.$cell;
+
+                    if($cell.length==0) return;//событие сработало не для ячейки (самой таблицы или других её элементов)
+
+                    var data = pluginData.data;
+                    data.$currCell = $cell;
+
+                    //если клавиша мыши не нажата, значит не выделение ячеек
+                    if (!isMouseDown) return false;
+                    //todo: переделать на глобальный индикатор нажатия кнопки мыши
+
+                    //скрываем стандартное выделение в таблице
+                    var selectionEnableClass = settings.selectionEnabled;
+                    $table.find('.'+selectionEnableClass).removeClass(selectionEnableClass);
+
+                    data.selTo = getCoordinates($cell);
+
+                    setPointCoordinates(data,$cell);
+                    //todo: move to bottom
+                    function coordinateManipulateMagic() {
+                        var i = 1;
+                        while (i > 0) {
+                            i = 0;//wtf???
+                            getTableCells($table).each(function (key, cell) {
+                                data.$elemX = $(cell).offset().left;
+                                data.$elemXwidth = $(cell).offset().left + $(cell).width();
+
+                                data.$elemY = $(cell).offset().top;
+                                data.$elemYheight = $(cell).offset().top + $(cell).height();
+
+                                if ((data.$elemX < data.$pointXmin) && (data.$elemXwidth >= data.$pointXmin) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemYheight <= data.$pointYheight) && (data.$elemYheight > data.$pointYmin)) {
+                                    data.$temp = data.$elemX;
+                                    if (data.$temp != data.$pointXmin) {
+                                        data.$pointXmin = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+
+                                if ((data.$elemX >= data.$pointXmin) && (data.$elemX < data.$pointXwidth) && (data.$elemXwidth >= data.$pointXwidth) && (data.$elemYheight <= data.$pointYheight) && (data.$elemYheight > data.$pointYmin)) {
+                                    data.$temp = data.$elemXwidth;
+                                    if (data.$temp != data.$pointXwidth) {
+                                        data.$pointXwidth = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+
+                                if ((data.$elemY < data.$pointYmin) && (data.$elemYheight >= data.$pointYmin) && (data.$elemYheight <= data.$pointYheight) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemXwidth > data.$pointXmin)) {
+                                    data.$temp = data.$elemY;
+                                    if (data.$temp != data.$pointYmin) {
+                                        data.$pointYmin = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+
+                                if ((data.$elemY >= data.$pointYmin) && (data.$elemY < data.$pointYheight) && (data.$elemYheight >= data.$pointYheight) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemXwidth > data.$pointXmin)) {
+                                    data.$temp = data.$elemYheight;
+                                    if (data.$temp != data.$pointYheight) {
+                                        data.$pointYheight = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+
+                                if ((data.$elemX < data.$pointXmin) && (data.$elemXwidth >= data.$pointXwidth) && (data.$elemYheight <= data.$pointYheight) && (data.$elemYheight > data.$pointYmin)) {
+                                    data.$temp = data.$elemX;
+                                    if (data.$temp < data.$pointXmin) {
+                                        data.$pointXmin = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+                                if ((data.$elemX > data.$pointXmin) && (data.$elemX < data.$pointXwidth) && (data.$elemY < data.$pointYheight) && (data.$elemY > data.$pointYmin)) {
+                                    data.$temp = data.$elemXwidth;
+                                    if (data.$temp > data.$pointXwidth) {
+                                        data.$pointXwidth = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+
+                                if ((data.$elemY < data.$pointYmin) && (data.$elemYheight >= data.$pointYmin) && (data.$elemYheight <= data.$pointYheight) && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemXwidth > data.$pointXmin)) {
+                                    data.$temp = data.$elemY;
+                                    if (data.$temp < data.$pointYmin) {
+                                        data.$pointYmin = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+                                if ((data.$elemY > data.$pointYmin) && (data.$elemYheight <= data.$pointYheight) && (data.$elemX <= data.$pointXwidth)) {
+                                    data.$temp = data.$elemYheight;
+                                    if (data.$temp > data.$pointYheight) {
+                                        data.$pointYheight = data.$temp;
+                                        i = 1;
+                                    }
+                                }
+                            });
+                        }
+                    }
+
+                    coordinateManipulateMagic();
+
+                    selectCells($table,data);
+                    $table.data(data);
+                    return true;
+
+                    function setPointCoordinates(data, $cell) {
+                        data.$pointX2 = $cell.offset().left;
+                        data.$pointX2width = $cell.offset().left + $cell.width();
+
+                        data.$pointY2 = $cell.offset().top;
+                        data.$pointY2height = $cell.offset().top + $cell.height();
+
+                        if (data.$pointX1 < data.$pointX2) {
+                            data.$pointXmin = data.$pointX1;
+                            data.$pointXmax = data.$pointX2;
+                        } else {
+                            data.$pointXmin = data.$pointX2;
+                            data.$pointXmax = data.$pointX1;
+                        }
+                        if (data.$pointX1width > data.$pointX2width) {
+                            data.$pointXwidth = data.$pointX1width;
+                        } else {
+                            data.$pointXwidth = data.$pointX2width;
+                        }
+                        if (data.$pointY1 < data.$pointY2) {
+                            data.$pointYmin = data.$pointY1;
+                            data.$pointYmax = data.$pointY2;
+                        } else {
+                            data.$pointYmin = data.$pointY2;
+                            data.$pointYmax = data.$pointY1;
+                        }
+                        if (data.$pointY1height > data.$pointY2height) {
+                            data.$pointYheight = data.$pointY1height;
+                        } else {
+                            data.$pointYheight = data.$pointY2height;
+                        }
+                    }
+                }
+
+                function onMouseDown(event){
+                    //console.log('mousedown table');
+                    var pluginData = getPluginDataByEvent(event);
+
+                    //если клик правой кнопкой мыши - ничего не делаем
+                    if (isRightMouseButton(event)) return true;
+
+                    //таблица
+                    var $table = pluginData.$table;
+
+                    //получаем ячейку
+                    var $cell = pluginData.$cell;
+                    //self.$currCell = $cell;
+
+                    if($cell.length==0) return;//событие сработало не для ячейки (самой таблицы или других её элементов)
+
+                    //event.stopPropagation();//надо ли?
+                    //event.stopImmediatePropagation();//тем более это?
+
+                    $cell.addClass(settings.selectionEnabled);
+
+                    var data = pluginData.data;
+
+                    isMouseDown = true;
+                    data.selFrom = getCoordinates($cell);
+                    data.selFrom.$el = $cell;
+
+                    var selectedCellClass = settings.selectedCellClass;
+                    if ($cell.hasClass(selectedCellClass) && deselectAll($table) === 1) {
+                        $cell.removeClass(selectedCellClass);
+                    } else {
+                        deselectAll($table);
+                        $cell.addClass(selectedCellClass);
+                    }
+
+                    data.$pointX1 = $cell.offset().left;
+                    data.$pointX1width = $cell.offset().left+$cell.width();
+                    data.$pointY1 = $cell.offset().top;
+                    data.$pointY1height = $cell.offset().top+$cell.height();
+
+                    data.isHighlighted = $cell.hasClass(selectedCellClass);
+                    $table.data(data);
+                    return true;
+                }
+
+
+                /*function onDragStart(event)
+                {
+                    //console.log('dragstart table');
+                    //event.preventDefault();//todo: надо ли?
+                    return true;
+                }*/
+
+                function onMouseUp(event){
+                    //console.log('mouseup table');
+                    var pluginData = getPluginDataByEvent(event);
+                    var data = pluginData.data;
+                    isMouseDown = false;
+                    data.selFrom = false;
+                    data.selTo = false;
+                    pluginData.$table.data(data);
+                }
+
+                //клик на документе вне таблицы
+                function onOutTableClick(event){
+                    //console.log('click (out of table)');
+                    isMouseDown = false;
+                    if($(event.target).closest($table).length==0) deselectAll($table);
+                }
+            }
+
+            function addInitialCopyPasteEventListeners($table)
+            {
+                //console.log('addInitialCopyPasteEventListeners');
+
+                //this.$table.off('copy');
+                $table.on('copy',onCopy);
+
+                function onCopy(e){
+                    e.originalEvent.clipboardData.setData('text/plain', handler.getSelectedDataAsText());
+                    e.preventDefault(); // We want our data, not data from any selection, to be written to the clipboard
+                    //var handler = $(e.target).csHandler;
+                    //e.originalEvent.clipboardData.setData('text/csv', handler.getSelectedDataAsText());
+                    //e.originalEvent.clipboardData.setData('Text', handler.getSelectedDataAsText());
+                    //e.originalEvent.clipboardData.setData('text/html', '<b>Hello, world!text/html</b>');
+                    //e.originalEvent.clipboardData.setData('text/html', handler.getSelectedDataAsHtml());
+                    //console.log(e.originalEvent.clipboardData.types);
+                    //console.log('copy:'+ e.target.innerHTML);
+                    //console.log('copy');
+                    //console.log(e);
+                }
+
+                //-------- Copy/Paste event-listeners
+
+                /*$table.on('beforecopy', function(e){
+                    //console.log('beforecopy');
+
+                    /*if(weHaveDataToCopy()){ // use your web app's internal logic to determine if something can be copied
+                     e.preventDefault(); // enable copy UI and events
+                     }
+                });*/
+
+
+                /*        table.addEventListener('copy', function(e){
+                 //var handler = e.target.csHandler;
+                 //var handler = $(e.target).csHandler;
+                 //e.clipboardData.setData('text/plain', handler.getSelectedDataAsText());
+                 //e.clipboardData.setData('text/html', handler.getSelectedDataAsHtml());
+                 //e.clipboardData.setData('text/plain', 'getSelectedDataAsText');
+                 //e.clipboardData.setData('text/html', 'getSelectedDataAsHtml');
+                 //console.log('copy:'+ e.target.innerHTML);
+                 console.log('copy');
+                 console.log(e);
+                 //e.preventDefault(); // We want our data, not data from any selection, to be written to the clipboard
+                 });
+                 */
+
+                //this.$table.on('paste',onPaste);
+                /*$table.on('paste', function(e){
+                    //console.log('paste-Listener');
+                    //console.log(e);
+                    /*if(e.clipboardData.types.indexOf('text/html') > -1){
+                     processDataFromClipboard(e.clipboardData.getData('text/html'));
+                     e.preventDefault(); // We are already handling the data from the clipboard, we do not want it inserted into the document
+                     }
+                });*/
+
+
+                /*function onPaste(e){
+                    //console.log('paste-onPaste');
+                    //console.log(e);
+                }*/
+            }
+        }
+    }
+
+
+    //----------- DESTROY
+
+    function destroyTable($table)
+    {
+        //console.log('destroyTable');
+        removeEventListeners($table);
+        removeData($table);
+        removeTableHtmlChanges($table);
+
+        function removeEventListeners($table)
+        {
+            $table.unbind('.'+systemSettings.eventNamespace);
+        }
+
+        function removeData($table){
+            $table.removeData(systemSettings.dataKey);
+        }
+    }
+
+	$.fn.tableCellsSelection = function (method) {
+        if(methods[method]) {
+            return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
+        } else if ( typeof method === 'object' || ! method ) {
+            return methods.init.apply( this, arguments );
+        } else {
+          $.error( 'Метод с именем ' +  method + ' не существует для jQuery.tooltip' );
+        } 
+	};
+
+    //**************** Table/Cells funcs
+    function removeDocumentHtmlChanges($document){
+        var $tables = $document.find('table');
+        removeTableHtmlChanges($tables);
+    }
+
+    function addDocumentHtmlChanges($document){
+        var $tables = $document.find('table');
+        addTableHtmlChanges($tables);
+    }
+
+    /**
+     * Удаляет внесенные изменения в html-коде (в данный момент удалет служебные классы)
+     * @param $table - отдельная таблица или весь документ
+     */
+    //todo: разделить на ф-цию чистки всего документа и таблиц.
+    //todo: В документе удалять используемые классы только у таблиц.
+    function removeTableHtmlChanges($table){
+        $table.removeClass(settings.selectableTableClass);
+        removeChildrensClass($table,settings.selectedCellClass);
+        removeChildrensClass($table,settings.selectionEnabled);
+
+        function removeChildrensClass($table,className){
+            $table.find('.'+className).removeClass(className);
+        }
+    }
+
+    /**
+     * Добавляет изменения в html-код
+     * в соответствии с текущим состоянием таблицы.
+     * На данный момент добаляет служебные классы к таблице  и её ячейкам.
+     * @param $table
+     */
+    function addTableHtmlChanges($table){
+        $table.addClass(settings.selectableTableClass);
+        //todo: добавить подсветку выделенных ячеек
+        /*
+            $selectedCells = getSelectedCells();
+            $selectedCells.adddClass(settings.selectedCellClass);
+            $selectedCells.adddClass(settings.selectionEnabled);
+         */
+    }
+
+	function getSelectedDataAsText($table) {
+		//console.log('getSelectedDataAsText');
+        var selectedCells = getSelectedCells($table);//выделенные ячейки
+        var selectedRows = selectedCells.closest('tr');//строки с выделенными ячейками
+
+        var ret='';
+        //для каждой строки получаем значения ячеек
+        for(var i=0;i<selectedRows.length;i++){
+            var rowValues = [];
+            var rowSelectedCells = selectedRows.eq(i).find(selectedCells);
+            for(var j=0;j<rowSelectedCells.length;j++){
+                rowValues.push(rowSelectedCells[j].innerText);
+            }
+            ret += rowValues.join("\t") + "\r\n";
+        }
+        return ret;
+        //if (allTables) return this.$doc.find('.cell-active');
+		//return this.$table.find('.cell-active');
+	}
+
+	/*function getSelectedDataAsHtml($table) {
+		//console.log('getSelectedDataAsHtml');
+        return '<b>getSelectedDataAsHtml</b>';
+		//if (allTables) return this.$doc.find('.cell-active');
+		//return this.$table.find('.cell-active');
+	};*/
+
+    //todo: нужно ли?
+    /*
+	function restart($table) {
+        this.$table.addClass(settings.selectableTableClass);
+		this.allCells() = this.$table.find('th, td');
+		this.init();
+	};*/
+
+	/*function getCell($table, x, y) {
+		if (y == 1) return $table.find('tr[data_y="1"] > th[data_x="'+x+'"]');
+		return this.$table.find('tr[data_y="'+y+'"] > td[data_x="'+x+'"]');
+	}*/
+    
+	function isSelectedCell($cell) {
+		return $cell.hasClass(settings.selectedCellClass);
+	}
+
+    /*function selectCell($table,$cell) {
+        //todo: implement
+        if (isSelectedCell($cell)) return deselectCell($cell);
+		deselectAll($table);
+
+		if ($cell.is('td, th')) $cell.addClass(settings.selectedCellClass);
+	}*/
+
+    function selectCells($table, data) {
+        deselectAll($table);
+
+        getTableCells($table).each(function (key, cell) {
+            data.$elemX = $(cell).offset().left;
+            data.$elemXwidth = $(cell).offset().left + $(cell).width();
+            data.$elemY = $(cell).offset().top;
+            data.$elemXheight = $(cell).offset().top + $(cell).height();
+
+            if ((data.$elemX >= data.$pointXmin) && (data.$elemXwidth <= data.$pointXwidth)
+                && (data.$elemXwidth <= data.$pointXwidth) && (data.$elemY >= data.$pointYmin)
+                && (data.$elemY <= data.$pointYheight) && (data.$elemYheight >= data.$pointYheight)) {
+                $(cell).addClass(settings.selectedCellClass);
+            }
+        });
+        $table.trigger('selectionchange.'+ systemSettings.eventNamespace);
+    }
+
+    //todo: удалить параметр allTables
+	function getSelectedCells($table) {
+		return $table.find('.'+settings.selectedCellClass);
+	}
+
+    function getCoordinates($cell){
+        return {
+            x: parseInt($cell.attr('data_x')),//todo: заменить на DOM-свойства вроде colNumber
+            y: parseInt($cell.parent('tr').attr('data_y')),
+            colspan: $cell.attr('colspan') ? parseInt($cell.attr('colspan')) : 0,
+            rowspan: $cell.attr('rowspan') ? parseInt($cell.attr('rowspan')) : 0
+        };
+    }
+
+    function getTableCells($table){ return $table.find('th, td'); }
+
+    function deselectAll($table) {
+        var selectedCells = getSelectedCells($table);//TODO:исправить на локальные изменения только
+        var length = 0;
+
+        /*selectedCells.each(function(i, cell) {
+            length++;
+            $(cell).removeClass(settings.selectedCellClass);
+        });*/
+        //or
+        selectedCells.removeClass(settings.selectedCellClass);
+
+        return length;
+    }
+
+
+    //**************** PLUGIN
+
+    function getEventNameWithPluginNamespace(event){return event + '.' + systemSettings.eventNamespace}
+
+    function isRightMouseButton(event) {
+        var isRightMB;
+        event = event || window.event;
+        if ("which" in event)
+            isRightMB = event.which == 3;
+        else if ("button" in event)
+            isRightMB = event.button == 2;
+        return isRightMB;
+    }
+
+    function getPluginDataByEvent(event){
+        var $target = $(event.target);
+        var $table = $target.closest('table');
+        return {
+            $target: $target,
+            $table: $table,
+            $cell: $target.closest('td,th'),
+            data: $table.data(systemSettings.dataKey)
+        }
+    }
+})(jQuery, window, document);
diff --git a/plugins/ckeditor4/ckeditortablecellsselection/plugin.js b/plugins/ckeditor4/ckeditortablecellsselection/plugin.js
new file mode 100644
index 0000000..46312ab
--- /dev/null
+++ b/plugins/ckeditor4/ckeditortablecellsselection/plugin.js
@@ -0,0 +1,456 @@
+CKEDITOR.plugins.add('ckeditortablecellsselection', {
+    init: function (editor) {
+
+        var pluginDirectory = this.path;
+
+        //add custom css
+        editor.addContentsCss(pluginDirectory + 'styles/tablecellsselection.css');
+
+        //add custom script
+        CKEDITOR.scriptLoader.load(pluginDirectory + 'js/tablecellsselection.js');
+
+
+        //editor.ui.addToolbarGroup('tables',0);//todo: what sens if we cand add it dinamic at runtime (used predefined or user config)
+
+        //---------- Handlers
+        //--- LOAD
+        /*editor.on('loaded',function(event){
+         console.log('loaded');
+         });*/
+
+         /*editor.on('instanceReady',function(event) {
+             console.log('instanceReady');
+         });*/
+
+/*         //--- SNAPSHOT
+         editor.on('getSnapshot',function(event){
+         console.log('getSnapshot');
+
+         });
+
+         //todo: set tableCellsSelection here for undo/redo (delete on change)
+         editor.on('loadSnapshot',function(event){
+         console.log('loadSnapshot');
+         });
+
+         editor.on('lockSnapshot',function(event){
+         console.log('lockSnapshot');
+         });
+
+         editor.on('saveSnapshot',function(event){
+         console.log('saveSnapshot');
+         });
+
+         editor.on('unlockSnapshot',function(event){
+         console.log('unlockSnapshot');
+         });
+
+         editor.on('updateSnapshot',function(event){
+         console.log('updateSnapshot');
+         });
+
+         //--- MODE
+         editor.on('beforeModeUnload',function(event){
+         console.log('beforeModeUnload');
+         });
+
+         editor.on('beforeSetMode',function(event){
+         console.log('beforeSetMode');
+         });
+
+         editor.on('mode',function(event){
+         console.log('mode');
+         });
+         */
+
+
+        //--- CONTENT DOM
+        editor.on('contentDom', function (event) {
+            //console.log('contentDom');
+            initTablesSelection(event.editor);
+        });
+
+        editor.on('contentDomUnload', function (event) {
+            //console.log('contentDomUnload');
+            var document = event.editor.document;
+            if (!document) return;
+            destroyTablesSelection($(document.$));
+        });
+
+        /*editor.on('contentDomInvalidated',function(event){
+         console.log('contentDomInvalidated');
+         });*/
+
+        //--- CHANGE
+        //on change make all tables selectable (tableCellsSelection-jquery-plugin support multiple initialization on same DOM-node)
+        editor.on('change', function (event) {
+            //console.log('change');
+            initTablesSelection(event.editor);
+        });
+
+
+        //--- INSERT
+        /*editor.on('insertHtml',function(event){
+         console.log('insertHtml');
+         });
+
+         editor.on('afterInsertHtml',function(event){
+         console.log('afterInsertHtml');
+         });
+
+         editor.on('insertElement',function(event){
+         console.log('insertElement');
+         });
+
+         editor.on('insertText',function(event){
+         console.log('insertText');
+         });
+
+
+         //--- COPY/PASTE
+         editor.on('paste',function(event){
+         console.log('afterPaste');
+         });
+
+         editor.on('afterPaste',function(event){
+         console.log('afterPaste');
+         });
+         */
+
+        //--- DATA
+        //From magicline-ckeditor-plugin
+        // Thanks to that, an editor never yields data polluted by the box.
+        // Listen with very high priority, so line will be removed before other
+        // listeners will see it.
+        //при получении данных - удаляем классы добавленные jquery-плагином для эмуляции выделения ячеек
+        //todo: сделать тоже самое при getSnapshot, по идее тогда не будут сохраняться выделения для undo
+        editor.on('beforeGetData', function (event) {
+            //console.log('beforeGetData');
+            var document = event.editor.document;
+            if (!document) return;
+
+            var $document = $(document.$);
+            //чистим DOM от добавленных классов и других служебных изменений
+            $().tableCellsSelection('removeDocumentHtmlChanges', $document);
+
+            editor.once('getData', function () {
+                $().tableCellsSelection('addDocumentHtmlChanges', $document);
+            }, null, null, 1000);
+        }, null, null, 0);
+
+        /*editor.on('getData',function(event){
+         console.log('getData');
+         });
+
+         editor.on('dataFiltered',function(event){
+         console.log('dataFiltered');
+         });
+
+         editor.on('dataReady',function(event){
+         console.log('dataReady');
+         });
+
+         editor.on('setData',function(event){
+         console.log('setData');
+         });
+         */
+
+        //--- FORMAT
+        /*editor.on('toDataFormat',function(event){
+         console.log('toDataFormat');
+         });
+
+         editor.on('toHtml',function(event){
+         console.log('toHtml');
+         });
+
+         //--- FOCUS/BLUR
+         editor.on('blur',function(event){
+         console.log('blur');
+         });
+
+         editor.on('focus',function(event){
+         console.log('focus');
+         });
+
+         //--- SELECTION
+         editor.on('selectionChange',function(event){
+         console.log('selectionChange');
+         });
+         */
+
+        //todo: проверить нет ли повторного навешивания обработчика событий при редактировании и undo/redo
+        function initTablesSelection(editor) {
+            $document = $(editor.document.$);
+            var $tables = $document.find('table');
+
+            //инициализируем таблицы
+            if ($tables.length > 0) $tables.tableCellsSelection();
+
+            //и вешаем обработчик
+            //this.$table.off('copy');
+            /*var eventName = 'selectionchange.cellsselector';
+            $tables.on(eventName,onTableCellSelectionChange);
+
+            function onTableCellSelectionChange(event){
+                editor.fire( 'selectionChange', {
+                    selection: editor.getSelection(),
+                    path: editor.elementPath()
+                });
+            }*/
+        }
+
+
+        function destroyTablesSelection($document) {
+            var $tables = $document.find('table');
+            if ($tables.length > 0) $tables.tableCellsSelection('destroy');
+        }
+
+        //Overwrite tabletools-plugin commands
+        addCmd('cellMerge', createDef({
+            allowedContent: 'td[colspan,rowspan]',
+            requiredContent: 'td[colspan,rowspan]',
+            exec: function (editor) {
+                //replace tabletools>mergeCells() to mergeCellsByPlugin()
+                placeCursorInCell(mergeCellsByPlugin(editor.getSelection()), true);
+            }
+        }));
+
+
+        /* overwrite tabletools context menu items */
+        // If the "menu" plugin is loaded
+        if (editor.getMenuItem) {
+
+            var tableCellMenuItem = editor.getMenuItem('tablecell');
+            var prevGetItemsFunction = tableCellMenuItem.getItems;
+            tableCellMenuItem.getItems = function () {
+                //получаем предыдущие значения
+                var ret = prevGetItemsFunction();
+
+                var selection = editor.getSelection(),
+                    cells = getSelectedCellsByTableCellsSelectionPlugin(selection);
+                //заменяем необходимые на свои
+                ret.tablecell_merge = mergeCellsByPlugin(selection, null, true) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;//объединение ячеек
+                ret.tablecell_properties = cells.length > 0 ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;
+                return ret;
+            };
+        }
+
+        //---------- Helpers
+
+        /*full copy of tabletools>mergeCells() except:
+         - replace getSelectedCells() to getSelectedCellsByTableCellsSelectionPlugin();
+         */
+        function mergeCellsByPlugin(selection, mergeDirection, isDetect) {
+            //var cells = getSelectedCells( selection );
+            var cells = getSelectedCellsByTableCellsSelectionPlugin(selection);
+            // Invalid merge request if:
+            // 1. In batch mode despite that less than two selected.
+            // 2. In solo mode while not exactly only one selected.
+            // 3. Cells distributed in different table groups (e.g. from both thead and tbody).
+            var commonAncestor;
+            if (( mergeDirection ? cells.length != 1 : cells.length < 2 ) || ( commonAncestor = selection.getCommonAncestor() ) && commonAncestor.type == CKEDITOR.NODE_ELEMENT && commonAncestor.is('table'))
+                return false;
+
+            var cell,
+                firstCell = cells[0],
+                table = firstCell.getAscendant('table'),
+                map = CKEDITOR.tools.buildTableMap(table),
+                mapHeight = map.length,
+                mapWidth = map[0].length,
+                startRow = firstCell.getParent().$.rowIndex,
+                startColumn = cellInRow(map, startRow, firstCell);
+
+            if (mergeDirection) {
+                var targetCell;
+                try {
+                    var rowspan = parseInt(firstCell.getAttribute('rowspan'), 10) || 1;
+                    var colspan = parseInt(firstCell.getAttribute('colspan'), 10) || 1;
+
+                    targetCell = map[mergeDirection == 'up' ? ( startRow - rowspan ) : mergeDirection == 'down' ? ( startRow + rowspan ) : startRow][
+                        mergeDirection == 'left' ?
+                            ( startColumn - colspan ) :
+                            mergeDirection == 'right' ? ( startColumn + colspan ) : startColumn];
+
+                } catch (er) {
+                    return false;
+                }
+
+                // 1. No cell could be merged.
+                // 2. Same cell actually.
+                if (!targetCell || firstCell.$ == targetCell)
+                    return false;
+
+                // Sort in map order regardless of the DOM sequence.
+                cells[( mergeDirection == 'up' || mergeDirection == 'left' ) ? 'unshift' : 'push'](new CKEDITOR.dom.element(targetCell));
+            }
+
+            // Start from here are merging way ignorance (merge up/right, batch merge).
+            var doc = firstCell.getDocument(),
+                lastRowIndex = startRow,
+                totalRowSpan = 0,
+                totalColSpan = 0,
+            // Use a documentFragment as buffer when appending cell contents.
+                frag = !isDetect && new CKEDITOR.dom.documentFragment(doc),
+                dimension = 0;
+
+            for (var i = 0; i < cells.length; i++) {
+                cell = cells[i];
+
+                var tr = cell.getParent(),
+                    cellFirstChild = cell.getFirst(),
+                    colSpan = cell.$.colSpan,
+                    rowSpan = cell.$.rowSpan,
+                    rowIndex = tr.$.rowIndex,
+                    colIndex = cellInRow(map, rowIndex, cell);
+
+                // Accumulated the actual places taken by all selected cells.
+                dimension += colSpan * rowSpan;
+                // Accumulated the maximum virtual spans from column and row.
+                totalColSpan = Math.max(totalColSpan, colIndex - startColumn + colSpan);
+                totalRowSpan = Math.max(totalRowSpan, rowIndex - startRow + rowSpan);
+
+                if (!isDetect) {
+                    // Trim all cell fillers and check to remove empty cells.
+                    if (trimCell(cell), cell.getChildren().count()) {
+                        // Merge vertically cells as two separated paragraphs.
+                        if (rowIndex != lastRowIndex && cellFirstChild && !( cellFirstChild.isBlockBoundary && cellFirstChild.isBlockBoundary({br: 1}) )) {
+                            var last = frag.getLast(CKEDITOR.dom.walker.whitespaces(true));
+                            if (last && !( last.is && last.is('br') ))
+                                frag.append('br');
+                        }
+
+                        cell.moveChildren(frag);
+                    }
+                    i ? cell.remove() : cell.setHtml('');
+                }
+                lastRowIndex = rowIndex;
+            }
+
+            if (!isDetect) {
+                frag.moveChildren(firstCell);
+
+                firstCell.appendBogus();
+
+                if (totalColSpan >= mapWidth)
+                    firstCell.removeAttribute('rowSpan');
+                else
+                    firstCell.$.rowSpan = totalRowSpan;
+
+                if (totalRowSpan >= mapHeight)
+                    firstCell.removeAttribute('colSpan');
+                else
+                    firstCell.$.colSpan = totalColSpan;
+
+                // Swip empty <tr> left at the end of table due to the merging.
+                var trs = new CKEDITOR.dom.nodeList(table.$.rows),
+                    count = trs.count();
+
+                for (i = count - 1; i >= 0; i--) {
+                    var tailTr = trs.getItem(i);
+                    if (!tailTr.$.cells.length) {
+                        tailTr.remove();
+                        count++;
+                        continue;
+                    }
+                }
+
+                return firstCell;
+            }
+            // Be able to merge cells only if actual dimension of selected
+            // cells equals to the caculated rectangle.
+            else {
+                return ( totalRowSpan * totalColSpan ) == dimension;
+            }
+        }
+
+        //---------- Helpers > plugin
+        /**
+         * Return selected cells by tableCellsSelection-jquery-plugin
+         *
+         * @param selection
+         * @returns {Array}
+         */
+        function getSelectedCellsByTableCellsSelectionPlugin(selection) {
+            var ranges = selection.getRanges();
+            var range = ranges[0];
+            var startNode = range.getCommonAncestor();
+            var table = startNode.getAscendant('table', true);
+            var $selectedCells = $(table.$).tableCellsSelection('selectedCells');
+
+            var ret = [];
+            //jquery to ckeditor.dom.element[]
+            for (var i = 0; i < $selectedCells.length; i++) {
+                ret[i] = new CKEDITOR.dom.element($selectedCells[i]);
+            }
+            return ret;
+        }
+
+
+        //---------- Helpers > Imported
+        //from other plugins
+
+        //---------- Helpers > Imported > tabletools plugin
+        function createDef(def) {
+            return CKEDITOR.tools.extend(def || {}, {
+                contextSensitive: 1,
+                refresh: function (editor, path) {
+                    this.setState(path.contains({
+                        td: 1,
+                        th: 1
+                    }, 1) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED);
+                }
+            });
+        }
+
+        function addCmd(name, def) {
+            var cmd = editor.addCommand(name, def);
+            editor.addFeature(cmd);
+        }
+
+
+        // Remove filler at end and empty spaces around the cell content.
+        function trimCell(cell) {
+            var bogus = cell.getBogus();
+            bogus && bogus.remove();
+            cell.trim();
+        }
+
+
+        function placeCursorInCell(cell, placeAtEnd) {
+            var docInner = cell.getDocument(),
+                docOuter = CKEDITOR.document;
+
+            // Fixing "Unspecified error" thrown in IE10 by resetting
+            // selection the dirty and shameful way (#10308).
+            // We can not apply this hack to IE8 because
+            // it causes error (#11058).
+            if (CKEDITOR.env.ie && CKEDITOR.env.version == 10) {
+                docOuter.focus();
+                docInner.focus();
+            }
+
+            var range = new CKEDITOR.dom.range(docInner);
+            if (!range['moveToElementEdit' + ( placeAtEnd ? 'End' : 'Start' )](cell)) {
+                range.selectNodeContents(cell);
+                range.collapse(placeAtEnd ? false : true);
+            }
+            range.select(true);
+        }
+
+
+        function cellInRow(tableMap, rowIndex, cell) {
+            var oRow = tableMap[rowIndex];
+            if (typeof cell == 'undefined')
+                return oRow;
+
+            for (var c = 0; oRow && c < oRow.length; c++) {
+                if (cell.is && oRow[c] == cell.$)
+                    return c;
+                else if (c == cell)
+                    return new CKEDITOR.dom.element(oRow[c]);
+            }
+            return cell.is ? -1 : null;
+        }
+    }
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css b/plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css
new file mode 100644
index 0000000..009ea4d
--- /dev/null
+++ b/plugins/ckeditor4/ckeditortablecellsselection/styles/tablecellsselection.css
@@ -0,0 +1,28 @@
+.tcs::selection{
+	background-color: transparent;
+}
+.tcs td:not(.tcs-selection-enabled) > *,
+.tcs th:not(.tcs-selection-enabled) > *,
+.tcs td:not(.tcs-selection-enabled),
+.tcs th:not(.tcs-selection-enabled){
+	-webkit-user-select: none !important;
+	-khtml-user-select: none !important;
+	-moz-user-select: none !important;
+	-ms-user-select: none !important;
+	user-select: none !important;
+}
+.tcs tr::selection,
+.tcs td:not(.tcs-selection-enabled) > *::selection,
+.tcs th:not(.tcs-selection-enabled) > *::selection,
+.tcs td:not(.tcs-selection-enabled)::selection,
+.tcs th:not(.tcs-selection-enabled)::selection,
+.tcs br::selection{
+	background-color: transparent;
+}
+.tcs tr::-moz-selection, .tcs td:not(.tcs-selection-enabled)::-moz-selection, .tcs th:not(.tcs-selection-enabled)::-moz-selection{
+	background-color: transparent;
+}
+.tcs .tcs-selected:not(.sel-from){
+	border: 1px double #4887C7;
+	background-color: rgba(51, 122, 183, 0.2) !important;
+}
\ No newline at end of file
diff --git a/plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js b/plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js
new file mode 100644
index 0000000..bb92a6c
--- /dev/null
+++ b/plugins/ckeditor4/ckwebspeech/dialogs/ckwebspeech.js
@@ -0,0 +1 @@
+var wsDialogHtml=function(){this.updateCulturesSelect=function(d,b){var a=document.getElementById(d._.inputId);for(var c=a.options.length-1;c>=0;c--){a.remove(c)}for(var c=0;c<b.length;c++){a.options.add(new Option(b[c],b[c]))}}};CKEDITOR.dialog.add("webspeechDialog",function(b){var c=new wsDialogHtml();var a=b.ckWebSpeech._currentCulture.val;return{title:"WebSpeech Settings",minWidth:400,minHeight:200,contents:[{id:"tab-basic",label:"Basic Settings",elements:[{type:"select",id:"wslanguages",label:"Languages",items:b.ckWebSpeech.getLanguages(),"default":b.ckWebSpeech._currentCulture.langVal,onChange:function(g){var f=CKEDITOR.dialog.getCurrent();var e=f.getContentElement("tab-basic","wscultures");var d=b.ckWebSpeech.getCultures(g.data.value);e.setup({selCultures:e,options:d});e.fire("change",{value:d[0][0]},b)},onShow:function(f){var d=CKEDITOR.dialog.getCurrent();var e=d.getContentElement("tab-basic","wslanguages");document.getElementById(e._.inputId).value=b.ckWebSpeech._currentCulture.langVal}},{type:"select",id:"wscultures",label:"Culture",items:b.ckWebSpeech.getCultures(),"default":b.ckWebSpeech._currentCulture.val,onChange:function(d){a=d.data.value},setup:function(d){c.updateCulturesSelect(d.selCultures,d.options)},onShow:function(f){var e=CKEDITOR.dialog.getCurrent();var d=e.getContentElement("tab-basic","wscultures");document.getElementById(d._.inputId).value=b.ckWebSpeech._currentCulture.val}}]},{id:"tab-adv",label:"Advanced Settings",elements:[]}],onOk:function(){b.ckWebSpeech.setDialectByCulture(a)}}});
\ No newline at end of file
diff --git a/plugins/ckeditor4/ckwebspeech/icons/speech.gif b/plugins/ckeditor4/ckwebspeech/icons/speech.gif
new file mode 100644
index 0000000000000000000000000000000000000000..c645b970c0e2faef3016b8046cdb613e6b96c947
GIT binary patch
literal 418
zcmZ?wbhEHb6krfwXkcUjf}d7aivPL&TtkAL9RpmA^bD9m!ixXooQqNuOHxx5$}>wc
z6bdr)QWFaba#D-)(@OO6QcD;Vf3k4$GcYpffD8c{$G{}-!?0}k3!b~pUVd4Erj~E_
z$tt9^E=ozul#F}EeLSBLn;vB}J?C5(T#uNlG1q5X;j_lfw?5au1p!@yX_p$3zQ9z=
zi<2cg)ys}YMoM#fWiPIKYf>bo{`}WEaco+(khR*HZca%_aB5Qum%BEtO7Xg9pv}|;
TRry!=KL1;<L2a9f@~kxgJAi?*

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/ckwebspeech/icons/webspeech-enable.gif b/plugins/ckeditor4/ckwebspeech/icons/webspeech-enable.gif
new file mode 100644
index 0000000000000000000000000000000000000000..99ccadafa0e947bb6a1b6485731426249a9adde5
GIT binary patch
literal 1764
zcmZ?wbhEHb6krfwIK}`1jEsy-jEtO2OgzlYyv)pe%*-6DtO6`7LM$vItgPa!tWs=j
z(rj#eTwHSO>;l}}>YSWn{QSDy+!BI<Mm#*mJUr&Syq3JYHhg@}{QNEg0&aqW`Vtae
zLPFj`LV+S8AtEB7A|hcTBH^N<5u&0|qM|WkVzFXk@nT{z;^Ju%66q2W8IqEjl9Jhy
zk|i=SwX(8xva<DZa!vB`&GPcSii&-Tiv3DTla-Zcs;JCURb8N}x=2lJv6|WvHMMn`
zn(H++_vq*x(A7Ptt9wXS_pq++0X@CLdU{9n^iJsMozmC8U}$*P*!Z4_$$b-(2PP&j
z&COq#o4+<U|7c<H+0ychrR7g6t6x@Dzk$fw`j55sUu)}s*4F=l$j0Wst?hq1yZ;Uj
z;Gm*Dq4=NM&ow02*)hP?NY8+o5om+rKN;tu)Wnk16osTpg@Vky)Wm{<oYdm{v=Y6%
z)Di~8pDdjG4D}2;AlHDRk%2v+p}wiPo`IpIqou8_v$MOsx2t>Nq@F2F{Zra)`<+|+
zRPFk`g(q|=x%UT(E^B7sNK|Muh?~~IARiwR5hk{FI|CQzwuzIcuiM|-f28kpM<X^%
zf^k?<Z{P1Zk-^Ni-%G!jK@Dh;IMkw57#3~Z4YX+2oD<VeE$%;jq#wIIiP-FEw(Iwt
z5@plx7Tqgt3AD;ks*_!9TDP~jKqnvAS3;cv5MMEf^g_MGI8nBZi<5zAN|PoVkJiQJ
zp6mTLC*GdWjMaDL7`8Us^t(>151-ua7Ty~jHM7kvI=WK_Y`0NIA{W@B;t4H@++gb^
zwl&AgKpmjh=>c^CLqKP|1<(y`j!QaY{ft?7O@bq*)hF>wCcbR#pD^*`rzWg!=|*u&
zhgCO&Q*V8ExXlE&shv}&ch3y(2#<-H3v$qc=6G#O+X-HVhOsRPKsQbB78j4-3Utzh
zKv9W(&2ca%=|;AMJHs61zp5!b)*R$4hsz72eSyw04T^Zs5*d>qC>I|yxrteoRiee>
z3crxDQzI}rVkWn#aQ8L)w6%qHHid^<_b|9j?3fsCGsSIY%got5bEi)Lx^W@MjZ4Bo
zZkz&gWB3G+Bd35IxwAez0qD*tKzAOVfaK026A|uQaun*!+w;R=?tC#J0_aYgnumw_
k1vo`mCFV$c%n(p@?qFiX=F-6)l7lJL4NShHNvUED02CPr`~Uy|

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/ckwebspeech/icons/webspeech-settings.png b/plugins/ckeditor4/ckwebspeech/icons/webspeech-settings.png
new file mode 100644
index 0000000000000000000000000000000000000000..29817079f0bc73c716169ad8e7611a8e5ce4227c
GIT binary patch
literal 406
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE<hRxemd{22U45`9+AZi
z3^MW{%$V?(<rYwoy~NYkmHi%vB%7Ye_5G|s5k_TC7sn8b({m^9)?;yyXx*Q$+~LjA
zc}UevYi*i#{sYB5OlQS@vvIX51O~29ndR%UJn|y<T$cbY-h~q;#3zOwyA_-5Z#1+1
z+?knkERC5tweBA9vEiN4xIO2ciPEaMZ<pNm-Enq*iEZTHRp%I77s$_Giu<>j@qlpw
z|CgnU&zM^%Db;asMcRr8`U@6{3QiXcWWG1KAS{->?RKjLUq}PLLIYz0zlBeqTI13V
zi@aw~eoKX3aoxJgZq>xC+@;QQGb-P{%2Klk<nFwG_Q%$+q$`W6=8E;Ht+SJV<@?Tp
ze`1G%QeNY3HO1?O%cj+(PS_c7Zq2nT_l~?z|Kqn?eC4jCa;7X2uXgTQz_*Qi<Gu5$
w7n`f5y=p#Je^Xp5OS3op%EY|-T<;pDqbX4#FW0~01BMrar>mdKI;Vst0K|Kn1ONa4

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/ckwebspeech/icons/webspeech.png b/plugins/ckeditor4/ckwebspeech/icons/webspeech.png
new file mode 100644
index 0000000000000000000000000000000000000000..34445f85fa4fe7bf11371910ea1f49280e31bc97
GIT binary patch
literal 451
zcmV;!0X+VRP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv00000
z008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-Ut~6EGuY%YIgtt0Z>Uq
zK~y-)l~S=v13?g-9cK2}Tf(_1t~>Mx4wB0+94Ue}`UN4sprw_azYx$L2{!2jQv^RC
zwb&e_(Xfn7Hi+5C-GhZ?cyET8_W(}7IX7bF1v4+4b0g@2;c#e`QUU-10HTzVs;bh~
z4Xm}7K^&g7_A183SW!eUQd6xPbituPmSwF)zqu4XP167oJuq`3A}^5@zKt=DyWQ@q
zX`1`!3f}v%_kIEZJ~G&Q?<d~-@yQz~r9?!q*XwN}&TK>k_x8r2wVnrpG3F^)XpDId
z1GLujsJO0c$n*Rh0ECFvWm&rEbjq{YjLWh-Bce3`NS@~xbzT1(qU(@CA`&7xq%lp?
zn^rar27@d~l3PUlM8uCIN$#qu$~uQcYyCz<ubo6iQS_O4#mq}Y+#=$ZnU~DGDvF~2
tmrqC0L<FT20RR)x`@YNoK#0f5{{b?7V`Qha@U;K{002ovPDHLkV1k?6xiJ6$

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/ckwebspeech/plugin.js b/plugins/ckeditor4/ckwebspeech/plugin.js
new file mode 100644
index 0000000..4ccefc2
--- /dev/null
+++ b/plugins/ckeditor4/ckwebspeech/plugin.js
@@ -0,0 +1 @@
+var langs=[["Afrikaans",["af-ZA"]],["Bahasa Indonesia",["id-ID"]],["Bahasa Melayu",["ms-MY"]],["Català",["ca-ES"]],["Čeština",["cs-CZ"]],["Deutsch",["de-DE"]],["English",["en-AU","Australia"],["en-CA","Canada"],["en-IN","India"],["en-NZ","New Zealand"],["en-ZA","South Africa"],["en-GB","United Kingdom"],["en-US","United States"]],["Español",["es-AR","Argentina"],["es-BO","Bolivia"],["es-CL","Chile"],["es-CO","Colombia"],["es-CR","Costa Rica"],["es-EC","Ecuador"],["es-SV","El Salvador"],["es-ES","España"],["es-US","Estados Unidos"],["es-GT","Guatemala"],["es-HN","Honduras"],["es-MX","México"],["es-NI","Nicaragua"],["es-PA","Panamá"],["es-PY","Paraguay"],["es-PE","Perú"],["es-PR","Puerto Rico"],["es-DO","República Dominicana"],["es-UY","Uruguay"],["es-VE","Venezuela"]],["Euskara",["eu-ES"]],["Français",["fr-FR"]],["Galego",["gl-ES"]],["Hrvatski",["hr_HR"]],["IsiZulu",["zu-ZA"]],["Íslenska",["is-IS"]],["Italiano",["it-IT","Italia"],["it-CH","Svizzera"]],["Magyar",["hu-HU"]],["Nederlands",["nl-NL"]],["Norsk bokmål",["nb-NO"]],["Polski",["pl-PL"]],["Português",["pt-BR","Brasil"],["pt-PT","Portugal"]],["Română",["ro-RO"]],["Slovenčina",["sk-SK"]],["Suomi",["fi-FI"]],["Svenska",["sv-SE"]],["Türkçe",["tr-TR"]],["български",["bg-BG"]],["Pусский",["ru-RU"]],["Српски",["sr-RS"]],["한국어",["ko-KR"]],["中文",["cmn-Hans-CN","普通话 (中国大陆)"],["cmn-Hans-HK","普通话 (香港)"],["cmn-Hant-TW","中文 (台灣)"],["yue-Hant-HK","粵語 (香港)"]],["日本語",["ja-JP"]],["Lingua latīna",["la"]]];var CKWebSpeechCommandVoice=function(a){this._editor=a;this._commandvoice=false;this._commands=false;this._regexpcommand=false;this.CKWebSpeechCommandVoice(this._editor.config)};CKWebSpeechCommandVoice.prototype.CKWebSpeechCommandVoice=function(a){if(typeof this._editor.config.ckwebspeech=="undefined"){this._editor.config.ckwebspeech={}}this.setCommands(this._editor.config)};CKWebSpeechCommandVoice.prototype.setCommands=function(b){var c=false;var a=false;if(b.ckwebspeech.commandvoice){c=b.ckwebspeech.commandvoice}if(b.ckwebspeech.commands){a=this.makeCommands(b.ckwebspeech.commands)}if(c&&a){this._regexpcommand=new RegExp("("+c+"){1}\\s{1}("+a+")","gi");this._commands=b.ckwebspeech.commands;this._commandvoice=c}};CKWebSpeechCommandVoice.prototype.makeCommands=function(a){var c="";if(a instanceof Array){for(var b=0;b<a.length;b++){var d=a[b];c+=this.makeValidCommand(d)}return c==""?false:c.replace(/\|$/gi,"")}else{return false}};CKWebSpeechCommandVoice.prototype.makeValidCommand=function(b){var c=new RegExp("(newline|newparagraph|undo|redo)");if(typeof b=="object"){for(var a in b){if(c.test(a)){return b[a]+"|"}}}return""};CKWebSpeechCommandVoice.prototype.buildResult=function(a){if(this._regexpcommand){var b;var e=[];while((b=this._regexpcommand.exec(a))!=null){e.push(b[2])}for(var c=0;c<e.length;c++){var f=new String(e[c]);var d=this.getCommandForResult(f);a=this.execCmd(d,f,a)}return a}else{return a}};CKWebSpeechCommandVoice.prototype.execCmd=function(c,d,a){var b=new RegExp(this._commandvoice+" "+d+"\\s?","gi");switch(c){case"newline":return a.replace(b,"\n");case"newparagraph":return a.replace(b,"\n\n");case"undo":this._editor.execCommand("undo");return false;case"redo":this._editor.execCommand("redo");return false;default:return a}};CKWebSpeechCommandVoice.prototype.getCommandForResult=function(c){this._commands;for(var b=0;b<this._commands.length;b++){for(var a in this._commands[b]){if(this._commands[b][a]==c){return a}}}return""};var CKWebSpeechHandler=function(a){CKWebSpeechCommandVoice.call(this,a);this._currentCulture={val:"en-US",langVal:6};this._elmtPlugIcon;this._plugPath;this._recognizing;this._recognition;this._ignoreOnend;this._start_timestamp;this._working;this.CKWebSpeechHandler()};CKWebSpeechHandler.prototype=Object.create(CKWebSpeechCommandVoice.prototype);CKWebSpeechHandler.prototype.CKWebSpeechHandler=function(){this._recognition;this._plugPath=this._editor.plugins.ckwebspeech.path;this._recognizing=false;this._ignoreOnend=false;this._working=false;this.getElementPluginIcon();this.initServiceSpeech()};CKWebSpeechHandler.prototype.isUnlockedService=function(){if(!("webkitSpeechRecognition" in window)){return false}return true};CKWebSpeechHandler.prototype.getElementPluginIcon=function(){var c=this;var a=0;var b=setInterval(function(){a++;var d;try{d=document.getElementById(c._editor.ui.instances.webSpeechEnabled._.id)}catch(e){d=null}if(d!==null){c._elmtPlugIcon=d.getElementsByClassName("cke_button__webspeechenabled_icon")[0];clearInterval(b)}if(a==500){clearInterval(b)}},1)};CKWebSpeechHandler.prototype.updateIcons=function(){if(this._recognizing){this._editor.ui.get("webSpeechEnabled").label="Disable";this._editor.ui.get("webSpeechEnabled").icon=this._plugPath+"icons/webspeech.png";this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/webspeech-enable.gif)"}else{this._editor.ui.get("webSpeechEnabled").label="Enable";this._editor.ui.get("webSpeechEnabled").icon=this._plugPath+"icons/webspeech-enable.gif";this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/webspeech.png)"}};CKWebSpeechHandler.prototype.initServiceSpeech=function(){if(this.isUnlockedService()){this._recognition=new webkitSpeechRecognition();this._recognition.continuous=true;this._recognition.interimResults=true;var a=this;this._recognition.onstart=function(){a.onStart()};this._recognition.onerror=function(b){a.onError(b)};this._recognition.onend=function(){a.onEnd()};this._recognition.onresult=function(b){a.onResult(b)};this._recognition.onspeechstart=function(b){a.onSpeech()};this._recognition.onspeechend=function(b){a.onSpeechEnd()}}};CKWebSpeechHandler.prototype.onStart=function(){this._recognizing=true;this.updateIcons()};CKWebSpeechHandler.prototype.onError=function(a){if(a.error=="no-speech"){this._ignore_onend=true}if(a.error=="audio-capture"){this._ignore_onend=true}if(a.error=="not-allowed"){if(a.timeStamp-this._start_timestamp<100){}else{}this._ignore_onend=true}this.updateIcons()};CKWebSpeechHandler.prototype.onEnd=function(){this._recognizing=false;if(this._ignoreOnend){return}this.updateIcons()};CKWebSpeechHandler.prototype.onSpeech=function(a){this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/speech.gif)"};CKWebSpeechHandler.prototype.onSpeechEnd=function(a){this.updateIcons()};CKWebSpeechHandler.prototype.onResult=function(c){if(typeof(c.results)=="undefined"){this._recognizing=false;this._recognition.onend=null;this._recognition.stop();this.updateIcons();return}this._elmtPlugIcon.style.backgroundImage="url("+this._plugPath+"icons/speech.gif)";for(var b=c.resultIndex;b<c.results.length;++b){if(c.results[b].isFinal){var a=this.buildResult(c.results[b][0].transcript);if(a){this._editor.insertText(a)}this.updateIcons()}}};CKWebSpeechHandler.prototype.toogleSpeech=function(){if(!this._recognizing){this._recognition.lang=this._currentCulture.val;this._recognition.start();this._ignore_onend=false;this._start_timestamp=new Date().getTime()}else{this._recognition.stop()}};var CKWebSpeech=function(a){CKWebSpeechHandler.call(this,a);this._langs=langs;this.CKWebSpeech()};CKWebSpeech.prototype=Object.create(CKWebSpeechHandler.prototype);CKWebSpeech.prototype.CKWebSpeech=function(){if(typeof this._editor.config.ckwebspeech=="undefined"){this._editor.config.ckwebspeech={}}if(this._editor.config.ckwebspeech.culture){this.setDialectByCulture(this._editor.config.ckwebspeech.culture)}};CKWebSpeech.prototype.setDialectByCulture=function(c){for(var b=0;b<this._langs.length;b++){for(var a=1;a<this._langs[b].length;a++){if(this._langs[b][a][0].toLowerCase()==c.toLowerCase()){this._currentCulture={val:this._langs[b][a][0],langVal:b};return this._currentCulture}}}return this._currentCulture};CKWebSpeech.prototype.setDialectByLanguage=function(a){this.setDialectByCulture(this._langs[a][1][0])};CKWebSpeech.prototype.getLanguages=function(){var b=new Array();for(var a=0;a<this._langs.length;a++){b.push(new Array(this._langs[a][0],a))}return b};CKWebSpeech.prototype.getCultures=function(a){if(typeof a==="undefined"){a=this._currentCulture.langVal}var c=new Array();for(var b=1;b<this._langs[a].length;b++){c.push(new Array(this._langs[a][b][0]))}return c};CKEDITOR.plugins.add("ckwebspeech",{icons:"webspeech",init:function(b){b.ckWebSpeech=new CKWebSpeech(b);var a=this.path;b.addCommand("webspeechDialog",new CKEDITOR.dialogCommand("webspeechDialog"));b.addCommand("webspeechToogle",{exec:function(c){c.ckWebSpeech.toogleSpeech()}});b.ui.addButton("webSpeechEnabled",{label:"Enable",icon:a+"icons/webspeech.png",command:"webspeechToogle",toolbar:"ckwebspeech"});b.ui.addButton("webSpeechSettings",{label:"Settings",icon:a+"icons/webspeech-settings.png",command:"webspeechDialog",toolbar:"ckwebspeech"});CKEDITOR.dialog.add("webspeechDialog",this.path+"dialogs/ckwebspeech.js")}});
\ No newline at end of file
diff --git a/plugins/ckeditor4/codeTag b/plugins/ckeditor4/codeTag
new file mode 160000
index 0000000..8908650
--- /dev/null
+++ b/plugins/ckeditor4/codeTag
@@ -0,0 +1 @@
+Subproject commit 8908650a6bdf9bd084822d86e320f530364d0b4b
diff --git a/plugins/ckeditor4/crossreference/LICENSE.md b/plugins/ckeditor4/crossreference/LICENSE.md
new file mode 100644
index 0000000..43b5cc5
--- /dev/null
+++ b/plugins/ckeditor4/crossreference/LICENSE.md
@@ -0,0 +1,1242 @@
+Software License Agreement
+==========================
+
+CrossReference Plugin for CKEditor - Adds images from local client as base64
+string into the source without server side processing. You can also add
+external image urls into the source.
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+
+Appendix A: The GPL License
+---------------------------
+
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software-to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+GNU GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+Appendix B: The LGPL License
+----------------------------
+
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software-to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages-typically libraries-of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+GNU LESSER GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+
+Appendix C: The MPL License
+---------------------------
+
+MOZILLA PUBLIC LICENSE
+Version 1.1
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     http://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the  "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above.  If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting  the provisions above and replace  them with the notice and
+     other provisions required by the [___] License.  If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+
diff --git a/plugins/ckeditor4/crossreference/README.md b/plugins/ckeditor4/crossreference/README.md
new file mode 100644
index 0000000..2377605
--- /dev/null
+++ b/plugins/ckeditor4/crossreference/README.md
@@ -0,0 +1,271 @@
+CrossReference Plugin for CKEditor 4
+=================================
+
+Adds cross references links with optional auto-numeration for chapters, images, tables and references. Other types of references can be defined in config.
+
+## Online demo
+
+Try the plugin demo at <http://indvd00m.com/crossreference-demo/>.
+
+## CKEditor plugin page
+
+http://ckeditor.com/addon/crossreference
+
+## Requirements
+
+CrossReference Plugin require CKEditor 4.5+ version and dependent from plugins: dialog, notification.
+
+## Installation
+
+ 1. Download the plugin: https://github.com/indvd00m/crossreference/releases.
+ 
+ 2. Extract (decompress) the downloaded file into the plugins folder of your
+	CKEditor installation.
+	Example: http://example.com/ckeditor/plugins/crossreference
+	
+ 3. Enable the plugin by using the extraPlugins configuration setting.
+	Example: CKEDITOR.config.extraPlugins = 'crossreference';
+
+## Description
+
+Two main conceptions - anchor and link to anchor. There are 4 type of references defined by default: chapter, image, table, reference. Example of anchor of type `image` in raw html:
+```html
+<a 
+	class="cross-reference cross-anchor" 
+	cross-reference="image" 
+	cross-anchor="" 
+	cross-guid="7d24373b-0756-481d-bf97-5a17ffdf3a28" 
+	cross-name="Experimental result" 
+	cross-number="1" 
+	name="image-7d24373b-0756-481d-bf97-5a17ffdf3a28"
+	>
+		Fig. 1. Experimental result.
+</a>
+```
+Example of link to this anchor in raw html:
+```html
+<a 
+	class="cross-reference cross-link" 
+	cross-reference="image" 
+	cross-link="" 
+	cross-guid="7d24373b-0756-481d-bf97-5a17ffdf3a28" 
+	cross-name="Experimental result" 
+	cross-number="1" 
+	href="#image-7d24373b-0756-481d-bf97-5a17ffdf3a28" 
+	title="Fig. 1. Experimental result."
+	>
+		1
+</a>
+```
+After every inserting of anchor or links to anchor all references will be updated to be a concerted. Or you can manually update cross-references by selecting option in menu (for example after deleting of anchors).
+
+## Configuration
+
+You can switch which types is active by config option `config.crossreference.activeTypes = ['type1', 'type2']`. You can define other types also.
+
+### Default config:
+
+```javascript
+{
+	activeTypes: ['chapter', 'image', 'table', 'reference'],
+	overrideTypes: false,
+	types: {
+		chapter: {
+			name: 'Chapter',
+			anchorTextTemplate: '${number}. ${name}.',
+			linkTextTemplate: '${number}',
+			numeration: {
+				enabled: true,
+				firstNumber: '1',
+				increase: function(number) {
+					var n = parseInt(number);
+					return ++n;
+				}
+			},
+			anchorsProvider: 'default',
+			allowCreateAnchors: true,
+			groupAnchors: false
+		},
+		image: {
+			name: 'Figure',
+			anchorTextTemplate: 'Fig. ${number}. ${name}.',
+			linkTextTemplate: '${number}',
+			numeration: {
+				enabled: true,
+				firstNumber: '1',
+				increase: function(number) {
+					var n = parseInt(number);
+					return ++n;
+				}
+			},
+			anchorsProvider: 'default',
+			allowCreateAnchors: true,
+			groupAnchors: false
+		},
+		table: {
+			name: 'Table',
+			anchorTextTemplate: 'Table ${number}. ${name}.',
+			linkTextTemplate: '${number}',
+			numeration: {
+				enabled: true,
+				firstNumber: '1',
+				increase: function(number) {
+					var n = parseInt(number);
+					return ++n;
+				}
+			},
+			anchorsProvider: 'default',
+			allowCreateAnchors: true,
+			groupAnchors: false
+		},
+		reference: {
+			name: 'Reference',
+			anchorTextTemplate: '[${number}] ${name}.',
+			linkTextTemplate: '[${number}]',
+			numeration: {
+				enabled: true,
+				firstNumber: '1',
+				increase: function(number) {
+					var n = parseInt(number);
+					return ++n;
+				}
+			},
+			anchorsProvider: 'default',
+			allowCreateAnchors: true,
+			groupAnchors: false
+		}
+	}
+}
+```
+| Property | Description | Type | Default value |
+| --- | --- | --- | --- |
+| `activeTypes` | Which type of anchors would be activated. | Array | `['chapter', 'image', 'table', 'reference']` |
+| `overrideTypes` | If you define your own types, enabling this option lead to mixing of your types with types from default config which not yet defined in your config. | Boolean | false |
+| `types` | Types definition. | Object | see [Example of type definition](https://github.com/indvd00m/crossreference#example-of-type-definition) section|
+
+### Example of type definition
+
+```javascript
+image: {
+	name: 'Figure',
+	anchorTextTemplate: 'Fig. ${number}. ${name}.',
+	linkTextTemplate: '${number}',
+	numeration: {
+		enabled: true,
+		firstNumber: '1',
+		increase: function(number) {
+			var n = parseInt(number);
+			return ++n;
+		}
+	},
+	anchorsProvider: 'default',
+	allowCreateAnchors: true,
+	groupAnchors: false
+}
+```
+| Property | Description | Type | Required |
+| --- | --- | --- | --- |
+| `name` | Type name. | String | Yes |
+| `anchorTextTemplate` | Template for anchor text. This text will be put in `a` tag. You can use variables in format `${variableName}`. Variables is a properties of an anchor object (see [Example of an anchor object](https://github.com/indvd00m/crossreference#example-of-an-anchor-object) section). | String | No |
+| `linkTextTemplate` | Template for link text. This text will be put in `a` tag. You can use variables in format `${variableName}`. Variables is a properties of an anchor object (see [Example of an anchor object](https://github.com/indvd00m/crossreference#example-of-an-anchor-object) section). | String | No |
+| `numeration` | Definition of type numeration. See [Example of a numeration definition](https://github.com/indvd00m/crossreference#example-of-a-numeration-definition) section. | Object | No |
+| `anchorsProvider` | See [Example of type with anchors provider](https://github.com/indvd00m/crossreference#example-of-type-with-anchors-provider) section. | String `'default'` or function | No |
+| `allowCreateAnchors` | Can user create anchors of this type in anchors dialog. | Boolean | No |
+| `groupAnchors` | If `true`, anchors can be filtered by group in link dialog. | Boolean | No |
+
+### Example of a numeration definition
+
+```javascript
+numeration: {
+	enabled: true,
+	firstNumber: '1',
+	increase: function(number) {
+		var n = parseInt(number);
+		return ++n;
+	}
+}
+```
+| Property | Description | Type |
+| --- | --- | --- |
+| `enabled` | Enabling/disabling numeration of anchors. | Boolean |
+| `firstNumber` | First number. For example you may define `firstNumber` as `I` for Roman numerals. | String |
+| `increase` | Function which must return number (as string) which is next after `number` argument (string). | Function |
+
+### Example of an anchor object
+
+JSON object:
+
+```javascript
+{
+	type: 'image',
+	guid: '7d24373b-0756-481d-bf97-5a17ffdf3a28',
+	name: 'Experimental result',
+	number: '1',
+	text: 'Fig. 1. Experimental result.',
+	groupName: 'Group name',
+	groupGuid: '6c848dff-cde3-421f-b926-695c8de37d80'
+}
+```
+| Property | Description | Type | Required |
+| --- | --- | --- | --- |
+| `type` | Type name of this anchor (`config.types.typeName`). | String | Yes |
+| `guid` | Unique guid of this anchor. | String | Yes |
+| `name` | Name of this anchor. | String | Yes |
+| `number` | Number of this anchor (if type contains numeration definition). | String | Depends of type |
+| `text` | Text of this anchor. Optional property because of text will generated by `type.anchorTextTemplate` template. | String | No |
+| `groupName` | Name of anchor group. | String | No |
+| `groupGuid` | Unique guid of anchor group. | String | No |
+
+### Example of type with anchors provider
+
+You can define your own anchors provider. By default plugin search anchors in content of editor and use this anchors for links. But if you want refer to anchors outside of editor you can define another type of anchor with `anchorsProvider` function.
+
+```javascript
+myType: {
+	name: 'My type',
+	anchorTextTemplate: '${name}',
+	linkTextTemplate: '${name}',
+	anchorsProvider: function(callback, editorAnchors, type, editor) {
+		var anchors = [];
+		anchors.push({
+			type: 'myType',
+			guid: '7d24373b-0756-481d-bf97-5a17ffdf3a28',
+			name: 'Anchor name',
+			number: '1'
+		});
+		callback(anchors);
+	},
+	allowCreateAnchors: false,
+	groupAnchors: false
+},
+```
+
+`anchorsProvider` method attributes:
+
+| Name | Description | Type |
+| --- | --- | --- |
+| `callback` | Callback method which must be called with arrays of anchors as argument. | Function |
+| `editorAnchors` | Anchors of this type (`myType` in this case) which already contains in editor. You can merge this anchors with your own anchors if need. | Array |
+| `type` | Type definition (Object `myType` in this case). | Object |
+| `editor` | Instance of ckeditor. | Object |
+
+
+## Roadmap
+
+See https://github.com/indvd00m/crossreference/issues.
+
+## Icons:
+
+https://icons8.com/web-app/21792/unicast
+
+https://icons8.com/web-app/15117/anchor
+
+https://icons8.com/web-app/38051/link
+
+https://icons8.com/web-app/21100/refresh
+
+## License & Author
+
+CrossReference Plugin is distributed under GPL/LGPL/MPL. For license terms, see LICENSE.md.
+
+CrossReference Plugin is written by David E. Veliev.
diff --git a/plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js b/plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js
new file mode 100644
index 0000000..e310672
--- /dev/null
+++ b/plugins/ckeditor4/crossreference/dialogs/crossreference-anchor.js
@@ -0,0 +1,119 @@
+CKEDITOR.dialog.add('crossreference-anchor-dialog', function(editor) {
+	
+	var config = editor.config.crossreference;
+	
+	var generateUUID = function() {
+		var d = new Date().getTime();
+		if(window.performance && typeof window.performance.now === "function"){
+			d += performance.now(); // use high-precision timer if available
+		}
+		var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+			var r = (d + Math.random()*16)%16 | 0;
+			d = Math.floor(d/16);
+			return (c=='x' ? r : (r&0x3|0x8)).toString(16);
+		});
+		return uuid;
+	};
+	
+	return {
+		title : editor.lang.crossreference.anchor,
+		minWidth : 400,
+		minHeight : 150,
+		
+		contents : [ 
+			{
+				id : 'tab-main',
+				label : editor.lang.crossreference.anchor,
+				elements : [ 
+					{
+						type : 'vbox',
+						widths : [ '100%' ],
+						children : [
+							{
+								type : 'html',
+								id : 'description',
+								html : '<div style="white-space: normal; text-align: justify;">' + editor.lang.crossreference.anchorDescription + '</div>',
+							},
+							{
+								type : 'select',
+								id : 'type',
+								width: '100%',
+								label : editor.lang.crossreference.anchorType,
+								items : [],
+								required: true,
+								items : [['']],
+								onLoad: function() {
+									this.getInputElement().setStyle('width', '100%');
+									for (var typeName in config.types) {
+										var type = config.types[typeName];
+										var label = type.name;
+										if (type.allowCreateAnchors == false)
+											continue;
+										this.add(label, type.type);
+									}
+								},
+								setup: function(element) {
+									this.setValue(element.getAttribute('cross-reference'));
+								},
+								commit: function(element) {
+									element.setAttribute('cross-reference', this.getValue());
+									element.setAttribute('cross-anchor', '');
+								}
+							},
+							{
+								type : 'text',
+								id : 'name',
+								width: '100%',
+								label : editor.lang.crossreference.anchorName,
+								required: true,
+								setup: function(element) {
+									this.setValue(element.getAttribute('cross-name'));
+								},
+								commit: function(element) {
+									element.setAttribute('cross-name', this.getValue());
+								}
+							}
+						]
+					} 
+				]
+			} 
+		],
+		
+		onLoad : function() {
+		
+		},
+		
+		onShow : function() {
+			var selection = editor.getSelection();
+			this.element = selection.getStartElement();
+			if (this.element)
+				this.element = this.element.getAscendant('a', true);
+			if (!this.element || this.element.getName() != 'a' || !this.element.hasAttribute('cross-anchor')) {
+				this.element = editor.document.createElement('a');
+				var guid = generateUUID();
+				this.element.setAttribute('cross-guid', guid);
+				this.insertMode = true;
+			} else {
+				this.insertMode = false;
+			}
+			
+			if (this.insertMode)
+				this.setValueOf('tab-main', 'name', selection.getSelectedText().trim());
+			else
+				this.setupContent(this.element);
+		},
+		
+		onOk : function() {
+			if (!this.getValueOf('tab-main', 'type'))
+				return;
+			
+			this.commitContent(this.element);
+			
+			if (this.insertMode)
+				editor.insertElement(this.element);
+			
+			editor.execCommand('update-crossreferences');
+		}
+		
+	};
+});
diff --git a/plugins/ckeditor4/crossreference/dialogs/crossreference-link.js b/plugins/ckeditor4/crossreference/dialogs/crossreference-link.js
new file mode 100644
index 0000000..68c72e4
--- /dev/null
+++ b/plugins/ckeditor4/crossreference/dialogs/crossreference-link.js
@@ -0,0 +1,241 @@
+CKEDITOR.dialog.add('crossreference-link-dialog', function(editor) {
+	
+	var config = editor.config.crossreference;
+	
+	var updateAnchors = function(dialog) {
+		dialog.setState(CKEDITOR.DIALOG_STATE_BUSY);
+		
+		dialog.anchors = [];
+		dialog.anchorsByGuid = {};
+		dialog.anchorsGroupNameByGuid = {};
+		
+		var type = null;
+		var typeName = dialog.getValueOf('tab-main', 'type');
+		if (typeName)
+			type = config.types[typeName];
+		
+		var anchorSelect = dialog.getContentElement('tab-main', 'anchor');
+		anchorSelect.clear();
+		anchorSelect.add('', '');
+		
+		var anchorGroupSelect = dialog.getContentElement('tab-main', 'anchorGroup');
+		anchorGroupSelect.clear();
+		anchorGroupSelect.add('', '');
+		if (type && type.groupAnchors == true)
+			anchorGroupSelect.getElement().show();
+		else
+			anchorGroupSelect.getElement().hide();
+		
+		config.findAnchors(config, editor, type, function(anchors) {
+			dialog.anchors = anchors;
+			dialog.anchorsByGuid = {};
+			dialog.anchorsGroupNameByGuid = {};
+			
+			for (var i = 0; i < anchors.length; i++) {
+				var anchor = anchors[i];
+				var guid = anchor.guid;
+				var label = anchor.text;
+				anchorSelect.add(label, guid);
+				
+				if (type.groupAnchors == true && anchor.groupGuid) {
+					dialog.anchorsGroupNameByGuid[anchor.groupGuid] = anchor.groupName;
+				}
+				dialog.anchorsByGuid[guid] = anchor;
+			}
+			
+			if (type && type.groupAnchors == true) {
+				for (var groupGuid in dialog.anchorsGroupNameByGuid) {
+					var groupName = dialog.anchorsGroupNameByGuid[groupGuid];
+					anchorGroupSelect.add(groupName, groupGuid);
+				}
+			}
+			
+			// fix &nbsp; and others
+			$('option', anchorSelect.getInputElement().$).each(function() {
+				var option = $(this);
+				var text = option.text();
+				option.html(text);
+			});
+			
+			if (dialog.insertMode)
+				filterAnchors(dialog);
+			else
+				anchorSelect.setup(dialog.element);
+			
+			dialog.setState(CKEDITOR.DIALOG_STATE_IDLE);
+		});
+	};
+	
+	var filterAnchors = function(dialog) {
+		var filter = dialog.getValueOf('tab-main', 'filter');
+		if (filter)
+			filter = filter.trim().toLowerCase();
+		else
+			filter = '';
+		
+		var type = null;
+		var typeName = dialog.getValueOf('tab-main', 'type');
+		if (typeName)
+			type = config.types[typeName];
+		
+		var groupGuid = null;
+		if (type && type.groupAnchors == true)
+			groupGuid = dialog.getValueOf('tab-main', 'anchorGroup');
+		
+		var anchorSelect = dialog.getContentElement('tab-main', 'anchor');
+		var prevValue = anchorSelect.getValue();
+		var selected = null;
+		$('option', anchorSelect.getInputElement().$).each(function() {
+			var option = $(this);
+			var guid = option.val();
+			var anchor = dialog.anchorsByGuid[guid];
+			var text = option.text();
+			
+			var matches = filter.length == 0 || text.toLowerCase().indexOf(filter) != -1;
+			if (groupGuid)
+				matches = matches && anchor && anchor.groupGuid == groupGuid;
+			
+			if (matches) {
+				option.removeAttr('disabled', 'disabled');
+				if (selected == null)
+					selected = option.val();
+				else if (guid == prevValue)
+					selected = option.val();
+			} else {
+				option.attr('disabled', 'disabled');
+			}
+		});
+		anchorSelect.setValue(selected);
+	};
+	
+	return {
+		title : editor.lang.crossreference.link,
+		minWidth : 400,
+		minHeight : 150,
+		
+		contents : [ 
+			{
+				id : 'tab-main',
+				label : editor.lang.crossreference.link,
+				elements : [ 
+					{
+						type : 'vbox',
+						widths : [ '100%' ],
+						children : [
+							{
+								type : 'html',
+								id : 'description',
+								html : '<div style="white-space: normal; text-align: justify;">' + editor.lang.crossreference.linkDescription + '</div>',
+							},
+							{
+								type : 'select',
+								id : 'type',
+								width: '100%',
+								label : editor.lang.crossreference.anchorType,
+								required: true,
+								items : [['']],
+								onLoad: function() {
+									this.getInputElement().setStyle('width', '100%');
+									for (var typeName in config.types) {
+										var type = config.types[typeName];
+										var label = type.name;
+										this.add(label, type.type);
+									}
+								},
+								onChange: function() {
+									updateAnchors(this.getDialog());
+								},
+								setup: function(element) {
+									this.setValue(element.getAttribute('cross-reference'));
+								},
+								commit: function(element) {
+									element.setAttribute('cross-reference', this.getValue());
+									element.setAttribute('cross-link', '');
+								}
+							},
+							{
+								type : 'select',
+								id : 'anchorGroup',
+								width: '100%',
+								label : editor.lang.crossreference.anchorGroup,
+								required: false,
+								items : [['']],
+								onLoad: function() {
+									this.getInputElement().setStyle('width', '100%');
+								},
+								onChange: function() {
+									filterAnchors(this.getDialog());
+								}
+							},
+							{
+								type : 'text',
+								id : 'filter',
+								width: '100%',
+								label : editor.lang.crossreference.linkFilter,
+								onKeyUp : function() {
+									filterAnchors(this.getDialog());
+								}
+							},
+							{
+								type : 'select',
+								id : 'anchor',
+								width: '100%',
+								label : editor.lang.crossreference.anchor,
+								required: true,
+								items : [['']],
+								onLoad: function() {
+									this.getInputElement().setStyle('width', '100%');
+								},
+								setup: function(element) {
+									this.setValue(element.getAttribute('cross-guid'));
+								},
+								commit: function(element) {
+									element.setAttribute('cross-guid', this.getValue());
+								}
+							}
+						]
+					} 
+				]
+			} 
+		],
+		
+		onLoad : function() {
+
+		},
+		
+		onShow : function() {
+			var selection = editor.getSelection();
+			this.element = selection.getStartElement();
+			if (this.element)
+				this.element = this.element.getAscendant('a', true);
+			if (!this.element || this.element.getName() != 'a' || !this.element.hasAttribute('cross-link')) {
+				this.element = editor.document.createElement('a');
+				this.element.setAttribute('cross-link', '');
+				this.insertMode = true;
+			} else {
+				this.insertMode = false;
+			}
+			
+			if (this.insertMode) {
+				this.setValueOf('tab-main', 'filter', selection.getSelectedText().trim());
+				updateAnchors(this);
+			} else
+				this.setupContent(this.element);
+		},
+		
+		onOk : function() {
+			if (!this.getValueOf('tab-main', 'type'))
+				return;
+			if (!this.getValueOf('tab-main', 'anchor'))
+				return;
+			
+			this.commitContent(this.element);
+			
+			if (this.insertMode)
+				editor.insertElement(this.element);
+			
+			editor.execCommand('update-crossreferences');
+		}
+		
+	};
+});
diff --git a/plugins/ckeditor4/crossreference/icons/crossreference-anchor.png b/plugins/ckeditor4/crossreference/icons/crossreference-anchor.png
new file mode 100644
index 0000000000000000000000000000000000000000..d710722d237332a1728add03fc125c45607237f6
GIT binary patch
literal 458
zcmV;*0X6=KP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004zNkl<ZI8UXM
zF-QVY9LB$=)}o|E&=O(PP^4hZ4N6IlS3_V8=@Mu`jtxNy4UIOW&`>s{(2y>HaD@&H
zO(C4oXcQ4bgMv+&FYcXpm*y4Hf4lE}-|zkZ@7^Q$XA#Z(;h6(EU4pGQ8a`~S7CL#g
z0kKp9LnFH^RDOye==F68NOCX_F0oMc?E=A-Om_g$oxR&<A<xXV)~KCFh$o{M8oou}
zzyb@_Dp|ZfPaxopw1Zj!Cus}(ixtQKlf|O|$}b`y4B68pseo9L10g;HyqvNNUzFx{
z+f*%{%7D^@d?qU3IGsTKV;t+tvnoKyO8~o5(T>h<(9>IhpW75Q6~GHlfH>f`MSlhG
zLKr|EZaagkfZT%>^?CsYlNGMf3WM-M1%#NPH}*3vSF+%<R)XFz4cFvjD?t3ZDn<di
z2I%%c=@<wC3`FTAh%N^-b^vmUd0R;C^5<`qS`4wBzZa!d08zN@;<{3u?*VJ|T{Lbr
zod?hx!^&uX0%XJWy>$QQrld#Jp|l^9R-#S+0^2!#5oKq)YXATM07*qoM6N<$f*K#i
AT>t<8

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/icons/crossreference-link.png b/plugins/ckeditor4/crossreference/icons/crossreference-link.png
new file mode 100644
index 0000000000000000000000000000000000000000..89a36bae75b6bb0a9f3ff016f8c1c7ed4fe999b1
GIT binary patch
literal 603
zcmV-h0;K(kP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0006aNkl<ZI8S3_
zAOVE6>@DHv7Zm#Z@gwVs8pl$QRz_m<2Q=&#;Nxc9p{k;4{^|3_`<$HIiqD@u-8s9!
z%!8l-V9i{tXQXAMC7wQgHf2$%bwzB?kwQgz#lBlNZ}ku~AgS-<0cja2;|Gr()-5iv
z>4&+vc)_jvAKrbKi`M|3ip>s2#zy<^-o7(+X_b8rOmlSG!70kBD%m$~-YCUu0L-cP
z?%dtR#KL?T<oxjFeKVAmm7;+zI=-yJ-VLt-0TtU7#H7V;$jZpD-?@8l)Bk_}{>#Wn
zJ3oK+Z1ejsKeIM8IDWt|z^iJjfv~Wk!{^r@HwcRGw<#$rM?QY?<R{3G&!0bkd;RLw
z#`z^yQ84eo4S<9;+X4ke1%Hs_s~0c-07IVT-rc*)-@o}-#lp?1^X>c3C)?V*FCa%f
z*Z`1b4(9(`6qOYXo<Dyv@6WH_%IX^GUQeDr`SJ3}E6oiZo)2)P7q9_Q9S3*G%gI?i
zdG@px6jjN6r)qxw{9&o2qU?45;r$}y=tDP%5tKZ2wRO60T)%-5RdL-%JLKi%vd><)
zWQ*=>6fdMqJk!q4&lk~~pr#0u07ajyluXl;Cr|e-Dzgs2m)sd6TK0FVsjHR1oC>m8
zMp`=i-rai_fBa?i0Yw#F13;1)Q_h_d6BjrA_VwF+E^aQxJ9qEw{`TWv7$MClxe??N
p9$wx*z})tBRgH5GF}W0^1^@?*`FUaPl-&RT002ovPDHLkV1f<PEqnj~

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/icons/crossreference-update.png b/plugins/ckeditor4/crossreference/icons/crossreference-update.png
new file mode 100644
index 0000000000000000000000000000000000000000..43ef9230b6352ee9f6947468d45a61972bf6fe3f
GIT binary patch
literal 652
zcmV;70(1R|P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00070Nkl<ZI8S3_
zzybmq_6z*|`CXrzn>_*~y`siB6Pr4a7$dR-NFyg3(*!O~P8$gcab*q;4u+>so<5wB
zYoriRv0Z_SpR=CfKhuAZo*&=7-d@+@*$y|rt7@x(gow~GRaG_3PoF=1ee?S5oxgwo
ze)#tFE6a*nCmWxN%?>Kc%KN!_xEb!;x%=|-_wOFt+Pp7-4FK6J#K&<Ar1|>w>vz9>
z|53lD-eoDW>p%wR>+9|3;o)JpcJ=D@&p-ZJZD?@(05%}9?cf4EU7dK4=1<>#n}8(H
z{R}dIo11$DCkNXvbq!6~E0?cKU0P+I!w9lnn4jycn7Eku?b~<L(QSqq1o9$?&B4ZE
zrLLyd_3q8vCo}U*G#Ft{d-dw|#o75LU`2#LQs41wl9E!I7cX9NWDIZKH$z89JN^Fs
z2M6aBnL7~D43bakJ9$7+QNjMom8&xuVgA2;`wqzlT)ld&hb%9oPCRo#OiWZC>;+gL
zii?Yj-MW1z<J-@lS3%AM#W6PTgf#AnR#R1(@$%)%S91%^l~JPc#`PPIe*FB&{`KqE
zh%Fty2ha_Gr58m-CCwYxZ$P3EmXLTkn2%{`YioY_@`VB9G;{+%HuLiERH><{Y9Xf=
zumPYr=HuepuB@yi@%8IhP*MdO5YfEv2q!nsZx&`I0Z~yA6<%Im9+2iYA3lb_ya+ZR
zsAhX5I~SKa%*o$BeQVgz;rSqA^0^1nGSc!te*9o~@#4kZAK!oM`1<Q#4RT6F$&KiK
m2Bi^@*w?RLS6~YhkQ@N#*(v0V{{<}o0000<MNUMnLSTX_5<VXQ

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/icons/crossreference.png b/plugins/ckeditor4/crossreference/icons/crossreference.png
new file mode 100644
index 0000000000000000000000000000000000000000..393b3d8d85bfbef113719b21e69c4defc1ed011e
GIT binary patch
literal 469
zcmV;`0V@89P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0004;Nkl<ZI8Tj|
z%S!@L6voe)8A)B#q6Y{?i;5zh?BOOiwF;Sx9z?CA2lNND(da3LV7e-Z7E;iIq_u?>
zLH~e7sRYr37PTq}S_JA$CtMiQ<fwOhzw>>+^WBS3><}R!l3X^t9Q8?}<YGB?4b|qI
zf#3=fH~=t(2(5D6?S}z)-UNw667m{2{lP5+NTP;~_-3b{lpzHPvdKj79&pZV7TYd+
z|Bt}s4?duV?aP;(GYp+w`9$g4#j%W{10r+<wiCR`93o@{0J5r4v^Cd4{O$$NJ{Rug
zIPM4l7_Lk+)u??AxA5&AeVxubW;CYr8T=s_T8zH8nfc1BFn$w%YpHmx?i9Mq)P|LY
zI5>auW$tL#<qSrwHI-FRt`~%+R7oX{uAbY)RAvVN8BxrPj`tWYh|sI8*Lq4?L7w6!
zVj3c`YeGCkz=4uVRATN&V)qh(ZBnp2s;!{@i~z73jV*x$pA-F-^^!WsC)$g|Hh|~}
z8Rpnw>v~XX3KHbR2d9?{B+&#Rr4i7mH2M8V#W1tQx)HzSIyu1)c@?;1Li^qM00000
LNkvXXu0mjfB&X5<

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-anchor.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-anchor.png
new file mode 100644
index 0000000000000000000000000000000000000000..2d3dbbf0ca3bd45be758ff91798e524d312859d2
GIT binary patch
literal 913
zcmV;C18)3@P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000A6Nkl<ZSVzT|
zzfV(96vsceWss;5<1Z2oLPAWGA~m{OVr$|gjKx7oTv`Wla|8YYaIhW0K{|@7#S{i-
zOIpGp21R2?9IOHXlfpIk{i1!nkGwu&xD$E3=bq2`o^#K+2#$D(Blb@)fT=faY;TVO
zkE{TuX>A>6c(BrJK*0bqGxG=$ManV5p%7z8Ss*<$`2PW3zK#+KeFXYRCFc!?*<1`L
zu(x-ECl89vKs2v_?JSiPykB~R6cysvX36Gc9h6UsAOM}fDpEe9`}$*$RaQ#V2r&V4
zkxG8?>D$a+Gn<{gnVAv8VSC4-@ojyr4;UtuoNo5KU;uXBJFa9v{$cIYbEh7fBnS?m
z9L<$g-XR_de2#xZ^X~VN9$IjM)B&g>J$9_<w<q`q$jp2}h|8Ql_nEWp-z*4q{nRqA
z<NCL5HY%5pvPgR9hM#N%12}WxJCYNG#7)DAlplbq0kHY|BCtp*89f|;lG1K8>Litd
zot>!jEnkWuM8N{+C(*m#l-wzBpH)MqS0I~HJ$~xI&gKQ+4tu|IYOiS{KsMKjlphhI
z4HzetH2b}K`31=4l>I1DR%mVQau;VKKqfbh;Gre$0_h>U(CQIt0SFBm?O3<W!FAg_
zk5{CV_5?LP=@f|3-Z4qF`j?+SmfZ%9k9=tiA=F4#ML15PSFe-`=={Z7gu_+V*GAk8
zOJ4)|(maS$BqH8d$uEEcoGTZN6eM~Z)bs!-&my=_INU}5RsC?O1%Ow?BX!a`N)?tn
z+1*`5@|Hwoz?~&8fDr@}AZLm9>K_?OrTyF%J=Mxv!APEwh)nteu&IqI5yRZ+X`FKT
zQUxJSIS1<0GTsYv%Gl$frgtZtD=XTkR`pKOa(tZrF7wToFIx)L##5tKVYQ9w)+mAz
zYsU-X5&Q2t5xfD^A-h|uyQx{PN__*#5+d{q<UQ?`+hYa6210g&IBD%!Bz!#Pz`G0&
zo&`oEo3l=?ZDTcr-Im&Ka)Fi;176PceLxqQnM-xgFFQZiI&5_Q)p#lEYNsg$+%P(j
z`aQlK+h+d9ajm2J9$=No0o_nrFy_Z#0Lt>+QWUXgj$j#zakr<b{|64IfNiY?l3Mm#
n;DAWIehRKY0B1UrBM0~g50+9eA918+00000NkvXXu0mjfReqk{

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-link.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-link.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba5337e071637fda2c5c2f2bb43932a965c33ade
GIT binary patch
literal 1392
zcmV-$1&{iPP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000FyNkl<ZSVy&&
zZA?>V6vv<Y()J<+N?V{Wwv<T`kvE;wEi;*mIHpdcO!sBUvSpvPWYL%{b55biA}-q(
zmt`?AS@vaS8OqFn2^+~~;!JQ%0ijr4OAFkBw6szvZSTwOxl2v$T6A8#9|#TP{(sLo
z|8xFNG4zz5Jtx{K2_DO8Y20%ynH2Uk^bgp6S7B`A0zu+0QB)cxBM2tAxG3j2&b}0l
ze(=kgy*)AARR@3*Q!=v6T4*(Bwd#k?w-8)Jj=MviC>v>LwpD)ve_T}nQJf^NmzI^L
zXDHLry?b*@(=@%rMj4cwn}h50dXcE7r_U2!Tz=uo+1<`n14tAf92lJUFDzW)!t7~8
zQGT3Reov-Q9I33V$O{I8Xz;G%&*u79wyz36Qt{yZld&?#`cQN7>L*6i+K<d;Q})f9
z-SbU#RcgrqAfAzy*1o=YeIAruJb4mvfB<u*k!WP|vzs)xZuJBLi;FuX0~|cn?kX!U
zGd)UN1UP=xqEuycS5%aW0HG*vkp!^sMBCeD)7tYEOTJ=wcz9vX=R2NQ_V_WVsr&WY
z!gcH3$jQ;9-?-5g_^F{<B?&-y;q^_G6)#2^2H6J&Z(g!hZA-ORYHS_vt1_}0Hk1^r
zJu|b&Iqo`lxxVVCB!I*9og-VfZdvE|2atVm@N<mg1B6^gHPu$tJ#=!xe5&m14?!Gu
zfqlU4U=aEI72C^xNdN~=b@T`T6);u~hhxfUFsd1r#ptQ2)6JjlZWR0eY1>7$T2mbp
z@9Vwejc{yLY#T}gsBJ%6WG(vG>-D0H%naV3*I`cQM3|oO90M;rN?h_L1Xq&^awxwb
zU#82;MbpzXa=G2J7{V@cJYS>N>2fU=GnH8O`1VMu!0Wb-pYzT6)q1^74#o-yUN9I9
zh!sq!R4Nfk5(xa^a11@@d7?=l2>_#}kjdT^QbWseD8ys@Z9dF35ETBEAih%&UqgF5
z5tq}ASqjXuHR(!}Mo|cS;qiEa^Yi`*4wr8S!~L%~hVtTayj7>u8MQfD6)YNf=H`58
zbZj(iHkmLuxgZ{zn3(8fk^C*#_lO|&@*J-uW%xj7Y579y*?oVk6!}Rj0P9tb6P@K1
zWf~BM9!A2;!n;X06%s}Yi9M(3sLSPQzig}C|D^Yd{{SS4iyLmv=i(9HN?^ocQ@*JH
z+zve#P9A1LOfkgjssJR4i^1aee*rTMNv1a%Yr)l1G|evr?qgbQ4jLI56E~V<fTZGa
zsdiA9d4s`l1cYYjnd$Y#MbCiKg;?zsc6y~GfPe3B;l7np4gQDZqsKUw4KW<2uohYC
zzz1Dje>pDMb`?tkfRrjIu)G5=Tq)0EB8P09T_qbgY=zHv?e>lz>vp{=3E+_Jw|m>R
zJ*R~c8yg?J*i^gg&6QG3tI;%C3kx&H$DIN9<kZoYGkd>#VgTs9Iy0*iE(yK8{obH|
zVM{7k$44rRX8)c3f#%cIrB5m@X2EO6TXy7VH9wSWEXlj|_ib;8L50b-R-!nh8e;gA
zu#XER?g1g!eL}2eyWNw%NtgS}Sd_+Il1w~4QXf|=<tmQdY$!^By1Q?Cm`LOtOUTco
z<z*G7z)xjoW*tbC=TgMQ7Qheifl?vAwrTU`O!!RGv~PBHjw59xGU)YbaEF7QCtfC`
zia!8=U!cq+hBua#muEsH;vZPMW20m4Fw5?b|6aGM0I^C?GTGMzj+dmTE5kwnQITkr
y;d$(P79(t_B2@}V%KHFJ2Z>0hl%RPWuzvt^yV!?E#OMS70000<MNUMnLSTaB?3dmE

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-update.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference-update.png
new file mode 100644
index 0000000000000000000000000000000000000000..2e4fcf2f75840c8cd46f52c2ada9ab6c85c2e2d2
GIT binary patch
literal 1463
zcmV;o1xWgdP)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F8000GkNkl<ZSVzT|
zUrbY19LLW&x9z>PWtM`)$%dey9U!f<h?_H;58Dt_Fj<!UOSVT%_Tb(WC1U~6`LaEj
z=-zx-X0l{jCZKZ<E^$T>q^)Ab35skGC{#+gm)p{N?^%8~-rAPpT0-1On)J5k{Lbh6
ze&65k{4PfS^T3(xU(?Xx)FJdXA>=bc7)DX#d__@g7-N5w(oZ{EYrUD+gSlw|>}lxu
zf?#|cV{FaI$w8KEi-BX=*j{(;^dm)4cDA3`^T)CR>^^ky9fo1fu`FvYDk?JP=2}zQ
zzjp0<0zh43=V=D(s!~msWhtUi`oqQ6+OyB~z@EeH2N}YgTwk(YzdFwrvlR|UP%s!o
zvMixsaGFPyO1vOg;ytjh@i%X7j@4m{TPH~}`s@CEnNsCv_p#bfG=nKaP=BQ3C!OA~
zue7X`%QBnPxuMVudN4S|M?{ff7^YK_<$j9LFrqkwF?AA!oOPerH4JkBAU}VNW9`~k
z)wQs>*LPcth;#1v%~N^+PHr$5PPklKSe=eh7x(wy4f8xdqfmNCbKUb|oeIF?@$#Z5
zHeNiw`}_E{2_Ar$>lodY3TK5LPCm;E$lvb|OVa#>Wb$+X^7GdqF&svkEuY61i6Xi!
zK3ft1>W*}d7nc<0LCoRgw|e`+k?8z^bWR-)1Rls+ZF5Xdhs61CShuxms~)^L`p+18
zG(0@scC6;*1sZ@<Gji;y%1W0SbdT2;ndABMnVeiR3IMV!IS5AQ;J1}4v+K$?m9BvA
z-Q7Lm$o#WI#XJC~x7+P`kZMy?Ptd@?z(m`zn$?-+HO#MT=<LFnJ_PvsrmGej6$doi
z;}Zci_+T*R1r-1)oB@-Y+uwRa56?Y4y@D8ye3_~1HCXUw{91U<GMT>H{JPTubFTk+
zBRWr&t)K-J0F-aDtvYG9Z`4Dc_xALPZLPJc%a&`@HFV6mDqTj7W5K(8ATXt7gbGl9
z^m6a|;&od<d?1vOk&$1{H&=hKT$`(VG+w?^SWxh8{wr$`gkfm#;VpMdwMzv6(Ug|j
z9Tv+<^!V}L0PxMPt+h?d39z@Jqp6^v;A<#OP}KbX0pEq@_nl8Ya4Aq$R=NrRJRYww
z%L_}6|6<Up4$P)gn>Ra60C4xNKj3cJmA3$(ug^Qf3&O#r3UE<?!|eyNvdk@U0F&;P
zUA6@w7<%{!jg5}I=ny1|aCl_ocXxC3d&{YTcoBlohaZnT6XA<U!@Wm3#Y)!}4$|=6
zy#Zlza_VR-4U-Fzr_UFf75J}`i^)=TkzD4X5Fr_Dfa^P<6l)jJ(^5Q+^~TrSO*=!-
zA5e<dwYAo4TS{2!k3P$?<T4)v07_PGI9;`^l7mg|^!w*#W<qXEDOM=@m|=8k-ew8_
z@FsKCKBu!nwcFKoGcq5I?oZj0!G%;*SeOUZ3a;bsuAV5%8Ki7$wsB%SkTC!p%AnVu
z(VCm57g53`m(UM@7W5c*JDd)K)<hUN4vmhE!6zet<hBl)o7-MrM3Uv|`0jZ@PY4;Y
z!enZ7Ix39NM8JUZoGt*Injz#{lgac_d3hP9wRMX%HwyrOoaK!5PN!p0fcit13KgP!
zPBHRgg<25Cg@lkdDOGl`EGL(g6q})}!}zbZE&%{G$C!M$(Y}FU7+p+n6M+B<PCbc*
z0D4D4$W^n+96}iBtX8X8$1o@-HwQtUYeT*D9t=igN@Jo+7I8ur5QO&=hEdg;JQO6~
zXlt%H0KaPhJ9cbOnG}#}LxV%%s1%)%W%;A$y)mWrYL>i<2C!*UdF(Gi5YX)GEFTO8
z4V0qkbX)i(0jSx6@EM9|6(M92V=_i5m1J4^k)e!RdqGL3W-JLH9mDC)`4^|57*2I~
R0?GgY002ovPDHLkV1hE^#^C?}

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/icons/hidpi/crossreference.png b/plugins/ckeditor4/crossreference/icons/hidpi/crossreference.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee4b6fe0ba7935edcd932a52c1d73cb8b313cf5a
GIT binary patch
literal 898
zcmV-|1AY97P)<h;3K|Lk000e1NJLTq001BW001Be1^@s6b9#F80009?Nkl<ZSVz59
zzfV(96#mY8P3Y8u#xR0|U?@pjDTxe3Tud4xn3#|lQ-LV1)`41CY!}nmq1_>&(tiL=
zN=I;Rm9iMYK^P39v<o%(dd$6Tp_JnLLE$D%ns@I#=R4<q=R1dRiEDg5lLTWzx+J7N
zy}KW!%knRs123EWnFkO|EOmAqYEuMw80;Y;kC7n0|L#Tw3OwHG@xn#{VC<O6KsdfI
z2BswtdW|@3JktsQ1G|O+gyRblfZj@@%%1@zr9msiLoW(Oz>LplA^@uQkC(A0kdcGd
zs`oe=o0}EJOfLa~f$1s-B?%+C84z!7Kh!ov+AH8!@8@O(ncB8=0fgcUK?Rf$X^(|w
z$J*w(W=I!6IKG$yFa@TWSm>GfZ+WFx^GT+v4iG36@DJ&8;B|blK!980iq|ONS|Jq9
zLCreA`T)Z5MHUA8eM4PpSxXSJ2L@}u6_8s4J@WI{Z@XX^(1ALD0hec=2%VPmU%S`{
z09@07hv96mMwNt6H(6*vL1pFDO3c4g2jCj?6ah}!U`svrdw0wNNoRA%I&yTGqa>VH
zNGpKIdBP}jQDN0{^Xjjk;=60m9S!)0E!BVBt^~m(bpXUEVUHfnXI2Q9a5$Xk@4q4U
zwzhttR4R&0d~|i~N!Gdthpt<RTrX2J{wA{zf^&G-2fMvPo-ddGAeYO_W-)MOPwIYb
z?zwKs>N#t*e*|D;<Th+J^#lOXEG9?0C2a$K-^Bo^KY`QfKwn><1hBomjbgDRpI~yd
zTRwpe>cu=kwF0zFB62jQh?z?&tL{g4u1OM#CUkBRo~48mgi;YrraoL0)QS=mWw@Np
zv&cO&_K7HIgYv-&87(VeI-8eD2%reyWT{$UooOYk1NduKyKH5xo+Y;h-||XJCH$YU
zbT%(09=D>Z-Y56GhNhoZ_Rds7y-3p8yllq|ntAFUI$t|(rG$C_mRG+7i8ujZJ>d7<
z)jMx?Usqg~);2nA2clP?ryZr(3{V$<xRB1~8irDeh)Kq5q|%O+iKy<ViA3vSswGw3
zG)hd%I?x!Y%mh=a`W)7lX&q>GBRHWRRHlhosHXUt(gf2wU@gwmw=C;Gy8zV4d}<>4
Y2gw3-+Th&^xc~qF07*qoM6N<$f~V+|NB{r;

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/crossreference/lang/en.js b/plugins/ckeditor4/crossreference/lang/en.js
new file mode 100644
index 0000000..e0705c9
--- /dev/null
+++ b/plugins/ckeditor4/crossreference/lang/en.js
@@ -0,0 +1,21 @@
+CKEDITOR.plugins.setLang('crossreference','en',{
+	'name': 'Cross-reference',
+	'anchor': 'Cross-reference anchor',
+	'anchorDescription': 'Anchor for cross-references. After save of anchor all cross-references links will be updated.',
+	'anchorType': 'Anchor type',
+	'anchorName': 'Name',
+	'anchorGroup': 'Anchor group',
+	'link': 'Cross-reference link',
+	'linkDescription': 'Cross-references link to an anchor',
+	'linkFilter':'Search / filter',
+	'updatingCrossReferences': 'Updating cross-references...',
+	'updatedCrossReferences': 'Updated cross-references: ',
+	'updateCrossReferences': 'Update cross-references',
+	'setCrossReferenceAnchor': 'Set anchor for cross-references...',
+	'setCrossReferenceLink': 'Set link to anchor...',
+	'chapter': 'Chapter',
+	'figure': 'Figure',
+	'fig': 'Fig.',
+	'table': 'Table',
+	'reference': 'Reference'
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/crossreference/lang/ru.js b/plugins/ckeditor4/crossreference/lang/ru.js
new file mode 100644
index 0000000..7c742ef
--- /dev/null
+++ b/plugins/ckeditor4/crossreference/lang/ru.js
@@ -0,0 +1,21 @@
+CKEDITOR.plugins.setLang('crossreference','ru',{
+	'name': 'Перекрёстная ссылка',
+	'anchor': 'Якорь для перекрёстных ссылок',
+	'anchorDescription': 'Якорь, на который могут ссылаться перекрёстные ссылки. После сохранения якоря всё перекрёстные ссылки будут обновлены.',
+	'anchorType': 'Тип',
+	'anchorName': 'Наименование',
+	'anchorGroup': 'Раздел / группа',
+	'link': 'Перекрёстная ссылка',
+	'linkDescription': 'Перекрёстная ссылка на якорь.',
+	'linkFilter': 'Поиск / фильтр',
+	'updatingCrossReferences': 'Обновление перекрёстных ссылок...',
+	'updatedCrossReferences': 'Обновлено перекрёстных ссылок: ',
+	'updateCrossReferences': 'Обновить перекрёстные ссылки',
+	'setCrossReferenceAnchor': 'Установить якорь для перекрёстных ссылок...',
+	'setCrossReferenceLink': 'Установить ссылку на якорь...',
+	'chapter': 'Глава',
+	'figure': 'Рисунок',
+	'fig': 'Рис.',
+	'table': 'Таблица',
+	'reference': 'Литература'
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/crossreference/plugin.js b/plugins/ckeditor4/crossreference/plugin.js
new file mode 100644
index 0000000..d0a65c4
--- /dev/null
+++ b/plugins/ckeditor4/crossreference/plugin.js
@@ -0,0 +1,449 @@
+CKEDITOR.plugins.add('crossreference', {
+	lang : [ 'en', 'ru' ],
+	requires : 'dialog,notification',
+	icons : 'crossreference,crossreference-anchor,crossreference-link,crossreference-update',
+	hidpi : true,
+	init : function(editor) {
+		
+		// config
+		
+		var config = getConfig();
+		editor.config.crossreference = config;
+		
+		// plugin
+		
+		var anchorAllowedContent = 'a[!cross-reference,cross-anchor,cross-guid,cross-name,cross-number]{*}(cross-reference,cross-anchor)';
+		var anchorRequiredContent = 'a[cross-reference,cross-anchor]';
+		var linkAllowedContent = 'a[!cross-reference,cross-link,cross-guid,cross-name,cross-number]{*}(cross-reference,cross-link)';
+		var linkRequiredContent = 'a[cross-reference,cross-link]';
+		editor.addFeature({
+			name: 'crossreference-anchor',
+			allowedContent: anchorAllowedContent,
+			requiredContent: anchorRequiredContent
+		});
+		editor.addFeature({
+			name: 'crossreference-link',
+			allowedContent: linkAllowedContent,
+			requiredContent: linkRequiredContent
+		});
+		editor.ui.add('crossreference', CKEDITOR.UI_MENUBUTTON, {
+			label : editor.lang.crossreference.name,
+			modes: {
+				wysiwyg: 1,
+				source: 1 
+			},
+			toolbar : 'insert',
+			onMenu: function() {
+				var selectedElement = null;
+				
+				var selection = editor.getSelection();
+				if (selection) {
+					var element = selection.getStartElement();
+					if (element)
+						element = element.getAscendant('a', true);
+					if (element && element.hasAttribute('cross-reference')) {
+						selectedElement = element;
+					}
+				}
+				
+				var state = getMenuState(selectedElement, true);
+				return state;
+			}
+		});
+		
+		// dialogs
+		
+		var updateCmdName = 'update-crossreferences';
+		var anchorDialogCmdName = 'crossreference-anchor-dialog';
+		var linkDialogCmdName = 'crossreference-link-dialog';
+		
+		CKEDITOR.dialog.add(anchorDialogCmdName, this.path + 'dialogs/crossreference-anchor.js');
+		CKEDITOR.dialog.add(linkDialogCmdName, this.path + 'dialogs/crossreference-link.js');
+		
+		editor.addCommand(anchorDialogCmdName, new CKEDITOR.dialogCommand(anchorDialogCmdName, {
+			allowedContent: anchorAllowedContent,
+			requiredContent: anchorRequiredContent
+		}));
+		editor.addCommand(linkDialogCmdName, new CKEDITOR.dialogCommand(linkDialogCmdName, {
+			allowedContent: linkAllowedContent,
+			requiredContent: linkRequiredContent
+		}));
+
+		// commands
+		
+		editor.addCommand(updateCmdName, {
+			async: true,
+			contextSensitive: false,
+			editorFocus: false,
+			modes: {
+				wysiwyg: 1,
+				source: 1
+			},
+			readOnly: true,
+			exec: function(editor) {
+				editor.setReadOnly(true);
+				var notification = editor.showNotification(editor.lang.crossreference.updatingCrossReferences, 'progress', 0);
+				
+				var cmd = this;
+				
+				var typesCount = 0;
+				var processedTypesCount = 0;
+				for (var typeName in config.types) {
+					typesCount++;
+				}
+				var linksCount = 0;
+				
+				var html = null;
+				if (editor.mode == 'source')
+					html = $('<div>' + editor.getData() + '</div>');
+				else
+					html = $(editor.editable().$);
+				
+				function finishCommand() {
+					editor.setReadOnly(false);
+					editor.fire('afterCommandExec', {
+						name: updateCmdName,
+						command: cmd
+					});
+					notification.update({
+						type: 'success', 
+						message: editor.lang.crossreference.updatedCrossReferences + linksCount,
+						important: true
+					});
+				}
+				
+				if (typesCount == 0) {
+					finishCommand();
+					return;
+				}
+				
+				for (var typeName in config.types) {
+					config.findAnchors(config, editor, config.types[typeName], function(anchors) {
+						notification.update({
+							progress: (1 / typesCount) * processedTypesCount 
+						});
+						for (var i = 0; i < anchors.length; i++) {
+							var anchor = anchors[i];
+							var type = config.types[anchor.type];
+							
+							notification.update({
+								progress: (1 / typesCount) * processedTypesCount + (1 / typesCount / anchors.length) * i
+							});
+							
+							var aName = type.type + '-' + anchor.guid;
+							
+							var anchorElement = $('a[cross-reference="' + type.type + '"][cross-anchor][cross-guid="' + anchor.guid + '"]', html);
+							if (anchorElement.length > 0) {
+								anchorElement.attr('cross-reference', type.type);
+								anchorElement.attr('cross-anchor', '');
+								anchorElement.attr('cross-guid', anchor.guid);
+								anchorElement.attr('cross-name', anchor.name);
+								anchorElement.attr('cross-number', anchor.number);
+								anchorElement.attr('name', aName);
+								if (!anchorElement.hasClass('cross-reference'))
+									anchorElement.addClass('cross-reference');
+								if (!anchorElement.hasClass('cross-anchor'))
+									anchorElement.addClass('cross-anchor');
+								
+								anchorElement.removeAttr('cross-link');
+								anchorElement.removeClass('cross-link');
+								
+								anchorElement.text(anchor.text);
+							}
+							
+							$('a[cross-reference="' + type.type + '"][cross-link][cross-guid="' + anchor.guid + '"]', html).each(function() {
+								var linkElement = $(this);
+								
+								linkElement.attr('cross-reference', type.type);
+								linkElement.attr('cross-link', '');
+								linkElement.attr('cross-guid', anchor.guid);
+								linkElement.attr('cross-name', anchor.name);
+								linkElement.attr('cross-number', anchor.number);
+								linkElement.attr('href', '#' + aName);
+								
+								if (!linkElement.hasClass('cross-reference'))
+									linkElement.addClass('cross-reference');
+								if (!linkElement.hasClass('cross-link'))
+									linkElement.addClass('cross-link');
+								
+								linkElement.removeAttr('cross-anchor');
+								linkElement.removeClass('cross-anchor');
+								
+								var linkText = anchor.text;
+								if (type.linkTextTemplate)
+									linkText = config.formatText(type.linkTextTemplate, anchor);
+								linkElement.text(linkText);
+								linkElement.attr('title', anchor.text.replace(/&nbsp;/g, ' ').trim());
+								
+								linksCount++;
+							});
+						}
+						processedTypesCount++;
+						if (processedTypesCount >= typesCount) {
+							// done
+							if (editor.mode == 'source')
+								editor.setData(html.html());
+							finishCommand();
+						}
+					});
+				}
+			}
+		});
+		
+		// keystrokes
+		
+		editor.setKeystroke(CKEDITOR.CTRL + CKEDITOR.SHIFT + 65, anchorDialogCmdName);
+		editor.setKeystroke(CKEDITOR.CTRL + CKEDITOR.SHIFT + 76, linkDialogCmdName);
+		editor.setKeystroke(CKEDITOR.CTRL + CKEDITOR.ALT + 85, updateCmdName);
+		
+		// double click
+		
+		editor.on('doubleclick', function(evt) {
+			if (evt.data.element && !evt.data.element.isReadOnly() && evt.data.element.getName() === 'a' 
+					&& evt.data.element.hasAttribute('cross-reference')) {
+				editor.getSelection().selectElement(evt.data.element);
+				if (evt.data.element.hasAttribute('cross-anchor')) {
+					evt.data.dialog = anchorDialogCmdName;
+				} else if (evt.data.element.hasAttribute('cross-link')) {
+					evt.data.dialog = linkDialogCmdName;
+				}
+			}
+		});
+		
+		// menu
+		
+		var updateMenuItemName = 'updateCrossReferences';
+		var setAnchorMenuItemName = 'setCrossReferenceAnchor';
+		var setLinkMenuItemName = 'setCrossReferenceLink';
+		
+		var getMenuState = function(element, alwaysAllowEditItems) {
+			var items = {};
+			items[updateMenuItemName] = CKEDITOR.TRISTATE_OFF;
+			if (alwaysAllowEditItems == true) {
+				items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_OFF;
+				items[setLinkMenuItemName] = CKEDITOR.TRISTATE_OFF;
+			}
+			if (element && element.getName() === 'a' && element.hasAttribute('cross-reference')) {
+				items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_OFF;
+				items[setLinkMenuItemName] = CKEDITOR.TRISTATE_OFF;
+				if (element.hasAttribute('cross-anchor')) {
+					items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_ON;
+					items[setLinkMenuItemName] = CKEDITOR.TRISTATE_DISABLED;
+				}
+				if (element.hasAttribute('cross-link')) {
+					items[setAnchorMenuItemName] = CKEDITOR.TRISTATE_DISABLED;
+					items[setLinkMenuItemName] = CKEDITOR.TRISTATE_ON;
+				}
+			}
+			return items;
+		}
+		if (editor.addMenuItem) {
+			editor.addMenuGroup('crossreferenceGroup');
+			editor.addMenuItem(updateMenuItemName, {
+				label : editor.lang.crossreference.updateCrossReferences,
+				command : updateCmdName,
+				icon: 'crossreference-update',
+				group : 'crossreferenceGroup'
+			});
+			editor.addMenuItem(setAnchorMenuItemName, {
+				label : editor.lang.crossreference.setCrossReferenceAnchor,
+				command : anchorDialogCmdName,
+				icon: 'crossreference-anchor',
+				group : 'crossreferenceGroup'
+			});
+			editor.addMenuItem(setLinkMenuItemName, {
+				label : editor.lang.crossreference.setCrossReferenceLink,
+				command : linkDialogCmdName,
+				icon: 'crossreference-link',
+				group : 'crossreferenceGroup'
+			});
+		}
+		if (editor.contextMenu) {
+			editor.contextMenu.addListener(function(element, selection) {
+				if (element.getName() === 'a' && element.hasAttribute('cross-reference')) {
+					selection.selectElement(element);
+				}
+				var state = getMenuState(element, false);
+				return state;
+			});
+		}
+		
+		function getConfig() {
+			var defaultConfig = {
+				activeTypes: ['chapter', 'image', 'table', 'reference'],
+				overrideTypes: false,
+				types: {}
+			};
+			defaultConfig.types.chapter = {
+				name: editor.lang.crossreference.chapter,
+				anchorTextTemplate: '${number}. ${name}.',
+				linkTextTemplate: '${number}',
+				numeration: {
+					enabled: true,
+					firstNumber: '1',
+					increase: function(number) {
+						var n = parseInt(number);
+						return ++n;
+					}
+				},
+				anchorsProvider: 'default',
+				allowCreateAnchors: true,
+				groupAnchors: false
+			};
+			defaultConfig.types.image = {
+				name: editor.lang.crossreference.figure,
+				anchorTextTemplate: editor.lang.crossreference.fig + ' ${number}. ${name}.',
+				linkTextTemplate: '${number}',
+				numeration: {
+					enabled: true,
+					firstNumber: '1',
+					increase: function(number) {
+						var n = parseInt(number);
+						return ++n;
+					}
+				},
+				anchorsProvider: 'default',
+				allowCreateAnchors: true,
+				groupAnchors: false
+			};
+			defaultConfig.types.table = {
+				name: editor.lang.crossreference.table,
+				anchorTextTemplate: editor.lang.crossreference.table + ' ${number}. ${name}.',
+				linkTextTemplate: '${number}',
+				numeration: {
+					enabled: true,
+					firstNumber: '1',
+					increase: function(number) {
+						var n = parseInt(number);
+						return ++n;
+					}
+				},
+				anchorsProvider: 'default',
+				allowCreateAnchors: true,
+				groupAnchors: false
+			};
+			defaultConfig.types.reference = {
+				name: editor.lang.crossreference.reference,
+				anchorTextTemplate: '[${number}] ${name}.',
+				linkTextTemplate: '[${number}]',
+				numeration: {
+					enabled: true,
+					firstNumber: '1',
+					increase: function(number) {
+						var n = parseInt(number);
+						return ++n;
+					}
+				},
+				anchorsProvider: 'default',
+				allowCreateAnchors: true,
+				groupAnchors: false
+			};
+			
+			var config = CKEDITOR.tools.clone(defaultConfig);
+			if (editor.config.crossreference) {
+				config = CKEDITOR.tools.extend(config, editor.config.crossreference, true);
+				if (!config.overrideTypes) {
+					for (var typeName in defaultConfig.types) {
+						var type = defaultConfig.types[typeName];
+						if (!(typeName in config.types))
+							config.types[typeName] = type;
+					}
+				}
+			}
+			for (var typeName in config.types) {
+				var type = config.types[typeName];
+				type.type = typeName;
+			}
+			for (var typeName in config.types) {
+				if ($.inArray(typeName, config.activeTypes) == -1) {
+					delete config.types[typeName];
+				}
+			}
+			
+			// shared methods
+			
+			config.findAnchors = function(config, editor, type, callback) {
+				var anchors = [];
+				
+				if (type == null) {
+					callback(anchors);
+					return;
+				}
+				
+				var number = null;
+				if (type.numeration && type.numeration.enabled)
+					number = type.numeration.firstNumber + '';
+				
+				var html = null;
+				if (editor.mode == 'source')
+					html = $('<div>' + editor.getData() + '</div>');
+				else
+					html = $(editor.editable().$);
+				
+				$('a[cross-reference="' + type.type + '"][cross-anchor]', html).each(function() {
+					var element = $(this);
+					var anchor = {
+						type: element.attr('cross-reference'),
+						guid: element.attr('cross-guid'),
+						name: element.attr('cross-name'),
+						number: number,
+						text: element.text()
+					}
+					anchors.push(anchor);
+					if (type.numeration && type.numeration.enabled)
+						number = type.numeration.increase(number);
+				});
+				
+				function postProcessAnchors(anchors) {
+					for(var i = 0; i < anchors.length; i++) {
+						var anchor = anchors[i];
+						
+						if (anchor.type != type.type)
+							throw 'Incompatible type: ' + type.type;
+						
+						var text = anchor.name;
+						if (type.anchorTextTemplate) {
+							text = config.formatText(type.anchorTextTemplate, anchor);
+						}
+						anchor.text = text;
+					}
+					callback(anchors);
+				}
+				
+				if (type.anchorsProvider && type.anchorsProvider !== 'default') {
+					type.anchorsProvider(postProcessAnchors, anchors, type, editor);
+				} else {
+					postProcessAnchors(anchors);
+				}
+			};
+			
+			config.formatText = function(template, anchor) {
+				var text = template;
+				
+				for (var propName in anchor) {
+					var propValue = anchor[propName];
+					var regexp = new RegExp('\\$\\{' + propName + '\\}', 'g');
+					if (propValue)
+						text = text.replace(regexp, propValue);
+					else
+						text = text.replace(regexp, '');
+				}
+				
+				if (anchor.level != null) {
+					var shift = '';
+					for (var i = 0; i < anchor.level; i++)
+						shift += '&nbsp;&nbsp;';
+					
+					text = text.replace(/\$\{levelShift\}/g, shift);
+				}
+				
+				text = text.replace(/\s+/g, ' ');
+				text = text.trim();
+				
+				return text;
+			}
+			
+			return config;
+		}
+	}
+});
diff --git a/plugins/ckeditor4/cssanim/css/cssanim.css b/plugins/ckeditor4/cssanim/css/cssanim.css
new file mode 100644
index 0000000..32506a8
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/css/cssanim.css
@@ -0,0 +1,2938 @@
+@CHARSET "ISO-8859-1";
+/* .highlight_tag { */
+/* 	background-color:rgb(255, 255, 224) !important; */
+/* 	border:2px solid red; */
+/* 	padding:2px; */
+/* } */
+/* .addAnim_tag { */
+/* 	display: none; */
+/* } */
+/* @charset "UTF-8"; */
+
+/*!
+Animate.css - http://daneden.me/animate
+Licensed under the MIT license - http://opensource.org/licenses/MIT
+
+Copyright (c) 2015 Daniel Eden
+*/
+
+.cssAnimButton {
+display: initial;
+border: 1px solid black;
+padding: 2px;
+background-color: lightblue;
+border-radius: 3px;
+font-weight: bold;
+}
+
+@-webkit-keyframes bounce {
+  from, 20%, 53%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    -webkit-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+  }
+
+  40%, 43% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -30px, 0);
+    transform: translate3d(0, -30px, 0);
+  }
+
+  70% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -15px, 0);
+    transform: translate3d(0, -15px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0,-4px,0);
+    transform: translate3d(0,-4px,0);
+  }
+}
+
+@keyframes bounce {
+  from, 20%, 53%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    -webkit-transform: translate3d(0,0,0);
+    transform: translate3d(0,0,0);
+  }
+
+  40%, 43% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -30px, 0);
+    transform: translate3d(0, -30px, 0);
+  }
+
+  70% {
+    -webkit-animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    animation-timing-function: cubic-bezier(0.755, 0.050, 0.855, 0.060);
+    -webkit-transform: translate3d(0, -15px, 0);
+    transform: translate3d(0, -15px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0,-4px,0);
+    transform: translate3d(0,-4px,0);
+  }
+}
+
+@-webkit-keyframes flash {
+  from, 50%, to {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+@keyframes flash {
+  from, 50%, to {
+    opacity: 1;
+  }
+
+  25%, 75% {
+    opacity: 0;
+  }
+}
+
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes pulse {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.05, 1.05, 1.05);
+    transform: scale3d(1.05, 1.05, 1.05);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes pulse {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.05, 1.05, 1.05);
+    transform: scale3d(1.05, 1.05, 1.05);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+
+@-webkit-keyframes rubberBand {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  30% {
+    -webkit-transform: scale3d(1.25, 0.75, 1);
+    transform: scale3d(1.25, 0.75, 1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(0.75, 1.25, 1);
+    transform: scale3d(0.75, 1.25, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.15, 0.85, 1);
+    transform: scale3d(1.15, 0.85, 1);
+  }
+
+  65% {
+    -webkit-transform: scale3d(.95, 1.05, 1);
+    transform: scale3d(.95, 1.05, 1);
+  }
+
+  75% {
+    -webkit-transform: scale3d(1.05, .95, 1);
+    transform: scale3d(1.05, .95, 1);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes rubberBand {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  30% {
+    -webkit-transform: scale3d(1.25, 0.75, 1);
+    transform: scale3d(1.25, 0.75, 1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(0.75, 1.25, 1);
+    transform: scale3d(0.75, 1.25, 1);
+  }
+
+  50% {
+    -webkit-transform: scale3d(1.15, 0.85, 1);
+    transform: scale3d(1.15, 0.85, 1);
+  }
+
+  65% {
+    -webkit-transform: scale3d(.95, 1.05, 1);
+    transform: scale3d(.95, 1.05, 1);
+  }
+
+  75% {
+    -webkit-transform: scale3d(1.05, .95, 1);
+    transform: scale3d(1.05, .95, 1);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+
+@-webkit-keyframes shake {
+  from, to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+@keyframes shake {
+  from, to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  10%, 30%, 50%, 70%, 90% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  20%, 40%, 60%, 80% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes swing {
+  20% {
+    -webkit-transform: rotate3d(0, 0, 1, 15deg);
+    transform: rotate3d(0, 0, 1, 15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate3d(0, 0, 1, -10deg);
+    transform: rotate3d(0, 0, 1, -10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate3d(0, 0, 1, 5deg);
+    transform: rotate3d(0, 0, 1, 5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate3d(0, 0, 1, -5deg);
+    transform: rotate3d(0, 0, 1, -5deg);
+  }
+
+  to {
+    -webkit-transform: rotate3d(0, 0, 1, 0deg);
+    transform: rotate3d(0, 0, 1, 0deg);
+  }
+}
+
+@keyframes swing {
+  20% {
+    -webkit-transform: rotate3d(0, 0, 1, 15deg);
+    transform: rotate3d(0, 0, 1, 15deg);
+  }
+
+  40% {
+    -webkit-transform: rotate3d(0, 0, 1, -10deg);
+    transform: rotate3d(0, 0, 1, -10deg);
+  }
+
+  60% {
+    -webkit-transform: rotate3d(0, 0, 1, 5deg);
+    transform: rotate3d(0, 0, 1, 5deg);
+  }
+
+  80% {
+    -webkit-transform: rotate3d(0, 0, 1, -5deg);
+    transform: rotate3d(0, 0, 1, -5deg);
+  }
+
+  to {
+    -webkit-transform: rotate3d(0, 0, 1, 0deg);
+    transform: rotate3d(0, 0, 1, 0deg);
+  }
+}
+
+@-webkit-keyframes tada {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes tada {
+  from {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+
+  10%, 20% {
+    -webkit-transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(.9, .9, .9) rotate3d(0, 0, 1, -3deg);
+  }
+
+  30%, 50%, 70%, 90% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, 3deg);
+  }
+
+  40%, 60%, 80% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+    transform: scale3d(1.1, 1.1, 1.1) rotate3d(0, 0, 1, -3deg);
+  }
+
+  to {
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes wobble {
+  from {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  15% {
+    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+  }
+
+  30% {
+    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+  }
+
+  45% {
+    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+  }
+
+  60% {
+    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes wobble {
+  from {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  15% {
+    -webkit-transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+    transform: translate3d(-25%, 0, 0) rotate3d(0, 0, 1, -5deg);
+  }
+
+  30% {
+    -webkit-transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+    transform: translate3d(20%, 0, 0) rotate3d(0, 0, 1, 3deg);
+  }
+
+  45% {
+    -webkit-transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+    transform: translate3d(-15%, 0, 0) rotate3d(0, 0, 1, -3deg);
+  }
+
+  60% {
+    -webkit-transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+    transform: translate3d(10%, 0, 0) rotate3d(0, 0, 1, 2deg);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+    transform: translate3d(-5%, 0, 0) rotate3d(0, 0, 1, -1deg);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes jello {
+  from, 11.1%, to {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  22.2% {
+    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+    transform: skewX(-12.5deg) skewY(-12.5deg);
+  }
+
+  33.3% {
+    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+    transform: skewX(6.25deg) skewY(6.25deg);
+  }
+
+  44.4% {
+    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+    transform: skewX(-3.125deg) skewY(-3.125deg);
+  }
+
+  55.5% {
+    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+    transform: skewX(1.5625deg) skewY(1.5625deg);
+  }
+
+  66.6% {
+    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+    transform: skewX(-0.78125deg) skewY(-0.78125deg);
+  }
+
+  77.7% {
+    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+    transform: skewX(0.390625deg) skewY(0.390625deg);
+  }
+
+  88.8% {
+    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+  }
+}
+
+@keyframes jello {
+  from, 11.1%, to {
+    -webkit-transform: none;
+    transform: none;
+  }
+
+  22.2% {
+    -webkit-transform: skewX(-12.5deg) skewY(-12.5deg);
+    transform: skewX(-12.5deg) skewY(-12.5deg);
+  }
+
+  33.3% {
+    -webkit-transform: skewX(6.25deg) skewY(6.25deg);
+    transform: skewX(6.25deg) skewY(6.25deg);
+  }
+
+  44.4% {
+    -webkit-transform: skewX(-3.125deg) skewY(-3.125deg);
+    transform: skewX(-3.125deg) skewY(-3.125deg);
+  }
+
+  55.5% {
+    -webkit-transform: skewX(1.5625deg) skewY(1.5625deg);
+    transform: skewX(1.5625deg) skewY(1.5625deg);
+  }
+
+  66.6% {
+    -webkit-transform: skewX(-0.78125deg) skewY(-0.78125deg);
+    transform: skewX(-0.78125deg) skewY(-0.78125deg);
+  }
+
+  77.7% {
+    -webkit-transform: skewX(0.390625deg) skewY(0.390625deg);
+    transform: skewX(0.390625deg) skewY(0.390625deg);
+  }
+
+  88.8% {
+    -webkit-transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+    transform: skewX(-0.1953125deg) skewY(-0.1953125deg);
+  }
+}
+
+@-webkit-keyframes bounceIn {
+  from, 20%, 40%, 60%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  20% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.03, 1.03, 1.03);
+    transform: scale3d(1.03, 1.03, 1.03);
+  }
+
+  80% {
+    -webkit-transform: scale3d(.97, .97, .97);
+    transform: scale3d(.97, .97, .97);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@keyframes bounceIn {
+  from, 20%, 40%, 60%, 80%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  20% {
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  40% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.03, 1.03, 1.03);
+    transform: scale3d(1.03, 1.03, 1.03);
+  }
+
+  80% {
+    -webkit-transform: scale3d(.97, .97, .97);
+    transform: scale3d(.97, .97, .97);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: scale3d(1, 1, 1);
+    transform: scale3d(1, 1, 1);
+  }
+}
+
+@-webkit-keyframes bounceInDown {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -3000px, 0);
+    transform: translate3d(0, -3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 25px, 0);
+    transform: translate3d(0, 25px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, 5px, 0);
+    transform: translate3d(0, 5px, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInDown {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -3000px, 0);
+    transform: translate3d(0, -3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 25px, 0);
+    transform: translate3d(0, 25px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, 5px, 0);
+    transform: translate3d(0, 5px, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes bounceInLeft {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(-3000px, 0, 0);
+    transform: translate3d(-3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(25px, 0, 0);
+    transform: translate3d(25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(5px, 0, 0);
+    transform: translate3d(5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInLeft {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  0% {
+    opacity: 0;
+    -webkit-transform: translate3d(-3000px, 0, 0);
+    transform: translate3d(-3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(25px, 0, 0);
+    transform: translate3d(25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(-10px, 0, 0);
+    transform: translate3d(-10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(5px, 0, 0);
+    transform: translate3d(5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes bounceInRight {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(3000px, 0, 0);
+    transform: translate3d(3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(-25px, 0, 0);
+    transform: translate3d(-25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(-5px, 0, 0);
+    transform: translate3d(-5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes bounceInRight {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(3000px, 0, 0);
+    transform: translate3d(3000px, 0, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(-25px, 0, 0);
+    transform: translate3d(-25px, 0, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(10px, 0, 0);
+    transform: translate3d(10px, 0, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(-5px, 0, 0);
+    transform: translate3d(-5px, 0, 0);
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes bounceInUp {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 3000px, 0);
+    transform: translate3d(0, 3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, -5px, 0);
+    transform: translate3d(0, -5px, 0);
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes bounceInUp {
+  from, 60%, 75%, 90%, to {
+    -webkit-animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+    animation-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);
+  }
+
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 3000px, 0);
+    transform: translate3d(0, 3000px, 0);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  75% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  90% {
+    -webkit-transform: translate3d(0, -5px, 0);
+    transform: translate3d(0, -5px, 0);
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes bounceOut {
+  20% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  50%, 55% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+}
+
+@keyframes bounceOut {
+  20% {
+    -webkit-transform: scale3d(.9, .9, .9);
+    transform: scale3d(.9, .9, .9);
+  }
+
+  50%, 55% {
+    opacity: 1;
+    -webkit-transform: scale3d(1.1, 1.1, 1.1);
+    transform: scale3d(1.1, 1.1, 1.1);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+}
+
+@-webkit-keyframes bounceOutDown {
+  20% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@keyframes bounceOutDown {
+  20% {
+    -webkit-transform: translate3d(0, 10px, 0);
+    transform: translate3d(0, 10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, -20px, 0);
+    transform: translate3d(0, -20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@-webkit-keyframes bounceOutLeft {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(20px, 0, 0);
+    transform: translate3d(20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+@keyframes bounceOutLeft {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(20px, 0, 0);
+    transform: translate3d(20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+@-webkit-keyframes bounceOutRight {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(-20px, 0, 0);
+    transform: translate3d(-20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+@keyframes bounceOutRight {
+  20% {
+    opacity: 1;
+    -webkit-transform: translate3d(-20px, 0, 0);
+    transform: translate3d(-20px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+@-webkit-keyframes bounceOutUp {
+  20% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 20px, 0);
+    transform: translate3d(0, 20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+@keyframes bounceOutUp {
+  20% {
+    -webkit-transform: translate3d(0, -10px, 0);
+    transform: translate3d(0, -10px, 0);
+  }
+
+  40%, 45% {
+    opacity: 1;
+    -webkit-transform: translate3d(0, 20px, 0);
+    transform: translate3d(0, 20px, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+@-webkit-keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+
+  to {
+    opacity: 1;
+  }
+}
+
+@keyframes fadeIn {
+  from {
+    opacity: 0;
+  }
+
+  to {
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeInDownBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInDownBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeInLeftBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInLeftBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeInRightBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInRightBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeInUpBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes fadeInUpBig {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+@keyframes fadeOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+@-webkit-keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@keyframes fadeOutDown {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@-webkit-keyframes fadeOutDownBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@keyframes fadeOutDownBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, 2000px, 0);
+    transform: translate3d(0, 2000px, 0);
+  }
+}
+
+@-webkit-keyframes fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+@keyframes fadeOutLeft {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+@-webkit-keyframes fadeOutLeftBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+@keyframes fadeOutLeftBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(-2000px, 0, 0);
+    transform: translate3d(-2000px, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes fadeOutRight {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+@keyframes fadeOutRight {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes fadeOutRightBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+@keyframes fadeOutRightBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(2000px, 0, 0);
+    transform: translate3d(2000px, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+@keyframes fadeOutUp {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+
+@-webkit-keyframes fadeOutUpBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+@keyframes fadeOutUpBig {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(0, -2000px, 0);
+    transform: translate3d(0, -2000px, 0);
+  }
+}
+
+
+@-webkit-keyframes flip {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+    transform: perspective(400px) scale3d(.95, .95, .95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+@keyframes flip {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -360deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -190deg);
+    -webkit-animation-timing-function: ease-out;
+    animation-timing-function: ease-out;
+  }
+
+  50% {
+    -webkit-transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    transform: perspective(400px) translate3d(0, 0, 150px) rotate3d(0, 1, 0, -170deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) scale3d(.95, .95, .95);
+    transform: perspective(400px) scale3d(.95, .95, .95);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+}
+
+@-webkit-keyframes flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@keyframes flipInX {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@-webkit-keyframes flipInY {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@keyframes flipInY {
+  from {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+    opacity: 0;
+  }
+
+  40% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -20deg);
+    -webkit-animation-timing-function: ease-in;
+    animation-timing-function: ease-in;
+  }
+
+  60% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 10deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -5deg);
+  }
+
+  to {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+}
+
+@-webkit-keyframes flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutX {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@-webkit-keyframes flipOutY {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes flipOutY {
+  from {
+    -webkit-transform: perspective(400px);
+    transform: perspective(400px);
+  }
+
+  30% {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, -15deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    transform: perspective(400px) rotate3d(0, 1, 0, 90deg);
+    opacity: 0;
+  }
+}
+
+@-webkit-keyframes lightSpeedIn {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+    transform: translate3d(100%, 0, 0) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: skewX(20deg);
+    transform: skewX(20deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: skewX(-5deg);
+    transform: skewX(-5deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes lightSpeedIn {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(-30deg);
+    transform: translate3d(100%, 0, 0) skewX(-30deg);
+    opacity: 0;
+  }
+
+  60% {
+    -webkit-transform: skewX(20deg);
+    transform: skewX(20deg);
+    opacity: 1;
+  }
+
+  80% {
+    -webkit-transform: skewX(-5deg);
+    transform: skewX(-5deg);
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@-webkit-keyframes lightSpeedOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+    transform: translate3d(100%, 0, 0) skewX(30deg);
+    opacity: 0;
+  }
+}
+
+@keyframes lightSpeedOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(100%, 0, 0) skewX(30deg);
+    transform: translate3d(100%, 0, 0) skewX(30deg);
+    opacity: 0;
+  }
+}
+
+@-webkit-keyframes rotate {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 360deg);
+    transform: rotate3d(0, 0, 1, 360deg);
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+@keyframes rotate {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 360deg);
+    transform: rotate3d(0, 0, 1, 360deg);
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@-webkit-keyframes rotateIn {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, -200deg);
+    transform: rotate3d(0, 0, 1, -200deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateIn {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, -200deg);
+    transform: rotate3d(0, 0, 1, -200deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+
+@-webkit-keyframes rotateInDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+
+@-webkit-keyframes rotateInDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+
+@-webkit-keyframes rotateInUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+
+@-webkit-keyframes rotateInUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -90deg);
+    transform: rotate3d(0, 0, 1, -90deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+@keyframes rotateInUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -90deg);
+    transform: rotate3d(0, 0, 1, -90deg);
+    opacity: 0;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: none;
+    transform: none;
+    opacity: 1;
+  }
+}
+
+
+@-webkit-keyframes rotateOut {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 200deg);
+    transform: rotate3d(0, 0, 1, 200deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOut {
+  from {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: center;
+    transform-origin: center;
+    -webkit-transform: rotate3d(0, 0, 1, 200deg);
+    transform: rotate3d(0, 0, 1, 200deg);
+    opacity: 0;
+  }
+}
+
+
+@-webkit-keyframes rotateOutDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 45deg);
+    transform: rotate3d(0, 0, 1, 45deg);
+    opacity: 0;
+  }
+}
+
+
+@-webkit-keyframes rotateOutDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutDownRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+
+@-webkit-keyframes rotateOutUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpLeft {
+  from {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: left bottom;
+    transform-origin: left bottom;
+    -webkit-transform: rotate3d(0, 0, 1, -45deg);
+    transform: rotate3d(0, 0, 1, -45deg);
+    opacity: 0;
+  }
+}
+
+
+@-webkit-keyframes rotateOutUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 90deg);
+    transform: rotate3d(0, 0, 1, 90deg);
+    opacity: 0;
+  }
+}
+
+@keyframes rotateOutUpRight {
+  from {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform-origin: right bottom;
+    transform-origin: right bottom;
+    -webkit-transform: rotate3d(0, 0, 1, 90deg);
+    transform: rotate3d(0, 0, 1, 90deg);
+    opacity: 0;
+  }
+}
+
+
+@-webkit-keyframes hinge {
+  0% {
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate3d(0, 0, 1, 80deg);
+    transform: rotate3d(0, 0, 1, 80deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40%, 80% {
+    -webkit-transform: rotate3d(0, 0, 1, 60deg);
+    transform: rotate3d(0, 0, 1, 60deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 700px, 0);
+    transform: translate3d(0, 700px, 0);
+    opacity: 0;
+  }
+}
+
+@keyframes hinge {
+  0% {
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  20%, 60% {
+    -webkit-transform: rotate3d(0, 0, 1, 80deg);
+    transform: rotate3d(0, 0, 1, 80deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+  }
+
+  40%, 80% {
+    -webkit-transform: rotate3d(0, 0, 1, 60deg);
+    transform: rotate3d(0, 0, 1, 60deg);
+    -webkit-transform-origin: top left;
+    transform-origin: top left;
+    -webkit-animation-timing-function: ease-in-out;
+    animation-timing-function: ease-in-out;
+    opacity: 1;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 700px, 0);
+    transform: translate3d(0, 700px, 0);
+    opacity: 0;
+  }
+}
+
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollIn {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+@keyframes rollIn {
+  from {
+    opacity: 0;
+    -webkit-transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+    transform: translate3d(-100%, 0, 0) rotate3d(0, 0, 1, -120deg);
+  }
+
+  to {
+    opacity: 1;
+    -webkit-transform: none;
+    transform: none;
+  }
+}
+
+
+/* originally authored by Nick Pettit - https://github.com/nickpettit/glide */
+
+@-webkit-keyframes rollOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+  }
+}
+
+@keyframes rollOut {
+  from {
+    opacity: 1;
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+    transform: translate3d(100%, 0, 0) rotate3d(0, 0, 1, 120deg);
+  }
+}
+
+
+@-webkit-keyframes zoomIn {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  50% {
+    opacity: 1;
+  }
+}
+
+@keyframes zoomIn {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  50% {
+    opacity: 1;
+  }
+}
+
+
+@-webkit-keyframes zoomInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInDown {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+
+@-webkit-keyframes zoomInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInLeft {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(-1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+
+@-webkit-keyframes zoomInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInRight {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    transform: scale3d(.1, .1, .1) translate3d(1000px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-10px, 0, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+
+@-webkit-keyframes zoomInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomInUp {
+  from {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 1000px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  60% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+
+@-webkit-keyframes zoomOut {
+  from {
+    opacity: 1;
+  }
+
+  50% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+@keyframes zoomOut {
+  from {
+    opacity: 1;
+  }
+
+  50% {
+    opacity: 0;
+    -webkit-transform: scale3d(.3, .3, .3);
+    transform: scale3d(.3, .3, .3);
+  }
+
+  to {
+    opacity: 0;
+  }
+}
+
+
+@-webkit-keyframes zoomOutDown {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomOutDown {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, -60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, 2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+
+@-webkit-keyframes zoomOutLeft {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+    transform: scale(.1) translate3d(-2000px, 0, 0);
+    -webkit-transform-origin: left center;
+    transform-origin: left center;
+  }
+}
+
+@keyframes zoomOutLeft {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(-2000px, 0, 0);
+    transform: scale(.1) translate3d(-2000px, 0, 0);
+    -webkit-transform-origin: left center;
+    transform-origin: left center;
+  }
+}
+
+
+@-webkit-keyframes zoomOutRight {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+    transform: scale(.1) translate3d(2000px, 0, 0);
+    -webkit-transform-origin: right center;
+    transform-origin: right center;
+  }
+}
+
+@keyframes zoomOutRight {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+    transform: scale3d(.475, .475, .475) translate3d(-42px, 0, 0);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale(.1) translate3d(2000px, 0, 0);
+    transform: scale(.1) translate3d(2000px, 0, 0);
+    -webkit-transform-origin: right center;
+    transform-origin: right center;
+  }
+}
+
+
+@-webkit-keyframes zoomOutUp {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+@keyframes zoomOutUp {
+  40% {
+    opacity: 1;
+    -webkit-transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    transform: scale3d(.475, .475, .475) translate3d(0, 60px, 0);
+    -webkit-animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+    animation-timing-function: cubic-bezier(0.550, 0.055, 0.675, 0.190);
+  }
+
+  to {
+    opacity: 0;
+    -webkit-transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    transform: scale3d(.1, .1, .1) translate3d(0, -2000px, 0);
+    -webkit-transform-origin: center bottom;
+    transform-origin: center bottom;
+    -webkit-animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+    animation-timing-function: cubic-bezier(0.175, 0.885, 0.320, 1);
+  }
+}
+
+
+@-webkit-keyframes slideInDown {
+  from {
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInDown {
+  from {
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes slideInLeft {
+  from {
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInLeft {
+  from {
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes slideInRight {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInRight {
+  from {
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes slideInUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+@keyframes slideInUp {
+  from {
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+    visibility: visible;
+  }
+
+  to {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes slideOutDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+@keyframes slideOutDown {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, 100%, 0);
+    transform: translate3d(0, 100%, 0);
+  }
+}
+
+
+@-webkit-keyframes slideOutLeft {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+@keyframes slideOutLeft {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(-100%, 0, 0);
+    transform: translate3d(-100%, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes slideOutRight {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+@keyframes slideOutRight {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(100%, 0, 0);
+    transform: translate3d(100%, 0, 0);
+  }
+}
+
+
+@-webkit-keyframes slideOutUp {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
+
+@keyframes slideOutUp {
+  from {
+    -webkit-transform: translate3d(0, 0, 0);
+    transform: translate3d(0, 0, 0);
+  }
+
+  to {
+    visibility: hidden;
+    -webkit-transform: translate3d(0, -100%, 0);
+    transform: translate3d(0, -100%, 0);
+  }
+}
diff --git a/plugins/ckeditor4/cssanim/css/prefixfree.min.js b/plugins/ckeditor4/cssanim/css/prefixfree.min.js
new file mode 100644
index 0000000..5e88f56
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/css/prefixfree.min.js
@@ -0,0 +1,18 @@
+/**
+ * StyleFix 1.0.3 & PrefixFree 1.0.7
+ * @author Lea Verou
+ * MIT license
+ */
+(function(){function k(a,b){return[].slice.call((b||document).querySelectorAll(a))}if(window.addEventListener){var e=window.StyleFix={link:function(a){try{if("stylesheet"!==a.rel||a.hasAttribute("data-noprefix"))return}catch(b){return}var c=a.href||a.getAttribute("data-href"),d=c.replace(/[^\/]+$/,""),h=(/^[a-z]{3,10}:/.exec(d)||[""])[0],l=(/^[a-z]{3,10}:\/\/[^\/]+/.exec(d)||[""])[0],g=/^([^?]*)\??/.exec(c)[1],m=a.parentNode,f=new XMLHttpRequest,n;f.onreadystatechange=function(){4===f.readyState&&
+n()};n=function(){var b=f.responseText;if(b&&a.parentNode&&(!f.status||400>f.status||600<f.status)){b=e.fix(b,!0,a);if(d)var b=b.replace(/url\(\s*?((?:"|')?)(.+?)\1\s*?\)/gi,function(b,a,c){return/^([a-z]{3,10}:|#)/i.test(c)?b:/^\/\//.test(c)?'url("'+h+c+'")':/^\//.test(c)?'url("'+l+c+'")':/^\?/.test(c)?'url("'+g+c+'")':'url("'+d+c+'")'}),c=d.replace(/([\\\^\$*+[\]?{}.=!:(|)])/g,"\\$1"),b=b.replace(RegExp("\\b(behavior:\\s*?url\\('?\"?)"+c,"gi"),"$1");c=document.createElement("style");c.textContent=
+b;c.media=a.media;c.disabled=a.disabled;c.setAttribute("data-href",a.getAttribute("href"));m.insertBefore(c,a);m.removeChild(a);c.media=a.media}};try{f.open("GET",c),f.send(null)}catch(p){"undefined"!=typeof XDomainRequest&&(f=new XDomainRequest,f.onerror=f.onprogress=function(){},f.onload=n,f.open("GET",c),f.send(null))}a.setAttribute("data-inprogress","")},styleElement:function(a){if(!a.hasAttribute("data-noprefix")){var b=a.disabled;a.textContent=e.fix(a.textContent,!0,a);a.disabled=b}},styleAttribute:function(a){var b=
+a.getAttribute("style"),b=e.fix(b,!1,a);a.setAttribute("style",b)},process:function(){k('link[rel="stylesheet"]:not([data-inprogress])').forEach(StyleFix.link);k("style").forEach(StyleFix.styleElement);k("[style]").forEach(StyleFix.styleAttribute)},register:function(a,b){(e.fixers=e.fixers||[]).splice(void 0===b?e.fixers.length:b,0,a)},fix:function(a,b,c){for(var d=0;d<e.fixers.length;d++)a=e.fixers[d](a,b,c)||a;return a},camelCase:function(a){return a.replace(/-([a-z])/g,function(b,a){return a.toUpperCase()}).replace("-",
+"")},deCamelCase:function(a){return a.replace(/[A-Z]/g,function(b){return"-"+b.toLowerCase()})}};(function(){setTimeout(function(){k('link[rel="stylesheet"]').forEach(StyleFix.link)},10);document.addEventListener("DOMContentLoaded",StyleFix.process,!1)})()}})();
+(function(k){function e(b,c,d,h,l){b=a[b];b.length&&(b=RegExp(c+"("+b.join("|")+")"+d,"gi"),l=l.replace(b,h));return l}if(window.StyleFix&&window.getComputedStyle){var a=window.PrefixFree={prefixCSS:function(b,c,d){var h=a.prefix;-1<a.functions.indexOf("linear-gradient")&&(b=b.replace(/(\s|:|,)(repeating-)?linear-gradient\(\s*(-?\d*\.?\d*)deg/ig,function(b,a,c,d){return a+(c||"")+"linear-gradient("+(90-d)+"deg"}));b=e("functions","(\\s|:|,)","\\s*\\(","$1"+h+"$2(",b);b=e("keywords","(\\s|:)","(\\s|;|\\}|$)",
+"$1"+h+"$2$3",b);b=e("properties","(^|\\{|\\s|;)","\\s*:","$1"+h+"$2:",b);if(a.properties.length){var l=RegExp("\\b("+a.properties.join("|")+")(?!:)","gi");b=e("valueProperties","\\b",":(.+?);",function(a){return a.replace(l,h+"$1")},b)}c&&(b=e("selectors","","\\b",a.prefixSelector,b),b=e("atrules","@","\\b","@"+h+"$1",b));b=b.replace(RegExp("-"+h,"g"),"-");return b=b.replace(/-\*-(?=[a-z]+)/gi,a.prefix)},property:function(b){return(0<=a.properties.indexOf(b)?a.prefix:"")+b},value:function(b,c){b=
+e("functions","(^|\\s|,)","\\s*\\(","$1"+a.prefix+"$2(",b);b=e("keywords","(^|\\s)","(\\s|$)","$1"+a.prefix+"$2$3",b);0<=a.valueProperties.indexOf(c)&&(b=e("properties","(^|\\s|,)","($|\\s|,)","$1"+a.prefix+"$2$3",b));return b},prefixSelector:function(b){return b.replace(/^:{1,2}/,function(b){return b+a.prefix})},prefixProperty:function(b,c){var d=a.prefix+b;return c?StyleFix.camelCase(d):d}};(function(){var b={},c=[],d=getComputedStyle(document.documentElement,null),h=document.createElement("div").style,
+l=function(a){if("-"===a.charAt(0)){c.push(a);a=a.split("-");var d=a[1];for(b[d]=++b[d]||1;3<a.length;)a.pop(),d=a.join("-"),StyleFix.camelCase(d)in h&&-1===c.indexOf(d)&&c.push(d)}};if(0<d.length)for(var g=0;g<d.length;g++)l(d[g]);else for(var e in d)l(StyleFix.deCamelCase(e));var g=0,f,k;for(k in b)d=b[k],g<d&&(f=k,g=d);a.prefix="-"+f+"-";a.Prefix=StyleFix.camelCase(a.prefix);a.properties=[];for(g=0;g<c.length;g++)e=c[g],0===e.indexOf(a.prefix)&&(f=e.slice(a.prefix.length),StyleFix.camelCase(f)in
+h||a.properties.push(f));!("Ms"!=a.Prefix||"transform"in h||"MsTransform"in h)&&"msTransform"in h&&a.properties.push("transform","transform-origin");a.properties.sort()})();(function(){function b(a,b){h[b]="";h[b]=a;return!!h[b]}var c={"linear-gradient":{property:"backgroundImage",params:"red, teal"},calc:{property:"width",params:"1px + 5%"},element:{property:"backgroundImage",params:"#foo"},"cross-fade":{property:"backgroundImage",params:"url(a.png), url(b.png), 50%"}};c["repeating-linear-gradient"]=
+c["repeating-radial-gradient"]=c["radial-gradient"]=c["linear-gradient"];var d={initial:"color","zoom-in":"cursor","zoom-out":"cursor",box:"display",flexbox:"display","inline-flexbox":"display",flex:"display","inline-flex":"display",grid:"display","inline-grid":"display","max-content":"width","min-content":"width","fit-content":"width","fill-available":"width"};a.functions=[];a.keywords=[];var h=document.createElement("div").style,e;for(e in c){var g=c[e],k=g.property,g=e+"("+g.params+")";!b(g,k)&&
+b(a.prefix+g,k)&&a.functions.push(e)}for(var f in d)k=d[f],!b(f,k)&&b(a.prefix+f,k)&&a.keywords.push(f)})();(function(){function b(a){e.textContent=a+"{}";return!!e.sheet.cssRules.length}var c={":read-only":null,":read-write":null,":any-link":null,"::selection":null},d={keyframes:"name",viewport:null,document:'regexp(".")'};a.selectors=[];a.atrules=[];var e=k.appendChild(document.createElement("style")),l;for(l in c){var g=l+(c[l]?"("+c[l]+")":"");!b(g)&&b(a.prefixSelector(g))&&a.selectors.push(l)}for(var m in d)g=
+m+" "+(d[m]||""),!b("@"+g)&&b("@"+a.prefix+g)&&a.atrules.push(m);k.removeChild(e)})();a.valueProperties=["transition","transition-property"];k.className+=" "+a.prefix;StyleFix.register(a.prefixCSS)}})(document.documentElement);
diff --git a/plugins/ckeditor4/cssanim/dialogs/css3animation.png b/plugins/ckeditor4/cssanim/dialogs/css3animation.png
new file mode 100644
index 0000000000000000000000000000000000000000..075d0a519b72be316b87fced6f5fd06631c51ad1
GIT binary patch
literal 6029
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
Hu0mjf)4_z#

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/cssanim/dialogs/cssaddanim.js b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.js
new file mode 100644
index 0000000..2741ade
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.js
@@ -0,0 +1,472 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+"use strict";
+var selectList_cache;
+function iterationChange(obj) {
+    var myDoc = obj.ownerDocument;
+    var mySpan = myDoc.getElementById('rmAfterLoadSpan');
+    var myInput = myDoc.getElementById('rmAfterLoadInput');
+    if (obj.value === "0") {
+        mySpan.style.color = "lightgrey";
+        myInput.disabled = true;
+    } else {
+        mySpan.style.color = "black";
+        myInput.disabled = false;
+    }
+}
+function animSelectionChange(obj) {
+	//console.log('animSelectionChange', obj);
+	var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim;
+	var myTr = obj.parentElement.parentElement;
+	var myBtn = myTr.parentNode.parentNode.parentNode.getElementsByClassName('cssAnimButton');
+    var myDoc = obj.ownerDocument;
+    var mySpan = myDoc.getElementById('rmAfterLoadSpan');
+    var myInput = myDoc.getElementById('rmAfterLoadInput');
+    var anim_l_obj = myDoc.getElementsByName('anim_L').item(0);
+    var anim_c_obj = myDoc.getElementsByName('anim_C').item(0);
+    var anim_o_obj = myDoc.getElementsByName('anim_O').item(0);
+    //console.log(anim_l_obj, anim_c_obj, anim_o_obj, selectList_cache);
+	var i;
+	if ((obj.name === "anim_L") && (anim_l_obj.value === "none")) {
+		if (anim_c_obj.value === "cssAnimPause") {
+			alert(lang.pbOnClickPause);
+			anim_l_obj.selectedIndex = selectList_cache;
+			return;
+		}
+		if (anim_o_obj.value === "cssAnimPause") {
+			alert(lang.pbOnOverPause);
+			anim_l_obj.selectedIndex = selectList_cache;
+			return;
+		}
+	}
+	if (obj.name === "anim_C") {
+		if ((anim_l_obj.value === "none") && (anim_c_obj.value === "cssAnimPause")) {
+			alert(lang.pbOnClickOnLoadNone);
+			anim_c_obj.selectedIndex = selectList_cache;
+			return;
+		}
+	}
+	if (obj.name === "anim_O") {
+		if ((anim_l_obj.value === "none") && (anim_o_obj.value === "cssAnimPause")) {
+			alert(lang.pbOnOverOnLoadNone);
+			anim_o_obj.selectedIndex = selectList_cache;
+			return;
+		}
+	}
+	if ((obj.value === 'cssAnimPause') || (obj.value === 'none')) {
+		for (i=1; i<myTr.childElementCount; i+=1) {
+			myTr.childNodes[i].style.opacity = 0;
+		}
+		myBtn[0].style.display = 'none';
+		if (obj.name === "anim_L") {
+	        mySpan.style.color = "lightgrey";
+	        myInput.disabled = true;
+		}
+	} else {
+		for (i=1; i<myTr.childElementCount; i+=1) {
+			myTr.childNodes[i].style.opacity = 'initial';
+		}
+		myBtn[0].style.display = 'initial';
+		if (obj.name === "anim_L") {
+			mySpan.style.color = "black";
+			myInput.disabled = false;
+		}
+	}
+}
+
+CKEDITOR.dialog.add('cssanimAddAnimDialog', function (editor) {
+    var lang = editor.lang.cssanim;
+    var imagePath = CKEDITOR.getUrl(CKEDITOR.plugins.get('cssanim').path + 'dialogs/css3animation.png');
+    var attachedElem = null;
+    var pendingChangesObj;
+
+    function getAnimsHtml(allowedAnims, suffix, animation) {
+//        var lang = editor.lang.cssanim;
+        var allowedAnimsStr = "";
+        var selected;
+        var i;
+        allowedAnimsStr += "<select  onclick=\"selectList_cache=this.selectedIndex\" onChange=\"animSelectionChange(this);\" name=\"anim" + suffix + "\">";
+        selected = "";
+        if (animation === "none") {
+        	selected = "selected";
+        }
+        allowedAnimsStr += '<option value="none" '+selected+'>'+lang.none+'<\/option>';
+        if (suffix !== '_L') {
+	        // add specific "pause" animation
+	        selected = "";
+	        if (animation === "cssAnimPause") {
+	        	selected = "selected";
+	        }
+        allowedAnimsStr += '<option value="cssAnimPause" '+selected+'>'+lang.cssAnimPause+'<\/option>';
+        }
+        var key, tabAnims;
+        for (key in allowedAnims) {
+            tabAnims = allowedAnims[key];
+            allowedAnimsStr += "<optgroup label=\"" + key + "\" style=\"font-weight:bold\">";
+            for (i = 0; i < tabAnims.length; i += 1) {
+                selected = "";
+                if (tabAnims[i] === animation) {
+                    selected = "selected";
+                }
+                allowedAnimsStr += '<option value="' + tabAnims[i] + '" ' + selected + '>' + tabAnims[i] + '<\/option>';
+            }
+            allowedAnimsStr += "  <\/optgroup>";
+        }
+        allowedAnimsStr += "<\/select>";
+        return allowedAnimsStr;
+    }
+
+    function getTableHtml(allowedAnimations, suffix, ral, initVal) {
+//        var lang = editor.lang.cssanim;
+        var tabStr = "";
+        var checked = 'checked = "checked"';
+        var delay = 0;
+        var direction = "normal";
+        var duration = 1;
+        var iterationCount = 1;
+        var animation = "none";
+        var timingFunction = "linear";
+        var ind;
+        var timingValues = ["linear", "ease", "ease-in", "ease-out", "ease-in-out"];
+        var dirValues = ["normal", "alternate"];
+        var animObj = null;
+        var exp;
+        var selected = "";
+        var tdSpanColor = "black";
+//        var tabH = "";
+//        if (suffix === '_O') {
+//        	tabH = "75px;";
+//        } else if (suffix === '_C') {
+//        	tabH = "75px;";
+//        } else {
+//        	tabH = "75px;";
+//        }
+        if (initVal) {
+        	if (initVal.indexOf('animation-play-state') >= 0) {
+        		animObj = {
+        	            name: 'cssAnimPause',
+        	            duration: null,
+        	            timingFunction: 'linear',
+        	            delay: 0,
+        	            iterationCount: 1,
+        	            direction: 'normal'
+        	        };
+        	} else {
+	            exp = initVal.replace('{animation:', '').replace('}', '').replace(';', '').trim();
+	            animObj = parseCSS3AnimationShorthand(exp);
+        	}
+            //console.log("initVal animObj ------------->", exp, animObj);
+            delay = animObj.delay / 1000;
+            direction = animObj.direction;
+            duration = animObj.duration / 1000;
+            iterationCount = animObj.iterationCount;
+            if (iterationCount === "infinite") {
+                iterationCount = 0;
+                ral = false;
+            }
+            animation = animObj.name;
+            timingFunction = animObj.timingFunction;
+        }
+        // 75px to be changed depending on button and other !!!!
+        tabStr += '<table style="display:block; overflow-y=scroll;  overflow-y: auto; width:550px;">';
+        tabStr += '<tr>';
+        tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">';
+        tabStr += lang.name;
+        tabStr += '</th>';
+        tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">';
+        tabStr += lang.duration;
+        tabStr += '</th>';
+        tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">';
+        tabStr += lang.tFunc;
+        tabStr += '</th>';
+        tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">';
+        tabStr += lang.delay;
+        tabStr += '</th>';
+        tabStr += '<th title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:70px;">';
+        tabStr += lang.iter;
+        tabStr += '</th>';
+        tabStr += '<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px;">';
+        tabStr += lang.direction;
+        tabStr += '</th>';
+        tabStr += '</tr>';
+        tabStr += '<tr>';
+        tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">';
+        tabStr += getAnimsHtml(allowedAnimations, suffix, animation);
+        tabStr += '</td>';
+        tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">';
+        tabStr += '<input name="duration' + suffix + '" type="number" min="1" max="600" value="' + duration + '" style="width:4em; border:1px solid gainsboro;">sec';
+        tabStr += '</td>';
+        tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">';
+        tabStr += "<select name=\"timing" + suffix + "\" style=\"border:1px solid gainsboro;\">";
+        for (ind = 0; ind < timingValues.length; ind += 1) {
+            selected = "";
+            if (timingValues[ind] === timingFunction) {
+                selected = "selected";
+            }
+            tabStr += '<option value="' + timingValues[ind] + '" ' + selected + '>' + timingValues[ind] + '<\/option>';
+        }
+        tabStr += "<\/select>";
+        tabStr += '</td>';
+        tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">';
+        tabStr += '<input name="delay' + suffix + '" type="number" min="0" max="600" value="' + delay + '" style="width:4em; border:1px solid gainsboro;">sec';
+        tabStr += '</td>';
+        tabStr += '<td title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;padding: 3px;border: 1px solid gainsboro;">';
+        tabStr += '<input name="iteration' + suffix + '" type="number" min="0" max="99" value="' + iterationCount + '" style="width:3em; border:1px solid gainsboro" onChange="iterationChange(this);">';
+        tabStr += '</td>';
+        tabStr += '<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">';
+        tabStr += "<select name=\"direction" + suffix + "\" style=\"border:1px solid gainsboro;\">";
+        for (ind = 0; ind < dirValues.length; ind += 1) {
+            selected = "";
+            if (dirValues[ind] === direction) {
+                selected = "selected";
+            }
+            tabStr += '<option value="' + dirValues[ind] + '" ' + selected + '>' + dirValues[ind] + '<\/option>';
+        }
+        tabStr += "<\/select>";
+        tabStr += '</td>';
+        tabStr += '</tr>';
+        tdSpanColor = "black";
+        if (ral !== null) {
+            if (ral === false) {
+                checked = "";
+            }
+            if (iterationCount === 0) {
+                checked = "disabled";
+                tdSpanColor = "lightgrey";
+            }
+            tabStr += '<tr>';
+            tabStr += '<td colspan="3" style="text-align: center;padding: 3px; border-left: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">';
+            tabStr += '<span id="rmAfterLoadSpan" style="color:' + tdSpanColor + '" title="'+lang.ralTitle+'">'+lang.ral+'</span>';
+            tabStr += '</td>';
+            tabStr += '<td colspan="3" style="text-align: left; padding: 3px;  border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">';
+            tabStr += '<input  id="rmAfterLoadInput" type="checkbox" name="rmAfterLoad"  ' + checked + '>';
+            tabStr += '</td>';
+            tabStr += '</tr>';
+        }
+        tabStr += '</table>';
+        return tabStr;
+    }
+
+    function getItemByName(elm, name) {
+    	var i;
+    	for (i=0;i<elm.$.length;i++) {
+    		if (elm.$[i].name == name) {
+    			return new CKEDITOR.dom.node(elm.$[i]);
+    	 	}
+    	 }
+ 		return null;
+    }
+
+    function getHtml(elem, allowedAnimations) {
+        var obj = null;
+        var jsonObj;
+//	OLD FAKE ELEMENTS CODE
+//        if (elem.dataset.ckeRealElementType !== undefined) {
+//            // //     if (false) {
+//            //    	  console.log("FAKE !! FAKE !! FAKE !! FAKE !! FAKE !! ");
+//            //	        var realElem = CKEDITOR.dom.element.createFromHtml(decodeURIComponent(
+//            //	            elem.dataset.ckeRealelement ), editor.document );
+//            //	      console.log("realElem", realElem);
+//            //	      obj = realElem.$.attributes['data-animation'];
+//        } else {
+//      if (elem.dataset.ckeRealElementType === undefined) {
+//           obj = elem.attributes['data-animation'];
+//        }
+      obj = elem.getAttribute('data-animation');
+        if (obj) {
+            //obj = obj.value;
+            jsonObj = decodeURIComponent(obj);
+            obj = JSON.parse(jsonObj);
+            //console.log("ON getHtml cssanimAddAnimDialog", obj);
+            if (CKEDITOR.plugins.cssanim.managePending) {
+                pendingChangesObj[pendingChangesObj.length] = [elem.getId(), jsonObj];
+            }
+        }
+        var tabStr = "";
+        var keyLoad = "OnLoad";
+        var keyOver = "OnOver";
+        var keyClick = "OnClick";
+        var initVal, ral;
+        tabStr += "<div class=\"tabs\" style=\"width:600px;\">";
+        tabStr += "<div class=\"tab\">";
+        tabStr += "<span style=\"font-weight:bold; font-size: larger;\">" + keyOver + "</span>";
+        tabStr += "<div id=\"cssanimAddAnimDialogTabOver\" class=\"content\" style=\"height:55px;\">";
+        initVal = (obj && obj.cdo) ? obj.cdo : null;
+        tabStr += getTableHtml(allowedAnimations, '_O', null, initVal);
+        tabStr += '<div style="text-align: center; padding: 2px;">';
+        tabStr += "<input type=\"button\" class=\"cssAnimButton\" value=\""+lang.testIt+" !\" name=\"overBtn\" onclick=\"CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);\">";
+        tabStr += "</div> ";
+        tabStr += "</div> ";
+        tabStr += "<div class=\"tab\">";
+        tabStr += "<span style=\"font-weight:bold;font-size: larger;\">" + keyClick + "</span>";
+        tabStr += "<div  id=\"cssanimAddAnimDialogTabClick\" class=\"content\" style=\"height:55px;\">";
+        initVal = (obj && obj.cdc) ? obj.cdc : null;
+        tabStr += getTableHtml(allowedAnimations, '_C', null, initVal);
+        tabStr += '<div style="text-align: center; padding: 2px;">';
+        tabStr += "<input type=\"button\" class=\"cssAnimButton\" value=\""+lang.testIt+" !\" name=\"clickBtn\" onclick=\"CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);\">";
+        tabStr += "</div> ";
+        tabStr += "</div> ";
+        tabStr += "<div class=\"tab\">";
+        tabStr += "<span style=\"font-weight:bold;font-size: larger;\">" + keyLoad + "</span>";
+        tabStr += "<div  id=\"cssanimAddAnimDialogTabLoad\" class=\"content\" style=\"height:85px;\">";
+        initVal = (obj && obj.cds) ? obj.cds : null;
+        ral = (obj) ? obj.ral : true;
+        tabStr += getTableHtml(allowedAnimations, '_L', ral, initVal);
+        tabStr += '<div style="text-align: center; padding: 2px;">';
+        tabStr += "<input type=\"button\" class=\"cssAnimButton\" value=\""+lang.testIt+" !\" name=\"loadBtn\" onclick=\"CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);\">";
+        tabStr += "</div> ";
+        tabStr += "</div> ";
+        tabStr += "</div>";
+ //       var prefixFree = "<script src=\"./ckeditor/plugins/cssanim/css/prefixfree.min.js\"></script>";
+        var html ='<link rel="stylesheet" href="./ckeditor/plugins/cssanim/css/cssanim.css">' + '<style type="text/css">' + '.cke_cssanim_container' + '{' + 'color:#000 !important;' + 'padding:10px 10px 0;' + 'margin-top:5px;' + 'text-align: center;' + '}' + '.cke_cssanim_container p' + '{' + 'margin: 0 0 10px;' + '}' +
+            '</style>' + '<div class="cke_cssanim_container">' + '<div class="cke_cssanim_container_div" style="text-align: center; border: 1px solid grey; width:50%;margin-left: auto;margin-right: auto;">' +
+            '<img class="cke_cssanim_container_img" src="' + imagePath + '" alt="CSS Animation" style="border: 1px solid grey; padding: 5px; margin: 10px;">' + '</div>' + '<br><br>' + '<p id="elemName" style="font-weight:bold;font-size: larger;text-align: -webkit-center;">' + 'Animation '+lang.forStr+' : ' + attachedElem.getName() + '</p>' + '<br>' + tabStr + '</div>';
+ //       html +=  prefixFree;
+        return html;
+    }
+    return {
+        title: lang.editAnimsTitle,
+        width: 600,
+        minWidth: 600,
+        height: 400,
+        minHeight: 400,
+        resizable: CKEDITOR.DIALOG_RESIZE_NONE,
+        contents: [{
+            id: 'mainPanel',
+            label: 'CSS_Animation',
+            title: 'Animation',
+            //			expand: true,
+            padding: 0,
+            elements: [{
+                type: 'html',
+                id: 'htmlAnim',
+                html: '',
+                setup: function () {
+                    //console.log("SETUP htmlAnim");
+                    //console.log("SETUP1 allowedTags", editor.config.allowedTags, this.allowedTags);
+                    var el = document.getElementById(this.domId);
+                    //console.log("cssanimAddAnimDialog setup", el);
+                    var allowedAnimations = editor.config.allowedAnimations;
+                    CKEDITOR.plugins.cssanim.runHighLightElem(attachedElem);
+                    //console.log("cssanimAddAnimDialog allowedAnimations", allowedAnimations);
+                    //			        	var html = "<h1> Add Animation on : "+attachedElem.nodeName+"</h1>";
+                    el.innerHTML = getHtml(attachedElem, allowedAnimations);
+                    CKEDITOR.plugins.cssanim.cssanimAddAnimDialog = el;
+                },
+                cancel: function () {
+                    //console.log("CANCEL htmlAnim");
+                    CKEDITOR.plugins.cssanim.cleanHighlight();
+                },
+                commit: function () {
+                    //console.log("COMMIT htmlAnim");
+                    CKEDITOR.plugins.cssanim.cleanHighlight();
+                    var animation;
+                    var inputs = this.getElement().getElementsByTag('input');
+                    var selects = this.getElement().getElementsByTag('select');
+                    var res = {};
+                    res.animStart = null;
+                    res.animClick = null;
+                    res.animOver = null;
+                    res.ral = false;
+                    // get OnLoad data
+                    animation = getItemByName(selects, 'anim_L').getValue();
+                    var animIter;
+                    if (animation !== 'none') {
+                        res.animStart = animation + " ";
+                        res.animStart += getItemByName(inputs, 'duration_L').getValue() + "s ";
+                        res.animStart += getItemByName(selects, 'timing_L').getValue() + " ";
+                        res.animStart += getItemByName(inputs, 'delay_L').getValue() + "s ";
+                        animIter = getItemByName(inputs, 'iteration_L').getValue();
+                        if (animIter === "0") {
+                            animIter = "infinite";
+                        }
+                        res.animStart += animIter + " ";
+                        res.animStart += getItemByName(selects, 'direction_L').getValue();
+                        // Now RAL
+                        if ((getItemByName(inputs, 'rmAfterLoad').$.checked) && (animIter !== 'infinite')) {
+                        	res.ral = true;
+                        }
+                    }
+                    // get OnClick data
+                    animation = getItemByName(selects, 'anim_C').getValue();
+                    if (animation !== 'none') {
+                        res.animClick = animation + " ";
+                        res.animClick += getItemByName(inputs, 'duration_C').getValue() + "s ";
+                        res.animClick += getItemByName(selects, 'timing_C').getValue() + " ";
+                        res.animClick += getItemByName(inputs, 'delay_C').getValue() + "s ";
+                        animIter = getItemByName(inputs, 'iteration_C').getValue();
+                        if (animIter === "0") {
+                            animIter = "infinite";
+                        }
+                        res.animClick += animIter + " ";
+                        res.animClick += getItemByName(selects, 'direction_C').getValue();
+                    }
+                    // get OnHover data
+                    animation = getItemByName(selects, 'anim_O').getValue();
+                    if (animation !== 'none') {
+                        res.animOver = animation + " ";
+                        res.animOver += getItemByName(inputs, 'duration_O').getValue() + "s ";
+                        res.animOver += getItemByName(selects,'timing_O').getValue() + " ";
+                        res.animOver += getItemByName(inputs, 'delay_O').getValue() + "s ";
+                        animIter = getItemByName(inputs, 'iteration_O').getValue();
+                        if (animIter === "0") {
+                            animIter = "infinite";
+                        }
+                        res.animOver += animIter + " ";
+                        res.animOver += getItemByName(selects, 'direction_O').getValue();
+                    }
+                    //console.log(inputs, selects, res);
+                    CKEDITOR.plugins.cssanim.runAddAnimElem(attachedElem, res);
+                }
+            }]
+        }],
+//        onLoad: function () {
+//            //console.log("ON LOAD cssanimAddAnimDialog", attachedElem);
+//        },
+        onShow: function () {
+            attachedElem = CKEDITOR.plugins.cssanim.curSelectedElement;
+            if (CKEDITOR.plugins.cssanim.managePending) {
+                //console.log('Manage Pendings is ON !!!!!!!!!!!!!!!!!');
+                pendingChangesObj = CKEDITOR.plugins.cssanim.pendingChanges;
+                //console.log("ON SHOW PENDING ELEMENTS ============== ", pendingChangesObj);
+            }
+            this.setupContent();
+            var dial = this.getContentElement('mainPanel', 'htmlAnim');
+            var inputs = dial.getInputElement();
+            var elms = inputs.getElementsByTag('select');
+            var elm;
+            elm = getItemByName(elms, 'anim_L');
+            animSelectionChange(elm.$);
+            elm = getItemByName(elms, 'anim_C');
+            animSelectionChange(elm.$);
+            elm = getItemByName(elms, 'anim_O');
+            animSelectionChange(elm.$);
+
+        },
+        onOk: function () {
+            //console.log("ON OK cssanimAddAnimDialog");
+            this.commitContent();
+            if (CKEDITOR.plugins.cssanim.managePending) {
+                //console.log("ON OK PENDING ELEMENTS ============== ", pendingChangesObj);
+                CKEDITOR.plugins.cssanim.pendingChanges = pendingChangesObj;
+                CKEDITOR.plugins.cssanim.refreshCssAnimDialogAnimationsTab();
+            }
+        },
+//        onHide: function () {
+//            console.log("ON HIDE cssanimAddAnimDialog");
+//        },
+        onCancel: function () {
+            //console.log("ON CANCEL cssanimAddAnimDialog");
+            this.foreach(function (widget) {
+//                // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915)
+//                if (CKEDITOR.env.ie && (this._.currentFocusIndex == widget.focusIndex)) widget.getInputElement().$.blur();
+                if (widget.cancel) {
+                	widget.cancel.apply(widget);
+                }
+            });
+            //console.log("CANCEL PENDING ELEMENTS ============== ", pendingChangesObj);
+        }
+    };
+});
diff --git a/plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js
new file mode 100644
index 0000000..c205d3b
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/dialogs/cssaddanim.min.js
@@ -0,0 +1 @@
+"use strict";function iterationChange(e){var n=e.ownerDocument,t=n.getElementById("rmAfterLoadSpan"),i=n.getElementById("rmAfterLoadInput");"0"===e.value?(t.style.color="lightgrey",i.disabled=!0):(t.style.color="black",i.disabled=!1)}function animSelectionChange(e){var n,t=CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim,i=e.parentElement.parentElement,a=i.parentNode.parentNode.parentNode.getElementsByClassName("cssAnimButton"),l=e.ownerDocument,s=l.getElementById("rmAfterLoadSpan"),o=l.getElementById("rmAfterLoadInput"),d=l.getElementsByName("anim_L").item(0),r=l.getElementsByName("anim_C").item(0),c=l.getElementsByName("anim_O").item(0);if("anim_L"===e.name&&"none"===d.value){if("cssAnimPause"===r.value)return alert(t.pbOnClickPause),void(d.selectedIndex=selectList_cache);if("cssAnimPause"===c.value)return alert(t.pbOnOverPause),void(d.selectedIndex=selectList_cache)}if("anim_C"===e.name&&"none"===d.value&&"cssAnimPause"===r.value)return alert(t.pbOnClickOnLoadNone),void(r.selectedIndex=selectList_cache);if("anim_O"===e.name&&"none"===d.value&&"cssAnimPause"===c.value)return alert(t.pbOnOverOnLoadNone),void(c.selectedIndex=selectList_cache);if("cssAnimPause"===e.value||"none"===e.value){for(n=1;n<i.childElementCount;n+=1)i.childNodes[n].style.opacity=0;a[0].style.display="none","anim_L"===e.name&&(s.style.color="lightgrey",o.disabled=!0)}else{for(n=1;n<i.childElementCount;n+=1)i.childNodes[n].style.opacity="initial";a[0].style.display="initial","anim_L"===e.name&&(s.style.color="black",o.disabled=!1)}}var selectList_cache;CKEDITOR.dialog.add("cssanimAddAnimDialog",function(e){function n(e,n,t){var i,a,l="";l+='<select  onclick="selectList_cache=this.selectedIndex" onChange="animSelectionChange(this);" name="anim'+n+'">',i="","none"===t&&(i="selected"),l+='<option value="none" '+i+">"+s.none+"</option>","_L"!==n&&(i="","cssAnimPause"===t&&(i="selected"),l+='<option value="cssAnimPause" '+i+">"+s.cssAnimPause+"</option>");var o,d;for(o in e){for(d=e[o],l+='<optgroup label="'+o+'" style="font-weight:bold">',a=0;a<d.length;a+=1)i="",d[a]===t&&(i="selected"),l+='<option value="'+d[a]+'" '+i+">"+d[a]+"</option>";l+="  </optgroup>"}return l+="</select>"}function t(e,t,i,a){var l,o,d="",r='checked = "checked"',c=0,m="normal",g=1,p=1,u="none",h="linear",y=["linear","ease","ease-in","ease-out","ease-in-out"],b=["normal","alternate"],x=null,v="",f="black";for(a&&(a.indexOf("animation-play-state")>=0?x={name:"cssAnimPause",duration:null,timingFunction:"linear",delay:0,iterationCount:1,direction:"normal"}:(o=a.replace("{animation:","").replace("}","").replace(";","").trim(),x=parseCSS3AnimationShorthand(o)),c=x.delay/1e3,m=x.direction,g=x.duration/1e3,p=x.iterationCount,"infinite"===p&&(p=0,i=!1),u=x.name,h=x.timingFunction),d+='<table style="display:block; overflow-y=scroll;  overflow-y: auto; width:550px;">',d+="<tr>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">',d+=s.name,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">',d+=s.duration,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:100px;">',d+=s.tFunc,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:60px;">',d+=s.delay,d+="</th>",d+='<th title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px; width:70px;">',d+=s.iter,d+="</th>",d+='<th style="text-align: center;font-weight: bold;border: 1px solid grey;padding: 2px;">',d+=s.direction,d+="</th>",d+="</tr>",d+="<tr>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+=n(e,t,u),d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<input name="duration'+t+'" type="number" min="1" max="600" value="'+g+'" style="width:4em; border:1px solid gainsboro;">sec',d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<select name="timing'+t+'" style="border:1px solid gainsboro;">',l=0;l<y.length;l+=1)v="",y[l]===h&&(v="selected"),d+='<option value="'+y[l]+'" '+v+">"+y[l]+"</option>";for(d+="</select>",d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<input name="delay'+t+'" type="number" min="0" max="600" value="'+c+'" style="width:4em; border:1px solid gainsboro;">sec',d+="</td>",d+='<td title="If set to 0, iteration will be set as \'infinite\'" style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<input name="iteration'+t+'" type="number" min="0" max="99" value="'+p+'" style="width:3em; border:1px solid gainsboro" onChange="iterationChange(this);">',d+="</td>",d+='<td style="text-align: center;padding: 3px;border: 1px solid gainsboro;">',d+='<select name="direction'+t+'" style="border:1px solid gainsboro;">',l=0;l<b.length;l+=1)v="",b[l]===m&&(v="selected"),d+='<option value="'+b[l]+'" '+v+">"+b[l]+"</option>";return d+="</select>",d+="</td>",d+="</tr>",f="black",null!==i&&(i===!1&&(r=""),0===p&&(r="disabled",f="lightgrey"),d+="<tr>",d+='<td colspan="3" style="text-align: center;padding: 3px; border-left: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">',d+='<span id="rmAfterLoadSpan" style="color:'+f+'" title="'+s.ralTitle+'">'+s.ral+"</span>",d+="</td>",d+='<td colspan="3" style="text-align: left; padding: 3px;  border-right: 1px solid gainsboro; border-bottom: 1px solid gainsboro;">',d+='<input  id="rmAfterLoadInput" type="checkbox" name="rmAfterLoad"  '+r+">",d+="</td>",d+="</tr>"),d+="</table>"}function i(e,n){var t;for(t=0;t<e.$.length;t++)if(e.$[t].name==n)return new CKEDITOR.dom.node(e.$[t]);return null}function a(e,n){var i,a=null;a=e.getAttribute("data-animation"),a&&(i=decodeURIComponent(a),a=JSON.parse(i),CKEDITOR.plugins.cssanim.managePending&&(l[l.length]=[e.getId(),i]));var r,c,m="",g="OnLoad",p="OnOver",u="OnClick";m+='<div class="tabs" style="width:600px;">',m+='<div class="tab">',m+='<span style="font-weight:bold; font-size: larger;">'+p+"</span>",m+='<div id="cssanimAddAnimDialogTabOver" class="content" style="height:55px;">',r=a&&a.cdo?a.cdo:null,m+=t(n,"_O",null,r),m+='<div style="text-align: center; padding: 2px;">',m+='<input type="button" class="cssAnimButton" value="'+s.testIt+' !" name="overBtn" onclick="CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);">',m+="</div> ",m+="</div> ",m+='<div class="tab">',m+='<span style="font-weight:bold;font-size: larger;">'+u+"</span>",m+='<div  id="cssanimAddAnimDialogTabClick" class="content" style="height:55px;">',r=a&&a.cdc?a.cdc:null,m+=t(n,"_C",null,r),m+='<div style="text-align: center; padding: 2px;">',m+='<input type="button" class="cssAnimButton" value="'+s.testIt+' !" name="clickBtn" onclick="CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);">',m+="</div> ",m+="</div> ",m+='<div class="tab">',m+='<span style="font-weight:bold;font-size: larger;">'+g+"</span>",m+='<div  id="cssanimAddAnimDialogTabLoad" class="content" style="height:85px;">',r=a&&a.cds?a.cds:null,c=a?a.ral:!0,m+=t(n,"_L",c,r),m+='<div style="text-align: center; padding: 2px;">',m+='<input type="button" class="cssAnimButton" value="'+s.testIt+' !" name="loadBtn" onclick="CKEDITOR.plugins.cssanim.cssanimAddAnimDialogTest(this);">',m+="</div> ",m+="</div> ",m+="</div>";var h='<link rel="stylesheet" href="./ckeditor/plugins/cssanim/css/cssanim.css"><style type="text/css">.cke_cssanim_container{color:#000 !important;padding:10px 10px 0;margin-top:5px;text-align: center;}.cke_cssanim_container p{margin: 0 0 10px;}</style><div class="cke_cssanim_container"><div class="cke_cssanim_container_div" style="text-align: center; border: 1px solid grey; width:50%;margin-left: auto;margin-right: auto;"><img class="cke_cssanim_container_img" src="'+o+'" alt="CSS Animation" style="border: 1px solid grey; padding: 5px; margin: 10px;"></div><br><br><p id="elemName" style="font-weight:bold;font-size: larger;text-align: -webkit-center;">Animation '+s.forStr+" : "+d.getName()+"</p><br>"+m+"</div>";return h}var l,s=e.lang.cssanim,o=CKEDITOR.getUrl(CKEDITOR.plugins.get("cssanim").path+"dialogs/css3animation.png"),d=null;return{title:s.editAnimsTitle,width:600,minWidth:600,height:400,minHeight:400,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"mainPanel",label:"CSS_Animation",title:"Animation",padding:0,elements:[{type:"html",id:"htmlAnim",html:"",setup:function(){var n=document.getElementById(this.domId),t=e.config.allowedAnimations;CKEDITOR.plugins.cssanim.runHighLightElem(d),n.innerHTML=a(d,t),CKEDITOR.plugins.cssanim.cssanimAddAnimDialog=n},cancel:function(){CKEDITOR.plugins.cssanim.cleanHighlight()},commit:function(){CKEDITOR.plugins.cssanim.cleanHighlight();var e,n=this.getElement().getElementsByTag("input"),t=this.getElement().getElementsByTag("select"),a={};a.animStart=null,a.animClick=null,a.animOver=null,a.ral=!1,e=i(t,"anim_L").getValue();var l;"none"!==e&&(a.animStart=e+" ",a.animStart+=i(n,"duration_L").getValue()+"s ",a.animStart+=i(t,"timing_L").getValue()+" ",a.animStart+=i(n,"delay_L").getValue()+"s ",l=i(n,"iteration_L").getValue(),"0"===l&&(l="infinite"),a.animStart+=l+" ",a.animStart+=i(t,"direction_L").getValue(),i(n,"rmAfterLoad").$.checked&&"infinite"!==l&&(a.ral=!0)),e=i(t,"anim_C").getValue(),"none"!==e&&(a.animClick=e+" ",a.animClick+=i(n,"duration_C").getValue()+"s ",a.animClick+=i(t,"timing_C").getValue()+" ",a.animClick+=i(n,"delay_C").getValue()+"s ",l=i(n,"iteration_C").getValue(),"0"===l&&(l="infinite"),a.animClick+=l+" ",a.animClick+=i(t,"direction_C").getValue()),e=i(t,"anim_O").getValue(),"none"!==e&&(a.animOver=e+" ",a.animOver+=i(n,"duration_O").getValue()+"s ",a.animOver+=i(t,"timing_O").getValue()+" ",a.animOver+=i(n,"delay_O").getValue()+"s ",l=i(n,"iteration_O").getValue(),"0"===l&&(l="infinite"),a.animOver+=l+" ",a.animOver+=i(t,"direction_O").getValue()),CKEDITOR.plugins.cssanim.runAddAnimElem(d,a)}}]}],onShow:function(){d=CKEDITOR.plugins.cssanim.curSelectedElement,CKEDITOR.plugins.cssanim.managePending&&(l=CKEDITOR.plugins.cssanim.pendingChanges),this.setupContent();var e,n=this.getContentElement("mainPanel","htmlAnim"),t=n.getInputElement(),a=t.getElementsByTag("select");e=i(a,"anim_L"),animSelectionChange(e.$),e=i(a,"anim_C"),animSelectionChange(e.$),e=i(a,"anim_O"),animSelectionChange(e.$)},onOk:function(){this.commitContent(),CKEDITOR.plugins.cssanim.managePending&&(CKEDITOR.plugins.cssanim.pendingChanges=l,CKEDITOR.plugins.cssanim.refreshCssAnimDialogAnimationsTab())},onCancel:function(){this.foreach(function(e){e.cancel&&e.cancel.apply(e)})}}});
\ No newline at end of file
diff --git a/plugins/ckeditor4/cssanim/dialogs/cssanim.js b/plugins/ckeditor4/cssanim/dialogs/cssanim.js
new file mode 100644
index 0000000..55fd5c5
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/dialogs/cssanim.js
@@ -0,0 +1,528 @@
+/**
+ * Copyright (c) 2014, CKSource - Frederico Knabben. All rights reserved.
+ * Licensed under the terms of the MIT License (see LICENSE.md).
+ *
+ * The cssanim plugin dialog window definition.
+ *
+ * Created out of the CKEditor Plugin SDK:
+ * http://docs.ckeditor.com/#!/guide/plugin_sdk_sample_1
+ */
+// css = cssSelectorStart
+// cds = cssDefStart
+// cso = cssSelectorOver
+// cdo = cssDefOver
+// csc = cssSelectorClick
+// cdc = cssDefClick
+// ral = css Remove after Load flag
+// Our dialog definition.
+CKEDITOR.dialog.add('cssanimMainDialog', function (editor) {
+    "use strict";
+    var lang = editor.lang.cssanim;
+
+    function rgbToHex(color) {
+        if (color.substr(0, 1) === "#") {
+            return color;
+        }
+        var nums = /(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/i.exec(color),
+            r = parseInt(nums[2], 10).toString(16),
+            g = parseInt(nums[3], 10).toString(16),
+            b = parseInt(nums[4], 10).toString(16);
+        return "#" + (
+            (r.length === 1 ? "0" + r : r) + (g.length === 1 ? "0" + g : g) + (b.length === 1 ? "0" + b : b));
+    }
+
+    function getAllowedTagsHtml(tags, onloadTags) {
+        var allowedTagsStr = '';
+        allowedTagsStr += '<form>';
+        allowedTagsStr += '<div style=" overflow: auto; height: 350px; padding-bottom: 10px; margin-bottom: 10px;">';
+//        allowedTagsStr += '<table style="width:360px; display:block; overflow-y=scroll; max-height: 300px; overflow-y: auto;">';
+        allowedTagsStr += '<table>';
+        var i;
+        var checked;
+        for (i = 0; i < onloadTags.length; i += 1) {
+            allowedTagsStr += '<tr>';
+            allowedTagsStr += '<td style="width:280px;">';
+            allowedTagsStr += onloadTags[i].toUpperCase();
+            allowedTagsStr += '</td>';
+            allowedTagsStr += '<td style="text-align:center; width:80px;">';
+            checked = "";
+            if (tags.indexOf(onloadTags[i]) >= 0) {
+                checked = "checked=checked";
+            }
+            allowedTagsStr += ' <input type="checkbox" name="tags" ' + checked + ' value="' + onloadTags[i] + '">';
+            allowedTagsStr += '</td>';
+            allowedTagsStr += '</tr>';
+        }
+        allowedTagsStr += '</table>';
+        allowedTagsStr += '</div>';
+       allowedTagsStr += '</form>';
+        return allowedTagsStr;
+    }
+
+    function getparametersHtml() {
+//        var lang = editor.lang.cssanim;
+        var parametersStr = '';
+        var rgbHex = editor.config.highlightBGColor;
+        if (editor.config.highlightBGColor.indexOf('rgb') >= 0) {
+            rgbHex = rgbToHex(editor.config.highlightBGColor);
+        }
+        var customCssFilePath = editor.config.customCssFilePath;
+        parametersStr += '<form>';
+        parametersStr += '<fieldset style="border-radius:10px">';
+        parametersStr += '<legend style="font-weight:bold;">'+lang.HBS+'</legend>';
+        parametersStr += '<table style="width:300px;">';
+        parametersStr += '<tr>';
+        parametersStr += '<td style="width:250px;">';
+        parametersStr += lang.HBGC;
+        parametersStr += '</td>';
+        parametersStr += '<td>';
+        parametersStr += '<input style="width:50px; height:25px; " type="color" name="HLBgColor" value="' + rgbHex + '"  onchange="CKEDITOR.plugins.cssanim.setHighLightBgColor(this.value)">';
+        parametersStr += '</td>';
+        parametersStr += '</tr>';
+        parametersStr += '<tr>';
+        parametersStr += '<td>';
+        parametersStr += lang.HBW;
+        parametersStr += '</td>';
+        parametersStr += '<td style="padding:2px;">';
+        parametersStr += '<input style="width:40px; border: 1px solid #ccc;" name="width" type="number" min="1" max="10"  onchange="CKEDITOR.plugins.cssanim.setHighLightBorder(this.value)"  value="' + parseInt(editor.config.highlightBorder) + '"> px';
+        parametersStr += '</td>';
+        parametersStr += '</tr>';
+        parametersStr += '</table>';
+        parametersStr += '</fieldset>';
+        parametersStr += '<br>';
+        parametersStr += '<fieldset style="border-radius:10px">';
+        parametersStr += '<legend style="font-weight:bold;">'+lang.CustomCSS+'</legend>';
+        parametersStr += '<table style="width:300px;">';
+        parametersStr += '<tr>';
+        parametersStr += '<td style="width:50px;">';
+        parametersStr += lang.cssPath + '&nbsp;';
+        parametersStr += '</td>';
+        parametersStr += '<td style="width:250px;">';
+        parametersStr += '<input type="text" style="width:400px; border: 1px solid #ccc;" name="cssName" value=' + customCssFilePath + '>';
+        parametersStr += '</td>';
+        parametersStr += '</tr>';
+        parametersStr += '<tr>';
+        parametersStr += '<td colspan="2" style="text-align:center; padding-top: 8px;color: tomato;">';
+        parametersStr += lang.cssInfo;
+        parametersStr += '</td>';
+        parametersStr += '</tr>';
+        parametersStr += '</table>';
+        parametersStr += '</fieldset>';
+        parametersStr += '<div id="cssResultsDiv" style="margin-top:10px; padding:5px; text-align: center; border: #ccc solid 1px; display:none;">';
+        parametersStr += 'test';
+        parametersStr += '</div>';
+        parametersStr += '</form>';
+        return parametersStr;
+    }
+
+    function getTabDocAnimationHtml(myDialog) {
+//       var lang = editor.lang.cssanim;
+       //console.log("availableAnimsObj", myDialog.availableAnimsObj);
+        //   	ADD HERE COLOR FOR ANIMATIONS DEPENDING OF CSS ORIGIN :
+        //		lightblue if found in cssanim !!
+        //		green if found in custom !!
+        //		red if not found in any !!
+        var ral = lang.irrelevant;
+        var inputs = myDialog.getContentElement('tab-parameters-box', 'parametersSettings').getElement().getElementsByTag('input');
+        var HLBgColor;
+        var input, i;
+        for (i = 0; i < inputs.count(); i += 1) {
+            input = inputs.getItem(i).getNameAtt();
+            if (input === 'HLBgColor') {
+                HLBgColor = inputs.getItem(i).getValue();
+                break;
+            }
+        }
+        var thStr = '<th style="border: 1px solid gray; text-align:center; padding:5px; font-weight:bold; background-color: lightgray;">';
+        var tdStrS = '<td style="border: 1px solid gray; text-align:center; padding:5px;';
+        var tdStrE;
+        var elems = CKEDITOR.plugins.cssanim.getAllAnimElem(editor);
+        var html = lang.noElements;
+        var htmlTable = '';
+        //     	htmlTable += '<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">Animation Colors Legend';
+        //    	htmlTable += '</p>';
+        htmlTable += '<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>';
+        htmlTable += '<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">';
+        htmlTable += '<span style="color: LightSkyBlue; font-weight:bold;">'+lang.animFromDef+'</span>';
+        htmlTable += '<br><span style="color: cornflowerblue; font-weight:bold;">'+lang.animPause+'</span>';
+        htmlTable += '<br><span style="color: PaleGreen; font-weight:bold;">'+lang.animFromCustom+'</span>';
+        htmlTable += '<br><span style="color: orange; font-weight:bold;">'+lang.animBoth+'</span>';
+        htmlTable += '<br><span style="color: Red; font-weight:bold;">'+lang.animUndef+'</span>';
+        htmlTable += '<br>';
+        htmlTable += '</p>';
+        htmlTable += '<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>';
+        htmlTable += '<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">';
+        htmlTable += lang.dblClick;
+        htmlTable += '</p>';
+        htmlTable += '<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;margin-bottom: 10px;"></div>';
+        htmlTable += '<div style=" width: 600px; overflow: auto; height: 400px;">';
+        //htmlTable += '<table style=" display: inline-block; height: 300px;">';
+        htmlTable += '<table>';
+        htmlTable += '<tr>';
+        htmlTable += thStr + 'Tag</th>';
+        htmlTable += thStr + 'Id</th>';
+        htmlTable += thStr + 'OnLoad</th>';
+        htmlTable += thStr + 'OnClick</th>';
+        htmlTable += thStr + 'OnOver</th>';
+        htmlTable += thStr + lang.ral +'</th>';
+        htmlTable += '</tr>';
+        var cnt = 0;
+        var bgColor = 'azure;';
+        var tag;
+        var exp, animObj;
+        var curElem;
+        var key;
+        for (key in elems) {
+	        if (elems.hasOwnProperty(key)) {
+	        	curElem = elems[key];
+	        	ral = lang.irrelevant;
+	            tdStrE = '">';
+	            cnt+=1;
+	            bgColor = 'azure';
+	            tag = curElem.elem.nodeName.toLowerCase();
+	            if (editor.config.allowedTags.indexOf(tag) < 0) {
+	                bgColor = 'MistyRose';
+	            }
+	            htmlTable += '<tr style="background-color:' + bgColor + ';" ';
+	            htmlTable += ' onmouseover="this.style.backgroundColor=\'' + HLBgColor + '\'; CKEDITOR.plugins.cssanim.runHighLightElemById(\'' + curElem.elem.id + '\'); "';
+	            htmlTable += ' onmouseout="this.style.backgroundColor=\'' + bgColor + '\'; CKEDITOR.plugins.cssanim.cleanHighlight();"';
+	            htmlTable += ' ondblclick=" CKEDITOR.plugins.cssanim.runAddAnimDialogById(\'' + curElem.elem.id + '\')"';
+	            htmlTable += ' >';
+	            htmlTable += tdStrS + tdStrE;
+	            htmlTable += curElem.elem.nodeName;
+	            htmlTable += '</td>';
+	            htmlTable += tdStrS + tdStrE;
+	            htmlTable += curElem.elem.id;
+	            htmlTable += '</td>';
+	            tdStrE = '">';
+	            if (curElem.cds) {
+	                exp = curElem.cds.replace('{animation:', '').replace('}', '').replace(';', '').trim();
+	                animObj = parseCSS3AnimationShorthand(exp);
+	                ral = (curElem.ral) ? "YES" : "NO";
+	                if (animObj.name) {
+	                	if (animObj.name === 'cssAnimPause') {
+	                        tdStrE = ' background-color:cornflowerblue;">';              		
+	                	} else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsConflict && (myDialog.availableAnimsObj.allAvailableAnimsConflict.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:orange;">';
+	                    } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCustom && (myDialog.availableAnimsObj.allAvailableAnimsCustom.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:PaleGreen;">';
+	                    } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCssAnim && (myDialog.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:LightSkyBlue;">';
+	                    } else {
+	                        tdStrE = ' background-color:Red;">';
+	                    }
+	                }
+	                htmlTable += tdStrS + tdStrE;
+	            } else {
+	                animObj = {};
+	                animObj.name = "";
+	                htmlTable += tdStrS + tdStrE;
+	            }
+	            htmlTable += animObj.name;
+	            htmlTable += '</td>';
+	            tdStrE = '">';
+	            if (curElem.cdc) {
+	            	if (curElem.cdc.indexOf('animation-play-state') >= 0) {
+	            		animObj = {
+	            	            name: 'cssAnimPause',
+	            	            duration: null,
+	            	            timingFunction: 'linear',
+	            	            delay: 0,
+	            	            iterationCount: 1,
+	            	            direction: 'normal'
+	            	        };
+	            	} else {
+	    	            exp = curElem.cdc.replace('{animation:', '').replace('}', '').replace(';', '').trim();
+	    	            animObj = parseCSS3AnimationShorthand(exp);    		
+	            	}
+	                if (animObj.name) {
+	                	if (animObj.name === 'cssAnimPause') {
+	                        tdStrE = ' background-color:cornflowerblue;">';              		
+	                	} else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsConflict && (myDialog.availableAnimsObj.allAvailableAnimsConflict.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:orange;">';
+	                    } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCustom && (myDialog.availableAnimsObj.allAvailableAnimsCustom.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:PaleGreen;">';
+	                    } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCssAnim && (myDialog.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:LightSkyBlue;">';
+	                    } else {
+	                        tdStrE = ' background-color:Red;">';
+	                    }
+	                }
+	                htmlTable += tdStrS + tdStrE;
+	            } else {
+	                animObj = {};
+	                animObj.name = "";
+	                htmlTable += tdStrS + tdStrE;
+	            }
+	            htmlTable += animObj.name;
+	            htmlTable += '</td>';
+	            tdStrE = '">';
+	            if (curElem.cdo) {
+	            	if (curElem.cdo.indexOf('animation-play-state') >= 0) {
+	            		animObj = {
+	            	            name: 'cssAnimPause',
+	            	            duration: null,
+	            	            timingFunction: 'linear',
+	            	            delay: 0,
+	            	            iterationCount: 1,
+	            	            direction: 'normal'
+	            	        };
+	            	} else {
+	    	            exp = curElem.cdo.replace('{animation:', '').replace('}', '').replace(';', '').trim();
+	    	            animObj = parseCSS3AnimationShorthand(exp);    		
+	            	}
+	                if (animObj.name) {
+	                	if (animObj.name === 'cssAnimPause') {
+	                        tdStrE = ' background-color:cornflowerblue;">';              		
+	                	} else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsConflict && (myDialog.availableAnimsObj.allAvailableAnimsConflict.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:orange;">';
+	                    } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCustom && (myDialog.availableAnimsObj.allAvailableAnimsCustom.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:PaleGreen;">';
+	                    } else if (myDialog.availableAnimsObj && myDialog.availableAnimsObj.allAvailableAnimsCssAnim && (myDialog.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(animObj.name) >= 0)) {
+	                        tdStrE = ' background-color:LightSkyBlue;">';
+	                    } else {
+	                        tdStrE = ' background-color:Red;">';
+	                    }
+	                }
+	                htmlTable += tdStrS + tdStrE;
+	            } else {
+	                animObj = {};
+	                animObj.name = "";
+	                htmlTable += tdStrS + tdStrE;
+	            }
+	            htmlTable += animObj.name;
+	            htmlTable += '</td>';
+	            tdStrE = '">';
+	            htmlTable += tdStrS + tdStrE;
+	            htmlTable += ral;
+	            htmlTable += '</td>';
+	            htmlTable += '</tr>';
+	        }
+        }
+        if (cnt > 0) {
+            htmlTable += '</table>';
+            htmlTable += '</div>';
+            htmlTable += '<div style="height: 6px;"></div>';
+            html = htmlTable;
+        }
+        return html;
+    }
+
+    return {
+        // Basic properties of the dialog window: title, minimum size.
+        title: editor.lang.cssanim.genProperties,
+        minWidth: 550,
+        width: 550,
+        minHeight: 250,
+        height: 250,
+        resizable: CKEDITOR.DIALOG_RESIZE_NONE,
+        // Dialog window content definition.
+        contents: [
+            // Definition of the parameters Box Settings dialog tab (page).
+            {
+                id: 'tab-doc-animations',
+                label: lang.docAnim,
+                elements: [{
+                    type: 'html',
+                    id: "allAnimations",
+                    html: ''
+//                    setup: function () {},
+//                    commit: function () {}
+                }]
+            }, {
+                // Definition of the Allowed Tags Settings dialog tab (page).
+                id: 'tab-allowed-tags',
+                label: lang.allowedTags,
+                // The tab content.
+                elements: [{
+                    type: 'html',
+                    id: "allowedTags",
+                    allowedTags: null,
+                    html: '',
+                    setup: function () {
+                        this.allowedTags = editor.config.allowedTags;
+                    },
+                    cancel: function () {
+                        editor.config.allowedTags = this.allowedTags;
+                        var inputs = this.getElement().getElementsByTag('input');
+                        var i;
+                        for (i = 0; i < inputs.count(); i += 1) {
+                            if (editor.config.allowedTags.indexOf(inputs.getItem(i).$.value) < 0) {
+                                inputs.getItem(i).$.checked = false;
+                            } else {
+                                inputs.getItem(i).$.checked = true;
+                            }
+                        }
+                    },
+                    commit: function () {
+                        var inputs = this.getElement().getElementsByTag('input');
+                        var i;
+                        editor.config.allowedTags = [];
+                        for (i = 0; i < inputs.count(); i += 1) {
+                            if (inputs.getItem(i).$.checked) {
+                                editor.config.allowedTags.push(inputs.getItem(i).$.value);
+                            }
+                        }
+                    }
+                }]
+            }, {
+                id: 'tab-parameters-box',
+                label: lang.advSettings,
+                // Require the id attribute to be enabled.
+                elements: [{
+                    type: 'html',
+                    id: "parametersSettings",
+                    html: '',
+                    bg: '',
+                    bw: 0,
+                    pad: 0,
+                    setup: function () {
+                        var inputs = this.getElement().getElementsByTag('input');
+                        var input, i;
+                        for (i = 0; i < inputs.count(); i += 1) {
+                            input = inputs.getItem(i).$.name;
+                            if (input === 'HLBgColor') {
+                                this.bg = inputs.getItem(i).$.value;
+                            } else if (input === 'width') {
+                                this.bw = inputs.getItem(i).$.value;
+                            }
+                        }
+                        //console.log(" ----------------------- parametersSettings setup -----------", this);
+                    },
+                    commit: function () {
+                        var inputs = this.getElement().getElementsByTag('input');
+                        var input, i;
+                        for (i = 0; i < inputs.count(); i += 1) {
+                            input = inputs.getItem(i).$.name;
+                            if (input === 'HLBgColor') {
+                                editor.config.highlightBGColor = inputs.getItem(i).$.value;
+                            } else if (input === 'width') {
+                                editor.config.highlightBorder = inputs.getItem(i).$.value + "px";
+//                            } else if (input === 'padding') {
+//                                editor.config.highlightPadding = inputs.getItem(i).$.value + "px";
+                            } else if (input === 'cssName') {
+                                if (this.getDialog().initialCssFile !== inputs.getItem(i).$.value) {
+                                    CKEDITOR.plugins.cssanim.getCustomCss(inputs.getItem(i).$.value);
+                                }
+                            }
+                        }
+                        //console.log(" ----------------------- parametersSettings commit -----------", inputs);
+                    },
+                    cancel: function () {
+                        var inputs = this.getElement().getElementsByTag('input');
+                        var input, i;
+                        for (i = 0; i < inputs.count(); i += 1) {
+                            input = inputs.getItem(i).$.name;
+                            if (input === 'HLBgColor') {
+                                inputs.getItem(i).$.value = this.bg;
+                                editor.config.highlightBGColor = this.bg;
+                            } else if (input === 'width') {
+                                inputs.getItem(i).$.value = this.bw;
+                                editor.config.highlightBorder = this.bw + "px";
+                            }
+                        }
+                        //console.log(" ----------------------- parametersSettings cancel -----------", this);
+                    }
+                }]
+            }
+        ],
+        onLoad: function () {
+            CKEDITOR.plugins.cssanim.setCssAnimDialog(this);
+            this.initialCssFile = "";
+            // Init dialog tabs
+            var myDomId, myEl;
+            myDomId = this.getContentElement('tab-doc-animations', 'allAnimations').domId;
+            myEl = document.getElementById(myDomId);
+            myEl.innerHTML = getTabDocAnimationHtml(this);
+            myDomId = this.getContentElement('tab-allowed-tags', 'allowedTags').domId;
+            myEl = document.getElementById(myDomId);
+            myEl.innerHTML = getAllowedTagsHtml(editor.config.allowedTags, editor.config.onLoadAllowedTags);
+            myDomId = this.getContentElement('tab-parameters-box', 'parametersSettings').domId;
+            myEl = document.getElementById(myDomId);
+            myEl.innerHTML = getparametersHtml();
+            this.on('selectPage', function (e) {
+                //console.log("SELECT PAGE ------------------------------------------", e.data.page);
+                var domId, el;
+                var form;
+                if (e.data.currentPage === "tab-allowed-tags") {
+                    domId = e.sender.getContentElement('tab-allowed-tags', 'allowedTags');
+                    domId.commit();
+                }
+                if (e.data.page === "tab-doc-animations") {
+                    domId = e.sender.getContentElement('tab-doc-animations', 'allAnimations').domId;
+                    el = document.getElementById(domId);
+                    el.innerHTML = getTabDocAnimationHtml(this);
+                } else if (e.data.page === "tab-allowed-tags") {
+                    domId = e.sender.getContentElement('tab-allowed-tags', 'allowedTags').domId;
+                    el = document.getElementById(domId);
+                    el.innerHTML = getAllowedTagsHtml(editor.config.allowedTags, editor.config.onLoadAllowedTags);
+                } else if (e.data.page === "tab-parameters-box") {
+                    form = e.sender.getContentElement('tab-parameters-box', 'parametersSettings');
+                    domId = form.domId;
+                    el = document.getElementById(domId);
+                    el.innerHTML = getparametersHtml();
+                }
+            });
+        },
+        onShow: function () {
+            //console.log("ON SHOW CSSANIM ...............");
+            this.setupContent();
+            var form = this.getContentElement('tab-parameters-box', 'parametersSettings');
+            var domId = form.domId;
+            var el = document.getElementById(domId);
+            if (editor.config.customCssFilePath !== this.initialCssFile) {
+                CKEDITOR.plugins.cssanim.getCustomCss(el);
+                this.initialCssFile = editor.config.customCssFilePath;
+            }
+            this.availableAnimsObj = CKEDITOR.plugins.cssanim.getAvailableAnims();
+            // this 3 following lines are a trick to force refresh the tab !!
+            this.hidePage('tab-doc-animations');
+            this.showPage('tab-doc-animations');
+            this.selectPage('tab-doc-animations');
+            CKEDITOR.plugins.cssanim.cleanHighlight();
+        },
+        // This method is invoked once a user clicks the OK button, confirming the dialog.
+        onOk: function () {
+            //console.log("ON OK CSSANIM ...............");
+            //			// Invoke the commit methods of all dialog window elements, so the <cssanimMainDialog> element gets modified.
+            this.commitContent();
+            CKEDITOR.plugins.cssanim.pendingChanges = [];
+        },
+//        onHide: function () {
+//            //console.log("ON HIDE CSSANIM ...............");
+//        },
+        onCancel: function () {
+            //console.log("ON CANCEL CSSANIM ...............");
+            if (CKEDITOR.plugins.cssanim.managePending) {
+                // need to cancel changes on pending elements
+                //console.log("ON CANCEL CSSANIM  PENDING ELEMENTS ============== ", CKEDITOR.plugins.cssanim.pendingChanges);
+                var i, obj;
+                //				for(i = 0; i < CKEDITOR.plugins.cssanim.pendingChanges.length; i+=1 ) {
+                for (i = CKEDITOR.plugins.cssanim.pendingChanges.length - 1; i >= 0; i -= 1) {
+                    //console.log("To Be Canceled:", CKEDITOR.plugins.cssanim.pendingChanges[i][0], CKEDITOR.plugins.cssanim.pendingChanges[i][1]);
+                    obj = JSON.parse(CKEDITOR.plugins.cssanim.pendingChanges[i][1]);
+                    //console.log("To Be Canceled:", obj);
+                    CKEDITOR.plugins.cssanim.restoreAnimOnElemById(CKEDITOR.plugins.cssanim.pendingChanges[i][0], obj);
+                }
+                CKEDITOR.plugins.cssanim.pendingChanges = [];
+            }
+            // restore initial css file
+            if (editor.config.customCssFilePath !== this.initialCssFile) {
+                var form = this.getContentElement('tab-parameters-box', 'parametersSettings');
+                var el = document.getElementById(form.domId);
+                var divRes = el.querySelector("#cssResultsDiv");
+                divRes.parentElement.elements["cssName"].value = this.initialCssFile.trim();
+                CKEDITOR.plugins.cssanim.getCustomCss(el);
+            }
+            this.foreach(function (widget) {
+//                // Make sure IE triggers "change" event on last focused input before closing the dialog. (#7915)
+//                if (CKEDITOR.env.ie && (this._.currentFocusIndex === widget.focusIndex)) {
+//                	widget.getInputElement().$.blur();
+//                }
+                if (widget.cancel) {
+                	widget.cancel.apply(widget);
+                }
+            });
+        }
+    };
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/cssanim/dialogs/cssanim.min.js b/plugins/ckeditor4/cssanim/dialogs/cssanim.min.js
new file mode 100644
index 0000000..1741869
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/dialogs/cssanim.min.js
@@ -0,0 +1 @@
+CKEDITOR.dialog.add("cssanimMainDialog",function(e){"use strict";function t(e){if("#"===e.substr(0,1))return e;var t=/(.*?)rgb\((\d+),\s*(\d+),\s*(\d+)\)/i.exec(e),a=parseInt(t[2],10).toString(16),n=parseInt(t[3],10).toString(16),i=parseInt(t[4],10).toString(16);return"#"+((1===a.length?"0"+a:a)+(1===n.length?"0"+n:n)+(1===i.length?"0"+i:i))}function a(e,t){var a="";a+="<form>",a+='<div style=" overflow: auto; height: 350px; padding-bottom: 10px; margin-bottom: 10px;">',a+="<table>";var n,i;for(n=0;n<t.length;n+=1)a+="<tr>",a+='<td style="width:280px;">',a+=t[n].toUpperCase(),a+="</td>",a+='<td style="text-align:center; width:80px;">',i="",e.indexOf(t[n])>=0&&(i="checked=checked"),a+=' <input type="checkbox" name="tags" '+i+' value="'+t[n]+'">',a+="</td>",a+="</tr>";return a+="</table>",a+="</div>",a+="</form>"}function n(){var a="",n=e.config.highlightBGColor;e.config.highlightBGColor.indexOf("rgb")>=0&&(n=t(e.config.highlightBGColor));var i=e.config.customCssFilePath;return a+="<form>",a+='<fieldset style="border-radius:10px">',a+='<legend style="font-weight:bold;">'+l.HBS+"</legend>",a+='<table style="width:300px;">',a+="<tr>",a+='<td style="width:250px;">',a+=l.HBGC,a+="</td>",a+="<td>",a+='<input style="width:50px; height:25px; " type="color" name="HLBgColor" value="'+n+'"  onchange="CKEDITOR.plugins.cssanim.setHighLightBgColor(this.value)">',a+="</td>",a+="</tr>",a+="<tr>",a+="<td>",a+=l.HBW,a+="</td>",a+='<td style="padding:2px;">',a+='<input style="width:40px; border: 1px solid #ccc;" name="width" type="number" min="1" max="10"  onchange="CKEDITOR.plugins.cssanim.setHighLightBorder(this.value)"  value="'+parseInt(e.config.highlightBorder)+'"> px',a+="</td>",a+="</tr>",a+="</table>",a+="</fieldset>",a+="<br>",a+='<fieldset style="border-radius:10px">',a+='<legend style="font-weight:bold;">'+l.CustomCSS+"</legend>",a+='<table style="width:300px;">',a+="<tr>",a+='<td style="width:50px;">',a+=l.cssPath+"&nbsp;",a+="</td>",a+='<td style="width:250px;">',a+='<input type="text" style="width:400px; border: 1px solid #ccc;" name="cssName" value='+i+">",a+="</td>",a+="</tr>",a+="<tr>",a+='<td colspan="2" style="text-align:center; padding-top: 8px;color: tomato;">',a+=l.cssInfo,a+="</td>",a+="</tr>",a+="</table>",a+="</fieldset>",a+='<div id="cssResultsDiv" style="margin-top:10px; padding:5px; text-align: center; border: #ccc solid 1px; display:none;">',a+="test",a+="</div>",a+="</form>"}function i(t){var a,n,i,s=l.irrelevant,o=t.getContentElement("tab-parameters-box","parametersSettings").getElement().getElementsByTag("input");for(i=0;i<o.count();i+=1)if(n=o.getItem(i).getNameAtt(),"HLBgColor"===n){a=o.getItem(i).getValue();break}var g,r='<th style="border: 1px solid gray; text-align:center; padding:5px; font-weight:bold; background-color: lightgray;">',m='<td style="border: 1px solid gray; text-align:center; padding:5px;',d=CKEDITOR.plugins.cssanim.getAllAnimElem(e),c=l.noElements,b="";b+='<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>',b+='<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">',b+='<span style="color: LightSkyBlue; font-weight:bold;">'+l.animFromDef+"</span>",b+='<br><span style="color: cornflowerblue; font-weight:bold;">'+l.animPause+"</span>",b+='<br><span style="color: PaleGreen; font-weight:bold;">'+l.animFromCustom+"</span>",b+='<br><span style="color: orange; font-weight:bold;">'+l.animBoth+"</span>",b+='<br><span style="color: Red; font-weight:bold;">'+l.animUndef+"</span>",b+="<br>",b+="</p>",b+='<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;"></div>',b+='<p style="text-align: center; padding: 5px; color: grey; font-weight:bold;">',b+=l.dblClick,b+="</p>",b+='<div style="width: 90%; height: 1px; background: grey; margin-left: auto;margin-right: auto;margin-bottom: 10px;"></div>',b+='<div style=" width: 600px; overflow: auto; height: 400px;">',b+="<table>",b+="<tr>",b+=r+"Tag</th>",b+=r+"Id</th>",b+=r+"OnLoad</th>",b+=r+"OnClick</th>",b+=r+"OnOver</th>",b+=r+l.ral+"</th>",b+="</tr>";var h,u,p,v,f,C=0,A="azure;";for(f in d)d.hasOwnProperty(f)&&(v=d[f],s=l.irrelevant,g='">',C+=1,A="azure",h=v.elem.nodeName.toLowerCase(),e.config.allowedTags.indexOf(h)<0&&(A="MistyRose"),b+='<tr style="background-color:'+A+';" ',b+=" onmouseover=\"this.style.backgroundColor='"+a+"'; CKEDITOR.plugins.cssanim.runHighLightElemById('"+v.elem.id+"'); \"",b+=" onmouseout=\"this.style.backgroundColor='"+A+"'; CKEDITOR.plugins.cssanim.cleanHighlight();\"",b+=" ondblclick=\" CKEDITOR.plugins.cssanim.runAddAnimDialogById('"+v.elem.id+"')\"",b+=" >",b+=m+g,b+=v.elem.nodeName,b+="</td>",b+=m+g,b+=v.elem.id,b+="</td>",g='">',v.cds?(u=v.cds.replace("{animation:","").replace("}","").replace(";","").trim(),p=parseCSS3AnimationShorthand(u),s=v.ral?"YES":"NO",p.name&&(g="cssAnimPause"===p.name?' background-color:cornflowerblue;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsConflict&&t.availableAnimsObj.allAvailableAnimsConflict.indexOf(p.name)>=0?' background-color:orange;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCustom&&t.availableAnimsObj.allAvailableAnimsCustom.indexOf(p.name)>=0?' background-color:PaleGreen;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCssAnim&&t.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(p.name)>=0?' background-color:LightSkyBlue;">':' background-color:Red;">'),b+=m+g):(p={},p.name="",b+=m+g),b+=p.name,b+="</td>",g='">',v.cdc?(v.cdc.indexOf("animation-play-state")>=0?p={name:"cssAnimPause",duration:null,timingFunction:"linear",delay:0,iterationCount:1,direction:"normal"}:(u=v.cdc.replace("{animation:","").replace("}","").replace(";","").trim(),p=parseCSS3AnimationShorthand(u)),p.name&&(g="cssAnimPause"===p.name?' background-color:cornflowerblue;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsConflict&&t.availableAnimsObj.allAvailableAnimsConflict.indexOf(p.name)>=0?' background-color:orange;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCustom&&t.availableAnimsObj.allAvailableAnimsCustom.indexOf(p.name)>=0?' background-color:PaleGreen;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCssAnim&&t.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(p.name)>=0?' background-color:LightSkyBlue;">':' background-color:Red;">'),b+=m+g):(p={},p.name="",b+=m+g),b+=p.name,b+="</td>",g='">',v.cdo?(v.cdo.indexOf("animation-play-state")>=0?p={name:"cssAnimPause",duration:null,timingFunction:"linear",delay:0,iterationCount:1,direction:"normal"}:(u=v.cdo.replace("{animation:","").replace("}","").replace(";","").trim(),p=parseCSS3AnimationShorthand(u)),p.name&&(g="cssAnimPause"===p.name?' background-color:cornflowerblue;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsConflict&&t.availableAnimsObj.allAvailableAnimsConflict.indexOf(p.name)>=0?' background-color:orange;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCustom&&t.availableAnimsObj.allAvailableAnimsCustom.indexOf(p.name)>=0?' background-color:PaleGreen;">':t.availableAnimsObj&&t.availableAnimsObj.allAvailableAnimsCssAnim&&t.availableAnimsObj.allAvailableAnimsCssAnim.indexOf(p.name)>=0?' background-color:LightSkyBlue;">':' background-color:Red;">'),b+=m+g):(p={},p.name="",b+=m+g),b+=p.name,b+="</td>",g='">',b+=m+g,b+=s,b+="</td>",b+="</tr>");return C>0&&(b+="</table>",b+="</div>",b+='<div style="height: 6px;"></div>',c=b),c}var l=e.lang.cssanim;return{title:e.lang.cssanim.genProperties,minWidth:550,width:550,minHeight:250,height:250,resizable:CKEDITOR.DIALOG_RESIZE_NONE,contents:[{id:"tab-doc-animations",label:l.docAnim,elements:[{type:"html",id:"allAnimations",html:""}]},{id:"tab-allowed-tags",label:l.allowedTags,elements:[{type:"html",id:"allowedTags",allowedTags:null,html:"",setup:function(){this.allowedTags=e.config.allowedTags},cancel:function(){e.config.allowedTags=this.allowedTags;var t,a=this.getElement().getElementsByTag("input");for(t=0;t<a.count();t+=1)a.getItem(t).$.checked=e.config.allowedTags.indexOf(a.getItem(t).$.value)<0?!1:!0},commit:function(){var t,a=this.getElement().getElementsByTag("input");for(e.config.allowedTags=[],t=0;t<a.count();t+=1)a.getItem(t).$.checked&&e.config.allowedTags.push(a.getItem(t).$.value)}}]},{id:"tab-parameters-box",label:l.advSettings,elements:[{type:"html",id:"parametersSettings",html:"",bg:"",bw:0,pad:0,setup:function(){var e,t,a=this.getElement().getElementsByTag("input");for(t=0;t<a.count();t+=1)e=a.getItem(t).$.name,"HLBgColor"===e?this.bg=a.getItem(t).$.value:"width"===e&&(this.bw=a.getItem(t).$.value)},commit:function(){var t,a,n=this.getElement().getElementsByTag("input");for(a=0;a<n.count();a+=1)t=n.getItem(a).$.name,"HLBgColor"===t?e.config.highlightBGColor=n.getItem(a).$.value:"width"===t?e.config.highlightBorder=n.getItem(a).$.value+"px":"cssName"===t&&this.getDialog().initialCssFile!==n.getItem(a).$.value&&CKEDITOR.plugins.cssanim.getCustomCss(n.getItem(a).$.value)},cancel:function(){var t,a,n=this.getElement().getElementsByTag("input");for(a=0;a<n.count();a+=1)t=n.getItem(a).$.name,"HLBgColor"===t?(n.getItem(a).$.value=this.bg,e.config.highlightBGColor=this.bg):"width"===t&&(n.getItem(a).$.value=this.bw,e.config.highlightBorder=this.bw+"px")}}]}],onLoad:function(){CKEDITOR.plugins.cssanim.setCssAnimDialog(this),this.initialCssFile="";var t,l;t=this.getContentElement("tab-doc-animations","allAnimations").domId,l=document.getElementById(t),l.innerHTML=i(this),t=this.getContentElement("tab-allowed-tags","allowedTags").domId,l=document.getElementById(t),l.innerHTML=a(e.config.allowedTags,e.config.onLoadAllowedTags),t=this.getContentElement("tab-parameters-box","parametersSettings").domId,l=document.getElementById(t),l.innerHTML=n(),this.on("selectPage",function(t){var l,s,o;"tab-allowed-tags"===t.data.currentPage&&(l=t.sender.getContentElement("tab-allowed-tags","allowedTags"),l.commit()),"tab-doc-animations"===t.data.page?(l=t.sender.getContentElement("tab-doc-animations","allAnimations").domId,s=document.getElementById(l),s.innerHTML=i(this)):"tab-allowed-tags"===t.data.page?(l=t.sender.getContentElement("tab-allowed-tags","allowedTags").domId,s=document.getElementById(l),s.innerHTML=a(e.config.allowedTags,e.config.onLoadAllowedTags)):"tab-parameters-box"===t.data.page&&(o=t.sender.getContentElement("tab-parameters-box","parametersSettings"),l=o.domId,s=document.getElementById(l),s.innerHTML=n())})},onShow:function(){this.setupContent();var t=this.getContentElement("tab-parameters-box","parametersSettings"),a=t.domId,n=document.getElementById(a);e.config.customCssFilePath!==this.initialCssFile&&(CKEDITOR.plugins.cssanim.getCustomCss(n),this.initialCssFile=e.config.customCssFilePath),this.availableAnimsObj=CKEDITOR.plugins.cssanim.getAvailableAnims(),this.hidePage("tab-doc-animations"),this.showPage("tab-doc-animations"),this.selectPage("tab-doc-animations"),CKEDITOR.plugins.cssanim.cleanHighlight()},onOk:function(){this.commitContent(),CKEDITOR.plugins.cssanim.pendingChanges=[]},onCancel:function(){if(CKEDITOR.plugins.cssanim.managePending){var t,a;for(t=CKEDITOR.plugins.cssanim.pendingChanges.length-1;t>=0;t-=1)a=JSON.parse(CKEDITOR.plugins.cssanim.pendingChanges[t][1]),CKEDITOR.plugins.cssanim.restoreAnimOnElemById(CKEDITOR.plugins.cssanim.pendingChanges[t][0],a);CKEDITOR.plugins.cssanim.pendingChanges=[]}if(e.config.customCssFilePath!==this.initialCssFile){var n=this.getContentElement("tab-parameters-box","parametersSettings"),i=document.getElementById(n.domId),l=i.querySelector("#cssResultsDiv");l.parentElement.elements.cssName.value=this.initialCssFile.trim(),CKEDITOR.plugins.cssanim.getCustomCss(i)}this.foreach(function(e){e.cancel&&e.cancel.apply(e)})}}});
\ No newline at end of file
diff --git a/plugins/ckeditor4/cssanim/icons/cssanim.png b/plugins/ckeditor4/cssanim/icons/cssanim.png
new file mode 100644
index 0000000000000000000000000000000000000000..a10ed886a839eb20382a00f9a429cefe70d807d0
GIT binary patch
literal 1776
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
S>G4wl0000<MNUMnLSTY1k!leD

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/cssanim/images/add.png b/plugins/ckeditor4/cssanim/images/add.png
new file mode 100644
index 0000000000000000000000000000000000000000..c77063a123f6915b12874b9f09589d64bc38487e
GIT binary patch
literal 8388
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
a{Qn0fnYv2-W^x$-0000<MNUMnLSTYtOEo6|

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/cssanim/images/del.png b/plugins/ckeditor4/cssanim/images/del.png
new file mode 100644
index 0000000000000000000000000000000000000000..51c4ed0c1177dd6ae193ba818767de712b2e0481
GIT binary patch
literal 12056
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
X8EE+<N85ttcn91vw76M)-3|SJvtEPw

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/cssanim/images/edit.png b/plugins/ckeditor4/cssanim/images/edit.png
new file mode 100644
index 0000000000000000000000000000000000000000..6ffe6f3951ce37cefcb93c0412a7074873cc7ffd
GIT binary patch
literal 4046
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

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/cssanim/images/highlight.png b/plugins/ckeditor4/cssanim/images/highlight.png
new file mode 100644
index 0000000000000000000000000000000000000000..572da7761a0ebfea2770e87e34a830e720f9ad56
GIT binary patch
literal 18537
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
XpJ(pAv1uQa0s(iH*UoD$L8t!&G|PB^

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/cssanim/images/lamp.png b/plugins/ckeditor4/cssanim/images/lamp.png
new file mode 100644
index 0000000000000000000000000000000000000000..97ea73488a4a7fc12f4d1367bdf1428fae0d3648
GIT binary patch
literal 7547
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
RVS4}o002ovPDHLkV1nBhR;K^}

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/cssanim/lang/en.js b/plugins/ckeditor4/cssanim/lang/en.js
new file mode 100644
index 0000000..f6327eb
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/lang/en.js
@@ -0,0 +1,62 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('cssanim', 'en', {
+	userGuide: 'CKEditor User\'s Guide',
+	//
+	genProperties: 'CSS Animations General Properties',
+	editAnimsTitle : 'CSS Animations Edition',
+	HighLight :	'OutLine',
+	AddAnimations : 'Add Animations',
+	EditAnimations : 'Edit Animations',
+	RemoveAnimations : 'Remove All Animations',
+	warningOverride : '(Warning, this rule override an existing rule in cssAnim.css)',
+	animationFound : 'Animations Rules found in CSS',
+	noAnimationFound : 'No Animations Rules found in CSS',
+	errorLoadingFile : 'Error loading file :',
+	loadStatus : 'Status : ',
+	specFile : 'The specified CSS file :',
+	fileNotAvailable : ' is not available !!',
+	fileCannotAccess : 'Cannot access the CSS File',
+	fileSpecified : 'specified CSS file : ',
+	fileExtInvalid : ' has invalid extention (.css required) !',
+	testIt : 'Test It',
+	cssAnimPause : 'Pause OnLoad',
+	//
+	HBS : 'OutLine Box Settings',
+	HBGC : 'BackGround Color',
+	HBW : 'Border Width',
+	HBP : 'Padding',
+	CustomCSS : 'Custom CSS',
+	cssPath : 'Path ',
+	cssInfo : 'To remove any custom css, clear the path box<br>To change custom css, enter the css path in the the path box<br>(Any change of css file will require to close the form (OK Button) to be effective !!)',
+	irrelevant : 'irrelevant',
+	noElements : 'No Animations',
+	animFromDef : 'Animation from default CSS',
+	animPause : 'Special "Pause" Animation',
+	animFromCustom : 'Animation from custom CSS',
+	animBoth : 'Animation defined in both default and custom CSS (may not work correctly)',
+	animUndef : 'Animation not defined in any CSS (may not work)',
+	dblClick : 'Double click on a line to edit animations',
+	ral : 'Remove After Load',
+	yes : 'YES',
+	no : 'NO',
+	docAnim : 'Document Animations',
+	allowedTags : 'Allowed Tags',
+	advSettings : 'Advanced Settings',
+	//
+	none : 'NONE',
+	name : 'Name',
+	duration : 'Duration',
+	tFunc : 'Timing Function',
+	delay : 'Delay',
+	iter : 'Iteration',
+	direction : 'Direction',
+	ralTitle : 'If not checked, this animation &#x0awill be set as \'initial\' state transition and &#x0awill happen after completion of any &#x0aother \'click\' or \'hover\' transitions',
+	forStr : 'for',
+	pbOnClickPause : 'Error, Cannot set this animation to "none" as "OnClick" animation is "Pause OnLoad"',
+	pbOnOverPause : 'Error, Cannot set this animation to "none" as "OnOver" animation is "Pause OnLoad"',
+	pbOnClickOnLoadNone : 'Error, Cannot set this animation to "Pause OnLoad" as "OnLoad" animation is "none"',
+	pbOnOverOnLoadNone : 'Error, Cannot set this animation to "Pause OnLoad" as "OnLoad" animation is "none"'
+} );
diff --git a/plugins/ckeditor4/cssanim/lang/fr.js b/plugins/ckeditor4/cssanim/lang/fr.js
new file mode 100644
index 0000000..4935aba
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/lang/fr.js
@@ -0,0 +1,62 @@
+/*
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('cssanim', 'fr', {
+	userGuide: 'CKEditor User\'s Guide',
+	// 
+	genProperties: 'CSS Animations Propri\351t\351s G\351n\351rales',
+	editAnimsTitle : 'CSS Animations Edition',
+	HighLight :	'Surligner',
+	AddAnimations : 'Ajouter Animations',
+	EditAnimations : 'Editer Animations',
+	RemoveAnimations : 'Supprimer toutes les Animations',
+	warningOverride : '(Attention, r\350gle en conflit avec une r\350gle de cssAnim.css)',
+	animationFound : 'Animations trouv\351es dans le CSS',
+	noAnimationFound : 'Aucune animations trouv\351es dans le CSS',
+	errorLoadingFile : 'Erreur de chargement :',
+	loadStatus : 'Statut : ',
+	specFile : 'Le fichier CSS sp\351cifi\351 :',
+	fileNotAvailable : ' n\'existe pas !!',
+	fileCannotAccess : 'Cannot access the CSS File',
+	fileSpecified : 'Fichier CSS  : ',
+	fileExtInvalid : ' a une extension incorrecte (.css requis) !',
+	testIt : 'Aper\347u',
+	cssAnimPause : 'Pause OnLoad',
+	//
+	HBS : 'Param\350tres du surlignement',
+	HBGC : 'Couleur de fond',
+	HBW : 'Largeur du bord',
+	HBP : 'Marge int\351rieure',
+	CustomCSS : 'CSS Propri\351taire',
+	cssPath : 'Chemin d\'acc\350s',
+	cssInfo : 'Pour supprimer le CSS entrer un chemin vide.<br>Pour changer le CSS, entrer le nouveau chemin d\'acc\350s<br>(Tout changement impose de fermer le menu (bouton OK) pour enregistrer la mofification !!)',
+	irrelevant : 'hors de propos',
+	noElements : 'Aucune Animation',
+	animFromDef : 'Animation d\351finie dans le CSS par d\351faut',
+	animPause : 'Animation Sp\315ciale "Pause"',
+	animFromCustom : 'Animation d\351finie dans le CSS propri\351taire',
+	animBoth : 'Animation d\351finie dans plusieurs CSS (peut ne pas fonctionner)',
+	animUndef : 'Animation d\351finie dans aucun CSS (peut ne pas fonctionner)',
+	dblClick : '\'double-cliquez\' une des lignes pour \351diter l\'animation',
+	ral : 'Supprimer apr\350s le chargement',
+	yes : 'OUI',
+	no : 'NON',
+	docAnim : 'Animations du document',
+	allowedTags : 'Tags autoris\351s',
+	advSettings : 'Param\350tres Avanc\350s',
+	//
+	none : 'AUCUNE',
+	name : 'Nom',
+	duration : 'Dur\351e',
+	tFunc : 'Effet de Timing',
+	delay : 'D\351lai',
+	iter : 'It\351ration',
+	direction : 'Direction',
+	ralTitle : 'Si non coch\351e, cette animation sera l\'animation \351x\351cut\351e pour arriver \340 l\'\351tat initial &#x0a elle se produira donc apr\350s le chargement, &#x0a et apr\350s n\'importe quelle autre transition \'clic\' ou \'hover\'',
+	forStr : 'pour',
+	pbOnClickPause : 'Erreur, Impossible de mettre cette animation a "none" car l\'animation "OnClick" est "Pause OnLoad"',
+	pbOnOverPause : 'Erreur, Impossible de mettre cette animation a "none" car l\'animation  "OnOver" est "Pause OnLoad"',
+	pbOnClickOnLoadNone : 'Erreur, Impossible de mettre cette animation a "Pause OnLoad" car l\'animation "OnLoad" est "none"',
+	pbOnOverOnLoadNone : 'Erreur, Impossible de mettre cette animation a "Pause OnLoad" car l\'animation "OnLoad" est "none"'
+} );
diff --git a/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js
new file mode 100644
index 0000000..55e625d
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.js
@@ -0,0 +1,61 @@
+/**
+ * parseCSS3AnimationShorthand
+ * Parses a CSS3 Animation statement into an object.
+ * http://www.joelambert.co.uk
+ *
+ * Copyright 2011, Joe Lambert.
+ * Free to use under the MIT license.
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * e.g. parseCSS3AnimationShorthand('boxRotate 600ms linear 2s');
+ */
+"use strict";
+window.parseCSS3AnimationShorthand = function (statement) {
+    var props = {
+            name: null,
+            duration: null,
+            timingFunction: 'ease',
+            delay: 0,
+            iterationCount: 1,
+            direction: 'normal'
+        },
+        remainder = statement,
+        ms, t, fn, r, f, i, d;
+    /* -- Get duration/delay -- */
+    // Convert strings times in s or ms to ms integers
+    ms = function (t) {
+        return t.indexOf('ms') > -1 ? parseInt(t, 10) : parseInt(t, 10) * 1000;
+    };
+    t = statement.match(/[0-9]+m?s/g);
+    if (t) {
+        props.duration = t.length > 0 ? ms(t[0]) : props.duration;
+        props.delay = t.length > 1 ? ms(t[1]) : props.delay;
+        // Remove the found properties from the string
+        remainder = remainder.replace(t[0], ''); // Replace the original found string not the cleansed one
+    }
+    /* -- Get timing function -- */
+    fn = ['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out'];
+    r = new RegExp('(' + fn.join('(\\s|$)|').replace('-', '\-') + '|cubic-bezier\\(.*?\\))');
+    f = statement.match(r);
+    if (f) {
+        props.timingFunction = f.length > 0 ? f[0].replace(/\s+/g, '') : props.timingFunction;
+        remainder = remainder.replace(props.timingFunction, '');
+    }
+    /* -- Get iteration count -- */
+    i = statement.match(/(infinite|\s[0-9]+(\s|$))/);
+    if (i) {
+        props.iterationCount = i[0].replace(/\s+/g, '');
+        remainder = remainder.replace(i[0], '');
+    }
+    /* -- Get direction -- */
+    d = statement.match(/(normal|alternate)\s*$/);
+    if (d) {
+        props.direction = d[0].replace(/\s+/g, '');
+        remainder = remainder.replace(d[0], '');
+    }
+    remainder = remainder.split(' ');
+    if (remainder.length > 0) {
+    	props.name = remainder[0];
+    }
+    return props;
+};
\ No newline at end of file
diff --git a/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js
new file mode 100644
index 0000000..aee87cc
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/parseCSS3AnimationShorthand.min.js
@@ -0,0 +1 @@
+"use strict";window.parseCSS3AnimationShorthand=function(e){var n,t,i,a,r,l,c,o={name:null,duration:null,timingFunction:"ease",delay:0,iterationCount:1,direction:"normal"},s=e;return n=function(e){return e.indexOf("ms")>-1?parseInt(e,10):1e3*parseInt(e,10)},t=e.match(/[0-9]+m?s/g),t&&(o.duration=t.length>0?n(t[0]):o.duration,o.delay=t.length>1?n(t[1]):o.delay,s=s.replace(t[0],"")),i=["linear","ease","ease-in","ease-out","ease-in-out"],a=new RegExp("("+i.join("(\\s|$)|").replace("-","-")+"|cubic-bezier\\(.*?\\))"),r=e.match(a),r&&(o.timingFunction=r.length>0?r[0].replace(/\s+/g,""):o.timingFunction,s=s.replace(o.timingFunction,"")),l=e.match(/(infinite|\s[0-9]+(\s|$))/),l&&(o.iterationCount=l[0].replace(/\s+/g,""),s=s.replace(l[0],"")),c=e.match(/(normal|alternate)\s*$/),c&&(o.direction=c[0].replace(/\s+/g,""),s=s.replace(c[0],"")),s=s.split(" "),s.length>0&&(o.name=s[0]),o};
\ No newline at end of file
diff --git a/plugins/ckeditor4/cssanim/plugin.js b/plugins/ckeditor4/cssanim/plugin.js
new file mode 100644
index 0000000..f4217af
--- /dev/null
+++ b/plugins/ckeditor4/cssanim/plugin.js
@@ -0,0 +1,1049 @@
+/**
+ * Copyright (c) 2014, CKSource - Frederico Knabben. All rights reserved.
+ * Licensed under the terms of the MIT License (see LICENSE.md).
+ *
+ * Plugin to add CSS animations on elements into the CKEditor editing area.
+ *
+ */
+/*
+JSLint Global variables :
+CKEDITOR
+console
+editor
+document
+navigator
+alert
+CSSRule
+XMLHttpRequest
+parseCSS3AnimationShorthand
+window
+lang
+setTimeout
+ */
+/* Default Tags (the one I selected from html5 standard)
+ * Inline html tags elements
+ * <img> <span> <button> <label>
+ * Block html tags elements
+ * <div> <figure> <form> <h1> <h2> <h3> <h4> <h5> <h6> <p> <section> <video>
+ * <tr> <td>
+ */
+// css = cssSelectorStart
+// cds = cssDefStart
+// cso = cssSelectorOver
+// cdo = cssDefOver
+// csc = cssSelectorClick
+// cdc = cssDefClick
+// ral = css Remove after Load flag
+(function () {
+    "use strict";
+
+    var allowedAnimsDef = {};
+    allowedAnimsDef.BOUNCE = ['bounce', 'bounceIn', 'bounceInDown', 'bounceInLeft', 'bounceInRight', 'bounceInUp', 'bounceOut', 'bounceOutDown', 'bounceOutLeft', 'bounceOutRight', 'bounceOutUp'];
+    allowedAnimsDef.FADE = ['fadeIn', 'fadeInDown', 'fadeInDownBig', 'fadeInLeft', 'fadeInLeftBig', 'fadeInRight', 'fadeInRightBig', 'fadeInUp', 'fadeInUpBig', 'fadeOut', 'fadeOutDown', 'fadeOutDownBig', 'fadeOutLeft', 'fadeOutLeftBig', 'fadeOutRight', 'fadeOutRightBig', 'fadeOutUp', 'fadeOutUpBig'];
+    allowedAnimsDef.FLIP = ['flip', 'flipInX', 'flipInY', 'flipOutX', 'flipOutY'];
+    allowedAnimsDef.ROTATE = ['rotate', 'rotateIn', 'rotateInDownLeft', 'rotateInDownRight', 'rotateInUpLeft', 'rotateInUpRight', 'rotateOut', 'rotateOutDownLeft', 'rotateOutDownRight', 'rotateOutUpLeft', 'rotateOutUpRight', 'rotateRound'];
+    allowedAnimsDef.SLIDE = ['slideInDown', 'slideInLeft', 'slideInRight', 'slideInUp', 'slideOutDown', 'slideOutLeft', 'slideOutRight', 'slideOutUp'];
+    allowedAnimsDef.ZOOM = ['zoomIn', 'zoomInDown', 'zoomInLeft', 'zoomInRight', 'zoomInUp', 'zoomOut', 'zoomOutDown', 'zoomOutLeft', 'zoomOutRight', 'zoomOutUp'];
+    allowedAnimsDef.OTHER = ['flash', 'hinge', 'jello', 'lightSpeedIn', 'lightSpeedOut', 'pulse', 'rollIn', 'rollOut', 'rubberBand', 'shake', 'swing', 'tada', 'wobble'];
+
+    var allowedTagsDef = ['img', 'span', 'button', 'label', 'div', 'figure', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'p', 'section', 'video', 'table', 'tr', 'td'];
+
+//    function getBrowser() {
+//		var browserName;
+//		var nAgt = navigator.userAgent;
+//		var verOffset;
+////		console.log(navigator);
+//		if ((verOffset=nAgt.indexOf("OPR/"))!=-1) {
+//			 browserName = "Opera";
+//			} else if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
+//			 browserName = "Opera";
+//			} else if ((verOffset=nAgt.indexOf("Maxthon"))!=-1) {
+//			 browserName = "Maxthon";
+//			} else if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
+//			 browserName = "Microsoft Internet Explorer";
+//			} else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
+//			 browserName = "Chrome";
+//			} else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
+//			 browserName = "Safari";
+//			} else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
+//			 browserName = "Firefox";
+//			} else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) ) {
+//			 browserName = nAgt.substring(nameOffset,verOffset);
+//			 if (browserName.toLowerCase()==browserName.toUpperCase()) {
+//			  browserName = navigator.appName;
+//			 }
+//			}
+//		return browserName;
+//    }
+
+    function removeDomainFromUrl(string) {
+        var str = string.replace(/^https?:\/\/[^\/]+/i, '');
+        return str;
+    }
+//    var highLightedElem = null;
+    //var highLightedElemBG = "";
+    var animClassPrefix = "ckAnimClass_";
+    var animScriptTitle = "_ckAnimScript_";
+//    var idCnt = -1;
+//    var cssAnimationObject = {};
+    var customCssScriptTitle = "_ckAnimCustomCss_";
+    var customCssFile = "";
+
+    function myGetNamedItem(elm, name) {
+    	var i;
+    	if (elm.namedItem) {
+    		return elm.namedItem(name);
+    	} else {
+        	for (i=0;i<elm.length;i++) {
+        		if (elm.item(i).name == name) {
+        			return elm.item(i);
+        	 	}
+        	 }
+     		return null;
+    	}
+        alert ("Your browser doesn't support item or namedItem method.");
+    }
+    function generateUUID() {
+        var d = new Date().getTime();
+//        var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+        var uuid = 'xxxyyxxxxyyx'.replace(/[xy]/g, function(c) {
+            var r = (d + Math.random()*16)%16 | 0;
+            d = Math.floor(d/16);
+            return (c=='x' ? r : (r&0x7|0x8)).toString(16);
+        });
+        return uuid;
+    }
+    function cmdHighLightTagElem(elem) {
+        return {
+            // It applies to a "block-like" context.
+            // requiredContent: elem,
+            exec: function () {
+                CKEDITOR.plugins.cssanim.runHighLightElem(elem);
+            }
+        };
+    }
+
+    function cmdAddAnimTagElem(elem) {
+        return {
+            exec: function (editor) {
+                CKEDITOR.plugins.cssanim.runAddAnimDialog(editor, elem);
+            }
+        };
+    }
+
+    function cmdEditAnimTagElem(elem) {
+        return {
+            exec: function (editor) {
+                CKEDITOR.plugins.cssanim.runEditAnimDialog(editor, elem);
+            }
+        };
+    }
+
+    function cmdRemoveAnimTagElem(elem) {
+        return {
+            exec: function () {
+                CKEDITOR.plugins.cssanim.runRemoveAnimElem(elem);
+            }
+        };
+    }
+
+    // Add left menu items for all html tags / leements from selected to top
+    function addMenusItemsPath(rootPath, editor, element, path) {
+        var elementsFound = false;
+        var i;
+        var elem;
+        var tag;
+        var subMenus;
+        var lang = editor.lang.cssanim;
+
+//        console.log("addMenusItemsPath path:", path.length, path);
+        if (!element || element.isReadOnly()) {
+            return elementsFound;
+        }
+        for (i = 0; i < path.length; i += 1) {
+        	elem = path[i];
+            tag = elem.getName().toLowerCase();
+            if (editor.config.allowedTags.indexOf(tag) >= 0) {
+                elementsFound = true;
+                tag += i.toString();
+                editor.addCommand('highlightTag' + tag, new CKEDITOR.command(editor, cmdHighLightTagElem(elem)));
+                editor.addCommand('addAnimTag' + tag, new CKEDITOR.command(editor, cmdAddAnimTagElem(elem)));
+                editor.addCommand('editAnimTag' + tag, new CKEDITOR.command(editor, cmdEditAnimTagElem(elem)));
+                editor.addCommand('removeAnimTag' + tag, new CKEDITOR.command(editor, cmdRemoveAnimTagElem(elem)));
+                //console.log("add command for :", tag);
+                subMenus = {};
+                subMenus['highlightsubmenu' + tag] = {
+                    label: lang.HighLight,
+                    group: "highlightGroup",
+                    command: 'highlightTag' + tag,
+                    icon: rootPath + 'images/lamp.png',
+                    order: 2
+                };
+                subMenus['addanimsubmenu' + tag] = {
+                    label: lang.AddAnimations,
+                    group: "highlightGroup",
+                    command: 'addAnimTag' + tag,
+                    icon: rootPath + 'images/add.png',
+                    order: 3
+                };
+                subMenus['editanimsubmenu' + tag] = {
+                    label: lang.EditAnimations,
+                    group: "highlightGroup",
+                    command: 'editAnimTag' + tag,
+                    icon: rootPath + 'images/edit.png',
+                    order: 4
+                };
+                subMenus['removeanimsubmenu' + tag] = {
+                    label: lang.RemoveAnimations,
+                    group: "highlightGroup",
+                    command: 'removeAnimTag' + tag,
+                    icon: rootPath + 'images/del.png',
+                    order: 4
+                };
+                //console.log("addMenusItemsPath:", subMenus);
+                if (editor.addMenuItems) {
+                    editor.addMenuItems(subMenus);
+                }
+            }
+        }
+        return elementsFound;
+    }
+
+    function getItemsFunc() {
+        var obj = {};
+        obj['highlightsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF;
+        //if (this.elem.data('animation') == null) {
+        if (this.elem.$.classList.toString().indexOf(animClassPrefix) < 0) {
+            obj['addanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF;
+            obj['editanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_DISABLED;
+            obj['removeanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_DISABLED;
+        } else {
+            obj['addanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_DISABLED;
+            obj['editanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF;
+            obj['removeanimsubmenu' + this.tag] = CKEDITOR.TRISTATE_OFF;
+        }
+        //console.log("OBJ", obj);
+        return obj;
+    }
+    // Add listeners for menu items
+    function listeners(editor, element, path) {
+        //console.log("listeners:", path.length, path);
+        var nodes = {};
+        var elem, tag, label, i;
+        if (!element || element.isReadOnly()) {
+            return null;
+        }
+        var menusItems = {};
+        for (i = 0; i < path.length; i += 1) {
+            elem = path[i];
+            tag = elem.getName().toLowerCase();
+            label = tag.toUpperCase();
+//            if (elem.dataset.ckeRealElementType === undefined) {
+                if (editor.config.allowedTags.indexOf(tag) >= 0) {
+                    tag += i.toString();
+                    nodes['topMenu' + tag] = CKEDITOR.TRISTATE_OFF;
+                    menusItems['topMenu' + tag] = {
+                        label: label,
+                        icon: CKEDITOR.basePath + 'plugins/cssanim/icons/cssanim.png',
+                        group: 'highlightGroup',
+                        tag: tag,
+                        elem: elem,
+                        order: 0,
+                        getItems: getItemsFunc
+                    };
+                }
+//            }
+        }
+        editor.addMenuItems(menusItems);
+        return nodes;
+    }
+    // Register the plugin within the editor.
+    CKEDITOR.plugins.add('cssanim', {
+        // Register the icons.
+        lang: 'en,fr',
+        icons: 'cssanim',
+    	requires: 'contextmenu',
+        // onLoad: function(editor) {
+        // //console.log("ON LOAD ------");
+        // },
+        beforeInit: function (/*editor*/) {
+        	// add needed css files to editor
+            //console.log("BEFORE INIT --- ", editor, CKEDITOR.document); // 'bar'
+//            var brow = getBrowser();
+        	CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/cssanim.css');
+//            CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/tabcontent.css');
+
+//            if ((brow !== 'Maxthon') && (brow !== 'Safari')) {
+//                CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/tabcontentnotest.css');
+//    		} else {
+//                CKEDITOR.document.appendStyleSheet(CKEDITOR.basePath + 'plugins/cssanim/css/tabcontentnotest.css');
+//    		}
+        },
+        afterInit: function (editor) {
+            //console.log("AFTER INIT --- ", editor);
+            var dataProcessor = editor.dataProcessor;
+            var htmlFilter = dataProcessor && dataProcessor.htmlFilter;
+//                dataFilter = dataProcessor && dataProcessor.dataFilter;
+//            if (dataFilter) {
+//                dataFilter.addRules({
+//                });
+//            }
+            if (htmlFilter) {
+                //console.log("htmlFilter:", htmlFilter);
+                htmlFilter.addRules({
+                    elements: {
+                        $: function (element) {
+                        	//console.log("htmlFilter", element);
+                        	// Called for each element before generating the html output.
+                            // If one element is highlighted, then remove the highlight style to avoid to push it in the created html
+                            //if (element.attributes.class) {
+                                if (element.hasClass('highlight_tag')) {
+                                    //console.log("htmlFilter -> element:", element);
+                                    //element.attributes.class = element.attributes.class.replace('highlight_tag', '');
+                                	element.removeClass('highlight_tag');
+                                	var style = new CKEDITOR.htmlParser.cssStyle(element.attributes.style);
+                                    style.rules["background-color"] = element.attributes['data-animation-bg'];
+                                    style.rules["outline"] = element.attributes['data-animation-outline'];
+                                    element.attributes.style = style.toString();
+                                    // reset highlight
+                                    delete element.attributes["data-animation-bg"];
+                                    delete element.attributes["data-animation-outline"];
+                                }
+                            //}
+                        }
+                    }
+                });
+            }
+        },
+        // The plugin initialization logic goes inside this method.
+        init: function (editor) {
+            //console.log("INIT ------", editor);
+            // Get Config & Lang
+            var lang = editor.lang.cssanim;
+            var rootPath = this.path,
+                defaultConfig = {
+            		// default accepted tags, can be overriden by config file
+                    acceptedTags: allowedTagsDef,
+            		// default available animations, can be overriden by config file
+                    acceptedAnimations: allowedAnimsDef,
+                    highlightBGColor: '#87CEFA',
+                    highlightBorder: '3px',
+                    highlightPadding: '3px'
+                };
+            var config = CKEDITOR.tools.extend(defaultConfig, editor.config.cssanim || {}, true);
+            editor.config.onLoadAllowedTags = config.acceptedTags.sort();
+            editor.config.onLoadAllowedAnimations = config.acceptedAnimations;
+
+            editor.config.allowedTags = editor.config.onLoadAllowedTags;	// may be filtered in main dialog
+            editor.config.allowedAnimations = editor.config.onLoadAllowedAnimations;
+            editor.config.highlightBGColor = config.highlightBGColor;	// may be changed in main dialog
+            editor.config.highlightBorder = config.highlightBorder;		// may be changed in main dialog
+            editor.config.highlightPadding = config.highlightPadding;	// may be changed in main dialog
+            editor.config.customCssFilePath = config.customCssFilePath;	// may be changed in main dialog
+            //
+            // Functions
+            //
+            // Define an editor command that opens our dialog window.
+            var cssanimAddAnim = new CKEDITOR.dialogCommand('cssanimAddAnimDialog');
+            editor.addCommand('_myLaunchAddAnimDialog', cssanimAddAnim);
+            var cssanimMain = new CKEDITOR.dialogCommand('cssanimMainDialog', {
+                // Allow ckAnimClass class with data-aniomation attributes.
+            	// Addinionaly allowed 'button' and 'span' (as they seems to be filtered by ckeditor default)
+                allowedContent: 'button;span;div{*};*[id,data-animation*](ckAnimClass*)'
+            });
+            editor.addCommand('cssanim', cssanimMain);
+            // Create a toolbar button that executes the above command.
+            editor.ui.addButton('cssanim', {
+                // The text part of the button (if available) and the tooltip.
+                label: lang.genProperties,
+                // The command to execute on click.
+                command: 'cssanim',
+                // The button placement in the toolbar (toolbar group name).
+                toolbar: 'insert'
+            });
+            editor.addMenuGroup('highlightGroup', 200);
+            if (editor.contextMenu) {
+                // Add a context menu group with the Edit cssanimeviation item.
+                editor.addMenuGroup('cssanimGroup');
+                editor.contextMenu.addListener(function (element /*, selection*/) {
+                    //console.log("SELECTION", element, selection);
+                    var path = CKEDITOR.plugins.cssanim.getPathToTop(element);
+                    //console.log("PATH TO TOP", path);
+                    var foundSome = addMenusItemsPath(rootPath, editor, element, path);
+                    if (foundSome === true) {
+                        return listeners(editor, element, path);
+                    } else {
+                        return null;
+                    }
+                });
+            }
+            // Register our dialog file -- this.path is the plugin folder path.
+            CKEDITOR.dialog.add('cssanimMainDialog', this.path + 'dialogs/cssanim.min.js');
+            CKEDITOR.dialog.add('cssanimAddAnimDialog', this.path + 'dialogs/cssaddanim.min.js');
+            editor.on('contentDom', function (/*e*/) {
+                // Ini document editor
+                CKEDITOR.plugins.cssanim.init(editor);
+                if (editor.config.customCssFilePath) {
+	                 CKEDITOR.plugins.cssanim.getCustomCss(editor.config.customCssFilePath);
+                }
+            });
+            editor.on('toHtml', function (evt) {
+            	//console.log("ON toHtml 10");
+                // Called when loading the html inside the text area
+                var key;
+                var source, re, m;
+                // Here we remove the javascript function removeAnimation(event)
+                // The function will be re-created if needed
+                for (key in evt.data.dataValue.children) {
+                    if (evt.data.dataValue.children[key].type === CKEDITOR.NODE_COMMENT) {
+                        if ((evt.data.dataValue.children[key].value.indexOf(animScriptTitle) >= 0) || (evt.data.dataValue.children[key].value.indexOf(customCssScriptTitle) >= 0)) {
+                            if (evt.data.dataValue.children[key].value.indexOf(customCssScriptTitle) >= 0) {
+                                // A custom CSS file was defined, So init the correct values fot it !!
+                                source = decodeURIComponent(evt.data.dataValue.children[key].value.replace(/^\{cke_protected\}/, ''));
+                                re = /^.*(customCss\.setAttribute\("href",)(.*)\);customCss(.*)/;
+                                //if ((m = re.exec(source)) !== null) {
+                                m = re.exec(source);
+                                if (m !== null) {
+                                    if (m.index === re.lastIndex) {
+                                        re.lastIndex += 1;
+                                    }
+                                    //console.log("==================", m[2]);
+                                    editor.config.customCssFilePath = m[2];
+                                    editor.config.customCssFilePath = editor.config.customCssFilePath.replace(/"/gi, '');
+                                    editor.config.customCssFilePath = editor.config.customCssFilePath.trim();
+                                    //console.log("==================", editor.config.customCssFilePath);
+                                }
+                            }
+                            evt.data.dataValue.children[key].remove();
+                        }
+                    }
+                }
+            }, null, null, 10);
+            editor.on('toDataFormat', function (evt) {
+                CKEDITOR.plugins.cssanim.cleanHighlight();
+                var pluginPath = removeDomainFromUrl(CKEDITOR.plugins.get('cssanim').path);
+                var cssStr0 = "\"";
+                var rmFuncStr = "";
+                var foundOneAnim = false;
+                var obj0;
+                var removeAfterLoadFunc = false;
+            	var cssAnimationObject = CKEDITOR.plugins.cssanim.getAllAnimElem();
+
+                for (obj0 in cssAnimationObject) {
+                    if (cssAnimationObject[obj0].css) {
+                        foundOneAnim = true;
+                        cssStr0 += cssAnimationObject[obj0].css;
+                        cssStr0 += cssAnimationObject[obj0].cds;
+                        if (cssAnimationObject[obj0].ral) {
+                            // remove after Load flag is ON, create the javascript listener for end of animation
+                        	// and the javascript function to remove
+                            removeAfterLoadFunc = true;
+                            rmFuncStr += "document.getElementsByClassName('" + animClassPrefix + obj0 + "Start')[0].addEventListener('animationend', removeAnimation); ";
+                            rmFuncStr += "document.getElementsByClassName('" + animClassPrefix + obj0 + "Start')[0].addEventListener('webkitAnimationEnd', removeAnimation); ";
+                        }
+                        // Debug staff
+                        // rmFuncStr += "console.log('Added Anim for: ',document.getElementsByClassName('" + animClassPrefix + obj0 + "Start')[0]); ";
+                    }
+                    if (cssAnimationObject[obj0].cso) {
+                        foundOneAnim = true;
+                        cssStr0 += cssAnimationObject[obj0].cso;
+                        cssStr0 += cssAnimationObject[obj0].cdo;
+                    }
+                    if (cssAnimationObject[obj0].csc) {
+                        foundOneAnim = true;
+                        cssStr0 += cssAnimationObject[obj0].csc;
+                        cssStr0 += cssAnimationObject[obj0].cdc;
+                    }
+                }
+                cssStr0 += "\"";
+                if (foundOneAnim || (customCssFile !== "")) {
+                	// foud at least on animation or a custom defined css file, so put in in the generatde document
+                    var removeAnimFunc = "";
+                    var s1 = window.location.href;
+                    var s2 = s1.replace(s1.split("/").pop(),"");
+                    var isAbsolute = new RegExp('^([a-z]+://|//)');
+                    if (removeAfterLoadFunc) {
+                        // remove after Load flag is ON, createthe javascript function to remove the animation after completion
+                        removeAnimFunc += "function removeAnimation(event) {";
+//                        removeAnimFunc += "console.log(\"Animation End: \", event);";
+                        removeAnimFunc += "var thisId = event.currentTarget.getAttribute('id');";
+//                        removeAnimFunc += "console.log(\"Animation End: \", thisId);";
+                        removeAnimFunc += "this.classList.remove('" + animClassPrefix + "'+thisId+'Start');";
+                        removeAnimFunc += "this.removeEventListener('animationend', removeAnimation);";
+                        removeAnimFunc += "}";
+                    }
+                    var injectCssStr = 'var cssStyle = document.createElement("style");';
+                    var injectCssAnimStr = '';
+                    if (isAbsolute.test(customCssFile) === false) {
+                    	customCssFile = s2 + customCssFile;
+                    }
+	                if (foundOneAnim) {
+	                    // add prefixfree
+	                    var scriptPrefixFree = new CKEDITOR.htmlParser.element('script', {
+	                        src: pluginPath + 'css/prefixfree.min.js'
+	                    });
+	                    evt.data.dataValue.add(scriptPrefixFree);
+                        injectCssStr += 'cssStyle.innerHTML = ' + cssStr0 + ';';
+                        injectCssStr += 'document.getElementsByTagName("head")[0].appendChild(cssStyle);';
+                        injectCssAnimStr += 'var fileref = document.createElement("link");';
+                        injectCssAnimStr += 'fileref.setAttribute("rel", "stylesheet");';
+                        injectCssAnimStr += 'fileref.setAttribute("type", "text/css");';
+                        injectCssAnimStr += 'fileref.setAttribute("href", "' + pluginPath + 'css/cssanim.css");';
+                        injectCssAnimStr += 'document.getElementsByTagName("head")[0].appendChild(fileref);';
+                    }
+                    if (customCssFile !== "") {
+                        injectCssAnimStr += 'var customCss = document.createElement("link");';
+                        injectCssAnimStr += 'customCss.setAttribute("rel", "stylesheet");';
+                        injectCssAnimStr += 'customCss.setAttribute("type", "text/css");';
+                        injectCssAnimStr += 'customCss.setAttribute("href", "' + customCssFile + '");';
+                        injectCssAnimStr += 'customCss.setAttribute("title", "' + customCssScriptTitle + '");';
+                        injectCssAnimStr += 'document.getElementsByTagName("head")[0].appendChild(customCss);';
+                    }
+                    var scriptAddCssAnimations = new CKEDITOR.htmlParser.element('script', {
+                        title: animScriptTitle
+                    });
+                    var cssAnimationsFunction = '\n' + "(function(){ " + removeAnimFunc + injectCssStr + injectCssAnimStr + rmFuncStr + "})();";
+                    scriptAddCssAnimations.setHtml(cssAnimationsFunction);
+                    evt.data.dataValue.add(scriptAddCssAnimations);
+                }
+            }, null, null, 14);
+        }
+    });
+    CKEDITOR.on('instanceReady', function (e) {
+        //console.log("---------------- CKEDITOR instanceReady ---------------");
+        var head = document.getElementsByTagName("head")[0];
+        var js = document.createElement('script');
+        js.src = CKEDITOR.basePath + 'plugins/cssanim/parseCSS3AnimationShorthand.min.js';
+        js.type = 'text/javascript';
+        head.appendChild(js);
+        e.editor.document.$.addEventListener("contextmenu", function (/*event*/) {
+            //console.log("----------------------contextmenu--------------------------", event);
+        	CKEDITOR.plugins.cssanim.cleanHighlight();
+        });
+    });
+//    CKEDITOR.on('contentDom', function ( /*event*/ ) {
+//        //console.log("---------------- CKEDITOR contentDom ---------------");
+//    });
+//    CKEDITOR.on('loaded', function ( /*event*/ ) {
+//        //console.log("---------------- CKEDITOR loaded ---------------");
+//    });
+//    CKEDITOR.on('pluginsLoaded', function ( /*event*/ ) {
+//        //console.log("---------------- CKEDITOR pluginsLoaded ---------------");
+//    });
+    CKEDITOR.plugins.cssanim = {
+        ckEditor: null,
+        documentEditor: null,
+        //    cssanimAddAnimDialog : null,
+        curSelectedElement: null,
+        managePending: false,
+        pendingChanges: [],	// will store the change done in addAnim dialog in case of a cancel in main dialog (undo list)
+        cssAnimDialog: null,
+        allAvailableAnimsCssAnim: [],
+        allAvailableAnimsCustom: [],
+        allAvailableAnimsConflict: [],
+        init: function (editor) {
+            this.ckEditor = editor;
+            this.documentEditor = editor.document;
+            var i, j;
+            // get cssanim.css style sheet
+            for (i = document.styleSheets.length - 1; i >= 0; i -= 1) {
+                if ((document.styleSheets[i].href) && (document.styleSheets[i].href.indexOf("cssanim.css") >= 0)) {
+                    for (j = 0; j < document.styleSheets[i].cssRules.length; j += 1) {
+                        if ((document.styleSheets[i].cssRules[j].type === CSSRule.KEYFRAMES_RULE)
+                        	|| (document.styleSheets[i].cssRules[j].type === CSSRule.WEBKIT_KEYFRAMES_RULE)) {
+                            this.allAvailableAnimsCssAnim.push(document.styleSheets[i].cssRules[j].name);
+                        }
+                    }
+                }
+            }
+        },
+        setHighLightBgColor: function (color) {
+            this.ckEditor.config.highlightBGColor = color;
+        },
+        setHighLightBorder: function (b) {
+            this.ckEditor.config.highlightBorder = b +'px';
+        },
+        cleanHighlight: function () {
+        	var highLightedElem = this.documentEditor.$.getElementsByClassName('highlight_tag');
+        	var i, elem;
+            for (i=0; i<highLightedElem.length; i+=1) {
+            	elem = highLightedElem[i];
+                elem.classList.remove('highlight_tag');
+                elem.style.backgroundColor =  elem.getAttribute("data-animation-bg");
+                elem.style.outline = elem.getAttribute("data-animation-outline");
+                elem.getAttribute("data-animation-bg");
+                elem.getAttribute("data-animation-outline");
+            }
+        },
+       getSurroundElem: function (editor, elem) {
+            var elemAsc = editor.getSelection().getStartElement().getAscendant(elem, true);
+            return elemAsc;
+        },
+        setCssAnimDialog: function (dialog) {
+            //console.log("setCssAnim", dialog);
+            this.cssAnimDialog = dialog;
+        },
+        refreshCssAnimDialogAnimationsTab: function () {
+            this.cssAnimDialog.selectPage('tab-allowed-tags');
+            this.cssAnimDialog.selectPage('tab-doc-animations');
+        },
+        runHighLightElem: function (elem) {
+        	//console.log('runHighLightElem', elem);
+        	CKEDITOR.plugins.cssanim.cleanHighlight();
+            elem.setAttribute("data-animation-bg", elem.getStyle('backgroundColor'));
+            elem.setAttribute("data-animation-outline", elem.getStyle('outline'));
+            elem.setStyle('backgroundColor', this.ckEditor.config.highlightBGColor);
+            elem.setStyle('outlineWidth', this.ckEditor.config.highlightBorder);
+            elem.setStyle('outlineStyle', 'solid');
+            elem.setStyle('outlineColor', 'red');
+            elem.addClass('highlight_tag');
+        },
+        runHighLightElemById: function (id) {
+        	CKEDITOR.plugins.cssanim.cleanHighlight();
+            var elem = CKEDITOR.plugins.cssanim.documentEditor.getById(id);
+           if (!elem) {
+                return;
+            }
+           CKEDITOR.plugins.cssanim.runHighLightElem(elem);
+        },
+        getAllAnimElem: function() {
+        	var elems = this.documentEditor.$.getElementsByClassName('ckAnimClass_');
+        	var cssAnimationObject = {};
+            var obj, element;
+            var i;
+            for (i=0; i <elems.length; i+=1) {
+            	element = elems[i];
+	            obj = element.getAttribute('data-animation');
+	            obj = decodeURIComponent(obj);
+	            obj = JSON.parse(obj);
+	            obj.elem = element;
+	            cssAnimationObject[element.id] = obj;
+            }
+            return cssAnimationObject;
+        },
+        runAddAnimDialogById: function (id) {
+            var elem = CKEDITOR.plugins.cssanim.documentEditor.getById(id);
+            if (!elem) {
+                return;
+            }
+            this.curSelectedElement = elem;
+            this.managePending = true;
+            this.ckEditor.execCommand("_myLaunchAddAnimDialog");
+        },
+        // Show the "add animations" dialog
+        runAddAnimDialog: function (editor, elem) {
+        	CKEDITOR.plugins.cssanim.cleanHighlight();
+            //        editor.curSelectedElement = elem;
+            this.curSelectedElement = elem;
+            this.managePending = false;
+            editor.execCommand("_myLaunchAddAnimDialog");
+        },
+        // Show the "add animations" dialog
+        runAddAnimElem: function (elem, res) {
+            var animStart = res.animStart;
+            var animClick = res.animClick;
+            var animOver = res.animOver;
+            var ral = res.ral;
+            var data;
+            var cssObj;
+            if (animStart || animClick || animOver) {
+            	// FAKE ELEMENTS OLD CODE
+                if (elem.getId() === null) {
+                    elem.setAttribute('id', generateUUID());
+                }
+                // Remove anim class in case it already exists
+                elem.removeClass(animClassPrefix);
+                elem.removeClass(animClassPrefix + elem.getId());
+                elem.removeClass(animClassPrefix + elem.getId() + 'Start');
+                // add the new one
+                elem.addClass(animClassPrefix);
+                elem.addClass(animClassPrefix + elem.getId());
+                cssObj = {};
+                cssObj.id = elem.getId();
+                if (animStart) {
+                    elem.addClass(animClassPrefix + elem.getId() + 'Start');
+                    cssObj.css = '.' + animClassPrefix + elem.getId() + 'Start';
+                    cssObj.cds = "{animation: " + animStart + ";}";
+                    cssObj.ral = ral;
+                }
+                if (animOver) {
+                    cssObj.cso = '.' + animClassPrefix + elem.getId() + ':hover';
+                    if ((animOver.indexOf('cssAnimPause') >= 0) || (animOver.indexOf('animation-play-state') >= 0)) {
+                    	cssObj.cdo = "{animation-play-state: paused" + ";}";
+                    } else {
+                        cssObj.cdo = "{animation: " + animOver + ";}";
+                    }
+                }
+                if (animClick) {
+                    cssObj.csc = '.' + animClassPrefix + elem.getId() + ':active';
+                    if ((animClick.indexOf('cssAnimPause') >= 0) || (animClick.indexOf('animation-play-state') >= 0)) {
+                    	cssObj.cdc = "{animation-play-state: paused" + ";}";
+                    } else {
+                        cssObj.cdc = "{animation: " + animClick + ";}";
+                    }
+                }
+                //console.log("runAddAnimElem cssObj ------------>", cssObj);
+                data = encodeURIComponent(JSON.stringify(cssObj));
+                elem.setAttribute("data-animation", data);
+            } else {
+                // no more animation, so remove them all
+                //console.log("REMOVE ALL ANIMATIONS ->", elem);
+                CKEDITOR.plugins.cssanim.runRemoveAnimElem(elem);
+            }
+        },
+        // Restore animation, called if any pending changes need to be restored
+        restoreAnimOnElemById: function (id, anim) {
+            //console.log("RESTORE ANIMATIONS ->", id);
+            var elem = CKEDITOR.plugins.cssanim.documentEditor.getById(id);
+            var res = {};
+            var exp;
+            res.animStart = null;
+            res.animClick = null;
+            res.animOver = null;
+            res.ral = anim.ral;
+            if (anim.cds) {
+                exp = anim.cds.replace('{animation:', '').replace('}', '').replace(';', '').trim();
+                res.animStart = exp;
+            }
+            if (anim.cdo) {
+                exp = anim.cdo.replace('{animation:', '').replace('}', '').replace(';', '').trim();
+                res.animOver = exp;
+            }
+            if (anim.cdc) {
+                exp = anim.cdc.replace('{animation:', '').replace('}', '').replace(';', '').trim();
+                res.animClick = exp;
+            }
+            //console.log("restoreAnimOnElemById RES =", res);
+            CKEDITOR.plugins.cssanim.runAddAnimElem(elem, res);
+        },
+        // Open the Add Animation Dialog
+        runEditAnimDialog: function (editor, elem) {
+            //console.log("runEditAnimDialog exec:", elem);
+        	CKEDITOR.plugins.cssanim.cleanHighlight();
+            this.curSelectedElement = elem;
+            editor.execCommand("_myLaunchAddAnimDialog");
+        },
+        runRemoveAnimElem: function (elem) {
+            //console.log("runRemoveAnimElem exec:", elem);
+        	CKEDITOR.plugins.cssanim.cleanHighlight();
+            //console.log("runRemoveAnimElem -> ", elem.classList);
+        	  // FAKE ELEMENTS OLD CODE
+//            if (elem.dataset.ckeRealElementType !== undefined) {
+//                //        var realElem = CKEDITOR.dom.element.createFromHtml(decodeURIComponent(
+//                //            elem.dataset.ckeRealelement ), this.document );
+//                //          while (realElem.$.classList.length) {
+//                //            realElem.$.classList.remove(realElem.$.classList[0]);
+//                //          }
+//                //        delete cssAnimationObject[realElem.$.id];
+//                //        realElem.$.removeAttribute("data-animation");
+//                //        elem.dataset.ckeRealelement = encodeURIComponent(realElem.$.outerHTML);
+//                //        elem.classList.remove(animClassPrefix+elem.id);
+//            } else {
+//          if (elem.dataset.ckeRealElementType === undefined) {
+            var i;
+            for (i=elem.$.classList.length - 1; i>=0; i-=1) {
+                if (elem.$.classList[i].indexOf(animClassPrefix) >= 0) {
+                    elem.$.classList.remove(elem.$.classList[i]);
+                }
+            }
+//            delete cssAnimationObject[elem.getId()];
+            elem.removeAttribute("data-animation");
+//            }
+        },
+//        getSelectedElem: function () {
+//        },
+        // Get list of TAGS from element to top.
+        getPathToTop: function (element) {
+            var nodes = [];
+            var elem = element;
+            var cnt = 0;
+            while (elem) {
+                if (elem.getName() === "body") {
+                    break;
+                }
+                // Skip Fake Elements !!
+                if (elem.$.dataset.ckeRealElementType === undefined) {
+                	nodes[cnt] = elem;
+	                cnt += 1;
+                }
+                elem = elem.getParent();
+            }
+            return nodes;
+        },
+        // Called when clicking the "test It" button in the add animation dialog
+        cssanimAddAnimDialogTest: function (btn) {
+            var testDiv = this.cssanimAddAnimDialog.getElementsByClassName('cke_cssanim_container_div')[0];
+            var tab, sel, inp;
+            var animName, animTiming, animDir, animDuration, animDelay, animIter;
+            if (btn.name === "overBtn") {
+                tab = this.cssanimAddAnimDialog.querySelector('#cssanimAddAnimDialogTabOver');
+                sel = tab.getElementsByTagName('select');
+                inp = tab.getElementsByTagName('input');
+//                animName = myGetNamedItem(sel,'anim_O').selectedOptions[0].value;
+//                animTiming = myGetNamedItem(sel,'timing_O').selectedOptions[0].value;
+//                animDir = myGetNamedItem(sel,'direction_O').selectedOptions[0].value;
+                animName = myGetNamedItem(sel,'anim_O').value;
+                animTiming = myGetNamedItem(sel,'timing_O').value;
+                animDir = myGetNamedItem(sel,'direction_O').value;
+                animDuration = myGetNamedItem(inp,'duration_O').value + "s";
+                animDelay = myGetNamedItem(inp,'delay_O').value + "s";
+                animIter = myGetNamedItem(inp,'iteration_O').value;
+                if (animIter === "0") {
+                    animIter = "infinite";
+                }
+                if (animName !== "none") {
+                	testDiv.style.animation = "none";
+                	testDiv.style.webkitAnimation = "none";
+                    setTimeout(function() {
+                        testDiv.style.animation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir;
+                        testDiv.style.webkitAnimation =  animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir;
+                   }, 10);
+                } else {
+                    testDiv.style.animation = "none";
+                	testDiv.style.webkitAnimation = "none";
+                }
+            }
+            if (btn.name === "clickBtn") {
+                tab = this.cssanimAddAnimDialog.querySelector('#cssanimAddAnimDialogTabClick');
+                sel = tab.getElementsByTagName('select');
+                inp = tab.getElementsByTagName('input');
+//                animName = myGetNamedItem(sel,'anim_C').selectedOptions[0].value;
+//                animTiming = myGetNamedItem(sel,'timing_C').selectedOptions[0].value;
+//                animDir = myGetNamedItem(sel,'direction_C').selectedOptions[0].value;
+                animName = myGetNamedItem(sel,'anim_C').value;
+                animTiming = myGetNamedItem(sel,'timing_C').value;
+                animDir = myGetNamedItem(sel,'direction_C').value;
+                animDuration = myGetNamedItem(inp,'duration_C').value + "s";
+                animDelay = myGetNamedItem(inp,'delay_C').value + "s";
+                animIter = myGetNamedItem(inp,'iteration_C').value;
+                if (animIter === "0") {
+                    animIter = "infinite";
+                }
+                if (animName !== "none") {
+                	testDiv.style.animation = "none";
+                	testDiv.style.webkitAnimation = "none";
+                  setTimeout(function() {
+                        testDiv.style.animation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir;
+                        testDiv.style.webkitAnimation =  animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir;
+                   }, 10);
+                } else {
+                    testDiv.style.animation = "none";
+                	testDiv.style.webkitAnimation = "none";
+               }
+            }
+            if (btn.name === "loadBtn") {
+                tab = this.cssanimAddAnimDialog.querySelector('#cssanimAddAnimDialogTabLoad');
+                sel = tab.getElementsByTagName('select');
+                inp = tab.getElementsByTagName('input');
+//                animName = myGetNamedItem(sel,'anim_L').selectedOptions[0].value;
+//                animTiming = myGetNamedItem(sel,'timing_L').selectedOptions[0].value;
+//                animDir = myGetNamedItem(sel,'direction_L').selectedOptions[0].value;
+                animName = myGetNamedItem(sel,'anim_L').value;
+                animTiming = myGetNamedItem(sel,'timing_L').value;
+                animDir = myGetNamedItem(sel,'direction_L').value;
+                animDuration = myGetNamedItem(inp,'duration_L').value + "s";
+                animDelay = myGetNamedItem(inp,'delay_L').value + "s";
+                animIter = myGetNamedItem(inp,'iteration_L').value;
+                if (animIter === "0") {
+                    animIter = "infinite";
+                }
+                if (animName !== "none") {
+                    // "bounceOut 3s linear 0s 1 normal";
+                    testDiv.addEventListener('animationend', function () {
+                        this.style.animation = "none";
+                    }, false);
+                	testDiv.style.animation = "none";
+                	testDiv.style.webkitAnimation = "none";
+                    setTimeout(function() {
+                        testDiv.style.animation = animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir;
+                        testDiv.style.webkitAnimation =  animName + " " + animDuration + " " + animTiming + " " + animDelay + " " + animIter + " " + animDir;
+                    }, 10);
+                } else {
+                    testDiv.style.animation = "none";
+                	testDiv.style.webkitAnimation = "none";
+               }
+            }
+        },
+        getAvailableAnims: function () {
+            var res = {};
+            res.allAvailableAnimsCssAnim = this.allAvailableAnimsCssAnim;
+            res.allAvailableAnimsCustom = this.allAvailableAnimsCustom;
+            res.allAvailableAnimsConflict = this.allAvailableAnimsConflict;
+            return res;
+        },
+        // load a custom css file // Asynchronous process !!!
+        getCustomCss: function (obj) {
+            var divRes;
+            var cssFile;
+            function addCustomCssFunc(cssFile, css, obj) {
+                // do some cleaning !!
+                var candidates = document.getElementsByTagName('style');
+                var i, j, k;
+                // need to remove the css element from document if already present !!!!
+                for (i = candidates.length - 1; i >= 0; i-=1) {
+                    if (candidates[i].title === 'cssCustom') {
+                        candidates[i].parentNode.removeChild(candidates[i]);
+                        break;
+                    }
+                }
+                if (CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM) {
+                    delete CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM;
+                }
+                CKEDITOR.plugins.cssanim.allAvailableAnimsCustom = [];
+                CKEDITOR.plugins.cssanim.allAvailableAnimsConflict = [];
+                var style = document.createElement('style');
+                style.title = "cssCustom";
+                style.type = 'text/css';
+                style.innerHTML = css;
+                document.getElementsByTagName('head')[0].appendChild(style);
+                var cssAnims = [];
+                var htmlRes = "";
+                var liStr;
+                var cssAnimStyleSheet = null;
+                var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim;
+                // get cssanim.css style sheet
+                for (i = document.styleSheets.length - 1; i >= 0; i-=1) {
+                    if ((document.styleSheets[i].href) && (document.styleSheets[i].href.indexOf("cssanim.css") >= 0)) {
+                        cssAnimStyleSheet = document.styleSheets[i];
+                        break;
+                    }
+                }
+                var tmpArr = [];
+                for (i = document.styleSheets.length - 1; i >= 0; i-=1) {
+                    if (document.styleSheets[i].title === 'cssCustom') {
+                        for (j = 0; j < document.styleSheets[i].cssRules.length; j += 1) {
+                            if ((document.styleSheets[i].cssRules[j].type === CSSRule.KEYFRAMES_RULE)
+                            	|| (document.styleSheets[i].cssRules[j].type === CSSRule.WEBKIT_KEYFRAMES_RULE)){
+                            	if (tmpArr.indexOf(document.styleSheets[i].cssRules[j].name) < 0) {
+	                                liStr = '<li>' + document.styleSheets[i].cssRules[j].name + '</li>';
+	                                cssAnims.push(document.styleSheets[i].cssRules[j].name);
+	                                tmpArr.push(document.styleSheets[i].cssRules[j].name);
+	                                CKEDITOR.plugins.cssanim.allAvailableAnimsCustom.push(document.styleSheets[i].cssRules[j].name);
+	                                if (cssAnimStyleSheet) {
+	                                    for (k = 0; k < cssAnimStyleSheet.cssRules.length; k += 1) {
+	                                        if (cssAnimStyleSheet.cssRules[k].name === document.styleSheets[i].cssRules[j].name) {
+	                                            liStr = '<li><span style="color:tomato">' + document.styleSheets[i].cssRules[j].name + ' '+lang.warningOverride+'</span></li>';
+	                                            CKEDITOR.plugins.cssanim.allAvailableAnimsConflict.push(document.styleSheets[i].cssRules[j].name);
+	                                            break;
+	                                        }
+	                                    }
+	                                }
+	                                htmlRes += liStr;
+                            	}
+                            }
+                        }
+                    }
+                }
+                //console.log("Rules : ", cssAnims);
+                if (htmlRes.length > 0) {
+                    htmlRes = '<span style="font-weight:bold;">'+lang.animationFound+'</span><br>' + '<ul style="text-align: center; margin:5px; margin-left: 25px;">' + htmlRes + '</ul>';
+                    // here we need to add the css in the generated document and in allowedAnims.CUSTOM
+                    CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM = cssAnims;
+                } else {
+                    htmlRes = '<span style="font-weight:bold; color:red;">'+lang.noAnimationFound+'</span><br>';
+                    if (CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM) {
+                        delete CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM;
+                    }
+                }
+                customCssFile = cssFile.trim();
+                CKEDITOR.plugins.cssanim.ckEditor.config.customCssFilePath = cssFile.trim();
+                if (obj) {
+                    divRes = obj.querySelector("#cssResultsDiv");
+                    divRes.innerHTML = htmlRes;
+                    divRes.style.display = "block";
+                }
+            }
+            // css file asynchronous load is done
+//            function transferCompleteSlow(evt) {
+//                setTimeout(function(){ transferComplete(evt); }, 3000);
+//            }
+            function transferComplete(evt) {
+                CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('pointer-events', '');
+//                CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('outline', '');
+                var www = CKEDITOR.plugins.cssanim.ckEditor.document.getBody();
+                www.setStyle('backgroundColor', '');
+               var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim;
+               if (evt.target.status === 200) {
+                    var css = evt.target.response;
+                    addCustomCssFunc(cssFile, css, obj);
+                    //      		  var res = checkAnimValidity();
+                    //    		  //console.log("checkAnimValidity resArray ----> ", res);
+                } else {
+                	if (obj && divRes) {
+	                    var htmlRes = '<span style="font-weight:bold; color:tomato;">'+ lang.errorLoadingFile + evt.target.responseURL + '</span>';
+	                    htmlRes += '<br><span style="font-weight:bold; color:red;">'+lang.loadStatus + evt.target.status + '</span><br>';
+	                    divRes.innerHTML = htmlRes;
+	                    divRes.style.display = "block";
+                	}
+                    alert(lang.specFile + evt.target.responseURL + lang.fileNotAvailable);
+                }
+            }
+            // css file asynchronous load failed
+           function transferFailed(/*evt*/) {
+               var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim;
+               alert(lang.fileCannotAccess);
+               CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('pointer-events', '');
+               CKEDITOR.plugins.cssanim.ckEditor.container.setStyle('outline', '');
+           }
+            if (Object.prototype.toString.apply(obj) === "[object String]") {
+                cssFile = obj.trim();
+                obj = null;
+            } else {
+                divRes = obj.querySelector("#cssResultsDiv");
+                divRes.innerHTML = "";
+                divRes.style.display = "none";
+                if (divRes.parentElement.elements['cssName'].value !== "undefined") {
+                	cssFile = divRes.parentElement.elements['cssName'].value.trim();
+                } else {
+                	cssFile = "";
+                }
+            }
+            var ext = cssFile.substr(cssFile.lastIndexOf('.') + 1);
+            //console.log("ext", ext);
+            if (cssFile === this.ckEditor.config.customCssFilePath) {
+                if (this.allAvailableAnimsCustom.length > 0) {
+                    return;
+                }
+            }
+            if (!cssFile) {
+            	// No more custon css file, so remove it from dom and clean related animation from
+            	// the list of available animations
+                // alert("Removing Custom CSS File !");
+                var candidates = document.getElementsByTagName('style');
+                var i;
+                // need to remove the css element from document if already present !!!!
+                for (i = candidates.length - 1; i >= 0; i-=1) {
+                    if (candidates[i].title === 'cssCustom') {
+                        candidates[i].parentNode.removeChild(candidates[i]);
+                        break;
+                    }
+                }
+                if (CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM) {
+                    delete CKEDITOR.plugins.cssanim.ckEditor.config.allowedAnimations.CUSTOM;
+                }
+                customCssFile = "";
+                this.ckEditor.config.customCssFilePath = "";
+                CKEDITOR.plugins.cssanim.allAvailableAnimsCustom = [];
+                CKEDITOR.plugins.cssanim.allAvailableAnimsConflict = [];
+                //    		res = checkAnimValidity();
+                return;
+            }
+            var lang = CKEDITOR.plugins.cssanim.ckEditor.lang.cssanim;
+           if (ext !== "css") {
+                alert(lang.fileSpecified + cssFile + lang.fileExtInvalid);
+                return;
+            }
+            // low connection test
+            //cssFile = 'http://deelay.me/1000/'+cssFile;
+            this.ckEditor.container.setStyle('pointer-events', 'none');
+            var www = this.documentEditor.getBody();
+            www.setStyle('backgroundColor', 'Gainsboro ');
+
+            var oReq = new XMLHttpRequest();
+            oReq.onload = transferComplete;
+            oReq.onerror = transferFailed;
+            oReq.open("GET", cssFile, true);
+            oReq.send();
+        }
+    };
+})();
diff --git a/plugins/ckeditor4/enhancedcolorbutton/CHANGES.md b/plugins/ckeditor4/enhancedcolorbutton/CHANGES.md
new file mode 100644
index 0000000..45dcb89
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/CHANGES.md
@@ -0,0 +1,24 @@
+# Changelog - Enhanced Color Button
+
+All source code from `Color Button` plugin version 4.5.9 was copied to this plugin and modified for giving user convenience. All of changes is described in following.
+
+## Version 1.1
+
+- Released on 2016/06/21
+- Changes:
+  * Adds Test Cases with benderjs for test automation.
+  * Changes plugin name in language files.
+- Bugfix
+  * Fixes color indicator of quick apply button for supporting multi CKEditor instances in same page.
+  * Fixes CSS for supporting IE8-.
+
+## Version 1.0
+
+- Released on 2016/05/25.
+- Changes:
+  * Loads css file for icons apearence.
+  * Adds new icons and commands for quick color change with a color previously selected.
+  * Adds child nodes to toolbar icons of Enhanced Color Button for showing a color lastly used for color change.
+  * Shows lastly used color onto toolbar icons and saves the color for quick apply buttons.
+  * Save reference of local function, which applies font color with user selected color, to be called in newly added commands.
+  * Adds `css/content.css` file for toolbar icon appearance.
diff --git a/plugins/ckeditor4/enhancedcolorbutton/LICENSE.md b/plugins/ckeditor4/enhancedcolorbutton/LICENSE.md
new file mode 100644
index 0000000..0cb15a8
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/LICENSE.md
@@ -0,0 +1,1643 @@
+Software License Agreement
+==========================
+
+Source code of `Color Button` plugin was copied and modified in this plugin for giving user convenience. Changes are elaborated in [Changes.md](Changes.md) file.
+
+-----
+
+CKEditor - The text editor for Internet - http://ckeditor.com
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify
+and distribute this software under any of the above licenses.
+
+Sources of Intellectual Property Included in CKEditor
+-----------------------------------------------------
+
+Where not otherwise indicated, all CKEditor content is authored by
+CKSource engineers and consists of CKSource-owned intellectual
+property. In some specific instances, CKEditor will incorporate work
+done by developers outside of CKSource with their express permission.
+
+The following libraries are included in CKEditor under the MIT license (see Appendix D):
+
+* CKSource Samples Framework (included in the samples) - Copyright (c) 2014-2016, CKSource - Frederico Knabben.
+* PicoModal (included in `samples/js/sf.js`) - Copyright (c) 2012 James Frasca.
+* CodeMirror (included in the samples) - Copyright (C) 2014 by Marijn Haverbeke <marijnh@gmail.com> and others.
+
+Parts of code taken from the following libraries are included in CKEditor under the MIT license (see Appendix D):
+
+* jQuery (inspired the domReady function, ckeditor_base.js) - Copyright (c) 2011 John Resig, http://jquery.com/
+
+The following libraries are included in CKEditor under the SIL Open Font License, Version 1.1 (see Appendix E):
+
+* Font Awesome (included in the toolbar configurator) - Copyright (C) 2012 by Dave Gandy.
+
+The following libraries are included in CKEditor under the BSD-3 License (see Appendix F):
+
+* highlight.js (included in the `codesnippet` plugin) - Copyright (c) 2006, Ivan Sagalaev.
+* YUI Library (included in the `uicolor` plugin) - Copyright (c) 2009, Yahoo! Inc.
+
+(Ignore this line: %REMOVE_START%)
+
+The following libraries are included only in the development version of CKEditor under the MIT license (see Appendix D):
+
+* CKBuilder - Copyright (c) 2012-2016, CKSource - Frederico Knabben.
+* CKLangTool - Copyright (c) 2012-2016, CKSource - Frederico Knabben.
+* Optimist - Copyright 2010 James Halliday (mail@substack.net).
+* Q - Copyright 2009–2014 Kristopher Michael Kowal.
+* Tmp - Copyright (c) 2014 KARASZI István.
+* Mkdirp - Copyright 2010 James Halliday (mail@substack.net).
+* Bender.js - Copyright (c) 2014-2016, CKSource - Frederico Knabben.
+* benderjs-coverage - Copyright (c) 2014-2016, CKSource - Frederico Knabben.
+* benderjs-jquery - Copyright (c) 2014-2016, CKSource - Frederico Knabben.
+* benderjs-sinon - Copyright (c) 2014-2016, CKSource - Frederico Knabben.
+* benderjs-yui - Copyright (c) 2014-2016, CKSource - Frederico Knabben.
+* Grunt - Copyright (c) 2015 "Cowboy" Ben Alman.
+* grunt-contrib-imagemin - Copyright (c) 2014 Sindre Sorhus, contributors.
+* grunt-jscs - Copyright (c) 2014 Gustavo Henke, contributors.
+* grunt-contrib-jshint - Copyright (c) 2014 "Cowboy" Ben Alman, contributors.
+* grunt-contrib-less - Copyright (c) 2014 Tyler Kellen, contributors.
+* grunt-contrib-watch - Copyright (c) 2014 "Cowboy" Ben Alman, contributors.
+* grunt-contrib-concat - Copyright (c) 2014 "Cowboy" Ben Alman, contributors.
+* grunt-jsduck - Copyright (c) 2012 Dmitry Pashkevich, contributors.
+* grunt-githooks - Copyright (c) 2013 Romaric Pascal.
+* jQuery Form Plugin (used in jquery adapter test) - Copyright (c) 2012 M. Alsup
+
+The following libraries are included only in the development version of CKEditor under the BSD-3 License (see Appendix F):
+
+* ShellJS - Copyright (c) 2012, Artur Adib <aadib@mozilla.com>.
+
+The following libraries are included only in the development version of CKEditor under the Apache License (see Appendix G):
+
+* Less.js - Copyright (c) 2009-2014 Alexis Sellier & The Core Less Team.
+
+(Ignore this line: %REMOVE_END%)
+
+Trademarks
+----------
+
+CKEditor is a trademark of CKSource - Frederico Knabben. All other brand
+and product names are trademarks, registered trademarks or service
+marks of their respective holders.
+
+---
+
+Appendix A: The GPL License
+---------------------------
+
+```
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software-to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+GNU GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+```
+
+Appendix B: The LGPL License
+----------------------------
+
+```
+GNU LESSER GENERAL PUBLIC LICENSE
+Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software-to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages-typically libraries-of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+GNU LESSER GENERAL PUBLIC LICENSE
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+END OF TERMS AND CONDITIONS
+```
+
+Appendix C: The MPL License
+---------------------------
+
+```
+MOZILLA PUBLIC LICENSE
+Version 1.1
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation,  method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your")  means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code;  or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a)  under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of  Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d)    Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2)  separate from the Contributor Version;
+          3)  for infringements caused by: i) third party modifications of
+          Contributor Version or ii)  the combination of Modifications made
+          by that Contributor with other software  (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+               (c)    Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code.  If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice.  If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A.  You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code.  You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1.  This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2.  If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant")  alleging that:
+
+     (a)  such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant.  If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b)  any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3.  If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4.  In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed".  "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``The contents of this file are subject to the Mozilla Public License
+     Version 1.1 (the "License"); you may not use this file except in
+     compliance with the License. You may obtain a copy of the License at
+     http://www.mozilla.org/MPL/
+
+     Software distributed under the License is distributed on an "AS IS"
+     basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
+     License for the specific language governing rights and limitations
+     under the License.
+
+     The Original Code is ______________________________________.
+
+     The Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the  "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above.  If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting  the provisions above and replace  them with the notice and
+     other provisions required by the [___] License.  If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+```
+
+Appendix D: The MIT License
+---------------------------
+
+```
+The MIT License (MIT)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+```
+
+Appendix E: The SIL Open Font License Version 1.1
+---------------------------------------------
+
+```
+SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
+-----------------------------------------------------------
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
+```
+
+Appendix F: The BSD-3 License
+-----------------------------
+
+```
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+```
+
+(Ignore this line: %REMOVE_START%)
+
+Appendix G: The Apache License
+------------------------------
+
+```
+
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+       Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+       stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+       that You distribute, all copyright, patent, trademark, and
+       attribution notices from the Source form of the Work,
+       excluding those notices that do not pertain to any part of
+       the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+       distribution, then any Derivative Works that You distribute must
+       include a readable copy of the attribution notices contained
+       within such NOTICE file, excluding those notices that do not
+       pertain to any part of the Derivative Works, in at least one
+       of the following places: within a NOTICE text file distributed
+       as part of the Derivative Works; within the Source form or
+       documentation, if provided along with the Derivative Works; or,
+       within a display generated by the Derivative Works, if and
+       wherever such third-party notices normally appear. The contents
+       of the NOTICE file are for informational purposes only and
+       do not modify the License. You may add Your own attribution
+       notices within Derivative Works that You distribute, alongside
+       or as an addendum to the NOTICE text from the Work, provided
+       that such additional attribution notices cannot be construed
+       as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+```
\ No newline at end of file
diff --git a/plugins/ckeditor4/enhancedcolorbutton/README.md b/plugins/ckeditor4/enhancedcolorbutton/README.md
new file mode 100644
index 0000000..51d0cb6
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/README.md
@@ -0,0 +1,37 @@
+# Enhanced Color Button
+
+Enhanced Color Button is a CKEditor's plugin developed based on
+Color Button plugin (version 4.5.8 released on March 31, 2016) provided by
+CKSource team and it introduces additional features in addition to Color Button.
+Source code of `Color Button` plugin was copied and modified in this plugin for giving user convenience. Changes are elaborated in (Changes.md)[Changes.md] file.
+
+## New Features
+
+* New Quick Apply Button
+
+  User can apply font color and background color of font through one click.
+
+* Indicator of current used color
+
+  Toolbar icons show a color lastly used by user for easy use of Quick Apply Button.
+
+## Installation
+
+To use this plugin, "colorbutton" plugin should be removed first.
+Then, follow below steps.
+
+1. Copy whole `enhancedcolorbutton` plugin folder into `./plugins` folder of CKEditor.
+2. Add below line into `config.js` file.
+
+```js
+config.removePlugins = 'colorbutton';
+config.extraPlugins = 'enhancedcolorbutton';
+```
+
+## Changelog
+
+Refer to this link, [CHANGES](CHANGES.md).
+
+## Software License Agreement
+
+Please refer to this link, [LICENSE](LICENSE.md).
diff --git a/plugins/ckeditor4/enhancedcolorbutton/css/content.css b/plugins/ckeditor4/enhancedcolorbutton/css/content.css
new file mode 100644
index 0000000..a40d26a
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/css/content.css
@@ -0,0 +1,34 @@
+.cke_button_icon.cke_button__textcolor2_icon {
+	width: 0px;
+}
+.cke_button_icon.cke_button__bgcolor2_icon {
+	width: 0px;
+}
+
+.enhanced_color_button_text_color {
+	position: relative !important;
+	width: 14px !important;
+	height: 2px !important;
+	left: 1px !important;
+	bottom: 1px !important;
+	border: 1px solid #c0c0c0 !important;
+}
+.enhanced_color_button_bg_color {
+	position: relative !important;
+	width: 14px !important;
+	height: 14px !important;
+	left: 1px !important;
+	bottom: 14px !important;
+	border-radius: 3px !important;
+	margin-top: 1px !important;
+	/* IE 8 */
+	-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)" !important;
+	/* IE 5-7 */
+	filter: alpha(opacity=50) !important;
+	/* Netscape */
+	-moz-opacity: 0.5 !important;
+	/* Safari 1.x */
+	-khtml-opacity: 0.5 !important;
+	/* Good browsers */
+	opacity: 0.5 !important;
+}
diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor.png
new file mode 100644
index 0000000000000000000000000000000000000000..a313938d8bc0f72e3086129816be628c1a7aa100
GIT binary patch
literal 906
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b
zKpodXn9)gNb_D|i(_&8-#}JFtQzz}uj!u_ooge-^DqQH0zz6-<)9V%<lZevMpDWY6
z;BCenzGFLd<8B?y-X3IS;r*BW#N1h1yfqe<cudo2+*W94vM&2Yl19|4wVOh`H?Ch&
zZC`u8)|y2#`9;At=I55}&YN$l_y&i3t=IGoo^@7jNha3^why`=m^$JYiyyFE@Mey4
zh^Sy?z}hhTsJJ*eRf%MeNh}Qt94FE?cW@{j`uWq+-QE3r=-10U2M!%NbnVe2rE`{R
zwyJnK?Y_J1_U+sI-@JQgmu(^yD04g_yYSq`EnAMfdGkiBf#1O1e*W9C-9PsAue$X5
zYsU85>a%ChzR$cZY&CCQUfw-z5w41P?OUf6?UZ3iVdydBVPjsiRU)}#QODlBd+#^q
zH@yG${rmj*`1t;sV-g`#1s!KCvv~f&hCi8S`t<4b@87(!5uBK*5O&pluHSRNjS)58
zE^hw>4{o?^P@9|kR-}TfhO>rmPF_yVA3@iP9ao}$cO9^7FYYt(-MMR57e7D${7w(U
z`RD5&&DpF}6dqc?E<~%mXy=_B9X%X>6c28wx0_$jXLDt`>VFmyfd|KD&Ya1=`|i8n
zjsiU#Mu&OVY&}wV=HS7DoEL;9_N%L_M+XN7|L-~>CU7-t>-}GU?XKN=$QUogQ*HVD
zUsQa2y^fNjL|gn+ucgsSP49oNR{G=+D*toe|HiG~-X2W&(6!+Hd+Fygi4y;mm5S#*
zf4hFonmb&FCj_lL^6FKV<@D3Fib~#>FJI<;F0(gIpK*eU=ZX-m{e8W?cg>Dncv&JL
zFP{z!O_M3lD`R3}1Y8A=CQWo&=rC)U{oJ{8_iFdLHLG~;TNk!^YS`+pegZ5vAL<<j
z#_CKTwgwf?Ge?dbIr;J9$4s@!KYOb7_O05ta+UpxEdS8Q*H<iG#UEO_FmC;4c>#$l
zuM*Qa!hmU5wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4SiplHI`c
zjiezrKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5%
N;OXk;vd$@?2>>a?jz9na

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/bgcolor2.png
new file mode 100644
index 0000000000000000000000000000000000000000..a313938d8bc0f72e3086129816be628c1a7aa100
GIT binary patch
literal 906
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b
zKpodXn9)gNb_D|i(_&8-#}JFtQzz}uj!u_ooge-^DqQH0zz6-<)9V%<lZevMpDWY6
z;BCenzGFLd<8B?y-X3IS;r*BW#N1h1yfqe<cudo2+*W94vM&2Yl19|4wVOh`H?Ch&
zZC`u8)|y2#`9;At=I55}&YN$l_y&i3t=IGoo^@7jNha3^why`=m^$JYiyyFE@Mey4
zh^Sy?z}hhTsJJ*eRf%MeNh}Qt94FE?cW@{j`uWq+-QE3r=-10U2M!%NbnVe2rE`{R
zwyJnK?Y_J1_U+sI-@JQgmu(^yD04g_yYSq`EnAMfdGkiBf#1O1e*W9C-9PsAue$X5
zYsU85>a%ChzR$cZY&CCQUfw-z5w41P?OUf6?UZ3iVdydBVPjsiRU)}#QODlBd+#^q
zH@yG${rmj*`1t;sV-g`#1s!KCvv~f&hCi8S`t<4b@87(!5uBK*5O&pluHSRNjS)58
zE^hw>4{o?^P@9|kR-}TfhO>rmPF_yVA3@iP9ao}$cO9^7FYYt(-MMR57e7D${7w(U
z`RD5&&DpF}6dqc?E<~%mXy=_B9X%X>6c28wx0_$jXLDt`>VFmyfd|KD&Ya1=`|i8n
zjsiU#Mu&OVY&}wV=HS7DoEL;9_N%L_M+XN7|L-~>CU7-t>-}GU?XKN=$QUogQ*HVD
zUsQa2y^fNjL|gn+ucgsSP49oNR{G=+D*toe|HiG~-X2W&(6!+Hd+Fygi4y;mm5S#*
zf4hFonmb&FCj_lL^6FKV<@D3Fib~#>FJI<;F0(gIpK*eU=ZX-m{e8W?cg>Dncv&JL
zFP{z!O_M3lD`R3}1Y8A=CQWo&=rC)U{oJ{8_iFdLHLG~;TNk!^YS`+pegZ5vAL<<j
z#_CKTwgwf?Ge?dbIr;J9$4s@!KYOb7_O05ta+UpxEdS8Q*H<iG#UEO_FmC;4c>#$l
zuM*Qa!hmU5wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxMwk+y-6m4SiplHI`c
zjiezrKP5A*61N7MpUg*q8YDqB1m~xflqVLYGL)B>>t*I;7bhncr0V4trO$q6BL!5%
N;OXk;vd$@?2>>a?jz9na

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor.png
new file mode 100644
index 0000000000000000000000000000000000000000..54b3e18c4602dbf05cf21e897477998211c02dfa
GIT binary patch
literal 2169
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

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/bgcolor2.png
new file mode 100644
index 0000000000000000000000000000000000000000..54b3e18c4602dbf05cf21e897477998211c02dfa
GIT binary patch
literal 2169
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

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fc56bcbd2185cdf319554c4edfdb161c87fe8b7
GIT binary patch
literal 1725
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
To9;Xs00000NkvXXu0mjf;)5CX

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/hidpi/textcolor2.png
new file mode 100644
index 0000000000000000000000000000000000000000..8fc56bcbd2185cdf319554c4edfdb161c87fe8b7
GIT binary patch
literal 1725
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
To9;Xs00000NkvXXu0mjf;)5CX

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor.png b/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d8e45907bca4c92dc43ced827d1896e968ec27c
GIT binary patch
literal 813
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b
zKpodXn9)gNb_D|ilbffDV~EA+-r)1z(vBkk?#=c*<~!%C)=p0iiF~)!?Pe;jUe%vh
zv3qa)687=M%KuIWCr^>9e((4pU!W_%>*PkkRROP0PSR+JE#JJ^+V+ah&4h*T&5YmI
z+TW{oPESvt!K1`v?Ciy<)U;LXn8cDyuIyaB@O$ApOIxl<&3m5u-Q3(<f``rE*b|2e
zp@x~8lazk>xJ>J~S3Qq?t?7)P_qjSajwTg`+=+;fuMb*(y|Ae0Q&-2msBGr@-;2X4
zChd*U>+jpWHHtS-Br!8{B~t=7!;&+*pB0vAs>WPr6`VSK`t<G13JyzyerEMF24%4`
z$Q(a;^Ms~^bN$T>lbGZ)>;L}!>mMkh`nGJhrwf1Vb=Qp%EP_uNXGr!ve$baXeP&^8
z?cc>$vsw>7{7{sa$H#Dw;lP(KCCi$Q&n{R0U%2^Z4DVrqzjgm3x8MFNz;dwJqHp7l
z9XotoQrDJlQ?7~s9CO`u{q^6mtFQW9zjn<J7#jP(|Nfh}H?Ev<kHmIuMh6bYwWb{z
zX?1mVtFOOKEH3_h``*2K)2#zGZrb!|Pt@9NjBglzteD~?(Kcam8ZhV>*3Z0YX>Z?e
zW@dITHa1q)J&@)6=M5V+7+ii?a_ef=S3$wGzxLfve72u!%~oKb?%2DxR%>aC;WHzi
z!^!u*C$4RM|J%aG=8t5X;*_9oFJ7z=IBqyYvZS!Eapg))jim}pS&Wr^gH=46R6I8c
zaw{sdoY-@`kSCdENe~x1JNvc}Ek}-tw>O=f@9uK*k9+>60F4Dep=@47muVmNe`Ig!
zz2?Yj8@m>m%v4KUBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE
zOoB)na`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$
OMGT&<elF{r5}E)t`BzH-

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor2.png b/plugins/ckeditor4/enhancedcolorbutton/icons/textcolor2.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d8e45907bca4c92dc43ced827d1896e968ec27c
GIT binary patch
literal 813
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b
zKpodXn9)gNb_D|ilbffDV~EA+-r)1z(vBkk?#=c*<~!%C)=p0iiF~)!?Pe;jUe%vh
zv3qa)687=M%KuIWCr^>9e((4pU!W_%>*PkkRROP0PSR+JE#JJ^+V+ah&4h*T&5YmI
z+TW{oPESvt!K1`v?Ciy<)U;LXn8cDyuIyaB@O$ApOIxl<&3m5u-Q3(<f``rE*b|2e
zp@x~8lazk>xJ>J~S3Qq?t?7)P_qjSajwTg`+=+;fuMb*(y|Ae0Q&-2msBGr@-;2X4
zChd*U>+jpWHHtS-Br!8{B~t=7!;&+*pB0vAs>WPr6`VSK`t<G13JyzyerEMF24%4`
z$Q(a;^Ms~^bN$T>lbGZ)>;L}!>mMkh`nGJhrwf1Vb=Qp%EP_uNXGr!ve$baXeP&^8
z?cc>$vsw>7{7{sa$H#Dw;lP(KCCi$Q&n{R0U%2^Z4DVrqzjgm3x8MFNz;dwJqHp7l
z9XotoQrDJlQ?7~s9CO`u{q^6mtFQW9zjn<J7#jP(|Nfh}H?Ev<kHmIuMh6bYwWb{z
zX?1mVtFOOKEH3_h``*2K)2#zGZrb!|Pt@9NjBglzteD~?(Kcam8ZhV>*3Z0YX>Z?e
zW@dITHa1q)J&@)6=M5V+7+ii?a_ef=S3$wGzxLfve72u!%~oKb?%2DxR%>aC;WHzi
z!^!u*C$4RM|J%aG=8t5X;*_9oFJ7z=IBqyYvZS!Eapg))jim}pS&Wr^gH=46R6I8c
zaw{sdoY-@`kSCdENe~x1JNvc}Ek}-tw>O=f@9uK*k9+>60F4Dep=@47muVmNe`Ig!
zz2?Yj8@m>m%v4KUBT7;dOH!?pi&B9UgOP!uv95u+u7OF2p}CcTF%W4R7+Dz@_%7KE
zOoB)na`RI%(<*Umu=&Y+1gJq0WJ7R%T1k0gQ7S`udAVL@UUqSEVnM22eo^}DcQ#T$
OMGT&<elF{r5}E)t`BzH-

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/af.js b/plugins/ckeditor4/enhancedcolorbutton/lang/af.js
new file mode 100644
index 0000000..449b4ed
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/af.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'af', {
+	auto: 'Outomaties',
+	bgColorTitle: 'Agtergrondkleur',
+	colors: {
+		'000': 'Swart',
+		'800000': 'Meroen',
+		'8B4513': 'Sjokoladebruin',
+		'2F4F4F': 'Donkerleisteengrys',
+		'008080': 'Blougroen',
+		'000080': 'Vlootblou',
+		'4B0082': 'Indigo',
+		'696969': 'Donkergrys',
+		B22222: 'Rooibaksteen',
+		A52A2A: 'Bruin',
+		DAA520: 'Donkergeel',
+		'006400': 'Donkergroen',
+		'40E0D0': 'Turkoois',
+		'0000CD': 'Middelblou',
+		'800080': 'Pers',
+		'808080': 'Grys',
+		F00: 'Rooi',
+		FF8C00: 'Donkeroranje',
+		FFD700: 'Goud',
+		'008000': 'Groen',
+		'0FF': 'Siaan',
+		'00F': 'Blou',
+		EE82EE: 'Viooltjieblou',
+		A9A9A9: 'Donkergrys',
+		FFA07A: 'Ligsalm',
+		FFA500: 'Oranje',
+		FFFF00: 'Geel',
+		'00FF00': 'Lemmetjie',
+		AFEEEE: 'Ligturkoois',
+		ADD8E6: 'Ligblou',
+		DDA0DD: 'Pruim',
+		D3D3D3: 'Liggrys',
+		FFF0F5: 'Linne',
+		FAEBD7: 'Ivoor',
+		FFFFE0: 'Liggeel',
+		F0FFF0: 'Heuningdou',
+		F0FFFF: 'Asuur',
+		F0F8FF: 'Ligte hemelsblou',
+		E6E6FA: 'Laventel',
+		FFF: 'Wit'
+	},
+	more: 'Meer Kleure...',
+	panelTitle: 'Kleure',
+	textColorTitle: 'Tekskleur'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ar.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ar.js
new file mode 100644
index 0000000..ac8536e
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ar.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ar', {
+	auto: 'تلقائي',
+	bgColorTitle: 'لون الخلفية',
+	colors: {
+		'000': 'أسود',
+		'800000': 'كستنائي',
+		'8B4513': 'بني فاتح',
+		'2F4F4F': 'رمادي أردوازي غامق',
+		'008080': 'أزرق مخضر',
+		'000080': 'أزرق داكن',
+		'4B0082': 'كحلي',
+		'696969': 'رمادي داكن',
+		B22222: 'طوبي',
+		A52A2A: 'بني',
+		DAA520: 'ذهبي داكن',
+		'006400': 'أخضر داكن',
+		'40E0D0': 'فيروزي',
+		'0000CD': 'أزرق متوسط',
+		'800080': 'بنفسجي غامق',
+		'808080': 'رمادي',
+		F00: 'أحمر',
+		FF8C00: 'برتقالي داكن',
+		FFD700: 'ذهبي',
+		'008000': 'أخضر',
+		'0FF': 'تركواز',
+		'00F': 'أزرق',
+		EE82EE: 'بنفسجي',
+		A9A9A9: 'رمادي شاحب',
+		FFA07A: 'برتقالي وردي',
+		FFA500: 'برتقالي',
+		FFFF00: 'أصفر',
+		'00FF00': 'ليموني',
+		AFEEEE: 'فيروزي شاحب',
+		ADD8E6: 'أزرق فاتح',
+		DDA0DD: 'بنفسجي فاتح',
+		D3D3D3: 'رمادي فاتح',
+		FFF0F5: 'وردي فاتح',
+		FAEBD7: 'أبيض عتيق',
+		FFFFE0: 'أصفر فاتح',
+		F0FFF0: 'أبيض مائل للأخضر',
+		F0FFFF: 'سماوي',
+		F0F8FF: 'لبني',
+		E6E6FA: 'أرجواني',
+		FFF: 'أبيض'
+	},
+	more: 'ألوان إضافية...',
+	panelTitle: 'Colors',
+	textColorTitle: 'لون النص'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/bg.js b/plugins/ckeditor4/enhancedcolorbutton/lang/bg.js
new file mode 100644
index 0000000..bf683c2
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/bg.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'bg', {
+	auto: 'Автоматично',
+	bgColorTitle: 'Фонов цвят',
+	colors: {
+		'000': 'Черно',
+		'800000': 'Кестеняво',
+		'8B4513': 'Светлокафяво',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Индиго',
+		'696969': 'Тъмно сиво',
+		B22222: 'Огнено червено',
+		A52A2A: 'Кафяво',
+		DAA520: 'Златисто',
+		'006400': 'Тъмно зелено',
+		'40E0D0': 'Тюркуазено',
+		'0000CD': 'Средно синьо',
+		'800080': 'Пурпурно',
+		'808080': 'Сиво',
+		F00: 'Червено',
+		FF8C00: 'Тъмно оранжево',
+		FFD700: 'Златно',
+		'008000': 'Зелено',
+		'0FF': 'Светло синьо',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Още цветове',
+	panelTitle: 'Цветове',
+	textColorTitle: 'Цвят на шрифт'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/bn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/bn.js
new file mode 100644
index 0000000..674ac6c
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/bn.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'bn', {
+	auto: 'অটোমেটিক',
+	bgColorTitle: 'বেকগ্রাউন্ড রং',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'আরও রং...',
+	panelTitle: 'Colors',
+	textColorTitle: 'টেক্স্ট রং'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/bs.js b/plugins/ckeditor4/enhancedcolorbutton/lang/bs.js
new file mode 100644
index 0000000..47e4566
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/bs.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'bs', {
+	auto: 'Automatska',
+	bgColorTitle: 'Boja pozadine',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Više boja...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Boja teksta'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ca.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ca.js
new file mode 100644
index 0000000..ce76261
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ca.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ca', {
+	auto: 'Automàtic',
+	bgColorTitle: 'Color de Fons',
+	colors: {
+		'000': 'Negre',
+		'800000': 'Grana',
+		'8B4513': 'Marró sella',
+		'2F4F4F': 'Gris pissarra fosca',
+		'008080': 'Blau xarxet',
+		'000080': 'Blau marí',
+		'4B0082': 'Indi',
+		'696969': 'Gris Fosc',
+		B22222: 'Foc Maó',
+		A52A2A: 'Marró',
+		DAA520: 'Solidago',
+		'006400': 'Verd Fosc',
+		'40E0D0': 'Turquesa',
+		'0000CD': 'Blau 1/2',
+		'800080': 'Lila',
+		'808080': 'Gris',
+		F00: 'Vermell',
+		FF8C00: 'Taronja Fosc',
+		FFD700: 'Or',
+		'008000': 'Verd',
+		'0FF': 'Cian',
+		'00F': 'Blau',
+		EE82EE: 'Violat',
+		A9A9A9: 'Gris clar',
+		FFA07A: 'Salmó clar',
+		FFA500: 'Taronja',
+		FFFF00: 'Groc',
+		'00FF00': 'Verd Llima',
+		AFEEEE: 'Turquesa Pàl·lid',
+		ADD8E6: 'Blau Clar',
+		DDA0DD: 'Pruna',
+		D3D3D3: 'Gris Clar',
+		FFF0F5: 'Lavanda rosat',
+		FAEBD7: 'Blanc Antic',
+		FFFFE0: 'Groc Clar',
+		F0FFF0: 'Verd Pàl·lid',
+		F0FFFF: 'Atzur',
+		F0F8FF: 'Cian pàlid',
+		E6E6FA: 'Lavanda',
+		FFF: 'Blanc'
+	},
+	more: 'Més Colors...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Color del Text'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/cs.js b/plugins/ckeditor4/enhancedcolorbutton/lang/cs.js
new file mode 100644
index 0000000..2e68510
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/cs.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'cs', {
+	auto: 'Automaticky',
+	bgColorTitle: 'Barva pozadí',
+	colors: {
+		'000': 'Černá',
+		'800000': 'Kaštanová',
+		'8B4513': 'Sedlová hněď',
+		'2F4F4F': 'Tmavě bledě šedá',
+		'008080': 'Čírka',
+		'000080': 'Námořnická modř',
+		'4B0082': 'Inkoustová',
+		'696969': 'Tmavě šedá',
+		B22222: 'Pálená cihla',
+		A52A2A: 'Hnědá',
+		DAA520: 'Zlatý prut',
+		'006400': 'Tmavě zelená',
+		'40E0D0': 'Tyrkisová',
+		'0000CD': 'Středně modrá',
+		'800080': 'Purpurová',
+		'808080': 'Šedá',
+		F00: 'Červená',
+		FF8C00: 'Tmavě oranžová',
+		FFD700: 'Zlatá',
+		'008000': 'Zelená',
+		'0FF': 'Azurová',
+		'00F': 'Modrá',
+		EE82EE: 'Fialová',
+		A9A9A9: 'Kalně šedá',
+		FFA07A: 'Světle lososová',
+		FFA500: 'Oranžová',
+		FFFF00: 'Žlutá',
+		'00FF00': 'Limetková',
+		AFEEEE: 'Bledě tyrkisová',
+		ADD8E6: 'Světle modrá',
+		DDA0DD: 'Švestková',
+		D3D3D3: 'Světle šedá',
+		FFF0F5: 'Levandulově ruměnná',
+		FAEBD7: 'Antická bílá',
+		FFFFE0: 'Světle žlutá',
+		F0FFF0: 'Medová rosa',
+		F0FFFF: 'Azurová',
+		F0F8FF: 'Alenčina modrá',
+		E6E6FA: 'Levandulová',
+		FFF: 'Bílá'
+	},
+	more: 'Více barev...',
+	panelTitle: 'Barvy',
+	textColorTitle: 'Barva textu'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/cy.js b/plugins/ckeditor4/enhancedcolorbutton/lang/cy.js
new file mode 100644
index 0000000..3ff5bd0
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/cy.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'cy', {
+	auto: 'Awtomatig',
+	bgColorTitle: 'Lliw Cefndir',
+	colors: {
+		'000': 'Du',
+		'800000': 'Marwn',
+		'8B4513': 'Brown Cyfrwy',
+		'2F4F4F': 'Llechen Tywyll',
+		'008080': 'Corhwyad',
+		'000080': 'Nefi',
+		'4B0082': 'Indigo',
+		'696969': 'Llwyd Tywyll',
+		B22222: 'Bric Tân',
+		A52A2A: 'Brown',
+		DAA520: 'Rhoden Aur',
+		'006400': 'Gwyrdd Tywyll',
+		'40E0D0': 'Gwyrddlas',
+		'0000CD': 'Glas Canolig',
+		'800080': 'Porffor',
+		'808080': 'Llwyd',
+		F00: 'Coch',
+		FF8C00: 'Oren Tywyll',
+		FFD700: 'Aur',
+		'008000': 'Gwyrdd',
+		'0FF': 'Cyan',
+		'00F': 'Glas',
+		EE82EE: 'Fioled',
+		A9A9A9: 'Llwyd Pwl',
+		FFA07A: 'Samwn Golau',
+		FFA500: 'Oren',
+		FFFF00: 'Melyn',
+		'00FF00': 'Leim',
+		AFEEEE: 'Gwyrddlas Golau',
+		ADD8E6: 'Glas Golau',
+		DDA0DD: 'Eirinen',
+		D3D3D3: 'Llwyd Golau',
+		FFF0F5: 'Gwrid Lafant',
+		FAEBD7: 'Gwyn Hynafol',
+		FFFFE0: 'Melyn Golau',
+		F0FFF0: 'Melwn Gwyrdd Golau',
+		F0FFFF: 'Aswr',
+		F0F8FF: 'Glas Alys',
+		E6E6FA: 'Lafant',
+		FFF: 'Gwyn'
+	},
+	more: 'Mwy o Liwiau...',
+	panelTitle: 'Lliwiau',
+	textColorTitle: 'Lliw Testun'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/da.js b/plugins/ckeditor4/enhancedcolorbutton/lang/da.js
new file mode 100644
index 0000000..be92787
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/da.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'da', {
+	auto: 'Automatisk',
+	bgColorTitle: 'Baggrundsfarve',
+	colors: {
+		'000': 'Sort',
+		'800000': 'Mørkerød',
+		'8B4513': 'Mørk orange',
+		'2F4F4F': 'Dark Slate Grå',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Mørkegrå',
+		B22222: 'Scarlet / Rød',
+		A52A2A: 'Brun',
+		DAA520: 'Guld',
+		'006400': 'Mørkegrøn',
+		'40E0D0': 'Tyrkis',
+		'0000CD': 'Mellemblå',
+		'800080': 'Lilla',
+		'808080': 'Grå',
+		F00: 'Rød',
+		FF8C00: 'Mørk orange',
+		FFD700: 'Guld',
+		'008000': 'Grøn',
+		'0FF': 'Cyan',
+		'00F': 'Blå',
+		EE82EE: 'Violet',
+		A9A9A9: 'Matgrå',
+		FFA07A: 'Laksefarve',
+		FFA500: 'Orange',
+		FFFF00: 'Gul',
+		'00FF00': 'Lime',
+		AFEEEE: 'Mat tyrkis',
+		ADD8E6: 'Lyseblå',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Lysegrå',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antikhvid',
+		FFFFE0: 'Lysegul',
+		F0FFF0: 'Gul / Beige',
+		F0FFFF: 'Himmeblå',
+		F0F8FF: 'Alice blue',
+		E6E6FA: 'Lavendel',
+		FFF: 'Hvid'
+	},
+	more: 'Flere farver...',
+	panelTitle: 'Farver',
+	textColorTitle: 'Tekstfarve'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js b/plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js
new file mode 100644
index 0000000..8658c8f
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/de-ch.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'de-ch', {
+	auto: 'Automatisch',
+	bgColorTitle: 'Hintergrundfarbe',
+	colors: {
+		'000': 'Schwarz',
+		'800000': 'Kastanienbraun',
+		'8B4513': 'Braun',
+		'2F4F4F': 'Dunkles Schiefergrau',
+		'008080': 'Blaugrün',
+		'000080': 'Marineblau',
+		'4B0082': 'Indigo',
+		'696969': 'Dunkelgrau',
+		B22222: 'Ziegelrot',
+		A52A2A: 'Braun',
+		DAA520: 'Goldgelb',
+		'006400': 'Dunkelgrün',
+		'40E0D0': 'Türkis',
+		'0000CD': 'Mittelblau',
+		'800080': 'Lila',
+		'808080': 'Grau',
+		F00: 'Rot',
+		FF8C00: 'Dunkelorange',
+		FFD700: 'Gold',
+		'008000': 'Grün',
+		'0FF': 'Cyan',
+		'00F': 'Blau',
+		EE82EE: 'Violett',
+		A9A9A9: 'Dunkelgrau',
+		FFA07A: 'Helles Lachsrosa',
+		FFA500: 'Orange',
+		FFFF00: 'Gelb',
+		'00FF00': 'Lime',
+		AFEEEE: 'Blasstürkis',
+		ADD8E6: 'Hellblau',
+		DDA0DD: 'Pflaumenblau',
+		D3D3D3: 'Hellgrau',
+		FFF0F5: 'Lavendel',
+		FAEBD7: 'Antik Weiss',
+		FFFFE0: 'Hellgelb',
+		F0FFF0: 'Honigtau',
+		F0FFFF: 'Azurblau',
+		F0F8FF: 'Alice Blau',
+		E6E6FA: 'Lavendel',
+		FFF: 'Weiss'
+	},
+	more: 'Weitere Farben...',
+	panelTitle: 'Farben',
+	textColorTitle: 'Textfarbe'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/de.js b/plugins/ckeditor4/enhancedcolorbutton/lang/de.js
new file mode 100644
index 0000000..6ee1305
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/de.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'de', {
+	auto: 'Automatisch',
+	bgColorTitle: 'Hintergrundfarbe',
+	colors: {
+		'000': 'Schwarz',
+		'800000': 'Kastanienbraun',
+		'8B4513': 'Braun',
+		'2F4F4F': 'Dunkles Schiefergrau',
+		'008080': 'Blaugrün',
+		'000080': 'Marineblau',
+		'4B0082': 'Indigo',
+		'696969': 'Dunkelgrau',
+		B22222: 'Ziegelrot',
+		A52A2A: 'Braun',
+		DAA520: 'Goldgelb',
+		'006400': 'Dunkelgrün',
+		'40E0D0': 'Türkis',
+		'0000CD': 'Mittelblau',
+		'800080': 'Lila',
+		'808080': 'Grau',
+		F00: 'Rot',
+		FF8C00: 'Dunkelorange',
+		FFD700: 'Gold',
+		'008000': 'Grün',
+		'0FF': 'Cyan',
+		'00F': 'Blau',
+		EE82EE: 'Violett',
+		A9A9A9: 'Dunkelgrau',
+		FFA07A: 'Helles Lachsrosa',
+		FFA500: 'Orange',
+		FFFF00: 'Gelb',
+		'00FF00': 'Lime',
+		AFEEEE: 'Blasstürkis',
+		ADD8E6: 'Hellblau',
+		DDA0DD: 'Pflaumenblau',
+		D3D3D3: 'Hellgrau',
+		FFF0F5: 'Lavendel',
+		FAEBD7: 'Antik Weiß',
+		FFFFE0: 'Hellgelb',
+		F0FFF0: 'Honigtau',
+		F0FFFF: 'Azurblau',
+		F0F8FF: 'Alice Blau',
+		E6E6FA: 'Lavendel',
+		FFF: 'Weiß'
+	},
+	more: 'Weitere Farben...',
+	panelTitle: 'Farben',
+	textColorTitle: 'Textfarbe'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/el.js b/plugins/ckeditor4/enhancedcolorbutton/lang/el.js
new file mode 100644
index 0000000..c3d76ed
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/el.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'el', {
+	auto: 'Αυτόματα',
+	bgColorTitle: 'Χρώμα Φόντου',
+	colors: {
+		'000': 'Μαύρο',
+		'800000': 'Καστανέρυθρο',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Βαθυκύανο',
+		'000080': 'Μπλε μαρέν',
+		'4B0082': 'Ινδικό',
+		'696969': 'Σκούρο Γκρι',
+		B22222: 'Ανοικτό Κόκκινο',
+		A52A2A: 'Καφέ',
+		DAA520: 'Golden Rod',
+		'006400': 'Σκούρο Πράσινο',
+		'40E0D0': 'Τυρκουάζ',
+		'0000CD': 'Medium Blue',
+		'800080': 'Μοβ',
+		'808080': 'Γκρι',
+		F00: 'Κόκκινο',
+		FF8C00: 'Σκούρο Πορτοκαλί',
+		FFD700: 'Χρυσαφί',
+		'008000': 'Πράσινο',
+		'0FF': 'Κυανό',
+		'00F': 'Μπλε',
+		EE82EE: 'Μενεξεδί',
+		A9A9A9: 'Ποντικί',
+		FFA07A: 'Ανοικτό Σομόν',
+		FFA500: 'Πορτοκαλί',
+		FFFF00: 'Κίτρινο',
+		'00FF00': 'Μοσχολέμονο',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Γαλάζιο',
+		DDA0DD: 'Δαμασκηνί',
+		D3D3D3: 'Ανοικτό Γκρι',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Ανοικτό Κίτρινο',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Γαλανό',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Ελαφρός Ιώδες',
+		FFF: 'Λευκό'
+	},
+	more: 'Περισσότερα Χρώματα…',
+	panelTitle: 'Χρώματα',
+	textColorTitle: 'Χρώμα Κειμένου'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js
new file mode 100644
index 0000000..8d462ab
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en-au.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en-au', {
+	auto: 'Automatic',
+	bgColorTitle: 'Background Colour',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'More Colours...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Text Colour'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js
new file mode 100644
index 0000000..244538d
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en-ca.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en-ca', {
+	auto: 'Automatic',
+	bgColorTitle: 'Background Colour',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'More Colours...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Text Colour'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js
new file mode 100644
index 0000000..a2406fe
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en-gb.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en-gb', {
+	auto: 'Automatic',
+	bgColorTitle: 'Background Colour',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Grey',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Grey',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Grey',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Grey',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'More Colours...',
+	panelTitle: 'Colours',
+	textColorTitle: 'Text Colour'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/en.js b/plugins/ckeditor4/enhancedcolorbutton/lang/en.js
new file mode 100644
index 0000000..71cb907
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/en.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'en', {
+	auto: 'Automatic',
+	bgColorTitle: 'Background Color',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'More Colors...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Text Color'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/eo.js b/plugins/ckeditor4/enhancedcolorbutton/lang/eo.js
new file mode 100644
index 0000000..cd20518
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/eo.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'eo', {
+	auto: 'AÅ­tomata',
+	bgColorTitle: 'Fona Koloro',
+	colors: {
+		'000': 'Nigra',
+		'800000': 'Kaŝtankolora',
+		'8B4513': 'Mezbruna',
+		'2F4F4F': 'Ardezgriza',
+		'008080': 'Marĉanaskolora',
+		'000080': 'Maristblua',
+		'4B0082': 'Indigokolora',
+		'696969': 'Malhelgriza',
+		B22222: 'Brikruĝa',
+		A52A2A: 'Bruna',
+		DAA520: 'Senbrilorkolora',
+		'006400': 'Malhelverda',
+		'40E0D0': 'Turkisblua',
+		'0000CD': 'Reĝblua',
+		'800080': 'Purpura',
+		'808080': 'Griza',
+		F00: 'Ruĝa',
+		FF8C00: 'Malheloranĝkolora',
+		FFD700: 'Orkolora',
+		'008000': 'Verda',
+		'0FF': 'Verdblua',
+		'00F': 'Blua',
+		EE82EE: 'Viola',
+		A9A9A9: 'Mezgriza',
+		FFA07A: 'Salmokolora',
+		FFA500: 'Oranĝkolora',
+		FFFF00: 'Flava',
+		'00FF00': 'Limetkolora',
+		AFEEEE: 'Helturkiskolora',
+		ADD8E6: 'Helblua',
+		DDA0DD: 'Prunkolora',
+		D3D3D3: 'Helgriza',
+		FFF0F5: 'Lavendkolora vangoŝminko',
+		FAEBD7: 'Antikvablanka',
+		FFFFE0: 'Helflava',
+		F0FFF0: 'Vintromelonkolora',
+		F0FFFF: 'Lazura',
+		F0F8FF: 'Aliceblua',
+		E6E6FA: 'Lavendkolora',
+		FFF: 'Blanka'
+	},
+	more: 'Pli da Koloroj...',
+	panelTitle: 'Koloroj',
+	textColorTitle: 'Teksta Koloro'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/es.js b/plugins/ckeditor4/enhancedcolorbutton/lang/es.js
new file mode 100644
index 0000000..c5507e1
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/es.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'es', {
+	auto: 'Automático',
+	bgColorTitle: 'Color de Fondo',
+	colors: {
+		'000': 'Negro',
+		'800000': 'Marrón oscuro',
+		'8B4513': 'Marrón tierra',
+		'2F4F4F': 'Pizarra Oscuro',
+		'008080': 'Azul verdoso',
+		'000080': 'Azul marino',
+		'4B0082': 'Añil',
+		'696969': 'Gris oscuro',
+		B22222: 'Ladrillo',
+		A52A2A: 'Marrón',
+		DAA520: 'Oro oscuro',
+		'006400': 'Verde oscuro',
+		'40E0D0': 'Turquesa',
+		'0000CD': 'Azul medio-oscuro',
+		'800080': 'Púrpura',
+		'808080': 'Gris',
+		F00: 'Rojo',
+		FF8C00: 'Naranja oscuro',
+		FFD700: 'Oro',
+		'008000': 'Verde',
+		'0FF': 'Cian',
+		'00F': 'Azul',
+		EE82EE: 'Violeta',
+		A9A9A9: 'Gris medio',
+		FFA07A: 'Salmón claro',
+		FFA500: 'Naranja',
+		FFFF00: 'Amarillo',
+		'00FF00': 'Lima',
+		AFEEEE: 'Turquesa claro',
+		ADD8E6: 'Azul claro',
+		DDA0DD: 'Violeta claro',
+		D3D3D3: 'Gris claro',
+		FFF0F5: 'Lavanda rojizo',
+		FAEBD7: 'Blanco antiguo',
+		FFFFE0: 'Amarillo claro',
+		F0FFF0: 'Miel',
+		F0FFFF: 'Azul celeste',
+		F0F8FF: 'Azul pálido',
+		E6E6FA: 'Lavanda',
+		FFF: 'Blanco'
+	},
+	more: 'Más Colores...',
+	panelTitle: 'Colores',
+	textColorTitle: 'Color de Texto'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/et.js b/plugins/ckeditor4/enhancedcolorbutton/lang/et.js
new file mode 100644
index 0000000..676e3b1
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/et.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'et', {
+	auto: 'Automaatne',
+	bgColorTitle: 'Tausta värv',
+	colors: {
+		'000': 'Must',
+		'800000': 'Kastanpruun',
+		'8B4513': 'Sadulapruun',
+		'2F4F4F': 'Tume paehall',
+		'008080': 'Sinakasroheline',
+		'000080': 'Meresinine',
+		'4B0082': 'Indigosinine',
+		'696969': 'Tumehall',
+		B22222: 'Å amottkivi',
+		A52A2A: 'Pruun',
+		DAA520: 'Kuldkollane',
+		'006400': 'Tumeroheline',
+		'40E0D0': 'Türkiissinine',
+		'0000CD': 'Keskmine sinine',
+		'800080': 'Lilla',
+		'808080': 'Hall',
+		F00: 'Punanae',
+		FF8C00: 'Tumeoranž',
+		FFD700: 'Kuldne',
+		'008000': 'Roheline',
+		'0FF': 'Tsüaniidsinine',
+		'00F': 'Sinine',
+		EE82EE: 'Violetne',
+		A9A9A9: 'Tuhm hall',
+		FFA07A: 'Hele lõhe',
+		FFA500: 'Oranž',
+		FFFF00: 'Kollane',
+		'00FF00': 'Lubja hall',
+		AFEEEE: 'Kahvatu türkiis',
+		ADD8E6: 'Helesinine',
+		DDA0DD: 'Ploomililla',
+		D3D3D3: 'Helehall',
+		FFF0F5: 'Lavendlipunane',
+		FAEBD7: 'Antiikvalge',
+		FFFFE0: 'Helekollane',
+		F0FFF0: 'Meloniroheline',
+		F0FFFF: 'Taevasinine',
+		F0F8FF: 'Beebisinine',
+		E6E6FA: 'Lavendel',
+		FFF: 'Valge'
+	},
+	more: 'Rohkem värve...',
+	panelTitle: 'Värvid',
+	textColorTitle: 'Teksti värv'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/eu.js b/plugins/ckeditor4/enhancedcolorbutton/lang/eu.js
new file mode 100644
index 0000000..2c72923
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/eu.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'eu', {
+	auto: 'Automatikoa',
+	bgColorTitle: 'Atzeko planoko kolorea',
+	colors: {
+		'000': 'Beltza',
+		'800000': 'Granatea',
+		'8B4513': 'Zela marroia',
+		'2F4F4F': 'Arbel gris iluna',
+		'008080': 'Urdin berdexka',
+		'000080': 'Urdin iluna',
+		'4B0082': 'Indigoa',
+		'696969': 'Gris iluna',
+		B22222: 'Adreilu erregogorra',
+		A52A2A: 'Marroia',
+		DAA520: 'Urrezko makila',
+		'006400': 'Berde iluna',
+		'40E0D0': 'Turkesa',
+		'0000CD': 'Urdin ertaina',
+		'800080': 'Morea',
+		'808080': 'Grisa',
+		F00: 'Gorria',
+		FF8C00: 'Laranja iluna',
+		FFD700: 'Urrea',
+		'008000': 'Berdea',
+		'0FF': 'Ziana',
+		'00F': 'Urdina',
+		EE82EE: 'Bioleta',
+		A9A9A9: 'Gris ahula',
+		FFA07A: 'Izokin-kolore argia',
+		FFA500: 'Laranja',
+		FFFF00: 'Horia',
+		'00FF00': 'Lima',
+		AFEEEE: 'Turkesa argia',
+		ADD8E6: 'Urdin argia',
+		DDA0DD: 'Aran-kolorea',
+		D3D3D3: 'Gris argia',
+		FFF0F5: 'Izpiliku-gorrixka',
+		FAEBD7: 'Zuri zaharra',
+		FFFFE0: 'Hori argia',
+		F0FFF0: 'Ezti-ihintza',
+		F0FFFF: 'Zeru-urdina',
+		F0F8FF: 'Alizia urdina',
+		E6E6FA: 'Izpilikua',
+		FFF: 'Zuria'
+	},
+	more: 'Kolore gehiago...',
+	panelTitle: 'Koloreak',
+	textColorTitle: 'Testu-kolorea'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fa.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fa.js
new file mode 100644
index 0000000..f54eb77
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fa.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fa', {
+	auto: 'خودکار',
+	bgColorTitle: 'رنگ پس​زمینه',
+	colors: {
+		'000': 'سیاه',
+		'800000': 'خرمایی',
+		'8B4513': 'قهوه​ای شکلاتی',
+		'2F4F4F': 'ارغوانی مایل به خاکستری',
+		'008080': 'آبی مایل به خاکستری',
+		'000080': 'آبی سیر',
+		'4B0082': 'نیلی',
+		'696969': 'خاکستری تیره',
+		B22222: 'آتش آجری',
+		A52A2A: 'قهوه​ای',
+		DAA520: 'میله​ی طلایی',
+		'006400': 'سبز تیره',
+		'40E0D0': 'فیروزه​ای',
+		'0000CD': 'آبی روشن',
+		'800080': 'ارغوانی',
+		'808080': 'خاکستری',
+		F00: 'قرمز',
+		FF8C00: 'نارنجی پررنگ',
+		FFD700: 'طلایی',
+		'008000': 'سبز',
+		'0FF': 'آبی مایل به سبز',
+		'00F': 'آبی',
+		EE82EE: 'بنفش',
+		A9A9A9: 'خاکستری مات',
+		FFA07A: 'صورتی کدر روشن',
+		FFA500: 'نارنجی',
+		FFFF00: 'زرد',
+		'00FF00': 'فسفری',
+		AFEEEE: 'فیروزه​ای رنگ پریده',
+		ADD8E6: 'آبی کمرنگ',
+		DDA0DD: 'آلویی',
+		D3D3D3: 'خاکستری روشن',
+		FFF0F5: 'بنفش کمرنگ',
+		FAEBD7: 'عتیقه سفید',
+		FFFFE0: 'زرد روشن',
+		F0FFF0: 'عسلی',
+		F0FFFF: 'لاجوردی',
+		F0F8FF: 'آبی براق',
+		E6E6FA: 'بنفش کمرنگ',
+		FFF: 'سفید'
+	},
+	more: 'رنگ​های بیشتر...',
+	panelTitle: 'رنگها',
+	textColorTitle: 'رنگ متن'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fi.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fi.js
new file mode 100644
index 0000000..3882033
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fi.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fi', {
+	auto: 'Automaattinen',
+	bgColorTitle: 'Taustaväri',
+	colors: {
+		'000': 'Musta',
+		'800000': 'Kastanjanruskea',
+		'8B4513': 'Satulanruskea',
+		'2F4F4F': 'Tumma liuskekivenharmaa',
+		'008080': 'Sinivihreä',
+		'000080': 'Laivastonsininen',
+		'4B0082': 'Indigonsininen',
+		'696969': 'Tummanharmaa',
+		B22222: 'Tiili',
+		A52A2A: 'Ruskea',
+		DAA520: 'Kultapiisku',
+		'006400': 'Tummanvihreä',
+		'40E0D0': 'Turkoosi',
+		'0000CD': 'Keskisininen',
+		'800080': 'Purppura',
+		'808080': 'Harmaa',
+		F00: 'Punainen',
+		FF8C00: 'Tumma oranssi',
+		FFD700: 'Kulta',
+		'008000': 'Vihreä',
+		'0FF': 'Syaani',
+		'00F': 'Sininen',
+		EE82EE: 'Violetti',
+		A9A9A9: 'Tummanharmaa',
+		FFA07A: 'Vaaleanlohenpunainen',
+		FFA500: 'Oranssi',
+		FFFF00: 'Keltainen',
+		'00FF00': 'Limetin vihreä',
+		AFEEEE: 'Haalea turkoosi',
+		ADD8E6: 'Vaaleansininen',
+		DDA0DD: 'Luumu',
+		D3D3D3: 'Vaaleanharmaa',
+		FFF0F5: 'Laventelinpunainen',
+		FAEBD7: 'Antiikinvalkoinen',
+		FFFFE0: 'Vaaleankeltainen',
+		F0FFF0: 'Hunajameloni',
+		F0FFFF: 'Asurinsininen',
+		F0F8FF: 'Alice Blue -sininen',
+		E6E6FA: 'Lavanteli',
+		FFF: 'Valkoinen'
+	},
+	more: 'Lisää värejä...',
+	panelTitle: 'Värit',
+	textColorTitle: 'Tekstiväri'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fo.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fo.js
new file mode 100644
index 0000000..cb55629
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fo.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fo', {
+	auto: 'Automatiskt',
+	bgColorTitle: 'Bakgrundslitur',
+	colors: {
+		'000': 'Svart',
+		'800000': 'Maroon',
+		'8B4513': 'Saðilsbrúnt',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Myrkagrátt',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brúnt',
+		DAA520: 'Gullstavur',
+		'006400': 'Myrkagrønt',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Meðal blátt',
+		'800080': 'Purple',
+		'808080': 'Grátt',
+		F00: 'Reytt',
+		FF8C00: 'Myrkt appelsingult',
+		FFD700: 'Gull',
+		'008000': 'Grønt',
+		'0FF': 'Cyan',
+		'00F': 'Blátt',
+		EE82EE: 'Violet',
+		A9A9A9: 'Døkt grátt',
+		FFA07A: 'Ljósur laksur',
+		FFA500: 'Appelsingult',
+		FFFF00: 'Gult',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Ljósablátt',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Ljósagrátt',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Klassiskt hvítt',
+		FFFFE0: 'Ljósagult',
+		F0FFF0: 'Hunangsdøggur',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blátt',
+		E6E6FA: 'Lavender',
+		FFF: 'Hvítt'
+	},
+	more: 'Fleiri litir...',
+	panelTitle: 'Litir',
+	textColorTitle: 'Tekstlitur'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js
new file mode 100644
index 0000000..f52f72a
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fr-ca.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fr-ca', {
+	auto: 'Automatique',
+	bgColorTitle: 'Couleur de fond',
+	colors: {
+		'000': 'Noir',
+		'800000': 'Marron',
+		'8B4513': 'Brun foncé',
+		'2F4F4F': 'Gris ardoise foncé',
+		'008080': 'Sarcelle',
+		'000080': 'Marine',
+		'4B0082': 'Indigo',
+		'696969': 'Gris foncé',
+		B22222: 'Rouge brique',
+		A52A2A: 'Brun',
+		DAA520: 'Doré',
+		'006400': 'Vert foncé',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Bleu',
+		'800080': 'Mauve',
+		'808080': 'Gris',
+		F00: 'Rouge',
+		FF8C00: 'Orange foncé',
+		FFD700: 'Or',
+		'008000': 'Vert',
+		'0FF': 'Cyan',
+		'00F': 'Bleu',
+		EE82EE: 'Violet',
+		A9A9A9: 'Gris pâle',
+		FFA07A: 'Saumon clair',
+		FFA500: 'Orange',
+		FFFF00: 'Jaune',
+		'00FF00': 'Vert lime',
+		AFEEEE: 'Turquoise pâle',
+		ADD8E6: 'Bleu pâle',
+		DDA0DD: 'Prune',
+		D3D3D3: 'Gris pâle',
+		FFF0F5: 'Bleu lavande',
+		FAEBD7: 'Blanc antique',
+		FFFFE0: 'Jaune pâle',
+		F0FFF0: 'Miel doré',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Bleu alice',
+		E6E6FA: 'Lavande',
+		FFF: 'Blanc'
+	},
+	more: 'Plus de couleurs...',
+	panelTitle: 'Couleurs',
+	textColorTitle: 'Couleur de texte'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/fr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/fr.js
new file mode 100644
index 0000000..60a10c8
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/fr.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'fr', {
+	auto: 'Automatique',
+	bgColorTitle: 'Couleur d\'arrière plan',
+	colors: {
+		'000': 'Noir',
+		'800000': 'Marron',
+		'8B4513': 'Brun moyen',
+		'2F4F4F': 'Vert sombre',
+		'008080': 'Canard',
+		'000080': 'Bleu marine',
+		'4B0082': 'Indigo',
+		'696969': 'Gris foncé',
+		B22222: 'Rouge brique',
+		A52A2A: 'Brun',
+		DAA520: 'Or terni',
+		'006400': 'Vert foncé',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Bleu royal',
+		'800080': 'Pourpre',
+		'808080': 'Gris',
+		F00: 'Rouge',
+		FF8C00: 'Orange foncé',
+		FFD700: 'Or',
+		'008000': 'Vert',
+		'0FF': 'Cyan',
+		'00F': 'Bleu',
+		EE82EE: 'Violet',
+		A9A9A9: 'Gris moyen',
+		FFA07A: 'Saumon',
+		FFA500: 'Orange',
+		FFFF00: 'Jaune',
+		'00FF00': 'Lime',
+		AFEEEE: 'Turquoise clair',
+		ADD8E6: 'Bleu clair',
+		DDA0DD: 'Prune',
+		D3D3D3: 'Gris clair',
+		FFF0F5: 'Fard Lavande',
+		FAEBD7: 'Blanc antique',
+		FFFFE0: 'Jaune clair',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azur',
+		F0F8FF: 'Bleu Alice',
+		E6E6FA: 'Lavande',
+		FFF: 'Blanc'
+	},
+	more: 'Plus de couleurs...',
+	panelTitle: 'Couleurs',
+	textColorTitle: 'Couleur de texte'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/gl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/gl.js
new file mode 100644
index 0000000..dd2a0a6
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/gl.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'gl', {
+	auto: 'Automático',
+	bgColorTitle: 'Cor do fondo',
+	colors: {
+		'000': 'Negro',
+		'800000': 'Marrón escuro',
+		'8B4513': 'Ocre',
+		'2F4F4F': 'Pizarra escuro',
+		'008080': 'Verde azulado',
+		'000080': 'Azul mariño',
+		'4B0082': 'Índigo',
+		'696969': 'Gris escuro',
+		B22222: 'Ladrillo',
+		A52A2A: 'Marrón',
+		DAA520: 'Dourado escuro',
+		'006400': 'Verde escuro',
+		'40E0D0': 'Turquesa',
+		'0000CD': 'Azul medio',
+		'800080': 'Púrpura',
+		'808080': 'Gris',
+		F00: 'Vermello',
+		FF8C00: 'Laranxa escuro',
+		FFD700: 'Dourado',
+		'008000': 'Verde',
+		'0FF': 'Cian',
+		'00F': 'Azul',
+		EE82EE: 'Violeta',
+		A9A9A9: 'Gris medio',
+		FFA07A: 'Salmón claro',
+		FFA500: 'Laranxa',
+		FFFF00: 'Amarelo',
+		'00FF00': 'Lima',
+		AFEEEE: 'Turquesa pálido',
+		ADD8E6: 'Azul claro',
+		DDA0DD: 'Violeta pálido',
+		D3D3D3: 'Verde claro',
+		FFF0F5: 'Lavanda vermello',
+		FAEBD7: 'Branco antigo',
+		FFFFE0: 'Amarelo claro',
+		F0FFF0: 'Mel',
+		F0FFFF: 'Azul celeste',
+		F0F8FF: 'Azul pálido',
+		E6E6FA: 'Lavanda',
+		FFF: 'Branco'
+	},
+	more: 'Máis cores...',
+	panelTitle: 'Cores',
+	textColorTitle: 'Cor do texto'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/gu.js b/plugins/ckeditor4/enhancedcolorbutton/lang/gu.js
new file mode 100644
index 0000000..8fc0de7
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/gu.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'gu', {
+	auto: 'સ્વચાલિત',
+	bgColorTitle: 'બૅકગ્રાઉન્ડ રંગ,',
+	colors: {
+		'000': 'કાળો',
+		'800000': 'મરુન',
+		'8B4513': 'છીક',
+		'2F4F4F': 'ડાર્ક સ્લેટ ગ્રે ',
+		'008080': 'ટીલ',
+		'000080': 'નેવી',
+		'4B0082': 'જામલી',
+		'696969': 'ડાર્ક ગ્રે',
+		B22222: 'ઈટ',
+		A52A2A: 'બ્રાઉન',
+		DAA520: 'ગોલ્ડન રોડ',
+		'006400': 'ડાર્ક લીલો',
+		'40E0D0': 'ટ્રકોઈસ',
+		'0000CD': 'મધ્યમ વાદળી',
+		'800080': 'પર્પલ',
+		'808080': 'ગ્રે',
+		F00: 'લાલ',
+		FF8C00: 'ડાર્ક ઓરંજ',
+		FFD700: 'ગોલ્ડ',
+		'008000': 'ગ્રીન',
+		'0FF': 'સાયન',
+		'00F': 'વાદળી',
+		EE82EE: 'વાયોલેટ',
+		A9A9A9: 'ડીમ ',
+		FFA07A: 'લાઈટ સાલમન',
+		FFA500: 'ઓરંજ',
+		FFFF00: 'પીળો',
+		'00FF00': 'લાઈમ',
+		AFEEEE: 'પેલ કોઈસ',
+		ADD8E6: 'લાઈટ બ્લુ',
+		DDA0DD: 'પલ્મ',
+		D3D3D3: 'લાઈટ ગ્રે',
+		FFF0F5: 'લવંડર ',
+		FAEBD7: 'એન્ટીક સફેદ',
+		FFFFE0: 'લાઈટ પીળો',
+		F0FFF0: 'હનીડઉય',
+		F0FFFF: 'અઝુરે',
+		F0F8FF: 'એલીસ બ્લુ',
+		E6E6FA: 'લવંડર',
+		FFF: 'સફેદ'
+	},
+	more: 'ઔર રંગ...',
+	panelTitle: 'રંગ',
+	textColorTitle: 'શબ્દનો રંગ'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/he.js b/plugins/ckeditor4/enhancedcolorbutton/lang/he.js
new file mode 100644
index 0000000..2e3da78
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/he.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'he', {
+	auto: 'אוטומטי',
+	bgColorTitle: 'צבע רקע',
+	colors: {
+		'000': 'שחור',
+		'800000': 'סגול כהה',
+		'8B4513': 'חום בהיר',
+		'2F4F4F': 'אפור צפחה',
+		'008080': 'כחול-ירוק',
+		'000080': 'כחול-סגול',
+		'4B0082': 'אינדיגו',
+		'696969': 'אפור מעומעם',
+		B22222: 'אדום-חום',
+		A52A2A: 'חום',
+		DAA520: 'כתום זהב',
+		'006400': 'ירוק כהה',
+		'40E0D0': 'טורקיז',
+		'0000CD': 'כחול בינוני',
+		'800080': 'סגול',
+		'808080': 'אפור',
+		F00: 'אדום',
+		FF8C00: 'כתום כהה',
+		FFD700: 'זהב',
+		'008000': 'ירוק',
+		'0FF': 'ציאן',
+		'00F': 'כחול',
+		EE82EE: 'סגלגל',
+		A9A9A9: 'אפור כהה',
+		FFA07A: 'כתום-וורוד',
+		FFA500: 'כתום',
+		FFFF00: 'צהוב',
+		'00FF00': 'ליים',
+		AFEEEE: 'טורקיז בהיר',
+		ADD8E6: 'כחול בהיר',
+		DDA0DD: 'שזיף',
+		D3D3D3: 'אפור בהיר',
+		FFF0F5: 'לבנדר מסמיק',
+		FAEBD7: 'לבן עתיק',
+		FFFFE0: 'צהוב בהיר',
+		F0FFF0: 'טל דבש',
+		F0FFFF: 'תכלת',
+		F0F8FF: 'כחול טיפת מים',
+		E6E6FA: 'לבנדר',
+		FFF: 'לבן'
+	},
+	more: 'צבעים נוספים...',
+	panelTitle: 'צבעים',
+	textColorTitle: 'צבע טקסט'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/hi.js b/plugins/ckeditor4/enhancedcolorbutton/lang/hi.js
new file mode 100644
index 0000000..6972c3c
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/hi.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'hi', {
+	auto: 'स्वचालित',
+	bgColorTitle: 'बैक्ग्राउन्ड रंग',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'और रंग...',
+	panelTitle: 'Colors',
+	textColorTitle: 'टेक्स्ट रंग'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/hr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/hr.js
new file mode 100644
index 0000000..459ec36
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/hr.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'hr', {
+	auto: 'Automatski',
+	bgColorTitle: 'Boja pozadine',
+	colors: {
+		'000': 'Crna',
+		'800000': 'Kesten',
+		'8B4513': 'Smeđa',
+		'2F4F4F': 'Tamno siva',
+		'008080': 'Teal',
+		'000080': 'Mornarska',
+		'4B0082': 'Indigo',
+		'696969': 'Tamno siva',
+		B22222: 'Vatrena cigla',
+		A52A2A: 'Smeđa',
+		DAA520: 'Zlatna',
+		'006400': 'Tamno zelena',
+		'40E0D0': 'Tirkizna',
+		'0000CD': 'Srednje plava',
+		'800080': 'Ljubičasta',
+		'808080': 'Siva',
+		F00: 'Crvena',
+		FF8C00: 'Tamno naranđasta',
+		FFD700: 'Zlatna',
+		'008000': 'Zelena',
+		'0FF': 'Cijan',
+		'00F': 'Plava',
+		EE82EE: 'Ljubičasta',
+		A9A9A9: 'Mutno siva',
+		FFA07A: 'Svijetli losos',
+		FFA500: 'Naranđasto',
+		FFFF00: 'Žuto',
+		'00FF00': 'Limun',
+		AFEEEE: 'Blijedo tirkizna',
+		ADD8E6: 'Svijetlo plava',
+		DDA0DD: 'Å ljiva',
+		D3D3D3: 'Svijetlo siva',
+		FFF0F5: 'Lavanda rumeno',
+		FAEBD7: 'Antikno bijela',
+		FFFFE0: 'Svijetlo žuta',
+		F0FFF0: 'Med',
+		F0FFFF: 'Azurna',
+		F0F8FF: 'Alice plava',
+		E6E6FA: 'Lavanda',
+		FFF: 'Bijela'
+	},
+	more: 'Više boja...',
+	panelTitle: 'Boje',
+	textColorTitle: 'Boja teksta'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/hu.js b/plugins/ckeditor4/enhancedcolorbutton/lang/hu.js
new file mode 100644
index 0000000..1b71e2f
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/hu.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'hu', {
+	auto: 'Automatikus',
+	bgColorTitle: 'Háttérszín',
+	colors: {
+		'000': 'Fekete',
+		'800000': 'Bordó',
+		'8B4513': 'Barna',
+		'2F4F4F': 'Sötét türkiz',
+		'008080': 'Türkiz',
+		'000080': 'Király kék',
+		'4B0082': 'Indigó kék',
+		'696969': 'Szürke',
+		B22222: 'Tégla vörös',
+		A52A2A: 'Vörös',
+		DAA520: 'Arany sárga',
+		'006400': 'Sötét zöld',
+		'40E0D0': 'Türkiz',
+		'0000CD': 'Kék',
+		'800080': 'Lila',
+		'808080': 'Szürke',
+		F00: 'Piros',
+		FF8C00: 'Sötét narancs',
+		FFD700: 'Arany',
+		'008000': 'Zöld',
+		'0FF': 'Türkiz',
+		'00F': 'Kék',
+		EE82EE: 'Rózsaszín',
+		A9A9A9: 'Sötét szürke',
+		FFA07A: 'Lazac',
+		FFA500: 'Narancs',
+		FFFF00: 'Citromsárga',
+		'00FF00': 'Neon zöld',
+		AFEEEE: 'Világos türkiz',
+		ADD8E6: 'Világos kék',
+		DDA0DD: 'Világos lila',
+		D3D3D3: 'Világos szürke',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Törtfehér',
+		FFFFE0: 'Világos sárga',
+		F0FFF0: 'Menta',
+		F0FFFF: 'Azúr kék',
+		F0F8FF: 'Halvány kék',
+		E6E6FA: 'Lavender',
+		FFF: 'Fehér'
+	},
+	more: 'További színek...',
+	panelTitle: 'Színek',
+	textColorTitle: 'Betűszín'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/id.js b/plugins/ckeditor4/enhancedcolorbutton/lang/id.js
new file mode 100644
index 0000000..8d2bfb0
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/id.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'id', {
+	auto: 'Automatic', // MISSING
+	bgColorTitle: 'Warna Latar Belakang',
+	colors: {
+		'000': 'Hitam',
+		'800000': 'Merah Tua',
+		'8B4513': 'Saddle Brown', // MISSING
+		'2F4F4F': 'Dark Slate Gray', // MISSING
+		'008080': 'Teal', // MISSING
+		'000080': 'Navy', // MISSING
+		'4B0082': 'Indigo', // MISSING
+		'696969': 'Abu-abu Gelap',
+		B22222: 'Merah Bata',
+		A52A2A: 'Coklat',
+		DAA520: 'Golden Rod', // MISSING
+		'006400': 'Hijau Gelap',
+		'40E0D0': 'Turquoise', // MISSING
+		'0000CD': 'Biru Sedang',
+		'800080': 'Ungu',
+		'808080': 'Abu-abu',
+		F00: 'Merah',
+		FF8C00: 'Jingga Gelap',
+		FFD700: 'Emas',
+		'008000': 'Hijau',
+		'0FF': 'Cyan', // MISSING
+		'00F': 'Biru',
+		EE82EE: 'Violet', // MISSING
+		A9A9A9: 'Abu-abu Redup',
+		FFA07A: 'Salmon Cerah',
+		FFA500: 'Jingga',
+		FFFF00: 'Kuning',
+		'00FF00': 'Jeruk Lemon',
+		AFEEEE: 'Biru Hijau Pucat',
+		ADD8E6: 'Biru Cerah',
+		DDA0DD: 'Plum', // MISSING
+		D3D3D3: 'Abu-abu Cerah',
+		FFF0F5: 'Lavender Blush', // MISSING
+		FAEBD7: 'Antique White', // MISSING
+		FFFFE0: 'Kuning Cerah',
+		F0FFF0: 'Honeydew', // MISSING
+		F0FFFF: 'Azure', // MISSING
+		F0F8FF: 'Alice Blue', // MISSING
+		E6E6FA: 'Lavender', // MISSING
+		FFF: 'Putih'
+	},
+	more: 'Warna lainnya...',
+	panelTitle: 'Warna',
+	textColorTitle: 'Warna Teks'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/is.js b/plugins/ckeditor4/enhancedcolorbutton/lang/is.js
new file mode 100644
index 0000000..ce6527c
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/is.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'is', {
+	auto: 'Sjálfval',
+	bgColorTitle: 'Bakgrunnslitur',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Fleiri liti...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Litur texta'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/it.js b/plugins/ckeditor4/enhancedcolorbutton/lang/it.js
new file mode 100644
index 0000000..49b88f9
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/it.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'it', {
+	auto: 'Automatico',
+	bgColorTitle: 'Colore sfondo',
+	colors: {
+		'000': 'Nero',
+		'800000': 'Marrone Castagna',
+		'8B4513': 'Marrone Cuoio',
+		'2F4F4F': 'Grigio Fumo di Londra',
+		'008080': 'Acquamarina',
+		'000080': 'Blu Oceano',
+		'4B0082': 'Indigo',
+		'696969': 'Grigio Scuro',
+		B22222: 'Giallo Fiamma',
+		A52A2A: 'Marrone',
+		DAA520: 'Giallo Mimosa',
+		'006400': 'Verde Scuro',
+		'40E0D0': 'Turchese',
+		'0000CD': 'Blue Scuro',
+		'800080': 'Viola',
+		'808080': 'Grigio',
+		F00: 'Rosso',
+		FF8C00: 'Arancio Scuro',
+		FFD700: 'Oro',
+		'008000': 'Verde',
+		'0FF': 'Ciano',
+		'00F': 'Blu',
+		EE82EE: 'Violetto',
+		A9A9A9: 'Grigio Scuro',
+		FFA07A: 'Salmone',
+		FFA500: 'Arancio',
+		FFFF00: 'Giallo',
+		'00FF00': 'Lime',
+		AFEEEE: 'Turchese Chiaro',
+		ADD8E6: 'Blu Chiaro',
+		DDA0DD: 'Rosso Ciliegia',
+		D3D3D3: 'Grigio Chiaro',
+		FFF0F5: 'Lavanda Chiara',
+		FAEBD7: 'Bianco Antico',
+		FFFFE0: 'Giallo Chiaro',
+		F0FFF0: 'Verde Mela',
+		F0FFFF: 'Azzurro',
+		F0F8FF: 'Celeste',
+		E6E6FA: 'Lavanda',
+		FFF: 'Bianco'
+	},
+	more: 'Altri colori...',
+	panelTitle: 'Colori',
+	textColorTitle: 'Colore testo'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ja.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ja.js
new file mode 100644
index 0000000..2a152a3
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ja.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ja', {
+	auto: '自動',
+	bgColorTitle: '背景色',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'その他の色...',
+	panelTitle: '色',
+	textColorTitle: '文字色'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ka.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ka.js
new file mode 100644
index 0000000..0318267
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ka.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ka', {
+	auto: 'ავტომატური',
+	bgColorTitle: 'ფონის ფერი',
+	colors: {
+		'000': 'შავი',
+		'800000': 'მუქი შინდისფერი',
+		'8B4513': 'ყავისფერი',
+		'2F4F4F': 'მოლურჯო ნაცრისფერი',
+		'008080': 'ჩამქრალი ლურჯი',
+		'000080': 'მუქი ლურჯი',
+		'4B0082': 'იასამნისფერი',
+		'696969': 'მუქი ნაცრისფერი',
+		B22222: 'აგურისფერი',
+		A52A2A: 'მუქი ყავისფერი',
+		DAA520: 'მოყვითალო',
+		'006400': 'მუქი მწვანე',
+		'40E0D0': 'ცისფერი',
+		'0000CD': 'ზომიერად ლურჯი',
+		'800080': 'იისფერი',
+		'808080': 'ნაცრისფერი',
+		F00: 'წითელი',
+		FF8C00: 'მუქი სტაფილოსფერი',
+		FFD700: 'ოქროსფერი',
+		'008000': 'მწვანე',
+		'0FF': 'ღია ცისფერი',
+		'00F': 'ლურჯი',
+		EE82EE: 'იისფერი',
+		A9A9A9: 'ბაცი ნაცრისფერი',
+		FFA07A: 'ჩამქრალი ვარდისფერი',
+		FFA500: 'სტაფილოსფერი',
+		FFFF00: 'ყვითელი',
+		'00FF00': 'ლურჯი',
+		AFEEEE: 'ცისფერი',
+		ADD8E6: 'ღია ლურჯი',
+		DDA0DD: 'ღია იისფერი',
+		D3D3D3: 'ღია ნაცრისფერი',
+		FFF0F5: 'ღია ვარდისფერი',
+		FAEBD7: 'ღია ყავისფერი',
+		FFFFE0: 'ნათელი ყვითელი',
+		F0FFF0: 'ღია მწვანე',
+		F0FFFF: 'ღია ცისფერი 2',
+		F0F8FF: 'ღია ცისფერი 3',
+		E6E6FA: 'ღია იისფერი 2',
+		FFF: 'თეთრი'
+	},
+	more: 'მეტი ფერი...',
+	panelTitle: 'ფერები',
+	textColorTitle: 'ტექსტის ფერი'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/km.js b/plugins/ckeditor4/enhancedcolorbutton/lang/km.js
new file mode 100644
index 0000000..0260422
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/km.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'km', {
+	auto: 'ស្វ័យប្រវត្តិ',
+	bgColorTitle: 'ពណ៌ផ្ទៃខាងក្រោយ',
+	colors: {
+		'000': 'ខ្មៅ',
+		'800000': 'ត្នោត​ចាស់',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'ខៀវ​ចាស់',
+		'4B0082': 'ធ្លះ',
+		'696969': 'ប្រផេះ​ក្រាស់',
+		B22222: 'Fire Brick',
+		A52A2A: 'ត្នោត',
+		DAA520: 'Golden Rod',
+		'006400': 'បៃតង​ចាស់',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'ប្រផេះ',
+		F00: 'ក្រហម',
+		FF8C00: 'ទឹក​ក្រូច​ចាស់',
+		FFD700: 'មាស',
+		'008000': 'បៃតង',
+		'0FF': 'Cyan',
+		'00F': 'ខៀវ',
+		EE82EE: 'ស្វាយ',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'ទឹក​ក្រូច',
+		FFFF00: 'លឿង',
+		'00FF00': 'ក្រូច​ឆ្មារ',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'លឿង​ស្ដើង',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'ផ្ទៃមេឃ',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'ឡាវិនដឺ',
+		FFF: 'ស'
+	},
+	more: 'ពណ៌​ផ្សេង​ទៀត..',
+	panelTitle: 'ពណ៌',
+	textColorTitle: 'ពណ៌អក្សរ'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ko.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ko.js
new file mode 100644
index 0000000..c24d2f8
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ko.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ko', {
+	auto: '기본 색상',
+	bgColorTitle: '배경 색상',
+	colors: {
+		'000': '검정',
+		'800000': '밤색',
+		'8B4513': '새들 브라운',
+		'2F4F4F': '다크 슬레이트 그레이',
+		'008080': '틸',
+		'000080': '네이비',
+		'4B0082': '남색',
+		'696969': '짙은 회색',
+		B22222: '벽돌색',
+		A52A2A: '갈색',
+		DAA520: '골든 로드',
+		'006400': '암록색',
+		'40E0D0': '터코이즈',
+		'0000CD': '미디엄 블루',
+		'800080': '보라',
+		'808080': '회색',
+		F00: '빨강',
+		FF8C00: '짙은 주황',
+		FFD700: '금색',
+		'008000': '녹색',
+		'0FF': '시안',
+		'00F': '파랑',
+		EE82EE: '남보라',
+		A9A9A9: '딤 그레이',
+		FFA07A: '라이트 새먼',
+		FFA500: '주황',
+		FFFF00: '노랑',
+		'00FF00': '라임',
+		AFEEEE: '패일 터코이즈',
+		ADD8E6: '연한 파랑',
+		DDA0DD: '자두',
+		D3D3D3: '연한 회색',
+		FFF0F5: '라벤더 블러쉬',
+		FAEBD7: '앤틱 화이트',
+		FFFFE0: '연한 노랑',
+		F0FFF0: '허니듀',
+		F0FFFF: '하늘색',
+		F0F8FF: '앨리스 블루',
+		E6E6FA: '라벤더',
+		FFF: '흰색'
+	},
+	more: '색상 선택...',
+	panelTitle: '색상',
+	textColorTitle: '글자 색상'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ku.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ku.js
new file mode 100644
index 0000000..402d9b5
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ku.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ku', {
+	auto: 'خۆکار',
+	bgColorTitle: 'ڕەنگی پاشبنەما',
+	colors: {
+		'000': 'Ú•Û•Ø´',
+		'800000': 'سۆرو ماڕوونی',
+		'8B4513': 'ماڕوونی',
+		'2F4F4F': 'سەوزی تاریك',
+		'008080': 'سەوز و شین',
+		'000080': 'شینی تۆخ',
+		'4B0082': 'مۆری تۆخ',
+		'696969': 'ڕەساسی تۆخ',
+		B22222: 'سۆری تۆخ',
+		A52A2A: 'قاوەیی',
+		DAA520: 'قاوەیی بریسکەدار',
+		'006400': 'سەوزی تۆخ',
+		'40E0D0': 'شینی ناتۆخی بریسکەدار',
+		'0000CD': 'شینی مامناوەند',
+		'800080': 'پەمبەیی',
+		'808080': 'ڕەساسی',
+		F00: 'سۆر',
+		FF8C00: 'نارەنجی تۆخ',
+		FFD700: 'زەرد',
+		'008000': 'سەوز',
+		'0FF': 'شینی ئاسمانی',
+		'00F': 'شین',
+		EE82EE: 'پەمەیی',
+		A9A9A9: 'ڕەساسی ناتۆخ',
+		FFA07A: 'نارەنجی ناتۆخ',
+		FFA500: 'نارەنجی',
+		FFFF00: 'زەرد',
+		'00FF00': 'سەوز',
+		AFEEEE: 'شینی ناتۆخ',
+		ADD8E6: 'شینی زۆر ناتۆخ',
+		DDA0DD: 'پەمەیی ناتۆخ',
+		D3D3D3: 'ڕەساسی بریسکەدار',
+		FFF0F5: 'جەرگی زۆر ناتۆخ',
+		FAEBD7: 'جەرگی ناتۆخ',
+		FFFFE0: 'سپی ناتۆخ',
+		F0FFF0: 'هەنگوینی ناتۆخ',
+		F0FFFF: 'شینێکی زۆر ناتۆخ',
+		F0F8FF: 'شینێکی ئاسمانی زۆر ناتۆخ',
+		E6E6FA: 'شیری',
+		FFF: 'سپی'
+	},
+	more: 'ڕەنگی زیاتر...',
+	panelTitle: 'ڕەنگەکان',
+	textColorTitle: 'ڕەنگی دەق'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/lt.js b/plugins/ckeditor4/enhancedcolorbutton/lang/lt.js
new file mode 100644
index 0000000..2e0efe6
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/lt.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'lt', {
+	auto: 'Automatinis',
+	bgColorTitle: 'Fono spalva',
+	colors: {
+		'000': 'Juoda',
+		'800000': 'Kaštoninė',
+		'8B4513': 'Tamsiai ruda',
+		'2F4F4F': 'Pilka tamsaus Å¡iferio',
+		'008080': 'Teal',
+		'000080': 'Karinis',
+		'4B0082': 'Indigo',
+		'696969': 'Tamsiai pilka',
+		B22222: 'Ugnies',
+		A52A2A: 'Ruda',
+		DAA520: 'Aukso',
+		'006400': 'Tamsiai žalia',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'VidutinÄ— mÄ—lyna',
+		'800080': 'VioletinÄ—',
+		'808080': 'Pilka',
+		F00: 'Raudona',
+		FF8C00: 'Tamsiai oranžinė',
+		FFD700: 'AuksinÄ—',
+		'008000': 'Žalia',
+		'0FF': 'Žydra',
+		'00F': 'MÄ—lyna',
+		EE82EE: 'VioletinÄ—',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Oranžinė',
+		FFFF00: 'Geltona',
+		'00FF00': 'Citrinų',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Å viesiai mÄ—lyna',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Å viesiai pilka',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Å viesiai geltona',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'Balta'
+	},
+	more: 'Daugiau spalvų...',
+	panelTitle: 'Spalva',
+	textColorTitle: 'Teksto spalva'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/lv.js b/plugins/ckeditor4/enhancedcolorbutton/lang/lv.js
new file mode 100644
index 0000000..1d6be57
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/lv.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'lv', {
+	auto: 'Automātiska',
+	bgColorTitle: 'Fona krāsa',
+	colors: {
+		'000': 'Melns',
+		'800000': 'Sarkanbrūns',
+		'8B4513': 'Sedlu brūns',
+		'2F4F4F': 'Tumšas tāfeles pelēks',
+		'008080': 'Zili-zaļš',
+		'000080': 'JÅ«ras',
+		'4B0082': 'Indigo',
+		'696969': 'Tumši pelēks',
+		B22222: 'Ķieģeļsarkans',
+		A52A2A: 'Brūns',
+		DAA520: 'Zelta',
+		'006400': 'Tumši zaļš',
+		'40E0D0': 'Tirkīzs',
+		'0000CD': 'Vidēji zils',
+		'800080': 'Purpurs',
+		'808080': 'Pelēks',
+		F00: 'Sarkans',
+		FF8C00: 'Tumši oranžs',
+		FFD700: 'Zelta',
+		'008000': 'Zaļš',
+		'0FF': 'Tumšzils',
+		'00F': 'Zils',
+		EE82EE: 'Violets',
+		A9A9A9: 'Pelēks',
+		FFA07A: 'Gaiši laškrāsas',
+		FFA500: 'Oranžs',
+		FFFF00: 'Dzeltens',
+		'00FF00': 'Laima',
+		AFEEEE: 'Gaiši tirkīza',
+		ADD8E6: 'Gaiši zils',
+		DDA0DD: 'Plūmju',
+		D3D3D3: 'Gaiši pelēks',
+		FFF0F5: 'Lavandas sārts',
+		FAEBD7: 'Antīki balts',
+		FFFFE0: 'Gaiši dzeltens',
+		F0FFF0: 'Meduspile',
+		F0FFFF: 'Debesszils',
+		F0F8FF: 'Alises zils',
+		E6E6FA: 'Lavanda',
+		FFF: 'Balts'
+	},
+	more: 'Plašāka palete...',
+	panelTitle: 'Krāsa',
+	textColorTitle: 'Teksta krāsa'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/mk.js b/plugins/ckeditor4/enhancedcolorbutton/lang/mk.js
new file mode 100644
index 0000000..ccb9ce2
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/mk.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'mk', {
+	auto: 'Automatic', // MISSING
+	bgColorTitle: 'Background Color',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'More Colors...', // MISSING
+	panelTitle: 'Colors',
+	textColorTitle: 'Text Color' // MISSING
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/mn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/mn.js
new file mode 100644
index 0000000..b47bb5c
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/mn.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'mn', {
+	auto: 'Автоматаар',
+	bgColorTitle: 'Дэвсгэр өнгө',
+	colors: {
+		'000': 'Хар',
+		'800000': 'Хүрэн',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Саарал',
+		F00: 'Улаан',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Алт',
+		'008000': 'Ногоон',
+		'0FF': 'Цэнхэр',
+		'00F': 'Ð¥Ó©Ñ…',
+		EE82EE: 'Ягаан',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Улбар шар',
+		FFFF00: 'Шар',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Цайвар саарал',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'Цагаан'
+	},
+	more: 'Нэмэлт өнгөнүүд...',
+	panelTitle: 'Өнгөнүүд',
+	textColorTitle: 'Бичвэрийн өнгө'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ms.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ms.js
new file mode 100644
index 0000000..d2a6d60
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ms.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ms', {
+	auto: 'Otomatik',
+	bgColorTitle: 'Warna Latarbelakang',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Warna lain-lain...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Warna Text'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/nb.js b/plugins/ckeditor4/enhancedcolorbutton/lang/nb.js
new file mode 100644
index 0000000..bc8de62
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/nb.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'nb', {
+	auto: 'Automatisk',
+	bgColorTitle: 'Bakgrunnsfarge',
+	colors: {
+		'000': 'Svart',
+		'800000': 'Rødbrun',
+		'8B4513': 'Salbrun',
+		'2F4F4F': 'Grønnsvart',
+		'008080': 'Blågrønn',
+		'000080': 'Marineblått',
+		'4B0082': 'Indigo',
+		'696969': 'Mørk grå',
+		B22222: 'Mørkerød',
+		A52A2A: 'Brun',
+		DAA520: 'Lys brun',
+		'006400': 'Mørk grønn',
+		'40E0D0': 'Turkis',
+		'0000CD': 'Medium blå',
+		'800080': 'Purpur',
+		'808080': 'Grå',
+		F00: 'Rød',
+		FF8C00: 'Mørk oransje',
+		FFD700: 'Gull',
+		'008000': 'Grønn',
+		'0FF': 'Cyan',
+		'00F': 'Blå',
+		EE82EE: 'Fiolett',
+		A9A9A9: 'Svak grå',
+		FFA07A: 'Rosa-oransje',
+		FFA500: 'Oransje',
+		FFFF00: 'Gul',
+		'00FF00': 'Lime',
+		AFEEEE: 'Svak turkis',
+		ADD8E6: 'Lys Blå',
+		DDA0DD: 'Plomme',
+		D3D3D3: 'Lys grå',
+		FFF0F5: 'Svak lavendelrosa',
+		FAEBD7: 'Antikk-hvit',
+		FFFFE0: 'Lys gul',
+		F0FFF0: 'Honningmelon',
+		F0FFFF: 'Svakt asurblått',
+		F0F8FF: 'Svak cyan',
+		E6E6FA: 'Lavendel',
+		FFF: 'Hvit'
+	},
+	more: 'Flere farger...',
+	panelTitle: 'Farger',
+	textColorTitle: 'Tekstfarge'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/nl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/nl.js
new file mode 100644
index 0000000..688b6f7
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/nl.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'nl', {
+	auto: 'Automatisch',
+	bgColorTitle: 'Achtergrondkleur',
+	colors: {
+		'000': 'Zwart',
+		'800000': 'Kastanjebruin',
+		'8B4513': 'Chocoladebruin',
+		'2F4F4F': 'Donkerleigrijs',
+		'008080': 'Blauwgroen',
+		'000080': 'Marine',
+		'4B0082': 'Indigo',
+		'696969': 'Donkergrijs',
+		B22222: 'Baksteen',
+		A52A2A: 'Bruin',
+		DAA520: 'Donkergeel',
+		'006400': 'Donkergroen',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Middenblauw',
+		'800080': 'Paars',
+		'808080': 'Grijs',
+		F00: 'Rood',
+		FF8C00: 'Donkeroranje',
+		FFD700: 'Goud',
+		'008000': 'Groen',
+		'0FF': 'Cyaan',
+		'00F': 'Blauw',
+		EE82EE: 'Violet',
+		A9A9A9: 'Donkergrijs',
+		FFA07A: 'Lichtzalm',
+		FFA500: 'Oranje',
+		FFFF00: 'Geel',
+		'00FF00': 'Felgroen',
+		AFEEEE: 'Lichtturquoise',
+		ADD8E6: 'Lichtblauw',
+		DDA0DD: 'Pruim',
+		D3D3D3: 'Lichtgrijs',
+		FFF0F5: 'Linnen',
+		FAEBD7: 'Ivoor',
+		FFFFE0: 'Lichtgeel',
+		F0FFF0: 'Honingdauw',
+		F0FFFF: 'Azuur',
+		F0F8FF: 'Licht hemelsblauw',
+		E6E6FA: 'Lavendel',
+		FFF: 'Wit'
+	},
+	more: 'Meer kleuren...',
+	panelTitle: 'Kleuren',
+	textColorTitle: 'Tekstkleur'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/no.js b/plugins/ckeditor4/enhancedcolorbutton/lang/no.js
new file mode 100644
index 0000000..ddc7d07
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/no.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'no', {
+	auto: 'Automatisk',
+	bgColorTitle: 'Bakgrunnsfarge',
+	colors: {
+		'000': 'Svart',
+		'800000': 'Rødbrun',
+		'8B4513': 'Salbrun',
+		'2F4F4F': 'Grønnsvart',
+		'008080': 'Blågrønn',
+		'000080': 'Marineblått',
+		'4B0082': 'Indigo',
+		'696969': 'Mørk grå',
+		B22222: 'Mørkerød',
+		A52A2A: 'Brun',
+		DAA520: 'Lys brun',
+		'006400': 'Mørk grønn',
+		'40E0D0': 'Turkis',
+		'0000CD': 'Medium blå',
+		'800080': 'Purpur',
+		'808080': 'Grå',
+		F00: 'Rød',
+		FF8C00: 'Mørk oransje',
+		FFD700: 'Gull',
+		'008000': 'Grønn',
+		'0FF': 'Cyan',
+		'00F': 'Blå',
+		EE82EE: 'Fiolett',
+		A9A9A9: 'Svak grå',
+		FFA07A: 'Rosa-oransje',
+		FFA500: 'Oransje',
+		FFFF00: 'Gul',
+		'00FF00': 'Lime',
+		AFEEEE: 'Svak turkis',
+		ADD8E6: 'Lys Blå',
+		DDA0DD: 'Plomme',
+		D3D3D3: 'Lys grå',
+		FFF0F5: 'Svak lavendelrosa',
+		FAEBD7: 'Antikk-hvit',
+		FFFFE0: 'Lys gul',
+		F0FFF0: 'Honningmelon',
+		F0FFFF: 'Svakt asurblått',
+		F0F8FF: 'Svak cyan',
+		E6E6FA: 'Lavendel',
+		FFF: 'Hvit'
+	},
+	more: 'Flere farger...',
+	panelTitle: 'Farger',
+	textColorTitle: 'Tekstfarge'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/pl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/pl.js
new file mode 100644
index 0000000..a75d42b
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/pl.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'pl', {
+	auto: 'Automatycznie',
+	bgColorTitle: 'Kolor tła',
+	colors: {
+		'000': 'Czarny',
+		'800000': 'Kasztanowy',
+		'8B4513': 'Czekoladowy',
+		'2F4F4F': 'Ciemnografitowy',
+		'008080': 'Morski',
+		'000080': 'Granatowy',
+		'4B0082': 'Indygo',
+		'696969': 'Ciemnoszary',
+		B22222: 'Czerwień żelazowa',
+		A52A2A: 'BrÄ…zowy',
+		DAA520: 'Ciemnozłoty',
+		'006400': 'Ciemnozielony',
+		'40E0D0': 'Turkusowy',
+		'0000CD': 'Ciemnoniebieski',
+		'800080': 'Purpurowy',
+		'808080': 'Szary',
+		F00: 'Czerwony',
+		FF8C00: 'Ciemnopomarańczowy',
+		FFD700: 'ZÅ‚oty',
+		'008000': 'Zielony',
+		'0FF': 'Cyjan',
+		'00F': 'Niebieski',
+		EE82EE: 'Fioletowy',
+		A9A9A9: 'Przygaszony szary',
+		FFA07A: 'Łososiowy',
+		FFA500: 'Pomarańczowy',
+		FFFF00: 'Żółty',
+		'00FF00': 'Limonkowy',
+		AFEEEE: 'Bladoturkusowy',
+		ADD8E6: 'Jasnoniebieski',
+		DDA0DD: 'Åšliwkowy',
+		D3D3D3: 'Jasnoszary',
+		FFF0F5: 'Jasnolawendowy',
+		FAEBD7: 'Kremowobiały',
+		FFFFE0: 'Jasnożółty',
+		F0FFF0: 'Bladozielony',
+		F0FFFF: 'Jasnolazurowy',
+		F0F8FF: 'Jasnobłękitny',
+		E6E6FA: 'Lawendowy',
+		FFF: 'Biały'
+	},
+	more: 'Więcej kolorów...',
+	panelTitle: 'Kolory',
+	textColorTitle: 'Kolor tekstu'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js b/plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js
new file mode 100644
index 0000000..812b1a9
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/pt-br.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'pt-br', {
+	auto: 'Automático',
+	bgColorTitle: 'Cor do Plano de Fundo',
+	colors: {
+		'000': 'Preto',
+		'800000': 'Foquete',
+		'8B4513': 'Marrom 1',
+		'2F4F4F': 'Cinza 1',
+		'008080': 'Cerceta',
+		'000080': 'Azul Marinho',
+		'4B0082': 'Índigo',
+		'696969': 'Cinza 2',
+		B22222: 'Tijolo de Fogo',
+		A52A2A: 'Marrom 2',
+		DAA520: 'Vara Dourada',
+		'006400': 'Verde Escuro',
+		'40E0D0': 'Turquesa',
+		'0000CD': 'Azul Médio',
+		'800080': 'Roxo',
+		'808080': 'Cinza 3',
+		F00: 'Vermelho',
+		FF8C00: 'Laranja Escuro',
+		FFD700: 'Dourado',
+		'008000': 'Verde',
+		'0FF': 'Ciano',
+		'00F': 'Azul',
+		EE82EE: 'Violeta',
+		A9A9A9: 'Cinza Escuro',
+		FFA07A: 'Salmão Claro',
+		FFA500: 'Laranja',
+		FFFF00: 'Amarelo',
+		'00FF00': 'Lima',
+		AFEEEE: 'Turquesa Pálido',
+		ADD8E6: 'Azul Claro',
+		DDA0DD: 'Ameixa',
+		D3D3D3: 'Cinza Claro',
+		FFF0F5: 'Lavanda 1',
+		FAEBD7: 'Branco Antiguidade',
+		FFFFE0: 'Amarelo Claro',
+		F0FFF0: 'Orvalho',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Azul Alice',
+		E6E6FA: 'Lavanda 2',
+		FFF: 'Branco'
+	},
+	more: 'Mais Cores...',
+	panelTitle: 'Cores',
+	textColorTitle: 'Cor do Texto'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/pt.js b/plugins/ckeditor4/enhancedcolorbutton/lang/pt.js
new file mode 100644
index 0000000..faa8622
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/pt.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'pt', {
+	auto: 'Automático',
+	bgColorTitle: 'Cor de Fundo',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Cinza claro',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Branco velho',
+		FFFFE0: 'Amarelo claro',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'Branco'
+	},
+	more: 'Mais cores...',
+	panelTitle: 'Cores',
+	textColorTitle: 'Cor do texto'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ro.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ro.js
new file mode 100644
index 0000000..488deb7
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ro.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ro', {
+	auto: 'Automatic',
+	bgColorTitle: 'Coloarea fundalului',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Mai multe culori...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Culoarea textului'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ru.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ru.js
new file mode 100644
index 0000000..a843b99
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ru.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ru', {
+	auto: 'Автоматически',
+	bgColorTitle: 'Цвет фона',
+	colors: {
+		'000': 'Чёрный',
+		'800000': 'Бордовый',
+		'8B4513': 'Кожано-коричневый',
+		'2F4F4F': 'Темный синевато-серый',
+		'008080': 'Сине-зелёный',
+		'000080': 'Тёмно-синий',
+		'4B0082': 'Индиго',
+		'696969': 'Тёмно-серый',
+		B22222: 'Кирпичный',
+		A52A2A: 'Коричневый',
+		DAA520: 'Золотисто-берёзовый',
+		'006400': 'Темно-зелёный',
+		'40E0D0': 'Бирюзовый',
+		'0000CD': 'Умеренно синий',
+		'800080': 'Пурпурный',
+		'808080': 'Серый',
+		F00: 'Красный',
+		FF8C00: 'Темно-оранжевый',
+		FFD700: 'Золотистый',
+		'008000': 'Зелёный',
+		'0FF': 'Васильковый',
+		'00F': 'Синий',
+		EE82EE: 'Фиолетовый',
+		A9A9A9: 'Тускло-серый',
+		FFA07A: 'Светло-лососевый',
+		FFA500: 'Оранжевый',
+		FFFF00: 'Жёлтый',
+		'00FF00': 'Лайма',
+		AFEEEE: 'Бледно-синий',
+		ADD8E6: 'Свелто-голубой',
+		DDA0DD: 'Сливовый',
+		D3D3D3: 'Светло-серый',
+		FFF0F5: 'Розово-лавандовый',
+		FAEBD7: 'Античный белый',
+		FFFFE0: 'Светло-жёлтый',
+		F0FFF0: 'Медвяной росы',
+		F0FFFF: 'Лазурный',
+		F0F8FF: 'Бледно-голубой',
+		E6E6FA: 'Лавандовый',
+		FFF: 'Белый'
+	},
+	more: 'Ещё цвета...',
+	panelTitle: 'Цвета',
+	textColorTitle: 'Цвет текста'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/si.js b/plugins/ckeditor4/enhancedcolorbutton/lang/si.js
new file mode 100644
index 0000000..678b02b
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/si.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'si', {
+	auto: 'Automatic', // MISSING
+	bgColorTitle: 'පසුබිම් වර්ණය',
+	colors: {
+		'000': 'Black', // MISSING
+		'800000': 'Maroon', // MISSING
+		'8B4513': 'Saddle Brown', // MISSING
+		'2F4F4F': 'Dark Slate Gray', // MISSING
+		'008080': 'Teal', // MISSING
+		'000080': 'Navy', // MISSING
+		'4B0082': 'Indigo', // MISSING
+		'696969': 'Dark Gray', // MISSING
+		B22222: 'Fire Brick', // MISSING
+		A52A2A: 'Brown', // MISSING
+		DAA520: 'Golden Rod', // MISSING
+		'006400': 'Dark Green', // MISSING
+		'40E0D0': 'Turquoise', // MISSING
+		'0000CD': 'Medium Blue', // MISSING
+		'800080': 'Purple', // MISSING
+		'808080': 'Gray', // MISSING
+		F00: 'Red', // MISSING
+		FF8C00: 'Dark Orange', // MISSING
+		FFD700: 'Gold', // MISSING
+		'008000': 'Green', // MISSING
+		'0FF': 'Cyan', // MISSING
+		'00F': 'Blue', // MISSING
+		EE82EE: 'Violet', // MISSING
+		A9A9A9: 'Dim Gray', // MISSING
+		FFA07A: 'Light Salmon', // MISSING
+		FFA500: 'Orange', // MISSING
+		FFFF00: 'Yellow', // MISSING
+		'00FF00': 'Lime', // MISSING
+		AFEEEE: 'Pale Turquoise', // MISSING
+		ADD8E6: 'Light Blue', // MISSING
+		DDA0DD: 'Plum', // MISSING
+		D3D3D3: 'Light Grey', // MISSING
+		FFF0F5: 'Lavender Blush', // MISSING
+		FAEBD7: 'Antique White', // MISSING
+		FFFFE0: 'Light Yellow', // MISSING
+		F0FFF0: 'Honeydew', // MISSING
+		F0FFFF: 'Azure', // MISSING
+		F0F8FF: 'Alice Blue', // MISSING
+		E6E6FA: 'Lavender', // MISSING
+		FFF: 'White' // MISSING
+	},
+	more: 'More Colors...', // MISSING
+	panelTitle: 'වර්ණය',
+	textColorTitle: 'අක්ෂර වර්ණ'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sk.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sk.js
new file mode 100644
index 0000000..4b0e3bb
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sk.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sk', {
+	auto: 'Automaticky',
+	bgColorTitle: 'Farba pozadia',
+	colors: {
+		'000': 'ÄŒierna',
+		'800000': 'Gaštanová',
+		'8B4513': 'Sedlová hnedá',
+		'2F4F4F': 'Tmavo bridlicovo sivá',
+		'008080': 'Modrozelená',
+		'000080': 'Tmavomodrá',
+		'4B0082': 'Indigo',
+		'696969': 'Tmavá sivá',
+		B22222: 'Ohňová tehlová',
+		A52A2A: 'Hnedá',
+		DAA520: 'Zlatobyľ',
+		'006400': 'Tmavá zelená',
+		'40E0D0': 'Tyrkysová',
+		'0000CD': 'Stredná modrá',
+		'800080': 'Purpurová',
+		'808080': 'Sivá',
+		F00: 'Červená',
+		FF8C00: 'Tmavá oranžová',
+		FFD700: 'Zlatá',
+		'008000': 'Zelená',
+		'0FF': 'Azúrová',
+		'00F': 'Modrá',
+		EE82EE: 'Fialová',
+		A9A9A9: 'Tmavá sivá',
+		FFA07A: 'Svetlá lososová',
+		FFA500: 'Oranžová',
+		FFFF00: 'Žltá',
+		'00FF00': 'Vápenná',
+		AFEEEE: 'Svetlá tyrkysová',
+		ADD8E6: 'Svetlá modrá',
+		DDA0DD: 'Slivková',
+		D3D3D3: 'Svetlá sivá',
+		FFF0F5: 'Levanduľovo červená',
+		FAEBD7: 'Antická biela',
+		FFFFE0: 'Svetlá žltá',
+		F0FFF0: 'Medová',
+		F0FFFF: 'Azúrová',
+		F0F8FF: 'Alicovo modrá',
+		E6E6FA: 'Levanduľová',
+		FFF: 'Biela'
+	},
+	more: 'Viac farieb...',
+	panelTitle: 'Farby',
+	textColorTitle: 'Farba textu'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sl.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sl.js
new file mode 100644
index 0000000..c02e289
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sl.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sl', {
+	auto: 'Samodejno',
+	bgColorTitle: 'Barva ozadja',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Več barv...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Barva besedila'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sq.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sq.js
new file mode 100644
index 0000000..c2e1d01
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sq.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sq', {
+	auto: 'Automatik',
+	bgColorTitle: 'Ngjyra e Prapavijës',
+	colors: {
+		'000': 'E zezë',
+		'800000': 'Ngjyrë gështenjë',
+		'8B4513': 'Ngjyrë Shale Kafe',
+		'2F4F4F': 'Ngjyrë Gri të errët ardëz',
+		'008080': 'Ngjyrë bajukë',
+		'000080': 'Ngjyrë Marine',
+		'4B0082': 'Indigo',
+		'696969': 'Gri e Errët',
+		B22222: 'Tullë në Flakë',
+		A52A2A: 'Ngjytë Kafe',
+		DAA520: 'Shkop i Artë',
+		'006400': 'E Gjelbër e Errët',
+		'40E0D0': 'Ngjyrë e Bruztë',
+		'0000CD': 'E Kaltër e Mesme',
+		'800080': 'Vjollcë',
+		'808080': 'Gri',
+		F00: 'E Kuqe',
+		FF8C00: 'E Portokalltë e Errët',
+		FFD700: 'Ngjyrë Ari',
+		'008000': 'E Gjelbërt',
+		'0FF': 'Cyan',
+		'00F': 'E Kaltër',
+		EE82EE: 'Vjollcë',
+		A9A9A9: 'Gri e Zbehtë',
+		FFA07A: 'Salmon i Ndritur',
+		FFA500: 'E Portokalltë',
+		FFFF00: 'E Verdhë',
+		'00FF00': 'Ngjyrë Gëlqere',
+		AFEEEE: 'Ngjyrë e Bruztë e Zbehtë',
+		ADD8E6: 'E Kaltër e Ndritur',
+		DDA0DD: 'Ngjyrë Llokumi',
+		D3D3D3: 'Gri e Ndritur',
+		FFF0F5: 'Ngjyrë Purpur e Skuqur',
+		FAEBD7: 'E Bardhë Antike',
+		FFFFE0: 'E verdhë e Ndritur',
+		F0FFF0: 'Ngjyrë Nektari',
+		F0FFFF: 'Ngjyrë Qielli',
+		F0F8FF: 'E Kaltër Alice',
+		E6E6FA: 'Ngjyrë Purpur e Zbetë',
+		FFF: 'E bardhë'
+	},
+	more: 'Më Shumë Ngjyra...',
+	panelTitle: 'Ngjyrat',
+	textColorTitle: 'Ngjyra e Tekstit'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js
new file mode 100644
index 0000000..7623e72
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sr-latn.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sr-latn', {
+	auto: 'Automatski',
+	bgColorTitle: 'Boja pozadine',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Više boja...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Boja teksta'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sr.js
new file mode 100644
index 0000000..7fd9b09
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sr.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sr', {
+	auto: 'Аутоматски',
+	bgColorTitle: 'Боја позадине',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'Више боја...',
+	panelTitle: 'Colors',
+	textColorTitle: 'Боја текста'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/sv.js b/plugins/ckeditor4/enhancedcolorbutton/lang/sv.js
new file mode 100644
index 0000000..7adf8d8
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/sv.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'sv', {
+	auto: 'Automatisk',
+	bgColorTitle: 'Bakgrundsfärg',
+	colors: {
+		'000': 'Svart',
+		'800000': 'Rödbrun',
+		'8B4513': 'Mörkbrun',
+		'2F4F4F': 'Skiffergrå',
+		'008080': 'Kricka',
+		'000080': 'Marinblå',
+		'4B0082': 'Indigo',
+		'696969': 'Mörkgrå',
+		B22222: 'Tegelsten',
+		A52A2A: 'Brun',
+		DAA520: 'Mörk guld',
+		'006400': 'Mörkgrön',
+		'40E0D0': 'Turkos',
+		'0000CD': 'Medium blå',
+		'800080': 'Lila',
+		'808080': 'Grå',
+		F00: 'Röd',
+		FF8C00: 'Mörkorange',
+		FFD700: 'Guld',
+		'008000': 'Grön',
+		'0FF': 'Turkos',
+		'00F': 'Blå',
+		EE82EE: 'Violett',
+		A9A9A9: 'Matt grå',
+		FFA07A: 'Laxrosa',
+		FFA500: 'Orange',
+		FFFF00: 'Gul',
+		'00FF00': 'Lime',
+		AFEEEE: 'Ljusturkos',
+		ADD8E6: 'Ljusblå',
+		DDA0DD: 'Plommon',
+		D3D3D3: 'Ljusgrå',
+		FFF0F5: 'Ljus lavendel',
+		FAEBD7: 'Antikvit',
+		FFFFE0: 'Ljusgul',
+		F0FFF0: 'Honungsdagg',
+		F0FFFF: 'Azurblå',
+		F0F8FF: 'Aliceblå',
+		E6E6FA: 'Lavendel',
+		FFF: 'Vit'
+	},
+	more: 'Fler färger...',
+	panelTitle: 'Färger',
+	textColorTitle: 'Textfärg'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/th.js b/plugins/ckeditor4/enhancedcolorbutton/lang/th.js
new file mode 100644
index 0000000..548ff91
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/th.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'th', {
+	auto: 'สีอัตโนมัติ',
+	bgColorTitle: 'สีพื้นหลัง',
+	colors: {
+		'000': 'Black',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Brown',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Gray',
+		F00: 'Red',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Gold',
+		'008000': 'Green',
+		'0FF': 'Cyan',
+		'00F': 'Blue',
+		EE82EE: 'Violet',
+		A9A9A9: 'Dim Gray',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Orange',
+		FFFF00: 'Yellow',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'White'
+	},
+	more: 'เลือกสีอื่นๆ...',
+	panelTitle: 'Colors',
+	textColorTitle: 'สีตัวอักษร'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/tr.js b/plugins/ckeditor4/enhancedcolorbutton/lang/tr.js
new file mode 100644
index 0000000..a0b95f1
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/tr.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'tr', {
+	auto: 'Otomatik',
+	bgColorTitle: 'Arka Renk',
+	colors: {
+		'000': 'Siyah',
+		'800000': 'Kestane',
+		'8B4513': 'Koyu Kahverengi',
+		'2F4F4F': 'Koyu KurÅŸuni Gri',
+		'008080': 'Teal',
+		'000080': 'Mavi',
+		'4B0082': 'Çivit Mavisi',
+		'696969': 'Silik Gri',
+		B22222: 'Ateş Tuğlası',
+		A52A2A: 'Kahverengi',
+		DAA520: 'Altun Sırık',
+		'006400': 'Koyu YeÅŸil',
+		'40E0D0': 'Turkuaz',
+		'0000CD': 'Orta Mavi',
+		'800080': 'Pembe',
+		'808080': 'Gri',
+		F00: 'Kırmızı',
+		FF8C00: 'Koyu Portakal',
+		FFD700: 'Altın',
+		'008000': 'YeÅŸil',
+		'0FF': 'Ciyan',
+		'00F': 'Mavi',
+		EE82EE: 'MenekÅŸe',
+		A9A9A9: 'Koyu Gri',
+		FFA07A: 'Açık Sarımsı',
+		FFA500: 'Portakal',
+		FFFF00: 'Sarı',
+		'00FF00': 'Açık Yeşil',
+		AFEEEE: 'Sönük Turkuaz',
+		ADD8E6: 'Açık Mavi',
+		DDA0DD: 'Mor',
+		D3D3D3: 'Açık Gri',
+		FFF0F5: 'Eflatun Pembe',
+		FAEBD7: 'Antik Beyaz',
+		FFFFE0: 'Açık Sarı',
+		F0FFF0: 'Balsarısı',
+		F0FFFF: 'Gök Mavisi',
+		F0F8FF: 'Reha Mavi',
+		E6E6FA: 'Eflatun',
+		FFF: 'Beyaz'
+	},
+	more: 'DiÄŸer renkler...',
+	panelTitle: 'Renkler',
+	textColorTitle: 'Yazı Rengi'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/tt.js b/plugins/ckeditor4/enhancedcolorbutton/lang/tt.js
new file mode 100644
index 0000000..d099f44
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/tt.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'tt', {
+	auto: 'Автоматик',
+	bgColorTitle: 'Фон төсе',
+	colors: {
+		'000': 'Кара',
+		'800000': 'Бордо',
+		'8B4513': 'Дарчин',
+		'2F4F4F': 'Аспид соры',
+		'008080': 'Күкле-яшелле',
+		'000080': 'Куе күк',
+		'4B0082': 'Индиго',
+		'696969': 'Куе соры',
+		B22222: 'Кармин',
+		A52A2A: 'Чия кызыл',
+		DAA520: 'Алтын каен',
+		'006400': 'Үлән',
+		'40E0D0': 'Фирәзә',
+		'0000CD': 'Фарсы күк',
+		'800080': 'Шәмәхә',
+		'808080': 'Соры',
+		F00: 'Кызыл',
+		FF8C00: 'Кабак',
+		FFD700: 'Алтын',
+		'008000': 'Яшел',
+		'0FF': 'Ачык зәңгәр',
+		'00F': 'Зәңгәр',
+		EE82EE: 'Миләүшә',
+		A9A9A9: 'Ачык соры',
+		FFA07A: 'Кызгылт сары алсу',
+		FFA500: 'Кызгылт сары',
+		FFFF00: 'Сары',
+		'00FF00': 'Лайм',
+		AFEEEE: 'Тонык күк',
+		ADD8E6: 'Тонык күкбаш',
+		DDA0DD: 'Аксыл шәмәхә',
+		D3D3D3: 'Ачык соры',
+		FFF0F5: 'Ал ала миләүшә',
+		FAEBD7: 'Җитен',
+		FFFFE0: 'Ачык сары',
+		F0FFF0: 'Аксыл көрән',
+		F0FFFF: 'Ап-ак',
+		F0F8FF: 'Аксыл зәңгәр диңгез',
+		E6E6FA: 'Ала миләүшә',
+		FFF: 'Ак'
+	},
+	more: 'Башка төсләр...',
+	panelTitle: 'Төсләр',
+	textColorTitle: 'Текст төсе'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/ug.js b/plugins/ckeditor4/enhancedcolorbutton/lang/ug.js
new file mode 100644
index 0000000..3e64360
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/ug.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'ug', {
+	auto: 'ئۆزلۈكىدىن',
+	bgColorTitle: 'تەگلىك رەڭگى',
+	colors: {
+		'000': 'قارا',
+		'800000': 'قىزغۇچ سېرىق',
+		'8B4513': 'توق قوڭۇر',
+		'2F4F4F': 'قارامتۇل يېشىل',
+		'008080': 'كۆكۈش يېشىل',
+		'000080': 'قارامتۇل كۆك',
+		'4B0082': 'كۆكۈش كۈلرەڭ',
+		'696969': 'قارامتۇل كۈلرەڭ',
+		B22222: 'خىش قىزىل',
+		A52A2A: 'قوڭۇر',
+		DAA520: 'ئالتۇن سېرىق',
+		'006400': 'توق يېشىل',
+		'40E0D0': 'كۆكۈچ يېشىل',
+		'0000CD': 'ئوتتۇراھال كۆك',
+		'800080': 'بىنەپشە',
+		'808080': 'كۈلرەڭ',
+		F00: 'قىزىل',
+		FF8C00: 'توق قىزغۇچ سېرىق',
+		FFD700: 'ئالتۇن',
+		'008000': 'يېشىل',
+		'0FF': 'يېشىل كۆك',
+		'00F': 'ÙƒÛ†Ùƒ',
+		EE82EE: 'قىزغۇچ بىنەپشە',
+		A9A9A9: 'توق كۈلرەڭ',
+		FFA07A: 'كاۋا چېچىكى سېرىق',
+		FFA500: 'قىزغۇچ سېرىق',
+		FFFF00: 'سېرىق',
+		'00FF00': 'Lime',
+		AFEEEE: 'سۇس ھاۋا رەڭ',
+		ADD8E6: 'ئوچۇق كۆك',
+		DDA0DD: 'قىزغۇچ بىنەپشە',
+		D3D3D3: 'سۇس كۆكۈچ كۈلرەڭ',
+		FFF0F5: 'سۇس قىزغۇچ بىنەپشە',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'سۇس سېرىق',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'ئاسمان كۆكى',
+		F0F8FF: 'سۇس كۆك',
+		E6E6FA: 'سۇس بىنەپشە',
+		FFF: 'ئاق'
+	},
+	more: 'باشقا رەڭ',
+	panelTitle: 'رەڭ',
+	textColorTitle: 'تېكىست رەڭگى'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/uk.js b/plugins/ckeditor4/enhancedcolorbutton/lang/uk.js
new file mode 100644
index 0000000..08d54ae
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/uk.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'uk', {
+	auto: 'Авто',
+	bgColorTitle: 'Колір фону',
+	colors: {
+		'000': 'Чорний',
+		'800000': 'Бордовий',
+		'8B4513': 'Коричневий',
+		'2F4F4F': 'Темний сіро-зелений',
+		'008080': 'Морської хвилі',
+		'000080': 'Сливовий',
+		'4B0082': 'Індиго',
+		'696969': 'Темносірий',
+		B22222: 'Темночервоний',
+		A52A2A: 'Каштановий',
+		DAA520: 'Бежевий',
+		'006400': 'Темнозелений',
+		'40E0D0': 'Бірюзовий',
+		'0000CD': 'Темносиній',
+		'800080': 'Пурпурний',
+		'808080': 'Сірий',
+		F00: 'Червоний',
+		FF8C00: 'Темнооранжевий',
+		FFD700: 'Жовтий',
+		'008000': 'Зелений',
+		'0FF': 'Синьо-зелений',
+		'00F': 'Синій',
+		EE82EE: 'Фіолетовий',
+		A9A9A9: 'Світлосірий',
+		FFA07A: 'Рожевий',
+		FFA500: 'Оранжевий',
+		FFFF00: 'Яскравожовтий',
+		'00FF00': 'Салатовий',
+		AFEEEE: 'Світлобірюзовий',
+		ADD8E6: 'Блакитний',
+		DDA0DD: 'Світлофіолетовий',
+		D3D3D3: 'Сріблястий',
+		FFF0F5: 'Світлорожевий',
+		FAEBD7: 'Світлооранжевий',
+		FFFFE0: 'Світложовтий',
+		F0FFF0: 'Світлозелений',
+		F0FFFF: 'Світлий синьо-зелений',
+		F0F8FF: 'Світлоблакитний',
+		E6E6FA: 'Лавандовий',
+		FFF: 'Білий'
+	},
+	more: 'Кольори...',
+	panelTitle: 'Кольори',
+	textColorTitle: 'Колір тексту'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/vi.js b/plugins/ckeditor4/enhancedcolorbutton/lang/vi.js
new file mode 100644
index 0000000..350a79d
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/vi.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'vi', {
+	auto: 'Tá»± Ä‘á»™ng',
+	bgColorTitle: 'Màu nền',
+	colors: {
+		'000': 'Đen',
+		'800000': 'Maroon',
+		'8B4513': 'Saddle Brown',
+		'2F4F4F': 'Dark Slate Gray',
+		'008080': 'Teal',
+		'000080': 'Navy',
+		'4B0082': 'Indigo',
+		'696969': 'Dark Gray',
+		B22222: 'Fire Brick',
+		A52A2A: 'Nâu',
+		DAA520: 'Golden Rod',
+		'006400': 'Dark Green',
+		'40E0D0': 'Turquoise',
+		'0000CD': 'Medium Blue',
+		'800080': 'Purple',
+		'808080': 'Xám',
+		F00: 'Đỏ',
+		FF8C00: 'Dark Orange',
+		FFD700: 'Vàng',
+		'008000': 'Xanh lá cây',
+		'0FF': 'Cyan',
+		'00F': 'Xanh da trời',
+		EE82EE: 'Tím',
+		A9A9A9: 'Xám tối',
+		FFA07A: 'Light Salmon',
+		FFA500: 'Màu cam',
+		FFFF00: 'Vàng',
+		'00FF00': 'Lime',
+		AFEEEE: 'Pale Turquoise',
+		ADD8E6: 'Light Blue',
+		DDA0DD: 'Plum',
+		D3D3D3: 'Light Grey',
+		FFF0F5: 'Lavender Blush',
+		FAEBD7: 'Antique White',
+		FFFFE0: 'Light Yellow',
+		F0FFF0: 'Honeydew',
+		F0FFFF: 'Azure',
+		F0F8FF: 'Alice Blue',
+		E6E6FA: 'Lavender',
+		FFF: 'Trắng'
+	},
+	more: 'Màu khác...',
+	panelTitle: 'Màu sắc',
+	textColorTitle: 'Màu chữ'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js b/plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js
new file mode 100644
index 0000000..2b8eaac
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/zh-cn.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'zh-cn', {
+	auto: '自动',
+	bgColorTitle: '背景颜色',
+	colors: {
+		'000': '黑',
+		'800000': '褐红',
+		'8B4513': '深褐',
+		'2F4F4F': '墨绿',
+		'008080': '绿松石',
+		'000080': '海军蓝',
+		'4B0082': '靛蓝',
+		'696969': '暗灰',
+		B22222: '砖红',
+		A52A2A: '褐',
+		DAA520: '金黄',
+		'006400': '深绿',
+		'40E0D0': '蓝绿',
+		'0000CD': '中蓝',
+		'800080': 'ç´«',
+		'808080': '灰',
+		F00: '红',
+		FF8C00: '深橙',
+		FFD700: '金',
+		'008000': '绿',
+		'0FF': '青',
+		'00F': '蓝',
+		EE82EE: 'ç´«ç½—å…°',
+		A9A9A9: '深灰',
+		FFA07A: '亮橙',
+		FFA500: 'æ©™',
+		FFFF00: '黄',
+		'00FF00': '水绿',
+		AFEEEE: '粉蓝',
+		ADD8E6: '亮蓝',
+		DDA0DD: '梅红',
+		D3D3D3: '淡灰',
+		FFF0F5: '淡紫红',
+		FAEBD7: '古董白',
+		FFFFE0: '淡黄',
+		F0FFF0: '蜜白',
+		F0FFFF: '天蓝',
+		F0F8FF: '淡蓝',
+		E6E6FA: 'æ·¡ç´«',
+		FFF: '白'
+	},
+	more: '其它颜色...',
+	panelTitle: '颜色',
+	textColorTitle: '文本颜色'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/lang/zh.js b/plugins/ckeditor4/enhancedcolorbutton/lang/zh.js
new file mode 100644
index 0000000..413dd54
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/lang/zh.js
@@ -0,0 +1,53 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'enhancedcolorbutton', 'zh', {
+	auto: '自動',
+	bgColorTitle: '背景顏色',
+	colors: {
+		'000': '黑色',
+		'800000': '栗色',
+		'8B4513': '鞍褐色',
+		'2F4F4F': '暗瓦灰色',
+		'008080': '水壓色',
+		'000080': '丈青澀',
+		'4B0082': '靛青',
+		'696969': '深灰色',
+		B22222: '磚紅色',
+		A52A2A: '褐色',
+		DAA520: '金黃色',
+		'006400': '深綠色',
+		'40E0D0': '青綠色',
+		'0000CD': '藍色',
+		'800080': '紫色',
+		'808080': '灰色',
+		F00: '紅色',
+		FF8C00: '深橘色',
+		FFD700: '金色',
+		'008000': '綠色',
+		'0FF': '藍綠色',
+		'00F': '藍色',
+		EE82EE: '紫色',
+		A9A9A9: '暗灰色',
+		FFA07A: '亮鮭紅',
+		FFA500: '橘色',
+		FFFF00: '黃色',
+		'00FF00': '鮮綠色',
+		AFEEEE: '綠松色',
+		ADD8E6: '淺藍色',
+		DDA0DD: '枚紅色',
+		D3D3D3: '淺灰色',
+		FFF0F5: '淺紫色',
+		FAEBD7: '骨董白',
+		FFFFE0: '淺黃色',
+		F0FFF0: '蜜瓜綠',
+		F0FFFF: '天藍色',
+		F0F8FF: '愛麗斯蘭',
+		E6E6FA: '淺紫色',
+		FFF: '白色'
+	},
+	more: '更多顏色',
+	panelTitle: '顏色',
+	textColorTitle: '文字顏色'
+} );
diff --git a/plugins/ckeditor4/enhancedcolorbutton/plugin.js b/plugins/ckeditor4/enhancedcolorbutton/plugin.js
new file mode 100644
index 0000000..7466463
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/plugin.js
@@ -0,0 +1,408 @@
+/**
+ * @license Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview The "enhancedcolorbutton" plugin that developed based on
+ *               "colorbutton" that makes it possible to assign
+ *               text and background colors to editor contents.
+ *               "enhancedcolorbutton" will provide convinient to user
+ *               through enhancing "colorbutton" plugin.
+ *               For modified parts, see CHANGES.md file.
+ *
+ */
+CKEDITOR.plugins.add( 'enhancedcolorbutton', {
+	requires: 'panelbutton,floatpanel',
+	// jscs:disable maximumLineLength
+	lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+	// jscs:enable maximumLineLength
+	icons: 'bgcolor,textcolor', // %REMOVE_LINE_CORE%
+	hidpi: true, // %REMOVE_LINE_CORE%
+	init: function( editor ) {
+		var config = editor.config,
+			lang = editor.lang.enhancedcolorbutton;
+
+		// Modified: loaded css file for icons apearence.
+		var link = document.createElement( 'link' );
+		link.setAttribute( 'rel', 'stylesheet' );
+		link.setAttribute( 'type', 'text/css' );
+		link.setAttribute( 'href', this.path + 'css/content.css' );
+		document.getElementsByTagName( 'head' )[0].appendChild( link );
+
+		// Modified: define object for custom variables.
+		var ENHANCED_COLOR_BUTTON = ENHANCED_COLOR_BUTTON || {};
+
+		if ( !CKEDITOR.env.hc ) {
+			addButton( 'TextColor2', 'fore', lang.textColorTitle, 10 );
+			addButton( 'BGColor2', 'back', lang.bgColorTitle, 20 );
+
+			// Modified: add new buttons which set font color or background color with previous used color.
+			editor.ui.addButton( 'TextColor', {
+					label: lang.textColorTitle,
+					command: 'setForeFontColor',
+					toolbar: 'colors,' + 9
+				} );
+			editor.ui.addButton( 'BGColor', {
+					label: lang.bgColorTitle,
+					command: 'setBackFontColor',
+					toolbar: 'colors,' + 19
+				} );
+		}
+		// Modified: add new commands which set font color or background color with previous used color.
+		editor.addCommand( 'setForeFontColor', {
+				exec: function( editor, color ) {
+					color = color || ENHANCED_COLOR_BUTTON.previousForeColor;
+					CKEDITOR.tools.callFunction( ENHANCED_COLOR_BUTTON.applyColorStyle, color, 'fore' );
+				}
+			} );
+		editor.addCommand( 'setBackFontColor', {
+				exec: function( editor, color ) {
+					color = color || ENHANCED_COLOR_BUTTON.previousBackColor;
+					CKEDITOR.tools.callFunction( ENHANCED_COLOR_BUTTON.applyColorStyle, color, 'back' );
+				}
+			} );
+
+		// Function for adding indicator of guick apply buttons.
+		var qaFn = function( editor, qaFn ) {
+			return function() {
+				// Modified: add child node to enhanced color button icons.
+				if ( !ENHANCED_COLOR_BUTTON.currentTextColorDiv || !ENHANCED_COLOR_BUTTON.currentBgColorDiv ) {
+
+					var textColorBtn = document.getElementById( 'cke_' + editor.name ).querySelectorAll( '.cke_button_icon.cke_button__textcolor_icon' )[0],
+					bgColorBtn = document.getElementById( 'cke_' + editor.name ).querySelectorAll( '.cke_button_icon.cke_button__bgcolor_icon' )[0];
+
+					var currentTextColorDiv = document.createElement( 'div' ),
+					currentBgColorDiv = document.createElement( 'div' );
+
+					currentTextColorDiv.setAttribute( 'id', editor.name + '_enhanced_color_button_text' );
+					currentBgColorDiv.setAttribute( 'id', editor.name + '_enhanced_color_button_bg' );
+
+					if ( currentTextColorDiv.classList ) {
+						currentTextColorDiv.classList.add( 'enhanced_color_button_text_color' );
+						currentBgColorDiv.classList.add( 'enhanced_color_button_bg_color' );
+					} else { // For IE 9-.
+						currentTextColorDiv.className += ' enhanced_color_button_text_color';
+						currentBgColorDiv.className += ' enhanced_color_button_bg_color';
+					}
+
+					textColorBtn.appendChild( currentTextColorDiv );
+					bgColorBtn.appendChild( currentBgColorDiv );
+
+					ENHANCED_COLOR_BUTTON.currentTextColorDiv = currentTextColorDiv;
+					ENHANCED_COLOR_BUTTON.currentBgColorDiv = currentBgColorDiv;
+
+					// Remove event listener.
+					editor.removeListener( 'instanceReady', qaFn );
+				}
+
+			};
+		};
+
+		// Add event listener.
+		editor.on( 'instanceReady', qaFn( editor, qaFn ) );
+
+		function addButton( name, type, title, order ) {
+			var style = new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ] ),
+				colorBoxId = CKEDITOR.tools.getNextId() + '_colorBox';
+
+			editor.ui.add( name, CKEDITOR.UI_PANELBUTTON, {
+				label: title,
+				title: title,
+				modes: { wysiwyg: 1 },
+				editorFocus: 0,
+				toolbar: 'colors,' + order,
+				allowedContent: style,
+				requiredContent: style,
+
+				panel: {
+					css: CKEDITOR.skin.getPath( 'editor' ),
+					attributes: { role: 'listbox', 'aria-label': lang.panelTitle }
+				},
+
+				onBlock: function( panel, block ) {
+					block.autoSize = true;
+					block.element.addClass( 'cke_colorblock' );
+					block.element.setHtml( renderColors( panel, type, colorBoxId ) );
+					// The block should not have scrollbars (#5933, #6056)
+					block.element.getDocument().getBody().setStyle( 'overflow', 'hidden' );
+
+					CKEDITOR.ui.fire( 'ready', this );
+
+					var keys = block.keys;
+					var rtl = editor.lang.dir == 'rtl';
+					keys[ rtl ? 37 : 39 ] = 'next'; // ARROW-RIGHT
+					keys[ 40 ] = 'next'; // ARROW-DOWN
+					keys[ 9 ] = 'next'; // TAB
+					keys[ rtl ? 39 : 37 ] = 'prev'; // ARROW-LEFT
+					keys[ 38 ] = 'prev'; // ARROW-UP
+					keys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB
+					keys[ 32 ] = 'click'; // SPACE
+				},
+
+				refresh: function() {
+					if ( !editor.activeFilter.check( style ) )
+						this.setState( CKEDITOR.TRISTATE_DISABLED );
+				},
+
+				// The automatic colorbox should represent the real color (#6010)
+				onOpen: function() {
+
+					var selection = editor.getSelection(),
+						block = selection && selection.getStartElement(),
+						path = editor.elementPath( block ),
+						color;
+
+					if ( !path )
+						return;
+
+					// Find the closest block element.
+					block = path.block || path.blockLimit || editor.document.getBody();
+
+					// The background color might be transparent. In that case, look up the color in the DOM tree.
+					do {
+						color = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent';
+					}
+					while ( type == 'back' && color == 'transparent' && block && ( block = block.getParent() ) );
+
+					// The box should never be transparent.
+					if ( !color || color == 'transparent' )
+						color = '#ffffff';
+
+					if ( config.colorButton_enableAutomatic !== false ) {
+						this._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', color );
+					}
+
+					return color;
+				}
+			} );
+		}
+
+		function renderColors( panel, type, colorBoxId ) {
+			var output = [],
+				colors = config.colorButton_colors.split( ',' ),
+				// Tells if we should include "More Colors..." button.
+				moreColorsEnabled = editor.plugins.colordialog && config.colorButton_enableMore !== false,
+				// aria-setsize and aria-posinset attributes are used to indicate size of options, because
+				// screen readers doesn't play nice with table, based layouts (#12097).
+				total = colors.length + ( moreColorsEnabled ? 2 : 1 );
+
+			var clickFn = CKEDITOR.tools.addFunction( function( color, type ) {
+				var applyColorStyle = arguments.callee;
+				function onColorDialogClose( evt ) {
+					this.removeListener( 'ok', onColorDialogClose );
+					this.removeListener( 'cancel', onColorDialogClose );
+
+					evt.name == 'ok' && applyColorStyle( this.getContentElement( 'picker', 'selectedColor' ).getValue(), type );
+				}
+
+				if ( color == '?' ) {
+					editor.openDialog( 'colordialog', function() {
+						this.on( 'ok', onColorDialogClose );
+						this.on( 'cancel', onColorDialogClose );
+					} );
+
+					return;
+				}
+
+				editor.focus();
+
+				panel.hide();
+
+				editor.fire( 'saveSnapshot' );
+
+				// Clean up any conflicting style within the range.
+				editor.removeStyle( new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ], { color: 'inherit' } ) );
+
+				if ( color ) {
+					var colorStyle = config[ 'colorButton_' + type + 'Style' ];
+
+					colorStyle.childRule = type == 'back' ?
+					function( element ) {
+						// It's better to apply background color as the innermost style. (#3599)
+						// Except for "unstylable elements". (#6103)
+						return isUnstylable( element );
+					} : function( element ) {
+						// Fore color style must be applied inside links instead of around it. (#4772,#6908)
+						return !( element.is( 'a' ) || element.getElementsByTag( 'a' ).count() ) || isUnstylable( element );
+					};
+
+					editor.applyStyle( new CKEDITOR.style( colorStyle, { color: color } ) );
+				}
+
+				// Modified: store current color.
+				// Modified: set background color with the color user selected.
+				if ( type == 'fore' ) {
+					ENHANCED_COLOR_BUTTON.previousForeColor = color ? color : '';
+					ENHANCED_COLOR_BUTTON.currentTextColorDiv.style.backgroundColor = ENHANCED_COLOR_BUTTON.previousForeColor;
+				} else {
+					ENHANCED_COLOR_BUTTON.previousBackColor = color ? color : '';
+					ENHANCED_COLOR_BUTTON.currentBgColorDiv.style.backgroundColor = ENHANCED_COLOR_BUTTON.previousBackColor;
+				}
+
+				editor.fire( 'saveSnapshot' );
+			} );
+
+			// Modified: store the function to make newly added buttons available to call a function which applies the color previously used.
+			ENHANCED_COLOR_BUTTON.applyColorStyle = clickFn;
+
+			if ( config.colorButton_enableAutomatic !== false ) {
+				// Render the "Automatic" button.
+				output.push( '<a class="cke_colorauto" _cke_focus=1 hidefocus=true' +
+					' title="', lang.auto, '"' +
+					' onclick="CKEDITOR.tools.callFunction(', clickFn, ',null,\'', type, '\');return false;"' +
+					' href="javascript:void(\'', lang.auto, '\')"' +
+					' role="option" aria-posinset="1" aria-setsize="', total, '">' +
+						'<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' +
+							'<tr>' +
+								'<td>' +
+									'<span class="cke_colorbox" id="', colorBoxId, '"></span>' +
+								'</td>' +
+								'<td colspan=7 align=center>', lang.auto, '</td>' +
+							'</tr>' +
+						'</table>' +
+					'</a>' );
+			}
+			output.push( '<table role="presentation" cellspacing=0 cellpadding=0 width="100%">' );
+
+			// Render the color boxes.
+			for ( var i = 0; i < colors.length; i++ ) {
+				if ( ( i % 8 ) === 0 )
+					output.push( '</tr><tr>' );
+
+				var parts = colors[ i ].split( '/' ),
+					colorName = parts[ 0 ],
+					colorCode = parts[ 1 ] || colorName;
+
+				// The data can be only a color code (without #) or colorName + color code
+				// If only a color code is provided, then the colorName is the color with the hash
+				// Convert the color from RGB to RRGGBB for better compatibility with IE and <font>. See #5676
+				if ( !parts[ 1 ] )
+					colorName = '#' + colorName.replace( /^(.)(.)(.)$/, '$1$1$2$2$3$3' );
+
+				var colorLabel = editor.lang.enhancedcolorbutton.colors[ colorCode ] || colorCode;
+				output.push( '<td>' +
+					'<a class="cke_colorbox" _cke_focus=1 hidefocus=true' +
+						' title="', colorLabel, '"' +
+						' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'', colorName, '\',\'', type, '\'); return false;"' +
+						' href="javascript:void(\'', colorLabel, '\')"' +
+						' role="option" aria-posinset="', ( i + 2 ), '" aria-setsize="', total, '">' +
+						'<span class="cke_colorbox" style="background-color:#', colorCode, '"></span>' +
+					'</a>' +
+					'</td>' );
+			}
+
+			// Render the "More Colors" button.
+			if ( moreColorsEnabled ) {
+				output.push( '</tr>' +
+					'<tr>' +
+						'<td colspan=8 align=center>' +
+							'<a class="cke_colormore" _cke_focus=1 hidefocus=true' +
+								' title="', lang.more, '"' +
+								' onclick="CKEDITOR.tools.callFunction(', clickFn, ',\'?\',\'', type, '\');return false;"' +
+								' href="javascript:void(\'', lang.more, '\')"', ' role="option" aria-posinset="', total, '" aria-setsize="', total, '">', lang.more, '</a>' +
+						'</td>' ); // tr is later in the code.
+			}
+
+			output.push( '</tr></table>' );
+
+			return output.join( '' );
+		}
+
+		function isUnstylable( ele ) {
+			return ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-nostyle' );
+		}
+	}
+} );
+
+/**
+ * Whether to enable the **More Colors** button in the color selectors.
+ *
+ * Read more in the [documentation](#!/guide/dev_colorbutton)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).
+ *
+ *		config.colorButton_enableMore = false;
+ *
+ * @cfg {Boolean} [colorButton_enableMore=true]
+ * @member CKEDITOR.config
+ */
+
+/**
+ * Defines the colors to be displayed in the color selectors. This is a string
+ * containing hexadecimal notation for HTML colors, without the `'#'` prefix.
+ *
+ * **Since 3.3:** A color name may optionally be defined by prefixing the entries with
+ * a name and the slash character. For example, `'FontColor1/FF9900'` will be
+ * displayed as the color `#FF9900` in the selector, but will be output as `'FontColor1'`.
+ *
+ * Read more in the [documentation](#!/guide/dev_colorbutton)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).
+ *
+ *		// Brazil colors only.
+ *		config.colorButton_colors = '00923E,F8C100,28166F';
+ *
+ *		config.colorButton_colors = 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00';
+ *
+ * @cfg {String} [colorButton_colors=see source]
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.colorButton_colors = '000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,' +
+	'B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,' +
+	'F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,' +
+	'FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,' +
+	'FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';
+
+/**
+ * Stores the style definition that applies the text foreground color.
+ *
+ * Read more in the [documentation](#!/guide/dev_colorbutton)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).
+ *
+ *		// This is actually the default value.
+ *		config.colorButton_foreStyle = {
+ *			element: 'span',
+ *			styles: { color: '#(color)' }
+ *		};
+ *
+ * @cfg [colorButton_foreStyle=see source]
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.colorButton_foreStyle = {
+	element: 'span',
+	styles: { 'color': '#(color)' },
+	overrides: [ {
+		element: 'font', attributes: { 'color': null }
+	} ]
+};
+
+/**
+ * Stores the style definition that applies the text background color.
+ *
+ * Read more in the [documentation](#!/guide/dev_colorbutton)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).
+ *
+ *		// This is actually the default value.
+ *		config.colorButton_backStyle = {
+ *			element: 'span',
+ *			styles: { 'background-color': '#(color)' }
+ *		};
+ *
+ * @cfg [colorButton_backStyle=see source]
+ * @member CKEDITOR.config
+ */
+CKEDITOR.config.colorButton_backStyle = {
+	element: 'span',
+	styles: { 'background-color': '#(color)' }
+};
+
+/**
+ * Whether to enable the **Automatic** button in the color selectors.
+ *
+ * Read more in the [documentation](#!/guide/dev_colorbutton)
+ * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).
+ *
+ *		config.colorButton_enableAutomatic = false;
+ *
+ * @cfg {Boolean} [colorButton_enableAutomatic=true]
+ * @member CKEDITOR.config
+ */
diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html
new file mode 100644
index 0000000..889ef0f
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.html
@@ -0,0 +1 @@
+<textarea id='noFocus'></textarea>
diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js
new file mode 100644
index 0000000..ddd0c70
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/tests/enhancedcolorbutton.js
@@ -0,0 +1,174 @@
+/* bender-tags: editor,unit */
+/* bender-ckeditor-plugins: enhancedcolorbutton,toolbar,wysiwygarea */
+
+( function() {
+	'use strict';
+
+	bender.editor = true;
+
+	bender.test( {
+		'test opening text/background color': function() {
+			var ed = this.editor, bot = this.editorBot;
+			var txtColorBtn = ed.ui.get( 'TextColor2' ),
+				bgColorBtn = ed.ui.get( 'BGColor2' );
+
+			bot.setHtmlWithSelection( '[<h1 style="color: #00FF00; background: #FF0000">Moo</h1>]' );
+
+			// Check if automatic text color is obtained correctly.
+			txtColorBtn.click( ed );
+			assert.areEqual( '#00ff00', CKEDITOR.tools.convertRgbToHex( txtColorBtn.onOpen() ), 'Text color must match.' );
+
+			// Check if automatic background color is obtained correctly.
+			bgColorBtn.click( ed );
+			assert.areEqual( '#ff0000', CKEDITOR.tools.convertRgbToHex( bgColorBtn.onOpen() ), 'Text color must match.' );
+		},
+
+		// #10975
+		'test open palette without focus': function() {
+			var editor = CKEDITOR.replace( 'noFocus' );
+			editor.on( 'instanceReady', function() {
+				resume( function() {
+					var txtColorBtn = editor.ui.get( 'TextColor2' );
+					txtColorBtn.click( editor );
+
+					assert.areEqual( CKEDITOR.TRISTATE_ON, txtColorBtn._.state, 'txtColorBtn.click should not throw an error.' );
+				} );
+			} );
+
+			wait();
+		},
+
+		'test enableAutomatic=true option': function() {
+			bender.editorBot.create( {
+				name: 'editor1',
+				config: {
+					colorButton_enableAutomatic: true
+				}
+			}, function( bot ) {
+				var editor = bot.editor,
+					txtColorBtn = editor.ui.get( 'TextColor2' ),
+					bgColorBtn = editor.ui.get( 'BGColor2' );
+
+				txtColorBtn.click( editor );
+				assert.areEqual( 1, txtColorBtn._.panel.getBlock( txtColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should be visible.' );
+
+				bgColorBtn.click( editor );
+				assert.areEqual( 1, bgColorBtn._.panel.getBlock( bgColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should be visible.' );
+			} );
+		},
+
+		'test enableAutomatic=false option': function() {
+			bender.editorBot.create( {
+				name: 'editor2',
+				config: {
+					colorButton_enableAutomatic: false
+				}
+			}, function( bot ) {
+				var editor = bot.editor,
+					txtColorBtn = editor.ui.get( 'TextColor2' ),
+					bgColorBtn = editor.ui.get( 'BGColor2' );
+
+				txtColorBtn.click( editor );
+				assert.areEqual( 0, txtColorBtn._.panel.getBlock( txtColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should not be visible.' );
+
+				bgColorBtn.click( editor );
+				assert.areEqual( 0, bgColorBtn._.panel.getBlock( bgColorBtn._.id ).element.find( '.cke_colorauto' ).count(), 'Automatic button should not be visible.' );
+			} );
+		},
+
+		// Additional test cases for enhanced color button.
+		'test applying text colors': function() {
+			var ed = this.editor,
+				bot = this.editorBot,
+				color = '#ffff00',
+				expected = 'color:' + color,
+				actual;
+
+			bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' );
+			ed.execCommand( 'setForeFontColor', [ color ] );
+
+			actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase();
+			assert.areEqual( expected, actual, 'text color should be changed with selected one' );
+		},
+
+		'test applying background colors': function() {
+			var ed = this.editor,
+				bot = this.editorBot,
+				color = '#ffd700',
+				expected = 'background-color:' + color,
+				actual;
+
+			bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' );
+			ed.execCommand( 'setBackFontColor', [ color ] );
+
+			actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase();
+			assert.areEqual( expected, actual, 'background color should be changed with selected one' );
+		},
+
+		'test quick apply button of text color': function() {
+			var ed = this.editor,
+				bot = this.editorBot,
+				color = '#008000',
+				expected = 'color:' + color,
+				actual,
+				txtColorBtn = ed.ui.get( 'TextColor' );
+
+			bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' );
+			ed.execCommand( 'setForeFontColor', [ color ] );
+			bot.setHtmlWithSelection( '[<p>Another test sentence for color change</p>]' );
+			txtColorBtn.click( ed );
+
+			actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase();
+			assert.areEqual( expected, actual, 'text color should be changed with lastly used one' );
+		},
+
+		'test quick apply button of backgound color': function() {
+			var ed = this.editor,
+				bot = this.editorBot,
+				color = '#d3d3d3',
+				expected = 'background-color:' + color,
+				actual,
+				bgColorBtn = ed.ui.get( 'BGColor' );
+
+			bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' );
+			ed.execCommand( 'setBackFontColor', [ color ] );
+			bot.setHtmlWithSelection( '[<p>Another test sentence for color change</p>]' );
+			bgColorBtn.click( ed );
+
+			actual = CKEDITOR.tools.convertRgbToHex( ed.editable().find( 'span' ).getItem( 0 ).getAttributes().style ).replace( /\s+/g, '' ).replace( /;+/g, '' ).toLowerCase();
+			assert.areEqual( expected, actual, 'text color should be changed with lastly used one' );
+		},
+
+		'test indicator of text color': function() {
+			if ( CKEDITOR.env.ie )
+				assert.ignore();
+
+			var ed = this.editor,
+				bot = this.editorBot,
+				color = '#faebd7',
+				actual;
+
+			bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' );
+			ed.execCommand( 'setForeFontColor', [ color ] );
+
+			actual = CKEDITOR.tools.convertRgbToHex( document.getElementById( ed.name + '_enhanced_color_button_text' ).style.backgroundColor ).toLowerCase();
+			assert.areEqual( color, actual, 'background color of indicator should be set with lastly used one' );
+		},
+
+		'test indicator of background color': function() {
+			if ( CKEDITOR.env.ie )
+				assert.ignore();
+
+			var ed = this.editor,
+				bot = this.editorBot,
+				color = '#ffd700',
+				actual;
+
+			bot.setHtmlWithSelection( '[<p>Test sentence for color change</p>]' );
+			ed.execCommand( 'setBackFontColor', [ color ] );
+
+			actual = CKEDITOR.tools.convertRgbToHex( document.getElementById( ed.name + '_enhanced_color_button_bg' ).style.backgroundColor ).toLowerCase();
+			assert.areEqual( color, actual, 'background color of indicator should be set with lastly used one' );
+		}
+	} );
+} )();
diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html
new file mode 100644
index 0000000..02195ae
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.html
@@ -0,0 +1,16 @@
+<p>Editor 1</p>
+<textarea cols="80" id="editor1" name="editor1" rows="10">
+	<p><strong>Apollo 11</strong> was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>
+</textarea>
+
+<p>Editor 2</p>
+<div contenteditable="true" id="editor2">
+	<p><strong>Apollo 11</strong> was the spaceflight that landed the first humans, Americans Neil Armstrong and Buzz Aldrin, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.</p>
+</div>
+
+<script>
+	CKEDITOR.replace( 'editor1', {
+		colorButton_enableAutomatic: false
+	} );
+	CKEDITOR.inline( 'editor2' );
+</script>
diff --git a/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md
new file mode 100644
index 0000000..8f90075
--- /dev/null
+++ b/plugins/ckeditor4/enhancedcolorbutton/tests/manual/enableautomatic.md
@@ -0,0 +1,17 @@
+@bender-tags: 12440, tc, 4.5.8
+@bender-ui: collapsed
+@bender-ckeditor-plugins: wysiwygarea, toolbar, colorbutton, floatingspace
+
+### Scenario 1:
+
+1. Click *Text Color* button in Editor 1.
+	* **Expected**: There is no *Automatic* option.
+1. Click *Background Color* button in Editor 1.
+	* **Expected**: There is no *Automatic* option.
+
+### Scenario 2:
+
+1. Click *Text Color* button in Editor 2.
+	* **Expected**: There is *Automatic* option.
+1. Click *Background Color* button in Editor 2.
+	* **Expected**: There is *Automatic* option.
diff --git a/plugins/ckeditor4/eqneditor/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/_notes/dwsync.xml
new file mode 100755
index 0000000..6ad5557
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/_notes/dwsync.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8" ?>
<dwsync>
<file name="plugin.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3453964725" remote="319783739114188684" Dst="-1" />
<file name="plugin.js" server="192.155.228.10/html/" local="3480571058" remote="319783739124432508" Dst="-1" />
<file name=".DS_Store" server="192.168.1.106//home/codecogs/html/" local="3454008094" remote="319783739123571165" Dst="-1" />
<file name="plugin.js" server="192.168.1.106//home/codecogs/html/" local="3476475718" remote="319783739123571165" Dst="-1" />
<file name=".DS_Store" server="192.168.1.107//home/codecogs/html/" local="3454008094" remote="319783739123607449" Dst="-1" />
<file name="plugin.js" server="192.168.1.107//home/codecogs/html/" local="3479896453" remote="319783739123765133" Dst="-1" />
<file name=".DS_Store" server="192.168.1.108//home/codecogs/html/" local="3454008094" remote="319783739123884034" Dst="-1" />
<file name="plugin.js" server="192.168.1.108//home/codecogs/html/" local="3480571058" remote="319783739124450335" Dst="-1" />
</dwsync>
\ No newline at end of file
diff --git a/plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml
new file mode 100755
index 0000000..b846c44
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/dialogs/_notes/dwsync.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8" ?>
<dwsync>
<file name="eqneditor.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3465626774" remote="319783739114188674" Dst="-1" />
<file name="eqneditor.js" server="192.155.228.10/html/" local="3479836247" remote="319783739123832448" Dst="-1" />
<file name="eqneditor.js" server="192.168.1.106//home/codecogs/html/" local="3476468861" remote="319783739123571165" Dst="-1" />
<file name="eqneditor.js" server="192.168.1.107//home/codecogs/html/" local="3479836247" remote="319783739123704929" Dst="-1" />
<file name="eqneditor.js" server="192.168.1.108//home/codecogs/html/" local="3479836247" remote="319783739123884034" Dst="-1" />
</dwsync>
\ No newline at end of file
diff --git a/plugins/ckeditor4/eqneditor/dialogs/eqneditor.js b/plugins/ckeditor4/eqneditor/dialogs/eqneditor.js
new file mode 100755
index 0000000..6af9935
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/dialogs/eqneditor.js
@@ -0,0 +1,87 @@
+/* 
+ Equation Editor Plugin for CKEditor v4
+ Version 1.4
+
+ This plugin allows equations to be created and edited from within CKEditor.
+ For more information goto: http://www.codecogs.com/latex/integration/ckeditor_v4/install.php
+ 
+ Copyright CodeCogs 2006-2013
+ Written by Will Bateman.
+ 
+ Special Thanks to:
+  - Kyle Jones for a fix to allow multiple editor to load on one page
+*/
+window.CCounter=0;
+CKEDITOR.dialog.add( 'eqneditorDialog', function(editor)
+{	
+	var http = ('https:' == document.location.protocol ? 'https://' : 'http://');
+	window.CCounter++;
+
+	return {
+		title : editor.lang.eqneditor.title,
+		minWidth : 550,
+		minHeight : 380,
+		resizable: CKEDITOR.DIALOG_RESIZE_NONE,
+		contents : [
+			{
+				id : 'CCEquationEditor',
+				label : 'EqnEditor',
+				elements : [
+	  			{
+							type: 'html',
+							html: '<div id="CCtoolbar'+window.CCounter+'"></div>',	
+							style: 'margin-top:-9px'					
+					},
+					{
+							type: 'html',
+							html: '<label for="CClatex'+window.CCounter+'">Equation (LaTeX):</label>',
+					},
+					{
+							type: 'html',
+							html: '<textarea id="CClatex'+window.CCounter+'" rows="5"></textarea>',
+							style:'border:1px solid #8fb6bd; width:540px; font-size:16px; padding:5px; background-color:#ffc',
+					},
+					{
+						 	type: 'html',
+							html: '<label for="CCequation'+window.CCounter+'">Preview:</label>'		
+					},
+					{
+							type :'html',
+							html: '<div style="position:absolute; left:5px; bottom:0; z-index:999"><a href="http://www.codecogs.com" target="_blank"><img src="'+http+'latex.codecogs.com/images/poweredbycc.gif" alt="Powered by CodeCogs" style="vertical-align:-4px; border:none"/></a> &nbsp; <a href="http://www.codecogs.com/latex/about.php" target="_blank">About</a> | <a href="http://www.codecogs.com/latex/popup.php" target="_blank">Install</a> | <a href="http://www.codecogs.com/pages/forums/forum_view.php?f=28" target="_blank">Forum</a> | <a href="http://www.codecogs.com" target="_blank">CodeCogs</a> &copy; 2007-2014</div><img id="CCequation'+window.CCounter+'" src="'+http+'www.codecogs.com/images/spacer.gif" />'					
+					}
+				]
+			}
+		],
+		
+		onLoad : function() {
+			EqEditor.embed('CCtoolbar'+window.CCounter,'','efull');
+ 			EqEditor.add(new EqTextArea('CCequation'+window.CCounter, 'CClatex'+window.CCounter),false);
+		},
+				
+		onShow : function() {
+			var dialog = this,
+				  sel = editor.getSelection(),
+				  image = sel.getStartElement().getAscendant('img',true);
+			 
+			// has the users selected an equation. Make sure we have the image element, include itself		
+			if(image) 
+			{
+				var sName = image.getAttribute('src').match( /(gif|svg)\.latex\?(.*)/ );
+				if(sName!=null) EqEditor.getTextArea().setText(sName[2]);
+				dialog.insertMode = true;
+			}
+			
+			// set-up the field values based on selected or newly created image
+			dialog.setupContent( dialog.image );
+		},
+		
+		onOk : function() {
+			var eqn = editor.document.createElement( 'img' );
+			eqn.setAttribute( 'alt', EqEditor.getTextArea().getLaTeX());
+			eqn.setAttribute( 'src', EqEditor.getTextArea().exportEquation('urlencoded'));
+			editor.insertElement(eqn);
+			Example.add_history(EqEditor.getTextArea().getLaTeX());
+		}
+	};
+});
+
diff --git a/plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml
new file mode 100755
index 0000000..9676e75
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/dialogs/lang/_notes/dwsync.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8" ?>
<dwsync>
<file name="en.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3453645807" remote="319783739114188676" Dst="-1" />
<file name="en.js" server="192.168.1.106//home/codecogs/html/" local="3453645807" remote="319783739123571165" Dst="-1" />
<file name="en.js" server="192.168.1.107//home/codecogs/html/" local="3453645807" remote="319783739123607450" Dst="-1" />
<file name="en.js" server="192.155.228.10/html/" local="3453645807" remote="319783739123836048" Dst="-1" />
<file name="en.js" server="192.168.1.108//home/codecogs/html/" local="3453645807" remote="319783739123884035" Dst="-1" />
</dwsync>
\ No newline at end of file
diff --git a/plugins/ckeditor4/eqneditor/dialogs/lang/en.js b/plugins/ckeditor4/eqneditor/dialogs/lang/en.js
new file mode 100755
index 0000000..eaf1e3a
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/dialogs/lang/en.js
@@ -0,0 +1,8 @@
+
+CKEDITOR.plugins.setLang( 'eqneditor', 'en',
+{
+	title		: 'CodeCogs Equation Editor',
+	menu    : 'Maths',
+	toolbar	: 'Insert Equation',
+	edit		: 'Edit Equation'
+});
diff --git a/plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml
new file mode 100755
index 0000000..5f956b2
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/icons/_notes/dwsync.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8" ?>
<dwsync>
<file name="eqneditor.png" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3438414374" remote="319783739114188679" Dst="-1" />
<file name=".DS_Store" server="192.168.1.106//home/codecogs/html/" local="3438414387" remote="319783739123571165" Dst="-1" />
<file name="eqneditor.png" server="192.168.1.106//home/codecogs/html/" local="3438414374" remote="319783739123571165" Dst="-1" />
<file name=".DS_Store" server="192.168.1.107//home/codecogs/html/" local="3438414387" remote="319783739123607450" Dst="-1" />
<file name="eqneditor.png" server="192.168.1.107//home/codecogs/html/" local="3438414374" remote="319783739123607450" Dst="-1" />
<file name="eqneditor.png" server="192.155.228.10/html/" local="3438414374" remote="319783739123836048" Dst="-1" />
<file name=".DS_Store" server="192.168.1.108//home/codecogs/html/" local="3438414387" remote="319783739123884035" Dst="-1" />
<file name="eqneditor.png" server="192.168.1.108//home/codecogs/html/" local="3438414374" remote="319783739123884035" Dst="-1" />
</dwsync>
\ No newline at end of file
diff --git a/plugins/ckeditor4/eqneditor/icons/eqneditor.png b/plugins/ckeditor4/eqneditor/icons/eqneditor.png
new file mode 100755
index 0000000000000000000000000000000000000000..2915f424ee0b711a8f4b2d47cc953049654e8994
GIT binary patch
literal 1093
zcmaJ=TSyd97@jgDB*AV_5p|d~&}!$lj_nR^vb*DD!?A5$a(k+A=BSg-oN4ChuKN&V
z^w0%Ck)Y`E(1jo@D5{5&$m$`i2qKDlDX8c|7pNW*!p^8`J+uv+Ip_TR-}m3Xvp><?
zP+GF0grca@c%z&odzrW97nA?$Z<8w7mgBlKZb9uhqdJg^=%@{XxT$u)BvkdjUH4!O
zMHQ7BsWeV2O_GL8M)iD{tZ5T8Mb*@1ZB^@n7_`9-!wS=1uHU4Ap@->KQQ;Ij20M+$
zoC8~O%_%L{rG<35b|a|CN`%0KSOr<L+j6CBn4aR5$k{WqG?;S1U154UskD*+G2}oX
zGMr!Is(Dad#qd>Js4BD`2prF`yuflB{5&U#8zhbgGapT&IeNR4l<Q|=kz1JV#MqWt
zHj~LPnE->F4wesvLM$h+g5W0}ez(uUYSwSLzC42rUCl9UY#<AGjA|R|!C{(YI$eTk
z&(d1%Oq)o<*sN-^Ji~b<<sB8}|E{Jv>+Rws{FCoLiQQD64cR1gQIDgM!L|FmP_`6v
zpo)=`La006#Y88<$n8Wnh_#3e4-{21EYC89P!uU{xmdL{7?;B|;b06ymx5eSs20Sk
zfE)?(e4P-9@`0c%M<R8iC<H@+JXS_pj|nZD$LfEuVnM7Y2Gb^yW#|~aP_K8838spc
zjKaAH1^H&Mdf{9G1+gqihV@4K*QoO*q95-#D_nA!l|HnH-W?+BWN+dDc@)>;awL^~
zek>U&y~8ayKX9vJI9fRztvEDRv1Ghrcx=lvFdVhQa0tG+`jLLKc+J44@_DsqeNTN)
zF74a%?lxNXd0PWj(!I23<$(v(;jch=G~j#D@pyEw_sYbGksJK6{lnbY<vE*m>-3R+
zu#j5hFB|gpo_Q<&${j5MJ9oqGwAD2Jdc5`F!Se6Vj=yTmWiEa>z4hFQmpAT~uYKH5
ubob}|;*;+;jS5_-wQ|+oiPw|0a~DvFQ%%v2>jp-=haInLmM=ti^#2CB<7#98

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml b/plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml
new file mode 100755
index 0000000..85ee306
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/lang/_notes/dwsync.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="utf-8" ?>
<dwsync>
<file name="en.js" server="70.86.99.36//home/codecogs/domains/latex.codecogs.com/public_html/" local="3383988448" remote="24858853597" Dst="-1" />
<file name="en.js" server="70.86.99.35" local="3383988448" remote="12028370156" Dst="-1" />
<file name="en.js" server="70.86.99.35//home/codecogs/domains/latex.codecogs.com/public_html/" local="3453645337" remote="319783739114188682" Dst="-1" />
<file name="en.js" server="192.168.1.106//home/codecogs/html/" local="3453645337" remote="319783739123571165" Dst="-1" />
<file name="en.js" server="192.168.1.107//home/codecogs/html/" local="3453645337" remote="319783739123607450" Dst="-1" />
<file name="en.js" server="192.155.228.10/html/" local="3453645337" remote="319783739123836048" Dst="-1" />
<file name="en.js" server="192.168.1.108//home/codecogs/html/" local="3453645337" remote="319783739123884035" Dst="-1" />
</dwsync>
\ No newline at end of file
diff --git a/plugins/ckeditor4/eqneditor/lang/en.js b/plugins/ckeditor4/eqneditor/lang/en.js
new file mode 100755
index 0000000..eaf1e3a
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/lang/en.js
@@ -0,0 +1,8 @@
+
+CKEDITOR.plugins.setLang( 'eqneditor', 'en',
+{
+	title		: 'CodeCogs Equation Editor',
+	menu    : 'Maths',
+	toolbar	: 'Insert Equation',
+	edit		: 'Edit Equation'
+});
diff --git a/plugins/ckeditor4/eqneditor/plugin.js b/plugins/ckeditor4/eqneditor/plugin.js
new file mode 100755
index 0000000..40232e7
--- /dev/null
+++ b/plugins/ckeditor4/eqneditor/plugin.js
@@ -0,0 +1,102 @@
+/* 
+ Equation Editor Plugin for CKEditor v4
+ Version 1.4
+
+ This plugin allows equations to be created and edited from within CKEditor.
+ For more information goto: http://www.codecogs.com/latex/integration/ckeditor_v4/install.php
+ 
+ Copyright CodeCogs 2006-2013
+ Written by Will Bateman.
+*/
+CKEDITOR.plugins.add( 'eqneditor', {
+	availableLangs:{en:1},
+	lang : "en",
+	requires: [ 'dialog' ],
+	icons: "eqneditor",
+	
+	init : function(editor)
+	{		
+	  var host='latex.codecogs.com';
+	  var http=('https:' == document.location.protocol ? 'https://' : 'http://');
+			
+		// First make sure we have loaded the necessary scripts
+  	CKEDITOR.scriptLoader.load( [
+		http+host+'/js/eq_config.js', 
+		http+host+'/js/eq_editor-lite-17.js',
+		]);
+		
+		// Load Additional CSS 
+		var fileref=document.createElement("link");
+		fileref.setAttribute("rel", "stylesheet");
+		fileref.setAttribute("type", "text/css");
+		fileref.setAttribute("href", http+host+'/eqneditor/css/equation-embed.css');
+		document.getElementsByTagName("head")[0].appendChild(fileref);
+	
+		var pluginCmd='eqneditorDialog';
+
+		// Add the link and unlink buttons.
+		editor.addCommand(pluginCmd, new CKEDITOR.dialogCommand(pluginCmd,
+			{
+				allowedContent: 'img[src,alt]',
+				requiredContent: 'img[src,alt]'
+			})
+		);
+		
+		CKEDITOR.dialog.add(pluginCmd, this.path+"dialogs/eqneditor.js");
+				
+		editor.ui.addButton( 'EqnEditor', {
+			label : editor.lang.eqneditor.toolbar,
+			command : pluginCmd,
+			icon: this.path + 'icons/eqneditor.png',
+			toolbar: 'insert'
+		});
+
+		// add context-menu entry
+		if (editor.contextMenu)
+		{
+			editor.addMenuGroup(editor.lang.eqneditor.menu);
+			editor.addMenuItem( 'eqneditor', {
+				label : editor.lang.eqneditor.edit,
+				icon : this.path + 'icons/eqneditor.png',
+				command : pluginCmd,
+				group : editor.lang.eqneditor.menu
+			});
+			
+			// if the selected item is image of class 'mathImg',
+			// we shold be interested in it
+			editor.contextMenu.addListener( function(element) {
+				var res={};
+				if (element.getAscendant('img', true))
+				{
+					var sName = element.getAttribute('src').match( /(gif|svg)\.latex\?(.*)/ );
+					if(sName!=null)	
+					{
+						res['eqneditor'] = CKEDITOR.TRISTATE_OFF;
+						return res;
+					}
+				}
+			});
+			
+		}	
+		
+		editor.on( 'doubleclick', function(evt) 
+		{
+			var element = evt.data.element;
+			if (element && element.is('img')) 
+			{
+				var sName = element.getAttribute('src').match( /(gif|svg)\.latex\?(.*)/ );
+				if(sName!=null)
+				{
+					evt.data.dialog = pluginCmd;
+					evt.cancelBubble = true; 
+					evt.returnValue = false;
+					evt.stop();	
+				}
+			}
+		}, null, null, 1);
+		
+	}	
+});
+
+	
+
diff --git a/plugins/ckeditor4/fixed/plugin.js b/plugins/ckeditor4/fixed/plugin.js
new file mode 100644
index 0000000..a7a0e9e
--- /dev/null
+++ b/plugins/ckeditor4/fixed/plugin.js
@@ -0,0 +1,47 @@
+/*
+*   Plugin developed by Netbroad, C.B.
+*
+*   LICENCE: GPL, LGPL, MPL
+*   NON-COMMERCIAL PLUGIN.
+*
+*   Website: netbroad.eu
+*   Twitter: @netbroadcb
+*   Facebook: Netbroad
+*   LinkedIn: Netbroad
+*
+*/
+
+CKEDITOR.plugins.add( 'fixed', {
+    init: function( editor ) {
+        window.addEventListener('scroll', function(){
+            var content             = document.getElementsByClassName('cke_contents').item(0);
+            var toolbar             = document.getElementsByClassName('cke_top').item(0);
+            var editor              = document.getElementsByClassName('cke').item(0);
+            var inner               = document.getElementsByClassName('cke_inner').item(0);
+            var scrollvalue         = document.documentElement.scrollTop > document.body.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop;
+
+            toolbar.style.width     = content.offsetWidth + "px";
+            toolbar.style.top       = "0px";
+            toolbar.style.left      = "0px";
+            toolbar.style.right     = "0px";
+            toolbar.style.margin    = "0 auto";
+            toolbar.style.boxSizing = "border-box";
+
+            if(toolbar.offsetTop <= scrollvalue){
+                toolbar.style.position   = "fixed";
+                content.style.paddingTop = toolbar.offsetHeight + "px";
+            }
+
+            if(editor.offsetTop > scrollvalue && (editor.offsetTop + editor.offsetHeight) >= (scrollvalue + toolbar.offsetHeight)){
+                toolbar.style.position   = "relative";
+                content.style.paddingTop = "0px";
+            }
+
+            if((editor.offsetTop + editor.offsetHeight) < (scrollvalue + toolbar.offsetHeight)){
+                toolbar.style.position = "absolute";
+                toolbar.style.top      = "calc(100% - " + toolbar.offsetHeight + "px)";
+                inner.style.position   = "relative";
+            }
+        }, false);
+    }
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/floating-tools/README.md b/plugins/ckeditor4/floating-tools/README.md
new file mode 100644
index 0000000..a5070c1
--- /dev/null
+++ b/plugins/ckeditor4/floating-tools/README.md
@@ -0,0 +1,20 @@
+![Screenshot](http://stracker-phil.github.com/Floating-Tools/images/example-2.png)
+
+-----
+
+Floating-Tools
+==============
+
+Plugin for CKEditor to show an floating toolbar for quick access to formatting functions!
+
+
+Documentation
+=============
+
+Also have a look at the project-page at 
+http://stracker-phil.github.com/Floating-Tools/
+
+-----
+
+Philipp Stracker
+http://www.stracker.net
diff --git a/plugins/ckeditor4/floating-tools/plugin.js b/plugins/ckeditor4/floating-tools/plugin.js
new file mode 100644
index 0000000..e332868
--- /dev/null
+++ b/plugins/ckeditor4/floating-tools/plugin.js
@@ -0,0 +1,582 @@
+/**
+ * Floating-Tools
+ * Author: Philipp Stracker (2013)
+ * Project page: http://stracker-phil.github.com/Floating-Tools/
+ */
+(function() {
+
+	var floatingtools = function() {
+		this.dom = null;  // the main toolbar-object
+		this.toolbars = [];
+		this.is_visible = false;
+
+		this.hide_on_blur = true; //!TODO: Make this an configuration option
+
+		this.toolbarsize = false;
+		this.editoroffset = false;
+		this.mousepos = {x:0, y:0};
+	};
+
+
+
+
+	CKEDITOR.plugins.add( 'floating-tools', {
+		requires: 'toolbar',
+
+
+		init: function( editor ) {
+
+
+			/**
+			 * Create the UI elements required by this plugin
+			 * UI is the floating toolbar
+			 * Many parts of this function are taken from the toolbar plugin
+			 */
+			editor.on( 'uiSpace', function( event ) {
+				// Create toolbar only once...
+				event.removeListener();
+
+				editor.floatingtools = new floatingtools();
+
+				var labelId = CKEDITOR.tools.getNextId();
+
+				var output = [
+					// Did not find a nicer way to include the CSS required for the toolbar...
+					'<style>',
+					'.pos-relative {position:relative}',
+					'.cke_floatingtools{',
+						'position:absolute;',
+						'left:0;',
+						'top:-500px;',
+						'padding: 5px 0 0 6px;',
+						'border:1px solid #b1b1b1;',
+						'border-radius:3px;',
+						'box-shadow: 0 1px 10px rgba(0,0,0,0.3);',
+						'transition:opacity .1s;-o-transition:opacity .1s;-moz-transition:opacity .1s;-webkit-transition:opacity .1s;',
+					'}',
+					'</style>',
+					'<span id="', labelId, '" class="cke_voice_label">', editor.lang.toolbar.toolbars, '</span>',
+					'<span id="' + editor.ui.spaceId( 'floatingtools' ) + '" class="cke_floatingtools cke_top" role="group" aria-labelledby="', labelId, '" onmousedown="return false;">' ];
+
+				var groupStarted, pendingSeparator;
+				var toolbars = editor.floatingtools.toolbars,
+					toolbar = getFloatingToolbarConfig( editor );
+
+
+				// Build the toolbar
+				for ( var r = 0; r < toolbar.length; r++ ) {
+					var toolbarId,
+						toolbarObj = 0,
+						toolbarName,
+						row = toolbar[ r ],
+						items;
+
+					// It's better to check if the row object is really
+					// available because it's a common mistake to leave
+					// an extra comma in the toolbar definition
+					// settings, which leads on the editor not loading
+					// at all in IE. (#3983)
+					if ( !row )
+						continue;
+
+					if ( groupStarted ) {
+						output.push( '</span>' );
+						groupStarted = 0;
+						pendingSeparator = 0;
+					}
+
+					if ( row === '/' ) {
+						output.push( '<span class="cke_toolbar_break"></span>' );
+						continue;
+					}
+
+					items = row.items || row;
+
+					// Create all items defined for this toolbar.
+					for ( var i = 0; i < items.length; i++ ) {
+						var item = items[ i ],
+							canGroup;
+
+						if ( item ) {
+							if ( item.type == CKEDITOR.UI_SEPARATOR ) {
+								// Do not add the separator immediately. Just save
+								// it be included if we already have something in
+								// the toolbar and if a new item is to be added (later).
+								pendingSeparator = groupStarted && item;
+								continue;
+							}
+
+							canGroup = item.canGroup !== false;
+
+							// Initialize the toolbar first, if needed.
+							if ( !toolbarObj ) {
+								// Create the basic toolbar object.
+								toolbarId = CKEDITOR.tools.getNextId();
+								toolbarObj = { id: toolbarId, items: [] };
+								toolbarName = row.name && ( editor.lang.toolbar.toolbarGroups[ row.name ] || row.name );
+
+								// Output the toolbar opener.
+								output.push( '<span id="', toolbarId, '" class="cke_toolbar"', ( toolbarName ? ' aria-labelledby="' + toolbarId + '_label"' : '' ), ' role="toolbar">' );
+
+								// If a toolbar name is available, send the voice label.
+								toolbarName && output.push( '<span id="', toolbarId, '_label" class="cke_voice_label">', toolbarName, '</span>' );
+
+								output.push( '<span class="cke_toolbar_start"></span>' );
+
+								// Add the toolbar to the "editor.toolbox.toolbars"
+								// array.
+								var index = toolbars.push( toolbarObj ) - 1;
+
+								// Create the next/previous reference.
+								if ( index > 0 ) {
+									toolbarObj.previous = toolbars[ index - 1 ];
+									toolbarObj.previous.next = toolbarObj;
+								}
+							}
+
+							if ( canGroup ) {
+								if ( !groupStarted ) {
+									output.push( '<span class="cke_toolgroup" role="presentation">' );
+									groupStarted = 1;
+								}
+							} else if ( groupStarted ) {
+								output.push( '</span>' );
+								groupStarted = 0;
+							}
+
+							function addItem( item ) {
+								var itemObj = item.render( editor, output );
+								index = toolbarObj.items.push( itemObj ) - 1;
+
+								if ( index > 0 ) {
+									itemObj.previous = toolbarObj.items[ index - 1 ];
+									itemObj.previous.next = itemObj;
+								}
+
+								itemObj.toolbar = toolbarObj;
+
+								// No need for keyboard handlers, the toolbar is only accessibly by mouse
+								/*
+								itemObj.onkey = itemKeystroke;
+
+								// Fix for #3052:
+								// Prevent JAWS from focusing the toolbar after document load.
+								itemObj.onfocus = function() {
+									if ( !editor.toolbox.focusCommandExecuted )
+										editor.focus();
+								};
+								*/
+							}
+
+							if ( pendingSeparator ) {
+								addItem( pendingSeparator );
+								pendingSeparator = 0;
+							}
+
+							addItem( item );
+
+						}
+					}
+
+					if ( groupStarted ) {
+						output.push( '</span>' );
+						groupStarted = 0;
+						pendingSeparator = 0;
+					}
+
+					if ( toolbarObj )
+						output.push( '<span class="cke_toolbar_end"></span></span>' );
+
+				}
+
+
+				output.push( '</span>' );
+				event.data.html += output.join( '' );
+			});
+
+
+
+			/**
+			 * Do the magic: Attach eventhandlers to see if text is selected
+			 * When text is selected then show the floating toolbar, else hide it
+			 */
+			editor.on('contentDom', function( event ) {
+
+				unfocus_toolbar();
+
+				/**
+				 * Attach an eventhandler to the mouse-up event
+				 */
+				editor.document.on('mouseup', function( mouse_event ) {
+					// When user right-clicks, ctrl-clicks, etc. then do not show the toolbar
+					data = mouse_event.data.$;
+					if (data.button !== 0 || data.ctrlKey || data.altKey || data.shiftKey) return true;
+
+					// When the user clears the selection by single-clicking in the editor then this event is fired before the selection is removed
+					// So we add a short delay to give the browser a chance to remove the selection before we do anything
+					setTimeout( function() {
+						if (is_text_selected()) {
+							// Save the current mouse-position
+							set_mousepos (mouse_event.data.$);
+							// when there is text selected after mouse-up: show the toolbar
+							editor.execCommand('showFloatingTools');
+						} else {
+							// when no text is selected then hide the toolbar
+							editor.execCommand('hideFloatingTools');
+						}
+					}, 100);
+				});
+
+
+				/**
+				 * On keypress we will always hide the toolbar
+				 * The toolbar is only accessible via mouse
+				 */
+				editor.document.on('keyup', function( key_event ) {
+					editor.execCommand('hideFloatingTools');
+				});
+
+
+				/**
+				 * On blur hide the toolbar (editor looses focus)
+				 */
+				editor.on('blur', function( e ) {
+					if (editor.floatingtools.hide_on_blur) {
+						hide_toolbar();
+					}
+				});
+
+
+				/**
+				 * Attach the mouse-over event to the toolbar.
+				 * When cursor is above the toolbar then set opacity to 1
+				 */
+				toolbar = get_element();
+				toolbar.on('mouseover', function( mouse_event ) {
+					focus_toolbar();
+				});
+
+
+				/**
+				 * When the mouse moves out of the toolbar then make it transparent again
+				 */
+				toolbar.on('mouseout', function( mouse_event ) {
+					unfocus_toolbar();
+				})
+
+				editor.container.addClass('pos-relative');
+				console.log(editor.container);
+			});
+
+
+
+			/**
+			 * Display the floating toolbar
+			 */
+			editor.addCommand( 'showFloatingTools', {
+				exec : function( editor ) {
+					if (is_text_selected()) {
+						toolbar = get_element();
+						unfocus_toolbar();
+						toolbar.show();
+
+						// Get the size of the toolbar
+						size = get_toolbar_size()
+						// Get the offset of the editor
+						offset = get_editor_offset();
+						// Get the mouse position
+						pos = get_mousepos();
+
+						// Calculate the position for the toolbar
+						toolpos = calculate_position(pos, size, offset);
+
+						toolbar.setStyles({
+							'left' : toolpos.x + 'px',
+							'top' : toolpos.y + 'px'
+						});
+						editor.floatingtools.is_visible = true;
+					}
+				}
+			});
+
+
+			/**
+			 * Hide the floating toolbar
+			 */
+			editor.addCommand( 'hideFloatingTools', {
+				exec : function( editor ) {
+					hide_toolbar();
+				}
+			});
+
+
+			/**
+			 * ===== Behind the scenes. Getters, setters, calculation, etc.
+			 */
+
+
+			hide_toolbar = function() {
+				if (false != editor.floatingtools.is_visible) {
+					toolbar = get_element();
+					toolbar.hide();
+					editor.floatingtools.is_visible = false;
+				}
+			}
+
+
+			/**
+			 * Store the current mouse-position, so we can position the toolbar near the cursor
+			 */
+			set_mousepos = function(data) {
+				editor.floatingtools.mousepos = {
+					left: data.clientX,
+					top: data.clientY
+				};
+			}
+
+
+
+			/**
+			 * Store the current mouse-position, so we can position the toolbar near the cursor
+			 */
+			get_mousepos = function() {
+				return editor.floatingtools.mousepos;
+			}
+
+
+			/**
+			 * Returns the main toolbar-object (the parent of all items in the floating-toolbar)
+			 */
+			get_element = function() {
+				if (! editor.floatingtools.dom) {
+					var dom_id = editor.ui.spaceId( 'floatingtools' );
+					editor.floatingtools.dom = CKEDITOR.document.getById( dom_id );
+				}
+				return editor.floatingtools.dom;
+			}
+
+
+
+			/**
+			 * Returns the offset of the editor area (effectively the height of the top-toolbar)
+			 */
+			get_editor_offset = function() {
+				if (! editor.floatingtools.editoroffset) {
+					var editor_id = editor.ui.spaceId( 'contents' );
+					var obj = CKEDITOR.document.getById( editor_id );
+					editor.floatingtools.editoroffset = {
+						left:   obj.$.offsetLeft,
+						top:    obj.$.offsetTop,
+						width:  obj.$.offsetWidth,
+						height: obj.$.offsetHeight
+					};
+				}
+				return editor.floatingtools.editoroffset;
+			}
+
+
+			/**
+			 * Calculates the position for the toolbar
+			 */
+			calculate_position = function(pos, toolbar_size, offset) {
+				toolpos = {
+					x: pos.left + offset.left - (toolbar_size.width/2),
+					y: pos.top + offset.top - (toolbar_size.height + 20)
+				}
+
+				// make sure toolbar does not extend out of the left CKEditor border
+				if (toolpos.x < offset.left + 2) toolpos.x = offset.left + 2;
+
+				// make sure toolbar does not extend out of the right CKEditor border
+				if (pos.left + (toolbar_size.width/2) >= offset.left + offset.width-2 )
+					toolpos.x = offset.left + offset.width - toolbar_size.width - 2;
+
+				// Make sure toolbar does no go into the top toolbar area
+				if (toolpos.y < offset.top) toolpos.y = offset.top;
+
+				// make sure toolbar does not cover the mouse-cursor when text in the top line is selected
+				if (offset.top+pos.top > toolpos.y
+				&& offset.top+pos.top < toolpos.y+toolbar_size.height)
+					toolpos.y = offset.top + pos.top + 24; // display toolbar below the cursor
+
+				return toolpos;
+			}
+
+
+			/**
+			 * Returns the size of the floating toolbar
+			 */
+			get_toolbar_size = function() {
+				if (! editor.floatingtools.toolbarsize) {
+					var obj = get_element();
+					editor.floatingtools.toolbarsize = {
+						width: obj.$.offsetWidth,
+						height: obj.$.offsetHeight
+					};
+				}
+				return editor.floatingtools.toolbarsize;
+			}
+
+
+			/**
+			 * Check if text is selected.
+			 * Retrns true when there is at least 1 character selected in the editor
+			 */
+			is_text_selected = function () {
+				var text = editor.getSelection().getSelectedText();
+				return text != '';
+			}
+
+
+			/**
+			 * Make the toolbar opaque
+			 */
+			focus_toolbar = function() {
+				obj = get_element();
+				obj.setOpacity(1);
+			}
+
+
+			/**
+			 * Make the toolbar transparent
+			 */
+			unfocus_toolbar = function() {
+				obj = get_element();
+				obj.setOpacity(0.25);
+			},
+
+
+			/**
+			 * Get the plugin configuration.
+			 * Kidnapped from the toolbar-plugin...
+			 */
+			getFloatingToolbarConfig = function( editor ) {
+				var removeButtons = editor.config.removeButtons;
+
+				removeButtons = removeButtons && removeButtons.split( ',' );
+
+				function buildToolbarConfig() {
+					// Take the base for the new toolbar, which is basically a toolbar
+					// definition without items.
+					var toolbar = getPrivateFloatingToolbarGroups( editor );
+					return populateToolbarConfig( toolbar );
+
+				}
+
+				// Returns an object containing all toolbar groups used by ui items.
+				function getItemDefinedGroups() {
+					var groups = {},
+						itemName, item, itemToolbar, group, order;
+
+					for ( itemName in editor.ui.items ) {
+						item = editor.ui.items[ itemName ];
+						itemToolbar = item.toolbar || 'others';
+						if ( itemToolbar ) {
+							// Break the toolbar property into its parts: "group_name[,order]".
+							itemToolbar = itemToolbar.split( ',' );
+							group = itemToolbar[ 0 ];
+							order = parseInt( itemToolbar[ 1 ] || -1, 10 );
+
+							// Initialize the group, if necessary.
+							groups[ group ] || ( groups[ group ] = [] );
+
+							// Push the data used to build the toolbar later.
+							groups[ group ].push( { name: itemName, order: order} );
+						}
+					}
+
+					// Put the items in the right order.
+					for ( group in groups ) {
+						groups[ group ] = groups[ group ].sort( function( a, b ) {
+							return a.order == b.order ? 0 :
+								b.order < 0 ? -1 :
+								a.order < 0 ? 1 :
+								a.order < b.order ? -1 :
+								1;
+						});
+					}
+
+					return groups;
+				}
+
+				function fillGroup( toolbarGroup, uiItems ) {
+					if ( uiItems.length ) {
+						if ( toolbarGroup.items )
+							toolbarGroup.items.push( editor.ui.create( '-' ) );
+						else
+							toolbarGroup.items = [];
+
+						var item, name;
+						while ( ( item = uiItems.shift() ) ) {
+							name = typeof item == 'string' ? item : item.name;
+
+							// Ignore items that are configured to be removed.
+							if ( !removeButtons || CKEDITOR.tools.indexOf( removeButtons, name ) == -1 ) {
+								item = editor.ui.create( name );
+
+								if ( !item )
+									continue;
+
+								if ( !editor.addFeature( item ) )
+									continue;
+
+								toolbarGroup.items.push( item );
+							}
+						}
+					}
+				}
+
+				function populateToolbarConfig( config ) {
+					var toolbar = [],
+						i, group, newGroup;
+
+					for ( i = 0; i < config.length; ++i ) {
+						group = config[ i ];
+						newGroup = {};
+
+						if ( group == '/' )
+							toolbar.push( group );
+						else if ( CKEDITOR.tools.isArray( group) ) {
+							fillGroup( newGroup, CKEDITOR.tools.clone( group ) );
+							toolbar.push( newGroup );
+						}
+						else if ( group.items ) {
+							fillGroup( newGroup, CKEDITOR.tools.clone( group.items ) );
+							newGroup.name = group.name;
+							toolbar.push( newGroup);
+						}
+					}
+
+					return toolbar;
+				}
+
+				var toolbar = editor.config.floatingtools;
+
+				// If it is a string, return the relative "toolbar_name" config.
+				if ( typeof toolbar == 'string' )
+					toolbar = editor.config[ 'floatingtools_' + toolbar ];
+
+				return ( editor.toolbar = toolbar ? populateToolbarConfig( toolbar ) : buildToolbarConfig() );
+			},
+
+
+			/**
+			 * Return the default toolbar configuration.
+			 */
+			getPrivateFloatingToolbarGroups = function( editor ) {
+				return editor._.floatingToolsGroups || ( editor._.floatingToolsGroups = [
+					{ name: 'styles',    items: [ 'Font','FontSize' ]},
+					{ name: 'format',    items: [ 'Bold','Italic' ]},
+					{ name: 'paragraph', items: [ 'JustifyCenter','Outdent','Indent','NumberedList','BulletedList' ]}
+				]);
+			}
+
+		}
+
+	} );
+
+
+})();
+
+
+
diff --git a/plugins/ckeditor4/footnotes/dialogs/footnotes.js b/plugins/ckeditor4/footnotes/dialogs/footnotes.js
new file mode 100644
index 0000000..c7e1c08
--- /dev/null
+++ b/plugins/ckeditor4/footnotes/dialogs/footnotes.js
@@ -0,0 +1,175 @@
+/**
+ * The footnotes dialog definition.
+ *
+ * Version 1.0.9
+ * https://github.com/andykirk/CKEditorFootnotes
+ *
+ */
+
+(function($) {
+    "use strict";
+
+    // Dialog definition.
+    CKEDITOR.dialog.add( 'footnotesDialog', function( editor ) {
+
+        return {
+            editor_name: false,
+            // Basic properties of the dialog window: title, minimum size.
+            title: 'Manage Footnotes',
+            minWidth: 400,
+            minHeight: 200,
+            footnotes_el: false,
+
+            // Dialog window contents definition.
+            contents: [
+                {
+                    // Definition of the Basic Settings dialog tab (page).
+                    id: 'tab-basic',
+                    label: 'Basic Settings',
+
+                    // The tab contents.
+                    elements: [
+                        {
+                            // Text input field for the footnotes text.
+                            type: 'textarea',
+                            id: 'new_footnote',
+                            'class': 'footnote_text',
+                            label: 'New footnote:',
+                            inputStyle: 'height: 100px',
+                        },
+                        {
+                            // Text input field for the footnotes title (explanation).
+                            type: 'text',
+                            id: 'footnote_id',
+                            name: 'footnote_id',
+                            label: 'No existing footnotes',
+
+
+                            // Called by the main setupContent call on dialog initialization.
+                            setup: function( element ) {
+                                var dialog = this.getDialog(),
+                                    $el = $('#' + this.domId),
+                                    $footnotes, $this;
+
+                                dialog.footnotes_el = $el;
+
+                                editor = dialog.getParentEditor();
+                                // Dynamically add existing footnotes:
+                                $footnotes = $(editor.editable().$).find('.footnotes ol');
+                                $this = this;
+
+                                if ($footnotes.length > 0) {
+                                    if ($el.find('p').length == 0) {
+                                        $el.append('<p style="margin-bottom: 10px;"><strong>OR:</strong> Choose footnote:</p><ol class="footnotes_list"></ol>');
+                                    } else {
+                                        $el.find('ol').empty();
+                                    }
+
+                                    var radios = '';
+                                    $footnotes.find('li').each(function(){
+                                        var $item = $(this);
+                                        var footnote_id = $item.attr('data-footnote-id');
+                                        radios += '<li style="margin-left: 15px;"><input type="radio" name="footnote_id" value="' + footnote_id + '" id="fn_' + footnote_id + '" /> <label for="fn_' + footnote_id + '" style="white-space: normal; display: inline-block; padding: 0 25px 0 5px; vertical-align: top; margin-bottom: 10px;">' + $item.find('cite').text() + '</label></li>';
+                                    });
+
+                                    $el.children('label,div').css('display', 'none');
+                                    $el.find('ol').html(radios);
+                                    $el.find(':radio').change(function(){;
+                                        $el.find(':text').val($(this).val());
+                                    });
+
+                                } else {
+                                    $el.children('div').css('display', 'none');
+                                }
+                            }
+                        }
+                    ]
+                },
+            ],
+
+            // Invoked when the dialog is loaded.
+            onShow: function() {
+                this.setupContent();
+
+                var dialog = this;
+                CKEDITOR.on( 'instanceLoaded', function( evt ) {
+                    dialog.editor_name = evt.editor.name;
+                } );
+
+                // Allow page to scroll with dialog to allow for many/long footnotes
+                // (https://github.com/andykirk/CKEditorFootnotes/issues/12)
+                jQuery('.cke_dialog').css({'position': 'absolute', 'top': '2%'});
+
+                var current_editor_id = dialog.getParentEditor().id;
+
+                CKEDITOR.replaceAll( function( textarea, config ) {
+                    // Make sure the textarea has the correct class:
+                    if (!textarea.className.match(/footnote_text/)) {
+                        return false;
+                    }
+
+                    // Make sure we only instantiate the relevant editor:
+                    var el = textarea;
+                    while ((el = el.parentElement) && !el.classList.contains(current_editor_id));
+                    if (!el) {
+                        return false;
+                    }
+                    //console.log(el);
+                    config.toolbarGroups = [
+                        { name: 'editing',     groups: [ 'undo', 'find', 'selection', 'spellchecker' ] },
+                        { name: 'clipboard',   groups: [ 'clipboard' ] },
+                        { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
+                    ]
+                    config.allowedContent = 'br em strong; a[!href]';
+                    config.enterMode = CKEDITOR.ENTER_BR;
+                    config.autoParagraph = false;
+                    config.height = 80;
+                    config.resize_enabled = false;
+                    config.autoGrow_minHeight = 80;
+                    config.removePlugins = 'footnotes';
+
+                    config.on = {
+                        focus: function( evt ){
+                            var $editor_el = $('#' + evt.editor.id + '_contents');
+                            $editor_el.parents('tr').next().find(':checked').attr('checked', false);
+                            $editor_el.parents('tr').next().find(':text').val('');
+                        }
+                    };
+                    return true;
+                });
+
+            },
+
+            // This method is invoked once a user clicks the OK button, confirming the dialog.
+            onOk: function() {
+                var dialog = this;
+                var footnote_editor = CKEDITOR.instances[dialog.editor_name];
+                var footnote_id     = dialog.getValueOf('tab-basic', 'footnote_id');
+                var footnote_data   = footnote_editor.getData();
+                footnote_editor.destroy();
+
+                if (footnote_id == '') {
+                    // No existing id selected, check for new footnote:
+                    if (footnote_data == '') {
+                        // Nothing entered, so quit:
+                        return;
+                    } else {
+                        // Insert new footnote:
+                        editor.plugins.footnotes.build(footnote_data, true, editor);
+                    }
+                } else {
+                    // Insert existing footnote:
+                    editor.plugins.footnotes.build(footnote_id, false, editor);
+                }
+                // Destroy the editor so it's rebuilt properly next time:
+                return;
+            },
+
+            onCancel: function() {
+                var dialog = this;
+                var footnote_editor = CKEDITOR.instances[dialog.editor_name];
+                footnote_editor.destroy();
+            }
+        };
+    });
+}(window.jQuery));
diff --git a/plugins/ckeditor4/footnotes/icons/footnotes.png b/plugins/ckeditor4/footnotes/icons/footnotes.png
new file mode 100644
index 0000000000000000000000000000000000000000..77157440b13aea4705697b239b955a8e3cf7af1e
GIT binary patch
literal 402
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<w6XvX4FM)i?64!{5
z;QX|b^2DN42FH~Aq*MjZ+{E<Mpwz^a%EFVWHb6zL0X`wFT3TB2^77{9=DNDNDk>^g
zR#s+aX6owdMn*<5GBS2{cJ}u6tgNg$Iy!oKdQwtS1_lNuCMKeyqDo3iKr{Y>L4CB&
zD<DU_B*-rqB7#mbJac#!2UN1b)5S5Q;#QJ?GcyC@kp?{m0f!Szca)TRk{B3UbQH9-
zPU*3MgnE>ea==0dm_n3*A`Xm#f&y$pJW5J2K;a__YD!vKO2@dATpYC+m^vJL9794J
zdOSm>NGbtM<ViY{lq8enqolM*pcyRf@8S~BBff-{2h0l&36V%)w0B`pXgJXJse|+2
yRt6S<W{C-kT!#EW6&z{|<+2V8i9f^?4lo?g74b7_I~D?TJA<dIpUXO@geCwVcy^-z

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/footnotes/plugin.js b/plugins/ckeditor4/footnotes/plugin.js
new file mode 100644
index 0000000..e6ee2d0
--- /dev/null
+++ b/plugins/ckeditor4/footnotes/plugin.js
@@ -0,0 +1,317 @@
+/**
+ * Basic sample plugin inserting footnotes elements into CKEditor editing area.
+ *
+ * Version 1.0.9
+ * https://github.com/andykirk/CKEditorFootnotes
+ *
+ */
+// Register the plugin within the editor.
+(function($) {
+    "use strict";
+
+
+
+    CKEDITOR.plugins.add( 'footnotes', {
+
+        footnote_ids: [],
+        requires: 'widget',
+        icons: 'footnotes',
+
+
+        // The plugin initialization logic goes inside this method.
+        init: function(editor) {
+
+            // Check for jQuery
+            // @TODO - remove if/when JQ dep. is removed.
+            if (typeof(window.jQuery) == 'undefined') {
+                console.warn('jQuery required but undetected so quitting footnotes.');
+                return false;
+            }
+
+            // Allow `cite` to be editable:
+            CKEDITOR.dtd.$editable['cite'] = 1;
+
+            // Add some CSS tweaks:
+            var css = '.footnotes{background:#eee; padding:1px 15px;} .footnotes cite{font-style: normal;}';
+            CKEDITOR.addCss(css);
+
+            var $this = this;
+
+            /*editor.on('saveSnapshot', function(evt) {
+                console.log('saveSnapshot');
+            });*/
+
+            // Force a reorder on startup to make sure all vars are set: (e.g. footnotes store):
+            editor.on('instanceReady', function(evt) {
+                $this.reorderMarkers(editor);
+            });
+
+            // Add the reorder change event:
+            editor.on('change', function(evt) {
+                // Copy the footnotes_store as we may be doing a cut:
+                if(!evt.editor.footnotes_tmp) {
+                    evt.editor.footnotes_tmp = evt.editor.footnotes_store;
+                }
+
+                // Prevent no selection errors:
+                if (!evt.editor.getSelection().getStartElement()) {
+                    return;
+                }
+                // Don't reorder the markers if editing a cite:
+                var footnote_section = evt.editor.getSelection().getStartElement().getAscendant('section');
+                if (footnote_section && footnote_section.$.className.indexOf('footnotes') != -1) {
+                    return;
+                }
+                // SetTimeout seems to be necessary (it's used in the core but can't be 100% sure why)
+                setTimeout(function(){
+                        $this.reorderMarkers(editor);
+                    },
+                    0
+                );
+            });
+
+            // Build the initial footnotes widget editables definition:
+            var prefix = editor.config.footnotesPrefix ? '-' + editor.config.footnotesPrefix : '';
+            var def = {
+                header: {
+                    selector: 'header > *',
+                    //allowedContent: ''
+                    allowedContent: 'strong em span sub sup;'
+                }
+            };
+            var contents = $('<div>' + editor.element.$.textContent + '</div>')
+                     , l = contents.find('.footnotes li').length
+                     , i = 1;
+            for (i; i <= l; i++) {
+                def['footnote_' + i] = {selector: '#footnote' + prefix + '-' + i + ' cite', allowedContent: 'a[href]; cite[*](*); strong em span br'};
+            }
+
+            // Register the footnotes widget.
+            editor.widgets.add('footnotes', {
+
+                // Minimum HTML which is required by this widget to work.
+                requiredContent: 'section(footnotes)',
+
+                // Check the elements that need to be converted to widgets.
+                upcast: function(element) {
+                    return element.name == 'section' && element.hasClass('footnotes');
+                },
+
+                editables: def
+            });
+
+            // Register the footnotemarker widget.
+            editor.widgets.add('footnotemarker', {
+
+                // Minimum HTML which is required by this widget to work.
+                requiredContent: 'sup[data-footnote-id]',
+
+                // Check the elements that need to be converted to widgets.
+                upcast: function(element) {
+                    return element.name == 'sup' && element.attributes['data-footnote-id'] != 'undefined';
+                },
+            });
+
+            // Define an editor command that opens our dialog.
+            editor.addCommand('footnotes', new CKEDITOR.dialogCommand('footnotesDialog', {
+                // @TODO: This needs work:
+                allowedContent: 'section[*](*);header[*](*);li[*];a[*];cite(*)[*];sup[*]',
+                requiredContent: 'section[*](*);header[*](*);li[*];a[*];cite(*)[*];sup[*]'
+            }));
+
+            // Create a toolbar button that executes the above command.
+            editor.ui.addButton('Footnotes', {
+
+                // The text part of the button (if available) and tooptip.
+                label: 'Insert Footnotes',
+
+                // The command to execute on click.
+                command: 'footnotes',
+
+                // The button placement in the toolbar (toolbar group name).
+                toolbar: 'insert'
+            });
+
+            // Register our dialog file. this.path is the plugin folder path.
+            CKEDITOR.dialog.add('footnotesDialog', this.path + 'dialogs/footnotes.js');
+        },
+
+
+        build: function(footnote, is_new, editor) {
+            var footnote_id;
+            if (is_new) {
+                // Generate new id:
+                footnote_id = this.generateFootnoteId();
+            } else {
+                // Existing footnote id passed:
+                footnote_id = footnote;
+            }
+
+            // Insert the marker:
+            var footnote_marker = '<sup data-footnote-id="' + footnote_id + '">X</sup>';
+
+            editor.insertHtml(footnote_marker);
+
+            if (is_new) {
+                editor.fire('lockSnapshot');
+                this.addFootnote(this.buildFootnote(footnote_id, footnote, false, editor), editor);
+                editor.fire('unlockSnapshot');
+            }
+            this.reorderMarkers(editor);
+        },
+
+        buildFootnote: function(footnote_id, footnote_text, data, editor) {
+            var links   = '',
+                footnote,
+                letters = 'abcdefghijklmnopqrstuvwxyz',
+                order   = data ? data.order.indexOf(footnote_id) + 1 : 1,
+                prefix  = editor.config.footnotesPrefix ? '-' + editor.config.footnotesPrefix : '';
+
+            if (data && data.occurrences[footnote_id] == 1) {
+                links = '<a href="#footnote-marker' + prefix + '-' + order + '-1">^</a> ';
+            } else if (data && data.occurrences[footnote_id] > 1) {
+                var i = 0
+                  , l = data.occurrences[footnote_id]
+                  , n = l;
+                for (i; i < l; i++) {
+                    links += '<a href="#footnote-marker' + prefix + '-' + order + '-' + (i + 1) + '">' + letters.charAt(i) + '</a>';
+                    if (i < l-1) {
+                        links += ', ';
+                    } else {
+                        links += ' ';
+                    }
+                }
+            }
+            footnote = '<li id="footnote' + prefix + '-' + order + '" data-footnote-id="' + footnote_id + '"><sup>' + links + '</sup><cite>' + footnote_text + '</cite></li>';
+            return footnote;
+        },
+
+        addFootnote: function(footnote, editor) {
+            var $contents  = $(editor.editable().$);
+            var $footnotes = $contents.find('.footnotes');
+
+            if ($footnotes.length == 0) {
+                var header_title = editor.config.footnotesTitle ? editor.config.footnotesTitle : 'Footnotes';
+                var header_els = ['<h2>', '</h2>'];//editor.config.editor.config.footnotesHeaderEls
+                if (editor.config.footnotesHeaderEls) {
+                    header_els = editor.config.footnotesHeaderEls;
+                }
+                var container = '<section class="footnotes"><header>' + header_els[0] + header_title + header_els[1] + '</header><ol>' + footnote + '</ol></section>';
+                // Move cursor to end of content:
+                var range = editor.createRange();
+                range.moveToElementEditEnd(range.root);
+                editor.getSelection().selectRanges([range]);
+                // Insert the container:
+                editor.insertHtml(container);
+            } else {
+                $footnotes.find('ol').append(footnote);
+            }
+        },
+
+        generateFootnoteId: function() {
+            var id = Math.random().toString(36).substr(2, 5);
+            while ($.inArray(id, this.footnote_ids) != -1) {
+                id = String(this.generateFootnoteId());
+            }
+            this.footnote_ids.push(id);
+            return id;
+        },
+
+        reorderMarkers: function(editor) {
+            editor.fire('lockSnapshot');
+            var prefix  = editor.config.footnotesPrefix ? '-' + editor.config.footnotesPrefix : '';
+            var $contents = $(editor.editable().$);
+            var data = {
+                order: [],
+                occurrences: {}
+            };
+
+            // Check that there's a footnotes section. If it's been deleted the markers are useless:
+            if ($contents.find('.footnotes').length == 0) {
+                $contents.find('sup[data-footnote-id]').remove();
+                editor.fire('unlockSnapshot');
+                return;
+            }
+
+            // Find all the markers in the document:
+            var $markers = $contents.find('sup[data-footnote-id]');
+            // If there aren't any, remove the Footnotes container:
+            if ($markers.length == 0) {
+                $contents.find('.footnotes').parent().remove();
+                editor.fire('unlockSnapshot');
+                return;
+            }
+
+            // Otherwise reorder the markers:
+            $markers.each(function(){
+                var footnote_id = $(this).attr('data-footnote-id')
+                  , marker_ref
+                  , n = data.order.indexOf(footnote_id);
+
+                // If this is the markers first occurrence:
+                if (n == -1) {
+                    // Store the id:
+                    data.order.push(footnote_id);
+                    n = data.order.length;
+                    data.occurrences[footnote_id] = 1;
+                    marker_ref = n + '-1';
+                } else {
+                    // Otherwise increment the number of occurrences:
+                    // (increment n due to zero-index array)
+                    n++;
+                    data.occurrences[footnote_id]++;
+                    marker_ref = n + '-' + data.occurrences[footnote_id];
+                }
+                // Replace the marker contents:
+                var marker = '<a href="#footnote' + prefix + '-' + n + '" id="footnote-marker' + prefix + '-' + marker_ref + '" rel="footnote">[' + n + ']</a>';
+                $(this).html(marker);
+            });
+
+            // Prepare the footnotes_store object:
+            editor.footnotes_store = {};
+
+            // Then rebuild the Footnotes content to match marker order:
+            var footnotes     = ''
+              , footnote_text = ''
+              , footnote_id
+              , i = 0
+              , l = data.order.length;
+            for (i; i < l; i++) {
+                footnote_id   = data.order[i];
+                footnote_text = $contents.find('.footnotes [data-footnote-id=' + footnote_id + '] cite').html();
+                // If the footnotes text can't be found in the editor, it may be in the tmp store
+                // following a cut:
+                if (!footnote_text) {
+                    footnote_text = editor.footnotes_tmp[footnote_id];
+                }
+                footnotes += this.buildFootnote(footnote_id, footnote_text, data, editor);
+                // Store the footnotes for later use (post cut/paste):
+                editor.footnotes_store[footnote_id] = footnote_text;
+            }
+
+            // Insert the footnotes into the list:
+            $contents.find('.footnotes ol').html(footnotes);
+
+            // Next we need to reinstate the 'editable' properties of the footnotes.
+            // (we have to do this individually due to Widgets 'fireOnce' for editable selectors)
+            var el = $contents.find('.footnotes')
+              , n
+              , footnote_widget;
+            // So first we need to find the right Widget instance:
+            // (I hope there's a better way of doing this but I can't find one)
+            for (i in editor.widgets.instances) {
+                if (editor.widgets.instances[i].name == 'footnotes') {
+                    footnote_widget = editor.widgets.instances[i];
+                    break;
+                }
+            }
+            // Then we `initEditable` each footnote, giving it a unique selector:
+            for (i in data.order) {
+                n = parseInt(i) + 1;
+                footnote_widget.initEditable('footnote_' + n, {selector: '#footnote' + prefix + '-' + n +' cite', allowedContent: 'a[href]; cite[*](*); em strong span'});
+            }
+
+            editor.fire('unlockSnapshot');
+        }
+    });
+}(window.jQuery));
diff --git a/plugins/ckeditor4/googlethisterm/LICENSE b/plugins/ckeditor4/googlethisterm/LICENSE
new file mode 100644
index 0000000..9451d76
--- /dev/null
+++ b/plugins/ckeditor4/googlethisterm/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Ahmad Faiyaz
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/plugins/ckeditor4/googlethisterm/README.md b/plugins/ckeditor4/googlethisterm/README.md
new file mode 100644
index 0000000..64647ac
--- /dev/null
+++ b/plugins/ckeditor4/googlethisterm/README.md
@@ -0,0 +1,2 @@
+# Google-This-Term-CKEditor
+A simple CKEditor context menu plugin to add a menu button for searching selected text on the google.
diff --git a/plugins/ckeditor4/googlethisterm/plugin.js b/plugins/ckeditor4/googlethisterm/plugin.js
new file mode 100644
index 0000000..e42419c
--- /dev/null
+++ b/plugins/ckeditor4/googlethisterm/plugin.js
@@ -0,0 +1,41 @@
+/*
+ *  # Google this term Plugin for CKEditor #
+ *
+ *  (C) Copyright Ahmad Faiyaz (all rights reserverd)
+ *  MIT License
+ *
+ *
+*/
+
+
+/*
+* A simple plugin to add button to the CKEditor context menu. By clicking the
+* button one can search selected text on the google on new tab
+*/
+
+
+(function() {
+	CKEDITOR.plugins.add('googlethisterm', {
+        init: function(editor) {
+        	if (editor.contextMenu) {
+			    editor.addMenuGroup('googleTermGroup');
+			    editor.addMenuItem('googleTermItem', {
+			        label: 'Google this term',
+			        onClick : function(){
+			        	var sel = editor.getSelection();
+			        	var url = "https://www.google.com/search?gws_rd=ssl&q="+sel.getSelectedText();
+			        	window.open(url, '_blank');
+			        },
+			        group: 'googleTermGroup'
+			    });
+			    
+			    editor.contextMenu.addListener( function( element ) {
+			    	var sel = editor.getSelection();
+			        if ( !(sel.getSelectedText()=="") ) {
+			            return { googleTermItem: CKEDITOR.TRISTATE_OFF };
+			        }
+			    });
+			}
+        }
+    });
+})();
diff --git a/plugins/ckeditor4/html5audio/dialogs/html5audio.js b/plugins/ckeditor4/html5audio/dialogs/html5audio.js
new file mode 100755
index 0000000..2525233
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/dialogs/html5audio.js
@@ -0,0 +1,117 @@
+CKEDITOR.dialog.add( 'html5audio', function( editor ) {
+    return {
+        title: editor.lang.html5audio.title,
+        minWidth: 500,
+        minHeight: 100,
+        contents: [ {
+            id: 'info',
+            label: editor.lang.html5audio.infoLabel,
+            elements: [ {
+                type: 'vbox',
+                padding: 0,
+                children: [ {
+                    type: 'hbox',
+                    widths: [ '365px', '110px' ],
+                    align: 'right',
+                    children: [ {
+                        type: 'text',
+                        id: 'url',
+                        label: editor.lang.common.url,
+                        required: true,
+                        validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.html5audio.urlMissing ),
+                        setup: function( widget ) {
+                            this.setValue( widget.data.src );
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'src', this.getValue() );
+                        }
+                    },
+                    {
+                        type: 'button',
+                        id: 'browse',
+                        // v-align with the 'txtUrl' field.
+                        // TODO: We need something better than a fixed size here.
+                        style: 'display:inline-block;margin-top:14px;',
+                        align: 'center',
+                        label: editor.lang.common.browseServer,
+                        hidden: true,
+                        filebrowser: 'info:url'
+                    } ]
+                } ]
+            },
+            {
+                type: 'hbox',
+                id: 'alignment',
+                children: [ {
+                    type: 'radio',
+                    id: 'align',
+                    label: editor.lang.common.align,
+                    items: [
+                        [editor.lang.common.alignCenter, 'center'],
+                        [editor.lang.common.alignLeft, 'left'],
+                        [editor.lang.common.alignRight, 'right'],
+                        [editor.lang.common.alignNone, 'none']
+                    ],
+                    'default': 'center',
+                    setup: function( widget ) {
+                        if ( widget.data.align ) {
+                            this.setValue( widget.data.align );
+                        }
+                    },
+                    commit: function( widget ) {
+                        widget.setData( 'align', this.getValue() );
+                    }
+                } ]
+            } ]
+        },
+        {
+            id: 'Upload',
+            hidden: true,
+            filebrowser: 'uploadButton',
+            label: editor.lang.html5audio.upload,
+            elements: [ {
+                type: 'file',
+                id: 'upload',
+                label: editor.lang.html5audio.btnUpload,
+                style: 'height:40px',
+                size: 38
+            },
+            {
+                type: 'fileButton',
+                id: 'uploadButton',
+                filebrowser: 'info:url',
+                label: editor.lang.html5audio.btnUpload,
+                'for': [ 'Upload', 'upload' ]
+            } ]
+        },
+        {
+            id: 'advanced',
+            label: editor.lang.html5audio.advanced,
+            elements: [ {
+                type: 'vbox',
+                padding: 0,
+                children: [ {
+                    type: 'hbox',
+                    children: [ {
+                        type: 'radio',
+                        id: 'autoplay',
+                        label: editor.lang.html5audio.autoplay,
+                        items: [
+                            [editor.lang.html5audio.yes, 'yes'],
+                            [editor.lang.html5audio.no, 'no']
+                        ],
+                        'default': 'no',
+                        setup: function( widget ) {
+                            if ( widget.data.autoplay ) {
+                                this.setValue( widget.data.autoplay );
+                            }
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'autoplay', this.getValue() );
+                        }
+                    } ]
+                } ]
+            } ]
+        } ]
+    };
+} );
diff --git a/plugins/ckeditor4/html5audio/icons/html5audio.png b/plugins/ckeditor4/html5audio/icons/html5audio.png
new file mode 100755
index 0000000000000000000000000000000000000000..4367015f185a6619eb6648590822d875b0417eee
GIT binary patch
literal 560
zcmV-00?+-4P)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV00006VoOIv0RI60
z0RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_000McNliru-~t5-C>f(Kk<0)902y>e
zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00EduL_t(I%gs?eYgADXJ#%N~
zzP<0=B_OD=5EQjoMEqcjMGRK{0zpWlwO~qZY^=q9V66y3>Qq*#(pd^ZAOy6Ei0rPL
z_vVhx1}q+7I~_R94CkCVGr+$tK5ban^?3lFi0IheKLdcOUSQ_8BGQ@JmtNx9+8X7Y
zuQT&c05c-m0)U+JxvHujtLmc=!r^2x>0cnFbT5QZ062gt5j_Kd!C-JJgz&AZs)r)7
z&CD+d07T@YnVnto1Aq;8Khc|p5MIX^uM*Kt+qRbh+!c{`i^XCKO95ZH^<f%9cphVX
z%FMgN;c!Gm-*e74MPwRQJoa2wcg$>*QkpUI4|l&vM88)OaCa}I6aZ-3mH;>r1$VcV
z1c)e=QXYuN*ZF*|W_E^|4~Qr;0K^!tF!Pa!>@)L0Ddo~%{9_{8W9Hkcy4`i%oe)Cq
zx^CahuJt-LO|#MW#=5RY%zPMQ+!T=y%>1%9f|>26lx{HdF95UzQc6c6^2*(3W_Eu(
y9=|y?d($-QBC@BdPfmKOx~{74V~m^lFX|7SRE6k7zY9$O0000<MNUMnLSTZs=Ijmt

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/html5audio/lang/de.js b/plugins/ckeditor4/html5audio/lang/de.js
new file mode 100644
index 0000000..2b4bf73
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/de.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'de', {
+    button: 'HTML5 Audio einfügen',
+    title: 'HTML5 Audio',
+    infoLabel: 'Audio Infos',
+    urlMissing: 'Sie haben keine URL zur Audio-Datei angegeben.',
+    audioProperties: 'Audio-Einstellungen',
+    upload: 'Hochladen',
+    btnUpload: 'Zum Server senden',
+    advanced: 'Erweitert',
+    autoplay: 'Autoplay?',
+    yes: 'Ja',
+    no: 'Nein'
+} );
diff --git a/plugins/ckeditor4/html5audio/lang/en.js b/plugins/ckeditor4/html5audio/lang/en.js
new file mode 100755
index 0000000..dba6fa6
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/en.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'en', {
+    button: 'Insert HTML5 audio',
+    title: 'HTML5 audio',
+    infoLabel: 'Audio info',
+    urlMissing: 'Audio source URL is missing.',
+    audioProperties: 'Audio properties',
+    upload: 'Upload',
+    btnUpload: 'Send it to the server',
+    advanced: 'Advanced',
+    autoplay: 'Autoplay?',
+    yes: 'Yes',
+    no: 'No'
+} );
diff --git a/plugins/ckeditor4/html5audio/lang/es.js b/plugins/ckeditor4/html5audio/lang/es.js
new file mode 100644
index 0000000..905cac5
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/es.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'es', {
+    button: 'Insertar audio HTML5',
+    title: 'Audio HTML5',
+    infoLabel: 'Información del audio',
+    urlMissing: 'La URL del audio no puede estar vacia.',
+    audioProperties: 'Propiedades del audio',
+    upload: 'Cargar',
+    btnUpload: 'Enviar al servidor',
+    advanced: 'Avanzado',
+    autoplay: '¿Reproducir automáticamente?',
+    yes: 'Si',
+    no: 'No'
+} );
diff --git a/plugins/ckeditor4/html5audio/lang/eu.js b/plugins/ckeditor4/html5audio/lang/eu.js
new file mode 100755
index 0000000..78ef9e9
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/eu.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'eu', {
+    button: 'Txertatu HTML5 audioa',
+    title: 'HTML5 audioa',
+    infoLabel: 'Audioaren informazioa',
+    urlMissing: 'Audioaren URLak ezin du hutsik egon.',
+    audioProperties: 'Audioaren propietateak',
+    upload: 'Kargatu',
+    btnUpload: 'Bidali zerbitzarira',
+    advanced: 'Aurreratua',
+    autoplay: 'Automatikoki erreproduzitu?',
+    yes: 'Bai',
+    no: 'Ez'
+} );
diff --git a/plugins/ckeditor4/html5audio/lang/fr.js b/plugins/ckeditor4/html5audio/lang/fr.js
new file mode 100644
index 0000000..1e693b3
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/fr.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'fr', {
+    button: 'Insérer un lecteur audio HTML5',
+    title: 'HTML5 audio',
+    infoLabel: 'Informations audio',
+    urlMissing: 'URL de la source audio manquante. Veuillez la renseigner.',
+    audioProperties: 'Propriétés Audio',
+    upload: 'Télécharger',
+    btnUpload: 'Envoyer vers le serveur',
+    advanced: 'Avancé',
+    autoplay: 'Jouer automatiquement ?',
+    yes: 'Oui',
+    no: 'Non'
+} );
diff --git a/plugins/ckeditor4/html5audio/lang/ru.js b/plugins/ckeditor4/html5audio/lang/ru.js
new file mode 100644
index 0000000..5f53827
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/ru.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'ru', {
+    button: 'Вставить HTML5 аудио',
+    title: 'HTML5 аудио',
+    infoLabel: 'Аудио',
+    urlMissing: 'Не выбран источник аудио',
+    audioProperties: 'Свойства аудио',
+    upload: 'Загрузить',
+    btnUpload: 'Загрузить на сервер',
+    advanced: 'Дополнительно',
+    autoplay: 'Автовоспроизведение',
+    yes: 'Да',
+    no: 'Нет'
+} );
diff --git a/plugins/ckeditor4/html5audio/lang/uk.js b/plugins/ckeditor4/html5audio/lang/uk.js
new file mode 100644
index 0000000..fbba300
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/uk.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'uk', {
+    button: 'Вставити HTML5 аудіо',
+    title: 'HTML5 аудіо',
+    infoLabel: 'Інформація',
+    urlMissing: 'Не обрано джерела аудіо',
+    audioProperties: 'Властивості аудіо',
+    upload: 'Відвантажити',
+    btnUpload: 'Відвантажити на сервер',
+    advanced: 'Додатково',
+    autoplay: 'Автовідтворення?',
+    yes: 'Так',
+    no: 'Ні'
+} );
diff --git a/plugins/ckeditor4/html5audio/lang/uz.js b/plugins/ckeditor4/html5audio/lang/uz.js
new file mode 100644
index 0000000..a0b14ca
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/lang/uz.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang( 'html5audio', 'uz', {
+    button: 'HTML5 audio qo‘shing',
+    title: 'HTML5 audio',
+    infoLabel: 'Audio ma\'lumot',
+    urlMissing: 'Audio\'ning URL manbasi topilmadi.',
+    audioProperties: 'Audio xususiyatlari',
+    upload: 'Yuklash',
+    btnUpload: 'Serverga jo‘natish',
+    advanced: 'Kengaytrilgan',
+    autoplay: 'Avtoijro?',
+    yes: 'Ha',
+    no: 'Yo‘q'
+} );
diff --git a/plugins/ckeditor4/html5audio/plugin.js b/plugins/ckeditor4/html5audio/plugin.js
new file mode 100755
index 0000000..e5c76e6
--- /dev/null
+++ b/plugins/ckeditor4/html5audio/plugin.js
@@ -0,0 +1,112 @@
+CKEDITOR.plugins.add( 'html5audio', {
+    requires: 'widget',
+    lang: 'de,en,eu,es,fr,ru,uk,uz',
+    icons: 'html5audio',
+    init: function( editor ) {
+        editor.widgets.add( 'html5audio', {
+            button: editor.lang.html5audio.button,
+            template: '<div class="ckeditor-html5-audio"></div>',   // We add the audio element when needed in the data function, to avoid having an undefined src attribute.
+                                                                    // See issue #9 on github: https://github.com/iametza/ckeditor-html5-audio/issues/9
+            editables: {},
+            /*
+             * Allowed content rules (http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules):
+             *  - div-s with text-align,float,margin-left,margin-right inline style rules and required ckeditor-html5-audio class.
+             *  - audio tags with src and controls attributes.
+             */
+            allowedContent: 'div(!ckeditor-html5-audio){text-align,float,margin-left,margin-right}; audio[src,controls,autoplay];',
+            requiredContent: 'div(ckeditor-html5-audio); audio[src,controls];',
+            upcast: function( element ) {
+                return element.name === 'div' && element.hasClass( 'ckeditor-html5-audio' );
+            },
+            dialog: 'html5audio',
+            init: function() {
+                var src = '';
+                var autoplay = '';
+                var align = this.element.getStyle( 'text-align' );
+
+                // If there's a child (the audio element)
+                if ( this.element.getChild( 0 ) ) {
+                    // get it's attributes.
+                    src = this.element.getChild( 0 ).getAttribute( 'src' );
+                    autoplay = this.element.getChild( 0 ).getAttribute( 'autoplay' );
+                }
+
+                if ( src ) {
+                    this.setData( 'src', src );
+
+                    if ( align ) {
+                        this.setData( 'align', align );
+                    } else {
+                        this.setData( 'align', 'none' );
+                    }
+
+                    if ( autoplay ) {
+                        this.setData( 'autoplay', 'yes' );
+                    }
+                }
+            },
+            data: function() {
+                // If there is an audio source
+                if ( this.data.src ) {
+                    // and there isn't a child (the audio element)
+                    if ( !this.element.getChild( 0 ) ) {
+                        // Create a new <audio> element.
+                        var audioElement = new CKEDITOR.dom.element( 'audio' );
+                        // Set the controls attribute.
+                        audioElement.setAttribute( 'controls', 'controls' );
+                        // Append it to the container of the plugin.
+                        this.element.append( audioElement );
+                    }
+                    this.element.getChild( 0 ).setAttribute( 'src', this.data.src );
+                }
+
+                this.element.removeStyle( 'float' );
+                this.element.removeStyle( 'margin-left' );
+                this.element.removeStyle( 'margin-right' );
+
+                if ( this.data.align === 'none' ) {
+                    this.element.removeStyle( 'text-align' );
+                } else {
+                    this.element.setStyle( 'text-align', this.data.align );
+                }
+
+                if ( this.data.align === 'left' ) {
+                    this.element.setStyle( 'float', this.data.align );
+                    this.element.setStyle( 'margin-right', '10px' );
+                } else if ( this.data.align === 'right' ) {
+                    this.element.setStyle( 'float', this.data.align );
+                    this.element.setStyle( 'margin-left', '10px' );
+                }
+
+                if ( this.element.getChild( 0 ) ) {
+                    if ( this.data.autoplay === 'yes' ) {
+                        this.element.getChild( 0 ).setAttribute( 'autoplay', 'autoplay' );
+                    } else {
+                        this.element.getChild( 0 ).removeAttribute( 'autoplay' );
+                    }
+                }
+            }
+        } );
+
+        if ( editor.contextMenu ) {
+            editor.addMenuGroup( 'html5audioGroup' );
+            editor.addMenuItem( 'html5audioPropertiesItem', {
+                label: editor.lang.html5audio.audioProperties,
+                icon: 'html5audio',
+                command: 'html5audio',
+                group: 'html5audioGroup'
+            });
+
+            editor.contextMenu.addListener( function( element ) {
+                if ( element &&
+                     element.getChild( 0 ) &&
+                     element.getChild( 0 ).hasClass &&
+                     element.getChild( 0 ).hasClass( 'ckeditor-html5-audio' ) ) {
+                    return { html5audioPropertiesItem: CKEDITOR.TRISTATE_OFF };
+                }
+            });
+        }
+
+        CKEDITOR.dialog.add( 'html5audio', this.path + 'dialogs/html5audio.js' );
+    }
+} );
diff --git a/plugins/ckeditor4/html5video/dialogs/html5video.js b/plugins/ckeditor4/html5video/dialogs/html5video.js
new file mode 100644
index 0000000..ada03ec
--- /dev/null
+++ b/plugins/ckeditor4/html5video/dialogs/html5video.js
@@ -0,0 +1,161 @@
+CKEDITOR.dialog.add( 'html5video', function( editor ) {
+    return {
+        title: editor.lang.html5video.title,
+        minWidth: 500,
+        minHeight: 100,
+        contents: [ {
+            id: 'info',
+            label: editor.lang.html5video.infoLabel,
+            elements: [ {
+                type: 'vbox',
+                padding: 0,
+                children: [
+                    {
+                    type: 'hbox',
+                    widths: [ '365px', '110px' ],
+                    align: 'right',
+                    children: [ {
+                        type: 'text',
+                        id: 'url',
+                        label: editor.lang.html5video.allowed,
+                        required: true,
+                        validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.html5video.urlMissing ),
+                        setup: function( widget ) {
+                            this.setValue( widget.data.src );
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'src', this.getValue() );
+                        }
+                    },
+                    {
+                        type: 'button',
+                        id: 'browse',
+                        // v-align with the 'txtUrl' field.
+                        // TODO: We need something better than a fixed size here.
+                        style: 'display:inline-block;margin-top:14px;',
+                        align: 'center',
+                        label: editor.lang.common.browseServer,
+                        hidden: true,
+                        filebrowser: 'info:url'
+                    } ]
+                } ]
+            },
+            {
+                type: 'checkbox',
+                id: 'responsive',
+                label: editor.lang.html5video.responsive,
+                setup: function( widget ) {
+                    this.setValue( widget.data.responsive );
+                },
+                commit: function( widget ) {
+                    widget.setData( 'responsive', this.getValue()?'true':'' );
+                }
+            },
+            {
+                type: 'hbox',
+                id: 'size',
+                children: [ {
+                    type: 'text',
+                    id: 'width',
+                    label: editor.lang.common.width,
+                    setup: function( widget ) {
+                        if ( widget.data.width ) {
+                            this.setValue( widget.data.width );
+                        }
+                    },
+                    commit: function( widget ) {
+                        widget.setData( 'width', this.getValue() );
+                    }
+                },
+                {
+                    type: 'text',
+                    id: 'height',
+                    label: editor.lang.common.height,
+                    setup: function( widget ) {
+                        if ( widget.data.height ) {
+                            this.setValue( widget.data.height );
+                        }
+                    },
+                    commit: function( widget ) {
+                        widget.setData( 'height', this.getValue() );
+                    }
+                },
+                ]
+            },
+
+            {
+                type: 'hbox',
+                id: 'alignment',
+                children: [ {
+                    type: 'radio',
+                    id: 'align',
+                    label: editor.lang.common.align,
+                    items: [
+                        [editor.lang.common.alignCenter, 'center'],
+                        [editor.lang.common.alignLeft, 'left'],
+                        [editor.lang.common.alignRight, 'right'],
+                        [editor.lang.common.alignNone, 'none']
+                    ],
+                    'default': 'center',
+                    setup: function( widget ) {
+                        if ( widget.data.align ) {
+                            this.setValue( widget.data.align );
+                        }
+                    },
+                    commit: function( widget ) {
+                        widget.setData( 'align', this.getValue() );
+                    }
+                } ]
+            } ]
+        },
+        {
+            id: 'Upload',
+            hidden: true,
+            filebrowser: 'uploadButton',
+            label: editor.lang.html5video.upload,
+            elements: [ {
+                type: 'file',
+                id: 'upload',
+                label: editor.lang.html5video.btnUpload,
+                style: 'height:40px',
+                size: 38
+            },
+            {
+                type: 'fileButton',
+                id: 'uploadButton',
+                filebrowser: 'info:url',
+                label: editor.lang.html5video.btnUpload,
+                'for': [ 'Upload', 'upload' ]
+            } ]
+        },
+        {
+            id: 'advanced',
+            label: editor.lang.html5video.advanced,
+            elements: [ {
+                type: 'vbox',
+                padding: 0,
+                children: [ {
+                    type: 'hbox',
+                    children: [ {
+                        type: 'radio',
+                        id: 'autoplay',
+                        label: editor.lang.html5video.autoplay,
+                        items: [
+                            [editor.lang.html5video.yes, 'yes'],
+                            [editor.lang.html5video.no, 'no']
+                        ],
+                        'default': 'no',
+                        setup: function( widget ) {
+                            if ( widget.data.autoplay ) {
+                                this.setValue( widget.data.autoplay );
+                            }
+                        },
+                        commit: function( widget ) {
+                            widget.setData( 'autoplay', this.getValue() );
+                        }
+                    } ]
+                } ]
+            } ]
+        } ]
+    };
+} );
diff --git a/plugins/ckeditor4/html5video/icons/html5video.png b/plugins/ckeditor4/html5video/icons/html5video.png
new file mode 100644
index 0000000000000000000000000000000000000000..a2465177448241d4c3988ae25c22cd3690a80fff
GIT binary patch
literal 14773
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
G(SHGko*mBs

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/html5video/lang/de.js b/plugins/ckeditor4/html5video/lang/de.js
new file mode 100644
index 0000000..bc81b7a
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/de.js
@@ -0,0 +1,14 @@
+CKEDITOR.plugins.setLang( 'html5video', 'de', {
+    button: 'HTML5 Video einfügen',
+    title: 'HTML5 Video',
+    infoLabel: 'Video Infos',
+    allowed: 'Erlaubte Dateierweiterungen: MP4, WebM, Ogv',
+    urlMissing: 'Sie haben keine URL zur Video-Datei angegeben.',
+    videoProperties: 'Video-Einstellungen',
+    upload: 'Hochladen',
+    btnUpload: 'Zum Server senden',
+    advanced: 'Erweitert',
+    autoplay: 'Autoplay?',
+    yes: 'Ja',
+    no: 'Nein'
+} );
diff --git a/plugins/ckeditor4/html5video/lang/en.js b/plugins/ckeditor4/html5video/lang/en.js
new file mode 100644
index 0000000..88b54e3
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/en.js
@@ -0,0 +1,15 @@
+CKEDITOR.plugins.setLang( 'html5video', 'en', {
+    button: 'Insert HTML5 video',
+    title: 'HTML5 video',
+    infoLabel: 'Video info',
+    allowed: 'Allowed file extensions: MP4, WebM, Ogv',
+    urlMissing: 'Video source URL is missing.',
+    videoProperties: 'Video properties',
+    upload: 'Upload',
+    btnUpload: 'Send it to the server',
+    advanced: 'Advanced',
+    autoplay: 'Autoplay?',
+    yes: 'Yes',
+    no: 'No',
+	responsive: 'Responsive width'
+} );
diff --git a/plugins/ckeditor4/html5video/lang/es.js b/plugins/ckeditor4/html5video/lang/es.js
new file mode 100644
index 0000000..856a3a4
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/es.js
@@ -0,0 +1,14 @@
+CKEDITOR.plugins.setLang( 'html5video', 'es', {
+    button: 'Insertar video HTML5',
+    title: 'Video HTML5',
+    infoLabel: 'Información del video',
+    allowed: 'Extensiones de archivo permitidas: MP4, WebM, Ogv',
+    urlMissing: 'La URL del video no puede estar vacia.',
+    videoProperties: 'Propiedades del video',
+    upload: 'Cargar',
+    btnUpload: 'Enviar al servidor',
+    advanced: 'Avanzado',
+    autoplay: '¿Reproducir automáticamente?',
+    yes: 'Si',
+    no: 'No'
+} );
diff --git a/plugins/ckeditor4/html5video/lang/eu.js b/plugins/ckeditor4/html5video/lang/eu.js
new file mode 100644
index 0000000..820585f
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/eu.js
@@ -0,0 +1,14 @@
+CKEDITOR.plugins.setLang( 'html5video', 'eu', {
+    button: 'Txertatu HTML5 bideoa',
+    title: 'HTML5 bideoa',
+    infoLabel: 'Bideoaren informazioa',
+    allowed: 'Baimendutako fitxategi luzapenak: MP4, WebM, Ogv',
+    urlMissing: 'Bideoaren URLak ezin du hutsik egon.',
+    videoProperties: 'Bideoaren propietateak',
+    upload: 'Kargatu',
+    btnUpload: 'Bidali zerbitzarira',
+    advanced: 'Aurreratua',
+    autoplay: 'Automatikoki erreproduzitu?',
+    yes: 'Bai',
+    no: 'Ez'
+} );
diff --git a/plugins/ckeditor4/html5video/lang/fr.js b/plugins/ckeditor4/html5video/lang/fr.js
new file mode 100644
index 0000000..b6df423
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/fr.js
@@ -0,0 +1,14 @@
+CKEDITOR.plugins.setLang( 'html5video', 'fr', {
+    button: 'Insérer un lecteur video HTML5',
+    title: 'HTML5 video',
+    infoLabel: 'Informations video',
+    allowed: 'Extensions de fichiers autorisées: MP4, WebM, Ogv',
+    urlMissing: 'URL de la source video manquante. Veuillez la renseigner.',
+    videoProperties: 'Propriétés Video',
+    upload: 'Télécharger',
+    btnUpload: 'Envoyer vers le serveur',
+    advanced: 'Avancé',
+    autoplay: 'Jouer automatiquement ?',
+    yes: 'Oui',
+    no: 'Non'
+} );
diff --git a/plugins/ckeditor4/html5video/lang/ru.js b/plugins/ckeditor4/html5video/lang/ru.js
new file mode 100644
index 0000000..68c09fa
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/ru.js
@@ -0,0 +1,15 @@
+CKEDITOR.plugins.setLang( 'html5video', 'ru', {
+    button: 'Вставить HTML5 видео',
+    title: 'HTML5 видео',
+    infoLabel: 'Видео',
+    allowed: 'Допустимые расширения файлов: MP4, WebM, Ogv',
+    urlMissing: 'Не выбран источник видео',
+    videoProperties: 'Свойства видео',
+    upload: 'Загрузить',
+    btnUpload: 'Загрузить на сервер',
+    advanced: 'Дополнительно',
+    autoplay: 'Автовоспроизведение',
+    yes: 'Да',
+    no: 'Нет',
+    responsive: 'Адаптивная ширина'
+} );
diff --git a/plugins/ckeditor4/html5video/lang/uk.js b/plugins/ckeditor4/html5video/lang/uk.js
new file mode 100644
index 0000000..399ecb6
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/uk.js
@@ -0,0 +1,14 @@
+CKEDITOR.plugins.setLang( 'html5video', 'uk', {
+    button: 'Вставити HTML5 відео',
+    title: 'HTML5 відео',
+    infoLabel: 'Інформація',
+    allowed: 'Допустимі розширення файлів: MP4, WebM, Ogv',
+    urlMissing: 'Не обрано джерела відео',
+    videoProperties: 'Властивості відео',
+    upload: 'Відвантажити',
+    btnUpload: 'Відвантажити на сервер',
+    advanced: 'Додатково',
+    autoplay: 'Автовідтворення?',
+    yes: 'Так',
+    no: 'Ні'
+} );
diff --git a/plugins/ckeditor4/html5video/lang/uz.js b/plugins/ckeditor4/html5video/lang/uz.js
new file mode 100644
index 0000000..f70933e
--- /dev/null
+++ b/plugins/ckeditor4/html5video/lang/uz.js
@@ -0,0 +1,14 @@
+CKEDITOR.plugins.setLang( 'html5video', 'uz', {
+    button: 'HTML5 video qo‘shing',
+    title: 'HTML5 video',
+    infoLabel: 'Video ma\'lumot',
+    allowed: 'Ruxsat etilgan kengaytmalar: MP4, WebM, Ogv',
+    urlMissing: 'Video\'ning URL manbasi topilmadi.',
+    videoProperties: 'Video xususiyatlari',
+    upload: 'Yuklash',
+    btnUpload: 'Serverga jo‘natish',
+    advanced: 'Kengaytrilgan',
+    autoplay: 'Avtoijro?',
+    yes: 'Ha',
+    no: 'Yo‘q'
+} );
diff --git a/plugins/ckeditor4/html5video/plugin.js b/plugins/ckeditor4/html5video/plugin.js
new file mode 100644
index 0000000..54f4d21
--- /dev/null
+++ b/plugins/ckeditor4/html5video/plugin.js
@@ -0,0 +1,139 @@
+CKEDITOR.plugins.add( 'html5video', {
+    requires: 'widget',
+    lang: 'de,en,eu,es,ru,uk,fr',
+    icons: 'html5video',
+    init: function( editor ) {
+        editor.widgets.add( 'html5video', {
+            button: editor.lang.html5video.button,
+            template: '<div class="ckeditor-html5-video"></div>',
+            /*
+             * Allowed content rules (http://docs.ckeditor.com/#!/guide/dev_allowed_content_rules):
+             *  - div-s with text-align,float,margin-left,margin-right inline style rules and required ckeditor-html5-video class.
+             *  - video tags with src, controls, width and height attributes.
+             */
+            allowedContent: 'div[data-responsive](!ckeditor-html5-video){text-align,float,margin-left,margin-right}; video[src,controls,autoplay,width, height]{max-width,height};',
+            requiredContent: 'div(ckeditor-html5-video); video[src,controls];',
+            upcast: function( element ) {
+                return element.name === 'div' && element.hasClass( 'ckeditor-html5-video' );
+            },
+            dialog: 'html5video',
+            init: function() {
+                var src = '';
+                var autoplay = '';
+                var align = this.element.getStyle( 'text-align' );
+
+                var width = '';
+                var height = '';
+
+                // If there's a child (the video element)
+                if ( this.element.getChild( 0 ) ) {
+                    // get it's attributes.
+                    src = this.element.getChild( 0 ).getAttribute( 'src' );
+                    width = this.element.getChild( 0 ).getAttribute( 'width' );
+                    height = this.element.getChild( 0 ).getAttribute( 'height' );
+                    autoplay = this.element.getChild( 0 ).getAttribute( 'autoplay' );
+										responsive = this.element.getAttribute( 'data-responsive' );
+                }
+
+                if ( src ) {
+                    this.setData( 'src', src );
+
+                    if ( align ) {
+                        this.setData( 'align', align );
+                    } else {
+                        this.setData( 'align', 'none' );
+                    }
+
+                    if ( width ) {
+                        this.setData( 'width', width );
+                    }
+
+                    if ( height ) {
+                        this.setData( 'height', height );
+                    }
+
+                    if ( autoplay ) {
+                        this.setData( 'autoplay', 'yes' );
+                    }
+										
+                    if ( responsive ) {
+                        this.setData( 'responsive', responsive );	
+                    }
+                }
+            },
+            data: function() {
+                // If there is an video source
+                if ( this.data.src ) {
+                    // and there isn't a child (the video element)
+                    if ( !this.element.getChild( 0 ) ) {
+                        // Create a new <video> element.
+                        var videoElement = new CKEDITOR.dom.element( 'video' );
+                        // Set the controls attribute.
+                        videoElement.setAttribute( 'controls', 'controls' );
+                        // Append it to the container of the plugin.
+                        this.element.append( videoElement );
+                    }
+                    this.element.getChild( 0 ).setAttribute( 'src', this.data.src );
+                    if (this.data.width) this.element.getChild( 0 ).setAttribute( 'width', this.data.width );
+                    if (this.data.height) this.element.getChild( 0 ).setAttribute( 'height', this.data.height );
+
+                    if ( this.data.responsive ) {
+                            this.element.setAttribute("data-responsive", this.data.responsive);
+                            this.element.getChild( 0 ).setStyle( 'max-width', '100%' );
+                            this.element.getChild( 0 ).setStyle( 'height', 'auto' );
+                    } else {
+                            this.element.getChild( 0 ).removeStyle( 'max-width' );
+                            this.element.getChild( 0 ).removeStyle( 'height' );
+                    }								
+                }
+
+                this.element.removeStyle( 'float' );
+                this.element.removeStyle( 'margin-left' );
+                this.element.removeStyle( 'margin-right' );
+
+                if ( this.data.align === 'none' ) {
+                    this.element.removeStyle( 'text-align' );
+                } else {
+                    this.element.setStyle( 'text-align', this.data.align );
+                }
+
+                if ( this.data.align === 'left' ) {
+                    this.element.setStyle( 'float', this.data.align );
+                    this.element.setStyle( 'margin-right', '10px' );
+                } else if ( this.data.align === 'right' ) {
+                    this.element.setStyle( 'float', this.data.align );
+                    this.element.setStyle( 'margin-left', '10px' );
+                }
+
+                if ( this.element.getChild( 0 ) ) {
+                    if ( this.data.autoplay === 'yes' ) {
+                        this.element.getChild( 0 ).setAttribute( 'autoplay', 'autoplay' );
+                    } else {
+                        this.element.getChild( 0 ).removeAttribute( 'autoplay' );
+                    }
+                }
+            }
+        } );
+
+        if ( editor.contextMenu ) {
+            editor.addMenuGroup( 'html5videoGroup' );
+            editor.addMenuItem( 'html5videoPropertiesItem', {
+                label: editor.lang.html5video.videoProperties,
+                icon: 'html5video',
+                command: 'html5video',
+                group: 'html5videoGroup'
+            });
+
+            editor.contextMenu.addListener( function( element ) {
+                if ( element &&
+                     element.getChild( 0 ) &&
+                     element.getChild( 0 ).hasClass &&
+                     element.getChild( 0 ).hasClass( 'ckeditor-html5-video' ) ) {
+                    return { html5videoPropertiesItem: CKEDITOR.TRISTATE_OFF };
+                }
+            });
+        }
+
+        CKEDITOR.dialog.add( 'html5video', this.path + 'dialogs/html5video.js' );
+    }
+} );
diff --git a/plugins/ckeditor4/inserthtml4x b/plugins/ckeditor4/inserthtml4x
new file mode 160000
index 0000000..6a4fa63
--- /dev/null
+++ b/plugins/ckeditor4/inserthtml4x
@@ -0,0 +1 @@
+Subproject commit 6a4fa6340373600125654874fcef59743fbef140
diff --git a/plugins/ckeditor4/lineheight/LICENSE b/plugins/ckeditor4/lineheight/LICENSE
new file mode 100644
index 0000000..78f4754
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Kamlesh Kushwaha
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/plugins/ckeditor4/lineheight/README.md b/plugins/ckeditor4/lineheight/README.md
new file mode 100644
index 0000000..a7fdba0
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/README.md
@@ -0,0 +1,2 @@
+# lineheight
+Ckeditor lineheight plugin repository
diff --git a/plugins/ckeditor4/lineheight/lang/LANG.js b/plugins/ckeditor4/lineheight/lang/LANG.js
new file mode 100644
index 0000000..66a7c5f
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/LANG.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','{LANGUAGE_CODE}', {
+    title: '{LINE-HEIGHT}'
+} );
diff --git a/plugins/ckeditor4/lineheight/lang/ar.js b/plugins/ckeditor4/lineheight/lang/ar.js
new file mode 100644
index 0000000..be7347b
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/ar.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','ar', {
+    title: 'خط الطول'
+} );
diff --git a/plugins/ckeditor4/lineheight/lang/de.js b/plugins/ckeditor4/lineheight/lang/de.js
new file mode 100644
index 0000000..4a5ee25
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/de.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','de', {
+    title: 'Zeilenhöhe'
+} );
diff --git a/plugins/ckeditor4/lineheight/lang/en.js b/plugins/ckeditor4/lineheight/lang/en.js
new file mode 100644
index 0000000..ea74fbc
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/en.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','en', {
+    title: 'Line Height'
+} );
diff --git a/plugins/ckeditor4/lineheight/lang/es.js b/plugins/ckeditor4/lineheight/lang/es.js
new file mode 100644
index 0000000..1498176
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/es.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','es', {
+    title: 'Altura de Línea'
+} );
diff --git a/plugins/ckeditor4/lineheight/lang/fr.js b/plugins/ckeditor4/lineheight/lang/fr.js
new file mode 100644
index 0000000..1679889
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/fr.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','fr', {
+    title: 'Hauteur de Ligne'
+} );
diff --git a/plugins/ckeditor4/lineheight/lang/ko.js b/plugins/ckeditor4/lineheight/lang/ko.js
new file mode 100644
index 0000000..782bd87
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/ko.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','ko', {
+    title: '줄 높이'
+} );
diff --git a/plugins/ckeditor4/lineheight/lang/pt.js b/plugins/ckeditor4/lineheight/lang/pt.js
new file mode 100644
index 0000000..f8ca6e4
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/lang/pt.js
@@ -0,0 +1,3 @@
+CKEDITOR.plugins.setLang('lineheight','af', {
+    title: 'linha Altura'
+} );
diff --git a/plugins/ckeditor4/lineheight/plugin.js b/plugins/ckeditor4/lineheight/plugin.js
new file mode 100644
index 0000000..464c747
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/plugin.js
@@ -0,0 +1,81 @@
+( function() {
+	function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition, order ) {
+		var config = editor.config,style = new CKEDITOR.style( styleDefinition );		
+		var names = entries.split( ';' ),values = [];		
+		var styles = {};
+		for ( var i = 0; i < names.length; i++ ) {
+			var parts = names[ i ];
+			if ( parts ) {
+				parts = parts.split( '/' );
+				var vars = {},name = names[ i ] = parts[ 0 ];
+				vars[ styleType ] = values[ i ] = parts[ 1 ] || name;
+				styles[ name ] = new CKEDITOR.style( styleDefinition, vars );
+				styles[ name ]._.definition.name = name;
+			} else
+				names.splice( i--, 1 );
+		}
+		editor.ui.addRichCombo( comboName, {
+			label: editor.lang.lineheight.title,
+			title: editor.lang.lineheight.title,
+			toolbar: 'styles,' + order,
+			allowedContent: style,
+			requiredContent: style,
+			panel: {
+				css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ),
+				multiSelect: false,
+				attributes: { 'aria-label': editor.lang.lineheight.title }
+			},
+			init: function() {
+				this.startGroup(editor.lang.lineheight.title);
+				for ( var i = 0; i < names.length; i++ ) {
+					var name = names[ i ];					
+					this.add( name, styles[ name ].buildPreview(), name );
+				}
+			},
+			onClick: function( value ) {
+				editor.focus();
+				editor.fire( 'saveSnapshot' );
+				var style = styles[ value ];
+				editor[ this.getValue() == value ? 'removeStyle' : 'applyStyle' ]( style );
+				editor.fire( 'saveSnapshot' );
+			},
+			onRender: function() {
+				editor.on( 'selectionChange', function( ev ) {
+					var currentValue = this.getValue();
+					var elementPath = ev.data.path,elements = elementPath.elements;
+					for ( var i = 0, element; i < elements.length; i++ ) {
+						element = elements[ i ];
+						for ( var value in styles ) {
+							if ( styles[ value ].checkElementMatch( element, true, editor ) ) {
+								if ( value != currentValue )
+									this.setValue( value );
+								return;
+							}
+						}
+					}
+					this.setValue( '', defaultLabel );
+				}, this );
+			},
+			refresh: function() {
+				if ( !editor.activeFilter.check( style ) )
+					this.setState( CKEDITOR.TRISTATE_DISABLED );
+			}
+		} );
+	}
+	CKEDITOR.plugins.add( 'lineheight', {
+		requires: 'richcombo',
+		lang: 'ar,de,en,es,fr,ko,pt',
+		init: function( editor ) {
+			var config = editor.config;
+			addCombo( editor, 'lineheight', 'size', editor.lang.lineheight.title, config.line_height, editor.lang.lineheight.title, config.lineHeight_style, 40 );
+		}
+	} );
+} )();
+CKEDITOR.config.line_height = '1;2;3;4;5;6;7;8;9;10;11;12;13;14;15;16;17;18;19;20;21;22;23;24;25;26;27;28;29;30;31;32;33;34;35;36;37;38;39;40;41;42;43;44;45;46;47;48;49;50;51;52;53;54;55;56;57;58;59;60;61;62;63;64;65;66;67;68;69;70;71;72';
+CKEDITOR.config.lineHeight_style = {
+	element: 'span',
+	styles: { 'line-height': '#(size)' },
+	overrides: [ {
+		element: 'line-height', attributes: { 'size': null }
+	} ]
+};
diff --git a/plugins/ckeditor4/lineheight/readme.txt b/plugins/ckeditor4/lineheight/readme.txt
new file mode 100644
index 0000000..313beca
--- /dev/null
+++ b/plugins/ckeditor4/lineheight/readme.txt
@@ -0,0 +1,30 @@
+lineheight
+==========
+
+CKEDITOR Line-height plugin documentation
+----------------------------------------------
+
+Installation Notes:
+
+    Adding plugin into the toolbar:
+    Using CKBuilder is a recommended solution, however, if you have plugins developed by yourself or by third parties, you can add plugins to your local installation manually by following the steps described below:
+    Extract the plugin .zip archive.
+    Copy the plugin files to the plugins folder of your CKEditor installation. Each plugin must be placed in a sub-folder that matches its "technical" name.
+    
+    For example, the lineheight plugin would be installed into this folder: <CKEditor folder>/plugins/lineheight.
+    Check and resolve plugin dependencies. If a plugin needs others to work, you will need to add these manually as well.
+    Enable the plugin. Use the extraPlugins setting to add the plugin to your confiuration:
+
+          config.extraPlugins = 'lineheight';
+          
+Refer this link for configuring the toolbar: http://docs.ckeditor.com/#!/guide/dev_toolbar
+
+
+Customizing the lineheight values in the dropdown
+-------------------------------------------------------
+In order to have custom values of line-height instead of the default, you can add following line in the config.js file:
+        
+        config.line_height="1em;1.1em;1.2em;1.3em;1.4em;1.5em";
+        
+        Here, "em" is the unit of line-height which you can change to "px","%" or any other allowed unit for line-height. 
+        You can also change the numbers based on your requirements. You can have more range or low range , it all depends on your requirements.
diff --git a/plugins/ckeditor4/loremipsum/icons/hidpi/loremipsum.png b/plugins/ckeditor4/loremipsum/icons/hidpi/loremipsum.png
new file mode 100644
index 0000000000000000000000000000000000000000..1bd9d2f70a657c1f285cc47ff5d8399668e22f94
GIT binary patch
literal 401
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyk|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*D5X3<7*YT$vacgarlPy?fW$(P3(Ayn5BDGiT1+y?b}h?%fsT
z<*qI+vu4f=3k_9KQc6!t`~Uy{y|hzzfO-W=g8YJkTx7uTKsi<tD0kb_#WAGf)|SaP
z#hMj(T+|h;U;O`{>zu0n<-+t=lV@Zb83)GL>-~`oDB4lVonUh=O#O)D1(r)+3mB@H
zc<f&bGoAEg{?2m7EoI&Bx!lqhRqM89GHzvM$&e3`Q034Uci>YCb&6<Uu~lK(z2iWj
z@Y&KRlO2=(rfO)J>|$Q&HKF}NJOi)LRmRtA-&#HRW&M-EocZIl)O)Y3F2<NOO#RH^
zzEI|k>LeM4YrMKEOU{)nh!)8@mm?cDeeDMB2~zGi{+Qm_W~N~IdF4U=*$EFsy!px^
j3PaBSjqGR8XJlij-)HRiHO}@w(3=dNu6{1-oD!M<Z9=34

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/loremipsum/icons/loremipsum.png b/plugins/ckeditor4/loremipsum/icons/loremipsum.png
new file mode 100644
index 0000000000000000000000000000000000000000..f67a9f9ef6d39d7631c578133b74c9c5cc8a0bda
GIT binary patch
literal 293
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDuZK6ep0G}
zXKrG8YEWuoN@d~6R2!fog8-ip*LUyU-MxEv*36kIN=i%&45r4$!h(XXE-q)zoLRkU
zRYiGudRkg%M@Lv_=$_rX|Ns9l%`C7NWLrs)Uoeo13>Y3L$4Ua_@;zM~Ln?07^hfeF
z7;w1U<hncM_x)?vwz>6A<oAeclVqqDtzp)<V#PL#fhk$~hylZfC*E~h9+xgFzmnMD
zur+U{scynf_YHddSN6UvfBe+3N$#%YkDjxW)>ve$yv;ECi*VqTf^}C4^L|yn3u|X!
ZX2`zG!#!ay*DIja44$rjF6*2UngHm&b~XS2

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/loremipsum/lang/en.js b/plugins/ckeditor4/loremipsum/lang/en.js
new file mode 100644
index 0000000..0f11c8c
--- /dev/null
+++ b/plugins/ckeditor4/loremipsum/lang/en.js
@@ -0,0 +1,8 @@
+CKEDITOR.plugins.setLang( 'loremipsum', 'en', {
+	title: 'Lorem Ipsum Generator',
+	toolbar: 'Lorem Ipsum Generator',
+	paragraph: 'Paraghraph',
+	sentence: 'Sentence',
+	paragraphs: 'Paraghraphs',
+	sentences: 'Sentences'
+} );
\ No newline at end of file
diff --git a/plugins/ckeditor4/loremipsum/lang/fr.js b/plugins/ckeditor4/loremipsum/lang/fr.js
new file mode 100644
index 0000000..6946ee1
--- /dev/null
+++ b/plugins/ckeditor4/loremipsum/lang/fr.js
@@ -0,0 +1,8 @@
+CKEDITOR.plugins.setLang( 'loremipsum', 'fr', {
+	title: 'Lorem Ipsum Generator',
+	toolbar: 'Lorem Ipsum Generator',
+	paragraph: 'Paraghraphe',
+	sentence: 'Phrase',
+	paragraphs: 'Paraghraphes',
+	sentences: 'Phrases'
+} );
\ No newline at end of file
diff --git a/plugins/ckeditor4/loremipsum/plugin.js b/plugins/ckeditor4/loremipsum/plugin.js
new file mode 100644
index 0000000..bbf0ae9
--- /dev/null
+++ b/plugins/ckeditor4/loremipsum/plugin.js
@@ -0,0 +1,131 @@
+(function() {
+	var pluginName = 'loremipsum';
+	
+	var LOREM_TEXT_TYPE = {PARAGRAPH: 1, SENTENCE: 2, WORD: 3 };
+	
+    var LOREM_WORDS = [
+        "lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit", "ut", "aliquam,", "purus", "sit", "amet", "luctus", "venenatis,", "lectus", "magna", "fringilla", "urna,", "porttitor", "rhoncus", "dolor", "purus", "non", "enim", "praesent", "elementum", "facilisis", "leo,", "vel", "fringilla", "est", "ullamcorper", "eget", "nulla", "facilisi", "etiam", "dignissim", "diam", "quis", "enim", "lobortis", "scelerisque", "fermentum", "dui", "faucibus", "in", "ornare", "quam", "viverra", "orci", "sagittis", "eu", "volutpat", "odio", "facilisis", "mauris", "sit", "amet", "massa", "vitae", "tortor", "condimentum", "lacinia", "quis", "vel", "eros", "donec", "ac", "odio", "tempor", "orci", "dapibus", "ultrices", "in", "iaculis", "nunc", "sed", "augue", "lacus,", "viverra", "vitae", "congue", "eu,", "consequat", "ac", "felis", "donec", "et", "odio", "pellentesque", "diam", "volutpat", "commodo", "sed", "egestas", "egestas", "fringilla", "phasellus", "faucibus", "scelerisque", "eleifend", "donec", "pretium", "vulputate", "sapien", "nec", "sagittis", "aliquam", "malesuada", "bibendum", "arcu", "vitae", "elementum",
+        "curabitur", "vitae", "nunc", "sed", "velit", "dignissim", "sodales", "ut", "eu", "sem", "integer", "vitae", "justo", "eget", "magna", "fermentum", "iaculis", "eu", "non", "diam", "phasellus", "vestibulum", "lorem", "sed", "risus", "ultricies", "tristique", "nulla", "aliquet", "enim", "tortor,", "at", "auctor", "urna", "nunc", "id", "cursus", "metus", "aliquam", "eleifend", "mi", "in", "nulla", "posuere", "sollicitudin", "aliquam", "ultrices", "sagittis", "orci,", "a", "scelerisque", "purus", "semper", "eget", "duis", "at", "tellus", "at", "urna", "condimentum", "mattis", "pellentesque", "id", "nibh", "tortor,", "id", "aliquet", "lectus", "proin", "nibh", "nisl,", "condimentum", "id", "venenatis", "a,", "condimentum", "vitae", "sapien", "pellentesque", "habitant", "morbi", "tristique", "senectus", "et", "netus", "et", "malesuada", "fames", "ac", "turpis", "egestas", "sed", "tempus,", "urna", "et", "pharetra", "pharetra,", "massa", "massa", "ultricies", "mi,", "quis", "hendrerit", "dolor", "magna", "eget", "est", "lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit", "pellentesque", "habitant", "morbi", "tristique", "senectus", "et", "netus", "et", "malesuada", "fames", "ac", "turpis", "egestas", "integer", "eget", "aliquet", "nibh", "praesent", "tristique", "magna", "sit", "amet", "purus", "gravida", "quis", "blandit", "turpis", "cursus", "in", "hac", "habitasse", "platea", "dictumst", "quisque", "sagittis,", "purus", "sit", "amet", "volutpat", "consequat,", "mauris", "nunc", "congue", "nisi,", "vitae", "suscipit", "tellus", "mauris", "a", "diam",
+        "maecenas", "sed", "enim", "ut", "sem", "viverra", "aliquet", "eget", "sit", "amet", "tellus", "cras", "adipiscing", "enim", "eu", "turpis", "egestas", "pretium", "aenean", "pharetra,", "magna", "ac", "placerat", "vestibulum,", "lectus", "mauris", "ultrices", "eros,", "in", "cursus", "turpis", "massa", "tincidunt", "dui", "ut", "ornare", "lectus", "sit", "amet", "est", "placerat", "in", "egestas", "erat", "imperdiet", "sed", "euismod", "nisi", "porta", "lorem", "mollis", "aliquam", "ut", "porttitor", "leo", "a", "diam", "sollicitudin", "tempor", "id", "eu", "nisl", "nunc", "mi", "ipsum,", "faucibus", "vitae", "aliquet", "nec,", "ullamcorper", "sit", "amet", "risus", "nullam", "eget", "felis", "eget", "nunc", "lobortis", "mattis", "aliquam", "faucibus", "purus", "in", "massa", "tempor", "nec", "feugiat", "nisl", "pretium", "fusce", "id", "velit", "ut", "tortor", "pretium", "viverra", "suspendisse", "potenti", "nullam", "ac", "tortor", "vitae", "purus", "faucibus", "ornare", "suspendisse", "sed", "nisi", "lacus,", "sed", "viverra", "tellus", "in", "hac", "habitasse", "platea", "dictumst", "vestibulum", "rhoncus", "est", "pellentesque", "elit", "ullamcorper", "dignissim", "cras", "tincidunt", "lobortis", "feugiat", "vivamus", "at", "augue", "eget", "arcu", "dictum", "varius", "duis", "at", "consectetur", "lorem",
+        "donec", "massa", "sapien,", "faucibus", "et", "molestie", "ac,", "feugiat", "sed", "lectus", "vestibulum", "mattis", "ullamcorper", "velit", "sed", "ullamcorper", "morbi", "tincidunt", "ornare", "massa,", "eget", "egestas", "purus", "viverra", "accumsan", "in", "nisl", "nisi,", "scelerisque", "eu", "ultrices", "vitae,", "auctor", "eu", "augue", "ut", "lectus", "arcu,", "bibendum", "at", "varius", "vel,", "pharetra", "vel", "turpis", "nunc", "eget", "lorem", "dolor,", "sed", "viverra", "ipsum", "nunc", "aliquet", "bibendum", "enim,", "facilisis", "gravida", "neque", "convallis", "a", "cras", "semper", "auctor", "neque,", "vitae", "tempus", "quam", "pellentesque", "nec", "nam", "aliquam", "sem", "et", "tortor", "consequat", "id", "porta", "nibh", "venenatis", "cras", "sed", "felis", "eget", "velit", "aliquet", "sagittis", "id", "consectetur", "purus", "ut", "faucibus", "pulvinar", "elementum", "integer", "enim", "neque,", "volutpat", "ac", "tincidunt", "vitae,", "semper", "quis", "lectus", "nulla", "at", "volutpat", "diam", "ut", "venenatis", "tellus", "in", "metus", "vulputate", "eu", "scelerisque", "felis", "imperdiet", "proin", "fermentum", "leo", "vel", "orci", "porta", "non", "pulvinar", "neque", "laoreet", "suspendisse", "interdum", "consectetur", "libero,", "id", "faucibus", "nisl", "tincidunt", "eget", "nullam", "non", "nisi", "est,", "sit", "amet", "facilisis", "magna",
+        "etiam", "tempor,", "orci", "eu", "lobortis", "elementum,", "nibh", "tellus", "molestie", "nunc,", "non", "blandit", "massa", "enim", "nec", "dui", "nunc", "mattis", "enim", "ut", "tellus", "elementum", "sagittis", "vitae", "et", "leo", "duis", "ut", "diam", "quam", "nulla", "porttitor", "massa", "id", "neque", "aliquam", "vestibulum", "morbi", "blandit", "cursus", "risus,", "at", "ultrices", "mi", "tempus", "imperdiet", "nulla", "malesuada", "pellentesque", "elit", "eget", "gravida", "cum", "sociis", "natoque", "penatibus", "et", "magnis", "dis", "parturient", "montes,", "nascetur", "ridiculus", "mus", "mauris", "vitae", "ultricies", "leo", "integer", "malesuada", "nunc", "vel", "risus", "commodo", "viverra", "maecenas", "accumsan,", "lacus", "vel", "facilisis", "volutpat,", "est", "velit", "egestas", "dui,", "id", "ornare", "arcu", "odio", "ut", "sem", "nulla", "pharetra", "diam", "sit", "amet", "nisl", "suscipit", "adipiscing", "bibendum", "est", "ultricies", "integer", "quis", "auctor", "elit",
+        "sed", "vulputate", "mi", "sit", "amet", "mauris", "commodo", "quis", "imperdiet", "massa", "tincidunt", "nunc", "pulvinar", "sapien", "et", "ligula", "ullamcorper", "malesuada", "proin", "libero", "nunc,", "consequat", "interdum", "varius", "sit", "amet,", "mattis", "vulputate", "enim", "nulla", "aliquet", "porttitor", "lacus,", "luctus", "accumsan", "tortor", "posuere", "ac", "ut", "consequat", "semper", "viverra", "nam", "libero", "justo,", "laoreet", "sit", "amet", "cursus", "sit", "amet,", "dictum", "sit", "amet", "justo", "donec", "enim", "diam,", "vulputate", "ut", "pharetra", "sit", "amet,", "aliquam", "id", "diam", "maecenas", "ultricies", "mi", "eget", "mauris", "pharetra", "et", "ultrices", "neque", "ornare", "aenean", "euismod", "elementum", "nisi,", "quis", "eleifend", "quam", "adipiscing", "vitae", "proin", "sagittis,", "nisl", "rhoncus", "mattis", "rhoncus,", "urna", "neque", "viverra", "justo,", "nec", "ultrices", "dui", "sapien", "eget", "mi", "proin", "sed", "libero", "enim,", "sed", "faucibus", "turpis", "in", "eu", "mi", "bibendum", "neque", "egestas", "congue", "quisque", "egestas", "diam", "in", "arcu", "cursus", "euismod", "quis", "viverra", "nibh", "cras", "pulvinar", "mattis", "nunc,", "sed", "blandit", "libero", "volutpat", "sed", "cras", "ornare", "arcu", "dui", "vivamus", "arcu", "felis,", "bibendum", "ut", "tristique", "et,", "egestas", "quis", "ipsum", "suspendisse", "ultrices", "gravida", "dictum",
+        "fusce", "ut", "placerat", "orci", "nulla", "pellentesque", "dignissim", "enim,", "sit", "amet", "venenatis", "urna", "cursus", "eget", "nunc", "scelerisque", "viverra", "mauris,", "in", "aliquam", "sem", "fringilla", "ut", "morbi", "tincidunt", "augue", "interdum", "velit", "euismod", "in", "pellentesque", "massa", "placerat", "duis", "ultricies", "lacus", "sed", "turpis", "tincidunt", "id", "aliquet", "risus", "feugiat", "in", "ante", "metus,", "dictum", "at", "tempor", "commodo,", "ullamcorper", "a", "lacus", "vestibulum", "sed", "arcu", "non", "odio", "euismod", "lacinia", "at", "quis", "risus", "sed", "vulputate", "odio", "ut", "enim", "blandit", "volutpat", "maecenas", "volutpat", "blandit", "aliquam", "etiam", "erat", "velit,", "scelerisque", "in", "dictum", "non,", "consectetur", "a", "erat", "nam", "at", "lectus", "urna", "duis", "convallis", "convallis", "tellus,", "id", "interdum", "velit", "laoreet", "id", "donec", "ultrices", "tincidunt", "arcu,", "non", "sodales", "neque", "sodales", "ut", "etiam", "sit", "amet", "nisl", "purus,", "in", "mollis", "nunc",
+        "sed", "id", "semper", "risus", "in", "hendrerit", "gravida", "rutrum", "quisque", "non", "tellus", "orci,", "ac", "auctor", "augue", "mauris", "augue", "neque,", "gravida", "in", "fermentum", "et,", "sollicitudin", "ac", "orci", "phasellus", "egestas", "tellus", "rutrum", "tellus", "pellentesque", "eu", "tincidunt", "tortor", "aliquam", "nulla", "facilisi", "cras", "fermentum,", "odio", "eu", "feugiat", "pretium,", "nibh", "ipsum", "consequat", "nisl,", "vel", "pretium", "lectus", "quam", "id", "leo", "in", "vitae", "turpis", "massa", "sed", "elementum", "tempus", "egestas", "sed", "sed", "risus", "pretium", "quam", "vulputate", "dignissim", "suspendisse", "in", "est", "ante", "in", "nibh", "mauris,", "cursus", "mattis", "molestie", "a,", "iaculis", "at", "erat",
+        "pellentesque", "adipiscing", "commodo", "elit,", "at", "imperdiet", "dui", "accumsan", "sit", "amet", "nulla", "facilisi", "morbi", "tempus", "iaculis", "urna,", "id", "volutpat", "lacus", "laoreet", "non", "curabitur", "gravida", "arcu", "ac", "tortor", "dignissim", "convallis", "aenean", "et", "tortor", "at", "risus", "viverra", "adipiscing", "at", "in", "tellus", "integer", "feugiat", "scelerisque", "varius", "morbi", "enim", "nunc,", "faucibus", "a", "pellentesque", "sit", "amet,", "porttitor", "eget", "dolor", "morbi", "non", "arcu", "risus,", "quis", "varius", "quam", "quisque", "id", "diam", "vel", "quam", "elementum", "pulvinar", "etiam", "non", "quam", "lacus", "suspendisse", "faucibus", "interdum", "posuere", "lorem", "ipsum", "dolor", "sit", "amet,", "consectetur", "adipiscing", "elit", "duis", "tristique", "sollicitudin", "nibh", "sit", "amet", "commodo", "nulla", "facilisi",
+        "nullam", "vehicula", "ipsum", "a", "arcu", "cursus", "vitae", "congue", "mauris", "rhoncus", "aenean", "vel", "elit", "scelerisque", "mauris", "pellentesque", "pulvinar", "pellentesque", "habitant", "morbi", "tristique", "senectus", "et", "netus", "et", "malesuada", "fames", "ac", "turpis", "egestas", "maecenas", "pharetra", "convallis", "posuere", "morbi", "leo", "urna,", "molestie", "at", "elementum", "eu,", "facilisis", "sed", "odio", "morbi", "quis", "commodo", "odio", "aenean", "sed", "adipiscing", "diam", "donec", "adipiscing", "tristique", "risus", "nec", "feugiat", "in", "fermentum", "posuere", "urna", "nec", "tincidunt", "praesent", "semper", "feugiat", "nibh", "sed", "pulvinar", "proin", "gravida", "hendrerit", "lectus", "a", "molestie"
+    ];
+    
+    function generateLoremText(count, type) {
+    	
+        switch (type) {
+        
+            case LOREM_TEXT_TYPE.PARAGRAPH:
+            	
+                var paragraphsArray = new Array ();
+                
+                for (var i = 0; i < count; i++) {
+                	// random number between 10 and 20
+                    paragraphsArray.push('<p>' + generateLoremText(Math.floor((Math.random() * 10) + 10), LOREM_TEXT_TYPE.SENTENCE) + '</p>');
+                }
+                
+                return paragraphsArray.join('\n');
+                
+                break;
+                
+            case LOREM_TEXT_TYPE.SENTENCE:
+            	
+                var sentencesArray = new Array ();
+                
+                for (var i = 0; i < count; i++) {
+                	// random number between 5 and 10
+                    var words = generateLoremText(Math.floor((Math.random() * 5) + 5), LOREM_TEXT_TYPE.WORD).split(' ');
+                    // Capitalize first letter
+                    words[0] = words[0].substr(0, 1).toUpperCase() + words[0].substr(1);
+                    var sentences = words.join(' ');
+
+                    sentencesArray.push(sentences);
+                }
+                
+                return (sentencesArray.join('. ') + '.').replace(/(\.\,|\,\.)/g, '.');
+                
+                break;
+                
+            case LOREM_TEXT_TYPE.WORD:
+            	// random integer between 1 et LOREM_WORDS.length
+                var randomWordIndex = Math.floor((Math.random() * (LOREM_WORDS.length - 1)) + 1);
+
+                return LOREM_WORDS.slice(randomWordIndex, randomWordIndex + count).join(' ');
+                
+                break;
+        }
+    };
+	
+	CKEDITOR.plugins.add( pluginName, {
+		icons: 'loremipsum',
+		requires: 'richcombo',
+		lang: 'fr,en',
+		hidpi: true,
+		init: function( editor ) {
+
+			var config = editor.config,
+			lang = editor.lang.loremipsum,
+			paragraphOptionsList = [],
+			sentenceOptionsList = [],
+			allowedContent = [];
+			
+			paragraphOptionsList[0]=["1p", "1 " + lang.paragraph, "1 " + lang.paragraph];
+			paragraphOptionsList[1]=["2p", "2 " + lang.paragraphs, "2 " + lang.paragraphs];
+			paragraphOptionsList[2]=["3p", "3 " + lang.paragraphs, "3 " + lang.paragraphs];
+			paragraphOptionsList[3]=["4p", "4 " + lang.paragraphs, "4 " + lang.paragraphs];
+			paragraphOptionsList[4]=["5p", "5 " + lang.paragraphs, "5 " + lang.paragraphs];
+			paragraphOptionsList[5]=["6p", "6 " + lang.paragraphs, "6 " + lang.paragraphs];
+			
+			sentenceOptionsList[0]=["1s", "1 " + lang.sentence, "1 " + lang.sentence];
+			sentenceOptionsList[1]=["2s", "2 " + lang.sentences, "2 " + lang.sentences];
+			sentenceOptionsList[2]=["3s", "3 " + lang.sentences, "3 " + lang.sentences];
+			sentenceOptionsList[3]=["4s", "4 " + lang.sentences, "4 " + lang.sentences];
+			sentenceOptionsList[4]=["5s", "5 " + lang.sentences, "5 " + lang.sentences];
+			sentenceOptionsList[5]=["6s", "6 " + lang.sentences, "6 " + lang.sentences];
+			
+			editor.ui.addRichCombo( 'Loremipsum', {
+				label: 'Loremipsum',
+				title: 'Loremipsum',
+				toolbar: 'loremipsum,70',
+				allowedContent: allowedContent,
+
+				panel: {
+					css: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ),
+					multiSelect: true,
+					attributes: { 'aria-label': 'Loremipsum' }
+				},
+				init: function() {
+					
+					this.startGroup( lang.paragraphs );
+
+					for (var paragraphOption in paragraphOptionsList){
+						this.add(paragraphOptionsList[paragraphOption][0], paragraphOptionsList[paragraphOption][1], paragraphOptionsList[paragraphOption][2]);
+					}
+					
+					this.startGroup( lang.sentences );
+
+					for (var sentenceOption in sentenceOptionsList){
+						this.add(sentenceOptionsList[sentenceOption][0], sentenceOptionsList[sentenceOption][1], sentenceOptionsList[sentenceOption][2]);
+					}
+
+					this.commit();
+				},
+				onClick: function( value ) {
+					
+					editor.focus();
+					editor.fire( 'saveSnapshot' );
+					var type = value.charAt(1) == 'p' ? LOREM_TEXT_TYPE.PARAGRAPH : LOREM_TEXT_TYPE.SENTENCE;
+					var text = generateLoremText(value.charAt(0), type);
+					editor.insertHtml(text);
+					editor.fire( 'saveSnapshot' );
+				}
+			});
+		}
+	});
+	
+})();
\ No newline at end of file
diff --git a/plugins/ckeditor4/markdown/.gitattributes b/plugins/ckeditor4/markdown/.gitattributes
new file mode 100755
index 0000000..412eeda
--- /dev/null
+++ b/plugins/ckeditor4/markdown/.gitattributes
@@ -0,0 +1,22 @@
+# Auto detect text files and perform LF normalization
+* text=auto
+
+# Custom for Visual Studio
+*.cs     diff=csharp
+*.sln    merge=union
+*.csproj merge=union
+*.vbproj merge=union
+*.fsproj merge=union
+*.dbproj merge=union
+
+# Standard to msysgit
+*.doc	 diff=astextplain
+*.DOC	 diff=astextplain
+*.docx diff=astextplain
+*.DOCX diff=astextplain
+*.dot  diff=astextplain
+*.DOT  diff=astextplain
+*.pdf  diff=astextplain
+*.PDF	 diff=astextplain
+*.rtf	 diff=astextplain
+*.RTF	 diff=astextplain
diff --git a/plugins/ckeditor4/markdown/.gitignore b/plugins/ckeditor4/markdown/.gitignore
new file mode 100755
index 0000000..b9d6bd9
--- /dev/null
+++ b/plugins/ckeditor4/markdown/.gitignore
@@ -0,0 +1,215 @@
+#################
+## Eclipse
+#################
+
+*.pydevproject
+.project
+.metadata
+bin/
+tmp/
+*.tmp
+*.bak
+*.swp
+*~.nib
+local.properties
+.classpath
+.settings/
+.loadpath
+
+# External tool builders
+.externalToolBuilders/
+
+# Locally stored "Eclipse launch configurations"
+*.launch
+
+# CDT-specific
+.cproject
+
+# PDT-specific
+.buildpath
+
+
+#################
+## Visual Studio
+#################
+
+## Ignore Visual Studio temporary files, build results, and
+## files generated by popular Visual Studio add-ons.
+
+# User-specific files
+*.suo
+*.user
+*.sln.docstates
+
+# Build results
+
+[Dd]ebug/
+[Rr]elease/
+x64/
+build/
+[Bb]in/
+[Oo]bj/
+
+# MSTest test Results
+[Tt]est[Rr]esult*/
+[Bb]uild[Ll]og.*
+
+*_i.c
+*_p.c
+*.ilk
+*.meta
+*.obj
+*.pch
+*.pdb
+*.pgc
+*.pgd
+*.rsp
+*.sbr
+*.tlb
+*.tli
+*.tlh
+*.tmp
+*.tmp_proj
+*.log
+*.vspscc
+*.vssscc
+.builds
+*.pidb
+*.log
+*.scc
+
+# Visual C++ cache files
+ipch/
+*.aps
+*.ncb
+*.opensdf
+*.sdf
+*.cachefile
+
+# Visual Studio profiler
+*.psess
+*.vsp
+*.vspx
+
+# Guidance Automation Toolkit
+*.gpState
+
+# ReSharper is a .NET coding add-in
+_ReSharper*/
+*.[Rr]e[Ss]harper
+
+# TeamCity is a build add-in
+_TeamCity*
+
+# DotCover is a Code Coverage Tool
+*.dotCover
+
+# NCrunch
+*.ncrunch*
+.*crunch*.local.xml
+
+# Installshield output folder
+[Ee]xpress/
+
+# DocProject is a documentation generator add-in
+DocProject/buildhelp/
+DocProject/Help/*.HxT
+DocProject/Help/*.HxC
+DocProject/Help/*.hhc
+DocProject/Help/*.hhk
+DocProject/Help/*.hhp
+DocProject/Help/Html2
+DocProject/Help/html
+
+# Click-Once directory
+publish/
+
+# Publish Web Output
+*.Publish.xml
+*.pubxml
+
+# NuGet Packages Directory
+## TODO: If you have NuGet Package Restore enabled, uncomment the next line
+#packages/
+
+# Windows Azure Build Output
+csx
+*.build.csdef
+
+# Windows Store app package directory
+AppPackages/
+
+# Others
+sql/
+*.Cache
+ClientBin/
+[Ss]tyle[Cc]op.*
+~$*
+*~
+*.dbmdl
+*.[Pp]ublish.xml
+*.pfx
+*.publishsettings
+
+# RIA/Silverlight projects
+Generated_Code/
+
+# Backup & report files from converting an old project file to a newer
+# Visual Studio version. Backup files are not needed, because we have git ;-)
+_UpgradeReport_Files/
+Backup*/
+UpgradeLog*.XML
+UpgradeLog*.htm
+
+# SQL Server files
+App_Data/*.mdf
+App_Data/*.ldf
+
+#############
+## Windows detritus
+#############
+
+# Windows image file caches
+Thumbs.db
+ehthumbs.db
+
+# Folder config file
+Desktop.ini
+
+# Recycle Bin used on file shares
+$RECYCLE.BIN/
+
+# Mac crap
+.DS_Store
+
+
+#############
+## Python
+#############
+
+*.py[co]
+
+# Packages
+*.egg
+*.egg-info
+dist/
+build/
+eggs/
+parts/
+var/
+sdist/
+develop-eggs/
+.installed.cfg
+
+# Installer logs
+pip-log.txt
+
+# Unit test / coverage reports
+.coverage
+.tox
+
+#Translations
+*.mo
+
+#Mr Developer
+.mr.developer.cfg
diff --git a/plugins/ckeditor4/markdown/README.md b/plugins/ckeditor4/markdown/README.md
new file mode 100755
index 0000000..e030880
--- /dev/null
+++ b/plugins/ckeditor4/markdown/README.md
@@ -0,0 +1,60 @@
+# CKEditor-Markdown-Plugin
+Markdown Plugin for CKEditor
+This is a plugin for CKEditor, you can use `markdown` mode in CKEditor. Moreover, your article in `WYSIWYG` mode can be translated to `markdown`.
+
+## Get Started
+It needs [ckeditor standard version](http://download.cksource.com/CKEditor/CKEditor/CKEditor%204.4.7/ckeditor_4.4.7_standard.zip)
+
+You can see the [DEMO](http://hectorguo.github.io/CKEditor-Markdown-Plugin/)
+
+## Usage
+1. Create a folder named `markdown` in `ckeditor/plugins` path;
+2. Download the source, and uncompress it in the folder;
+3. Edit `config.js` (such as `ckeditor/config.js`):
+```javascript
+	config.extraPlugins = 'markdown'; // add this plugin
+```
+Enjoy it!
+
+`config.js` example:
+```javascript
+CKEDITOR.editorConfig = function( config ) {
+	// Define changes to default configuration here.
+	// For complete reference see:
+	// http://docs.ckeditor.com/#!/api/CKEDITOR.config
+
+	// The toolbar groups arrangement, optimized for two toolbar rows.
+	config.toolbarGroups = [
+		// { name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },
+		// { name: 'editing',     groups: [ 'find', 'selection', 'spellchecker' ] },
+		// { name: 'links' },
+		// { name: 'insert' },
+		// { name: 'forms' },
+		{ name: 'tools' },
+		// { name: 'document',	   groups: [ 'mode', 'document', 'doctools' ] },
+		
+		// '/',
+		{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
+		// { name: 'paragraph',   groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },
+		{ name: 'styles' },
+		{ name: 'others' }
+		// { name: 'colors' },
+		// { name: 'about' }
+	];
+
+	// Remove some buttons provided by the standard plugins, which are
+	// not needed in the Standard(s) toolbar.
+	config.removeButtons = 'Underline,Subscript,Superscript';
+	config.extraPlugins = 'markdown';  // this is the point!
+	// Set the most common block elements.
+	config.format_tags = 'p;h1;h2;h3;pre';
+
+	// Simplify the dialog windows.
+	config.removeDialogTabs = 'image:advanced;link:advanced';
+};
+```
+
+## Thanks
+- [marked](https://github.com/chjj/marked)
+- [to-markdown](http://domchristie.github.io/to-markdown)
+- [codemirror](https://github.com/codemirror/CodeMirror)
diff --git a/plugins/ckeditor4/markdown/css/codemirror.min.css b/plugins/ckeditor4/markdown/css/codemirror.min.css
new file mode 100755
index 0000000..3690c79
--- /dev/null
+++ b/plugins/ckeditor4/markdown/css/codemirror.min.css
@@ -0,0 +1 @@
+.CodeMirror{font-family:monospace;height:300px}.CodeMirror-scroll{overflow:auto}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumbers{}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror div.CodeMirror-cursor{border-left:1px solid #000}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursor{width:auto;border:0;background:#7e7}div.CodeMirror-overwrite div.CodeMirror-cursor{}.cm-tab{display:inline-block}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable,.cm-s-default .cm-punctuation,.cm-s-default .cm-property,.cm-s-default .cm-operator{}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-header{color:blue}.cm-s-default .cm-quote{color:#090}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:bold}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{line-height:1;position:relative;overflow:hidden;background:#fff;color:#000}.CodeMirror-scroll{margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:none;position:relative;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-sizer{position:relative;border-right:30px solid transparent;-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-vscrollbar,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-gutter-filler{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;padding-bottom:30px;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;-moz-box-sizing:content-box;box-sizing:content-box;padding-bottom:30px;margin-bottom:-32px;display:inline-block;*zoom:1;*display:inline}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text}.CodeMirror pre{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:transparent;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-widget{}.CodeMirror-wrap .CodeMirror-scroll{overflow-x:hidden}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-measure pre{position:static}.CodeMirror div.CodeMirror-cursor{position:absolute;border-right:none;width:0}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:1}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.CodeMirror span{*vertical-align:text-bottom}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.CodeMirror{font:13px/1.4em monospace;text-align:left}.CodeMirror .activeline{background:#e8f2ff}.CodeMirror .CodeMirror-foldmarker{color:blue;-ms-text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;-webkit-text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;text-shadow:#b9f 1px 1px 2px,#b9f -1px -1px 2px,#b9f 1px -1px 2px,#b9f -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-matchingtag{background:#ff9600;background:rgba(255,150,0,.3)}.searchCodeButton span,.autoFormat span,.CommentSelectedRange span,.UncommentSelectedRange span{width:16px;height:16px;margin-left:6px}.searchCodeButton span{background:url("../icons/SearchCode.png") no-repeat}.autoFormat span{background:url("../icons/AutoFormat.png") no-repeat}.CommentSelectedRange span{background:url("../icons/CommentSelectedRange.png") no-repeat}.UncommentSelectedRange span{background:url("../icons/UncommentSelectedRange.png") no-repeat}.cke_reset_all .CodeMirror-scroll *{white-space:normal}.cke_reset_all .cm-s-cobalt *,.cke_reset_all .cm-s-erlang-dark *,.cke_reset_all .cm-s-lesser-dark *,.cke_reset_all .cm-s-monokai *,.cke_reset_all .cm-s-night *,.cke_reset_all .cm-s-rubyblue *,.cke_reset_all .cm-s-twilight *,.cke_reset_all .cm-s-xq-dark *,.cke_reset_all .cm-s-base16-dark *,.cke_reset_all .cm-s-3024-night *,.cke_reset_all .cm-s-the-matrix *,.cke_reset_all .cm-s-paraiso-dark *,.cke_reset_all .cm-s-paraiso-light *{color:inherit;font:inherit}.cm-s-cobalt .CodeMirror-selected{background:#b36539!important}.cm-s-erlang-dark .CodeMirror-selected{background:#b36539!important}.cm-s-lesser-dark .CodeMirror-selected{background:#45443b!important}.cm-s-monokai .CodeMirror-selected{background:#49483e!important}.cm-s-night .CodeMirror-selected{background:#447!important}.cm-s-rubyblue .CodeMirror-selected{background:#38566f!important}.cm-s-twilight .CodeMirror-selected{background:#323232!important}.cm-s-xq-dark .CodeMirror-selected{background:#a8f!important}.cm-s-the-matrix .CodeMirror-selected{background:#494949!important}.cm-s-mbo .CodeMirror-selected{background:#716c62!important}.cm-s-blackboard .activeline,.cm-s-cobalt .activeline,.cm-s-erlang-dark .activeline,.cm-s-lesser-dark .activeline,.cm-s-monokai .activeline,.cm-s-night .activeline,.cm-s-rubyblue .activeline,.cm-s-vibrant-ink .activeline,.cm-s-xq-dark .activeline,.cm-s-base16-dark .activeline,.cm-s-3024-night .activeline,.cm-s-paraiso-light .activeline,.cm-s-paraiso-dark .activeline,.cm-s-pastel-on-dark .activeline{background:#757575}.cm-s-pastel-on-dark .activeline{background:#404040}.cm-s-mbo .activeline{background:#716c62}.cm-s-twilight .activeline{background:#494949}.cm-s-the-matrix .activeline{background:#060}.CodeMirror-focused .cm-matchhighlight{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAFklEQVQI12NgYGBgkKzc8x9CMDAwAAAmhwSbidEoSQAAAABJRU5ErkJggg==);background-position:bottom;background-repeat:repeat-x}.CodeMirror-dialog{position:absolute;left:0;right:0;background:#fff;z-index:15;padding:.1em .8em;overflow:hidden;color:#333}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:none;background:transparent;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%}.CodeMirror-hints{position:absolute;z-index:10;overflow:hidden;list-style:none;margin:0;padding:2px;-webkit-box-shadow:2px 3px 5px #000;-ms-box-shadow:2px 3px 5px #000;box-shadow:2px 3px 5px #000;border-radius:3px;border:1px solid silver;background:#fff;font-size:90%;font-family:monospace;max-height:20em;overflow-y:auto}.CodeMirror-hint{margin:0;padding:0 4px;border-radius:2px;max-width:19em;overflow:hidden;white-space:pre;color:#000;cursor:pointer}.CodeMirror-hint-active{background:#08f;color:#fff}.cm-trailingspace{background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAACCAYAAAB/qH1jAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3QUXCToH00Y1UgAAACFJREFUCNdjPMDBUc/AwNDAAAFMTAwMDA0OP34wQgX/AQBYgwYEx4f9lQAAAABJRU5ErkJggg==);background-position:bottom left;background-repeat:repeat-x}
\ No newline at end of file
diff --git a/plugins/ckeditor4/markdown/icons/hidpi/markdown.png b/plugins/ckeditor4/markdown/icons/hidpi/markdown.png
new file mode 100755
index 0000000000000000000000000000000000000000..054675a253ef07e7e63c53823d842c2fbb5a2627
GIT binary patch
literal 3022
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
QM*si-07*qoM6N<$f-^P5jsO4v

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/markdown/icons/markdown.png b/plugins/ckeditor4/markdown/icons/markdown.png
new file mode 100755
index 0000000000000000000000000000000000000000..62f19d2baab4a463463665370f4b9ec27dabf7dd
GIT binary patch
literal 3026
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
U%Igzj<^TWy07*qoM6N<$f*(P}tN;K2

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/markdown/js/codemirror-gfm-min.js b/plugins/ckeditor4/markdown/js/codemirror-gfm-min.js
new file mode 100755
index 0000000..c80db41
--- /dev/null
+++ b/plugins/ckeditor4/markdown/js/codemirror-gfm-min.js
@@ -0,0 +1,25 @@
+/* CodeMirror - Minified & Bundled
+   Generated on 2014年9月22日 with http://codemirror.net/doc/compress.html
+   Version: 4.6
+
+   CodeMirror Library:
+   - codemirror.js
+   Modes:
+   - clike.js
+   - css.js
+   - gfm.js
+   - htmlmixed.js
+   - javascript.js
+   - markdown.js
+   - xml.js
+   Add-ons:
+   - overlay.js
+ */
+
+!function(a){if("object"==typeof exports&&"object"==typeof module)module.exports=a();else{if("function"==typeof define&&define.amd)return define([],a);this.CodeMirror=a()}}(function(){"use strict";function w(a,b){if(!(this instanceof w))return new w(a,b);this.options=b=b||{},Og(ie,b,!1),K(b);var c=b.value;"string"==typeof c&&(c=new Jf(c,b.mode)),this.doc=c;var f=this.display=new x(a,c);f.wrapper.CodeMirror=this,G(this),E(this),b.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),b.autofocus&&!o&&ad(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,focused:!1,suppressEdits:!1,pasteIncoming:!1,cutIncoming:!1,draggingText:!1,highlight:new Eg},d&&11>e&&setTimeout(Pg(_c,this,!0),20),dd(this),gh();var g=this;Kc(this,function(){g.curOp.forceUpdate=!0,Nf(g,c),b.autofocus&&!o||_g()==f.input?setTimeout(Pg(Hd,g),20):Id(g);for(var a in je)je.hasOwnProperty(a)&&je[a](g,b[a],le);Q(g);for(var d=0;d<pe.length;++d)pe[d](g)})}function x(a,b){var c=this,g=c.input=Wg("textarea",null,null,"position: absolute; padding: 0; width: 1px; height: 1em; outline: none");f?g.style.width="1000px":g.setAttribute("wrap","off"),n&&(g.style.border="1px solid black"),g.setAttribute("autocorrect","off"),g.setAttribute("autocapitalize","off"),g.setAttribute("spellcheck","false"),c.inputDiv=Wg("div",[g],null,"overflow: hidden; position: relative; width: 3px; height: 0px;"),c.scrollbarH=Wg("div",[Wg("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar"),c.scrollbarV=Wg("div",[Wg("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),c.scrollbarFiller=Wg("div",null,"CodeMirror-scrollbar-filler"),c.gutterFiller=Wg("div",null,"CodeMirror-gutter-filler"),c.lineDiv=Wg("div",null,"CodeMirror-code"),c.selectionDiv=Wg("div",null,null,"position: relative; z-index: 1"),c.cursorDiv=Wg("div",null,"CodeMirror-cursors"),c.measure=Wg("div",null,"CodeMirror-measure"),c.lineMeasure=Wg("div",null,"CodeMirror-measure"),c.lineSpace=Wg("div",[c.measure,c.lineMeasure,c.selectionDiv,c.cursorDiv,c.lineDiv],null,"position: relative; outline: none"),c.mover=Wg("div",[Wg("div",[c.lineSpace],"CodeMirror-lines")],null,"position: relative"),c.sizer=Wg("div",[c.mover],"CodeMirror-sizer"),c.heightForcer=Wg("div",null,null,"position: absolute; height: "+zg+"px; width: 1px;"),c.gutters=Wg("div",null,"CodeMirror-gutters"),c.lineGutter=null,c.scroller=Wg("div",[c.sizer,c.heightForcer,c.gutters],"CodeMirror-scroll"),c.scroller.setAttribute("tabIndex","-1"),c.wrapper=Wg("div",[c.inputDiv,c.scrollbarH,c.scrollbarV,c.scrollbarFiller,c.gutterFiller,c.scroller],"CodeMirror"),d&&8>e&&(c.gutters.style.zIndex=-1,c.scroller.style.paddingRight=0),n&&(g.style.width="0px"),f||(c.scroller.draggable=!0),k&&(c.inputDiv.style.height="1px",c.inputDiv.style.position="absolute"),d&&8>e&&(c.scrollbarH.style.minHeight=c.scrollbarV.style.minWidth="18px"),a.appendChild?a.appendChild(c.wrapper):a(c.wrapper),c.viewFrom=c.viewTo=b.first,c.view=[],c.externalMeasured=null,c.viewOffset=0,c.lastSizeC=0,c.updateLineNumbers=null,c.lineNumWidth=c.lineNumInnerWidth=c.lineNumChars=null,c.prevInput="",c.alignWidgets=!1,c.pollingFast=!1,c.poll=new Eg,c.cachedCharWidth=c.cachedTextHeight=c.cachedPaddingH=null,c.inaccurateSelection=!1,c.maxLine=null,c.maxLineLength=0,c.maxLineChanged=!1,c.wheelDX=c.wheelDY=c.wheelStartX=c.wheelStartY=null,c.shift=!1,c.selForContextMenu=null}function y(a){a.doc.mode=w.getMode(a.options,a.doc.modeOption),z(a)}function z(a){a.doc.iter(function(a){a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null)}),a.doc.frontier=a.doc.first,Ub(a,100),a.state.modeGen++,a.curOp&&Qc(a)}function A(a){a.options.lineWrapping?(ch(a.display.wrapper,"CodeMirror-wrap"),a.display.sizer.style.minWidth=""):(bh(a.display.wrapper,"CodeMirror-wrap"),J(a)),C(a),Qc(a),lc(a),setTimeout(function(){N(a)},100)}function B(a){var b=xc(a.display),c=a.options.lineWrapping,d=c&&Math.max(5,a.display.scroller.clientWidth/yc(a.display)-3);return function(e){if(df(a.doc,e))return 0;var f=0;if(e.widgets)for(var g=0;g<e.widgets.length;g++)e.widgets[g].height&&(f+=e.widgets[g].height);return c?f+(Math.ceil(e.text.length/d)||1)*b:f+b}}function C(a){var b=a.doc,c=B(a);b.iter(function(a){var b=c(a);b!=a.height&&Rf(a,b)})}function D(a){var b=ue[a.options.keyMap],c=b.style;a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-keymap-\S+/g,"")+(c?" cm-keymap-"+c:"")}function E(a){a.display.wrapper.className=a.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+a.options.theme.replace(/(^|\s)\s*/g," cm-s-"),lc(a)}function F(a){G(a),Qc(a),setTimeout(function(){P(a)},20)}function G(a){var b=a.display.gutters,c=a.options.gutters;Yg(b);for(var d=0;d<c.length;++d){var e=c[d],f=b.appendChild(Wg("div",null,"CodeMirror-gutter "+e));"CodeMirror-linenumbers"==e&&(a.display.lineGutter=f,f.style.width=(a.display.lineNumWidth||1)+"px")}b.style.display=d?"":"none",H(a)}function H(a){var b=a.display.gutters.offsetWidth;a.display.sizer.style.marginLeft=b+"px",a.display.scrollbarH.style.left=a.options.fixedGutter?b+"px":0}function I(a){if(0==a.height)return 0;for(var c,b=a.text.length,d=a;c=Ye(d);){var e=c.find(0,!0);d=e.from.line,b+=e.from.ch-e.to.ch}for(d=a;c=Ze(d);){var e=c.find(0,!0);b-=d.text.length-e.from.ch,d=e.to.line,b+=d.text.length-e.to.ch}return b}function J(a){var b=a.display,c=a.doc;b.maxLine=Of(c,c.first),b.maxLineLength=I(b.maxLine),b.maxLineChanged=!0,c.iter(function(a){var c=I(a);c>b.maxLineLength&&(b.maxLineLength=c,b.maxLine=a)})}function K(a){var b=Lg(a.gutters,"CodeMirror-linenumbers");-1==b&&a.lineNumbers?a.gutters=a.gutters.concat(["CodeMirror-linenumbers"]):b>-1&&!a.lineNumbers&&(a.gutters=a.gutters.slice(0),a.gutters.splice(b,1))}function L(a){return a.display.scroller.clientHeight-a.display.wrapper.clientHeight<zg-3}function M(a){var b=a.display.scroller;return{clientHeight:b.clientHeight,barHeight:a.display.scrollbarV.clientHeight,scrollWidth:b.scrollWidth,clientWidth:b.clientWidth,hScrollbarTakesSpace:L(a),barWidth:a.display.scrollbarH.clientWidth,docHeight:Math.round(a.doc.height+Zb(a.display))}}function N(a,b){b||(b=M(a));var c=a.display,d=kh(c.measure),e=b.docHeight+zg,f=b.scrollWidth>b.clientWidth;f&&b.scrollWidth<=b.clientWidth+1&&d>0&&!b.hScrollbarTakesSpace&&(f=!1);var g=e>b.clientHeight;if(g?(c.scrollbarV.style.display="block",c.scrollbarV.style.bottom=f?d+"px":"0",c.scrollbarV.firstChild.style.height=Math.max(0,e-b.clientHeight+(b.barHeight||c.scrollbarV.clientHeight))+"px"):(c.scrollbarV.style.display="",c.scrollbarV.firstChild.style.height="0"),f?(c.scrollbarH.style.display="block",c.scrollbarH.style.right=g?d+"px":"0",c.scrollbarH.firstChild.style.width=b.scrollWidth-b.clientWidth+(b.barWidth||c.scrollbarH.clientWidth)+"px"):(c.scrollbarH.style.display="",c.scrollbarH.firstChild.style.width="0"),f&&g?(c.scrollbarFiller.style.display="block",c.scrollbarFiller.style.height=c.scrollbarFiller.style.width=d+"px"):c.scrollbarFiller.style.display="",f&&a.options.coverGutterNextToScrollbar&&a.options.fixedGutter?(c.gutterFiller.style.display="block",c.gutterFiller.style.height=d+"px",c.gutterFiller.style.width=c.gutters.offsetWidth+"px"):c.gutterFiller.style.display="",!a.state.checkedOverlayScrollbar&&b.clientHeight>0){if(0===d){var h=p&&!l?"12px":"18px";c.scrollbarV.style.minWidth=c.scrollbarH.style.minHeight=h;var i=function(b){ng(b)!=c.scrollbarV&&ng(b)!=c.scrollbarH&&Lc(a,hd)(b)};pg(c.scrollbarV,"mousedown",i),pg(c.scrollbarH,"mousedown",i)}a.state.checkedOverlayScrollbar=!0}}function O(a,b,c){var d=c&&null!=c.top?Math.max(0,c.top):a.scroller.scrollTop;d=Math.floor(d-Yb(a));var e=c&&null!=c.bottom?c.bottom:d+a.wrapper.clientHeight,f=Tf(b,d),g=Tf(b,e);if(c&&c.ensure){var h=c.ensure.from.line,i=c.ensure.to.line;if(f>h)return{from:h,to:Tf(b,Uf(Of(b,h))+a.wrapper.clientHeight)};if(Math.min(i,b.lastLine())>=g)return{from:Tf(b,Uf(Of(b,i))-a.wrapper.clientHeight),to:i}}return{from:f,to:Math.max(g,f+1)}}function P(a){var b=a.display,c=b.view;if(b.alignWidgets||b.gutters.firstChild&&a.options.fixedGutter){for(var d=S(b)-b.scroller.scrollLeft+a.doc.scrollLeft,e=b.gutters.offsetWidth,f=d+"px",g=0;g<c.length;g++)if(!c[g].hidden){a.options.fixedGutter&&c[g].gutter&&(c[g].gutter.style.left=f);var h=c[g].alignable;if(h)for(var i=0;i<h.length;i++)h[i].style.left=f}a.options.fixedGutter&&(b.gutters.style.left=d+e+"px")}}function Q(a){if(!a.options.lineNumbers)return!1;var b=a.doc,c=R(a.options,b.first+b.size-1),d=a.display;if(c.length!=d.lineNumChars){var e=d.measure.appendChild(Wg("div",[Wg("div",c)],"CodeMirror-linenumber CodeMirror-gutter-elt")),f=e.firstChild.offsetWidth,g=e.offsetWidth-f;return d.lineGutter.style.width="",d.lineNumInnerWidth=Math.max(f,d.lineGutter.offsetWidth-g),d.lineNumWidth=d.lineNumInnerWidth+g,d.lineNumChars=d.lineNumInnerWidth?c.length:-1,d.lineGutter.style.width=d.lineNumWidth+"px",H(a),!0}return!1}function R(a,b){return String(a.lineNumberFormatter(b+a.firstLineNumber))}function S(a){return a.scroller.getBoundingClientRect().left-a.sizer.getBoundingClientRect().left}function T(a,b,c){var d=a.display;this.viewport=b,this.visible=O(d,a.doc,b),this.editorIsHidden=!d.wrapper.offsetWidth,this.wrapperHeight=d.wrapper.clientHeight,this.oldViewFrom=d.viewFrom,this.oldViewTo=d.viewTo,this.oldScrollerWidth=d.scroller.clientWidth,this.force=c,this.dims=_(a)}function U(a,b){var c=a.display,d=a.doc;if(b.editorIsHidden)return Sc(a),!1;if(!b.force&&b.visible.from>=c.viewFrom&&b.visible.to<=c.viewTo&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo)&&0==Wc(a))return!1;Q(a)&&(Sc(a),b.dims=_(a));var e=d.first+d.size,f=Math.max(b.visible.from-a.options.viewportMargin,d.first),g=Math.min(e,b.visible.to+a.options.viewportMargin);c.viewFrom<f&&f-c.viewFrom<20&&(f=Math.max(d.first,c.viewFrom)),c.viewTo>g&&c.viewTo-g<20&&(g=Math.min(e,c.viewTo)),v&&(f=bf(a.doc,f),g=cf(a.doc,g));var h=f!=c.viewFrom||g!=c.viewTo||c.lastSizeC!=b.wrapperHeight;Vc(a,f,g),c.viewOffset=Uf(Of(a.doc,c.viewFrom)),a.display.mover.style.top=c.viewOffset+"px";var i=Wc(a);if(!h&&0==i&&!b.force&&(null==c.updateLineNumbers||c.updateLineNumbers>=c.viewTo))return!1;var j=_g();return i>4&&(c.lineDiv.style.display="none"),ab(a,c.updateLineNumbers,b.dims),i>4&&(c.lineDiv.style.display=""),j&&_g()!=j&&j.offsetHeight&&j.focus(),Yg(c.cursorDiv),Yg(c.selectionDiv),h&&(c.lastSizeC=b.wrapperHeight,Ub(a,400)),c.updateLineNumbers=null,!0}function V(a,b){for(var c=b.force,d=b.viewport,e=!0;;e=!1){if(e&&a.options.lineWrapping&&b.oldScrollerWidth!=a.display.scroller.clientWidth)c=!0;else if(c=!1,d&&null!=d.top&&(d={top:Math.min(a.doc.height+Zb(a.display)-zg-a.display.scroller.clientHeight,d.top)}),b.visible=O(a.display,a.doc,d),b.visible.from>=a.display.viewFrom&&b.visible.to<=a.display.viewTo)break;if(!U(a,b))break;Z(a);var f=M(a);Qb(a),X(a,f),N(a,f)}tg(a,"update",a),(a.display.viewFrom!=b.oldViewFrom||a.display.viewTo!=b.oldViewTo)&&tg(a,"viewportChange",a,a.display.viewFrom,a.display.viewTo)}function W(a,b){var c=new T(a,b);if(U(a,c)){Z(a),V(a,c);var d=M(a);Qb(a),X(a,d),N(a,d)}}function X(a,b){a.display.sizer.style.minHeight=a.display.heightForcer.style.top=b.docHeight+"px",a.display.gutters.style.height=Math.max(b.docHeight,b.clientHeight-zg)+"px"}function Y(a,b){a.display.sizer.offsetWidth+a.display.gutters.offsetWidth<a.display.scroller.clientWidth-1&&(a.display.sizer.style.minHeight=a.display.heightForcer.style.top="0px",a.display.gutters.style.height=b.docHeight+"px")}function Z(a){for(var b=a.display,c=b.lineDiv.offsetTop,f=0;f<b.view.length;f++){var h,g=b.view[f];if(!g.hidden){if(d&&8>e){var i=g.node.offsetTop+g.node.offsetHeight;h=i-c,c=i}else{var j=g.node.getBoundingClientRect();h=j.bottom-j.top}var k=g.line.height-h;if(2>h&&(h=xc(b)),(k>.001||-.001>k)&&(Rf(g.line,h),$(g.line),g.rest))for(var l=0;l<g.rest.length;l++)$(g.rest[l])}}}function $(a){if(a.widgets)for(var b=0;b<a.widgets.length;++b)a.widgets[b].height=a.widgets[b].node.offsetHeight}function _(a){for(var b=a.display,c={},d={},e=b.gutters.firstChild,f=0;e;e=e.nextSibling,++f)c[a.options.gutters[f]]=e.offsetLeft,d[a.options.gutters[f]]=e.offsetWidth;return{fixedPos:S(b),gutterTotalWidth:b.gutters.offsetWidth,gutterLeft:c,gutterWidth:d,wrapperWidth:b.wrapper.clientWidth}}function ab(a,b,c){function i(b){var c=b.nextSibling;return f&&p&&a.display.currentWheelTarget==b?b.style.display="none":b.parentNode.removeChild(b),c}for(var d=a.display,e=a.options.lineNumbers,g=d.lineDiv,h=g.firstChild,j=d.view,k=d.viewFrom,l=0;l<j.length;l++){var m=j[l];if(m.hidden);else if(m.node){for(;h!=m.node;)h=i(h);var o=e&&null!=b&&k>=b&&m.lineNumber;m.changes&&(Lg(m.changes,"gutter")>-1&&(o=!1),bb(a,m,k,c)),o&&(Yg(m.lineNumber),m.lineNumber.appendChild(document.createTextNode(R(a.options,k)))),h=m.node.nextSibling}else{var n=jb(a,m,k,c);g.insertBefore(n,h)}k+=m.size}for(;h;)h=i(h)}function bb(a,b,c,d){for(var e=0;e<b.changes.length;e++){var f=b.changes[e];"text"==f?fb(a,b):"gutter"==f?hb(a,b,c,d):"class"==f?gb(b):"widget"==f&&ib(b,d)}b.changes=null}function cb(a){return a.node==a.text&&(a.node=Wg("div",null,null,"position: relative"),a.text.parentNode&&a.text.parentNode.replaceChild(a.node,a.text),a.node.appendChild(a.text),d&&8>e&&(a.node.style.zIndex=2)),a.node}function db(a){var b=a.bgClass?a.bgClass+" "+(a.line.bgClass||""):a.line.bgClass;if(b&&(b+=" CodeMirror-linebackground"),a.background)b?a.background.className=b:(a.background.parentNode.removeChild(a.background),a.background=null);else if(b){var c=cb(a);a.background=c.insertBefore(Wg("div",null,b),c.firstChild)}}function eb(a,b){var c=a.display.externalMeasured;return c&&c.line==b.line?(a.display.externalMeasured=null,b.measure=c.measure,c.built):xf(a,b)}function fb(a,b){var c=b.text.className,d=eb(a,b);b.text==b.node&&(b.node=d.pre),b.text.parentNode.replaceChild(d.pre,b.text),b.text=d.pre,d.bgClass!=b.bgClass||d.textClass!=b.textClass?(b.bgClass=d.bgClass,b.textClass=d.textClass,gb(b)):c&&(b.text.className=c)}function gb(a){db(a),a.line.wrapClass?cb(a).className=a.line.wrapClass:a.node!=a.text&&(a.node.className="");var b=a.textClass?a.textClass+" "+(a.line.textClass||""):a.line.textClass;a.text.className=b||""}function hb(a,b,c,d){b.gutter&&(b.node.removeChild(b.gutter),b.gutter=null);var e=b.line.gutterMarkers;if(a.options.lineNumbers||e){var f=cb(b),g=b.gutter=f.insertBefore(Wg("div",null,"CodeMirror-gutter-wrapper","position: absolute; left: "+(a.options.fixedGutter?d.fixedPos:-d.gutterTotalWidth)+"px"),b.text);if(!a.options.lineNumbers||e&&e["CodeMirror-linenumbers"]||(b.lineNumber=g.appendChild(Wg("div",R(a.options,c),"CodeMirror-linenumber CodeMirror-gutter-elt","left: "+d.gutterLeft["CodeMirror-linenumbers"]+"px; width: "+a.display.lineNumInnerWidth+"px"))),e)for(var h=0;h<a.options.gutters.length;++h){var i=a.options.gutters[h],j=e.hasOwnProperty(i)&&e[i];j&&g.appendChild(Wg("div",[j],"CodeMirror-gutter-elt","left: "+d.gutterLeft[i]+"px; width: "+d.gutterWidth[i]+"px"))}}}function ib(a,b){a.alignable&&(a.alignable=null);for(var d,c=a.node.firstChild;c;c=d){var d=c.nextSibling;"CodeMirror-linewidget"==c.className&&a.node.removeChild(c)}kb(a,b)}function jb(a,b,c,d){var e=eb(a,b);return b.text=b.node=e.pre,e.bgClass&&(b.bgClass=e.bgClass),e.textClass&&(b.textClass=e.textClass),gb(b),hb(a,b,c,d),kb(b,d),b.node}function kb(a,b){if(lb(a.line,a,b,!0),a.rest)for(var c=0;c<a.rest.length;c++)lb(a.rest[c],a,b,!1)}function lb(a,b,c,d){if(a.widgets)for(var e=cb(b),f=0,g=a.widgets;f<g.length;++f){var h=g[f],i=Wg("div",[h.node],"CodeMirror-linewidget");h.handleMouseEvents||(i.ignoreEvents=!0),mb(h,i,b,c),d&&h.above?e.insertBefore(i,b.gutter||b.text):e.appendChild(i),tg(h,"redraw")}}function mb(a,b,c,d){if(a.noHScroll){(c.alignable||(c.alignable=[])).push(b);var e=d.wrapperWidth;b.style.left=d.fixedPos+"px",a.coverGutter||(e-=d.gutterTotalWidth,b.style.paddingLeft=d.gutterTotalWidth+"px"),b.style.width=e+"px"}a.coverGutter&&(b.style.zIndex=5,b.style.position="relative",a.noHScroll||(b.style.marginLeft=-d.gutterTotalWidth+"px"))}function pb(a){return nb(a.line,a.ch)}function qb(a,b){return ob(a,b)<0?b:a}function rb(a,b){return ob(a,b)<0?a:b}function sb(a,b){this.ranges=a,this.primIndex=b}function tb(a,b){this.anchor=a,this.head=b}function ub(a,b){var c=a[b];a.sort(function(a,b){return ob(a.from(),b.from())}),b=Lg(a,c);for(var d=1;d<a.length;d++){var e=a[d],f=a[d-1];if(ob(f.to(),e.from())>=0){var g=rb(f.from(),e.from()),h=qb(f.to(),e.to()),i=f.empty()?e.from()==e.head:f.from()==f.head;b>=d&&--b,a.splice(--d,2,new tb(i?h:g,i?g:h))}}return new sb(a,b)}function vb(a,b){return new sb([new tb(a,b||a)],0)}function wb(a,b){return Math.max(a.first,Math.min(b,a.first+a.size-1))}function xb(a,b){if(b.line<a.first)return nb(a.first,0);var c=a.first+a.size-1;return b.line>c?nb(c,Of(a,c).text.length):yb(b,Of(a,b.line).text.length)}function yb(a,b){var c=a.ch;return null==c||c>b?nb(a.line,b):0>c?nb(a.line,0):a}function zb(a,b){return b>=a.first&&b<a.first+a.size}function Ab(a,b){for(var c=[],d=0;d<b.length;d++)c[d]=xb(a,b[d]);return c}function Bb(a,b,c,d){if(a.cm&&a.cm.display.shift||a.extend){var e=b.anchor;if(d){var f=ob(c,e)<0;f!=ob(d,e)<0?(e=c,c=d):f!=ob(c,d)<0&&(c=d)}return new tb(e,c)}return new tb(d||c,c)}function Cb(a,b,c,d){Ib(a,new sb([Bb(a,a.sel.primary(),b,c)],0),d)}function Db(a,b,c){for(var d=[],e=0;e<a.sel.ranges.length;e++)d[e]=Bb(a,a.sel.ranges[e],b[e],null);var f=ub(d,a.sel.primIndex);Ib(a,f,c)}function Eb(a,b,c,d){var e=a.sel.ranges.slice(0);e[b]=c,Ib(a,ub(e,a.sel.primIndex),d)}function Fb(a,b,c,d){Ib(a,vb(b,c),d)}function Gb(a,b){var c={ranges:b.ranges,update:function(b){this.ranges=[];for(var c=0;c<b.length;c++)this.ranges[c]=new tb(xb(a,b[c].anchor),xb(a,b[c].head))}};return rg(a,"beforeSelectionChange",a,c),a.cm&&rg(a.cm,"beforeSelectionChange",a.cm,c),c.ranges!=b.ranges?ub(c.ranges,c.ranges.length-1):b}function Hb(a,b,c){var d=a.history.done,e=Jg(d);e&&e.ranges?(d[d.length-1]=b,Jb(a,b,c)):Ib(a,b,c)}function Ib(a,b,c){Jb(a,b,c),ag(a,a.sel,a.cm?a.cm.curOp.id:0/0,c)}function Jb(a,b,c){(xg(a,"beforeSelectionChange")||a.cm&&xg(a.cm,"beforeSelectionChange"))&&(b=Gb(a,b));var d=c&&c.bias||(ob(b.primary().head,a.sel.primary().head)<0?-1:1);Kb(a,Mb(a,b,d,!0)),c&&c.scroll===!1||!a.cm||be(a.cm)}function Kb(a,b){b.equals(a.sel)||(a.sel=b,a.cm&&(a.cm.curOp.updateInput=a.cm.curOp.selectionChanged=!0,wg(a.cm)),tg(a,"cursorActivity",a))}function Lb(a){Kb(a,Mb(a,a.sel,null,!1),Bg)}function Mb(a,b,c,d){for(var e,f=0;f<b.ranges.length;f++){var g=b.ranges[f],h=Nb(a,g.anchor,c,d),i=Nb(a,g.head,c,d);(e||h!=g.anchor||i!=g.head)&&(e||(e=b.ranges.slice(0,f)),e[f]=new tb(h,i))}return e?ub(e,b.primIndex):b}function Nb(a,b,c,d){var e=!1,f=b,g=c||1;a.cantEdit=!1;a:for(;;){var h=Of(a,f.line);if(h.markedSpans)for(var i=0;i<h.markedSpans.length;++i){var j=h.markedSpans[i],k=j.marker;if((null==j.from||(k.inclusiveLeft?j.from<=f.ch:j.from<f.ch))&&(null==j.to||(k.inclusiveRight?j.to>=f.ch:j.to>f.ch))){if(d&&(rg(k,"beforeCursorEnter"),k.explicitlyCleared)){if(h.markedSpans){--i;continue}break}if(!k.atomic)continue;var l=k.find(0>g?-1:1);if(0==ob(l,f)&&(l.ch+=g,l.ch<0?l=l.line>a.first?xb(a,nb(l.line-1)):null:l.ch>h.text.length&&(l=l.line<a.first+a.size-1?nb(l.line+1,0):null),!l)){if(e)return d?(a.cantEdit=!0,nb(a.first,0)):Nb(a,b,c,!0);e=!0,l=b,g=-g}f=l;continue a}}return f}}function Ob(a){for(var b=a.display,c=a.doc,d={},e=d.cursors=document.createDocumentFragment(),f=d.selection=document.createDocumentFragment(),g=0;g<c.sel.ranges.length;g++){var h=c.sel.ranges[g],i=h.empty();(i||a.options.showCursorWhenSelecting)&&Rb(a,h,e),i||Sb(a,h,f)}if(a.options.moveInputWithCursor){var j=rc(a,c.sel.primary().head,"div"),k=b.wrapper.getBoundingClientRect(),l=b.lineDiv.getBoundingClientRect();d.teTop=Math.max(0,Math.min(b.wrapper.clientHeight-10,j.top+l.top-k.top)),d.teLeft=Math.max(0,Math.min(b.wrapper.clientWidth-10,j.left+l.left-k.left))}return d}function Pb(a,b){Zg(a.display.cursorDiv,b.cursors),Zg(a.display.selectionDiv,b.selection),null!=b.teTop&&(a.display.inputDiv.style.top=b.teTop+"px",a.display.inputDiv.style.left=b.teLeft+"px")}function Qb(a){Pb(a,Ob(a))}function Rb(a,b,c){var d=rc(a,b.head,"div",null,null,!a.options.singleCursorHeightPerLine),e=c.appendChild(Wg("div","\xa0","CodeMirror-cursor"));if(e.style.left=d.left+"px",e.style.top=d.top+"px",e.style.height=Math.max(0,d.bottom-d.top)*a.options.cursorHeight+"px",d.other){var f=c.appendChild(Wg("div","\xa0","CodeMirror-cursor CodeMirror-secondarycursor"));f.style.display="",f.style.left=d.other.left+"px",f.style.top=d.other.top+"px",f.style.height=.85*(d.other.bottom-d.other.top)+"px"}}function Sb(a,b,c){function j(a,b,c,d){0>b&&(b=0),b=Math.round(b),d=Math.round(d),f.appendChild(Wg("div",null,"CodeMirror-selected","position: absolute; left: "+a+"px; top: "+b+"px; width: "+(null==c?i-a:c)+"px; height: "+(d-b)+"px"))}function k(b,c,d){function m(c,d){return qc(a,nb(b,c),"div",f,d)}var k,l,f=Of(e,b),g=f.text.length;return vh(Vf(f),c||0,null==d?g:d,function(a,b,e){var n,o,p,f=m(a,"left");if(a==b)n=f,o=p=f.left;else{if(n=m(b-1,"right"),"rtl"==e){var q=f;f=n,n=q}o=f.left,p=n.right}null==c&&0==a&&(o=h),n.top-f.top>3&&(j(o,f.top,null,f.bottom),o=h,f.bottom<n.top&&j(o,f.bottom,null,n.top)),null==d&&b==g&&(p=i),(!k||f.top<k.top||f.top==k.top&&f.left<k.left)&&(k=f),(!l||n.bottom>l.bottom||n.bottom==l.bottom&&n.right>l.right)&&(l=n),h+1>o&&(o=h),j(o,n.top,p-o,n.bottom)}),{start:k,end:l}}var d=a.display,e=a.doc,f=document.createDocumentFragment(),g=$b(a.display),h=g.left,i=d.lineSpace.offsetWidth-g.right,l=b.from(),m=b.to();if(l.line==m.line)k(l.line,l.ch,m.ch);else{var n=Of(e,l.line),o=Of(e,m.line),p=_e(n)==_e(o),q=k(l.line,l.ch,p?n.text.length+1:null).end,r=k(m.line,p?0:null,m.ch).start;p&&(q.top<r.top-2?(j(q.right,q.top,null,q.bottom),j(h,r.top,r.left,r.bottom)):j(q.right,q.top,r.left-q.right,q.bottom)),q.bottom<r.top&&j(h,q.bottom,null,r.top)}c.appendChild(f)}function Tb(a){if(a.state.focused){var b=a.display;clearInterval(b.blinker);var c=!0;b.cursorDiv.style.visibility="",a.options.cursorBlinkRate>0?b.blinker=setInterval(function(){b.cursorDiv.style.visibility=(c=!c)?"":"hidden"},a.options.cursorBlinkRate):a.options.cursorBlinkRate<0&&(b.cursorDiv.style.visibility="hidden")}}function Ub(a,b){a.doc.mode.startState&&a.doc.frontier<a.display.viewTo&&a.state.highlight.set(b,Pg(Vb,a))}function Vb(a){var b=a.doc;if(b.frontier<b.first&&(b.frontier=b.first),!(b.frontier>=a.display.viewTo)){var c=+new Date+a.options.workTime,d=re(b.mode,Xb(a,b.frontier)),e=[];b.iter(b.frontier,Math.min(b.first+b.size,a.display.viewTo+500),function(f){if(b.frontier>=a.display.viewFrom){var g=f.styles,h=rf(a,f,d,!0);f.styles=h.styles;var i=f.styleClasses,j=h.classes;j?f.styleClasses=j:i&&(f.styleClasses=null);for(var k=!g||g.length!=f.styles.length||i!=j&&(!i||!j||i.bgClass!=j.bgClass||i.textClass!=j.textClass),l=0;!k&&l<g.length;++l)k=g[l]!=f.styles[l];k&&e.push(b.frontier),f.stateAfter=re(b.mode,d)}else tf(a,f.text,d),f.stateAfter=0==b.frontier%5?re(b.mode,d):null;return++b.frontier,+new Date>c?(Ub(a,a.options.workDelay),!0):void 0}),e.length&&Kc(a,function(){for(var b=0;b<e.length;b++)Rc(a,e[b],"text")})}}function Wb(a,b,c){for(var d,e,f=a.doc,g=c?-1:b-(a.doc.mode.innerMode?1e3:100),h=b;h>g;--h){if(h<=f.first)return f.first;var i=Of(f,h-1);if(i.stateAfter&&(!c||h<=f.frontier))return h;var j=Fg(i.text,null,a.options.tabSize);(null==e||d>j)&&(e=h-1,d=j)}return e}function Xb(a,b,c){var d=a.doc,e=a.display;if(!d.mode.startState)return!0;var f=Wb(a,b,c),g=f>d.first&&Of(d,f-1).stateAfter;return g=g?re(d.mode,g):se(d.mode),d.iter(f,b,function(c){tf(a,c.text,g);var h=f==b-1||0==f%5||f>=e.viewFrom&&f<e.viewTo;c.stateAfter=h?re(d.mode,g):null,++f}),c&&(d.frontier=f),g}function Yb(a){return a.lineSpace.offsetTop}function Zb(a){return a.mover.offsetHeight-a.lineSpace.offsetHeight}function $b(a){if(a.cachedPaddingH)return a.cachedPaddingH;var b=Zg(a.measure,Wg("pre","x")),c=window.getComputedStyle?window.getComputedStyle(b):b.currentStyle,d={left:parseInt(c.paddingLeft),right:parseInt(c.paddingRight)};return isNaN(d.left)||isNaN(d.right)||(a.cachedPaddingH=d),d}function _b(a,b,c){var d=a.options.lineWrapping,e=d&&a.display.scroller.clientWidth;if(!b.measure.heights||d&&b.measure.width!=e){var f=b.measure.heights=[];if(d){b.measure.width=e;for(var g=b.text.firstChild.getClientRects(),h=0;h<g.length-1;h++){var i=g[h],j=g[h+1];Math.abs(i.bottom-j.bottom)>2&&f.push((i.bottom+j.top)/2-c.top)}}f.push(c.bottom-c.top)}}function ac(a,b,c){if(a.line==b)return{map:a.measure.map,cache:a.measure.cache};for(var d=0;d<a.rest.length;d++)if(a.rest[d]==b)return{map:a.measure.maps[d],cache:a.measure.caches[d]};for(var d=0;d<a.rest.length;d++)if(Sf(a.rest[d])>c)return{map:a.measure.maps[d],cache:a.measure.caches[d],before:!0}}function bc(a,b){b=_e(b);var c=Sf(b),d=a.display.externalMeasured=new Oc(a.doc,b,c);d.lineN=c;var e=d.built=xf(a,d);return d.text=e.pre,Zg(a.display.lineMeasure,e.pre),d}function cc(a,b,c,d){return fc(a,ec(a,b),c,d)}function dc(a,b){if(b>=a.display.viewFrom&&b<a.display.viewTo)return a.display.view[Tc(a,b)];var c=a.display.externalMeasured;return c&&b>=c.lineN&&b<c.lineN+c.size?c:void 0}function ec(a,b){var c=Sf(b),d=dc(a,c);d&&!d.text?d=null:d&&d.changes&&bb(a,d,c,_(a)),d||(d=bc(a,b));var e=ac(d,b,c);return{line:b,view:d,rect:null,map:e.map,cache:e.cache,before:e.before,hasHeights:!1}}function fc(a,b,c,d,e){b.before&&(c=-1);var g,f=c+(d||"");return b.cache.hasOwnProperty(f)?g=b.cache[f]:(b.rect||(b.rect=b.view.text.getBoundingClientRect()),b.hasHeights||(_b(a,b.view,b.rect),b.hasHeights=!0),g=hc(a,b,c,d),g.bogus||(b.cache[f]=g)),{left:g.left,right:g.right,top:e?g.rtop:g.top,bottom:e?g.rbottom:g.bottom}}function hc(a,b,c,f){for(var h,i,j,k,g=b.map,l=0;l<g.length;l+=3){var m=g[l],n=g[l+1];if(m>c?(i=0,j=1,k="left"):n>c?(i=c-m,j=i+1):(l==g.length-3||c==n&&g[l+3]>c)&&(j=n-m,i=j-1,c>=n&&(k="right")),null!=i){if(h=g[l+2],m==n&&f==(h.insertLeft?"left":"right")&&(k=f),"left"==f&&0==i)for(;l&&g[l-2]==g[l-3]&&g[l-1].insertLeft;)h=g[(l-=3)+2],k="left";if("right"==f&&i==n-m)for(;l<g.length-3&&g[l+3]==g[l+4]&&!g[l+5].insertLeft;)h=g[(l+=3)+2],k="right";break}}var o;if(3==h.nodeType){for(var l=0;4>l;l++){for(;i&&Vg(b.line.text.charAt(m+i));)--i;for(;n>m+j&&Vg(b.line.text.charAt(m+j));)++j;if(d&&9>e&&0==i&&j==n-m)o=h.parentNode.getBoundingClientRect();else if(d&&a.options.lineWrapping){var p=Xg(h,i,j).getClientRects();o=p.length?p["right"==f?p.length-1:0]:gc}else o=Xg(h,i,j).getBoundingClientRect()||gc;if(o.left||o.right||0==i)break;j=i,i-=1,k="right"}d&&11>e&&(o=ic(a.display.measure,o))}else{i>0&&(k=f="right");var p;o=a.options.lineWrapping&&(p=h.getClientRects()).length>1?p["right"==f?p.length-1:0]:h.getBoundingClientRect()}if(d&&9>e&&!i&&(!o||!o.left&&!o.right)){var q=h.parentNode.getClientRects()[0];o=q?{left:q.left,right:q.left+yc(a.display),top:q.top,bottom:q.bottom}:gc}for(var r=o.top-b.rect.top,s=o.bottom-b.rect.top,t=(r+s)/2,u=b.view.measure.heights,l=0;l<u.length-1&&!(t<u[l]);l++);var v=l?u[l-1]:0,w=u[l],x={left:("right"==k?o.right:o.left)-b.rect.left,right:("left"==k?o.left:o.right)-b.rect.left,top:v,bottom:w};return o.left||o.right||(x.bogus=!0),a.options.singleCursorHeightPerLine||(x.rtop=r,x.rbottom=s),x}function ic(a,b){if(!window.screen||null==screen.logicalXDPI||screen.logicalXDPI==screen.deviceXDPI||!th(a))return b;var c=screen.logicalXDPI/screen.deviceXDPI,d=screen.logicalYDPI/screen.deviceYDPI;return{left:b.left*c,right:b.right*c,top:b.top*d,bottom:b.bottom*d}}function jc(a){if(a.measure&&(a.measure.cache={},a.measure.heights=null,a.rest))for(var b=0;b<a.rest.length;b++)a.measure.caches[b]={}}function kc(a){a.display.externalMeasure=null,Yg(a.display.lineMeasure);for(var b=0;b<a.display.view.length;b++)jc(a.display.view[b])}function lc(a){kc(a),a.display.cachedCharWidth=a.display.cachedTextHeight=a.display.cachedPaddingH=null,a.options.lineWrapping||(a.display.maxLineChanged=!0),a.display.lineNumChars=null}function mc(){return window.pageXOffset||(document.documentElement||document.body).scrollLeft}function nc(){return window.pageYOffset||(document.documentElement||document.body).scrollTop}function oc(a,b,c,d){if(b.widgets)for(var e=0;e<b.widgets.length;++e)if(b.widgets[e].above){var f=hf(b.widgets[e]);c.top+=f,c.bottom+=f}if("line"==d)return c;d||(d="local");var g=Uf(b);if("local"==d?g+=Yb(a.display):g-=a.display.viewOffset,"page"==d||"window"==d){var h=a.display.lineSpace.getBoundingClientRect();g+=h.top+("window"==d?0:nc());var i=h.left+("window"==d?0:mc());c.left+=i,c.right+=i}return c.top+=g,c.bottom+=g,c}function pc(a,b,c){if("div"==c)return b;var d=b.left,e=b.top;if("page"==c)d-=mc(),e-=nc();else if("local"==c||!c){var f=a.display.sizer.getBoundingClientRect();d+=f.left,e+=f.top}var g=a.display.lineSpace.getBoundingClientRect();return{left:d-g.left,top:e-g.top}}function qc(a,b,c,d,e){return d||(d=Of(a.doc,b.line)),oc(a,d,cc(a,d,b.ch,e),c)}function rc(a,b,c,d,e,f){function g(b,g){var h=fc(a,e,b,g?"right":"left",f);return g?h.left=h.right:h.right=h.left,oc(a,d,h,c)}function h(a,b){var c=i[b],d=c.level%2;return a==wh(c)&&b&&c.level<i[b-1].level?(c=i[--b],a=xh(c)-(c.level%2?0:1),d=!0):a==xh(c)&&b<i.length-1&&c.level<i[b+1].level&&(c=i[++b],a=wh(c)-c.level%2,d=!1),d&&a==c.to&&a>c.from?g(a-1):g(a,d)}d=d||Of(a.doc,b.line),e||(e=ec(a,d));var i=Vf(d),j=b.ch;if(!i)return g(j);var k=Fh(i,j),l=h(j,k);return null!=Eh&&(l.other=h(j,Eh)),l}function sc(a,b){var c=0,b=xb(a.doc,b);a.options.lineWrapping||(c=yc(a.display)*b.ch);var d=Of(a.doc,b.line),e=Uf(d)+Yb(a.display);return{left:c,right:c,top:e,bottom:e+d.height}}function tc(a,b,c,d){var e=nb(a,b);return e.xRel=d,c&&(e.outside=!0),e}function uc(a,b,c){var d=a.doc;if(c+=a.display.viewOffset,0>c)return tc(d.first,0,!0,-1);var e=Tf(d,c),f=d.first+d.size-1;if(e>f)return tc(d.first+d.size-1,Of(d,f).text.length,!0,1);0>b&&(b=0);for(var g=Of(d,e);;){var h=vc(a,g,e,b,c),i=Ze(g),j=i&&i.find(0,!0);if(!i||!(h.ch>j.from.ch||h.ch==j.from.ch&&h.xRel>0))return h;e=Sf(g=j.to.line)}}function vc(a,b,c,d,e){function j(d){var e=rc(a,nb(c,d),"line",b,i);return g=!0,f>e.bottom?e.left-h:f<e.top?e.left+h:(g=!1,e.left)}var f=e-Uf(b),g=!1,h=2*a.display.wrapper.clientWidth,i=ec(a,b),k=Vf(b),l=b.text.length,m=yh(b),n=zh(b),o=j(m),p=g,q=j(n),r=g;if(d>q)return tc(c,n,r,1);for(;;){if(k?n==m||n==Hh(b,m,1):1>=n-m){for(var s=o>d||q-d>=d-o?m:n,t=d-(s==m?o:q);Vg(b.text.charAt(s));)++s;var u=tc(c,s,s==m?p:r,-1>t?-1:t>1?1:0);return u}var v=Math.ceil(l/2),w=m+v;if(k){w=m;for(var x=0;v>x;++x)w=Hh(b,w,1)}var y=j(w);y>d?(n=w,q=y,(r=g)&&(q+=1e3),l=v):(m=w,o=y,p=g,l-=v)}}function xc(a){if(null!=a.cachedTextHeight)return a.cachedTextHeight;if(null==wc){wc=Wg("pre");for(var b=0;49>b;++b)wc.appendChild(document.createTextNode("x")),wc.appendChild(Wg("br"));wc.appendChild(document.createTextNode("x"))}Zg(a.measure,wc);var c=wc.offsetHeight/50;return c>3&&(a.cachedTextHeight=c),Yg(a.measure),c||1}function yc(a){if(null!=a.cachedCharWidth)return a.cachedCharWidth;var b=Wg("span","xxxxxxxxxx"),c=Wg("pre",[b]);Zg(a.measure,c);var d=b.getBoundingClientRect(),e=(d.right-d.left)/10;return e>2&&(a.cachedCharWidth=e),e||10}function Bc(a){a.curOp={cm:a,viewChanged:!1,startHeight:a.doc.height,forceUpdate:!1,updateInput:null,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,id:++Ac},zc?zc.ops.push(a.curOp):a.curOp.ownsGroup=zc={ops:[a.curOp],delayedCallbacks:[]}}function Cc(a){var b=a.delayedCallbacks,c=0;do{for(;c<b.length;c++)b[c]();for(var d=0;d<a.ops.length;d++){var e=a.ops[d];if(e.cursorActivityHandlers)for(;e.cursorActivityCalled<e.cursorActivityHandlers.length;)e.cursorActivityHandlers[e.cursorActivityCalled++](e.cm)}}while(c<b.length)}function Dc(a){var b=a.curOp,c=b.ownsGroup;if(c)try{Cc(c)}finally{zc=null;for(var d=0;d<c.ops.length;d++)c.ops[d].cm.curOp=null;Ec(c)}}function Ec(a){for(var b=a.ops,c=0;c<b.length;c++)Fc(b[c]);for(var c=0;c<b.length;c++)Gc(b[c]);for(var c=0;c<b.length;c++)Hc(b[c]);for(var c=0;c<b.length;c++)Ic(b[c]);for(var c=0;c<b.length;c++)Jc(b[c])}function Fc(a){var b=a.cm,c=b.display;
+a.updateMaxLine&&J(b),a.mustUpdate=a.viewChanged||a.forceUpdate||null!=a.scrollTop||a.scrollToPos&&(a.scrollToPos.from.line<c.viewFrom||a.scrollToPos.to.line>=c.viewTo)||c.maxLineChanged&&b.options.lineWrapping,a.update=a.mustUpdate&&new T(b,a.mustUpdate&&{top:a.scrollTop,ensure:a.scrollToPos},a.forceUpdate)}function Gc(a){a.updatedDisplay=a.mustUpdate&&U(a.cm,a.update)}function Hc(a){var b=a.cm,c=b.display;a.updatedDisplay&&Z(b),a.barMeasure=M(b),c.maxLineChanged&&!b.options.lineWrapping&&(a.adjustWidthTo=cc(b,c.maxLine,c.maxLine.text.length).left+3,a.maxScrollLeft=Math.max(0,c.sizer.offsetLeft+a.adjustWidthTo+zg-c.scroller.clientWidth)),(a.updatedDisplay||a.selectionChanged)&&(a.newSelectionNodes=Ob(b))}function Ic(a){var b=a.cm;null!=a.adjustWidthTo&&(b.display.sizer.style.minWidth=a.adjustWidthTo+"px",a.maxScrollLeft<b.doc.scrollLeft&&td(b,Math.min(b.display.scroller.scrollLeft,a.maxScrollLeft),!0),b.display.maxLineChanged=!1),a.newSelectionNodes&&Pb(b,a.newSelectionNodes),a.updatedDisplay&&X(b,a.barMeasure),(a.updatedDisplay||a.startHeight!=b.doc.height)&&N(b,a.barMeasure),a.selectionChanged&&Tb(b),b.state.focused&&a.updateInput&&_c(b,a.typing)}function Jc(a){var b=a.cm,c=b.display,d=b.doc;if(null!=a.adjustWidthTo&&Math.abs(a.barMeasure.scrollWidth-b.display.scroller.scrollWidth)>1&&N(b),a.updatedDisplay&&V(b,a.update),null==c.wheelStartX||null==a.scrollTop&&null==a.scrollLeft&&!a.scrollToPos||(c.wheelStartX=c.wheelStartY=null),null!=a.scrollTop&&(c.scroller.scrollTop!=a.scrollTop||a.forceScroll)){var e=Math.max(0,Math.min(c.scroller.scrollHeight-c.scroller.clientHeight,a.scrollTop));c.scroller.scrollTop=c.scrollbarV.scrollTop=d.scrollTop=e}if(null!=a.scrollLeft&&(c.scroller.scrollLeft!=a.scrollLeft||a.forceScroll)){var g=Math.max(0,Math.min(c.scroller.scrollWidth-c.scroller.clientWidth,a.scrollLeft));c.scroller.scrollLeft=c.scrollbarH.scrollLeft=d.scrollLeft=g,P(b)}if(a.scrollToPos){var h=Zd(b,xb(d,a.scrollToPos.from),xb(d,a.scrollToPos.to),a.scrollToPos.margin);a.scrollToPos.isCursor&&b.state.focused&&Yd(b,h)}var i=a.maybeHiddenMarkers,j=a.maybeUnhiddenMarkers;if(i)for(var k=0;k<i.length;++k)i[k].lines.length||rg(i[k],"hide");if(j)for(var k=0;k<j.length;++k)j[k].lines.length&&rg(j[k],"unhide");c.wrapper.offsetHeight&&(d.scrollTop=b.display.scroller.scrollTop),a.updatedDisplay&&f&&(b.options.lineWrapping&&Y(b,a.barMeasure),a.barMeasure.scrollWidth>a.barMeasure.clientWidth&&a.barMeasure.scrollWidth<a.barMeasure.clientWidth+1&&!L(b)&&N(b)),a.changeObjs&&rg(b,"changes",b,a.changeObjs)}function Kc(a,b){if(a.curOp)return b();Bc(a);try{return b()}finally{Dc(a)}}function Lc(a,b){return function(){if(a.curOp)return b.apply(a,arguments);Bc(a);try{return b.apply(a,arguments)}finally{Dc(a)}}}function Mc(a){return function(){if(this.curOp)return a.apply(this,arguments);Bc(this);try{return a.apply(this,arguments)}finally{Dc(this)}}}function Nc(a){return function(){var b=this.cm;if(!b||b.curOp)return a.apply(this,arguments);Bc(b);try{return a.apply(this,arguments)}finally{Dc(b)}}}function Oc(a,b,c){this.line=b,this.rest=af(b),this.size=this.rest?Sf(Jg(this.rest))-c+1:1,this.node=this.text=null,this.hidden=df(a,b)}function Pc(a,b,c){for(var e,d=[],f=b;c>f;f=e){var g=new Oc(a.doc,Of(a.doc,f),f);e=f+g.size,d.push(g)}return d}function Qc(a,b,c,d){null==b&&(b=a.doc.first),null==c&&(c=a.doc.first+a.doc.size),d||(d=0);var e=a.display;if(d&&c<e.viewTo&&(null==e.updateLineNumbers||e.updateLineNumbers>b)&&(e.updateLineNumbers=b),a.curOp.viewChanged=!0,b>=e.viewTo)v&&bf(a.doc,b)<e.viewTo&&Sc(a);else if(c<=e.viewFrom)v&&cf(a.doc,c+d)>e.viewFrom?Sc(a):(e.viewFrom+=d,e.viewTo+=d);else if(b<=e.viewFrom&&c>=e.viewTo)Sc(a);else if(b<=e.viewFrom){var f=Uc(a,c,c+d,1);f?(e.view=e.view.slice(f.index),e.viewFrom=f.lineN,e.viewTo+=d):Sc(a)}else if(c>=e.viewTo){var f=Uc(a,b,b,-1);f?(e.view=e.view.slice(0,f.index),e.viewTo=f.lineN):Sc(a)}else{var g=Uc(a,b,b,-1),h=Uc(a,c,c+d,1);g&&h?(e.view=e.view.slice(0,g.index).concat(Pc(a,g.lineN,h.lineN)).concat(e.view.slice(h.index)),e.viewTo+=d):Sc(a)}var i=e.externalMeasured;i&&(c<i.lineN?i.lineN+=d:b<i.lineN+i.size&&(e.externalMeasured=null))}function Rc(a,b,c){a.curOp.viewChanged=!0;var d=a.display,e=a.display.externalMeasured;if(e&&b>=e.lineN&&b<e.lineN+e.size&&(d.externalMeasured=null),!(b<d.viewFrom||b>=d.viewTo)){var f=d.view[Tc(a,b)];if(null!=f.node){var g=f.changes||(f.changes=[]);-1==Lg(g,c)&&g.push(c)}}}function Sc(a){a.display.viewFrom=a.display.viewTo=a.doc.first,a.display.view=[],a.display.viewOffset=0}function Tc(a,b){if(b>=a.display.viewTo)return null;if(b-=a.display.viewFrom,0>b)return null;for(var c=a.display.view,d=0;d<c.length;d++)if(b-=c[d].size,0>b)return d}function Uc(a,b,c,d){var f,e=Tc(a,b),g=a.display.view;if(!v||c==a.doc.first+a.doc.size)return{index:e,lineN:c};for(var h=0,i=a.display.viewFrom;e>h;h++)i+=g[h].size;if(i!=b){if(d>0){if(e==g.length-1)return null;f=i+g[e].size-b,e++}else f=i-b;b+=f,c+=f}for(;bf(a.doc,c)!=c;){if(e==(0>d?0:g.length-1))return null;c+=d*g[e-(0>d?1:0)].size,e+=d}return{index:e,lineN:c}}function Vc(a,b,c){var d=a.display,e=d.view;0==e.length||b>=d.viewTo||c<=d.viewFrom?(d.view=Pc(a,b,c),d.viewFrom=b):(d.viewFrom>b?d.view=Pc(a,b,d.viewFrom).concat(d.view):d.viewFrom<b&&(d.view=d.view.slice(Tc(a,b))),d.viewFrom=b,d.viewTo<c?d.view=d.view.concat(Pc(a,d.viewTo,c)):d.viewTo>c&&(d.view=d.view.slice(0,Tc(a,c)))),d.viewTo=c}function Wc(a){for(var b=a.display.view,c=0,d=0;d<b.length;d++){var e=b[d];e.hidden||e.node&&!e.changes||++c}return c}function Xc(a){a.display.pollingFast||a.display.poll.set(a.options.pollInterval,function(){$c(a),a.state.focused&&Xc(a)})}function Yc(a){function c(){var d=$c(a);d||b?(a.display.pollingFast=!1,Xc(a)):(b=!0,a.display.poll.set(60,c))}var b=!1;a.display.pollingFast=!0,a.display.poll.set(20,c)}function $c(a){var b=a.display.input,c=a.display.prevInput,f=a.doc;if(!a.state.focused||qh(b)&&!c||cd(a)||a.options.disableInput)return!1;a.state.pasteIncoming&&a.state.fakedLastChar&&(b.value=b.value.substring(0,b.value.length-1),a.state.fakedLastChar=!1);var g=b.value;if(g==c&&!a.somethingSelected())return!1;if(d&&e>=9&&a.display.inputHasSelection===g||p&&/[\uf700-\uf7ff]/.test(g))return _c(a),!1;var h=!a.curOp;h&&Bc(a),a.display.shift=!1,8203!=g.charCodeAt(0)||f.sel!=a.display.selForContextMenu||c||(c="\u200b");for(var i=0,j=Math.min(c.length,g.length);j>i&&c.charCodeAt(i)==g.charCodeAt(i);)++i;var k=g.slice(i),l=ph(k),m=null;a.state.pasteIncoming&&f.sel.ranges.length>1&&(Zc&&Zc.join("\n")==k?m=0==f.sel.ranges.length%Zc.length&&Mg(Zc,ph):l.length==f.sel.ranges.length&&(m=Mg(l,function(a){return[a]})));for(var n=f.sel.ranges.length-1;n>=0;n--){var o=f.sel.ranges[n],q=o.from(),r=o.to();i<c.length?q=nb(q.line,q.ch-(c.length-i)):a.state.overwrite&&o.empty()&&!a.state.pasteIncoming&&(r=nb(r.line,Math.min(Of(f,r.line).text.length,r.ch+Jg(l).length)));var s=a.curOp.updateInput,t={from:q,to:r,text:m?m[n%m.length]:l,origin:a.state.pasteIncoming?"paste":a.state.cutIncoming?"cut":"+input"};if(Rd(a.doc,t),tg(a,"inputRead",a,t),k&&!a.state.pasteIncoming&&a.options.electricChars&&a.options.smartIndent&&o.head.ch<100&&(!n||f.sel.ranges[n-1].head.line!=o.head.line)){var u=a.getModeAt(o.head),v=Ld(t);if(u.electricChars){for(var w=0;w<u.electricChars.length;w++)if(k.indexOf(u.electricChars.charAt(w))>-1){de(a,v.line,"smart");break}}else u.electricInput&&u.electricInput.test(Of(f,v.line).text.slice(0,v.ch))&&de(a,v.line,"smart")}}return be(a),a.curOp.updateInput=s,a.curOp.typing=!0,g.length>1e3||g.indexOf("\n")>-1?b.value=a.display.prevInput="":a.display.prevInput=g,h&&Dc(a),a.state.pasteIncoming=a.state.cutIncoming=!1,!0}function _c(a,b){var c,f,g=a.doc;if(a.somethingSelected()){a.display.prevInput="";var h=g.sel.primary();c=rh&&(h.to().line-h.from().line>100||(f=a.getSelection()).length>1e3);var i=c?"-":f||a.getSelection();a.display.input.value=i,a.state.focused&&Kg(a.display.input),d&&e>=9&&(a.display.inputHasSelection=i)}else b||(a.display.prevInput=a.display.input.value="",d&&e>=9&&(a.display.inputHasSelection=null));a.display.inaccurateSelection=c}function ad(a){"nocursor"==a.options.readOnly||o&&_g()==a.display.input||a.display.input.focus()}function bd(a){a.state.focused||(ad(a),Hd(a))}function cd(a){return a.options.readOnly||a.doc.cantEdit}function dd(a){function c(){a.state.focused&&setTimeout(Pg(ad,a),0)}function g(b){vg(a,b)||mg(b)}function h(c){if(a.somethingSelected())Zc=a.getSelections(),b.inaccurateSelection&&(b.prevInput="",b.inaccurateSelection=!1,b.input.value=Zc.join("\n"),Kg(b.input));else{for(var d=[],e=[],f=0;f<a.doc.sel.ranges.length;f++){var g=a.doc.sel.ranges[f].head.line,h={anchor:nb(g,0),head:nb(g+1,0)};e.push(h),d.push(a.getRange(h.anchor,h.head))}"cut"==c.type?a.setSelections(e,null,Bg):(b.prevInput="",b.input.value=d.join("\n"),Kg(b.input)),Zc=d}"cut"==c.type&&(a.state.cutIncoming=!0)}var b=a.display;pg(b.scroller,"mousedown",Lc(a,hd)),d&&11>e?pg(b.scroller,"dblclick",Lc(a,function(b){if(!vg(a,b)){var c=gd(a,b);if(c&&!od(a,b)&&!fd(a.display,b)){jg(b);var d=a.findWordAt(c);Cb(a.doc,d.anchor,d.head)}}})):pg(b.scroller,"dblclick",function(b){vg(a,b)||jg(b)}),pg(b.lineSpace,"selectstart",function(a){fd(b,a)||jg(a)}),t||pg(b.scroller,"contextmenu",function(b){Jd(a,b)}),pg(b.scroller,"scroll",function(){b.scroller.clientHeight&&(sd(a,b.scroller.scrollTop),td(a,b.scroller.scrollLeft,!0),rg(a,"scroll",a))}),pg(b.scrollbarV,"scroll",function(){b.scroller.clientHeight&&sd(a,b.scrollbarV.scrollTop)}),pg(b.scrollbarH,"scroll",function(){b.scroller.clientHeight&&td(a,b.scrollbarH.scrollLeft)}),pg(b.scroller,"mousewheel",function(b){wd(a,b)}),pg(b.scroller,"DOMMouseScroll",function(b){wd(a,b)}),pg(b.scrollbarH,"mousedown",c),pg(b.scrollbarV,"mousedown",c),pg(b.wrapper,"scroll",function(){b.wrapper.scrollTop=b.wrapper.scrollLeft=0}),pg(b.input,"keyup",function(b){Fd.call(a,b)}),pg(b.input,"input",function(){d&&e>=9&&a.display.inputHasSelection&&(a.display.inputHasSelection=null),Yc(a)}),pg(b.input,"keydown",Lc(a,Dd)),pg(b.input,"keypress",Lc(a,Gd)),pg(b.input,"focus",Pg(Hd,a)),pg(b.input,"blur",Pg(Id,a)),a.options.dragDrop&&(pg(b.scroller,"dragstart",function(b){rd(a,b)}),pg(b.scroller,"dragenter",g),pg(b.scroller,"dragover",g),pg(b.scroller,"drop",Lc(a,qd))),pg(b.scroller,"paste",function(c){fd(b,c)||(a.state.pasteIncoming=!0,ad(a),Yc(a))}),pg(b.input,"paste",function(){if(f&&!a.state.fakedLastChar&&!(new Date-a.state.lastMiddleDown<200)){var c=b.input.selectionStart,d=b.input.selectionEnd;b.input.value+="$",b.input.selectionEnd=d,b.input.selectionStart=c,a.state.fakedLastChar=!0}a.state.pasteIncoming=!0,Yc(a)}),pg(b.input,"cut",h),pg(b.input,"copy",h),k&&pg(b.sizer,"mouseup",function(){_g()==b.input&&b.input.blur(),ad(a)})}function ed(a){var b=a.display;b.cachedCharWidth=b.cachedTextHeight=b.cachedPaddingH=null,a.setSize()}function fd(a,b){for(var c=ng(b);c!=a.wrapper;c=c.parentNode)if(!c||c.ignoreEvents||c.parentNode==a.sizer&&c!=a.mover)return!0}function gd(a,b,c,d){var e=a.display;if(!c){var f=ng(b);if(f==e.scrollbarH||f==e.scrollbarV||f==e.scrollbarFiller||f==e.gutterFiller)return null}var g,h,i=e.lineSpace.getBoundingClientRect();try{g=b.clientX-i.left,h=b.clientY-i.top}catch(b){return null}var k,j=uc(a,g,h);if(d&&1==j.xRel&&(k=Of(a.doc,j.line).text).length==j.ch){var l=Fg(k,k.length,a.options.tabSize)-k.length;j=nb(j.line,Math.max(0,Math.round((g-$b(a.display).left)/yc(a.display))-l))}return j}function hd(a){if(!vg(this,a)){var b=this,c=b.display;if(c.shift=a.shiftKey,fd(c,a))return f||(c.scroller.draggable=!1,setTimeout(function(){c.scroller.draggable=!0},100)),void 0;if(!od(b,a)){var d=gd(b,a);switch(window.focus(),og(a)){case 1:d?kd(b,a,d):ng(a)==c.scroller&&jg(a);break;case 2:f&&(b.state.lastMiddleDown=+new Date),d&&Cb(b.doc,d),setTimeout(Pg(ad,b),20),jg(a);break;case 3:t&&Jd(b,a)}}}}function kd(a,b,c){setTimeout(Pg(bd,a),0);var e,d=+new Date;jd&&jd.time>d-400&&0==ob(jd.pos,c)?e="triple":id&&id.time>d-400&&0==ob(id.pos,c)?(e="double",jd={time:d,pos:c}):(e="single",id={time:d,pos:c});var f=a.doc.sel,g=p?b.metaKey:b.ctrlKey;a.options.dragDrop&&ih&&!cd(a)&&"single"==e&&f.contains(c)>-1&&f.somethingSelected()?ld(a,b,c,g):md(a,b,c,e,g)}function ld(a,b,c,g){var h=a.display,i=Lc(a,function(j){f&&(h.scroller.draggable=!1),a.state.draggingText=!1,qg(document,"mouseup",i),qg(h.scroller,"drop",i),Math.abs(b.clientX-j.clientX)+Math.abs(b.clientY-j.clientY)<10&&(jg(j),g||Cb(a.doc,c),ad(a),d&&9==e&&setTimeout(function(){document.body.focus(),ad(a)},20))});f&&(h.scroller.draggable=!0),a.state.draggingText=i,h.scroller.dragDrop&&h.scroller.dragDrop(),pg(document,"mouseup",i),pg(h.scroller,"drop",i)}function md(a,b,c,d,e){function n(b){if(0!=ob(m,b))if(m=b,"rect"==d){for(var e=[],f=a.options.tabSize,k=Fg(Of(g,c.line).text,c.ch,f),l=Fg(Of(g,b.line).text,b.ch,f),n=Math.min(k,l),o=Math.max(k,l),p=Math.min(c.line,b.line),q=Math.min(a.lastLine(),Math.max(c.line,b.line));q>=p;p++){var r=Of(g,p).text,s=Gg(r,n,f);n==o?e.push(new tb(nb(p,s),nb(p,s))):r.length>s&&e.push(new tb(nb(p,s),nb(p,Gg(r,o,f))))}e.length||e.push(new tb(c,c)),Ib(g,ub(j.ranges.slice(0,i).concat(e),i),{origin:"*mouse",scroll:!1}),a.scrollIntoView(b)}else{var t=h,u=t.anchor,v=b;if("single"!=d){if("double"==d)var w=a.findWordAt(b);else var w=new tb(nb(b.line,0),xb(g,nb(b.line+1,0)));ob(w.anchor,u)>0?(v=w.head,u=rb(t.from(),w.anchor)):(v=w.anchor,u=qb(t.to(),w.head))}var e=j.ranges.slice(0);e[i]=new tb(xb(g,u),v),Ib(g,ub(e,i),Cg)}}function q(b){var c=++p,e=gd(a,b,!0,"rect"==d);if(e)if(0!=ob(e,m)){bd(a),n(e);var h=O(f,g);(e.line>=h.to||e.line<h.from)&&setTimeout(Lc(a,function(){p==c&&q(b)}),150)}else{var i=b.clientY<o.top?-20:b.clientY>o.bottom?20:0;i&&setTimeout(Lc(a,function(){p==c&&(f.scroller.scrollTop+=i,q(b))}),50)}}function r(b){p=1/0,jg(b),ad(a),qg(document,"mousemove",s),qg(document,"mouseup",t),g.history.lastSelOrigin=null}var f=a.display,g=a.doc;jg(b);var h,i,j=g.sel;if(e&&!b.shiftKey?(i=g.sel.contains(c),h=i>-1?g.sel.ranges[i]:new tb(c,c)):h=g.sel.primary(),b.altKey)d="rect",e||(h=new tb(c,c)),c=gd(a,b,!0,!0),i=-1;else if("double"==d){var k=a.findWordAt(c);h=a.display.shift||g.extend?Bb(g,h,k.anchor,k.head):k}else if("triple"==d){var l=new tb(nb(c.line,0),xb(g,nb(c.line+1,0)));h=a.display.shift||g.extend?Bb(g,h,l.anchor,l.head):l}else h=Bb(g,h,c);e?i>-1?Eb(g,i,h,Cg):(i=g.sel.ranges.length,Ib(g,ub(g.sel.ranges.concat([h]),i),{scroll:!1,origin:"*mouse"})):(i=0,Ib(g,new sb([h],0),Cg),j=g.sel);var m=c,o=f.wrapper.getBoundingClientRect(),p=0,s=Lc(a,function(a){og(a)?q(a):r(a)}),t=Lc(a,r);pg(document,"mousemove",s),pg(document,"mouseup",t)}function nd(a,b,c,d,e){try{var f=b.clientX,g=b.clientY}catch(b){return!1}if(f>=Math.floor(a.display.gutters.getBoundingClientRect().right))return!1;d&&jg(b);var h=a.display,i=h.lineDiv.getBoundingClientRect();if(g>i.bottom||!xg(a,c))return lg(b);g-=i.top-h.viewOffset;for(var j=0;j<a.options.gutters.length;++j){var k=h.gutters.childNodes[j];if(k&&k.getBoundingClientRect().right>=f){var l=Tf(a.doc,g),m=a.options.gutters[j];return e(a,c,a,l,m,b),lg(b)}}}function od(a,b){return nd(a,b,"gutterClick",!0,tg)}function qd(a){var b=this;if(!vg(b,a)&&!fd(b.display,a)){jg(a),d&&(pd=+new Date);var c=gd(b,a,!0),e=a.dataTransfer.files;if(c&&!cd(b))if(e&&e.length&&window.FileReader&&window.File)for(var f=e.length,g=Array(f),h=0,i=function(a,d){var e=new FileReader;e.onload=Lc(b,function(){if(g[d]=e.result,++h==f){c=xb(b.doc,c);var a={from:c,to:c,text:ph(g.join("\n")),origin:"paste"};Rd(b.doc,a),Hb(b.doc,vb(c,Ld(a)))}}),e.readAsText(a)},j=0;f>j;++j)i(e[j],j);else{if(b.state.draggingText&&b.doc.sel.contains(c)>-1)return b.state.draggingText(a),setTimeout(Pg(ad,b),20),void 0;try{var g=a.dataTransfer.getData("Text");if(g){if(b.state.draggingText&&!(p?a.metaKey:a.ctrlKey))var k=b.listSelections();if(Jb(b.doc,vb(c,c)),k)for(var j=0;j<k.length;++j)Xd(b.doc,"",k[j].anchor,k[j].head,"drag");b.replaceSelection(g,"around","paste"),ad(b)}}catch(a){}}}}function rd(a,b){if(d&&(!a.state.draggingText||+new Date-pd<100))return mg(b),void 0;if(!vg(a,b)&&!fd(a.display,b)&&(b.dataTransfer.setData("Text",a.getSelection()),b.dataTransfer.setDragImage&&!j)){var c=Wg("img",null,null,"position: fixed; left: 0; top: 0;");c.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",i&&(c.width=c.height=1,a.display.wrapper.appendChild(c),c._top=c.offsetTop),b.dataTransfer.setDragImage(c,0,0),i&&c.parentNode.removeChild(c)}}function sd(b,c){Math.abs(b.doc.scrollTop-c)<2||(b.doc.scrollTop=c,a||W(b,{top:c}),b.display.scroller.scrollTop!=c&&(b.display.scroller.scrollTop=c),b.display.scrollbarV.scrollTop!=c&&(b.display.scrollbarV.scrollTop=c),a&&W(b),Ub(b,100))}function td(a,b,c){(c?b==a.doc.scrollLeft:Math.abs(a.doc.scrollLeft-b)<2)||(b=Math.min(b,a.display.scroller.scrollWidth-a.display.scroller.clientWidth),a.doc.scrollLeft=b,P(a),a.display.scroller.scrollLeft!=b&&(a.display.scroller.scrollLeft=b),a.display.scrollbarH.scrollLeft!=b&&(a.display.scrollbarH.scrollLeft=b))}function wd(b,c){var d=c.wheelDeltaX,e=c.wheelDeltaY;null==d&&c.detail&&c.axis==c.HORIZONTAL_AXIS&&(d=c.detail),null==e&&c.detail&&c.axis==c.VERTICAL_AXIS?e=c.detail:null==e&&(e=c.wheelDelta);var g=b.display,h=g.scroller;if(d&&h.scrollWidth>h.clientWidth||e&&h.scrollHeight>h.clientHeight){if(e&&p&&f)a:for(var j=c.target,k=g.view;j!=h;j=j.parentNode)for(var l=0;l<k.length;l++)if(k[l].node==j){b.display.currentWheelTarget=j;break a}if(d&&!a&&!i&&null!=vd)return e&&sd(b,Math.max(0,Math.min(h.scrollTop+e*vd,h.scrollHeight-h.clientHeight))),td(b,Math.max(0,Math.min(h.scrollLeft+d*vd,h.scrollWidth-h.clientWidth))),jg(c),g.wheelStartX=null,void 0;if(e&&null!=vd){var m=e*vd,n=b.doc.scrollTop,o=n+g.wrapper.clientHeight;0>m?n=Math.max(0,n+m-50):o=Math.min(b.doc.height,o+m+50),W(b,{top:n,bottom:o})}20>ud&&(null==g.wheelStartX?(g.wheelStartX=h.scrollLeft,g.wheelStartY=h.scrollTop,g.wheelDX=d,g.wheelDY=e,setTimeout(function(){if(null!=g.wheelStartX){var a=h.scrollLeft-g.wheelStartX,b=h.scrollTop-g.wheelStartY,c=b&&g.wheelDY&&b/g.wheelDY||a&&g.wheelDX&&a/g.wheelDX;g.wheelStartX=g.wheelStartY=null,c&&(vd=(vd*ud+c)/(ud+1),++ud)}},200)):(g.wheelDX+=d,g.wheelDY+=e))}}function xd(a,b,c){if("string"==typeof b&&(b=te[b],!b))return!1;a.display.pollingFast&&$c(a)&&(a.display.pollingFast=!1);var d=a.display.shift,e=!1;try{cd(a)&&(a.state.suppressEdits=!0),c&&(a.display.shift=!1),e=b(a)!=Ag}finally{a.display.shift=d,a.state.suppressEdits=!1}return e}function yd(a){var b=a.state.keyMaps.slice(0);return a.options.extraKeys&&b.push(a.options.extraKeys),b.push(a.options.keyMap),b}function Ad(a,b){var c=ve(a.options.keyMap),d=c.auto;clearTimeout(zd),d&&!xe(b)&&(zd=setTimeout(function(){ve(a.options.keyMap)==c&&(a.options.keyMap=d.call?d.call(null,a):d,D(a))},50));var e=ye(b,!0),f=!1;if(!e)return!1;var g=yd(a);return f=b.shiftKey?we("Shift-"+e,g,function(b){return xd(a,b,!0)})||we(e,g,function(b){return("string"==typeof b?/^go[A-Z]/.test(b):b.motion)?xd(a,b):void 0}):we(e,g,function(b){return xd(a,b)}),f&&(jg(b),Tb(a),tg(a,"keyHandled",a,e,b)),f}function Bd(a,b,c){var d=we("'"+c+"'",yd(a),function(b){return xd(a,b,!0)});return d&&(jg(b),Tb(a),tg(a,"keyHandled",a,"'"+c+"'",b)),d}function Dd(a){var b=this;if(bd(b),!vg(b,a)){d&&11>e&&27==a.keyCode&&(a.returnValue=!1);var c=a.keyCode;b.display.shift=16==c||a.shiftKey;var f=Ad(b,a);i&&(Cd=f?c:null,!f&&88==c&&!rh&&(p?a.metaKey:a.ctrlKey)&&b.replaceSelection("",null,"cut")),18!=c||/\bCodeMirror-crosshair\b/.test(b.display.lineDiv.className)||Ed(b)}}function Ed(a){function c(a){18!=a.keyCode&&a.altKey||(bh(b,"CodeMirror-crosshair"),qg(document,"keyup",c),qg(document,"mouseover",c))}var b=a.display.lineDiv;ch(b,"CodeMirror-crosshair"),pg(document,"keyup",c),pg(document,"mouseover",c)}function Fd(a){16==a.keyCode&&(this.doc.sel.shift=!1),vg(this,a)}function Gd(a){var b=this;if(!(vg(b,a)||a.ctrlKey&&!a.altKey||p&&a.metaKey)){var c=a.keyCode,f=a.charCode;if(i&&c==Cd)return Cd=null,jg(a),void 0;if(!(i&&(!a.which||a.which<10)||k)||!Ad(b,a)){var g=String.fromCharCode(null==f?c:f);Bd(b,a,g)||(d&&e>=9&&(b.display.inputHasSelection=null),Yc(b))}}}function Hd(a){"nocursor"!=a.options.readOnly&&(a.state.focused||(rg(a,"focus",a),a.state.focused=!0,ch(a.display.wrapper,"CodeMirror-focused"),a.curOp||a.display.selForContextMenu==a.doc.sel||(_c(a),f&&setTimeout(Pg(_c,a,!0),0))),Xc(a),Tb(a))}function Id(a){a.state.focused&&(rg(a,"blur",a),a.state.focused=!1,bh(a.display.wrapper,"CodeMirror-focused")),clearInterval(a.display.blinker),setTimeout(function(){a.state.focused||(a.display.shift=!1)},150)}function Jd(a,b){function m(){if(null!=c.input.selectionStart){var b=a.somethingSelected(),d=c.input.value="\u200b"+(b?c.input.value:"");c.prevInput=b?"":"\u200b",c.input.selectionStart=1,c.input.selectionEnd=d.length,c.selForContextMenu=a.doc.sel}}function n(){if(c.inputDiv.style.position="relative",c.input.style.cssText=k,d&&9>e&&(c.scrollbarV.scrollTop=c.scroller.scrollTop=h),Xc(a),null!=c.input.selectionStart){(!d||d&&9>e)&&m();var b=0,f=function(){c.selForContextMenu==a.doc.sel&&0==c.input.selectionStart?Lc(a,te.selectAll)(a):b++<10?c.detectingSelectAll=setTimeout(f,500):_c(a)};c.detectingSelectAll=setTimeout(f,200)}}if(!vg(a,b,"contextmenu")){var c=a.display;if(!fd(c,b)&&!Kd(a,b)){var g=gd(a,b),h=c.scroller.scrollTop;if(g&&!i){var j=a.options.resetSelectionOnContextMenu;j&&-1==a.doc.sel.contains(g)&&Lc(a,Ib)(a.doc,vb(g),Bg);var k=c.input.style.cssText;if(c.inputDiv.style.position="absolute",c.input.style.cssText="position: fixed; width: 30px; height: 30px; top: "+(b.clientY-5)+"px; left: "+(b.clientX-5)+"px; z-index: 1000; background: "+(d?"rgba(255, 255, 255, .05)":"transparent")+"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",f)var l=window.scrollY;if(ad(a),f&&window.scrollTo(null,l),_c(a),a.somethingSelected()||(c.input.value=c.prevInput=" "),c.selForContextMenu=a.doc.sel,clearTimeout(c.detectingSelectAll),d&&e>=9&&m(),t){mg(b);var o=function(){qg(window,"mouseup",o),setTimeout(n,20)};pg(window,"mouseup",o)}else setTimeout(n,50)}}}}function Kd(a,b){return xg(a,"gutterContextMenu")?nd(a,b,"gutterContextMenu",!1,rg):!1}function Md(a,b){if(ob(a,b.from)<0)return a;if(ob(a,b.to)<=0)return Ld(b);var c=a.line+b.text.length-(b.to.line-b.from.line)-1,d=a.ch;return a.line==b.to.line&&(d+=Ld(b).ch-b.to.ch),nb(c,d)}function Nd(a,b){for(var c=[],d=0;d<a.sel.ranges.length;d++){var e=a.sel.ranges[d];c.push(new tb(Md(e.anchor,b),Md(e.head,b)))}return ub(c,a.sel.primIndex)}function Od(a,b,c){return a.line==b.line?nb(c.line,a.ch-b.ch+c.ch):nb(c.line+(a.line-b.line),a.ch)}function Pd(a,b,c){for(var d=[],e=nb(a.first,0),f=e,g=0;g<b.length;g++){var h=b[g],i=Od(h.from,e,f),j=Od(Ld(h),e,f);if(e=h.to,f=j,"around"==c){var k=a.sel.ranges[g],l=ob(k.head,k.anchor)<0;d[g]=new tb(l?j:i,l?i:j)}else d[g]=new tb(i,i)}return new sb(d,a.sel.primIndex)}function Qd(a,b,c){var d={canceled:!1,from:b.from,to:b.to,text:b.text,origin:b.origin,cancel:function(){this.canceled=!0}};return c&&(d.update=function(b,c,d,e){b&&(this.from=xb(a,b)),c&&(this.to=xb(a,c)),d&&(this.text=d),void 0!==e&&(this.origin=e)}),rg(a,"beforeChange",a,d),a.cm&&rg(a.cm,"beforeChange",a.cm,d),d.canceled?null:{from:d.from,to:d.to,text:d.text,origin:d.origin}}function Rd(a,b,c){if(a.cm){if(!a.cm.curOp)return Lc(a.cm,Rd)(a,b,c);if(a.cm.state.suppressEdits)return}if(!(xg(a,"beforeChange")||a.cm&&xg(a.cm,"beforeChange"))||(b=Qd(a,b,!0))){var d=u&&!c&&Re(a,b.from,b.to);if(d)for(var e=d.length-1;e>=0;--e)Sd(a,{from:d[e].from,to:d[e].to,text:e?[""]:b.text});else Sd(a,b)}}function Sd(a,b){if(1!=b.text.length||""!=b.text[0]||0!=ob(b.from,b.to)){var c=Nd(a,b);$f(a,b,c,a.cm?a.cm.curOp.id:0/0),Vd(a,b,c,Oe(a,b));var d=[];Mf(a,function(a,c){c||-1!=Lg(d,a.history)||(ig(a.history,b),d.push(a.history)),Vd(a,b,null,Oe(a,b))})}}function Td(a,b,c){if(!a.cm||!a.cm.state.suppressEdits){for(var e,d=a.history,f=a.sel,g="undo"==b?d.done:d.undone,h="undo"==b?d.undone:d.done,i=0;i<g.length&&(e=g[i],c?!e.ranges||e.equals(a.sel):e.ranges);i++);if(i!=g.length){for(d.lastOrigin=d.lastSelOrigin=null;e=g.pop(),e.ranges;){if(bg(e,h),c&&!e.equals(a.sel))return Ib(a,e,{clearRedo:!1}),void 0;f=e}var j=[];bg(f,h),h.push({changes:j,generation:d.generation}),d.generation=e.generation||++d.maxGeneration;for(var k=xg(a,"beforeChange")||a.cm&&xg(a.cm,"beforeChange"),i=e.changes.length-1;i>=0;--i){var l=e.changes[i];if(l.origin=b,k&&!Qd(a,l,!1))return g.length=0,void 0;j.push(Xf(a,l));var m=i?Nd(a,l):Jg(g);Vd(a,l,m,Qe(a,l)),!i&&a.cm&&a.cm.scrollIntoView({from:l.from,to:Ld(l)});var n=[];Mf(a,function(a,b){b||-1!=Lg(n,a.history)||(ig(a.history,l),n.push(a.history)),Vd(a,l,null,Qe(a,l))})}}}}function Ud(a,b){if(0!=b&&(a.first+=b,a.sel=new sb(Mg(a.sel.ranges,function(a){return new tb(nb(a.anchor.line+b,a.anchor.ch),nb(a.head.line+b,a.head.ch))}),a.sel.primIndex),a.cm)){Qc(a.cm,a.first,a.first-b,b);for(var c=a.cm.display,d=c.viewFrom;d<c.viewTo;d++)Rc(a.cm,d,"gutter")}}function Vd(a,b,c,d){if(a.cm&&!a.cm.curOp)return Lc(a.cm,Vd)(a,b,c,d);if(b.to.line<a.first)return Ud(a,b.text.length-1-(b.to.line-b.from.line)),void 0;if(!(b.from.line>a.lastLine())){if(b.from.line<a.first){var e=b.text.length-1-(a.first-b.from.line);Ud(a,e),b={from:nb(a.first,0),to:nb(b.to.line+e,b.to.ch),text:[Jg(b.text)],origin:b.origin}}var f=a.lastLine();b.to.line>f&&(b={from:b.from,to:nb(f,Of(a,f).text.length),text:[b.text[0]],origin:b.origin}),b.removed=Pf(a,b.from,b.to),c||(c=Nd(a,b)),a.cm?Wd(a.cm,b,d):Ff(a,b,d),Jb(a,c,Bg)}}function Wd(a,b,c){var d=a.doc,e=a.display,f=b.from,g=b.to,h=!1,i=f.line;a.options.lineWrapping||(i=Sf(_e(Of(d,f.line))),d.iter(i,g.line+1,function(a){return a==e.maxLine?(h=!0,!0):void 0})),d.sel.contains(b.from,b.to)>-1&&wg(a),Ff(d,b,c,B(a)),a.options.lineWrapping||(d.iter(i,f.line+b.text.length,function(a){var b=I(a);b>e.maxLineLength&&(e.maxLine=a,e.maxLineLength=b,e.maxLineChanged=!0,h=!1)}),h&&(a.curOp.updateMaxLine=!0)),d.frontier=Math.min(d.frontier,f.line),Ub(a,400);var j=b.text.length-(g.line-f.line)-1;f.line!=g.line||1!=b.text.length||Ef(a.doc,b)?Qc(a,f.line,g.line+1,j):Rc(a,f.line,"text");var k=xg(a,"changes"),l=xg(a,"change");if(l||k){var m={from:f,to:g,text:b.text,removed:b.removed,origin:b.origin};l&&tg(a,"change",a,m),k&&(a.curOp.changeObjs||(a.curOp.changeObjs=[])).push(m)}a.display.selForContextMenu=null}function Xd(a,b,c,d,e){if(d||(d=c),ob(d,c)<0){var f=d;d=c,c=f}"string"==typeof b&&(b=ph(b)),Rd(a,{from:c,to:d,text:b,origin:e})}function Yd(a,b){var c=a.display,d=c.sizer.getBoundingClientRect(),e=null;if(b.top+d.top<0?e=!0:b.bottom+d.top>(window.innerHeight||document.documentElement.clientHeight)&&(e=!1),null!=e&&!m){var f=Wg("div","\u200b",null,"position: absolute; top: "+(b.top-c.viewOffset-Yb(a.display))+"px; height: "+(b.bottom-b.top+zg)+"px; left: "+b.left+"px; width: 2px;");a.display.lineSpace.appendChild(f),f.scrollIntoView(e),a.display.lineSpace.removeChild(f)}}function Zd(a,b,c,d){for(null==d&&(d=0);;){var e=!1,f=rc(a,b),g=c&&c!=b?rc(a,c):f,h=_d(a,Math.min(f.left,g.left),Math.min(f.top,g.top)-d,Math.max(f.left,g.left),Math.max(f.bottom,g.bottom)+d),i=a.doc.scrollTop,j=a.doc.scrollLeft;if(null!=h.scrollTop&&(sd(a,h.scrollTop),Math.abs(a.doc.scrollTop-i)>1&&(e=!0)),null!=h.scrollLeft&&(td(a,h.scrollLeft),Math.abs(a.doc.scrollLeft-j)>1&&(e=!0)),!e)return f}}function $d(a,b,c,d,e){var f=_d(a,b,c,d,e);null!=f.scrollTop&&sd(a,f.scrollTop),null!=f.scrollLeft&&td(a,f.scrollLeft)}function _d(a,b,c,d,e){var f=a.display,g=xc(a.display);0>c&&(c=0);var h=a.curOp&&null!=a.curOp.scrollTop?a.curOp.scrollTop:f.scroller.scrollTop,i=f.scroller.clientHeight-zg,j={};e-c>i&&(e=c+i);var k=a.doc.height+Zb(f),l=g>c,m=e>k-g;if(h>c)j.scrollTop=l?0:c;else if(e>h+i){var n=Math.min(c,(m?k:e)-i);n!=h&&(j.scrollTop=n)}var o=a.curOp&&null!=a.curOp.scrollLeft?a.curOp.scrollLeft:f.scroller.scrollLeft,p=f.scroller.clientWidth-zg-f.gutters.offsetWidth,q=d-b>p;return q&&(d=c+i),10>b?j.scrollLeft=0:o>b?j.scrollLeft=Math.max(0,b-(q?0:10)):d>p+o-3&&(j.scrollLeft=d+(q?0:10)-p),j}function ae(a,b,c){(null!=b||null!=c)&&ce(a),null!=b&&(a.curOp.scrollLeft=(null==a.curOp.scrollLeft?a.doc.scrollLeft:a.curOp.scrollLeft)+b),null!=c&&(a.curOp.scrollTop=(null==a.curOp.scrollTop?a.doc.scrollTop:a.curOp.scrollTop)+c)}function be(a){ce(a);var b=a.getCursor(),c=b,d=b;a.options.lineWrapping||(c=b.ch?nb(b.line,b.ch-1):b,d=nb(b.line,b.ch+1)),a.curOp.scrollToPos={from:c,to:d,margin:a.options.cursorScrollMargin,isCursor:!0}}function ce(a){var b=a.curOp.scrollToPos;if(b){a.curOp.scrollToPos=null;var c=sc(a,b.from),d=sc(a,b.to),e=_d(a,Math.min(c.left,d.left),Math.min(c.top,d.top)-b.margin,Math.max(c.right,d.right),Math.max(c.bottom,d.bottom)+b.margin);a.scrollTo(e.scrollLeft,e.scrollTop)}}function de(a,b,c,d){var f,e=a.doc;null==c&&(c="add"),"smart"==c&&(e.mode.indent?f=Xb(a,b):c="prev");var g=a.options.tabSize,h=Of(e,b),i=Fg(h.text,null,g);h.stateAfter&&(h.stateAfter=null);var k,j=h.text.match(/^\s*/)[0];if(d||/\S/.test(h.text)){if("smart"==c&&(k=e.mode.indent(f,h.text.slice(j.length),h.text),k==Ag||k>150)){if(!d)return;c="prev"}}else k=0,c="not";"prev"==c?k=b>e.first?Fg(Of(e,b-1).text,null,g):0:"add"==c?k=i+a.options.indentUnit:"subtract"==c?k=i-a.options.indentUnit:"number"==typeof c&&(k=i+c),k=Math.max(0,k);var l="",m=0;if(a.options.indentWithTabs)for(var n=Math.floor(k/g);n;--n)m+=g,l+="	";if(k>m&&(l+=Ig(k-m)),l!=j)Xd(e,l,nb(b,0),nb(b,j.length),"+input");else for(var n=0;n<e.sel.ranges.length;n++){var o=e.sel.ranges[n];if(o.head.line==b&&o.head.ch<j.length){var m=nb(b,j.length);Eb(e,n,new tb(m,m));break}}h.stateAfter=null}function ee(a,b,c,d){var e=b,f=b;return"number"==typeof b?f=Of(a,wb(a,b)):e=Sf(b),null==e?null:(d(f,e)&&a.cm&&Rc(a.cm,e,c),f)}function fe(a,b){for(var c=a.doc.sel.ranges,d=[],e=0;e<c.length;e++){for(var f=b(c[e]);d.length&&ob(f.from,Jg(d).to)<=0;){var g=d.pop();if(ob(g.from,f.from)<0){f.from=g.from;break}}d.push(f)}Kc(a,function(){for(var b=d.length-1;b>=0;b--)Xd(a.doc,"",d[b].from,d[b].to,"+delete");be(a)})}function ge(a,b,c,d,e){function k(){var b=f+c;return b<a.first||b>=a.first+a.size?j=!1:(f=b,i=Of(a,b))}function l(a){var b=(e?Hh:Ih)(i,g,c,!0);if(null==b){if(a||!k())return j=!1;g=e?(0>c?zh:yh)(i):0>c?i.text.length:0}else g=b;return!0}var f=b.line,g=b.ch,h=c,i=Of(a,f),j=!0;if("char"==d)l();else if("column"==d)l(!0);else if("word"==d||"group"==d)for(var m=null,n="group"==d,o=a.cm&&a.cm.getHelper(b,"wordChars"),p=!0;!(0>c)||l(!p);p=!1){var q=i.text.charAt(g)||"\n",r=Sg(q,o)?"w":n&&"\n"==q?"n":!n||/\s/.test(q)?null:"p";if(!n||p||r||(r="s"),m&&m!=r){0>c&&(c=1,l());break}if(r&&(m=r),c>0&&!l(!p))break}var s=Nb(a,nb(f,g),h,!0);return j||(s.hitSide=!0),s}function he(a,b,c,d){var g,e=a.doc,f=b.left;if("page"==d){var h=Math.min(a.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight);g=b.top+c*(h-(0>c?1.5:.5)*xc(a.display))}else"line"==d&&(g=c>0?b.bottom+3:b.top-3);for(;;){var i=uc(a,f,g);if(!i.outside)break;if(0>c?0>=g:g>=e.height){i.hitSide=!0;break}g+=5*c}return i}function ke(a,b,c,d){w.defaults[a]=b,c&&(je[a]=d?function(a,b,d){d!=le&&c(a,b,d)}:c)}function ve(a){return"string"==typeof a?ue[a]:a}function Ce(a,b,c,d,e){if(d&&d.shared)return Ee(a,b,c,d,e);if(a.cm&&!a.cm.curOp)return Lc(a.cm,Ce)(a,b,c,d,e);var f=new Ae(a,e),g=ob(b,c);if(d&&Og(d,f,!1),g>0||0==g&&f.clearWhenEmpty!==!1)return f;if(f.replacedWith&&(f.collapsed=!0,f.widgetNode=Wg("span",[f.replacedWith],"CodeMirror-widget"),d.handleMouseEvents||(f.widgetNode.ignoreEvents=!0),d.insertLeft&&(f.widgetNode.insertLeft=!0)),f.collapsed){if($e(a,b.line,b,c,f)||b.line!=c.line&&$e(a,c.line,b,c,f))throw new Error("Inserting collapsed marker partially overlapping an existing one");v=!0}f.addToHistory&&$f(a,{from:b,to:c,origin:"markText"},a.sel,0/0);var j,h=b.line,i=a.cm;if(a.iter(h,c.line+1,function(a){i&&f.collapsed&&!i.options.lineWrapping&&_e(a)==i.display.maxLine&&(j=!0),f.collapsed&&h!=b.line&&Rf(a,0),Le(a,new Ie(f,h==b.line?b.ch:null,h==c.line?c.ch:null)),++h}),f.collapsed&&a.iter(b.line,c.line+1,function(b){df(a,b)&&Rf(b,0)}),f.clearOnEnter&&pg(f,"beforeCursorEnter",function(){f.clear()
+}),f.readOnly&&(u=!0,(a.history.done.length||a.history.undone.length)&&a.clearHistory()),f.collapsed&&(f.id=++Be,f.atomic=!0),i){if(j&&(i.curOp.updateMaxLine=!0),f.collapsed)Qc(i,b.line,c.line+1);else if(f.className||f.title||f.startStyle||f.endStyle)for(var k=b.line;k<=c.line;k++)Rc(i,k,"text");f.atomic&&Lb(i.doc),tg(i,"markerAdded",i,f)}return f}function Ee(a,b,c,d,e){d=Og(d),d.shared=!1;var f=[Ce(a,b,c,d,e)],g=f[0],h=d.widgetNode;return Mf(a,function(a){h&&(d.widgetNode=h.cloneNode(!0)),f.push(Ce(a,xb(a,b),xb(a,c),d,e));for(var i=0;i<a.linked.length;++i)if(a.linked[i].isParent)return;g=Jg(f)}),new De(f,g)}function Fe(a){return a.findMarks(nb(a.first,0),a.clipPos(nb(a.lastLine())),function(a){return a.parent})}function Ge(a,b){for(var c=0;c<b.length;c++){var d=b[c],e=d.find(),f=a.clipPos(e.from),g=a.clipPos(e.to);if(ob(f,g)){var h=Ce(a,f,g,d.primary,d.primary.type);d.markers.push(h),h.parent=d}}}function He(a){for(var b=0;b<a.length;b++){var c=a[b],d=[c.primary.doc];Mf(c.primary.doc,function(a){d.push(a)});for(var e=0;e<c.markers.length;e++){var f=c.markers[e];-1==Lg(d,f.doc)&&(f.parent=null,c.markers.splice(e--,1))}}}function Ie(a,b,c){this.marker=a,this.from=b,this.to=c}function Je(a,b){if(a)for(var c=0;c<a.length;++c){var d=a[c];if(d.marker==b)return d}}function Ke(a,b){for(var c,d=0;d<a.length;++d)a[d]!=b&&(c||(c=[])).push(a[d]);return c}function Le(a,b){a.markedSpans=a.markedSpans?a.markedSpans.concat([b]):[b],b.marker.attachLine(a)}function Me(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);if(h||f.from==b&&"bookmark"==g.type&&(!c||!f.marker.insertLeft)){var i=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);(e||(e=[])).push(new Ie(g,f.from,i?null:f.to))}}return e}function Ne(a,b,c){if(a)for(var e,d=0;d<a.length;++d){var f=a[d],g=f.marker,h=null==f.to||(g.inclusiveRight?f.to>=b:f.to>b);if(h||f.from==b&&"bookmark"==g.type&&(!c||f.marker.insertLeft)){var i=null==f.from||(g.inclusiveLeft?f.from<=b:f.from<b);(e||(e=[])).push(new Ie(g,i?null:f.from-b,null==f.to?null:f.to-b))}}return e}function Oe(a,b){var c=zb(a,b.from.line)&&Of(a,b.from.line).markedSpans,d=zb(a,b.to.line)&&Of(a,b.to.line).markedSpans;if(!c&&!d)return null;var e=b.from.ch,f=b.to.ch,g=0==ob(b.from,b.to),h=Me(c,e,g),i=Ne(d,f,g),j=1==b.text.length,k=Jg(b.text).length+(j?e:0);if(h)for(var l=0;l<h.length;++l){var m=h[l];if(null==m.to){var n=Je(i,m.marker);n?j&&(m.to=null==n.to?null:n.to+k):m.to=e}}if(i)for(var l=0;l<i.length;++l){var m=i[l];if(null!=m.to&&(m.to+=k),null==m.from){var n=Je(h,m.marker);n||(m.from=k,j&&(h||(h=[])).push(m))}else m.from+=k,j&&(h||(h=[])).push(m)}h&&(h=Pe(h)),i&&i!=h&&(i=Pe(i));var o=[h];if(!j){var q,p=b.text.length-2;if(p>0&&h)for(var l=0;l<h.length;++l)null==h[l].to&&(q||(q=[])).push(new Ie(h[l].marker,null,null));for(var l=0;p>l;++l)o.push(q);o.push(i)}return o}function Pe(a){for(var b=0;b<a.length;++b){var c=a[b];null!=c.from&&c.from==c.to&&c.marker.clearWhenEmpty!==!1&&a.splice(b--,1)}return a.length?a:null}function Qe(a,b){var c=eg(a,b),d=Oe(a,b);if(!c)return d;if(!d)return c;for(var e=0;e<c.length;++e){var f=c[e],g=d[e];if(f&&g)a:for(var h=0;h<g.length;++h){for(var i=g[h],j=0;j<f.length;++j)if(f[j].marker==i.marker)continue a;f.push(i)}else g&&(c[e]=g)}return c}function Re(a,b,c){var d=null;if(a.iter(b.line,c.line+1,function(a){if(a.markedSpans)for(var b=0;b<a.markedSpans.length;++b){var c=a.markedSpans[b].marker;!c.readOnly||d&&-1!=Lg(d,c)||(d||(d=[])).push(c)}}),!d)return null;for(var e=[{from:b,to:c}],f=0;f<d.length;++f)for(var g=d[f],h=g.find(0),i=0;i<e.length;++i){var j=e[i];if(!(ob(j.to,h.from)<0||ob(j.from,h.to)>0)){var k=[i,1],l=ob(j.from,h.from),m=ob(j.to,h.to);(0>l||!g.inclusiveLeft&&!l)&&k.push({from:j.from,to:h.from}),(m>0||!g.inclusiveRight&&!m)&&k.push({from:h.to,to:j.to}),e.splice.apply(e,k),i+=k.length-1}}return e}function Se(a){var b=a.markedSpans;if(b){for(var c=0;c<b.length;++c)b[c].marker.detachLine(a);a.markedSpans=null}}function Te(a,b){if(b){for(var c=0;c<b.length;++c)b[c].marker.attachLine(a);a.markedSpans=b}}function Ue(a){return a.inclusiveLeft?-1:0}function Ve(a){return a.inclusiveRight?1:0}function We(a,b){var c=a.lines.length-b.lines.length;if(0!=c)return c;var d=a.find(),e=b.find(),f=ob(d.from,e.from)||Ue(a)-Ue(b);if(f)return-f;var g=ob(d.to,e.to)||Ve(a)-Ve(b);return g?g:b.id-a.id}function Xe(a,b){var d,c=v&&a.markedSpans;if(c)for(var e,f=0;f<c.length;++f)e=c[f],e.marker.collapsed&&null==(b?e.from:e.to)&&(!d||We(d,e.marker)<0)&&(d=e.marker);return d}function Ye(a){return Xe(a,!0)}function Ze(a){return Xe(a,!1)}function $e(a,b,c,d,e){var f=Of(a,b),g=v&&f.markedSpans;if(g)for(var h=0;h<g.length;++h){var i=g[h];if(i.marker.collapsed){var j=i.marker.find(0),k=ob(j.from,c)||Ue(i.marker)-Ue(e),l=ob(j.to,d)||Ve(i.marker)-Ve(e);if(!(k>=0&&0>=l||0>=k&&l>=0)&&(0>=k&&(ob(j.to,c)>0||i.marker.inclusiveRight&&e.inclusiveLeft)||k>=0&&(ob(j.from,d)<0||i.marker.inclusiveLeft&&e.inclusiveRight)))return!0}}}function _e(a){for(var b;b=Ye(a);)a=b.find(-1,!0).line;return a}function af(a){for(var b,c;b=Ze(a);)a=b.find(1,!0).line,(c||(c=[])).push(a);return c}function bf(a,b){var c=Of(a,b),d=_e(c);return c==d?b:Sf(d)}function cf(a,b){if(b>a.lastLine())return b;var d,c=Of(a,b);if(!df(a,c))return b;for(;d=Ze(c);)c=d.find(1,!0).line;return Sf(c)+1}function df(a,b){var c=v&&b.markedSpans;if(c)for(var d,e=0;e<c.length;++e)if(d=c[e],d.marker.collapsed){if(null==d.from)return!0;if(!d.marker.widgetNode&&0==d.from&&d.marker.inclusiveLeft&&ef(a,b,d))return!0}}function ef(a,b,c){if(null==c.to){var d=c.marker.find(1,!0);return ef(a,d.line,Je(d.line.markedSpans,c.marker))}if(c.marker.inclusiveRight&&c.to==b.text.length)return!0;for(var e,f=0;f<b.markedSpans.length;++f)if(e=b.markedSpans[f],e.marker.collapsed&&!e.marker.widgetNode&&e.from==c.to&&(null==e.to||e.to!=c.from)&&(e.marker.inclusiveLeft||c.marker.inclusiveRight)&&ef(a,b,e))return!0}function gf(a,b,c){Uf(b)<(a.curOp&&a.curOp.scrollTop||a.doc.scrollTop)&&ae(a,null,c)}function hf(a){if(null!=a.height)return a.height;if(!$g(document.body,a.node)){var b="position: relative;";a.coverGutter&&(b+="margin-left: -"+a.cm.getGutterElement().offsetWidth+"px;"),Zg(a.cm.display.measure,Wg("div",[a.node],null,b))}return a.height=a.node.offsetHeight}function jf(a,b,c,d){var e=new ff(a,c,d);return e.noHScroll&&(a.display.alignWidgets=!0),ee(a.doc,b,"widget",function(b){var c=b.widgets||(b.widgets=[]);if(null==e.insertAt?c.push(e):c.splice(Math.min(c.length-1,Math.max(0,e.insertAt)),0,e),e.line=b,!df(a.doc,b)){var d=Uf(b)<a.doc.scrollTop;Rf(b,b.height+hf(e)),d&&ae(a,null,e.height),a.curOp.forceUpdate=!0}return!0}),e}function lf(a,b,c,d){a.text=b,a.stateAfter&&(a.stateAfter=null),a.styles&&(a.styles=null),null!=a.order&&(a.order=null),Se(a),Te(a,c);var e=d?d(a):1;e!=a.height&&Rf(a,e)}function mf(a){a.parent=null,Se(a)}function nf(a,b){if(a)for(;;){var c=a.match(/(?:^|\s+)line-(background-)?(\S+)/);if(!c)break;a=a.slice(0,c.index)+a.slice(c.index+c[0].length);var d=c[1]?"bgClass":"textClass";null==b[d]?b[d]=c[2]:new RegExp("(?:^|s)"+c[2]+"(?:$|s)").test(b[d])||(b[d]+=" "+c[2])}return a}function of(a,b){if(a.blankLine)return a.blankLine(b);if(a.innerMode){var c=w.innerMode(a,b);return c.mode.blankLine?c.mode.blankLine(c.state):void 0}}function pf(a,b,c){for(var d=0;10>d;d++){var e=a.token(b,c);if(b.pos>b.start)return e}throw new Error("Mode "+a.name+" failed to advance stream.")}function qf(a,b,c,d,e,f,g){var h=c.flattenSpans;null==h&&(h=a.options.flattenSpans);var l,i=0,j=null,k=new ze(b,a.options.tabSize);for(""==b&&nf(of(c,d),f);!k.eol();){if(k.pos>a.options.maxHighlightLength?(h=!1,g&&tf(a,b,d,k.pos),k.pos=b.length,l=null):l=nf(pf(c,k,d),f),a.options.addModeClass){var m=w.innerMode(c,d).mode.name;m&&(l="m-"+(l?m+" "+l:m))}h&&j==l||(i<k.start&&e(k.start,j),i=k.start,j=l),k.start=k.pos}for(;i<k.pos;){var n=Math.min(k.pos,i+5e4);e(n,j),i=n}}function rf(a,b,c,d){var e=[a.state.modeGen],f={};qf(a,b.text,a.doc.mode,c,function(a,b){e.push(a,b)},f,d);for(var g=0;g<a.state.overlays.length;++g){var h=a.state.overlays[g],i=1,j=0;qf(a,b.text,h.mode,!0,function(a,b){for(var c=i;a>j;){var d=e[i];d>a&&e.splice(i,1,a,e[i+1],d),i+=2,j=Math.min(a,d)}if(b)if(h.opaque)e.splice(c,i-c,a,"cm-overlay "+b),i=c+2;else for(;i>c;c+=2){var f=e[c+1];e[c+1]=(f?f+" ":"")+"cm-overlay "+b}},f)}return{styles:e,classes:f.bgClass||f.textClass?f:null}}function sf(a,b){if(!b.styles||b.styles[0]!=a.state.modeGen){var c=rf(a,b,b.stateAfter=Xb(a,Sf(b)));b.styles=c.styles,c.classes?b.styleClasses=c.classes:b.styleClasses&&(b.styleClasses=null)}return b.styles}function tf(a,b,c,d){var e=a.doc.mode,f=new ze(b,a.options.tabSize);for(f.start=f.pos=d||0,""==b&&of(e,c);!f.eol()&&f.pos<=a.options.maxHighlightLength;)pf(e,f,c),f.start=f.pos}function wf(a,b){if(!a||/^\s*$/.test(a))return null;var c=b.addModeClass?vf:uf;return c[a]||(c[a]=a.replace(/\S+/g,"cm-$&"))}function xf(a,b){var c=Wg("span",null,null,f?"padding-right: .1px":null),e={pre:Wg("pre",[c]),content:c,col:0,pos:0,cm:a};b.measure={};for(var g=0;g<=(b.rest?b.rest.length:0);g++){var i,h=g?b.rest[g-1]:b.line;e.pos=0,e.addToken=zf,(d||f)&&a.getOption("lineWrapping")&&(e.addToken=Af(e.addToken)),oh(a.display.measure)&&(i=Vf(h))&&(e.addToken=Bf(e.addToken,i)),e.map=[],Df(h,e,sf(a,h)),h.styleClasses&&(h.styleClasses.bgClass&&(e.bgClass=dh(h.styleClasses.bgClass,e.bgClass||"")),h.styleClasses.textClass&&(e.textClass=dh(h.styleClasses.textClass,e.textClass||""))),0==e.map.length&&e.map.push(0,0,e.content.appendChild(mh(a.display.measure))),0==g?(b.measure.map=e.map,b.measure.cache={}):((b.measure.maps||(b.measure.maps=[])).push(e.map),(b.measure.caches||(b.measure.caches=[])).push({}))}return rg(a,"renderLine",a,b.line,e.pre),e.pre.className&&(e.textClass=dh(e.pre.className,e.textClass||"")),e}function yf(a){var b=Wg("span","\u2022","cm-invalidchar");return b.title="\\u"+a.charCodeAt(0).toString(16),b}function zf(a,b,c,f,g,h){if(b){var i=a.cm.options.specialChars,j=!1;if(i.test(b))for(var k=document.createDocumentFragment(),l=0;;){i.lastIndex=l;var m=i.exec(b),n=m?m.index-l:b.length-l;if(n){var o=document.createTextNode(b.slice(l,l+n));d&&9>e?k.appendChild(Wg("span",[o])):k.appendChild(o),a.map.push(a.pos,a.pos+n,o),a.col+=n,a.pos+=n}if(!m)break;if(l+=n+1,"	"==m[0]){var p=a.cm.options.tabSize,q=p-a.col%p,o=k.appendChild(Wg("span",Ig(q),"cm-tab"));a.col+=q}else{var o=a.cm.options.specialCharPlaceholder(m[0]);d&&9>e?k.appendChild(Wg("span",[o])):k.appendChild(o),a.col+=1}a.map.push(a.pos,a.pos+1,o),a.pos++}else{a.col+=b.length;var k=document.createTextNode(b);a.map.push(a.pos,a.pos+b.length,k),d&&9>e&&(j=!0),a.pos+=b.length}if(c||f||g||j){var r=c||"";f&&(r+=f),g&&(r+=g);var s=Wg("span",[k],r);return h&&(s.title=h),a.content.appendChild(s)}a.content.appendChild(k)}}function Af(a){function b(a){for(var b=" ",c=0;c<a.length-2;++c)b+=c%2?" ":"\xa0";return b+=" "}return function(c,d,e,f,g,h){a(c,d.replace(/ {3,}/g,b),e,f,g,h)}}function Bf(a,b){return function(c,d,e,f,g,h){e=e?e+" cm-force-border":"cm-force-border";for(var i=c.pos,j=i+d.length;;){for(var k=0;k<b.length;k++){var l=b[k];if(l.to>i&&l.from<=i)break}if(l.to>=j)return a(c,d,e,f,g,h);a(c,d.slice(0,l.to-i),e,f,null,h),f=null,d=d.slice(l.to-i),i=l.to}}}function Cf(a,b,c,d){var e=!d&&c.widgetNode;e&&(a.map.push(a.pos,a.pos+b,e),a.content.appendChild(e)),a.pos+=b}function Df(a,b,c){var d=a.markedSpans,e=a.text,f=0;if(d)for(var k,m,n,o,p,q,h=e.length,i=0,g=1,j="",l=0;;){if(l==i){m=n=o=p="",q=null,l=1/0;for(var r=[],s=0;s<d.length;++s){var t=d[s],u=t.marker;t.from<=i&&(null==t.to||t.to>i)?(null!=t.to&&l>t.to&&(l=t.to,n=""),u.className&&(m+=" "+u.className),u.startStyle&&t.from==i&&(o+=" "+u.startStyle),u.endStyle&&t.to==l&&(n+=" "+u.endStyle),u.title&&!p&&(p=u.title),u.collapsed&&(!q||We(q.marker,u)<0)&&(q=t)):t.from>i&&l>t.from&&(l=t.from),"bookmark"==u.type&&t.from==i&&u.widgetNode&&r.push(u)}if(q&&(q.from||0)==i&&(Cf(b,(null==q.to?h+1:q.to)-i,q.marker,null==q.from),null==q.to))return;if(!q&&r.length)for(var s=0;s<r.length;++s)Cf(b,0,r[s])}if(i>=h)break;for(var v=Math.min(h,l);;){if(j){var w=i+j.length;if(!q){var x=w>v?j.slice(0,v-i):j;b.addToken(b,x,k?k+m:m,o,i+x.length==l?n:"",p)}if(w>=v){j=j.slice(v-i),i=v;break}i=w,o=""}j=e.slice(f,f=c[g++]),k=wf(c[g++],b.cm.options)}}else for(var g=1;g<c.length;g+=2)b.addToken(b,e.slice(f,f=c[g]),wf(c[g+1],b.cm.options))}function Ef(a,b){return 0==b.from.ch&&0==b.to.ch&&""==Jg(b.text)&&(!a.cm||a.cm.options.wholeLineUpdateBefore)}function Ff(a,b,c,d){function e(a){return c?c[a]:null}function f(a,c,e){lf(a,c,e,d),tg(a,"change",a,b)}var g=b.from,h=b.to,i=b.text,j=Of(a,g.line),k=Of(a,h.line),l=Jg(i),m=e(i.length-1),n=h.line-g.line;if(Ef(a,b)){for(var o=0,p=[];o<i.length-1;++o)p.push(new kf(i[o],e(o),d));f(k,k.text,m),n&&a.remove(g.line,n),p.length&&a.insert(g.line,p)}else if(j==k)if(1==i.length)f(j,j.text.slice(0,g.ch)+l+j.text.slice(h.ch),m);else{for(var p=[],o=1;o<i.length-1;++o)p.push(new kf(i[o],e(o),d));p.push(new kf(l+j.text.slice(h.ch),m,d)),f(j,j.text.slice(0,g.ch)+i[0],e(0)),a.insert(g.line+1,p)}else if(1==i.length)f(j,j.text.slice(0,g.ch)+i[0]+k.text.slice(h.ch),e(0)),a.remove(g.line+1,n);else{f(j,j.text.slice(0,g.ch)+i[0],e(0)),f(k,l+k.text.slice(h.ch),m);for(var o=1,p=[];o<i.length-1;++o)p.push(new kf(i[o],e(o),d));n>1&&a.remove(g.line+1,n-1),a.insert(g.line+1,p)}tg(a,"change",a,b)}function Gf(a){this.lines=a,this.parent=null;for(var b=0,c=0;b<a.length;++b)a[b].parent=this,c+=a[b].height;this.height=c}function Hf(a){this.children=a;for(var b=0,c=0,d=0;d<a.length;++d){var e=a[d];b+=e.chunkSize(),c+=e.height,e.parent=this}this.size=b,this.height=c,this.parent=null}function Mf(a,b,c){function d(a,e,f){if(a.linked)for(var g=0;g<a.linked.length;++g){var h=a.linked[g];if(h.doc!=e){var i=f&&h.sharedHist;(!c||i)&&(b(h.doc,i),d(h.doc,a,i))}}}d(a,null,!0)}function Nf(a,b){if(b.cm)throw new Error("This document is already in use.");a.doc=b,b.cm=a,C(a),y(a),a.options.lineWrapping||J(a),a.options.mode=b.modeOption,Qc(a)}function Of(a,b){if(b-=a.first,0>b||b>=a.size)throw new Error("There is no line "+(b+a.first)+" in the document.");for(var c=a;!c.lines;)for(var d=0;;++d){var e=c.children[d],f=e.chunkSize();if(f>b){c=e;break}b-=f}return c.lines[b]}function Pf(a,b,c){var d=[],e=b.line;return a.iter(b.line,c.line+1,function(a){var f=a.text;e==c.line&&(f=f.slice(0,c.ch)),e==b.line&&(f=f.slice(b.ch)),d.push(f),++e}),d}function Qf(a,b,c){var d=[];return a.iter(b,c,function(a){d.push(a.text)}),d}function Rf(a,b){var c=b-a.height;if(c)for(var d=a;d;d=d.parent)d.height+=c}function Sf(a){if(null==a.parent)return null;for(var b=a.parent,c=Lg(b.lines,a),d=b.parent;d;b=d,d=d.parent)for(var e=0;d.children[e]!=b;++e)c+=d.children[e].chunkSize();return c+b.first}function Tf(a,b){var c=a.first;a:do{for(var d=0;d<a.children.length;++d){var e=a.children[d],f=e.height;if(f>b){a=e;continue a}b-=f,c+=e.chunkSize()}return c}while(!a.lines);for(var d=0;d<a.lines.length;++d){var g=a.lines[d],h=g.height;if(h>b)break;b-=h}return c+d}function Uf(a){a=_e(a);for(var b=0,c=a.parent,d=0;d<c.lines.length;++d){var e=c.lines[d];if(e==a)break;b+=e.height}for(var f=c.parent;f;c=f,f=c.parent)for(var d=0;d<f.children.length;++d){var g=f.children[d];if(g==c)break;b+=g.height}return b}function Vf(a){var b=a.order;return null==b&&(b=a.order=Jh(a.text)),b}function Wf(a){this.done=[],this.undone=[],this.undoDepth=1/0,this.lastModTime=this.lastSelTime=0,this.lastOp=this.lastSelOp=null,this.lastOrigin=this.lastSelOrigin=null,this.generation=this.maxGeneration=a||1}function Xf(a,b){var c={from:pb(b.from),to:Ld(b),text:Pf(a,b.from,b.to)};return cg(a,c,b.from.line,b.to.line+1),Mf(a,function(a){cg(a,c,b.from.line,b.to.line+1)},!0),c}function Yf(a){for(;a.length;){var b=Jg(a);if(!b.ranges)break;a.pop()}}function Zf(a,b){return b?(Yf(a.done),Jg(a.done)):a.done.length&&!Jg(a.done).ranges?Jg(a.done):a.done.length>1&&!a.done[a.done.length-2].ranges?(a.done.pop(),Jg(a.done)):void 0}function $f(a,b,c,d){var e=a.history;e.undone.length=0;var g,f=+new Date;if((e.lastOp==d||e.lastOrigin==b.origin&&b.origin&&("+"==b.origin.charAt(0)&&a.cm&&e.lastModTime>f-a.cm.options.historyEventDelay||"*"==b.origin.charAt(0)))&&(g=Zf(e,e.lastOp==d))){var h=Jg(g.changes);0==ob(b.from,b.to)&&0==ob(b.from,h.to)?h.to=Ld(b):g.changes.push(Xf(a,b))}else{var i=Jg(e.done);for(i&&i.ranges||bg(a.sel,e.done),g={changes:[Xf(a,b)],generation:e.generation},e.done.push(g);e.done.length>e.undoDepth;)e.done.shift(),e.done[0].ranges||e.done.shift()}e.done.push(c),e.generation=++e.maxGeneration,e.lastModTime=e.lastSelTime=f,e.lastOp=e.lastSelOp=d,e.lastOrigin=e.lastSelOrigin=b.origin,h||rg(a,"historyAdded")}function _f(a,b,c,d){var e=b.charAt(0);return"*"==e||"+"==e&&c.ranges.length==d.ranges.length&&c.somethingSelected()==d.somethingSelected()&&new Date-a.history.lastSelTime<=(a.cm?a.cm.options.historyEventDelay:500)}function ag(a,b,c,d){var e=a.history,f=d&&d.origin;c==e.lastSelOp||f&&e.lastSelOrigin==f&&(e.lastModTime==e.lastSelTime&&e.lastOrigin==f||_f(a,f,Jg(e.done),b))?e.done[e.done.length-1]=b:bg(b,e.done),e.lastSelTime=+new Date,e.lastSelOrigin=f,e.lastSelOp=c,d&&d.clearRedo!==!1&&Yf(e.undone)}function bg(a,b){var c=Jg(b);c&&c.ranges&&c.equals(a)||b.push(a)}function cg(a,b,c,d){var e=b["spans_"+a.id],f=0;a.iter(Math.max(a.first,c),Math.min(a.first+a.size,d),function(c){c.markedSpans&&((e||(e=b["spans_"+a.id]={}))[f]=c.markedSpans),++f})}function dg(a){if(!a)return null;for(var c,b=0;b<a.length;++b)a[b].marker.explicitlyCleared?c||(c=a.slice(0,b)):c&&c.push(a[b]);return c?c.length?c:null:a}function eg(a,b){var c=b["spans_"+a.id];if(!c)return null;for(var d=0,e=[];d<b.text.length;++d)e.push(dg(c[d]));return e}function fg(a,b,c){for(var d=0,e=[];d<a.length;++d){var f=a[d];if(f.ranges)e.push(c?sb.prototype.deepCopy.call(f):f);else{var g=f.changes,h=[];e.push({changes:h});for(var i=0;i<g.length;++i){var k,j=g[i];if(h.push({from:j.from,to:j.to,text:j.text}),b)for(var l in j)(k=l.match(/^spans_(\d+)$/))&&Lg(b,Number(k[1]))>-1&&(Jg(h)[l]=j[l],delete j[l])}}}return e}function gg(a,b,c,d){c<a.line?a.line+=d:b<a.line&&(a.line=b,a.ch=0)}function hg(a,b,c,d){for(var e=0;e<a.length;++e){var f=a[e],g=!0;if(f.ranges){f.copied||(f=a[e]=f.deepCopy(),f.copied=!0);for(var h=0;h<f.ranges.length;h++)gg(f.ranges[h].anchor,b,c,d),gg(f.ranges[h].head,b,c,d)}else{for(var h=0;h<f.changes.length;++h){var i=f.changes[h];if(c<i.from.line)i.from=nb(i.from.line+d,i.from.ch),i.to=nb(i.to.line+d,i.to.ch);else if(b<=i.to.line){g=!1;break}}g||(a.splice(0,e+1),e=0)}}}function ig(a,b){var c=b.from.line,d=b.to.line,e=b.text.length-(d-c)-1;hg(a.done,c,d,e),hg(a.undone,c,d,e)}function lg(a){return null!=a.defaultPrevented?a.defaultPrevented:0==a.returnValue}function ng(a){return a.target||a.srcElement}function og(a){var b=a.which;return null==b&&(1&a.button?b=1:2&a.button?b=3:4&a.button&&(b=2)),p&&a.ctrlKey&&1==b&&(b=3),b}function tg(a,b){function f(a){return function(){a.apply(null,d)}}var c=a._handlers&&a._handlers[b];if(c){var e,d=Array.prototype.slice.call(arguments,2);zc?e=zc.delayedCallbacks:sg?e=sg:(e=sg=[],setTimeout(ug,0));for(var g=0;g<c.length;++g)e.push(f(c[g]))}}function ug(){var a=sg;sg=null;for(var b=0;b<a.length;++b)a[b]()}function vg(a,b,c){return rg(a,c||b.type,a,b),lg(b)||b.codemirrorIgnore}function wg(a){var b=a._handlers&&a._handlers.cursorActivity;if(b)for(var c=a.curOp.cursorActivityHandlers||(a.curOp.cursorActivityHandlers=[]),d=0;d<b.length;++d)-1==Lg(c,b[d])&&c.push(b[d])}function xg(a,b){var c=a._handlers&&a._handlers[b];return c&&c.length>0}function yg(a){a.prototype.on=function(a,b){pg(this,a,b)},a.prototype.off=function(a,b){qg(this,a,b)}}function Eg(){this.id=null}function Gg(a,b,c){for(var d=0,e=0;;){var f=a.indexOf("	",d);-1==f&&(f=a.length);var g=f-d;if(f==a.length||e+g>=b)return d+Math.min(g,b-e);if(e+=f-d,e+=c-e%c,d=f+1,e>=b)return d}}function Ig(a){for(;Hg.length<=a;)Hg.push(Jg(Hg)+" ");return Hg[a]}function Jg(a){return a[a.length-1]}function Lg(a,b){for(var c=0;c<a.length;++c)if(a[c]==b)return c;return-1}function Mg(a,b){for(var c=[],d=0;d<a.length;d++)c[d]=b(a[d],d);return c}function Ng(a,b){var c;if(Object.create)c=Object.create(a);else{var d=function(){};d.prototype=a,c=new d}return b&&Og(b,c),c}function Og(a,b,c){b||(b={});for(var d in a)!a.hasOwnProperty(d)||c===!1&&b.hasOwnProperty(d)||(b[d]=a[d]);return b}function Pg(a){var b=Array.prototype.slice.call(arguments,1);return function(){return a.apply(null,b)}}function Sg(a,b){return b?b.source.indexOf("\\w")>-1&&Rg(a)?!0:b.test(a):Rg(a)}function Tg(a){for(var b in a)if(a.hasOwnProperty(b)&&a[b])return!1;return!0}function Vg(a){return a.charCodeAt(0)>=768&&Ug.test(a)}function Wg(a,b,c,d){var e=document.createElement(a);if(c&&(e.className=c),d&&(e.style.cssText=d),"string"==typeof b)e.appendChild(document.createTextNode(b));else if(b)for(var f=0;f<b.length;++f)e.appendChild(b[f]);return e}function Yg(a){for(var b=a.childNodes.length;b>0;--b)a.removeChild(a.firstChild);return a}function Zg(a,b){return Yg(a).appendChild(b)}function $g(a,b){if(a.contains)return a.contains(b);for(;b=b.parentNode;)if(b==a)return!0}function _g(){return document.activeElement}function ah(a){return new RegExp("\\b"+a+"\\b\\s*")}function bh(a,b){var c=ah(b);c.test(a.className)&&(a.className=a.className.replace(c,""))}function ch(a,b){ah(b).test(a.className)||(a.className+=" "+b)}function dh(a,b){for(var c=a.split(" "),d=0;d<c.length;d++)c[d]&&!ah(c[d]).test(b)&&(b+=" "+c[d]);return b}function eh(a){if(document.body.getElementsByClassName)for(var b=document.body.getElementsByClassName("CodeMirror"),c=0;c<b.length;c++){var d=b[c].CodeMirror;d&&a(d)}}function gh(){fh||(hh(),fh=!0)}function hh(){var a;pg(window,"resize",function(){null==a&&(a=setTimeout(function(){a=null,jh=null,eh(ed)},100))}),pg(window,"blur",function(){eh(Id)})}function kh(a){if(null!=jh)return jh;var b=Wg("div",null,null,"width: 50px; height: 50px; overflow-x: scroll");return Zg(a,b),b.offsetWidth&&(jh=b.offsetHeight-b.clientHeight),jh||0}function mh(a){if(null==lh){var b=Wg("span","\u200b");Zg(a,Wg("span",[b,document.createTextNode("x")])),0!=a.firstChild.offsetHeight&&(lh=b.offsetWidth<=1&&b.offsetHeight>2&&!(d&&8>e))}return lh?Wg("span","\u200b"):Wg("span","\xa0",null,"display: inline-block; width: 1px; margin-right: -1px")}function oh(a){if(null!=nh)return nh;var b=Zg(a,document.createTextNode("A\u062eA")),c=Xg(b,0,1).getBoundingClientRect();if(!c||c.left==c.right)return!1;var d=Xg(b,1,2).getBoundingClientRect();return nh=d.right-c.right<3}function th(a){if(null!=sh)return sh;var b=Zg(a,Wg("span","x")),c=b.getBoundingClientRect(),d=Xg(b,0,1).getBoundingClientRect();return sh=Math.abs(c.left-d.left)>1}function vh(a,b,c,d){if(!a)return d(b,c,"ltr");for(var e=!1,f=0;f<a.length;++f){var g=a[f];(g.from<c&&g.to>b||b==c&&g.to==b)&&(d(Math.max(g.from,b),Math.min(g.to,c),1==g.level?"rtl":"ltr"),e=!0)}e||d(b,c,"ltr")}function wh(a){return a.level%2?a.to:a.from}function xh(a){return a.level%2?a.from:a.to}function yh(a){var b=Vf(a);return b?wh(b[0]):0}function zh(a){var b=Vf(a);return b?xh(Jg(b)):a.text.length}function Ah(a,b){var c=Of(a.doc,b),d=_e(c);d!=c&&(b=Sf(d));var e=Vf(d),f=e?e[0].level%2?zh(d):yh(d):0;return nb(b,f)}function Bh(a,b){for(var c,d=Of(a.doc,b);c=Ze(d);)d=c.find(1,!0).line,b=null;var e=Vf(d),f=e?e[0].level%2?yh(d):zh(d):d.text.length;return nb(null==b?Sf(d):b,f)}function Ch(a,b){var c=Ah(a,b.line),d=Of(a.doc,c.line),e=Vf(d);if(!e||0==e[0].level){var f=Math.max(0,d.text.search(/\S/)),g=b.line==c.line&&b.ch<=f&&b.ch;return nb(c.line,g?0:f)}return c}function Dh(a,b,c){var d=a[0].level;return b==d?!0:c==d?!1:c>b}function Fh(a,b){Eh=null;for(var d,c=0;c<a.length;++c){var e=a[c];if(e.from<b&&e.to>b)return c;if(e.from==b||e.to==b){if(null!=d)return Dh(a,e.level,a[d].level)?(e.from!=e.to&&(Eh=d),c):(e.from!=e.to&&(Eh=c),d);d=c}}return d}function Gh(a,b,c,d){if(!d)return b+c;do b+=c;while(b>0&&Vg(a.text.charAt(b)));return b}function Hh(a,b,c,d){var e=Vf(a);if(!e)return Ih(a,b,c,d);for(var f=Fh(e,b),g=e[f],h=Gh(a,b,g.level%2?-c:c,d);;){if(h>g.from&&h<g.to)return h;if(h==g.from||h==g.to)return Fh(e,h)==f?h:(g=e[f+=c],c>0==g.level%2?g.to:g.from);if(g=e[f+=c],!g)return null;h=c>0==g.level%2?Gh(a,g.to,-1,d):Gh(a,g.from,1,d)}}function Ih(a,b,c,d){var e=b+c;if(d)for(;e>0&&Vg(a.text.charAt(e));)e+=c;return 0>e||e>a.text.length?null:e}var a=/gecko\/\d/i.test(navigator.userAgent),b=/MSIE \d/.test(navigator.userAgent),c=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent),d=b||c,e=d&&(b?document.documentMode||6:c[1]),f=/WebKit\//.test(navigator.userAgent),g=f&&/Qt\/\d+\.\d+/.test(navigator.userAgent),h=/Chrome\//.test(navigator.userAgent),i=/Opera\//.test(navigator.userAgent),j=/Apple Computer/.test(navigator.vendor),k=/KHTML\//.test(navigator.userAgent),l=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(navigator.userAgent),m=/PhantomJS/.test(navigator.userAgent),n=/AppleWebKit/.test(navigator.userAgent)&&/Mobile\/\w+/.test(navigator.userAgent),o=n||/Android|webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(navigator.userAgent),p=n||/Mac/.test(navigator.platform),q=/win/i.test(navigator.platform),r=i&&navigator.userAgent.match(/Version\/(\d*\.\d*)/);r&&(r=Number(r[1])),r&&r>=15&&(i=!1,f=!0);var s=p&&(g||i&&(null==r||12.11>r)),t=a||d&&e>=9,u=!1,v=!1,nb=w.Pos=function(a,b){return this instanceof nb?(this.line=a,this.ch=b,void 0):new nb(a,b)},ob=w.cmpPos=function(a,b){return a.line-b.line||a.ch-b.ch};sb.prototype={primary:function(){return this.ranges[this.primIndex]},equals:function(a){if(a==this)return!0;if(a.primIndex!=this.primIndex||a.ranges.length!=this.ranges.length)return!1;for(var b=0;b<this.ranges.length;b++){var c=this.ranges[b],d=a.ranges[b];if(0!=ob(c.anchor,d.anchor)||0!=ob(c.head,d.head))return!1}return!0},deepCopy:function(){for(var a=[],b=0;b<this.ranges.length;b++)a[b]=new tb(pb(this.ranges[b].anchor),pb(this.ranges[b].head));return new sb(a,this.primIndex)},somethingSelected:function(){for(var a=0;a<this.ranges.length;a++)if(!this.ranges[a].empty())return!0;return!1},contains:function(a,b){b||(b=a);for(var c=0;c<this.ranges.length;c++){var d=this.ranges[c];if(ob(b,d.from())>=0&&ob(a,d.to())<=0)return c}return-1}},tb.prototype={from:function(){return rb(this.anchor,this.head)},to:function(){return qb(this.anchor,this.head)},empty:function(){return this.head.line==this.anchor.line&&this.head.ch==this.anchor.ch}};var wc,id,jd,gc={left:0,right:0,top:0,bottom:0},zc=null,Ac=0,Zc=null,pd=0,ud=0,vd=null;d?vd=-.53:a?vd=15:h?vd=-.7:j&&(vd=-1/3);var zd,Cd=null,Ld=w.changeEnd=function(a){return a.text?nb(a.from.line+a.text.length-1,Jg(a.text).length+(1==a.text.length?a.from.ch:0)):a.to};w.prototype={constructor:w,focus:function(){window.focus(),ad(this),Yc(this)},setOption:function(a,b){var c=this.options,d=c[a];(c[a]!=b||"mode"==a)&&(c[a]=b,je.hasOwnProperty(a)&&Lc(this,je[a])(this,b,d))},getOption:function(a){return this.options[a]},getDoc:function(){return this.doc},addKeyMap:function(a,b){this.state.keyMaps[b?"push":"unshift"](a)},removeKeyMap:function(a){for(var b=this.state.keyMaps,c=0;c<b.length;++c)if(b[c]==a||"string"!=typeof b[c]&&b[c].name==a)return b.splice(c,1),!0},addOverlay:Mc(function(a,b){var c=a.token?a:w.getMode(this.options,a);if(c.startState)throw new Error("Overlays may not be stateful.");this.state.overlays.push({mode:c,modeSpec:a,opaque:b&&b.opaque}),this.state.modeGen++,Qc(this)}),removeOverlay:Mc(function(a){for(var b=this.state.overlays,c=0;c<b.length;++c){var d=b[c].modeSpec;if(d==a||"string"==typeof a&&d.name==a)return b.splice(c,1),this.state.modeGen++,Qc(this),void 0}}),indentLine:Mc(function(a,b,c){"string"!=typeof b&&"number"!=typeof b&&(b=null==b?this.options.smartIndent?"smart":"prev":b?"add":"subtract"),zb(this.doc,a)&&de(this,a,b,c)}),indentSelection:Mc(function(a){for(var b=this.doc.sel.ranges,c=-1,d=0;d<b.length;d++){var e=b[d];if(e.empty())e.head.line>c&&(de(this,e.head.line,a,!0),c=e.head.line,d==this.doc.sel.primIndex&&be(this));else{var f=e.from(),g=e.to(),h=Math.max(c,f.line);c=Math.min(this.lastLine(),g.line-(g.ch?0:1))+1;for(var i=h;c>i;++i)de(this,i,a);var j=this.doc.sel.ranges;0==f.ch&&b.length==j.length&&j[d].from().ch>0&&Eb(this.doc,d,new tb(f,j[d].to()),Bg)}}}),getTokenAt:function(a,b){var c=this.doc;a=xb(c,a);for(var d=Xb(this,a.line,b),e=this.doc.mode,f=Of(c,a.line),g=new ze(f.text,this.options.tabSize);g.pos<a.ch&&!g.eol();){g.start=g.pos;var h=pf(e,g,d)}return{start:g.start,end:g.pos,string:g.current(),type:h||null,state:d}},getTokenTypeAt:function(a){a=xb(this.doc,a);var f,b=sf(this,Of(this.doc,a.line)),c=0,d=(b.length-1)/2,e=a.ch;if(0==e)f=b[2];else for(;;){var g=c+d>>1;if((g?b[2*g-1]:0)>=e)d=g;else{if(!(b[2*g+1]<e)){f=b[2*g+2];break}c=g+1}}var h=f?f.indexOf("cm-overlay "):-1;return 0>h?f:0==h?null:f.slice(0,h-1)},getModeAt:function(a){var b=this.doc.mode;return b.innerMode?w.innerMode(b,this.getTokenAt(a).state).mode:b},getHelper:function(a,b){return this.getHelpers(a,b)[0]},getHelpers:function(a,b){var c=[];if(!qe.hasOwnProperty(b))return qe;var d=qe[b],e=this.getModeAt(a);if("string"==typeof e[b])d[e[b]]&&c.push(d[e[b]]);else if(e[b])for(var f=0;f<e[b].length;f++){var g=d[e[b][f]];g&&c.push(g)}else e.helperType&&d[e.helperType]?c.push(d[e.helperType]):d[e.name]&&c.push(d[e.name]);for(var f=0;f<d._global.length;f++){var h=d._global[f];h.pred(e,this)&&-1==Lg(c,h.val)&&c.push(h.val)}return c},getStateAfter:function(a,b){var c=this.doc;return a=wb(c,null==a?c.first+c.size-1:a),Xb(this,a+1,b)},cursorCoords:function(a,b){var c,d=this.doc.sel.primary();return c=null==a?d.head:"object"==typeof a?xb(this.doc,a):a?d.from():d.to(),rc(this,c,b||"page")},charCoords:function(a,b){return qc(this,xb(this.doc,a),b||"page")},coordsChar:function(a,b){return a=pc(this,a,b||"page"),uc(this,a.left,a.top)},lineAtHeight:function(a,b){return a=pc(this,{top:a,left:0},b||"page").top,Tf(this.doc,a+this.display.viewOffset)},heightAtLine:function(a,b){var c=!1,d=this.doc.first+this.doc.size-1;a<this.doc.first?a=this.doc.first:a>d&&(a=d,c=!0);var e=Of(this.doc,a);return oc(this,e,{top:0,left:0},b||"page").top+(c?this.doc.height-Uf(e):0)},defaultTextHeight:function(){return xc(this.display)},defaultCharWidth:function(){return yc(this.display)},setGutterMarker:Mc(function(a,b,c){return ee(this.doc,a,"gutter",function(a){var d=a.gutterMarkers||(a.gutterMarkers={});return d[b]=c,!c&&Tg(d)&&(a.gutterMarkers=null),!0})}),clearGutter:Mc(function(a){var b=this,c=b.doc,d=c.first;c.iter(function(c){c.gutterMarkers&&c.gutterMarkers[a]&&(c.gutterMarkers[a]=null,Rc(b,d,"gutter"),Tg(c.gutterMarkers)&&(c.gutterMarkers=null)),++d})}),addLineWidget:Mc(function(a,b,c){return jf(this,a,b,c)}),removeLineWidget:function(a){a.clear()},lineInfo:function(a){if("number"==typeof a){if(!zb(this.doc,a))return null;var b=a;if(a=Of(this.doc,a),!a)return null}else{var b=Sf(a);if(null==b)return null}return{line:b,handle:a,text:a.text,gutterMarkers:a.gutterMarkers,textClass:a.textClass,bgClass:a.bgClass,wrapClass:a.wrapClass,widgets:a.widgets}},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(a,b,c,d,e){var f=this.display;a=rc(this,xb(this.doc,a));var g=a.bottom,h=a.left;if(b.style.position="absolute",f.sizer.appendChild(b),"over"==d)g=a.top;else if("above"==d||"near"==d){var i=Math.max(f.wrapper.clientHeight,this.doc.height),j=Math.max(f.sizer.clientWidth,f.lineSpace.clientWidth);("above"==d||a.bottom+b.offsetHeight>i)&&a.top>b.offsetHeight?g=a.top-b.offsetHeight:a.bottom+b.offsetHeight<=i&&(g=a.bottom),h+b.offsetWidth>j&&(h=j-b.offsetWidth)}b.style.top=g+"px",b.style.left=b.style.right="","right"==e?(h=f.sizer.clientWidth-b.offsetWidth,b.style.right="0px"):("left"==e?h=0:"middle"==e&&(h=(f.sizer.clientWidth-b.offsetWidth)/2),b.style.left=h+"px"),c&&$d(this,h,g,h+b.offsetWidth,g+b.offsetHeight)},triggerOnKeyDown:Mc(Dd),triggerOnKeyPress:Mc(Gd),triggerOnKeyUp:Fd,execCommand:function(a){return te.hasOwnProperty(a)?te[a](this):void 0},findPosH:function(a,b,c,d){var e=1;0>b&&(e=-1,b=-b);for(var f=0,g=xb(this.doc,a);b>f&&(g=ge(this.doc,g,e,c,d),!g.hitSide);++f);return g
+},moveH:Mc(function(a,b){var c=this;c.extendSelectionsBy(function(d){return c.display.shift||c.doc.extend||d.empty()?ge(c.doc,d.head,a,b,c.options.rtlMoveVisually):0>a?d.from():d.to()},Dg)}),deleteH:Mc(function(a,b){var c=this.doc.sel,d=this.doc;c.somethingSelected()?d.replaceSelection("",null,"+delete"):fe(this,function(c){var e=ge(d,c.head,a,b,!1);return 0>a?{from:e,to:c.head}:{from:c.head,to:e}})}),findPosV:function(a,b,c,d){var e=1,f=d;0>b&&(e=-1,b=-b);for(var g=0,h=xb(this.doc,a);b>g;++g){var i=rc(this,h,"div");if(null==f?f=i.left:i.left=f,h=he(this,i,e,c),h.hitSide)break}return h},moveV:Mc(function(a,b){var c=this,d=this.doc,e=[],f=!c.display.shift&&!d.extend&&d.sel.somethingSelected();if(d.extendSelectionsBy(function(g){if(f)return 0>a?g.from():g.to();var h=rc(c,g.head,"div");null!=g.goalColumn&&(h.left=g.goalColumn),e.push(h.left);var i=he(c,h,a,b);return"page"==b&&g==d.sel.primary()&&ae(c,null,qc(c,i,"div").top-h.top),i},Dg),e.length)for(var g=0;g<d.sel.ranges.length;g++)d.sel.ranges[g].goalColumn=e[g]}),findWordAt:function(a){var b=this.doc,c=Of(b,a.line).text,d=a.ch,e=a.ch;if(c){var f=this.getHelper(a,"wordChars");(a.xRel<0||e==c.length)&&d?--d:++e;for(var g=c.charAt(d),h=Sg(g,f)?function(a){return Sg(a,f)}:/\s/.test(g)?function(a){return/\s/.test(a)}:function(a){return!/\s/.test(a)&&!Sg(a)};d>0&&h(c.charAt(d-1));)--d;for(;e<c.length&&h(c.charAt(e));)++e}return new tb(nb(a.line,d),nb(a.line,e))},toggleOverwrite:function(a){(null==a||a!=this.state.overwrite)&&((this.state.overwrite=!this.state.overwrite)?ch(this.display.cursorDiv,"CodeMirror-overwrite"):bh(this.display.cursorDiv,"CodeMirror-overwrite"),rg(this,"overwriteToggle",this,this.state.overwrite))},hasFocus:function(){return _g()==this.display.input},scrollTo:Mc(function(a,b){(null!=a||null!=b)&&ce(this),null!=a&&(this.curOp.scrollLeft=a),null!=b&&(this.curOp.scrollTop=b)}),getScrollInfo:function(){var a=this.display.scroller,b=zg;return{left:a.scrollLeft,top:a.scrollTop,height:a.scrollHeight-b,width:a.scrollWidth-b,clientHeight:a.clientHeight-b,clientWidth:a.clientWidth-b}},scrollIntoView:Mc(function(a,b){if(null==a?(a={from:this.doc.sel.primary().head,to:null},null==b&&(b=this.options.cursorScrollMargin)):"number"==typeof a?a={from:nb(a,0),to:null}:null==a.from&&(a={from:a,to:null}),a.to||(a.to=a.from),a.margin=b||0,null!=a.from.line)ce(this),this.curOp.scrollToPos=a;else{var c=_d(this,Math.min(a.from.left,a.to.left),Math.min(a.from.top,a.to.top)-a.margin,Math.max(a.from.right,a.to.right),Math.max(a.from.bottom,a.to.bottom)+a.margin);this.scrollTo(c.scrollLeft,c.scrollTop)}}),setSize:Mc(function(a,b){function d(a){return"number"==typeof a||/^\d+$/.test(String(a))?a+"px":a}var c=this;null!=a&&(c.display.wrapper.style.width=d(a)),null!=b&&(c.display.wrapper.style.height=d(b)),c.options.lineWrapping&&kc(this);var e=c.display.viewFrom;c.doc.iter(e,c.display.viewTo,function(a){if(a.widgets)for(var b=0;b<a.widgets.length;b++)if(a.widgets[b].noHScroll){Rc(c,e,"widget");break}++e}),c.curOp.forceUpdate=!0,rg(c,"refresh",this)}),operation:function(a){return Kc(this,a)},refresh:Mc(function(){var a=this.display.cachedTextHeight;Qc(this),this.curOp.forceUpdate=!0,lc(this),this.scrollTo(this.doc.scrollLeft,this.doc.scrollTop),H(this),(null==a||Math.abs(a-xc(this.display))>.5)&&C(this),rg(this,"refresh",this)}),swapDoc:Mc(function(a){var b=this.doc;return b.cm=null,Nf(this,a),lc(this),_c(this),this.scrollTo(a.scrollLeft,a.scrollTop),this.curOp.forceScroll=!0,tg(this,"swapDoc",this,b),b}),getInputField:function(){return this.display.input},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},yg(w);var ie=w.defaults={},je=w.optionHandlers={},le=w.Init={toString:function(){return"CodeMirror.Init"}};ke("value","",function(a,b){a.setValue(b)},!0),ke("mode",null,function(a,b){a.doc.modeOption=b,y(a)},!0),ke("indentUnit",2,y,!0),ke("indentWithTabs",!1),ke("smartIndent",!0),ke("tabSize",4,function(a){z(a),lc(a),Qc(a)},!0),ke("specialChars",/[\t\u0000-\u0019\u00ad\u200b-\u200f\u2028\u2029\ufeff]/g,function(a,b){a.options.specialChars=new RegExp(b.source+(b.test("	")?"":"|	"),"g"),a.refresh()},!0),ke("specialCharPlaceholder",yf,function(a){a.refresh()},!0),ke("electricChars",!0),ke("rtlMoveVisually",!q),ke("wholeLineUpdateBefore",!0),ke("theme","default",function(a){E(a),F(a)},!0),ke("keyMap","default",D),ke("extraKeys",null),ke("lineWrapping",!1,A,!0),ke("gutters",[],function(a){K(a.options),F(a)},!0),ke("fixedGutter",!0,function(a,b){a.display.gutters.style.left=b?S(a.display)+"px":"0",a.refresh()},!0),ke("coverGutterNextToScrollbar",!1,N,!0),ke("lineNumbers",!1,function(a){K(a.options),F(a)},!0),ke("firstLineNumber",1,F,!0),ke("lineNumberFormatter",function(a){return a},F,!0),ke("showCursorWhenSelecting",!1,Qb,!0),ke("resetSelectionOnContextMenu",!0),ke("readOnly",!1,function(a,b){"nocursor"==b?(Id(a),a.display.input.blur(),a.display.disabled=!0):(a.display.disabled=!1,b||_c(a))}),ke("disableInput",!1,function(a,b){b||_c(a)},!0),ke("dragDrop",!0),ke("cursorBlinkRate",530),ke("cursorScrollMargin",0),ke("cursorHeight",1,Qb,!0),ke("singleCursorHeightPerLine",!0,Qb,!0),ke("workTime",100),ke("workDelay",100),ke("flattenSpans",!0,z,!0),ke("addModeClass",!1,z,!0),ke("pollInterval",100),ke("undoDepth",200,function(a,b){a.doc.history.undoDepth=b}),ke("historyEventDelay",1250),ke("viewportMargin",10,function(a){a.refresh()},!0),ke("maxHighlightLength",1e4,z,!0),ke("moveInputWithCursor",!0,function(a,b){b||(a.display.inputDiv.style.top=a.display.inputDiv.style.left=0)}),ke("tabindex",null,function(a,b){a.display.input.tabIndex=b||""}),ke("autofocus",null);var me=w.modes={},ne=w.mimeModes={};w.defineMode=function(a,b){if(w.defaults.mode||"null"==a||(w.defaults.mode=a),arguments.length>2){b.dependencies=[];for(var c=2;c<arguments.length;++c)b.dependencies.push(arguments[c])}me[a]=b},w.defineMIME=function(a,b){ne[a]=b},w.resolveMode=function(a){if("string"==typeof a&&ne.hasOwnProperty(a))a=ne[a];else if(a&&"string"==typeof a.name&&ne.hasOwnProperty(a.name)){var b=ne[a.name];"string"==typeof b&&(b={name:b}),a=Ng(b,a),a.name=b.name}else if("string"==typeof a&&/^[\w\-]+\/[\w\-]+\+xml$/.test(a))return w.resolveMode("application/xml");return"string"==typeof a?{name:a}:a||{name:"null"}},w.getMode=function(a,b){var b=w.resolveMode(b),c=me[b.name];if(!c)return w.getMode(a,"text/plain");var d=c(a,b);if(oe.hasOwnProperty(b.name)){var e=oe[b.name];for(var f in e)e.hasOwnProperty(f)&&(d.hasOwnProperty(f)&&(d["_"+f]=d[f]),d[f]=e[f])}if(d.name=b.name,b.helperType&&(d.helperType=b.helperType),b.modeProps)for(var f in b.modeProps)d[f]=b.modeProps[f];return d},w.defineMode("null",function(){return{token:function(a){a.skipToEnd()}}}),w.defineMIME("text/plain","null");var oe=w.modeExtensions={};w.extendMode=function(a,b){var c=oe.hasOwnProperty(a)?oe[a]:oe[a]={};Og(b,c)},w.defineExtension=function(a,b){w.prototype[a]=b},w.defineDocExtension=function(a,b){Jf.prototype[a]=b},w.defineOption=ke;var pe=[];w.defineInitHook=function(a){pe.push(a)};var qe=w.helpers={};w.registerHelper=function(a,b,c){qe.hasOwnProperty(a)||(qe[a]=w[a]={_global:[]}),qe[a][b]=c},w.registerGlobalHelper=function(a,b,c,d){w.registerHelper(a,b,d),qe[a]._global.push({pred:c,val:d})};var re=w.copyState=function(a,b){if(b===!0)return b;if(a.copyState)return a.copyState(b);var c={};for(var d in b){var e=b[d];e instanceof Array&&(e=e.concat([])),c[d]=e}return c},se=w.startState=function(a,b,c){return a.startState?a.startState(b,c):!0};w.innerMode=function(a,b){for(;a.innerMode;){var c=a.innerMode(b);if(!c||c.mode==a)break;b=c.state,a=c.mode}return c||{mode:a,state:b}};var te=w.commands={selectAll:function(a){a.setSelection(nb(a.firstLine(),0),nb(a.lastLine()),Bg)},singleSelection:function(a){a.setSelection(a.getCursor("anchor"),a.getCursor("head"),Bg)},killLine:function(a){fe(a,function(b){if(b.empty()){var c=Of(a.doc,b.head.line).text.length;return b.head.ch==c&&b.head.line<a.lastLine()?{from:b.head,to:nb(b.head.line+1,0)}:{from:b.head,to:nb(b.head.line,c)}}return{from:b.from(),to:b.to()}})},deleteLine:function(a){fe(a,function(b){return{from:nb(b.from().line,0),to:xb(a.doc,nb(b.to().line+1,0))}})},delLineLeft:function(a){fe(a,function(a){return{from:nb(a.from().line,0),to:a.from()}})},delWrappedLineLeft:function(a){fe(a,function(b){var c=a.charCoords(b.head,"div").top+5,d=a.coordsChar({left:0,top:c},"div");return{from:d,to:b.from()}})},delWrappedLineRight:function(a){fe(a,function(b){var c=a.charCoords(b.head,"div").top+5,d=a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:c},"div");return{from:b.from(),to:d}})},undo:function(a){a.undo()},redo:function(a){a.redo()},undoSelection:function(a){a.undoSelection()},redoSelection:function(a){a.redoSelection()},goDocStart:function(a){a.extendSelection(nb(a.firstLine(),0))},goDocEnd:function(a){a.extendSelection(nb(a.lastLine()))},goLineStart:function(a){a.extendSelectionsBy(function(b){return Ah(a,b.head.line)},{origin:"+move",bias:1})},goLineStartSmart:function(a){a.extendSelectionsBy(function(b){return Ch(a,b.head)},{origin:"+move",bias:1})},goLineEnd:function(a){a.extendSelectionsBy(function(b){return Bh(a,b.head.line)},{origin:"+move",bias:-1})},goLineRight:function(a){a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,"div").top+5;return a.coordsChar({left:a.display.lineDiv.offsetWidth+100,top:c},"div")},Dg)},goLineLeft:function(a){a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,"div").top+5;return a.coordsChar({left:0,top:c},"div")},Dg)},goLineLeftSmart:function(a){a.extendSelectionsBy(function(b){var c=a.charCoords(b.head,"div").top+5,d=a.coordsChar({left:0,top:c},"div");return d.ch<a.getLine(d.line).search(/\S/)?Ch(a,b.head):d},Dg)},goLineUp:function(a){a.moveV(-1,"line")},goLineDown:function(a){a.moveV(1,"line")},goPageUp:function(a){a.moveV(-1,"page")},goPageDown:function(a){a.moveV(1,"page")},goCharLeft:function(a){a.moveH(-1,"char")},goCharRight:function(a){a.moveH(1,"char")},goColumnLeft:function(a){a.moveH(-1,"column")},goColumnRight:function(a){a.moveH(1,"column")},goWordLeft:function(a){a.moveH(-1,"word")},goGroupRight:function(a){a.moveH(1,"group")},goGroupLeft:function(a){a.moveH(-1,"group")},goWordRight:function(a){a.moveH(1,"word")},delCharBefore:function(a){a.deleteH(-1,"char")},delCharAfter:function(a){a.deleteH(1,"char")},delWordBefore:function(a){a.deleteH(-1,"word")},delWordAfter:function(a){a.deleteH(1,"word")},delGroupBefore:function(a){a.deleteH(-1,"group")},delGroupAfter:function(a){a.deleteH(1,"group")},indentAuto:function(a){a.indentSelection("smart")},indentMore:function(a){a.indentSelection("add")},indentLess:function(a){a.indentSelection("subtract")},insertTab:function(a){a.replaceSelection("	")},insertSoftTab:function(a){for(var b=[],c=a.listSelections(),d=a.options.tabSize,e=0;e<c.length;e++){var f=c[e].from(),g=Fg(a.getLine(f.line),f.ch,d);b.push(new Array(d-g%d+1).join(" "))}a.replaceSelections(b)},defaultTab:function(a){a.somethingSelected()?a.indentSelection("add"):a.execCommand("insertTab")},transposeChars:function(a){Kc(a,function(){for(var b=a.listSelections(),c=[],d=0;d<b.length;d++){var e=b[d].head,f=Of(a.doc,e.line).text;if(f)if(e.ch==f.length&&(e=new nb(e.line,e.ch-1)),e.ch>0)e=new nb(e.line,e.ch+1),a.replaceRange(f.charAt(e.ch-1)+f.charAt(e.ch-2),nb(e.line,e.ch-2),e,"+transpose");else if(e.line>a.doc.first){var g=Of(a.doc,e.line-1).text;g&&a.replaceRange(f.charAt(0)+"\n"+g.charAt(g.length-1),nb(e.line-1,g.length-1),nb(e.line,1),"+transpose")}c.push(new tb(e,e))}a.setSelections(c)})},newlineAndIndent:function(a){Kc(a,function(){for(var b=a.listSelections().length,c=0;b>c;c++){var d=a.listSelections()[c];a.replaceRange("\n",d.anchor,d.head,"+input"),a.indentLine(d.from().line+1,null,!0),be(a)}})},toggleOverwrite:function(a){a.toggleOverwrite()}},ue=w.keyMap={};ue.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},ue.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-Up":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Down":"goDocEnd","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},ue.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection",fallthrough:["basic","emacsy"]},ue.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars"},ue["default"]=p?ue.macDefault:ue.pcDefault;var we=w.lookupKey=function(a,b,c){function d(b){b=ve(b);var e=b[a];if(e===!1)return"stop";if(null!=e&&c(e))return!0;if(b.nofallthrough)return"stop";var f=b.fallthrough;if(null==f)return!1;if("[object Array]"!=Object.prototype.toString.call(f))return d(f);for(var g=0;g<f.length;++g){var h=d(f[g]);if(h)return h}return!1}for(var e=0;e<b.length;++e){var f=d(b[e]);if(f)return"stop"!=f}},xe=w.isModifierKey=function(a){var b=uh[a.keyCode];return"Ctrl"==b||"Alt"==b||"Shift"==b||"Mod"==b},ye=w.keyName=function(a,b){if(i&&34==a.keyCode&&a["char"])return!1;var c=uh[a.keyCode];return null==c||a.altGraphKey?!1:(a.altKey&&(c="Alt-"+c),(s?a.metaKey:a.ctrlKey)&&(c="Ctrl-"+c),(s?a.ctrlKey:a.metaKey)&&(c="Cmd-"+c),!b&&a.shiftKey&&(c="Shift-"+c),c)};w.fromTextArea=function(a,b){function d(){a.value=i.getValue()}if(b||(b={}),b.value=a.value,!b.tabindex&&a.tabindex&&(b.tabindex=a.tabindex),!b.placeholder&&a.placeholder&&(b.placeholder=a.placeholder),null==b.autofocus){var c=_g();b.autofocus=c==a||null!=a.getAttribute("autofocus")&&c==document.body}if(a.form&&(pg(a.form,"submit",d),!b.leaveSubmitMethodAlone)){var e=a.form,f=e.submit;try{var g=e.submit=function(){d(),e.submit=f,e.submit(),e.submit=g}}catch(h){}}a.style.display="none";var i=w(function(b){a.parentNode.insertBefore(b,a.nextSibling)},b);return i.save=d,i.getTextArea=function(){return a},i.toTextArea=function(){d(),a.parentNode.removeChild(i.getWrapperElement()),a.style.display="",a.form&&(qg(a.form,"submit",d),"function"==typeof a.form.submit&&(a.form.submit=f))},i};var ze=w.StringStream=function(a,b){this.pos=this.start=0,this.string=a,this.tabSize=b||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0};ze.prototype={eol:function(){return this.pos>=this.string.length},sol:function(){return this.pos==this.lineStart},peek:function(){return this.string.charAt(this.pos)||void 0},next:function(){return this.pos<this.string.length?this.string.charAt(this.pos++):void 0},eat:function(a){var b=this.string.charAt(this.pos);if("string"==typeof a)var c=b==a;else var c=b&&(a.test?a.test(b):a(b));return c?(++this.pos,b):void 0},eatWhile:function(a){for(var b=this.pos;this.eat(a););return this.pos>b},eatSpace:function(){for(var a=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>a},skipToEnd:function(){this.pos=this.string.length},skipTo:function(a){var b=this.string.indexOf(a,this.pos);return b>-1?(this.pos=b,!0):void 0},backUp:function(a){this.pos-=a},column:function(){return this.lastColumnPos<this.start&&(this.lastColumnValue=Fg(this.string,this.start,this.tabSize,this.lastColumnPos,this.lastColumnValue),this.lastColumnPos=this.start),this.lastColumnValue-(this.lineStart?Fg(this.string,this.lineStart,this.tabSize):0)},indentation:function(){return Fg(this.string,null,this.tabSize)-(this.lineStart?Fg(this.string,this.lineStart,this.tabSize):0)},match:function(a,b,c){if("string"!=typeof a){var f=this.string.slice(this.pos).match(a);return f&&f.index>0?null:(f&&b!==!1&&(this.pos+=f[0].length),f)}var d=function(a){return c?a.toLowerCase():a},e=this.string.substr(this.pos,a.length);return d(e)==d(a)?(b!==!1&&(this.pos+=a.length),!0):void 0},current:function(){return this.string.slice(this.start,this.pos)},hideFirstChars:function(a,b){this.lineStart+=a;try{return b()}finally{this.lineStart-=a}}};var Ae=w.TextMarker=function(a,b){this.lines=[],this.type=b,this.doc=a};yg(Ae),Ae.prototype.clear=function(){if(!this.explicitlyCleared){var a=this.doc.cm,b=a&&!a.curOp;if(b&&Bc(a),xg(this,"clear")){var c=this.find();c&&tg(this,"clear",c.from,c.to)}for(var d=null,e=null,f=0;f<this.lines.length;++f){var g=this.lines[f],h=Je(g.markedSpans,this);a&&!this.collapsed?Rc(a,Sf(g),"text"):a&&(null!=h.to&&(e=Sf(g)),null!=h.from&&(d=Sf(g))),g.markedSpans=Ke(g.markedSpans,h),null==h.from&&this.collapsed&&!df(this.doc,g)&&a&&Rf(g,xc(a.display))}if(a&&this.collapsed&&!a.options.lineWrapping)for(var f=0;f<this.lines.length;++f){var i=_e(this.lines[f]),j=I(i);j>a.display.maxLineLength&&(a.display.maxLine=i,a.display.maxLineLength=j,a.display.maxLineChanged=!0)}null!=d&&a&&this.collapsed&&Qc(a,d,e+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,a&&Lb(a.doc)),a&&tg(a,"markerCleared",a,this),b&&Dc(a),this.parent&&this.parent.clear()}},Ae.prototype.find=function(a,b){null==a&&"bookmark"==this.type&&(a=1);for(var c,d,e=0;e<this.lines.length;++e){var f=this.lines[e],g=Je(f.markedSpans,this);if(null!=g.from&&(c=nb(b?f:Sf(f),g.from),-1==a))return c;if(null!=g.to&&(d=nb(b?f:Sf(f),g.to),1==a))return d}return c&&{from:c,to:d}},Ae.prototype.changed=function(){var a=this.find(-1,!0),b=this,c=this.doc.cm;a&&c&&Kc(c,function(){var d=a.line,e=Sf(a.line),f=dc(c,e);if(f&&(jc(f),c.curOp.selectionChanged=c.curOp.forceUpdate=!0),c.curOp.updateMaxLine=!0,!df(b.doc,d)&&null!=b.height){var g=b.height;b.height=null;var h=hf(b)-g;h&&Rf(d,d.height+h)}})},Ae.prototype.attachLine=function(a){if(!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;b.maybeHiddenMarkers&&-1!=Lg(b.maybeHiddenMarkers,this)||(b.maybeUnhiddenMarkers||(b.maybeUnhiddenMarkers=[])).push(this)}this.lines.push(a)},Ae.prototype.detachLine=function(a){if(this.lines.splice(Lg(this.lines,a),1),!this.lines.length&&this.doc.cm){var b=this.doc.cm.curOp;(b.maybeHiddenMarkers||(b.maybeHiddenMarkers=[])).push(this)}};var Be=0,De=w.SharedTextMarker=function(a,b){this.markers=a,this.primary=b;for(var c=0;c<a.length;++c)a[c].parent=this};yg(De),De.prototype.clear=function(){if(!this.explicitlyCleared){this.explicitlyCleared=!0;for(var a=0;a<this.markers.length;++a)this.markers[a].clear();tg(this,"clear")}},De.prototype.find=function(a,b){return this.primary.find(a,b)};var ff=w.LineWidget=function(a,b,c){if(c)for(var d in c)c.hasOwnProperty(d)&&(this[d]=c[d]);this.cm=a,this.node=b};yg(ff),ff.prototype.clear=function(){var a=this.cm,b=this.line.widgets,c=this.line,d=Sf(c);if(null!=d&&b){for(var e=0;e<b.length;++e)b[e]==this&&b.splice(e--,1);b.length||(c.widgets=null);var f=hf(this);Kc(a,function(){gf(a,c,-f),Rc(a,d,"widget"),Rf(c,Math.max(0,c.height-f))})}},ff.prototype.changed=function(){var a=this.height,b=this.cm,c=this.line;this.height=null;var d=hf(this)-a;d&&Kc(b,function(){b.curOp.forceUpdate=!0,gf(b,c,d),Rf(c,c.height+d)})};var kf=w.Line=function(a,b,c){this.text=a,Te(this,b),this.height=c?c(this):1};yg(kf),kf.prototype.lineNo=function(){return Sf(this)};var uf={},vf={};Gf.prototype={chunkSize:function(){return this.lines.length},removeInner:function(a,b){for(var c=a,d=a+b;d>c;++c){var e=this.lines[c];this.height-=e.height,mf(e),tg(e,"delete")}this.lines.splice(a,b)},collapse:function(a){a.push.apply(a,this.lines)},insertInner:function(a,b,c){this.height+=c,this.lines=this.lines.slice(0,a).concat(b).concat(this.lines.slice(a));for(var d=0;d<b.length;++d)b[d].parent=this},iterN:function(a,b,c){for(var d=a+b;d>a;++a)if(c(this.lines[a]))return!0}},Hf.prototype={chunkSize:function(){return this.size},removeInner:function(a,b){this.size-=b;for(var c=0;c<this.children.length;++c){var d=this.children[c],e=d.chunkSize();if(e>a){var f=Math.min(b,e-a),g=d.height;if(d.removeInner(a,f),this.height-=g-d.height,e==f&&(this.children.splice(c--,1),d.parent=null),0==(b-=f))break;a=0}else a-=e}if(this.size-b<25&&(this.children.length>1||!(this.children[0]instanceof Gf))){var h=[];this.collapse(h),this.children=[new Gf(h)],this.children[0].parent=this}},collapse:function(a){for(var b=0;b<this.children.length;++b)this.children[b].collapse(a)},insertInner:function(a,b,c){this.size+=b.length,this.height+=c;for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(f>=a){if(e.insertInner(a,b,c),e.lines&&e.lines.length>50){for(;e.lines.length>50;){var g=e.lines.splice(e.lines.length-25,25),h=new Gf(g);e.height-=h.height,this.children.splice(d+1,0,h),h.parent=this}this.maybeSpill()}break}a-=f}},maybeSpill:function(){if(!(this.children.length<=10)){var a=this;do{var b=a.children.splice(a.children.length-5,5),c=new Hf(b);if(a.parent){a.size-=c.size,a.height-=c.height;var e=Lg(a.parent.children,a);a.parent.children.splice(e+1,0,c)}else{var d=new Hf(a.children);d.parent=a,a.children=[d,c],a=d}c.parent=a.parent}while(a.children.length>10);a.parent.maybeSpill()}},iterN:function(a,b,c){for(var d=0;d<this.children.length;++d){var e=this.children[d],f=e.chunkSize();if(f>a){var g=Math.min(b,f-a);if(e.iterN(a,g,c))return!0;if(0==(b-=g))break;a=0}else a-=f}}};var If=0,Jf=w.Doc=function(a,b,c){if(!(this instanceof Jf))return new Jf(a,b,c);null==c&&(c=0),Hf.call(this,[new Gf([new kf("",null)])]),this.first=c,this.scrollTop=this.scrollLeft=0,this.cantEdit=!1,this.cleanGeneration=1,this.frontier=c;var d=nb(c,0);this.sel=vb(d),this.history=new Wf(null),this.id=++If,this.modeOption=b,"string"==typeof a&&(a=ph(a)),Ff(this,{from:d,to:d,text:a}),Ib(this,vb(d),Bg)};Jf.prototype=Ng(Hf.prototype,{constructor:Jf,iter:function(a,b,c){c?this.iterN(a-this.first,b-a,c):this.iterN(this.first,this.first+this.size,a)},insert:function(a,b){for(var c=0,d=0;d<b.length;++d)c+=b[d].height;this.insertInner(a-this.first,b,c)},remove:function(a,b){this.removeInner(a-this.first,b)},getValue:function(a){var b=Qf(this,this.first,this.first+this.size);return a===!1?b:b.join(a||"\n")},setValue:Nc(function(a){var b=nb(this.first,0),c=this.first+this.size-1;Rd(this,{from:b,to:nb(c,Of(this,c).text.length),text:ph(a),origin:"setValue"},!0),Ib(this,vb(b))}),replaceRange:function(a,b,c,d){b=xb(this,b),c=c?xb(this,c):b,Xd(this,a,b,c,d)},getRange:function(a,b,c){var d=Pf(this,xb(this,a),xb(this,b));return c===!1?d:d.join(c||"\n")},getLine:function(a){var b=this.getLineHandle(a);return b&&b.text},getLineHandle:function(a){return zb(this,a)?Of(this,a):void 0},getLineNumber:function(a){return Sf(a)},getLineHandleVisualStart:function(a){return"number"==typeof a&&(a=Of(this,a)),_e(a)},lineCount:function(){return this.size},firstLine:function(){return this.first},lastLine:function(){return this.first+this.size-1},clipPos:function(a){return xb(this,a)},getCursor:function(a){var c,b=this.sel.primary();return c=null==a||"head"==a?b.head:"anchor"==a?b.anchor:"end"==a||"to"==a||a===!1?b.to():b.from()},listSelections:function(){return this.sel.ranges},somethingSelected:function(){return this.sel.somethingSelected()},setCursor:Nc(function(a,b,c){Fb(this,xb(this,"number"==typeof a?nb(a,b||0):a),null,c)}),setSelection:Nc(function(a,b,c){Fb(this,xb(this,a),xb(this,b||a),c)}),extendSelection:Nc(function(a,b,c){Cb(this,xb(this,a),b&&xb(this,b),c)}),extendSelections:Nc(function(a,b){Db(this,Ab(this,a,b))}),extendSelectionsBy:Nc(function(a,b){Db(this,Mg(this.sel.ranges,a),b)}),setSelections:Nc(function(a,b,c){if(a.length){for(var d=0,e=[];d<a.length;d++)e[d]=new tb(xb(this,a[d].anchor),xb(this,a[d].head));null==b&&(b=Math.min(a.length-1,this.sel.primIndex)),Ib(this,ub(e,b),c)}}),addSelection:Nc(function(a,b,c){var d=this.sel.ranges.slice(0);d.push(new tb(xb(this,a),xb(this,b||a))),Ib(this,ub(d,d.length-1),c)}),getSelection:function(a){for(var c,b=this.sel.ranges,d=0;d<b.length;d++){var e=Pf(this,b[d].from(),b[d].to());c=c?c.concat(e):e}return a===!1?c:c.join(a||"\n")},getSelections:function(a){for(var b=[],c=this.sel.ranges,d=0;d<c.length;d++){var e=Pf(this,c[d].from(),c[d].to());a!==!1&&(e=e.join(a||"\n")),b[d]=e}return b},replaceSelection:function(a,b,c){for(var d=[],e=0;e<this.sel.ranges.length;e++)d[e]=a;this.replaceSelections(d,b,c||"+input")},replaceSelections:Nc(function(a,b,c){for(var d=[],e=this.sel,f=0;f<e.ranges.length;f++){var g=e.ranges[f];d[f]={from:g.from(),to:g.to(),text:ph(a[f]),origin:c}}for(var h=b&&"end"!=b&&Pd(this,d,b),f=d.length-1;f>=0;f--)Rd(this,d[f]);h?Hb(this,h):this.cm&&be(this.cm)}),undo:Nc(function(){Td(this,"undo")}),redo:Nc(function(){Td(this,"redo")}),undoSelection:Nc(function(){Td(this,"undo",!0)}),redoSelection:Nc(function(){Td(this,"redo",!0)}),setExtending:function(a){this.extend=a},getExtending:function(){return this.extend},historySize:function(){for(var a=this.history,b=0,c=0,d=0;d<a.done.length;d++)a.done[d].ranges||++b;for(var d=0;d<a.undone.length;d++)a.undone[d].ranges||++c;return{undo:b,redo:c}},clearHistory:function(){this.history=new Wf(this.history.maxGeneration)},markClean:function(){this.cleanGeneration=this.changeGeneration(!0)},changeGeneration:function(a){return a&&(this.history.lastOp=this.history.lastSelOp=this.history.lastOrigin=null),this.history.generation},isClean:function(a){return this.history.generation==(a||this.cleanGeneration)},getHistory:function(){return{done:fg(this.history.done),undone:fg(this.history.undone)}},setHistory:function(a){var b=this.history=new Wf(this.history.maxGeneration);b.done=fg(a.done.slice(0),null,!0),b.undone=fg(a.undone.slice(0),null,!0)},addLineClass:Nc(function(a,b,c){return ee(this,a,"class",function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass";if(a[d]){if(new RegExp("(?:^|\\s)"+c+"(?:$|\\s)").test(a[d]))return!1;a[d]+=" "+c}else a[d]=c;return!0})}),removeLineClass:Nc(function(a,b,c){return ee(this,a,"class",function(a){var d="text"==b?"textClass":"background"==b?"bgClass":"wrapClass",e=a[d];if(!e)return!1;if(null==c)a[d]=null;else{var f=e.match(new RegExp("(?:^|\\s+)"+c+"(?:$|\\s+)"));if(!f)return!1;var g=f.index+f[0].length;a[d]=e.slice(0,f.index)+(f.index&&g!=e.length?" ":"")+e.slice(g)||null}return!0})}),markText:function(a,b,c){return Ce(this,xb(this,a),xb(this,b),c,"range")},setBookmark:function(a,b){var c={replacedWith:b&&(null==b.nodeType?b.widget:b),insertLeft:b&&b.insertLeft,clearWhenEmpty:!1,shared:b&&b.shared};return a=xb(this,a),Ce(this,a,a,c,"bookmark")},findMarksAt:function(a){a=xb(this,a);var b=[],c=Of(this,a.line).markedSpans;if(c)for(var d=0;d<c.length;++d){var e=c[d];(null==e.from||e.from<=a.ch)&&(null==e.to||e.to>=a.ch)&&b.push(e.marker.parent||e.marker)}return b},findMarks:function(a,b,c){a=xb(this,a),b=xb(this,b);var d=[],e=a.line;return this.iter(a.line,b.line+1,function(f){var g=f.markedSpans;if(g)for(var h=0;h<g.length;h++){var i=g[h];e==a.line&&a.ch>i.to||null==i.from&&e!=a.line||e==b.line&&i.from>b.ch||c&&!c(i.marker)||d.push(i.marker.parent||i.marker)}++e}),d},getAllMarks:function(){var a=[];return this.iter(function(b){var c=b.markedSpans;if(c)for(var d=0;d<c.length;++d)null!=c[d].from&&a.push(c[d].marker)}),a},posFromIndex:function(a){var b,c=this.first;return this.iter(function(d){var e=d.text.length+1;return e>a?(b=a,!0):(a-=e,++c,void 0)}),xb(this,nb(c,b))},indexFromPos:function(a){a=xb(this,a);var b=a.ch;return a.line<this.first||a.ch<0?0:(this.iter(this.first,a.line,function(a){b+=a.text.length+1}),b)},copy:function(a){var b=new Jf(Qf(this,this.first,this.first+this.size),this.modeOption,this.first);return b.scrollTop=this.scrollTop,b.scrollLeft=this.scrollLeft,b.sel=this.sel,b.extend=!1,a&&(b.history.undoDepth=this.history.undoDepth,b.setHistory(this.getHistory())),b},linkedDoc:function(a){a||(a={});var b=this.first,c=this.first+this.size;null!=a.from&&a.from>b&&(b=a.from),null!=a.to&&a.to<c&&(c=a.to);var d=new Jf(Qf(this,b,c),a.mode||this.modeOption,b);return a.sharedHist&&(d.history=this.history),(this.linked||(this.linked=[])).push({doc:d,sharedHist:a.sharedHist}),d.linked=[{doc:this,isParent:!0,sharedHist:a.sharedHist}],Ge(d,Fe(this)),d},unlinkDoc:function(a){if(a instanceof w&&(a=a.doc),this.linked)for(var b=0;b<this.linked.length;++b){var c=this.linked[b];if(c.doc==a){this.linked.splice(b,1),a.unlinkDoc(this),He(Fe(this));break}}if(a.history==this.history){var d=[a.id];Mf(a,function(a){d.push(a.id)},!0),a.history=new Wf(null),a.history.done=fg(this.history.done,d),a.history.undone=fg(this.history.undone,d)}},iterLinkedDocs:function(a){Mf(this,a)},getMode:function(){return this.mode},getEditor:function(){return this.cm}}),Jf.prototype.eachLine=Jf.prototype.iter;var Kf="iter insert remove copy getEditor".split(" ");for(var Lf in Jf.prototype)Jf.prototype.hasOwnProperty(Lf)&&Lg(Kf,Lf)<0&&(w.prototype[Lf]=function(a){return function(){return a.apply(this.doc,arguments)}}(Jf.prototype[Lf]));yg(Jf);var jg=w.e_preventDefault=function(a){a.preventDefault?a.preventDefault():a.returnValue=!1},kg=w.e_stopPropagation=function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0},mg=w.e_stop=function(a){jg(a),kg(a)},pg=w.on=function(a,b,c){if(a.addEventListener)a.addEventListener(b,c,!1);else if(a.attachEvent)a.attachEvent("on"+b,c);else{var d=a._handlers||(a._handlers={}),e=d[b]||(d[b]=[]);e.push(c)}},qg=w.off=function(a,b,c){if(a.removeEventListener)a.removeEventListener(b,c,!1);else if(a.detachEvent)a.detachEvent("on"+b,c);else{var d=a._handlers&&a._handlers[b];if(!d)return;for(var e=0;e<d.length;++e)if(d[e]==c){d.splice(e,1);break}}},rg=w.signal=function(a,b){var c=a._handlers&&a._handlers[b];if(c)for(var d=Array.prototype.slice.call(arguments,2),e=0;e<c.length;++e)c[e].apply(null,d)},sg=null,zg=30,Ag=w.Pass={toString:function(){return"CodeMirror.Pass"}},Bg={scroll:!1},Cg={origin:"*mouse"},Dg={origin:"+move"};Eg.prototype.set=function(a,b){clearTimeout(this.id),this.id=setTimeout(b,a)};var Fg=w.countColumn=function(a,b,c,d,e){null==b&&(b=a.search(/[^\s\u00a0]/),-1==b&&(b=a.length));for(var f=d||0,g=e||0;;){var h=a.indexOf("	",f);if(0>h||h>=b)return g+(b-f);g+=h-f,g+=c-g%c,f=h+1}},Hg=[""],Kg=function(a){a.select()};n?Kg=function(a){a.selectionStart=0,a.selectionEnd=a.value.length}:d&&(Kg=function(a){try{a.select()}catch(b){}}),[].indexOf&&(Lg=function(a,b){return a.indexOf(b)}),[].map&&(Mg=function(a,b){return a.map(b)});var Xg,Qg=/[\u00df\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/,Rg=w.isWordChar=function(a){return/\w/.test(a)||a>"\x80"&&(a.toUpperCase()!=a.toLowerCase()||Qg.test(a))},Ug=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;
+Xg=document.createRange?function(a,b,c){var d=document.createRange();return d.setEnd(a,c),d.setStart(a,b),d}:function(a,b,c){var d=document.body.createTextRange();return d.moveToElementText(a.parentNode),d.collapse(!0),d.moveEnd("character",c),d.moveStart("character",b),d},d&&11>e&&(_g=function(){try{return document.activeElement}catch(a){return document.body}});var jh,lh,nh,fh=!1,ih=function(){if(d&&9>e)return!1;var a=Wg("div");return"draggable"in a||"dragDrop"in a}(),ph=w.splitLines=3!="\n\nb".split(/\n/).length?function(a){for(var b=0,c=[],d=a.length;d>=b;){var e=a.indexOf("\n",b);-1==e&&(e=a.length);var f=a.slice(b,"\r"==a.charAt(e-1)?e-1:e),g=f.indexOf("\r");-1!=g?(c.push(f.slice(0,g)),b+=g+1):(c.push(f),b=e+1)}return c}:function(a){return a.split(/\r\n?|\n/)},qh=window.getSelection?function(a){try{return a.selectionStart!=a.selectionEnd}catch(b){return!1}}:function(a){try{var b=a.ownerDocument.selection.createRange()}catch(c){}return b&&b.parentElement()==a?0!=b.compareEndPoints("StartToEnd",b):!1},rh=function(){var a=Wg("div");return"oncopy"in a?!0:(a.setAttribute("oncopy","return;"),"function"==typeof a.oncopy)}(),sh=null,uh={3:"Enter",8:"Backspace",9:"Tab",13:"Enter",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"CapsLock",27:"Esc",32:"Space",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"Left",38:"Up",39:"Right",40:"Down",44:"PrintScrn",45:"Insert",46:"Delete",59:";",61:"=",91:"Mod",92:"Mod",93:"Mod",107:"=",109:"-",127:"Delete",173:"-",186:";",187:"=",188:",",189:"-",190:".",191:"/",192:"`",219:"[",220:"\\",221:"]",222:"'",63232:"Up",63233:"Down",63234:"Left",63235:"Right",63272:"Delete",63273:"Home",63275:"End",63276:"PageUp",63277:"PageDown",63302:"Insert"};w.keyNames=uh,function(){for(var a=0;10>a;a++)uh[a+48]=uh[a+96]=String(a);for(var a=65;90>=a;a++)uh[a]=String.fromCharCode(a);for(var a=1;12>=a;a++)uh[a+111]=uh[a+63235]="F"+a}();var Eh,Jh=function(){function c(c){return 247>=c?a.charAt(c):c>=1424&&1524>=c?"R":c>=1536&&1773>=c?b.charAt(c-1536):c>=1774&&2220>=c?"r":c>=8192&&8203>=c?"w":8204==c?"b":"L"}function j(a,b,c){this.level=a,this.from=b,this.to=c}var a="bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN",b="rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm",d=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,e=/[stwN]/,f=/[LRr]/,g=/[Lb1n]/,h=/[1n]/,i="L";return function(a){if(!d.test(a))return!1;for(var m,b=a.length,k=[],l=0;b>l;++l)k.push(m=c(a.charCodeAt(l)));for(var l=0,n=i;b>l;++l){var m=k[l];"m"==m?k[l]=n:n=m}for(var l=0,o=i;b>l;++l){var m=k[l];"1"==m&&"r"==o?k[l]="n":f.test(m)&&(o=m,"r"==m&&(k[l]="R"))}for(var l=1,n=k[0];b-1>l;++l){var m=k[l];"+"==m&&"1"==n&&"1"==k[l+1]?k[l]="1":","!=m||n!=k[l+1]||"1"!=n&&"n"!=n||(k[l]=n),n=m}for(var l=0;b>l;++l){var m=k[l];if(","==m)k[l]="N";else if("%"==m){for(var p=l+1;b>p&&"%"==k[p];++p);for(var q=l&&"!"==k[l-1]||b>p&&"1"==k[p]?"1":"N",r=l;p>r;++r)k[r]=q;l=p-1}}for(var l=0,o=i;b>l;++l){var m=k[l];"L"==o&&"1"==m?k[l]="L":f.test(m)&&(o=m)}for(var l=0;b>l;++l)if(e.test(k[l])){for(var p=l+1;b>p&&e.test(k[p]);++p);for(var s="L"==(l?k[l-1]:i),t="L"==(b>p?k[p]:i),q=s||t?"L":"R",r=l;p>r;++r)k[r]=q;l=p-1}for(var v,u=[],l=0;b>l;)if(g.test(k[l])){var w=l;for(++l;b>l&&g.test(k[l]);++l);u.push(new j(0,w,l))}else{var x=l,y=u.length;for(++l;b>l&&"L"!=k[l];++l);for(var r=x;l>r;)if(h.test(k[r])){r>x&&u.splice(y,0,new j(1,x,r));var z=r;for(++r;l>r&&h.test(k[r]);++r);u.splice(y,0,new j(2,z,r)),x=r}else++r;l>x&&u.splice(y,0,new j(1,x,l))}return 1==u[0].level&&(v=a.match(/^\s+/))&&(u[0].from=v[0].length,u.unshift(new j(0,0,v[0].length))),1==Jg(u).level&&(v=a.match(/\s+$/))&&(Jg(u).to-=v[0].length,u.push(new j(0,b-v[0].length,b))),u[0].level!=Jg(u).level&&u.push(new j(u[0].level,b,b)),u}}();return w.version="4.6.0",w}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a){for(var b={},c=a.split(" "),d=0;d<c.length;++d)b[c[d]]=!0;return b}function d(a,b){if(!b.startOfLine)return!1;for(;;){if(!a.skipTo("\\")){a.skipToEnd(),b.tokenize=null;break}if(a.next(),a.eol()){b.tokenize=d;break}}return"meta"}function e(a,b){if(a.backUp(1),a.match(/(R|u8R|uR|UR|LR)/)){var c=a.match(/"([^\s\\()]{0,16})\(/);return c?(b.cpp11RawStringDelim=c[1],b.tokenize=g,g(a,b)):!1}return a.match(/(u8|u|U|L)/)?a.match(/["']/,!1)?"string":!1:(a.next(),!1)}function f(a,b){for(var c;null!=(c=a.next());)if('"'==c&&!a.eat('"')){b.tokenize=null;break}return"string"}function g(a,b){var c=b.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&"),d=a.match(new RegExp(".*?\\)"+c+'"'));return d?b.tokenize=null:a.skipToEnd(),"string"}function h(b,c){function e(a){if(a)for(var b in a)a.hasOwnProperty(b)&&d.push(b)}"string"==typeof b&&(b=[b]);var d=[];e(c.keywords),e(c.builtin),e(c.atoms),d.length&&(c.helperType=b[0],a.registerHelper("hintWords",b[0],d));for(var f=0;f<b.length;++f)a.defineMIME(b[f],c)}a.defineMode("clike",function(b,c){function o(a,b){var c=a.next();if(k[c]){var d=k[c](a,b);if(d!==!1)return d}if('"'==c||"'"==c)return b.tokenize=p(c),b.tokenize(a,b);if(/[\[\]{}\(\),;\:\.]/.test(c))return n=c,null;if(/\d/.test(c))return a.eatWhile(/[\w\.]/),"number";if("/"==c){if(a.eat("*"))return b.tokenize=q,q(a,b);if(a.eat("/"))return a.skipToEnd(),"comment"}if(m.test(c))return a.eatWhile(m),"operator";a.eatWhile(/[\w\$_]/);var e=a.current();return g.propertyIsEnumerable(e)?(i.propertyIsEnumerable(e)&&(n="newstatement"),"keyword"):h.propertyIsEnumerable(e)?(i.propertyIsEnumerable(e)&&(n="newstatement"),"builtin"):j.propertyIsEnumerable(e)?"atom":"variable"}function p(a){return function(b,c){for(var e,d=!1,f=!1;null!=(e=b.next());){if(e==a&&!d){f=!0;break}d=!d&&"\\"==e}return(f||!d&&!l)&&(c.tokenize=null),"string"}}function q(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=null;break}c="*"==d}return"comment"}function r(a,b,c,d,e){this.indented=a,this.column=b,this.type=c,this.align=d,this.prev=e}function s(a,b,c){var d=a.indented;return a.context&&"statement"==a.context.type&&(d=a.context.indented),a.context=new r(d,b,c,null,a.context)}function t(a){var b=a.context.type;return(")"==b||"]"==b||"}"==b)&&(a.indented=a.context.indented),a.context=a.context.prev}var n,d=b.indentUnit,e=c.statementIndentUnit||d,f=c.dontAlignCalls,g=c.keywords||{},h=c.builtin||{},i=c.blockKeywords||{},j=c.atoms||{},k=c.hooks||{},l=c.multiLineStrings,m=/[+\-*&%=<>!?|\/]/;return{startState:function(a){return{tokenize:null,context:new r((a||0)-d,0,"top",!1),indented:0,startOfLine:!0}},token:function(a,b){var c=b.context;if(a.sol()&&(null==c.align&&(c.align=!1),b.indented=a.indentation(),b.startOfLine=!0),a.eatSpace())return null;n=null;var d=(b.tokenize||o)(a,b);if("comment"==d||"meta"==d)return d;if(null==c.align&&(c.align=!0),";"!=n&&":"!=n&&","!=n||"statement"!=c.type)if("{"==n)s(b,a.column(),"}");else if("["==n)s(b,a.column(),"]");else if("("==n)s(b,a.column(),")");else if("}"==n){for(;"statement"==c.type;)c=t(b);for("}"==c.type&&(c=t(b));"statement"==c.type;)c=t(b)}else n==c.type?t(b):(("}"==c.type||"top"==c.type)&&";"!=n||"statement"==c.type&&"newstatement"==n)&&s(b,a.column(),"statement");else t(b);return b.startOfLine=!1,d},indent:function(b,c){if(b.tokenize!=o&&null!=b.tokenize)return a.Pass;var g=b.context,h=c&&c.charAt(0);"statement"==g.type&&"}"==h&&(g=g.prev);var i=h==g.type;return"statement"==g.type?g.indented+("{"==h?0:e):!g.align||f&&")"==g.type?")"!=g.type||i?g.indented+(i?0:d):g.indented+e:g.column+(i?0:1)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}});var c="auto if break int case long char register continue return default short do sizeof double static else struct entry switch extern typedef float union for unsigned goto while enum void const signed volatile";h(["text/x-csrc","text/x-c","text/x-chdr"],{name:"clike",keywords:b(c),blockKeywords:b("case do else for if switch while struct"),atoms:b("null"),hooks:{"#":d},modeProps:{fold:["brace","include"]}}),h(["text/x-c++src","text/x-c++hdr"],{name:"clike",keywords:b(c+" asm dynamic_cast namespace reinterpret_cast try bool explicit new "+"static_cast typeid catch operator template typename class friend private "+"this using const_cast inline public throw virtual delete mutable protected "+"wchar_t alignas alignof constexpr decltype nullptr noexcept thread_local final "+"static_assert override"),blockKeywords:b("catch class do else finally for if struct switch try while"),atoms:b("true false null"),hooks:{"#":d,u:e,U:e,L:e,R:e},modeProps:{fold:["brace","include"]}}),h("text/x-java",{name:"clike",keywords:b("abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implements import instanceof int interface long native new package private protected public return short static strictfp super switch synchronized this throw throws transient try void volatile while"),blockKeywords:b("catch class do else finally for if switch try while"),atoms:b("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}},modeProps:{fold:["brace","import"]}}),h("text/x-csharp",{name:"clike",keywords:b("abstract as base break case catch checked class const continue default delegate do else enum event explicit extern finally fixed for foreach goto if implicit in interface internal is lock namespace new operator out override params private protected public readonly ref return sealed sizeof stackalloc static struct switch this throw try typeof unchecked unsafe using virtual void volatile while add alias ascending descending dynamic from get global group into join let orderby partial remove select set value var yield"),blockKeywords:b("catch class do else finally for foreach if struct switch try while"),builtin:b("Boolean Byte Char DateTime DateTimeOffset Decimal Double Guid Int16 Int32 Int64 Object SByte Single String TimeSpan UInt16 UInt32 UInt64 bool byte char decimal double short int long object sbyte float string ushort uint ulong"),atoms:b("true false null"),hooks:{"@":function(a,b){return a.eat('"')?(b.tokenize=f,f(a,b)):(a.eatWhile(/[\w\$_]/),"meta")}}}),h("text/x-scala",{name:"clike",keywords:b("abstract case catch class def do else extends false final finally for forSome if implicit import lazy match new null object override package private protected return sealed super this throw trait try trye type val var while with yield _ : = => <- <: <% >: # @ assert assume require print println printf readLine readBoolean readByte readShort readChar readInt readLong readFloat readDouble AnyVal App Application Array BufferedIterator BigDecimal BigInt Char Console Either Enumeration Equiv Error Exception Fractional Function IndexedSeq Integral Iterable Iterator List Map Numeric Nil NotNull Option Ordered Ordering PartialFunction PartialOrdering Product Proxy Range Responder Seq Serializable Set Specializable Stream StringBuilder StringContext Symbol Throwable Traversable TraversableOnce Tuple Unit Vector :: #:: Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void"),multiLineStrings:!0,blockKeywords:b("catch class do else finally for forSome if match switch try while"),atoms:b("true false null"),hooks:{"@":function(a){return a.eatWhile(/[\w\$_]/),"meta"}}}),h(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:b("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4 sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadowconst attribute uniform varying break continue discard return for while do if else struct in out inout"),blockKeywords:b("for while do if else struct"),builtin:b("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smootstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:b("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragColor gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),hooks:{"#":d},modeProps:{fold:["brace","include"]}}),h("text/x-nesc",{name:"clike",keywords:b(c+"as atomic async call command component components configuration event generic "+"implementation includes interface module new norace nx_struct nx_union post provides "+"signal task uses abstract extends"),blockKeywords:b("case do else for if switch while struct"),atoms:b("null"),hooks:{"#":d},modeProps:{fold:["brace","include"]}})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";function b(a){for(var b={},c=0;c<a.length;++c)b[a[c]]=!0;return b}function r(a,b){for(var d,c=!1;null!=(d=a.next());){if(c&&"/"==d){b.tokenize=null;break}c="*"==d}return["comment","comment"]}function s(a,b){return a.skipTo("-->")?(a.match("-->"),b.tokenize=null):a.skipToEnd(),["comment","comment"]}a.defineMode("css",function(b,c){function p(a,b){return n=b,a}function q(a,b){var c=a.next();if(e[c]){var d=e[c](a,b);if(d!==!1)return d}return"@"==c?(a.eatWhile(/[\w\\\-]/),p("def",a.current())):"="==c||("~"==c||"|"==c)&&a.eat("=")?p(null,"compare"):'"'==c||"'"==c?(b.tokenize=r(c),b.tokenize(a,b)):"#"==c?(a.eatWhile(/[\w\\\-]/),p("atom","hash")):"!"==c?(a.match(/^\s*\w*/),p("keyword","important")):/\d/.test(c)||"."==c&&a.eat(/\d/)?(a.eatWhile(/[\w.%]/),p("number","unit")):"-"!==c?/[,+>*\/]/.test(c)?p(null,"select-op"):"."==c&&a.match(/^-?[_a-z][_a-z0-9-]*/i)?p("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(c)?p(null,c):"u"==c&&a.match("rl(")?(a.backUp(1),b.tokenize=s,p("property","word")):/[\w\\\-]/.test(c)?(a.eatWhile(/[\w\\\-]/),p("property","word")):p(null,null):/[\d.]/.test(a.peek())?(a.eatWhile(/[\w.%]/),p("number","unit")):a.match(/^\w+-/)?p("meta","meta"):void 0}function r(a){return function(b,c){for(var e,d=!1;null!=(e=b.next());){if(e==a&&!d){")"==a&&b.backUp(1);break}d=!d&&"\\"==e}return(e==a||!d&&")"!=a)&&(c.tokenize=null),p("string","string")}}function s(a,b){return a.next(),b.tokenize=a.match(/\s*[\"\')]/,!1)?null:r(")"),p(null,"(")}function t(a,b,c){this.type=a,this.indent=b,this.prev=c}function u(a,b,c){return a.context=new t(c,b.indentation()+d,a.context),c}function v(a){return a.context=a.context.prev,a.context.type}function w(a,b,c){return z[c.context.type](a,b,c)}function x(a,b,c,d){for(var e=d||1;e>0;e--)c.context=c.context.prev;return w(a,b,c)}function y(a){var b=a.current().toLowerCase();o=k.hasOwnProperty(b)?"atom":j.hasOwnProperty(b)?"keyword":"variable"}c.propertyKeywords||(c=a.resolveMode("text/css"));var n,o,d=b.indentUnit,e=c.tokenHooks,f=c.mediaTypes||{},g=c.mediaFeatures||{},h=c.propertyKeywords||{},i=c.nonStandardPropertyKeywords||{},j=c.colorKeywords||{},k=c.valueKeywords||{},l=c.fontProperties||{},m=c.allowNested,z={};return z.top=function(a,b,c){if("{"==a)return u(c,b,"block");if("}"==a&&c.context.prev)return v(c);if("@media"==a)return u(c,b,"media");if("@font-face"==a)return"font_face_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/.test(a))return"keyframes";if(a&&"@"==a.charAt(0))return u(c,b,"at");if("hash"==a)o="builtin";else if("word"==a)o="tag";else{if("variable-definition"==a)return"maybeprop";if("interpolation"==a)return u(c,b,"interpolation");if(":"==a)return"pseudo";if(m&&"("==a)return u(c,b,"parens")}return c.context.type},z.block=function(a,b,c){if("word"==a){var d=b.current().toLowerCase();return h.hasOwnProperty(d)?(o="property","maybeprop"):i.hasOwnProperty(d)?(o="string-2","maybeprop"):m?(o=b.match(/^\s*:/,!1)?"property":"tag","block"):(o+=" error","maybeprop")}return"meta"==a?"block":m||"hash"!=a&&"qualifier"!=a?z.top(a,b,c):(o="error","block")},z.maybeprop=function(a,b,c){return":"==a?u(c,b,"prop"):w(a,b,c)},z.prop=function(a,b,c){if(";"==a)return v(c);if("{"==a&&m)return u(c,b,"propBlock");if("}"==a||"{"==a)return x(a,b,c);if("("==a)return u(c,b,"parens");if("hash"!=a||/^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/.test(b.current())){if("word"==a)y(b);else if("interpolation"==a)return u(c,b,"interpolation")}else o+=" error";return"prop"},z.propBlock=function(a,b,c){return"}"==a?v(c):"word"==a?(o="property","maybeprop"):c.context.type},z.parens=function(a,b,c){return"{"==a||"}"==a?x(a,b,c):")"==a?v(c):"("==a?u(c,b,"parens"):("word"==a&&y(b),"parens")},z.pseudo=function(a,b,c){return"word"==a?(o="variable-3",c.context.type):w(a,b,c)},z.media=function(a,b,c){if("("==a)return u(c,b,"media_parens");if("}"==a)return x(a,b,c);if("{"==a)return v(c)&&u(c,b,m?"block":"top");if("word"==a){var d=b.current().toLowerCase();o="only"==d||"not"==d||"and"==d?"keyword":f.hasOwnProperty(d)?"attribute":g.hasOwnProperty(d)?"property":"error"}return c.context.type},z.media_parens=function(a,b,c){return")"==a?v(c):"{"==a||"}"==a?x(a,b,c,2):z.media(a,b,c)},z.font_face_before=function(a,b,c){return"{"==a?u(c,b,"font_face"):w(a,b,c)},z.font_face=function(a,b,c){return"}"==a?v(c):"word"==a?(o=l.hasOwnProperty(b.current().toLowerCase())?"property":"error","maybeprop"):"font_face"},z.keyframes=function(a,b,c){return"word"==a?(o="variable","keyframes"):"{"==a?u(c,b,"top"):w(a,b,c)},z.at=function(a,b,c){return";"==a?v(c):"{"==a||"}"==a?x(a,b,c):("word"==a?o="tag":"hash"==a&&(o="builtin"),"at")},z.interpolation=function(a,b,c){return"}"==a?v(c):"{"==a||";"==a?x(a,b,c):("variable"!=a&&(o="error"),"interpolation")},{startState:function(a){return{tokenize:null,state:"top",context:new t("top",a||0,null)}},token:function(a,b){if(!b.tokenize&&a.eatSpace())return null;var c=(b.tokenize||q)(a,b);return c&&"object"==typeof c&&(n=c[1],c=c[0]),o=c,b.state=z[b.state](n,a,b),o},indent:function(a,b){var c=a.context,e=b&&b.charAt(0),f=c.indent;return"prop"!=c.type||"}"!=e&&")"!=e||(c=c.prev),!c.prev||("}"!=e||"block"!=c.type&&"top"!=c.type&&"interpolation"!=c.type&&"font_face"!=c.type)&&(")"!=e||"parens"!=c.type&&"media_parens"!=c.type)&&("{"!=e||"at"!=c.type&&"media"!=c.type)||(f=c.indent-d,c=c.prev),f},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",fold:"brace"}});var c=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],d=b(c),e=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid"],f=b(e),g=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-position","grid-auto-rows","grid-column","grid-column-end","grid-column-start","grid-row","grid-row-end","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marker-offset","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],h=b(g),i=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],j=b(i),k=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],l=b(k),m=["above","absolute","activeborder","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","auto","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","column","compact","condensed","contain","content","content-box","context-menu","continuous","copy","cover","crop","cross","crosshair","currentcolor","cursive","dashed","decimal","decimal-leading-zero","default","default-button","destination-atop","destination-in","destination-out","destination-over","devanagari","disc","discard","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ew-resize","expanded","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","footnotes","forwards","from","geometricPrecision","georgian","graytext","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-table","inset","inside","intrinsic","invert","italic","justify","kannada","katakana","katakana-iroha","keep-all","khmer","landscape","lao","large","larger","left","level","lighter","line-through","linear","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","malayalam","match","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","nw-resize","nwse-resize","oblique","octal","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","round","row-resize","rtl","run-in","running","s-resize","sans-serif","scroll","scrollbar","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","semi-condensed","semi-expanded","separate","serif","show","sidama","single","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","solid","somali","source-atop","source-in","source-out","source-over","space","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","transparent","ultra-condensed","ultra-expanded","underline","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","x-large","x-small","xor","xx-large","xx-small"],n=b(m),o=["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"],p=b(o),q=c.concat(e).concat(g).concat(i).concat(k).concat(m);
+a.registerHelper("hintWords","css",q),a.defineMIME("text/css",{mediaTypes:d,mediaFeatures:f,propertyKeywords:h,nonStandardPropertyKeywords:j,colorKeywords:l,valueKeywords:n,fontProperties:p,tokenHooks:{"<":function(a,b){return a.match("!--")?(b.tokenize=s,s(a,b)):!1},"/":function(a,b){return a.eat("*")?(b.tokenize=r,r(a,b)):!1}},name:"css"}),a.defineMIME("text/x-scss",{mediaTypes:d,mediaFeatures:f,propertyKeywords:h,nonStandardPropertyKeywords:j,colorKeywords:l,valueKeywords:n,fontProperties:p,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=r,r(a,b)):["operator","operator"]},":":function(a){return a.match(/\s*\{/)?[null,"{"]:!1},$:function(a){return a.match(/^[\w-]+/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(a){return a.eat("{")?[null,"interpolation"]:!1}},name:"css",helperType:"scss"}),a.defineMIME("text/x-less",{mediaTypes:d,mediaFeatures:f,propertyKeywords:h,nonStandardPropertyKeywords:j,colorKeywords:l,valueKeywords:n,fontProperties:p,allowNested:!0,tokenHooks:{"/":function(a,b){return a.eat("/")?(a.skipToEnd(),["comment","comment"]):a.eat("*")?(b.tokenize=r,r(a,b)):["operator","operator"]},"@":function(a){return a.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/,!1)?!1:(a.eatWhile(/[\w\\\-]/),a.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror"),require("../markdown/markdown"),require("../../addon/mode/overlay")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../markdown/markdown","../../addon/mode/overlay"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("gfm",function(b,c){function e(a){return a.code=!1,null}var d=0,f={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(a){return{code:a.code,codeBlock:a.codeBlock,ateSpace:a.ateSpace}},token:function(a,b){if(b.combineTokens=null,b.codeBlock)return a.match(/^```/)?(b.codeBlock=!1,null):(a.skipToEnd(),null);if(a.sol()&&(b.code=!1),a.sol()&&a.match(/^```/))return a.skipToEnd(),b.codeBlock=!0,null;if("`"===a.peek()){a.next();var c=a.pos;a.eatWhile("`");var e=1+a.pos-c;return b.code?e===d&&(b.code=!1):(d=e,b.code=!0),null}if(b.code)return a.next(),null;if(a.eatSpace())return b.ateSpace=!0,null;if(a.sol()||b.ateSpace){if(b.ateSpace=!1,a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?:[a-f0-9]{7,40}\b)/))return b.combineTokens=!0,"link";if(a.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return b.combineTokens=!0,"link"}return a.match(/^((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?\xab\xbb\u201c\u201d\u2018\u2019]))/i)&&"]("!=a.string.slice(a.start-2,a.start)?(b.combineTokens=!0,"link"):(a.next(),null)},blankLine:e},g={underscoresBreakWords:!1,taskLists:!0,fencedCodeBlocks:!0};for(var h in c)g[h]=c[h];return g.name="markdown",a.defineMIME("gfmBase",g),a.overlayMode(a.getMode(b,"gfmBase"),f)},"markdown")}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("htmlmixed",function(b,c){function j(a,b){var c=b.htmlState.tagName;c&&(c=c.toLowerCase());var g=d.token(a,b.htmlState);if("script"==c&&/\btag\b/.test(g)&&">"==a.current()){var h=a.string.slice(Math.max(0,a.pos-100),a.pos).match(/\btype\s*=\s*("[^"]+"|'[^']+'|\S+)[^<]*$/i);h=h?h[1]:"",h&&/[\"\']/.test(h.charAt(0))&&(h=h.slice(1,h.length-1));for(var i=0;i<f.length;++i){var j=f[i];if("string"==typeof j.matches?h==j.matches:j.matches.test(h)){j.mode&&(b.token=l,b.localMode=j.mode,b.localState=j.mode.startState&&j.mode.startState(d.indent(b.htmlState,"")));break}}}else"style"==c&&/\btag\b/.test(g)&&">"==a.current()&&(b.token=m,b.localMode=e,b.localState=e.startState(d.indent(b.htmlState,"")));return g}function k(a,b,c){var f,d=a.current(),e=d.search(b);return e>-1?a.backUp(d.length-e):(f=d.match(/<\/?$/))&&(a.backUp(d.length),a.match(b,!1)||a.match(d)),c}function l(a,b){return a.match(/^<\/\s*script\s*>/i,!1)?(b.token=j,b.localState=b.localMode=null,j(a,b)):k(a,/<\/\s*script\s*>/,b.localMode.token(a,b.localState))}function m(a,b){return a.match(/^<\/\s*style\s*>/i,!1)?(b.token=j,b.localState=b.localMode=null,j(a,b)):k(a,/<\/\s*style\s*>/,e.token(a,b.localState))}var d=a.getMode(b,{name:"xml",htmlMode:!0,multilineTagIndentFactor:c.multilineTagIndentFactor,multilineTagIndentPastTag:c.multilineTagIndentPastTag}),e=a.getMode(b,"css"),f=[],g=c&&c.scriptTypes;if(f.push({matches:/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^$/i,mode:a.getMode(b,"javascript")}),g)for(var h=0;h<g.length;++h){var i=g[h];f.push({matches:i.matches,mode:i.mode&&a.getMode(b,i.mode)})}return f.push({matches:/./,mode:a.getMode(b,"text/plain")}),{startState:function(){var a=d.startState();return{token:j,localMode:null,localState:null,htmlState:a}},copyState:function(b){if(b.localState)var c=a.copyState(b.localMode,b.localState);return{token:b.token,localMode:b.localMode,localState:c,htmlState:a.copyState(d,b.htmlState)}},token:function(a,b){return b.token(a,b)},indent:function(b,c){return!b.localMode||/^\s*<\//.test(c)?d.indent(b.htmlState,c):b.localMode.indent?b.localMode.indent(b.localState,c):a.Pass},innerMode:function(a){return{state:a.localState||a.htmlState,mode:a.localMode||d}}}},"xml","javascript","css"),a.defineMIME("text/html","htmlmixed")}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("javascript",function(b,c){function m(a){for(var c,b=!1,d=!1;null!=(c=a.next());){if(!b){if("/"==c&&!d)return;"["==c?d=!0:d&&"]"==c&&(d=!1)}b=!b&&"\\"==c}}function p(a,b,c){return n=a,o=c,b}function q(a,b){var c=a.next();if('"'==c||"'"==c)return b.tokenize=r(c),b.tokenize(a,b);if("."==c&&a.match(/^\d+(?:[eE][+\-]?\d+)?/))return p("number","number");if("."==c&&a.match(".."))return p("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(c))return p(c);if("="==c&&a.eat(">"))return p("=>","operator");if("0"==c&&a.eat(/x/i))return a.eatWhile(/[\da-f]/i),p("number","number");if(/\d/.test(c))return a.match(/^\d*(?:\.\d*)?(?:[eE][+\-]?\d+)?/),p("number","number");if("/"==c)return a.eat("*")?(b.tokenize=s,s(a,b)):a.eat("/")?(a.skipToEnd(),p("comment","comment")):"operator"==b.lastType||"keyword c"==b.lastType||"sof"==b.lastType||/^[\[{}\(,;:]$/.test(b.lastType)?(m(a),a.eatWhile(/[gimy]/),p("regexp","string-2")):(a.eatWhile(k),p("operator","operator",a.current()));if("`"==c)return b.tokenize=t,t(a,b);if("#"==c)return a.skipToEnd(),p("error","error");if(k.test(c))return a.eatWhile(k),p("operator","operator",a.current());if(i.test(c)){a.eatWhile(i);var d=a.current(),e=j.propertyIsEnumerable(d)&&j[d];return e&&"."!=b.lastType?p(e.type,e.style,d):p("variable","variable",d)}}function r(a){return function(b,c){var e,d=!1;if(f&&"@"==b.peek()&&b.match(l))return c.tokenize=q,p("jsonld-keyword","meta");for(;null!=(e=b.next())&&(e!=a||d);)d=!d&&"\\"==e;return d||(c.tokenize=q),p("string","string")}}function s(a,b){for(var d,c=!1;d=a.next();){if("/"==d&&c){b.tokenize=q;break}c="*"==d}return p("comment","comment")}function t(a,b){for(var d,c=!1;null!=(d=a.next());){if(!c&&("`"==d||"$"==d&&a.eat("{"))){b.tokenize=q;break}c=!c&&"\\"==d}return p("quasi","string-2",a.current())}function v(a,b){b.fatArrowAt&&(b.fatArrowAt=null);var c=a.string.indexOf("=>",a.start);if(!(0>c)){for(var d=0,e=!1,f=c-1;f>=0;--f){var g=a.string.charAt(f),h=u.indexOf(g);if(h>=0&&3>h){if(!d){++f;break}if(0==--d)break}else if(h>=3&&6>h)++d;else if(i.test(g))e=!0;else if(e&&!d){++f;break}}e&&!d&&(b.fatArrowAt=f)}}function x(a,b,c,d,e,f){this.indented=a,this.column=b,this.type=c,this.prev=e,this.info=f,null!=d&&(this.align=d)}function y(a,b){for(var c=a.localVars;c;c=c.next)if(c.name==b)return!0;for(var d=a.context;d;d=d.prev)for(var c=d.vars;c;c=c.next)if(c.name==b)return!0}function z(a,b,c,d,e){var f=a.cc;for(A.state=a,A.stream=e,A.marked=null,A.cc=f,A.style=b,a.lexical.hasOwnProperty("align")||(a.lexical.align=!0);;){var h=f.length?f.pop():g?L:K;if(h(c,d)){for(;f.length&&f[f.length-1].lex;)f.pop()();return A.marked?A.marked:"variable"==c&&y(a,d)?"variable-2":b}}}function B(){for(var a=arguments.length-1;a>=0;a--)A.cc.push(arguments[a])}function C(){return B.apply(null,arguments),!0}function D(a){function b(b){for(var c=b;c;c=c.next)if(c.name==a)return!0;return!1}var d=A.state;if(d.context){if(A.marked="def",b(d.localVars))return;d.localVars={name:a,next:d.localVars}}else{if(b(d.globalVars))return;c.globalVars&&(d.globalVars={name:a,next:d.globalVars})}}function F(){A.state.context={prev:A.state.context,vars:A.state.localVars},A.state.localVars=E}function G(){A.state.localVars=A.state.context.vars,A.state.context=A.state.context.prev}function H(a,b){var c=function(){var c=A.state,d=c.indented;if("stat"==c.lexical.type)d=c.lexical.indented;else for(var e=c.lexical;e&&")"==e.type&&e.align;e=e.prev)d=e.indented;c.lexical=new x(d,A.stream.column(),a,null,c.lexical,b)};return c.lex=!0,c}function I(){var a=A.state;a.lexical.prev&&(")"==a.lexical.type&&(a.indented=a.lexical.indented),a.lexical=a.lexical.prev)}function J(a){function b(c){return c==a?C():";"==a?B():C(b)}return b}function K(a,b){return"var"==a?C(H("vardef",b.length),eb,J(";"),I):"keyword a"==a?C(H("form"),L,K,I):"keyword b"==a?C(H("form"),K,I):"{"==a?C(H("}"),bb,I):";"==a?C():"if"==a?("else"==A.state.lexical.info&&A.state.cc[A.state.cc.length-1]==I&&A.state.cc.pop()(),C(H("form"),L,K,I,jb)):"function"==a?C(pb):"for"==a?C(H("form"),kb,K,I):"variable"==a?C(H("stat"),W):"switch"==a?C(H("form"),L,H("}","switch"),J("{"),bb,I,I):"case"==a?C(L,J(":")):"default"==a?C(J(":")):"catch"==a?C(H("form"),F,J("("),qb,J(")"),K,I,G):"module"==a?C(H("form"),F,vb,G,I):"class"==a?C(H("form"),rb,I):"export"==a?C(H("form"),wb,I):"import"==a?C(H("form"),xb,I):B(H("stat"),L,J(";"),I)}function L(a){return N(a,!1)}function M(a){return N(a,!0)}function N(a,b){if(A.state.fatArrowAt==A.stream.start){var c=b?V:U;if("("==a)return C(F,H(")"),_(fb,")"),I,J("=>"),c,G);if("variable"==a)return B(F,fb,J("=>"),c,G)}var d=b?R:Q;return w.hasOwnProperty(a)?C(d):"function"==a?C(pb,d):"keyword c"==a?C(b?P:O):"("==a?C(H(")"),O,Cb,J(")"),I,d):"operator"==a||"spread"==a?C(b?M:L):"["==a?C(H("]"),Ab,I,d):"{"==a?ab(Y,"}",null,d):"quasi"==a?B(S,d):C()}function O(a){return a.match(/[;\}\)\],]/)?B():B(L)}function P(a){return a.match(/[;\}\)\],]/)?B():B(M)}function Q(a,b){return","==a?C(L):R(a,b,!1)}function R(a,b,c){var d=0==c?Q:R,e=0==c?L:M;return"=>"==a?C(F,c?V:U,G):"operator"==a?/\+\+|--/.test(b)?C(d):"?"==b?C(L,J(":"),e):C(e):"quasi"==a?B(S,d):";"!=a?"("==a?ab(M,")","call",d):"."==a?C(X,d):"["==a?C(H("]"),O,J("]"),I,d):void 0:void 0}function S(a,b){return"quasi"!=a?B():"${"!=b.slice(b.length-2)?C(S):C(L,T)}function T(a){return"}"==a?(A.marked="string-2",A.state.tokenize=t,C(S)):void 0}function U(a){return v(A.stream,A.state),B("{"==a?K:L)}function V(a){return v(A.stream,A.state),B("{"==a?K:M)}function W(a){return":"==a?C(I,K):B(Q,J(";"),I)}function X(a){return"variable"==a?(A.marked="property",C()):void 0}function Y(a,b){return"variable"==a||"keyword"==A.style?(A.marked="property","get"==b||"set"==b?C(Z):C($)):"number"==a||"string"==a?(A.marked=f?"property":A.style+" property",C($)):"jsonld-keyword"==a?C($):"["==a?C(L,J("]"),$):void 0}function Z(a){return"variable"!=a?B($):(A.marked="property",C(pb))}function $(a){return":"==a?C(M):"("==a?B(pb):void 0}function _(a,b){function c(d){if(","==d){var e=A.state.lexical;return"call"==e.info&&(e.pos=(e.pos||0)+1),C(a,c)}return d==b?C():C(J(b))}return function(d){return d==b?C():B(a,c)}}function ab(a,b,c){for(var d=3;d<arguments.length;d++)A.cc.push(arguments[d]);return C(H(b,c),_(a,b),I)}function bb(a){return"}"==a?C():B(K,bb)}function cb(a){return h&&":"==a?C(db):void 0}function db(a){return"variable"==a?(A.marked="variable-3",C()):void 0}function eb(){return B(fb,cb,hb,ib)}function fb(a,b){return"variable"==a?(D(b),C()):"["==a?ab(fb,"]"):"{"==a?ab(gb,"}"):void 0}function gb(a,b){return"variable"!=a||A.stream.match(/^\s*:/,!1)?("variable"==a&&(A.marked="property"),C(J(":"),fb,hb)):(D(b),C(hb))}function hb(a,b){return"="==b?C(M):void 0}function ib(a){return","==a?C(eb):void 0}function jb(a,b){return"keyword b"==a&&"else"==b?C(H("form","else"),K,I):void 0}function kb(a){return"("==a?C(H(")"),lb,J(")"),I):void 0}function lb(a){return"var"==a?C(eb,J(";"),nb):";"==a?C(nb):"variable"==a?C(mb):B(L,J(";"),nb)}function mb(a,b){return"in"==b||"of"==b?(A.marked="keyword",C(L)):C(Q,nb)}function nb(a,b){return";"==a?C(ob):"in"==b||"of"==b?(A.marked="keyword",C(L)):B(L,J(";"),ob)}function ob(a){")"!=a&&C(L)}function pb(a,b){return"*"==b?(A.marked="keyword",C(pb)):"variable"==a?(D(b),C(pb)):"("==a?C(F,H(")"),_(qb,")"),I,K,G):void 0}function qb(a){return"spread"==a?C(qb):B(fb,cb)}function rb(a,b){return"variable"==a?(D(b),C(sb)):void 0}function sb(a,b){return"extends"==b?C(L,sb):"{"==a?C(H("}"),tb,I):void 0}function tb(a,b){return"variable"==a||"keyword"==A.style?(A.marked="property","get"==b||"set"==b?C(ub,pb,tb):C(pb,tb)):"*"==b?(A.marked="keyword",C(tb)):";"==a?C(tb):"}"==a?C():void 0}function ub(a){return"variable"!=a?B():(A.marked="property",C())}function vb(a,b){return"string"==a?C(K):"variable"==a?(D(b),C(zb)):void 0}function wb(a,b){return"*"==b?(A.marked="keyword",C(zb,J(";"))):"default"==b?(A.marked="keyword",C(L,J(";"))):B(K)}function xb(a){return"string"==a?C():B(yb,zb)}function yb(a,b){return"{"==a?ab(yb,"}"):("variable"==a&&D(b),C())}function zb(a,b){return"from"==b?(A.marked="keyword",C(L)):void 0}function Ab(a){return"]"==a?C():B(M,Bb)}function Bb(a){return"for"==a?B(Cb,J("]")):","==a?C(_(M,"]")):B(_(M,"]"))}function Cb(a){return"for"==a?C(kb,Cb):"if"==a?C(L,Cb):void 0}var n,o,d=b.indentUnit,e=c.statementIndent,f=c.jsonld,g=c.json||f,h=c.typescript,i=c.wordCharacters||/[\w$]/,j=function(){function a(a){return{type:a,style:"keyword"}}var b=a("keyword a"),c=a("keyword b"),d=a("keyword c"),e=a("operator"),f={type:"atom",style:"atom"},g={"if":a("if"),"while":b,"with":b,"else":c,"do":c,"try":c,"finally":c,"return":d,"break":d,"continue":d,"new":d,"delete":d,"throw":d,"debugger":d,"var":a("var"),"const":a("var"),let:a("var"),"function":a("function"),"catch":a("catch"),"for":a("for"),"switch":a("switch"),"case":a("case"),"default":a("default"),"in":e,"typeof":e,"instanceof":e,"true":f,"false":f,"null":f,undefined:f,NaN:f,Infinity:f,"this":a("this"),module:a("module"),"class":a("class"),"super":a("atom"),yield:d,"export":a("export"),"import":a("import"),"extends":d};if(h){var i={type:"variable",style:"variable-3"},j={"interface":a("interface"),"extends":a("extends"),constructor:a("constructor"),"public":a("public"),"private":a("private"),"protected":a("protected"),"static":a("static"),string:i,number:i,bool:i,any:i};for(var k in j)g[k]=j[k]}return g}(),k=/[+\-*&%=<>!?|~^]/,l=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/,u="([{}])",w={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,"this":!0,"jsonld-keyword":!0},A={state:null,column:null,marked:null,cc:null},E={name:"this",next:{name:"arguments"}};return I.lex=!0,{startState:function(a){var b={tokenize:q,lastType:"sof",cc:[],lexical:new x((a||0)-d,0,"block",!1),localVars:c.localVars,context:c.localVars&&{vars:c.localVars},indented:0};return c.globalVars&&"object"==typeof c.globalVars&&(b.globalVars=c.globalVars),b},token:function(a,b){if(a.sol()&&(b.lexical.hasOwnProperty("align")||(b.lexical.align=!1),b.indented=a.indentation(),v(a,b)),b.tokenize!=s&&a.eatSpace())return null;var c=b.tokenize(a,b);return"comment"==n?c:(b.lastType="operator"!=n||"++"!=o&&"--"!=o?n:"incdec",z(b,c,n,o,a))},indent:function(b,f){if(b.tokenize==s)return a.Pass;if(b.tokenize!=q)return 0;var g=f&&f.charAt(0),h=b.lexical;if(!/^\s*else\b/.test(f))for(var i=b.cc.length-1;i>=0;--i){var j=b.cc[i];if(j==I)h=h.prev;else if(j!=jb)break}"stat"==h.type&&"}"==g&&(h=h.prev),e&&")"==h.type&&"stat"==h.prev.type&&(h=h.prev);var k=h.type,l=g==k;return"vardef"==k?h.indented+("operator"==b.lastType||","==b.lastType?h.info+1:0):"form"==k&&"{"==g?h.indented:"form"==k?h.indented+d:"stat"==k?h.indented+("operator"==b.lastType||","==b.lastType?e||d:0):"switch"!=h.info||l||0==c.doubleIndentSwitch?h.align?h.column+(l?0:1):h.indented+(l?0:d):h.indented+(/^(?:case|default)\b/.test(f)?d:2*d)},electricChars:":{}",blockCommentStart:g?null:"/*",blockCommentEnd:g?null:"*/",lineComment:g?null:"//",fold:"brace",helperType:g?"json":"javascript",jsonldMode:f,jsonMode:g}}),a.registerHelper("wordChars","javascript",/[\w$]/),a.defineMIME("text/javascript","javascript"),a.defineMIME("text/ecmascript","javascript"),a.defineMIME("application/javascript","javascript"),a.defineMIME("application/x-javascript","javascript"),a.defineMIME("application/ecmascript","javascript"),a.defineMIME("application/json",{name:"javascript",json:!0}),a.defineMIME("application/x-json",{name:"javascript",json:!0}),a.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),a.defineMIME("text/typescript",{name:"javascript",typescript:!0}),a.defineMIME("application/typescript",{name:"javascript",typescript:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror",require("../xml/xml"))):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../xml/xml"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("markdown",function(b,c){function E(a,b,c){return b.f=b.inline=c,c(a,b)}function F(a,b,c){return b.f=b.block=c,c(a,b)}function G(a){return a.linkTitle=!1,a.em=!1,a.strong=!1,a.quote=0,d||a.f!=I||(a.f=M,a.block=H),a.trailingSpace=0,a.trailingSpaceNewLine=!1,a.thisLineHasContent=!1,null}function H(a,b){var d=a.sol(),e=b.list!==!1;b.list!==!1&&b.indentationDiff>=0?(b.indentationDiff<4&&(b.indentation-=b.indentationDiff),b.list=null):b.list!==!1&&b.indentation>0?(b.list=null,b.listDepth=Math.floor(b.indentation/4)):b.list!==!1&&(b.list=!1,b.listDepth=0);var f=null;if(b.indentationDiff>=4)return b.indentation-=4,a.skipToEnd(),j;if(a.eatSpace())return null;if(f=a.match(B))return b.header=f[0].length<=6?f[0].length:6,c.highlightFormatting&&(b.formatting="header"),b.f=b.inline,K(b);if(b.prevLineHasContent&&(f=a.match(C)))return b.header="="==f[0].charAt(0)?1:2,c.highlightFormatting&&(b.formatting="header"),b.f=b.inline,K(b);if(a.eat(">"))return b.indentation++,b.quote=d?1:b.quote+1,c.highlightFormatting&&(b.formatting="quote"),a.eatSpace(),K(b);if("["===a.peek())return E(a,b,Q);if(a.match(x,!0))return o;if((!b.prevLineHasContent||e)&&(a.match(y,!1)||a.match(z,!1))){var h=null;return a.match(y,!0)?h="ul":(a.match(z,!0),h="ol"),b.indentation+=4,b.list=!0,b.listDepth++,c.taskLists&&a.match(A,!1)&&(b.taskList=!0),b.f=b.inline,c.highlightFormatting&&(b.formatting=["list","list-"+h]),K(b)}return c.fencedCodeBlocks&&a.match(/^```([\w+#]*)/,!0)?(b.localMode=g(RegExp.$1),b.localMode&&(b.localState=b.localMode.startState()),F(a,b,J),c.highlightFormatting&&(b.formatting="code-block"),b.code=!0,K(b)):E(a,b,b.inline)}function I(a,b){var c=e.token(a,b.htmlState);return(d&&null===b.htmlState.tagStart&&!b.htmlState.context||b.md_inside&&a.current().indexOf(">")>-1)&&(b.f=M,b.block=H,b.htmlState=null),c}function J(a,b){if(a.sol()&&a.match(/^```/,!0)){b.localMode=b.localState=null,b.f=M,b.block=H,c.highlightFormatting&&(b.formatting="code-block"),b.code=!0;var d=K(b);return b.code=!1,d}return b.localMode?b.localMode.token(a,b.localState):(a.skipToEnd(),j)}function K(a){var b=[];if(a.formatting){b.push(q),"string"==typeof a.formatting&&(a.formatting=[a.formatting]);for(var d=0;d<a.formatting.length;d++)b.push(q+"-"+a.formatting[d]),"header"===a.formatting[d]&&b.push(q+"-"+a.formatting[d]+"-"+a.header),"quote"===a.formatting[d]&&(!c.maxBlockquoteDepth||c.maxBlockquoteDepth>=a.quote?b.push(q+"-"+a.formatting[d]+"-"+a.quote):b.push("error"))}if(a.taskOpen)return b.push("meta"),b.length?b.join(" "):null;if(a.taskClosed)return b.push("property"),b.length?b.join(" "):null;if(a.linkHref)return b.push(u),b.length?b.join(" "):null;if(a.strong&&b.push(w),a.em&&b.push(v),a.linkText&&b.push(t),a.code&&b.push(j),a.header&&(b.push(i),b.push(i+"-"+a.header)),a.quote&&(b.push(k),!c.maxBlockquoteDepth||c.maxBlockquoteDepth>=a.quote?b.push(k+"-"+a.quote):b.push(k+"-"+c.maxBlockquoteDepth)),a.list!==!1){var e=(a.listDepth-1)%3;e?1===e?b.push(m):b.push(n):b.push(l)}return a.trailingSpaceNewLine?b.push("trailing-space-new-line"):a.trailingSpace&&b.push("trailing-space-"+(a.trailingSpace%2?"a":"b")),b.length?b.join(" "):null}function L(a,b){return a.match(D,!0)?K(b):void 0}function M(b,d){var f=d.text(b,d);if("undefined"!=typeof f)return f;if(d.list)return d.list=null,K(d);if(d.taskList){var g="x"!==b.match(A,!0)[1];return g?d.taskOpen=!0:d.taskClosed=!0,c.highlightFormatting&&(d.formatting="task"),d.taskList=!1,K(d)}if(d.taskOpen=!1,d.taskClosed=!1,d.header&&b.match(/^#+$/,!0))return c.highlightFormatting&&(d.formatting="header"),K(d);var i=b.sol(),j=b.next();if("\\"===j&&(b.next(),c.highlightFormatting)){var k=K(d);return k?k+" formatting-escape":"formatting-escape"}if(d.linkTitle){d.linkTitle=!1;var l=j;"("===j&&(l=")"),l=(l+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1");var m="^\\s*(?:[^"+l+"\\\\]+|\\\\\\\\|\\\\.)"+l;if(b.match(new RegExp(m),!0))return u}if("`"===j){var n=d.formatting;c.highlightFormatting&&(d.formatting="code");var o=K(d),q=b.pos;b.eatWhile("`");var t=1+b.pos-q;return d.code?t===h?(d.code=!1,o):(d.formatting=n,K(d)):(h=t,d.code=!0,K(d))}if(d.code)return K(d);if("!"===j&&b.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return b.match(/\[[^\]]*\]/),d.inline=d.f=O,p;if("["===j&&b.match(/.*\](\(| ?\[)/,!1))return d.linkText=!0,c.highlightFormatting&&(d.formatting="link"),K(d);if("]"===j&&d.linkText){c.highlightFormatting&&(d.formatting="link");var k=K(d);return d.linkText=!1,d.inline=d.f=O,k}if("<"===j&&b.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1)){d.f=d.inline=N,c.highlightFormatting&&(d.formatting="link");var k=K(d);return k?k+=" ":k="",k+r}if("<"===j&&b.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1)){d.f=d.inline=N,c.highlightFormatting&&(d.formatting="link");var k=K(d);return k?k+=" ":k="",k+s}if("<"===j&&b.match(/^\w/,!1)){if(-1!=b.string.indexOf(">")){var v=b.string.substring(1,b.string.indexOf(">"));/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(v)&&(d.md_inside=!0)}return b.backUp(1),d.htmlState=a.startState(e),F(b,d,I)}if("<"===j&&b.match(/^\/\w*?>/))return d.md_inside=!1,"tag";var w=!1;if(!c.underscoresBreakWords&&"_"===j&&"_"!==b.peek()&&b.match(/(\w)/,!1)){var x=b.pos-2;if(x>=0){var y=b.string.charAt(x);"_"!==y&&y.match(/(\w)/,!1)&&(w=!0)}}if("*"===j||"_"===j&&!w)if(i&&" "===b.peek());else{if(d.strong===j&&b.eat(j)){c.highlightFormatting&&(d.formatting="strong");var o=K(d);return d.strong=!1,o}if(!d.strong&&b.eat(j))return d.strong=j,c.highlightFormatting&&(d.formatting="strong"),K(d);if(d.em===j){c.highlightFormatting&&(d.formatting="em");var o=K(d);return d.em=!1,o}if(!d.em)return d.em=j,c.highlightFormatting&&(d.formatting="em"),K(d)}else if(" "===j&&(b.eat("*")||b.eat("_"))){if(" "===b.peek())return K(d);b.backUp(1)}return" "===j&&(b.match(/ +$/,!1)?d.trailingSpace++:d.trailingSpace&&(d.trailingSpaceNewLine=!0)),K(d)}function N(a,b){var d=a.next();if(">"===d){b.f=b.inline=M,c.highlightFormatting&&(b.formatting="link");var e=K(b);return e?e+=" ":e="",e+r}return a.match(/^[^>]+/,!0),r}function O(a,b){if(a.eatSpace())return null;var d=a.next();return"("===d||"["===d?(b.f=b.inline=P("("===d?")":"]"),c.highlightFormatting&&(b.formatting="link-string"),b.linkHref=!0,K(b)):"error"}function P(a){return function(b,d){var e=b.next();if(e===a){d.f=d.inline=M,c.highlightFormatting&&(d.formatting="link-string");var f=K(d);return d.linkHref=!1,f}return b.match(U(a),!0)&&b.backUp(1),d.linkHref=!0,K(d)}}function Q(a,b){return a.match(/^[^\]]*\]:/,!1)?(b.f=R,a.next(),c.highlightFormatting&&(b.formatting="link"),b.linkText=!0,K(b)):E(a,b,M)}function R(a,b){if(a.match(/^\]:/,!0)){b.f=b.inline=S,c.highlightFormatting&&(b.formatting="link");var d=K(b);return b.linkText=!1,d}return a.match(/^[^\]]+/,!0),t}function S(a,b){return a.eatSpace()?null:(a.match(/^[^\s]+/,!0),void 0===a.peek()?b.linkTitle=!0:a.match(/^(?:\s+(?:"(?:[^"\\]|\\\\|\\.)+"|'(?:[^'\\]|\\\\|\\.)+'|\((?:[^)\\]|\\\\|\\.)+\)))?/,!0),b.f=b.inline=M,u)}function U(a){return T[a]||(a=(a+"").replace(/([.?*+^$[\]\\(){}|-])/g,"\\$1"),T[a]=new RegExp("^(?:[^\\\\]|\\\\.)*?("+a+")")),T[a]}var d=a.modes.hasOwnProperty("xml"),e=a.getMode(b,d?{name:"xml",htmlMode:!0}:"text/plain"),f={html:"htmlmixed",js:"javascript",json:"application/json",c:"text/x-csrc","c++":"text/x-c++src",java:"text/x-java",csharp:"text/x-csharp","c#":"text/x-csharp",scala:"text/x-scala"},g=function(){var c,g,d={},e={},h=[];for(var i in a.modes)a.modes.propertyIsEnumerable(i)&&h.push(i);for(c=0;c<h.length;c++)d[h[c]]=h[c];var j=[];for(var i in a.mimeModes)a.mimeModes.propertyIsEnumerable(i)&&j.push({mime:i,mode:a.mimeModes[i]});for(c=0;c<j.length;c++)g=j[c].mime,e[g]=j[c].mime;for(var k in f)(f[k]in d||f[k]in e)&&(d[k]=f[k]);return function(c){return d[c]?a.getMode(b,d[c]):null}}();void 0===c.highlightFormatting&&(c.highlightFormatting=!1),void 0===c.maxBlockquoteDepth&&(c.maxBlockquoteDepth=0),void 0===c.underscoresBreakWords&&(c.underscoresBreakWords=!0),void 0===c.fencedCodeBlocks&&(c.fencedCodeBlocks=!1),void 0===c.taskLists&&(c.taskLists=!1);var h=0,i="header",j="comment",k="quote",l="variable-2",m="variable-3",n="keyword",o="hr",p="tag",q="formatting",r="link",s="link",t="link",u="string",v="em",w="strong",x=/^([*\-=_])(?:\s*\1){2,}\s*$/,y=/^[*\-+]\s+/,z=/^[0-9]+\.\s+/,A=/^\[(x| )\](?=\s)/,B=/^#+/,C=/^(?:\={1,}|-{1,})$/,D=/^[^#!\[\]*_\\<>` "'(]+/,T=[],V={startState:function(){return{f:H,prevLineHasContent:!1,thisLineHasContent:!1,block:H,htmlState:null,indentation:0,inline:M,text:L,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,em:!1,strong:!1,header:0,taskList:!1,list:!1,listDepth:0,quote:0,trailingSpace:0,trailingSpaceNewLine:!1}},copyState:function(b){return{f:b.f,prevLineHasContent:b.prevLineHasContent,thisLineHasContent:b.thisLineHasContent,block:b.block,htmlState:b.htmlState&&a.copyState(e,b.htmlState),indentation:b.indentation,localMode:b.localMode,localState:b.localMode?a.copyState(b.localMode,b.localState):null,inline:b.inline,text:b.text,formatting:!1,linkTitle:b.linkTitle,em:b.em,strong:b.strong,header:b.header,taskList:b.taskList,list:b.list,listDepth:b.listDepth,quote:b.quote,trailingSpace:b.trailingSpace,trailingSpaceNewLine:b.trailingSpaceNewLine,md_inside:b.md_inside}},token:function(a,b){if(b.formatting=!1,a.sol()){var c=a.match(/^\s*$/,!0)||b.header;if(b.header=0,c)return b.prevLineHasContent=!1,G(b);b.prevLineHasContent=b.thisLineHasContent,b.thisLineHasContent=!0,b.taskList=!1,b.code=!1,b.trailingSpace=0,b.trailingSpaceNewLine=!1,b.f=b.block;var d=a.match(/^\s*/,!0)[0].replace(/\t/g,"    ").length,e=4*Math.floor((d-b.indentation)/4);e>4&&(e=4);var f=b.indentation+e;if(b.indentationDiff=f-b.indentation,b.indentation=f,d>0)return null}var g=b.f(a,b);return a.start==a.pos?this.token(a,b):g},innerMode:function(a){return a.block==I?{state:a.htmlState,mode:e}:a.localState?{state:a.localState,mode:a.localMode}:{state:a,mode:V}},blankLine:G,getType:K,fold:"markdown"};return V},"xml"),a.defineMIME("text/x-markdown","markdown")}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";a.defineMode("xml",function(b,c){function k(a,b){function c(c){return b.tokenize=c,c(a,b)}var d=a.next();if("<"==d)return a.eat("!")?a.eat("[")?a.match("CDATA[")?c(n("atom","]]>")):null:a.match("--")?c(n("comment","-->")):a.match("DOCTYPE",!0,!0)?(a.eatWhile(/[\w\._\-]/),c(o(1))):null:a.eat("?")?(a.eatWhile(/[\w\._\-]/),b.tokenize=n("meta","?>"),"meta"):(i=a.eat("/")?"closeTag":"openTag",b.tokenize=l,"tag bracket");if("&"==d){var e;return e=a.eat("#")?a.eat("x")?a.eatWhile(/[a-fA-F\d]/)&&a.eat(";"):a.eatWhile(/[\d]/)&&a.eat(";"):a.eatWhile(/[\w\.\-:]/)&&a.eat(";"),e?"atom":"error"}return a.eatWhile(/[^&<]/),null}function l(a,b){var c=a.next();if(">"==c||"/"==c&&a.eat(">"))return b.tokenize=k,i=">"==c?"endTag":"selfcloseTag","tag bracket";if("="==c)return i="equals",null;if("<"==c){b.tokenize=k,b.state=s,b.tagName=b.tagStart=null;var d=b.tokenize(a,b);return d?d+" tag error":"tag error"}return/[\'\"]/.test(c)?(b.tokenize=m(c),b.stringStartCol=a.column(),b.tokenize(a,b)):(a.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function m(a){var b=function(b,c){for(;!b.eol();)if(b.next()==a){c.tokenize=l;break}return"string"};return b.isInAttribute=!0,b}function n(a,b){return function(c,d){for(;!c.eol();){if(c.match(b)){d.tokenize=k;break}c.next()}return a}}function o(a){return function(b,c){for(var d;null!=(d=b.next());){if("<"==d)return c.tokenize=o(a+1),c.tokenize(b,c);if(">"==d){if(1==a){c.tokenize=k;break}return c.tokenize=o(a-1),c.tokenize(b,c)}}return"meta"}}function p(a,b,c){this.prev=a.context,this.tagName=b,this.indent=a.indented,this.startOfLine=c,(g.doNotIndent.hasOwnProperty(b)||a.context&&a.context.noIndent)&&(this.noIndent=!0)}function q(a){a.context&&(a.context=a.context.prev)}function r(a,b){for(var c;;){if(!a.context)return;if(c=a.context.tagName,!g.contextGrabbers.hasOwnProperty(c)||!g.contextGrabbers[c].hasOwnProperty(b))return;q(a)}}function s(a,b,c){return"openTag"==a?(c.tagStart=b.column(),t):"closeTag"==a?u:s}function t(a,b,c){return"word"==a?(c.tagName=b.current(),j="tag",x):(j="error",t)}function u(a,b,c){if("word"==a){var d=b.current();return c.context&&c.context.tagName!=d&&g.implicitlyClosed.hasOwnProperty(c.context.tagName)&&q(c),c.context&&c.context.tagName==d?(j="tag",v):(j="tag error",w)}return j="error",w}function v(a,b,c){return"endTag"!=a?(j="error",v):(q(c),s)}function w(a,b,c){return j="error",v(a,b,c)}function x(a,b,c){if("word"==a)return j="attribute",y;if("endTag"==a||"selfcloseTag"==a){var d=c.tagName,e=c.tagStart;return c.tagName=c.tagStart=null,"selfcloseTag"==a||g.autoSelfClosers.hasOwnProperty(d)?r(c,d):(r(c,d),c.context=new p(c,d,e==c.indented)),s}return j="error",x}function y(a,b,c){return"equals"==a?z:(g.allowMissing||(j="error"),x(a,b,c))}function z(a,b,c){return"string"==a?A:"word"==a&&g.allowUnquoted?(j="string",x):(j="error",x(a,b,c))}function A(a,b,c){return"string"==a?A:x(a,b,c)}var d=b.indentUnit,e=c.multilineTagIndentFactor||1,f=c.multilineTagIndentPastTag;null==f&&(f=!0);var i,j,g=c.htmlMode?{autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0}:{autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,caseFold:!1},h=c.alignCDATA;
+return{startState:function(){return{tokenize:k,state:s,indented:0,tagName:null,tagStart:null,context:null}},token:function(a,b){if(!b.tagName&&a.sol()&&(b.indented=a.indentation()),a.eatSpace())return null;i=null;var c=b.tokenize(a,b);return(c||i)&&"comment"!=c&&(j=null,b.state=b.state(i||c,a,b),j&&(c="error"==j?c+" error":j)),c},indent:function(b,c,i){var j=b.context;if(b.tokenize.isInAttribute)return b.tagStart==b.indented?b.stringStartCol+1:b.indented+d;if(j&&j.noIndent)return a.Pass;if(b.tokenize!=l&&b.tokenize!=k)return i?i.match(/^(\s*)/)[0].length:0;if(b.tagName)return f?b.tagStart+b.tagName.length+2:b.tagStart+d*e;if(h&&/<!\[CDATA\[/.test(c))return 0;var m=c&&/^<(\/)?([\w_:\.-]*)/.exec(c);if(m&&m[1])for(;j;){if(j.tagName==m[2]){j=j.prev;break}if(!g.implicitlyClosed.hasOwnProperty(j.tagName))break;j=j.prev}else if(m)for(;j;){var n=g.contextGrabbers[j.tagName];if(!n||!n.hasOwnProperty(m[2]))break;j=j.prev}for(;j&&!j.startOfLine;)j=j.prev;return j?j.indent+d:0},electricInput:/<\/[\s\w:]+>$/,blockCommentStart:"<!--",blockCommentEnd:"-->",configuration:c.htmlMode?"html":"xml",helperType:c.htmlMode?"html":"xml"}}),a.defineMIME("text/xml","xml"),a.defineMIME("application/xml","xml"),a.mimeModes.hasOwnProperty("text/html")||a.defineMIME("text/html",{name:"xml",htmlMode:!0})}),function(a){"object"==typeof exports&&"object"==typeof module?a(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],a):a(CodeMirror)}(function(a){"use strict";a.overlayMode=function(b,c,d){return{startState:function(){return{base:a.startState(b),overlay:a.startState(c),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,lineSeen:null}},copyState:function(d){return{base:a.copyState(b,d.base),overlay:a.copyState(c,d.overlay),basePos:d.basePos,baseCur:null,overlayPos:d.overlayPos,overlayCur:null}},token:function(a,e){return(a.sol()||a.string!=e.lineSeen||Math.min(e.basePos,e.overlayPos)<a.start)&&(e.lineSeen=a.string,e.basePos=e.overlayPos=a.start),a.start==e.basePos&&(e.baseCur=b.token(a,e.base),e.basePos=a.pos),a.start==e.overlayPos&&(a.pos=a.start,e.overlayCur=c.token(a,e.overlay),e.overlayPos=a.pos),a.pos=Math.min(e.basePos,e.overlayPos),null==e.overlayCur?e.baseCur:null!=e.baseCur&&e.overlay.combineTokens||d&&null==e.overlay.combineTokens?e.baseCur+" "+e.overlayCur:e.overlayCur},indent:b.indent&&function(a,c){return b.indent(a.base,c)},electricChars:b.electricChars,innerMode:function(a){return{state:a.base,mode:b}},blankLine:function(a){b.blankLine&&b.blankLine(a.base),c.blankLine&&c.blankLine(a.overlay)}}}});
\ No newline at end of file
diff --git a/plugins/ckeditor4/markdown/js/marked.js b/plugins/ckeditor4/markdown/js/marked.js
new file mode 100755
index 0000000..142eccf
--- /dev/null
+++ b/plugins/ckeditor4/markdown/js/marked.js
@@ -0,0 +1,1272 @@
+/**
+ * marked - a markdown parser
+ * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed)
+ * https://github.com/chjj/marked
+ */
+
+;(function() {
+
+/**
+ * Block-Level Grammar
+ */
+
+var block = {
+  newline: /^\n+/,
+  code: /^( {4}[^\n]+\n*)+/,
+  fences: noop,
+  hr: /^( *[-*_]){3,} *(?:\n+|$)/,
+  heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/,
+  nptable: noop,
+  lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/,
+  blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/,
+  list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/,
+  html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/,
+  def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/,
+  table: noop,
+  paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/,
+  text: /^[^\n]+/
+};
+
+block.bullet = /(?:[*+-]|\d+\.)/;
+block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/;
+block.item = replace(block.item, 'gm')
+  (/bull/g, block.bullet)
+  ();
+
+block.list = replace(block.list)
+  (/bull/g, block.bullet)
+  ('hr', '\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))')
+  ('def', '\\n+(?=' + block.def.source + ')')
+  ();
+
+block.blockquote = replace(block.blockquote)
+  ('def', block.def)
+  ();
+
+block._tag = '(?!(?:'
+  + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code'
+  + '|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo'
+  + '|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b';
+
+block.html = replace(block.html)
+  ('comment', /<!--[\s\S]*?-->/)
+  ('closed', /<(tag)[\s\S]+?<\/\1>/)
+  ('closing', /<tag(?:"[^"]*"|'[^']*'|[^'">])*?>/)
+  (/tag/g, block._tag)
+  ();
+
+block.paragraph = replace(block.paragraph)
+  ('hr', block.hr)
+  ('heading', block.heading)
+  ('lheading', block.lheading)
+  ('blockquote', block.blockquote)
+  ('tag', '<' + block._tag)
+  ('def', block.def)
+  ();
+
+/**
+ * Normal Block Grammar
+ */
+
+block.normal = merge({}, block);
+
+/**
+ * GFM Block Grammar
+ */
+
+block.gfm = merge({}, block.normal, {
+  fences: /^ *(`{3,}|~{3,}) *(\S+)? *\n([\s\S]+?)\s*\1 *(?:\n+|$)/,
+  paragraph: /^/
+});
+
+block.gfm.paragraph = replace(block.paragraph)
+  ('(?!', '(?!'
+    + block.gfm.fences.source.replace('\\1', '\\2') + '|'
+    + block.list.source.replace('\\1', '\\3') + '|')
+  ();
+
+/**
+ * GFM + Tables Block Grammar
+ */
+
+block.tables = merge({}, block.gfm, {
+  nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/,
+  table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/
+});
+
+/**
+ * Block Lexer
+ */
+
+function Lexer(options) {
+  this.tokens = [];
+  this.tokens.links = {};
+  this.options = options || marked.defaults;
+  this.rules = block.normal;
+
+  if (this.options.gfm) {
+    if (this.options.tables) {
+      this.rules = block.tables;
+    } else {
+      this.rules = block.gfm;
+    }
+  }
+}
+
+/**
+ * Expose Block Rules
+ */
+
+Lexer.rules = block;
+
+/**
+ * Static Lex Method
+ */
+
+Lexer.lex = function(src, options) {
+  var lexer = new Lexer(options);
+  return lexer.lex(src);
+};
+
+/**
+ * Preprocessing
+ */
+
+Lexer.prototype.lex = function(src) {
+  src = src
+    .replace(/\r\n|\r/g, '\n')
+    .replace(/\t/g, '    ')
+    .replace(/\u00a0/g, ' ')
+    .replace(/\u2424/g, '\n');
+
+  return this.token(src, true);
+};
+
+/**
+ * Lexing
+ */
+
+Lexer.prototype.token = function(src, top, bq) {
+  var src = src.replace(/^ +$/gm, '')
+    , next
+    , loose
+    , cap
+    , bull
+    , b
+    , item
+    , space
+    , i
+    , l;
+
+  while (src) {
+    // newline
+    if (cap = this.rules.newline.exec(src)) {
+      src = src.substring(cap[0].length);
+      if (cap[0].length > 1) {
+        this.tokens.push({
+          type: 'space'
+        });
+      }
+    }
+
+    // code
+    if (cap = this.rules.code.exec(src)) {
+      src = src.substring(cap[0].length);
+      cap = cap[0].replace(/^ {4}/gm, '');
+      this.tokens.push({
+        type: 'code',
+        text: !this.options.pedantic
+          ? cap.replace(/\n+$/, '')
+          : cap
+      });
+      continue;
+    }
+
+    // fences (gfm)
+    if (cap = this.rules.fences.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'code',
+        lang: cap[2],
+        text: cap[3]
+      });
+      continue;
+    }
+
+    // heading
+    if (cap = this.rules.heading.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'heading',
+        depth: cap[1].length,
+        text: cap[2]
+      });
+      continue;
+    }
+
+    // table no leading pipe (gfm)
+    if (top && (cap = this.rules.nptable.exec(src))) {
+      src = src.substring(cap[0].length);
+
+      item = {
+        type: 'table',
+        header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
+        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+        cells: cap[3].replace(/\n$/, '').split('\n')
+      };
+
+      for (i = 0; i < item.align.length; i++) {
+        if (/^ *-+: *$/.test(item.align[i])) {
+          item.align[i] = 'right';
+        } else if (/^ *:-+: *$/.test(item.align[i])) {
+          item.align[i] = 'center';
+        } else if (/^ *:-+ *$/.test(item.align[i])) {
+          item.align[i] = 'left';
+        } else {
+          item.align[i] = null;
+        }
+      }
+
+      for (i = 0; i < item.cells.length; i++) {
+        item.cells[i] = item.cells[i].split(/ *\| */);
+      }
+
+      this.tokens.push(item);
+
+      continue;
+    }
+
+    // lheading
+    if (cap = this.rules.lheading.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'heading',
+        depth: cap[2] === '=' ? 1 : 2,
+        text: cap[1]
+      });
+      continue;
+    }
+
+    // hr
+    if (cap = this.rules.hr.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'hr'
+      });
+      continue;
+    }
+
+    // blockquote
+    if (cap = this.rules.blockquote.exec(src)) {
+      src = src.substring(cap[0].length);
+
+      this.tokens.push({
+        type: 'blockquote_start'
+      });
+
+      cap = cap[0].replace(/^ *> ?/gm, '');
+
+      // Pass `top` to keep the current
+      // "toplevel" state. This is exactly
+      // how markdown.pl works.
+      this.token(cap, top, true);
+
+      this.tokens.push({
+        type: 'blockquote_end'
+      });
+
+      continue;
+    }
+
+    // list
+    if (cap = this.rules.list.exec(src)) {
+      src = src.substring(cap[0].length);
+      bull = cap[2];
+
+      this.tokens.push({
+        type: 'list_start',
+        ordered: bull.length > 1
+      });
+
+      // Get each top-level item.
+      cap = cap[0].match(this.rules.item);
+
+      next = false;
+      l = cap.length;
+      i = 0;
+
+      for (; i < l; i++) {
+        item = cap[i];
+
+        // Remove the list item's bullet
+        // so it is seen as the next token.
+        space = item.length;
+        item = item.replace(/^ *([*+-]|\d+\.) +/, '');
+
+        // Outdent whatever the
+        // list item contains. Hacky.
+        if (~item.indexOf('\n ')) {
+          space -= item.length;
+          item = !this.options.pedantic
+            ? item.replace(new RegExp('^ {1,' + space + '}', 'gm'), '')
+            : item.replace(/^ {1,4}/gm, '');
+        }
+
+        // Determine whether the next list item belongs here.
+        // Backpedal if it does not belong in this list.
+        if (this.options.smartLists && i !== l - 1) {
+          b = block.bullet.exec(cap[i + 1])[0];
+          if (bull !== b && !(bull.length > 1 && b.length > 1)) {
+            src = cap.slice(i + 1).join('\n') + src;
+            i = l - 1;
+          }
+        }
+
+        // Determine whether item is loose or not.
+        // Use: /(^|\n)(?! )[^\n]+\n\n(?!\s*$)/
+        // for discount behavior.
+        loose = next || /\n\n(?!\s*$)/.test(item);
+        if (i !== l - 1) {
+          next = item.charAt(item.length - 1) === '\n';
+          if (!loose) loose = next;
+        }
+
+        this.tokens.push({
+          type: loose
+            ? 'loose_item_start'
+            : 'list_item_start'
+        });
+
+        // Recurse.
+        this.token(item, false, bq);
+
+        this.tokens.push({
+          type: 'list_item_end'
+        });
+      }
+
+      this.tokens.push({
+        type: 'list_end'
+      });
+
+      continue;
+    }
+
+    // html
+    if (cap = this.rules.html.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: this.options.sanitize
+          ? 'paragraph'
+          : 'html',
+        pre: cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style',
+        text: cap[0]
+      });
+      continue;
+    }
+
+    // def
+    if ((!bq && top) && (cap = this.rules.def.exec(src))) {
+      src = src.substring(cap[0].length);
+      this.tokens.links[cap[1].toLowerCase()] = {
+        href: cap[2],
+        title: cap[3]
+      };
+      continue;
+    }
+
+    // table (gfm)
+    if (top && (cap = this.rules.table.exec(src))) {
+      src = src.substring(cap[0].length);
+
+      item = {
+        type: 'table',
+        header: cap[1].replace(/^ *| *\| *$/g, '').split(/ *\| */),
+        align: cap[2].replace(/^ *|\| *$/g, '').split(/ *\| */),
+        cells: cap[3].replace(/(?: *\| *)?\n$/, '').split('\n')
+      };
+
+      for (i = 0; i < item.align.length; i++) {
+        if (/^ *-+: *$/.test(item.align[i])) {
+          item.align[i] = 'right';
+        } else if (/^ *:-+: *$/.test(item.align[i])) {
+          item.align[i] = 'center';
+        } else if (/^ *:-+ *$/.test(item.align[i])) {
+          item.align[i] = 'left';
+        } else {
+          item.align[i] = null;
+        }
+      }
+
+      for (i = 0; i < item.cells.length; i++) {
+        item.cells[i] = item.cells[i]
+          .replace(/^ *\| *| *\| *$/g, '')
+          .split(/ *\| */);
+      }
+
+      this.tokens.push(item);
+
+      continue;
+    }
+
+    // top-level paragraph
+    if (top && (cap = this.rules.paragraph.exec(src))) {
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'paragraph',
+        text: cap[1].charAt(cap[1].length - 1) === '\n'
+          ? cap[1].slice(0, -1)
+          : cap[1]
+      });
+      continue;
+    }
+
+    // text
+    if (cap = this.rules.text.exec(src)) {
+      // Top-level should never reach here.
+      src = src.substring(cap[0].length);
+      this.tokens.push({
+        type: 'text',
+        text: cap[0]
+      });
+      continue;
+    }
+
+    if (src) {
+      throw new
+        Error('Infinite loop on byte: ' + src.charCodeAt(0));
+    }
+  }
+
+  return this.tokens;
+};
+
+/**
+ * Inline-Level Grammar
+ */
+
+var inline = {
+  escape: /^\\([\\`*{}\[\]()#+\-.!_>])/,
+  autolink: /^<([^ >]+(@|:\/)[^ >]+)>/,
+  url: noop,
+  tag: /^<!--[\s\S]*?-->|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/,
+  link: /^!?\[(inside)\]\(href\)/,
+  reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/,
+  nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/,
+  strong: /^__([\s\S]+?)__(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/,
+  em: /^\b_((?:__|[\s\S])+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/,
+  code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/,
+  br: /^ {2,}\n(?!\s*$)/,
+  del: noop,
+  text: /^[\s\S]+?(?=[\\<!\[_*`]| {2,}\n|$)/
+};
+
+inline._inside = /(?:\[[^\]]*\]|[^\[\]]|\](?=[^\[]*\]))*/;
+inline._href = /\s*<?([\s\S]*?)>?(?:\s+['"]([\s\S]*?)['"])?\s*/;
+
+inline.link = replace(inline.link)
+  ('inside', inline._inside)
+  ('href', inline._href)
+  ();
+
+inline.reflink = replace(inline.reflink)
+  ('inside', inline._inside)
+  ();
+
+/**
+ * Normal Inline Grammar
+ */
+
+inline.normal = merge({}, inline);
+
+/**
+ * Pedantic Inline Grammar
+ */
+
+inline.pedantic = merge({}, inline.normal, {
+  strong: /^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,
+  em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/
+});
+
+/**
+ * GFM Inline Grammar
+ */
+
+inline.gfm = merge({}, inline.normal, {
+  escape: replace(inline.escape)('])', '~|])')(),
+  url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/,
+  del: /^~~(?=\S)([\s\S]*?\S)~~/,
+  text: replace(inline.text)
+    (']|', '~]|')
+    ('|', '|https?://|')
+    ()
+});
+
+/**
+ * GFM + Line Breaks Inline Grammar
+ */
+
+inline.breaks = merge({}, inline.gfm, {
+  br: replace(inline.br)('{2,}', '*')(),
+  text: replace(inline.gfm.text)('{2,}', '*')()
+});
+
+/**
+ * Inline Lexer & Compiler
+ */
+
+function InlineLexer(links, options) {
+  this.options = options || marked.defaults;
+  this.links = links;
+  this.rules = inline.normal;
+  this.renderer = this.options.renderer || new Renderer;
+  this.renderer.options = this.options;
+
+  if (!this.links) {
+    throw new
+      Error('Tokens array requires a `links` property.');
+  }
+
+  if (this.options.gfm) {
+    if (this.options.breaks) {
+      this.rules = inline.breaks;
+    } else {
+      this.rules = inline.gfm;
+    }
+  } else if (this.options.pedantic) {
+    this.rules = inline.pedantic;
+  }
+}
+
+/**
+ * Expose Inline Rules
+ */
+
+InlineLexer.rules = inline;
+
+/**
+ * Static Lexing/Compiling Method
+ */
+
+InlineLexer.output = function(src, links, options) {
+  var inline = new InlineLexer(links, options);
+  return inline.output(src);
+};
+
+/**
+ * Lexing/Compiling
+ */
+
+InlineLexer.prototype.output = function(src) {
+  var out = ''
+    , link
+    , text
+    , href
+    , cap;
+
+  while (src) {
+    // escape
+    if (cap = this.rules.escape.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += cap[1];
+      continue;
+    }
+
+    // autolink
+    if (cap = this.rules.autolink.exec(src)) {
+      src = src.substring(cap[0].length);
+      if (cap[2] === '@') {
+        text = cap[1].charAt(6) === ':'
+          ? this.mangle(cap[1].substring(7))
+          : this.mangle(cap[1]);
+        href = this.mangle('mailto:') + text;
+      } else {
+        text = escape(cap[1]);
+        href = text;
+      }
+      out += this.renderer.link(href, null, text);
+      continue;
+    }
+
+    // url (gfm)
+    if (!this.inLink && (cap = this.rules.url.exec(src))) {
+      src = src.substring(cap[0].length);
+      text = escape(cap[1]);
+      href = text;
+      out += this.renderer.link(href, null, text);
+      continue;
+    }
+
+    // tag
+    if (cap = this.rules.tag.exec(src)) {
+      if (!this.inLink && /^<a /i.test(cap[0])) {
+        this.inLink = true;
+      } else if (this.inLink && /^<\/a>/i.test(cap[0])) {
+        this.inLink = false;
+      }
+      src = src.substring(cap[0].length);
+      out += this.options.sanitize
+        ? escape(cap[0])
+        : cap[0];
+      continue;
+    }
+
+    // link
+    if (cap = this.rules.link.exec(src)) {
+      src = src.substring(cap[0].length);
+      this.inLink = true;
+      out += this.outputLink(cap, {
+        href: cap[2],
+        title: cap[3]
+      });
+      this.inLink = false;
+      continue;
+    }
+
+    // reflink, nolink
+    if ((cap = this.rules.reflink.exec(src))
+        || (cap = this.rules.nolink.exec(src))) {
+      src = src.substring(cap[0].length);
+      link = (cap[2] || cap[1]).replace(/\s+/g, ' ');
+      link = this.links[link.toLowerCase()];
+      if (!link || !link.href) {
+        out += cap[0].charAt(0);
+        src = cap[0].substring(1) + src;
+        continue;
+      }
+      this.inLink = true;
+      out += this.outputLink(cap, link);
+      this.inLink = false;
+      continue;
+    }
+
+    // strong
+    if (cap = this.rules.strong.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.strong(this.output(cap[2] || cap[1]));
+      continue;
+    }
+
+    // em
+    if (cap = this.rules.em.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.em(this.output(cap[2] || cap[1]));
+      continue;
+    }
+
+    // code
+    if (cap = this.rules.code.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.codespan(escape(cap[2], true));
+      continue;
+    }
+
+    // br
+    if (cap = this.rules.br.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.br();
+      continue;
+    }
+
+    // del (gfm)
+    if (cap = this.rules.del.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += this.renderer.del(this.output(cap[1]));
+      continue;
+    }
+
+    // text
+    if (cap = this.rules.text.exec(src)) {
+      src = src.substring(cap[0].length);
+      out += escape(this.smartypants(cap[0]));
+      continue;
+    }
+
+    if (src) {
+      throw new
+        Error('Infinite loop on byte: ' + src.charCodeAt(0));
+    }
+  }
+
+  return out;
+};
+
+/**
+ * Compile Link
+ */
+
+InlineLexer.prototype.outputLink = function(cap, link) {
+  var href = escape(link.href)
+    , title = link.title ? escape(link.title) : null;
+
+  return cap[0].charAt(0) !== '!'
+    ? this.renderer.link(href, title, this.output(cap[1]))
+    : this.renderer.image(href, title, escape(cap[1]));
+};
+
+/**
+ * Smartypants Transformations
+ */
+
+InlineLexer.prototype.smartypants = function(text) {
+  if (!this.options.smartypants) return text;
+  return text
+    // em-dashes
+    .replace(/--/g, '\u2014')
+    // opening singles
+    .replace(/(^|[-\u2014/(\[{"\s])'/g, '$1\u2018')
+    // closing singles & apostrophes
+    .replace(/'/g, '\u2019')
+    // opening doubles
+    .replace(/(^|[-\u2014/(\[{\u2018\s])"/g, '$1\u201c')
+    // closing doubles
+    .replace(/"/g, '\u201d')
+    // ellipses
+    .replace(/\.{3}/g, '\u2026');
+};
+
+/**
+ * Mangle Links
+ */
+
+InlineLexer.prototype.mangle = function(text) {
+  var out = ''
+    , l = text.length
+    , i = 0
+    , ch;
+
+  for (; i < l; i++) {
+    ch = text.charCodeAt(i);
+    if (Math.random() > 0.5) {
+      ch = 'x' + ch.toString(16);
+    }
+    out += '&#' + ch + ';';
+  }
+
+  return out;
+};
+
+/**
+ * Renderer
+ */
+
+function Renderer(options) {
+  this.options = options || {};
+}
+
+Renderer.prototype.code = function(code, lang, escaped) {
+  if (this.options.highlight) {
+    var out = this.options.highlight(code, lang);
+    if (out != null && out !== code) {
+      escaped = true;
+      code = out;
+    }
+  }
+
+  if (!lang) {
+    return '<pre><code>'
+      + (escaped ? code : escape(code, true))
+      + '\n</code></pre>';
+  }
+
+  return '<pre><code class="'
+    + this.options.langPrefix
+    + escape(lang, true)
+    + '">'
+    + (escaped ? code : escape(code, true))
+    + '\n</code></pre>\n';
+};
+
+Renderer.prototype.blockquote = function(quote) {
+  return '<blockquote>\n' + quote + '</blockquote>\n';
+};
+
+Renderer.prototype.html = function(html) {
+  return html;
+};
+
+Renderer.prototype.heading = function(text, level, raw) {
+  return '<h'
+    + level
+    + ' id="'
+    + this.options.headerPrefix
+    + raw.toLowerCase().replace(/[^\w]+/g, '-')
+    + '">'
+    + text
+    + '</h'
+    + level
+    + '>\n';
+};
+
+Renderer.prototype.hr = function() {
+  return this.options.xhtml ? '<hr/>\n' : '<hr>\n';
+};
+
+Renderer.prototype.list = function(body, ordered) {
+  var type = ordered ? 'ol' : 'ul';
+  return '<' + type + '>\n' + body + '</' + type + '>\n';
+};
+
+Renderer.prototype.listitem = function(text) {
+  return '<li>' + text + '</li>\n';
+};
+
+Renderer.prototype.paragraph = function(text) {
+  return '<p>' + text + '</p>\n';
+};
+
+Renderer.prototype.table = function(header, body) {
+  return '<table>\n'
+    + '<thead>\n'
+    + header
+    + '</thead>\n'
+    + '<tbody>\n'
+    + body
+    + '</tbody>\n'
+    + '</table>\n';
+};
+
+Renderer.prototype.tablerow = function(content) {
+  return '<tr>\n' + content + '</tr>\n';
+};
+
+Renderer.prototype.tablecell = function(content, flags) {
+  var type = flags.header ? 'th' : 'td';
+  var tag = flags.align
+    ? '<' + type + ' style="text-align:' + flags.align + '">'
+    : '<' + type + '>';
+  return tag + content + '</' + type + '>\n';
+};
+
+// span level renderer
+Renderer.prototype.strong = function(text) {
+  return '<strong>' + text + '</strong>';
+};
+
+Renderer.prototype.em = function(text) {
+  return '<em>' + text + '</em>';
+};
+
+Renderer.prototype.codespan = function(text) {
+  return '<code>' + text + '</code>';
+};
+
+Renderer.prototype.br = function() {
+  return this.options.xhtml ? '<br/>' : '<br>';
+};
+
+Renderer.prototype.del = function(text) {
+  return '<del>' + text + '</del>';
+};
+
+Renderer.prototype.link = function(href, title, text) {
+  if (this.options.sanitize) {
+    try {
+      var prot = decodeURIComponent(unescape(href))
+        .replace(/[^\w:]/g, '')
+        .toLowerCase();
+    } catch (e) {
+      return '';
+    }
+    if (prot.indexOf('javascript:') === 0) {
+      return '';
+    }
+  }
+  var out = '<a href="' + href + '"';
+  if (title) {
+    out += ' title="' + title + '"';
+  }
+  out += '>' + text + '</a>';
+  return out;
+};
+
+Renderer.prototype.image = function(href, title, text) {
+  var out = '<img src="' + href + '" alt="' + text + '"';
+  if (title) {
+    out += ' title="' + title + '"';
+  }
+  out += this.options.xhtml ? '/>' : '>';
+  return out;
+};
+
+/**
+ * Parsing & Compiling
+ */
+
+function Parser(options) {
+  this.tokens = [];
+  this.token = null;
+  this.options = options || marked.defaults;
+  this.options.renderer = this.options.renderer || new Renderer;
+  this.renderer = this.options.renderer;
+  this.renderer.options = this.options;
+}
+
+/**
+ * Static Parse Method
+ */
+
+Parser.parse = function(src, options, renderer) {
+  var parser = new Parser(options, renderer);
+  return parser.parse(src);
+};
+
+/**
+ * Parse Loop
+ */
+
+Parser.prototype.parse = function(src) {
+  this.inline = new InlineLexer(src.links, this.options, this.renderer);
+  this.tokens = src.reverse();
+
+  var out = '';
+  while (this.next()) {
+    out += this.tok();
+  }
+
+  return out;
+};
+
+/**
+ * Next Token
+ */
+
+Parser.prototype.next = function() {
+  return this.token = this.tokens.pop();
+};
+
+/**
+ * Preview Next Token
+ */
+
+Parser.prototype.peek = function() {
+  return this.tokens[this.tokens.length - 1] || 0;
+};
+
+/**
+ * Parse Text Tokens
+ */
+
+Parser.prototype.parseText = function() {
+  var body = this.token.text;
+
+  while (this.peek().type === 'text') {
+    body += '\n' + this.next().text;
+  }
+
+  return this.inline.output(body);
+};
+
+/**
+ * Parse Current Token
+ */
+
+Parser.prototype.tok = function() {
+  switch (this.token.type) {
+    case 'space': {
+      return '';
+    }
+    case 'hr': {
+      return this.renderer.hr();
+    }
+    case 'heading': {
+      return this.renderer.heading(
+        this.inline.output(this.token.text),
+        this.token.depth,
+        this.token.text);
+    }
+    case 'code': {
+      return this.renderer.code(this.token.text,
+        this.token.lang,
+        this.token.escaped);
+    }
+    case 'table': {
+      var header = ''
+        , body = ''
+        , i
+        , row
+        , cell
+        , flags
+        , j;
+
+      // header
+      cell = '';
+      for (i = 0; i < this.token.header.length; i++) {
+        flags = { header: true, align: this.token.align[i] };
+        cell += this.renderer.tablecell(
+          this.inline.output(this.token.header[i]),
+          { header: true, align: this.token.align[i] }
+        );
+      }
+      header += this.renderer.tablerow(cell);
+
+      for (i = 0; i < this.token.cells.length; i++) {
+        row = this.token.cells[i];
+
+        cell = '';
+        for (j = 0; j < row.length; j++) {
+          cell += this.renderer.tablecell(
+            this.inline.output(row[j]),
+            { header: false, align: this.token.align[j] }
+          );
+        }
+
+        body += this.renderer.tablerow(cell);
+      }
+      return this.renderer.table(header, body);
+    }
+    case 'blockquote_start': {
+      var body = '';
+
+      while (this.next().type !== 'blockquote_end') {
+        body += this.tok();
+      }
+
+      return this.renderer.blockquote(body);
+    }
+    case 'list_start': {
+      var body = ''
+        , ordered = this.token.ordered;
+
+      while (this.next().type !== 'list_end') {
+        body += this.tok();
+      }
+
+      return this.renderer.list(body, ordered);
+    }
+    case 'list_item_start': {
+      var body = '';
+
+      while (this.next().type !== 'list_item_end') {
+        body += this.token.type === 'text'
+          ? this.parseText()
+          : this.tok();
+      }
+
+      return this.renderer.listitem(body);
+    }
+    case 'loose_item_start': {
+      var body = '';
+
+      while (this.next().type !== 'list_item_end') {
+        body += this.tok();
+      }
+
+      return this.renderer.listitem(body);
+    }
+    case 'html': {
+      var html = !this.token.pre && !this.options.pedantic
+        ? this.inline.output(this.token.text)
+        : this.token.text;
+      return this.renderer.html(html);
+    }
+    case 'paragraph': {
+      return this.renderer.paragraph(this.inline.output(this.token.text));
+    }
+    case 'text': {
+      return this.renderer.paragraph(this.parseText());
+    }
+  }
+};
+
+/**
+ * Helpers
+ */
+
+function escape(html, encode) {
+  return html
+    .replace(!encode ? /&(?!#?\w+;)/g : /&/g, '&amp;')
+    .replace(/</g, '&lt;')
+    .replace(/>/g, '&gt;')
+    .replace(/"/g, '&quot;')
+    .replace(/'/g, '&#39;');
+}
+
+function unescape(html) {
+  return html.replace(/&([#\w]+);/g, function(_, n) {
+    n = n.toLowerCase();
+    if (n === 'colon') return ':';
+    if (n.charAt(0) === '#') {
+      return n.charAt(1) === 'x'
+        ? String.fromCharCode(parseInt(n.substring(2), 16))
+        : String.fromCharCode(+n.substring(1));
+    }
+    return '';
+  });
+}
+
+function replace(regex, opt) {
+  regex = regex.source;
+  opt = opt || '';
+  return function self(name, val) {
+    if (!name) return new RegExp(regex, opt);
+    val = val.source || val;
+    val = val.replace(/(^|[^\[])\^/g, '$1');
+    regex = regex.replace(name, val);
+    return self;
+  };
+}
+
+function noop() {}
+noop.exec = noop;
+
+function merge(obj) {
+  var i = 1
+    , target
+    , key;
+
+  for (; i < arguments.length; i++) {
+    target = arguments[i];
+    for (key in target) {
+      if (Object.prototype.hasOwnProperty.call(target, key)) {
+        obj[key] = target[key];
+      }
+    }
+  }
+
+  return obj;
+}
+
+
+/**
+ * Marked
+ */
+
+function marked(src, opt, callback) {
+  if (callback || typeof opt === 'function') {
+    if (!callback) {
+      callback = opt;
+      opt = null;
+    }
+
+    opt = merge({}, marked.defaults, opt || {});
+
+    var highlight = opt.highlight
+      , tokens
+      , pending
+      , i = 0;
+
+    try {
+      tokens = Lexer.lex(src, opt)
+    } catch (e) {
+      return callback(e);
+    }
+
+    pending = tokens.length;
+
+    var done = function(err) {
+      if (err) {
+        opt.highlight = highlight;
+        return callback(err);
+      }
+
+      var out;
+
+      try {
+        out = Parser.parse(tokens, opt);
+      } catch (e) {
+        err = e;
+      }
+
+      opt.highlight = highlight;
+
+      return err
+        ? callback(err)
+        : callback(null, out);
+    };
+
+    if (!highlight || highlight.length < 3) {
+      return done();
+    }
+
+    delete opt.highlight;
+
+    if (!pending) return done();
+
+    for (; i < tokens.length; i++) {
+      (function(token) {
+        if (token.type !== 'code') {
+          return --pending || done();
+        }
+        return highlight(token.text, token.lang, function(err, code) {
+          if (err) return done(err);
+          if (code == null || code === token.text) {
+            return --pending || done();
+          }
+          token.text = code;
+          token.escaped = true;
+          --pending || done();
+        });
+      })(tokens[i]);
+    }
+
+    return;
+  }
+  try {
+    if (opt) opt = merge({}, marked.defaults, opt);
+    return Parser.parse(Lexer.lex(src, opt), opt);
+  } catch (e) {
+    e.message += '\nPlease report this to https://github.com/chjj/marked.';
+    if ((opt || marked.defaults).silent) {
+      return '<p>An error occured:</p><pre>'
+        + escape(e.message + '', true)
+        + '</pre>';
+    }
+    throw e;
+  }
+}
+
+/**
+ * Options
+ */
+
+marked.options =
+marked.setOptions = function(opt) {
+  merge(marked.defaults, opt);
+  return marked;
+};
+
+marked.defaults = {
+  gfm: true,
+  tables: true,
+  breaks: false,
+  pedantic: false,
+  sanitize: false,
+  smartLists: false,
+  silent: false,
+  highlight: null,
+  langPrefix: 'lang-',
+  smartypants: false,
+  headerPrefix: '',
+  renderer: new Renderer,
+  xhtml: false
+};
+
+/**
+ * Expose
+ */
+
+marked.Parser = Parser;
+marked.parser = Parser.parse;
+
+marked.Renderer = Renderer;
+
+marked.Lexer = Lexer;
+marked.lexer = Lexer.lex;
+
+marked.InlineLexer = InlineLexer;
+marked.inlineLexer = InlineLexer.output;
+
+marked.parse = marked;
+
+if (typeof module !== 'undefined' && typeof exports === 'object') {
+  module.exports = marked;
+} else if (typeof define === 'function' && define.amd) {
+  define(function() { return marked; });
+} else {
+  this.marked = marked;
+}
+
+}).call(function() {
+  return this || (typeof window !== 'undefined' ? window : global);
+}());
diff --git a/plugins/ckeditor4/markdown/js/to-markdown.js b/plugins/ckeditor4/markdown/js/to-markdown.js
new file mode 100755
index 0000000..667eae1
--- /dev/null
+++ b/plugins/ckeditor4/markdown/js/to-markdown.js
@@ -0,0 +1,530 @@
+/*! https://mths.be/he v0.5.0 by @mathias | MIT license */
+;(function(root) {
+
+	// Detect free variables `exports`.
+	var freeExports = typeof exports == 'object' && exports;
+
+	// Detect free variable `module`.
+	var freeModule = typeof module == 'object' && module &&
+		module.exports == freeExports && module;
+
+	// Detect free variable `global`, from Node.js or Browserified code,
+	// and use it as `root`.
+	var freeGlobal = typeof global == 'object' && global;
+	if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
+		root = freeGlobal;
+	}
+
+	/*--------------------------------------------------------------------------*/
+
+	// All astral symbols.
+	var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
+	// All ASCII symbols (not just printable ASCII) except those listed in the
+	// first column of the overrides table.
+	// http://whatwg.org/html/tokenization.html#table-charref-overrides
+	var regexAsciiWhitelist = /[\x01-\x7F]/g;
+	// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
+	// code points listed in the first column of the overrides table on
+	// http://whatwg.org/html/tokenization.html#table-charref-overrides.
+	var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
+
+	var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
+	var encodeMap = {'\xC1':'Aacute','\xE1':'aacute','\u0102':'Abreve','\u0103':'abreve','\u223E':'ac','\u223F':'acd','\u223E\u0333':'acE','\xC2':'Acirc','\xE2':'acirc','\xB4':'acute','\u0410':'Acy','\u0430':'acy','\xC6':'AElig','\xE6':'aelig','\u2061':'af','\uD835\uDD04':'Afr','\uD835\uDD1E':'afr','\xC0':'Agrave','\xE0':'agrave','\u2135':'aleph','\u0391':'Alpha','\u03B1':'alpha','\u0100':'Amacr','\u0101':'amacr','\u2A3F':'amalg','&':'amp','\u2A55':'andand','\u2A53':'And','\u2227':'and','\u2A5C':'andd','\u2A58':'andslope','\u2A5A':'andv','\u2220':'ang','\u29A4':'ange','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u2221':'angmsd','\u221F':'angrt','\u22BE':'angrtvb','\u299D':'angrtvbd','\u2222':'angsph','\xC5':'angst','\u237C':'angzarr','\u0104':'Aogon','\u0105':'aogon','\uD835\uDD38':'Aopf','\uD835\uDD52':'aopf','\u2A6F':'apacir','\u2248':'ap','\u2A70':'apE','\u224A':'ape','\u224B':'apid','\'':'apos','\xE5':'aring','\uD835\uDC9C':'Ascr','\uD835\uDCB6':'ascr','\u2254':'colone','*':'ast','\u224D':'CupCap','\xC3':'Atilde','\xE3':'atilde','\xC4':'Auml','\xE4':'auml','\u2233':'awconint','\u2A11':'awint','\u224C':'bcong','\u03F6':'bepsi','\u2035':'bprime','\u223D':'bsim','\u22CD':'bsime','\u2216':'setmn','\u2AE7':'Barv','\u22BD':'barvee','\u2305':'barwed','\u2306':'Barwed','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u0411':'Bcy','\u0431':'bcy','\u201E':'bdquo','\u2235':'becaus','\u29B0':'bemptyv','\u212C':'Bscr','\u0392':'Beta','\u03B2':'beta','\u2136':'beth','\u226C':'twixt','\uD835\uDD05':'Bfr','\uD835\uDD1F':'bfr','\u22C2':'xcap','\u25EF':'xcirc','\u22C3':'xcup','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A06':'xsqcup','\u2605':'starf','\u25BD':'xdtri','\u25B3':'xutri','\u2A04':'xuplus','\u22C1':'Vee','\u22C0':'Wedge','\u290D':'rbarr','\u29EB':'lozf','\u25AA':'squf','\u25B4':'utrif','\u25BE':'dtrif','\u25C2':'ltrif','\u25B8':'rtrif','\u2423':'blank','\u2592':'blk12','\u2591':'blk14','\u2593':'blk34','\u2588':'block','=\u20E5':'bne','\u2261\u20E5':'bnequiv','\u2AED':'bNot','\u2310':'bnot','\uD835\uDD39':'Bopf','\uD835\uDD53':'bopf','\u22A5':'bot','\u22C8':'bowtie','\u29C9':'boxbox','\u2510':'boxdl','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u250C':'boxdr','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2500':'boxh','\u2550':'boxH','\u252C':'boxhd','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2534':'boxhu','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u229F':'minusb','\u229E':'plusb','\u22A0':'timesb','\u2518':'boxul','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u2514':'boxur','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u2502':'boxv','\u2551':'boxV','\u253C':'boxvh','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2524':'boxvl','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u251C':'boxvr','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u02D8':'breve','\xA6':'brvbar','\uD835\uDCB7':'bscr','\u204F':'bsemi','\u29C5':'bsolb','\\':'bsol','\u27C8':'bsolhsub','\u2022':'bull','\u224E':'bump','\u2AAE':'bumpE','\u224F':'bumpe','\u0106':'Cacute','\u0107':'cacute','\u2A44':'capand','\u2A49':'capbrcup','\u2A4B':'capcap','\u2229':'cap','\u22D2':'Cap','\u2A47':'capcup','\u2A40':'capdot','\u2145':'DD','\u2229\uFE00':'caps','\u2041':'caret','\u02C7':'caron','\u212D':'Cfr','\u2A4D':'ccaps','\u010C':'Ccaron','\u010D':'ccaron','\xC7':'Ccedil','\xE7':'ccedil','\u0108':'Ccirc','\u0109':'ccirc','\u2230':'Cconint','\u2A4C':'ccups','\u2A50':'ccupssm','\u010A':'Cdot','\u010B':'cdot','\xB8':'cedil','\u29B2':'cemptyv','\xA2':'cent','\xB7':'middot','\uD835\uDD20':'cfr','\u0427':'CHcy','\u0447':'chcy','\u2713':'check','\u03A7':'Chi','\u03C7':'chi','\u02C6':'circ','\u2257':'cire','\u21BA':'olarr','\u21BB':'orarr','\u229B':'oast','\u229A':'ocir','\u229D':'odash','\u2299':'odot','\xAE':'reg','\u24C8':'oS','\u2296':'ominus','\u2295':'oplus','\u2297':'otimes','\u25CB':'cir','\u29C3':'cirE','\u2A10':'cirfnint','\u2AEF':'cirmid','\u29C2':'cirscir','\u2232':'cwconint','\u201D':'rdquo','\u2019':'rsquo','\u2663':'clubs',':':'colon','\u2237':'Colon','\u2A74':'Colone',',':'comma','@':'commat','\u2201':'comp','\u2218':'compfn','\u2102':'Copf','\u2245':'cong','\u2A6D':'congdot','\u2261':'equiv','\u222E':'oint','\u222F':'Conint','\uD835\uDD54':'copf','\u2210':'coprod','\xA9':'copy','\u2117':'copysr','\u21B5':'crarr','\u2717':'cross','\u2A2F':'Cross','\uD835\uDC9E':'Cscr','\uD835\uDCB8':'cscr','\u2ACF':'csub','\u2AD1':'csube','\u2AD0':'csup','\u2AD2':'csupe','\u22EF':'ctdot','\u2938':'cudarrl','\u2935':'cudarrr','\u22DE':'cuepr','\u22DF':'cuesc','\u21B6':'cularr','\u293D':'cularrp','\u2A48':'cupbrcap','\u2A46':'cupcap','\u222A':'cup','\u22D3':'Cup','\u2A4A':'cupcup','\u228D':'cupdot','\u2A45':'cupor','\u222A\uFE00':'cups','\u21B7':'curarr','\u293C':'curarrm','\u22CE':'cuvee','\u22CF':'cuwed','\xA4':'curren','\u2231':'cwint','\u232D':'cylcty','\u2020':'dagger','\u2021':'Dagger','\u2138':'daleth','\u2193':'darr','\u21A1':'Darr','\u21D3':'dArr','\u2010':'dash','\u2AE4':'Dashv','\u22A3':'dashv','\u290F':'rBarr','\u02DD':'dblac','\u010E':'Dcaron','\u010F':'dcaron','\u0414':'Dcy','\u0434':'dcy','\u21CA':'ddarr','\u2146':'dd','\u2911':'DDotrahd','\u2A77':'eDDot','\xB0':'deg','\u2207':'Del','\u0394':'Delta','\u03B4':'delta','\u29B1':'demptyv','\u297F':'dfisht','\uD835\uDD07':'Dfr','\uD835\uDD21':'dfr','\u2965':'dHar','\u21C3':'dharl','\u21C2':'dharr','\u02D9':'dot','`':'grave','\u02DC':'tilde','\u22C4':'diam','\u2666':'diams','\xA8':'die','\u03DD':'gammad','\u22F2':'disin','\xF7':'div','\u22C7':'divonx','\u0402':'DJcy','\u0452':'djcy','\u231E':'dlcorn','\u230D':'dlcrop','$':'dollar','\uD835\uDD3B':'Dopf','\uD835\uDD55':'dopf','\u20DC':'DotDot','\u2250':'doteq','\u2251':'eDot','\u2238':'minusd','\u2214':'plusdo','\u22A1':'sdotb','\u21D0':'lArr','\u21D4':'iff','\u27F8':'xlArr','\u27FA':'xhArr','\u27F9':'xrArr','\u21D2':'rArr','\u22A8':'vDash','\u21D1':'uArr','\u21D5':'vArr','\u2225':'par','\u2913':'DownArrowBar','\u21F5':'duarr','\u0311':'DownBreve','\u2950':'DownLeftRightVector','\u295E':'DownLeftTeeVector','\u2956':'DownLeftVectorBar','\u21BD':'lhard','\u295F':'DownRightTeeVector','\u2957':'DownRightVectorBar','\u21C1':'rhard','\u21A7':'mapstodown','\u22A4':'top','\u2910':'RBarr','\u231F':'drcorn','\u230C':'drcrop','\uD835\uDC9F':'Dscr','\uD835\uDCB9':'dscr','\u0405':'DScy','\u0455':'dscy','\u29F6':'dsol','\u0110':'Dstrok','\u0111':'dstrok','\u22F1':'dtdot','\u25BF':'dtri','\u296F':'duhar','\u29A6':'dwangle','\u040F':'DZcy','\u045F':'dzcy','\u27FF':'dzigrarr','\xC9':'Eacute','\xE9':'eacute','\u2A6E':'easter','\u011A':'Ecaron','\u011B':'ecaron','\xCA':'Ecirc','\xEA':'ecirc','\u2256':'ecir','\u2255':'ecolon','\u042D':'Ecy','\u044D':'ecy','\u0116':'Edot','\u0117':'edot','\u2147':'ee','\u2252':'efDot','\uD835\uDD08':'Efr','\uD835\uDD22':'efr','\u2A9A':'eg','\xC8':'Egrave','\xE8':'egrave','\u2A96':'egs','\u2A98':'egsdot','\u2A99':'el','\u2208':'in','\u23E7':'elinters','\u2113':'ell','\u2A95':'els','\u2A97':'elsdot','\u0112':'Emacr','\u0113':'emacr','\u2205':'empty','\u25FB':'EmptySmallSquare','\u25AB':'EmptyVerySmallSquare','\u2004':'emsp13','\u2005':'emsp14','\u2003':'emsp','\u014A':'ENG','\u014B':'eng','\u2002':'ensp','\u0118':'Eogon','\u0119':'eogon','\uD835\uDD3C':'Eopf','\uD835\uDD56':'eopf','\u22D5':'epar','\u29E3':'eparsl','\u2A71':'eplus','\u03B5':'epsi','\u0395':'Epsilon','\u03F5':'epsiv','\u2242':'esim','\u2A75':'Equal','=':'equals','\u225F':'equest','\u21CC':'rlhar','\u2A78':'equivDD','\u29E5':'eqvparsl','\u2971':'erarr','\u2253':'erDot','\u212F':'escr','\u2130':'Escr','\u2A73':'Esim','\u0397':'Eta','\u03B7':'eta','\xD0':'ETH','\xF0':'eth','\xCB':'Euml','\xEB':'euml','\u20AC':'euro','!':'excl','\u2203':'exist','\u0424':'Fcy','\u0444':'fcy','\u2640':'female','\uFB03':'ffilig','\uFB00':'fflig','\uFB04':'ffllig','\uD835\uDD09':'Ffr','\uD835\uDD23':'ffr','\uFB01':'filig','\u25FC':'FilledSmallSquare','fj':'fjlig','\u266D':'flat','\uFB02':'fllig','\u25B1':'fltns','\u0192':'fnof','\uD835\uDD3D':'Fopf','\uD835\uDD57':'fopf','\u2200':'forall','\u22D4':'fork','\u2AD9':'forkv','\u2131':'Fscr','\u2A0D':'fpartint','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\u2154':'frac23','\u2156':'frac25','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\u2044':'frasl','\u2322':'frown','\uD835\uDCBB':'fscr','\u01F5':'gacute','\u0393':'Gamma','\u03B3':'gamma','\u03DC':'Gammad','\u2A86':'gap','\u011E':'Gbreve','\u011F':'gbreve','\u0122':'Gcedil','\u011C':'Gcirc','\u011D':'gcirc','\u0413':'Gcy','\u0433':'gcy','\u0120':'Gdot','\u0121':'gdot','\u2265':'ge','\u2267':'gE','\u2A8C':'gEl','\u22DB':'gel','\u2A7E':'ges','\u2AA9':'gescc','\u2A80':'gesdot','\u2A82':'gesdoto','\u2A84':'gesdotol','\u22DB\uFE00':'gesl','\u2A94':'gesles','\uD835\uDD0A':'Gfr','\uD835\uDD24':'gfr','\u226B':'gg','\u22D9':'Gg','\u2137':'gimel','\u0403':'GJcy','\u0453':'gjcy','\u2AA5':'gla','\u2277':'gl','\u2A92':'glE','\u2AA4':'glj','\u2A8A':'gnap','\u2A88':'gne','\u2269':'gnE','\u22E7':'gnsim','\uD835\uDD3E':'Gopf','\uD835\uDD58':'gopf','\u2AA2':'GreaterGreater','\u2273':'gsim','\uD835\uDCA2':'Gscr','\u210A':'gscr','\u2A8E':'gsime','\u2A90':'gsiml','\u2AA7':'gtcc','\u2A7A':'gtcir','>':'gt','\u22D7':'gtdot','\u2995':'gtlPar','\u2A7C':'gtquest','\u2978':'gtrarr','\u2269\uFE00':'gvnE','\u200A':'hairsp','\u210B':'Hscr','\u042A':'HARDcy','\u044A':'hardcy','\u2948':'harrcir','\u2194':'harr','\u21AD':'harrw','^':'Hat','\u210F':'hbar','\u0124':'Hcirc','\u0125':'hcirc','\u2665':'hearts','\u2026':'mldr','\u22B9':'hercon','\uD835\uDD25':'hfr','\u210C':'Hfr','\u2925':'searhk','\u2926':'swarhk','\u21FF':'hoarr','\u223B':'homtht','\u21A9':'larrhk','\u21AA':'rarrhk','\uD835\uDD59':'hopf','\u210D':'Hopf','\u2015':'horbar','\uD835\uDCBD':'hscr','\u0126':'Hstrok','\u0127':'hstrok','\u2043':'hybull','\xCD':'Iacute','\xED':'iacute','\u2063':'ic','\xCE':'Icirc','\xEE':'icirc','\u0418':'Icy','\u0438':'icy','\u0130':'Idot','\u0415':'IEcy','\u0435':'iecy','\xA1':'iexcl','\uD835\uDD26':'ifr','\u2111':'Im','\xCC':'Igrave','\xEC':'igrave','\u2148':'ii','\u2A0C':'qint','\u222D':'tint','\u29DC':'iinfin','\u2129':'iiota','\u0132':'IJlig','\u0133':'ijlig','\u012A':'Imacr','\u012B':'imacr','\u2110':'Iscr','\u0131':'imath','\u22B7':'imof','\u01B5':'imped','\u2105':'incare','\u221E':'infin','\u29DD':'infintie','\u22BA':'intcal','\u222B':'int','\u222C':'Int','\u2124':'Zopf','\u2A17':'intlarhk','\u2A3C':'iprod','\u2062':'it','\u0401':'IOcy','\u0451':'iocy','\u012E':'Iogon','\u012F':'iogon','\uD835\uDD40':'Iopf','\uD835\uDD5A':'iopf','\u0399':'Iota','\u03B9':'iota','\xBF':'iquest','\uD835\uDCBE':'iscr','\u22F5':'isindot','\u22F9':'isinE','\u22F4':'isins','\u22F3':'isinsv','\u0128':'Itilde','\u0129':'itilde','\u0406':'Iukcy','\u0456':'iukcy','\xCF':'Iuml','\xEF':'iuml','\u0134':'Jcirc','\u0135':'jcirc','\u0419':'Jcy','\u0439':'jcy','\uD835\uDD0D':'Jfr','\uD835\uDD27':'jfr','\u0237':'jmath','\uD835\uDD41':'Jopf','\uD835\uDD5B':'jopf','\uD835\uDCA5':'Jscr','\uD835\uDCBF':'jscr','\u0408':'Jsercy','\u0458':'jsercy','\u0404':'Jukcy','\u0454':'jukcy','\u039A':'Kappa','\u03BA':'kappa','\u03F0':'kappav','\u0136':'Kcedil','\u0137':'kcedil','\u041A':'Kcy','\u043A':'kcy','\uD835\uDD0E':'Kfr','\uD835\uDD28':'kfr','\u0138':'kgreen','\u0425':'KHcy','\u0445':'khcy','\u040C':'KJcy','\u045C':'kjcy','\uD835\uDD42':'Kopf','\uD835\uDD5C':'kopf','\uD835\uDCA6':'Kscr','\uD835\uDCC0':'kscr','\u21DA':'lAarr','\u0139':'Lacute','\u013A':'lacute','\u29B4':'laemptyv','\u2112':'Lscr','\u039B':'Lambda','\u03BB':'lambda','\u27E8':'lang','\u27EA':'Lang','\u2991':'langd','\u2A85':'lap','\xAB':'laquo','\u21E4':'larrb','\u291F':'larrbfs','\u2190':'larr','\u219E':'Larr','\u291D':'larrfs','\u21AB':'larrlp','\u2939':'larrpl','\u2973':'larrsim','\u21A2':'larrtl','\u2919':'latail','\u291B':'lAtail','\u2AAB':'lat','\u2AAD':'late','\u2AAD\uFE00':'lates','\u290C':'lbarr','\u290E':'lBarr','\u2772':'lbbrk','{':'lcub','[':'lsqb','\u298B':'lbrke','\u298F':'lbrksld','\u298D':'lbrkslu','\u013D':'Lcaron','\u013E':'lcaron','\u013B':'Lcedil','\u013C':'lcedil','\u2308':'lceil','\u041B':'Lcy','\u043B':'lcy','\u2936':'ldca','\u201C':'ldquo','\u2967':'ldrdhar','\u294B':'ldrushar','\u21B2':'ldsh','\u2264':'le','\u2266':'lE','\u21C6':'lrarr','\u27E6':'lobrk','\u2961':'LeftDownTeeVector','\u2959':'LeftDownVectorBar','\u230A':'lfloor','\u21BC':'lharu','\u21C7':'llarr','\u21CB':'lrhar','\u294E':'LeftRightVector','\u21A4':'mapstoleft','\u295A':'LeftTeeVector','\u22CB':'lthree','\u29CF':'LeftTriangleBar','\u22B2':'vltri','\u22B4':'ltrie','\u2951':'LeftUpDownVector','\u2960':'LeftUpTeeVector','\u2958':'LeftUpVectorBar','\u21BF':'uharl','\u2952':'LeftVectorBar','\u2A8B':'lEg','\u22DA':'leg','\u2A7D':'les','\u2AA8':'lescc','\u2A7F':'lesdot','\u2A81':'lesdoto','\u2A83':'lesdotor','\u22DA\uFE00':'lesg','\u2A93':'lesges','\u22D6':'ltdot','\u2276':'lg','\u2AA1':'LessLess','\u2272':'lsim','\u297C':'lfisht','\uD835\uDD0F':'Lfr','\uD835\uDD29':'lfr','\u2A91':'lgE','\u2962':'lHar','\u296A':'lharul','\u2584':'lhblk','\u0409':'LJcy','\u0459':'ljcy','\u226A':'ll','\u22D8':'Ll','\u296B':'llhard','\u25FA':'lltri','\u013F':'Lmidot','\u0140':'lmidot','\u23B0':'lmoust','\u2A89':'lnap','\u2A87':'lne','\u2268':'lnE','\u22E6':'lnsim','\u27EC':'loang','\u21FD':'loarr','\u27F5':'xlarr','\u27F7':'xharr','\u27FC':'xmap','\u27F6':'xrarr','\u21AC':'rarrlp','\u2985':'lopar','\uD835\uDD43':'Lopf','\uD835\uDD5D':'lopf','\u2A2D':'loplus','\u2A34':'lotimes','\u2217':'lowast','_':'lowbar','\u2199':'swarr','\u2198':'searr','\u25CA':'loz','(':'lpar','\u2993':'lparlt','\u296D':'lrhard','\u200E':'lrm','\u22BF':'lrtri','\u2039':'lsaquo','\uD835\uDCC1':'lscr','\u21B0':'lsh','\u2A8D':'lsime','\u2A8F':'lsimg','\u2018':'lsquo','\u201A':'sbquo','\u0141':'Lstrok','\u0142':'lstrok','\u2AA6':'ltcc','\u2A79':'ltcir','<':'lt','\u22C9':'ltimes','\u2976':'ltlarr','\u2A7B':'ltquest','\u25C3':'ltri','\u2996':'ltrPar','\u294A':'lurdshar','\u2966':'luruhar','\u2268\uFE00':'lvnE','\xAF':'macr','\u2642':'male','\u2720':'malt','\u2905':'Map','\u21A6':'map','\u21A5':'mapstoup','\u25AE':'marker','\u2A29':'mcomma','\u041C':'Mcy','\u043C':'mcy','\u2014':'mdash','\u223A':'mDDot','\u205F':'MediumSpace','\u2133':'Mscr','\uD835\uDD10':'Mfr','\uD835\uDD2A':'mfr','\u2127':'mho','\xB5':'micro','\u2AF0':'midcir','\u2223':'mid','\u2212':'minus','\u2A2A':'minusdu','\u2213':'mp','\u2ADB':'mlcp','\u22A7':'models','\uD835\uDD44':'Mopf','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\u039C':'Mu','\u03BC':'mu','\u22B8':'mumap','\u0143':'Nacute','\u0144':'nacute','\u2220\u20D2':'nang','\u2249':'nap','\u2A70\u0338':'napE','\u224B\u0338':'napid','\u0149':'napos','\u266E':'natur','\u2115':'Nopf','\xA0':'nbsp','\u224E\u0338':'nbump','\u224F\u0338':'nbumpe','\u2A43':'ncap','\u0147':'Ncaron','\u0148':'ncaron','\u0145':'Ncedil','\u0146':'ncedil','\u2247':'ncong','\u2A6D\u0338':'ncongdot','\u2A42':'ncup','\u041D':'Ncy','\u043D':'ncy','\u2013':'ndash','\u2924':'nearhk','\u2197':'nearr','\u21D7':'neArr','\u2260':'ne','\u2250\u0338':'nedot','\u200B':'ZeroWidthSpace','\u2262':'nequiv','\u2928':'toea','\u2242\u0338':'nesim','\n':'NewLine','\u2204':'nexist','\uD835\uDD11':'Nfr','\uD835\uDD2B':'nfr','\u2267\u0338':'ngE','\u2271':'nge','\u2A7E\u0338':'nges','\u22D9\u0338':'nGg','\u2275':'ngsim','\u226B\u20D2':'nGt','\u226F':'ngt','\u226B\u0338':'nGtv','\u21AE':'nharr','\u21CE':'nhArr','\u2AF2':'nhpar','\u220B':'ni','\u22FC':'nis','\u22FA':'nisd','\u040A':'NJcy','\u045A':'njcy','\u219A':'nlarr','\u21CD':'nlArr','\u2025':'nldr','\u2266\u0338':'nlE','\u2270':'nle','\u2A7D\u0338':'nles','\u226E':'nlt','\u22D8\u0338':'nLl','\u2274':'nlsim','\u226A\u20D2':'nLt','\u22EA':'nltri','\u22EC':'nltrie','\u226A\u0338':'nLtv','\u2224':'nmid','\u2060':'NoBreak','\uD835\uDD5F':'nopf','\u2AEC':'Not','\xAC':'not','\u226D':'NotCupCap','\u2226':'npar','\u2209':'notin','\u2279':'ntgl','\u22F5\u0338':'notindot','\u22F9\u0338':'notinE','\u22F7':'notinvb','\u22F6':'notinvc','\u29CF\u0338':'NotLeftTriangleBar','\u2278':'ntlg','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA1\u0338':'NotNestedLessLess','\u220C':'notni','\u22FE':'notnivb','\u22FD':'notnivc','\u2280':'npr','\u2AAF\u0338':'npre','\u22E0':'nprcue','\u29D0\u0338':'NotRightTriangleBar','\u22EB':'nrtri','\u22ED':'nrtrie','\u228F\u0338':'NotSquareSubset','\u22E2':'nsqsube','\u2290\u0338':'NotSquareSuperset','\u22E3':'nsqsupe','\u2282\u20D2':'vnsub','\u2288':'nsube','\u2281':'nsc','\u2AB0\u0338':'nsce','\u22E1':'nsccue','\u227F\u0338':'NotSucceedsTilde','\u2283\u20D2':'vnsup','\u2289':'nsupe','\u2241':'nsim','\u2244':'nsime','\u2AFD\u20E5':'nparsl','\u2202\u0338':'npart','\u2A14':'npolint','\u2933\u0338':'nrarrc','\u219B':'nrarr','\u21CF':'nrArr','\u219D\u0338':'nrarrw','\uD835\uDCA9':'Nscr','\uD835\uDCC3':'nscr','\u2284':'nsub','\u2AC5\u0338':'nsubE','\u2285':'nsup','\u2AC6\u0338':'nsupE','\xD1':'Ntilde','\xF1':'ntilde','\u039D':'Nu','\u03BD':'nu','#':'num','\u2116':'numero','\u2007':'numsp','\u224D\u20D2':'nvap','\u22AC':'nvdash','\u22AD':'nvDash','\u22AE':'nVdash','\u22AF':'nVDash','\u2265\u20D2':'nvge','>\u20D2':'nvgt','\u2904':'nvHarr','\u29DE':'nvinfin','\u2902':'nvlArr','\u2264\u20D2':'nvle','<\u20D2':'nvlt','\u22B4\u20D2':'nvltrie','\u2903':'nvrArr','\u22B5\u20D2':'nvrtrie','\u223C\u20D2':'nvsim','\u2923':'nwarhk','\u2196':'nwarr','\u21D6':'nwArr','\u2927':'nwnear','\xD3':'Oacute','\xF3':'oacute','\xD4':'Ocirc','\xF4':'ocirc','\u041E':'Ocy','\u043E':'ocy','\u0150':'Odblac','\u0151':'odblac','\u2A38':'odiv','\u29BC':'odsold','\u0152':'OElig','\u0153':'oelig','\u29BF':'ofcir','\uD835\uDD12':'Ofr','\uD835\uDD2C':'ofr','\u02DB':'ogon','\xD2':'Ograve','\xF2':'ograve','\u29C1':'ogt','\u29B5':'ohbar','\u03A9':'ohm','\u29BE':'olcir','\u29BB':'olcross','\u203E':'oline','\u29C0':'olt','\u014C':'Omacr','\u014D':'omacr','\u03C9':'omega','\u039F':'Omicron','\u03BF':'omicron','\u29B6':'omid','\uD835\uDD46':'Oopf','\uD835\uDD60':'oopf','\u29B7':'opar','\u29B9':'operp','\u2A54':'Or','\u2228':'or','\u2A5D':'ord','\u2134':'oscr','\xAA':'ordf','\xBA':'ordm','\u22B6':'origof','\u2A56':'oror','\u2A57':'orslope','\u2A5B':'orv','\uD835\uDCAA':'Oscr','\xD8':'Oslash','\xF8':'oslash','\u2298':'osol','\xD5':'Otilde','\xF5':'otilde','\u2A36':'otimesas','\u2A37':'Otimes','\xD6':'Ouml','\xF6':'ouml','\u233D':'ovbar','\u23DE':'OverBrace','\u23B4':'tbrk','\u23DC':'OverParenthesis','\xB6':'para','\u2AF3':'parsim','\u2AFD':'parsl','\u2202':'part','\u041F':'Pcy','\u043F':'pcy','%':'percnt','.':'period','\u2030':'permil','\u2031':'pertenk','\uD835\uDD13':'Pfr','\uD835\uDD2D':'pfr','\u03A6':'Phi','\u03C6':'phi','\u03D5':'phiv','\u260E':'phone','\u03A0':'Pi','\u03C0':'pi','\u03D6':'piv','\u210E':'planckh','\u2A23':'plusacir','\u2A22':'pluscir','+':'plus','\u2A25':'plusdu','\u2A72':'pluse','\xB1':'pm','\u2A26':'plussim','\u2A27':'plustwo','\u2A15':'pointint','\uD835\uDD61':'popf','\u2119':'Popf','\xA3':'pound','\u2AB7':'prap','\u2ABB':'Pr','\u227A':'pr','\u227C':'prcue','\u2AAF':'pre','\u227E':'prsim','\u2AB9':'prnap','\u2AB5':'prnE','\u22E8':'prnsim','\u2AB3':'prE','\u2032':'prime','\u2033':'Prime','\u220F':'prod','\u232E':'profalar','\u2312':'profline','\u2313':'profsurf','\u221D':'prop','\u22B0':'prurel','\uD835\uDCAB':'Pscr','\uD835\uDCC5':'pscr','\u03A8':'Psi','\u03C8':'psi','\u2008':'puncsp','\uD835\uDD14':'Qfr','\uD835\uDD2E':'qfr','\uD835\uDD62':'qopf','\u211A':'Qopf','\u2057':'qprime','\uD835\uDCAC':'Qscr','\uD835\uDCC6':'qscr','\u2A16':'quatint','?':'quest','"':'quot','\u21DB':'rAarr','\u223D\u0331':'race','\u0154':'Racute','\u0155':'racute','\u221A':'Sqrt','\u29B3':'raemptyv','\u27E9':'rang','\u27EB':'Rang','\u2992':'rangd','\u29A5':'range','\xBB':'raquo','\u2975':'rarrap','\u21E5':'rarrb','\u2920':'rarrbfs','\u2933':'rarrc','\u2192':'rarr','\u21A0':'Rarr','\u291E':'rarrfs','\u2945':'rarrpl','\u2974':'rarrsim','\u2916':'Rarrtl','\u21A3':'rarrtl','\u219D':'rarrw','\u291A':'ratail','\u291C':'rAtail','\u2236':'ratio','\u2773':'rbbrk','}':'rcub',']':'rsqb','\u298C':'rbrke','\u298E':'rbrksld','\u2990':'rbrkslu','\u0158':'Rcaron','\u0159':'rcaron','\u0156':'Rcedil','\u0157':'rcedil','\u2309':'rceil','\u0420':'Rcy','\u0440':'rcy','\u2937':'rdca','\u2969':'rdldhar','\u21B3':'rdsh','\u211C':'Re','\u211B':'Rscr','\u211D':'Ropf','\u25AD':'rect','\u297D':'rfisht','\u230B':'rfloor','\uD835\uDD2F':'rfr','\u2964':'rHar','\u21C0':'rharu','\u296C':'rharul','\u03A1':'Rho','\u03C1':'rho','\u03F1':'rhov','\u21C4':'rlarr','\u27E7':'robrk','\u295D':'RightDownTeeVector','\u2955':'RightDownVectorBar','\u21C9':'rrarr','\u22A2':'vdash','\u295B':'RightTeeVector','\u22CC':'rthree','\u29D0':'RightTriangleBar','\u22B3':'vrtri','\u22B5':'rtrie','\u294F':'RightUpDownVector','\u295C':'RightUpTeeVector','\u2954':'RightUpVectorBar','\u21BE':'uharr','\u2953':'RightVectorBar','\u02DA':'ring','\u200F':'rlm','\u23B1':'rmoust','\u2AEE':'rnmid','\u27ED':'roang','\u21FE':'roarr','\u2986':'ropar','\uD835\uDD63':'ropf','\u2A2E':'roplus','\u2A35':'rotimes','\u2970':'RoundImplies',')':'rpar','\u2994':'rpargt','\u2A12':'rppolint','\u203A':'rsaquo','\uD835\uDCC7':'rscr','\u21B1':'rsh','\u22CA':'rtimes','\u25B9':'rtri','\u29CE':'rtriltri','\u29F4':'RuleDelayed','\u2968':'ruluhar','\u211E':'rx','\u015A':'Sacute','\u015B':'sacute','\u2AB8':'scap','\u0160':'Scaron','\u0161':'scaron','\u2ABC':'Sc','\u227B':'sc','\u227D':'sccue','\u2AB0':'sce','\u2AB4':'scE','\u015E':'Scedil','\u015F':'scedil','\u015C':'Scirc','\u015D':'scirc','\u2ABA':'scnap','\u2AB6':'scnE','\u22E9':'scnsim','\u2A13':'scpolint','\u227F':'scsim','\u0421':'Scy','\u0441':'scy','\u22C5':'sdot','\u2A66':'sdote','\u21D8':'seArr','\xA7':'sect',';':'semi','\u2929':'tosa','\u2736':'sext','\uD835\uDD16':'Sfr','\uD835\uDD30':'sfr','\u266F':'sharp','\u0429':'SHCHcy','\u0449':'shchcy','\u0428':'SHcy','\u0448':'shcy','\u2191':'uarr','\xAD':'shy','\u03A3':'Sigma','\u03C3':'sigma','\u03C2':'sigmaf','\u223C':'sim','\u2A6A':'simdot','\u2243':'sime','\u2A9E':'simg','\u2AA0':'simgE','\u2A9D':'siml','\u2A9F':'simlE','\u2246':'simne','\u2A24':'simplus','\u2972':'simrarr','\u2A33':'smashp','\u29E4':'smeparsl','\u2323':'smile','\u2AAA':'smt','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u042C':'SOFTcy','\u044C':'softcy','\u233F':'solbar','\u29C4':'solb','/':'sol','\uD835\uDD4A':'Sopf','\uD835\uDD64':'sopf','\u2660':'spades','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u228F':'sqsub','\u2291':'sqsube','\u2290':'sqsup','\u2292':'sqsupe','\u25A1':'squ','\uD835\uDCAE':'Sscr','\uD835\uDCC8':'sscr','\u22C6':'Star','\u2606':'star','\u2282':'sub','\u22D0':'Sub','\u2ABD':'subdot','\u2AC5':'subE','\u2286':'sube','\u2AC3':'subedot','\u2AC1':'submult','\u2ACB':'subnE','\u228A':'subne','\u2ABF':'subplus','\u2979':'subrarr','\u2AC7':'subsim','\u2AD5':'subsub','\u2AD3':'subsup','\u2211':'sum','\u266A':'sung','\xB9':'sup1','\xB2':'sup2','\xB3':'sup3','\u2283':'sup','\u22D1':'Sup','\u2ABE':'supdot','\u2AD8':'supdsub','\u2AC6':'supE','\u2287':'supe','\u2AC4':'supedot','\u27C9':'suphsol','\u2AD7':'suphsub','\u297B':'suplarr','\u2AC2':'supmult','\u2ACC':'supnE','\u228B':'supne','\u2AC0':'supplus','\u2AC8':'supsim','\u2AD4':'supsub','\u2AD6':'supsup','\u21D9':'swArr','\u292A':'swnwar','\xDF':'szlig','\t':'Tab','\u2316':'target','\u03A4':'Tau','\u03C4':'tau','\u0164':'Tcaron','\u0165':'tcaron','\u0162':'Tcedil','\u0163':'tcedil','\u0422':'Tcy','\u0442':'tcy','\u20DB':'tdot','\u2315':'telrec','\uD835\uDD17':'Tfr','\uD835\uDD31':'tfr','\u2234':'there4','\u0398':'Theta','\u03B8':'theta','\u03D1':'thetav','\u205F\u200A':'ThickSpace','\u2009':'thinsp','\xDE':'THORN','\xFE':'thorn','\u2A31':'timesbar','\xD7':'times','\u2A30':'timesd','\u2336':'topbot','\u2AF1':'topcir','\uD835\uDD4B':'Topf','\uD835\uDD65':'topf','\u2ADA':'topfork','\u2034':'tprime','\u2122':'trade','\u25B5':'utri','\u225C':'trie','\u25EC':'tridot','\u2A3A':'triminus','\u2A39':'triplus','\u29CD':'trisb','\u2A3B':'tritime','\u23E2':'trpezium','\uD835\uDCAF':'Tscr','\uD835\uDCC9':'tscr','\u0426':'TScy','\u0446':'tscy','\u040B':'TSHcy','\u045B':'tshcy','\u0166':'Tstrok','\u0167':'tstrok','\xDA':'Uacute','\xFA':'uacute','\u219F':'Uarr','\u2949':'Uarrocir','\u040E':'Ubrcy','\u045E':'ubrcy','\u016C':'Ubreve','\u016D':'ubreve','\xDB':'Ucirc','\xFB':'ucirc','\u0423':'Ucy','\u0443':'ucy','\u21C5':'udarr','\u0170':'Udblac','\u0171':'udblac','\u296E':'udhar','\u297E':'ufisht','\uD835\uDD18':'Ufr','\uD835\uDD32':'ufr','\xD9':'Ugrave','\xF9':'ugrave','\u2963':'uHar','\u2580':'uhblk','\u231C':'ulcorn','\u230F':'ulcrop','\u25F8':'ultri','\u016A':'Umacr','\u016B':'umacr','\u23DF':'UnderBrace','\u23DD':'UnderParenthesis','\u228E':'uplus','\u0172':'Uogon','\u0173':'uogon','\uD835\uDD4C':'Uopf','\uD835\uDD66':'uopf','\u2912':'UpArrowBar','\u2195':'varr','\u03C5':'upsi','\u03D2':'Upsi','\u03A5':'Upsilon','\u21C8':'uuarr','\u231D':'urcorn','\u230E':'urcrop','\u016E':'Uring','\u016F':'uring','\u25F9':'urtri','\uD835\uDCB0':'Uscr','\uD835\uDCCA':'uscr','\u22F0':'utdot','\u0168':'Utilde','\u0169':'utilde','\xDC':'Uuml','\xFC':'uuml','\u29A7':'uwangle','\u299C':'vangrt','\u228A\uFE00':'vsubne','\u2ACB\uFE00':'vsubnE','\u228B\uFE00':'vsupne','\u2ACC\uFE00':'vsupnE','\u2AE8':'vBar','\u2AEB':'Vbar','\u2AE9':'vBarv','\u0412':'Vcy','\u0432':'vcy','\u22A9':'Vdash','\u22AB':'VDash','\u2AE6':'Vdashl','\u22BB':'veebar','\u225A':'veeeq','\u22EE':'vellip','|':'vert','\u2016':'Vert','\u2758':'VerticalSeparator','\u2240':'wr','\uD835\uDD19':'Vfr','\uD835\uDD33':'vfr','\uD835\uDD4D':'Vopf','\uD835\uDD67':'vopf','\uD835\uDCB1':'Vscr','\uD835\uDCCB':'vscr','\u22AA':'Vvdash','\u299A':'vzigzag','\u0174':'Wcirc','\u0175':'wcirc','\u2A5F':'wedbar','\u2259':'wedgeq','\u2118':'wp','\uD835\uDD1A':'Wfr','\uD835\uDD34':'wfr','\uD835\uDD4E':'Wopf','\uD835\uDD68':'wopf','\uD835\uDCB2':'Wscr','\uD835\uDCCC':'wscr','\uD835\uDD1B':'Xfr','\uD835\uDD35':'xfr','\u039E':'Xi','\u03BE':'xi','\u22FB':'xnis','\uD835\uDD4F':'Xopf','\uD835\uDD69':'xopf','\uD835\uDCB3':'Xscr','\uD835\uDCCD':'xscr','\xDD':'Yacute','\xFD':'yacute','\u042F':'YAcy','\u044F':'yacy','\u0176':'Ycirc','\u0177':'ycirc','\u042B':'Ycy','\u044B':'ycy','\xA5':'yen','\uD835\uDD1C':'Yfr','\uD835\uDD36':'yfr','\u0407':'YIcy','\u0457':'yicy','\uD835\uDD50':'Yopf','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDCCE':'yscr','\u042E':'YUcy','\u044E':'yucy','\xFF':'yuml','\u0178':'Yuml','\u0179':'Zacute','\u017A':'zacute','\u017D':'Zcaron','\u017E':'zcaron','\u0417':'Zcy','\u0437':'zcy','\u017B':'Zdot','\u017C':'zdot','\u2128':'Zfr','\u0396':'Zeta','\u03B6':'zeta','\uD835\uDD37':'zfr','\u0416':'ZHcy','\u0436':'zhcy','\u21DD':'zigrarr','\uD835\uDD6B':'zopf','\uD835\uDCB5':'Zscr','\uD835\uDCCF':'zscr','\u200D':'zwj','\u200C':'zwnj'};
+
+	var regexEscape = /["&'<>`]/g;
+	var escapeMap = {
+		'"': '&quot;',
+		'&': '&amp;',
+		'\'': '&#x27;',
+		'<': '&lt;',
+		// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
+		// following is not strictly necessary unless it’s part of a tag or an
+		// unquoted attribute value. We’re only escaping it to support those
+		// situations, and for XML support.
+		'>': '&gt;',
+		// In Internet Explorer ≤ 8, the backtick character can be used
+		// to break out of (un)quoted attribute values or HTML comments.
+		// See http://html5sec.org/#102, http://html5sec.org/#108, and
+		// http://html5sec.org/#133.
+		'`': '&#x60;'
+	};
+
+	var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
+	var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
+	var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egrave|egrave|ugrave|frac12|frac14|frac34|Ugrave|Oacute|Iacute|ntilde|Ntilde|uacute|middot|Igrave|igrave|iquest|aacute|laquo|THORN|micro|iexcl|icirc|Icirc|Acirc|ucirc|ecirc|Ocirc|ocirc|Ecirc|Ucirc|aring|Aring|aelig|AElig|acute|pound|raquo|acirc|times|thorn|szlig|cedil|COPY|Auml|ordf|ordm|uuml|macr|Uuml|auml|Ouml|ouml|para|nbsp|Euml|quot|QUOT|euml|yuml|cent|sect|copy|sup1|sup2|sup3|Iuml|iuml|shy|eth|reg|not|yen|amp|AMP|REG|uml|ETH|deg|gt|GT|LT|lt)([=a-zA-Z0-9])?/g;
+	var decodeMap = {'Aacute':'\xC1','aacute':'\xE1','Abreve':'\u0102','abreve':'\u0103','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','Acy':'\u0410','acy':'\u0430','AElig':'\xC6','aelig':'\xE6','af':'\u2061','Afr':'\uD835\uDD04','afr':'\uD835\uDD1E','Agrave':'\xC0','agrave':'\xE0','alefsym':'\u2135','aleph':'\u2135','Alpha':'\u0391','alpha':'\u03B1','Amacr':'\u0100','amacr':'\u0101','amalg':'\u2A3F','amp':'&','AMP':'&','andand':'\u2A55','And':'\u2A53','and':'\u2227','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angmsd':'\u2221','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','Aogon':'\u0104','aogon':'\u0105','Aopf':'\uD835\uDD38','aopf':'\uD835\uDD52','apacir':'\u2A6F','ap':'\u2248','apE':'\u2A70','ape':'\u224A','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','Aring':'\xC5','aring':'\xE5','Ascr':'\uD835\uDC9C','ascr':'\uD835\uDCB6','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','Bcy':'\u0411','bcy':'\u0431','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','Beta':'\u0392','beta':'\u03B2','beth':'\u2136','between':'\u226C','Bfr':'\uD835\uDD05','bfr':'\uD835\uDD1F','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bNot':'\u2AED','bnot':'\u2310','Bopf':'\uD835\uDD39','bopf':'\uD835\uDD53','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxHd':'\u2564','boxhD':'\u2565','boxHD':'\u2566','boxhu':'\u2534','boxHu':'\u2567','boxhU':'\u2568','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsolb':'\u29C5','bsol':'\\','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpE':'\u2AAE','bumpe':'\u224F','Bumpeq':'\u224E','bumpeq':'\u224F','Cacute':'\u0106','cacute':'\u0107','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','cap':'\u2229','Cap':'\u22D2','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','Ccaron':'\u010C','ccaron':'\u010D','Ccedil':'\xC7','ccedil':'\xE7','Ccirc':'\u0108','ccirc':'\u0109','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','Cdot':'\u010A','cdot':'\u010B','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','CHcy':'\u0427','chcy':'\u0447','check':'\u2713','checkmark':'\u2713','Chi':'\u03A7','chi':'\u03C7','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cir':'\u25CB','cirE':'\u29C3','cire':'\u2257','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','Colone':'\u2A74','colone':'\u2254','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','Cscr':'\uD835\uDC9E','cscr':'\uD835\uDCB8','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cup':'\u222A','Cup':'\u22D3','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','Darr':'\u21A1','dArr':'\u21D3','dash':'\u2010','Dashv':'\u2AE4','dashv':'\u22A3','dbkarow':'\u290F','dblac':'\u02DD','Dcaron':'\u010E','dcaron':'\u010F','Dcy':'\u0414','dcy':'\u0434','ddagger':'\u2021','ddarr':'\u21CA','DD':'\u2145','dd':'\u2146','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','Delta':'\u0394','delta':'\u03B4','demptyv':'\u29B1','dfisht':'\u297F','Dfr':'\uD835\uDD07','dfr':'\uD835\uDD21','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','DJcy':'\u0402','djcy':'\u0452','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','Dopf':'\uD835\uDD3B','dopf':'\uD835\uDD55','Dot':'\xA8','dot':'\u02D9','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','DownArrowBar':'\u2913','downarrow':'\u2193','DownArrow':'\u2193','Downarrow':'\u21D3','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVectorBar':'\u2956','DownLeftVector':'\u21BD','DownRightTeeVector':'\u295F','DownRightVectorBar':'\u2957','DownRightVector':'\u21C1','DownTeeArrow':'\u21A7','DownTee':'\u22A4','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','Dscr':'\uD835\uDC9F','dscr':'\uD835\uDCB9','DScy':'\u0405','dscy':'\u0455','dsol':'\u29F6','Dstrok':'\u0110','dstrok':'\u0111','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','DZcy':'\u040F','dzcy':'\u045F','dzigrarr':'\u27FF','Eacute':'\xC9','eacute':'\xE9','easter':'\u2A6E','Ecaron':'\u011A','ecaron':'\u011B','Ecirc':'\xCA','ecirc':'\xEA','ecir':'\u2256','ecolon':'\u2255','Ecy':'\u042D','ecy':'\u044D','eDDot':'\u2A77','Edot':'\u0116','edot':'\u0117','eDot':'\u2251','ee':'\u2147','efDot':'\u2252','Efr':'\uD835\uDD08','efr':'\uD835\uDD22','eg':'\u2A9A','Egrave':'\xC8','egrave':'\xE8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','Emacr':'\u0112','emacr':'\u0113','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp13':'\u2004','emsp14':'\u2005','emsp':'\u2003','ENG':'\u014A','eng':'\u014B','ensp':'\u2002','Eogon':'\u0118','eogon':'\u0119','Eopf':'\uD835\uDD3C','eopf':'\uD835\uDD56','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','Epsilon':'\u0395','epsilon':'\u03B5','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','Esim':'\u2A73','esim':'\u2242','Eta':'\u0397','eta':'\u03B7','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','Fcy':'\u0424','fcy':'\u0444','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','Ffr':'\uD835\uDD09','ffr':'\uD835\uDD23','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','Fopf':'\uD835\uDD3D','fopf':'\uD835\uDD57','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','Gamma':'\u0393','gamma':'\u03B3','Gammad':'\u03DC','gammad':'\u03DD','gap':'\u2A86','Gbreve':'\u011E','gbreve':'\u011F','Gcedil':'\u0122','Gcirc':'\u011C','gcirc':'\u011D','Gcy':'\u0413','gcy':'\u0433','Gdot':'\u0120','gdot':'\u0121','ge':'\u2265','gE':'\u2267','gEl':'\u2A8C','gel':'\u22DB','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','gescc':'\u2AA9','ges':'\u2A7E','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','Gfr':'\uD835\uDD0A','gfr':'\uD835\uDD24','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','GJcy':'\u0403','gjcy':'\u0453','gla':'\u2AA5','gl':'\u2277','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','Gopf':'\uD835\uDD3E','gopf':'\uD835\uDD58','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','Gscr':'\uD835\uDCA2','gscr':'\u210A','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gtcc':'\u2AA7','gtcir':'\u2A7A','gt':'>','GT':'>','Gt':'\u226B','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','HARDcy':'\u042A','hardcy':'\u044A','harrcir':'\u2948','harr':'\u2194','hArr':'\u21D4','harrw':'\u21AD','Hat':'^','hbar':'\u210F','Hcirc':'\u0124','hcirc':'\u0125','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','Hstrok':'\u0126','hstrok':'\u0127','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','Iacute':'\xCD','iacute':'\xED','ic':'\u2063','Icirc':'\xCE','icirc':'\xEE','Icy':'\u0418','icy':'\u0438','Idot':'\u0130','IEcy':'\u0415','iecy':'\u0435','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','Igrave':'\xCC','igrave':'\xEC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','IJlig':'\u0132','ijlig':'\u0133','Imacr':'\u012A','imacr':'\u012B','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','Im':'\u2111','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','incare':'\u2105','in':'\u2208','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','intcal':'\u22BA','int':'\u222B','Int':'\u222C','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','IOcy':'\u0401','iocy':'\u0451','Iogon':'\u012E','iogon':'\u012F','Iopf':'\uD835\uDD40','iopf':'\uD835\uDD5A','Iota':'\u0399','iota':'\u03B9','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','Itilde':'\u0128','itilde':'\u0129','Iukcy':'\u0406','iukcy':'\u0456','Iuml':'\xCF','iuml':'\xEF','Jcirc':'\u0134','jcirc':'\u0135','Jcy':'\u0419','jcy':'\u0439','Jfr':'\uD835\uDD0D','jfr':'\uD835\uDD27','jmath':'\u0237','Jopf':'\uD835\uDD41','jopf':'\uD835\uDD5B','Jscr':'\uD835\uDCA5','jscr':'\uD835\uDCBF','Jsercy':'\u0408','jsercy':'\u0458','Jukcy':'\u0404','jukcy':'\u0454','Kappa':'\u039A','kappa':'\u03BA','kappav':'\u03F0','Kcedil':'\u0136','kcedil':'\u0137','Kcy':'\u041A','kcy':'\u043A','Kfr':'\uD835\uDD0E','kfr':'\uD835\uDD28','kgreen':'\u0138','KHcy':'\u0425','khcy':'\u0445','KJcy':'\u040C','kjcy':'\u045C','Kopf':'\uD835\uDD42','kopf':'\uD835\uDD5C','Kscr':'\uD835\uDCA6','kscr':'\uD835\uDCC0','lAarr':'\u21DA','Lacute':'\u0139','lacute':'\u013A','laemptyv':'\u29B4','lagran':'\u2112','Lambda':'\u039B','lambda':'\u03BB','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larrb':'\u21E4','larrbfs':'\u291F','larr':'\u2190','Larr':'\u219E','lArr':'\u21D0','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','latail':'\u2919','lAtail':'\u291B','lat':'\u2AAB','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','Lcaron':'\u013D','lcaron':'\u013E','Lcedil':'\u013B','lcedil':'\u013C','lceil':'\u2308','lcub':'{','Lcy':'\u041B','lcy':'\u043B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','LeftArrowBar':'\u21E4','leftarrow':'\u2190','LeftArrow':'\u2190','Leftarrow':'\u21D0','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVectorBar':'\u2959','LeftDownVector':'\u21C3','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','LeftRightArrow':'\u2194','Leftrightarrow':'\u21D4','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTeeArrow':'\u21A4','LeftTee':'\u22A3','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangleBar':'\u29CF','LeftTriangle':'\u22B2','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVectorBar':'\u2958','LeftUpVector':'\u21BF','LeftVectorBar':'\u2952','LeftVector':'\u21BC','lEg':'\u2A8B','leg':'\u22DA','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','lescc':'\u2AA8','les':'\u2A7D','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','Lfr':'\uD835\uDD0F','lfr':'\uD835\uDD29','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','LJcy':'\u0409','ljcy':'\u0459','llarr':'\u21C7','ll':'\u226A','Ll':'\u22D8','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','Lmidot':'\u013F','lmidot':'\u0140','lmoustache':'\u23B0','lmoust':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','LongLeftArrow':'\u27F5','Longleftarrow':'\u27F8','longleftrightarrow':'\u27F7','LongLeftRightArrow':'\u27F7','Longleftrightarrow':'\u27FA','longmapsto':'\u27FC','longrightarrow':'\u27F6','LongRightArrow':'\u27F6','Longrightarrow':'\u27F9','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','Lopf':'\uD835\uDD43','lopf':'\uD835\uDD5D','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','Lstrok':'\u0141','lstrok':'\u0142','ltcc':'\u2AA6','ltcir':'\u2A79','lt':'<','LT':'<','Lt':'\u226A','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','Map':'\u2905','map':'\u21A6','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','Mcy':'\u041C','mcy':'\u043C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','Mfr':'\uD835\uDD10','mfr':'\uD835\uDD2A','mho':'\u2127','micro':'\xB5','midast':'*','midcir':'\u2AF0','mid':'\u2223','middot':'\xB7','minusb':'\u229F','minus':'\u2212','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','Mopf':'\uD835\uDD44','mopf':'\uD835\uDD5E','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','Mu':'\u039C','mu':'\u03BC','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','Nacute':'\u0143','nacute':'\u0144','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natural':'\u266E','naturals':'\u2115','natur':'\u266E','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','Ncaron':'\u0147','ncaron':'\u0148','Ncedil':'\u0145','ncedil':'\u0146','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','Ncy':'\u041D','ncy':'\u043D','ndash':'\u2013','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','ne':'\u2260','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','Nfr':'\uD835\uDD11','nfr':'\uD835\uDD2B','ngE':'\u2267\u0338','nge':'\u2271','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','nGt':'\u226B\u20D2','ngt':'\u226F','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','NJcy':'\u040A','njcy':'\u045A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nlE':'\u2266\u0338','nle':'\u2270','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nLt':'\u226A\u20D2','nlt':'\u226E','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','Not':'\u2AEC','not':'\xAC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangle':'\u22EA','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangle':'\u22EB','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','nparallel':'\u2226','npar':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','nprec':'\u2280','npreceq':'\u2AAF\u0338','npre':'\u2AAF\u0338','nrarrc':'\u2933\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','Nscr':'\uD835\uDCA9','nscr':'\uD835\uDCC3','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsubE':'\u2AC5\u0338','nsube':'\u2288','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupE':'\u2AC6\u0338','nsupe':'\u2289','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','Ntilde':'\xD1','ntilde':'\xF1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','Nu':'\u039D','nu':'\u03BD','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','Oacute':'\xD3','oacute':'\xF3','oast':'\u229B','Ocirc':'\xD4','ocirc':'\xF4','ocir':'\u229A','Ocy':'\u041E','ocy':'\u043E','odash':'\u229D','Odblac':'\u0150','odblac':'\u0151','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','OElig':'\u0152','oelig':'\u0153','ofcir':'\u29BF','Ofr':'\uD835\uDD12','ofr':'\uD835\uDD2C','ogon':'\u02DB','Ograve':'\xD2','ograve':'\xF2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','Omacr':'\u014C','omacr':'\u014D','Omega':'\u03A9','omega':'\u03C9','Omicron':'\u039F','omicron':'\u03BF','omid':'\u29B6','ominus':'\u2296','Oopf':'\uD835\uDD46','oopf':'\uD835\uDD60','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','orarr':'\u21BB','Or':'\u2A54','or':'\u2228','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','Oscr':'\uD835\uDCAA','oscr':'\u2134','Oslash':'\xD8','oslash':'\xF8','osol':'\u2298','Otilde':'\xD5','otilde':'\xF5','otimesas':'\u2A36','Otimes':'\u2A37','otimes':'\u2297','Ouml':'\xD6','ouml':'\xF6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','para':'\xB6','parallel':'\u2225','par':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','Pcy':'\u041F','pcy':'\u043F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','Pfr':'\uD835\uDD13','pfr':'\uD835\uDD2D','Phi':'\u03A6','phi':'\u03C6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','Pi':'\u03A0','pi':'\u03C0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plus':'+','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','prap':'\u2AB7','Pr':'\u2ABB','pr':'\u227A','prcue':'\u227C','precapprox':'\u2AB7','prec':'\u227A','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','pre':'\u2AAF','prE':'\u2AB3','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportional':'\u221D','Proportion':'\u2237','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','Pscr':'\uD835\uDCAB','pscr':'\uD835\uDCC5','Psi':'\u03A8','psi':'\u03C8','puncsp':'\u2008','Qfr':'\uD835\uDD14','qfr':'\uD835\uDD2E','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','Qscr':'\uD835\uDCAC','qscr':'\uD835\uDCC6','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','Racute':'\u0154','racute':'\u0155','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarr':'\u2192','Rarr':'\u21A0','rArr':'\u21D2','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','Rarrtl':'\u2916','rarrtl':'\u21A3','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','Rcaron':'\u0158','rcaron':'\u0159','Rcedil':'\u0156','rcedil':'\u0157','rceil':'\u2309','rcub':'}','Rcy':'\u0420','rcy':'\u0440','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','Re':'\u211C','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','Rho':'\u03A1','rho':'\u03C1','rhov':'\u03F1','RightAngleBracket':'\u27E9','RightArrowBar':'\u21E5','rightarrow':'\u2192','RightArrow':'\u2192','Rightarrow':'\u21D2','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVectorBar':'\u2955','RightDownVector':'\u21C2','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTeeArrow':'\u21A6','RightTee':'\u22A2','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangleBar':'\u29D0','RightTriangle':'\u22B3','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVectorBar':'\u2954','RightUpVector':'\u21BE','RightVectorBar':'\u2953','RightVector':'\u21C0','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoustache':'\u23B1','rmoust':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','Sacute':'\u015A','sacute':'\u015B','sbquo':'\u201A','scap':'\u2AB8','Scaron':'\u0160','scaron':'\u0161','Sc':'\u2ABC','sc':'\u227B','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','Scedil':'\u015E','scedil':'\u015F','Scirc':'\u015C','scirc':'\u015D','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','Scy':'\u0421','scy':'\u0441','sdotb':'\u22A1','sdot':'\u22C5','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','Sfr':'\uD835\uDD16','sfr':'\uD835\uDD30','sfrown':'\u2322','sharp':'\u266F','SHCHcy':'\u0429','shchcy':'\u0449','SHcy':'\u0428','shcy':'\u0448','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','Sigma':'\u03A3','sigma':'\u03C3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','SOFTcy':'\u042C','softcy':'\u044C','solbar':'\u233F','solb':'\u29C4','sol':'/','Sopf':'\uD835\uDD4A','sopf':'\uD835\uDD64','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squ':'\u25A1','squf':'\u25AA','srarr':'\u2192','Sscr':'\uD835\uDCAE','sscr':'\uD835\uDCC8','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','Star':'\u22C6','star':'\u2606','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','subE':'\u2AC5','sube':'\u2286','subedot':'\u2AC3','submult':'\u2AC1','subnE':'\u2ACB','subne':'\u228A','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succapprox':'\u2AB8','succ':'\u227B','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','sup':'\u2283','Sup':'\u22D1','supdot':'\u2ABE','supdsub':'\u2AD8','supE':'\u2AC6','supe':'\u2287','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supnE':'\u2ACC','supne':'\u228B','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','Tau':'\u03A4','tau':'\u03C4','tbrk':'\u23B4','Tcaron':'\u0164','tcaron':'\u0165','Tcedil':'\u0162','tcedil':'\u0163','Tcy':'\u0422','tcy':'\u0442','tdot':'\u20DB','telrec':'\u2315','Tfr':'\uD835\uDD17','tfr':'\uD835\uDD31','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','Theta':'\u0398','theta':'\u03B8','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','ThinSpace':'\u2009','thinsp':'\u2009','thkap':'\u2248','thksim':'\u223C','THORN':'\xDE','thorn':'\xFE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','timesbar':'\u2A31','timesb':'\u22A0','times':'\xD7','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','topbot':'\u2336','topcir':'\u2AF1','top':'\u22A4','Topf':'\uD835\uDD4B','topf':'\uD835\uDD65','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','Tscr':'\uD835\uDCAF','tscr':'\uD835\uDCC9','TScy':'\u0426','tscy':'\u0446','TSHcy':'\u040B','tshcy':'\u045B','Tstrok':'\u0166','tstrok':'\u0167','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','Uacute':'\xDA','uacute':'\xFA','uarr':'\u2191','Uarr':'\u219F','uArr':'\u21D1','Uarrocir':'\u2949','Ubrcy':'\u040E','ubrcy':'\u045E','Ubreve':'\u016C','ubreve':'\u016D','Ucirc':'\xDB','ucirc':'\xFB','Ucy':'\u0423','ucy':'\u0443','udarr':'\u21C5','Udblac':'\u0170','udblac':'\u0171','udhar':'\u296E','ufisht':'\u297E','Ufr':'\uD835\uDD18','ufr':'\uD835\uDD32','Ugrave':'\xD9','ugrave':'\xF9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','Umacr':'\u016A','umacr':'\u016B','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','Uogon':'\u0172','uogon':'\u0173','Uopf':'\uD835\uDD4C','uopf':'\uD835\uDD66','UpArrowBar':'\u2912','uparrow':'\u2191','UpArrow':'\u2191','Uparrow':'\u21D1','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','UpDownArrow':'\u2195','Updownarrow':'\u21D5','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','Upsilon':'\u03A5','upsilon':'\u03C5','UpTeeArrow':'\u21A5','UpTee':'\u22A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','Uring':'\u016E','uring':'\u016F','urtri':'\u25F9','Uscr':'\uD835\uDCB0','uscr':'\uD835\uDCCA','utdot':'\u22F0','Utilde':'\u0168','utilde':'\u0169','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','Uuml':'\xDC','uuml':'\xFC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','Vcy':'\u0412','vcy':'\u0432','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','veebar':'\u22BB','vee':'\u2228','Vee':'\u22C1','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','Vfr':'\uD835\uDD19','vfr':'\uD835\uDD33','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','Vopf':'\uD835\uDD4D','vopf':'\uD835\uDD67','vprop':'\u221D','vrtri':'\u22B3','Vscr':'\uD835\uDCB1','vscr':'\uD835\uDCCB','vsubnE':'\u2ACB\uFE00','vsubne':'\u228A\uFE00','vsupnE':'\u2ACC\uFE00','vsupne':'\u228B\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','Wcirc':'\u0174','wcirc':'\u0175','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','Wfr':'\uD835\uDD1A','wfr':'\uD835\uDD34','Wopf':'\uD835\uDD4E','wopf':'\uD835\uDD68','wp':'\u2118','wr':'\u2240','wreath':'\u2240','Wscr':'\uD835\uDCB2','wscr':'\uD835\uDCCC','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','Xfr':'\uD835\uDD1B','xfr':'\uD835\uDD35','xharr':'\u27F7','xhArr':'\u27FA','Xi':'\u039E','xi':'\u03BE','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','Xopf':'\uD835\uDD4F','xopf':'\uD835\uDD69','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','Xscr':'\uD835\uDCB3','xscr':'\uD835\uDCCD','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','Yacute':'\xDD','yacute':'\xFD','YAcy':'\u042F','yacy':'\u044F','Ycirc':'\u0176','ycirc':'\u0177','Ycy':'\u042B','ycy':'\u044B','yen':'\xA5','Yfr':'\uD835\uDD1C','yfr':'\uD835\uDD36','YIcy':'\u0407','yicy':'\u0457','Yopf':'\uD835\uDD50','yopf':'\uD835\uDD6A','Yscr':'\uD835\uDCB4','yscr':'\uD835\uDCCE','YUcy':'\u042E','yucy':'\u044E','yuml':'\xFF','Yuml':'\u0178','Zacute':'\u0179','zacute':'\u017A','Zcaron':'\u017D','zcaron':'\u017E','Zcy':'\u0417','zcy':'\u0437','Zdot':'\u017B','zdot':'\u017C','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','Zeta':'\u0396','zeta':'\u03B6','zfr':'\uD835\uDD37','Zfr':'\u2128','ZHcy':'\u0416','zhcy':'\u0436','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','Zscr':'\uD835\uDCB5','zscr':'\uD835\uDCCF','zwj':'\u200D','zwnj':'\u200C'};
+	var decodeMapLegacy = {'Aacute':'\xC1','aacute':'\xE1','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','AElig':'\xC6','aelig':'\xE6','Agrave':'\xC0','agrave':'\xE0','amp':'&','AMP':'&','Aring':'\xC5','aring':'\xE5','Atilde':'\xC3','atilde':'\xE3','Auml':'\xC4','auml':'\xE4','brvbar':'\xA6','Ccedil':'\xC7','ccedil':'\xE7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','Eacute':'\xC9','eacute':'\xE9','Ecirc':'\xCA','ecirc':'\xEA','Egrave':'\xC8','egrave':'\xE8','ETH':'\xD0','eth':'\xF0','Euml':'\xCB','euml':'\xEB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','Iacute':'\xCD','iacute':'\xED','Icirc':'\xCE','icirc':'\xEE','iexcl':'\xA1','Igrave':'\xCC','igrave':'\xEC','iquest':'\xBF','Iuml':'\xCF','iuml':'\xEF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','Ntilde':'\xD1','ntilde':'\xF1','Oacute':'\xD3','oacute':'\xF3','Ocirc':'\xD4','ocirc':'\xF4','Ograve':'\xD2','ograve':'\xF2','ordf':'\xAA','ordm':'\xBA','Oslash':'\xD8','oslash':'\xF8','Otilde':'\xD5','otilde':'\xF5','Ouml':'\xD6','ouml':'\xF6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','THORN':'\xDE','thorn':'\xFE','times':'\xD7','Uacute':'\xDA','uacute':'\xFA','Ucirc':'\xDB','ucirc':'\xFB','Ugrave':'\xD9','ugrave':'\xF9','uml':'\xA8','Uuml':'\xDC','uuml':'\xFC','Yacute':'\xDD','yacute':'\xFD','yen':'\xA5','yuml':'\xFF'};
+	var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
+	var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
+
+	/*--------------------------------------------------------------------------*/
+
+	var stringFromCharCode = String.fromCharCode;
+
+	var object = {};
+	var hasOwnProperty = object.hasOwnProperty;
+	var has = function(object, propertyName) {
+		return hasOwnProperty.call(object, propertyName);
+	};
+
+	var contains = function(array, value) {
+		var index = -1;
+		var length = array.length;
+		while (++index < length) {
+			if (array[index] == value) {
+				return true;
+			}
+		}
+		return false;
+	};
+
+	var merge = function(options, defaults) {
+		if (!options) {
+			return defaults;
+		}
+		var result = {};
+		var key;
+		for (key in defaults) {
+			// A `hasOwnProperty` check is not needed here, since only recognized
+			// option names are used anyway. Any others are ignored.
+			result[key] = has(options, key) ? options[key] : defaults[key];
+		}
+		return result;
+	};
+
+	// Modified version of `ucs2encode`; see https://mths.be/punycode.
+	var codePointToSymbol = function(codePoint, strict) {
+		var output = '';
+		if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
+			// See issue #4:
+			// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
+			// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
+			// REPLACEMENT CHARACTER.”
+			if (strict) {
+				parseError('character reference outside the permissible Unicode range');
+			}
+			return '\uFFFD';
+		}
+		if (has(decodeMapNumeric, codePoint)) {
+			if (strict) {
+				parseError('disallowed character reference');
+			}
+			return decodeMapNumeric[codePoint];
+		}
+		if (strict && contains(invalidReferenceCodePoints, codePoint)) {
+			parseError('disallowed character reference');
+		}
+		if (codePoint > 0xFFFF) {
+			codePoint -= 0x10000;
+			output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
+			codePoint = 0xDC00 | codePoint & 0x3FF;
+		}
+		output += stringFromCharCode(codePoint);
+		return output;
+	};
+
+	var hexEscape = function(symbol) {
+		return '&#x' + symbol.charCodeAt(0).toString(16).toUpperCase() + ';';
+	};
+
+	var parseError = function(message) {
+		throw Error('Parse error: ' + message);
+	};
+
+	/*--------------------------------------------------------------------------*/
+
+	var encode = function(string, options) {
+		options = merge(options, encode.options);
+		var strict = options.strict;
+		if (strict && regexInvalidRawCodePoint.test(string)) {
+			parseError('forbidden code point');
+		}
+		var encodeEverything = options.encodeEverything;
+		var useNamedReferences = options.useNamedReferences;
+		var allowUnsafeSymbols = options.allowUnsafeSymbols;
+		if (encodeEverything) {
+			// Encode ASCII symbols.
+			string = string.replace(regexAsciiWhitelist, function(symbol) {
+				// Use named references if requested & possible.
+				if (useNamedReferences && has(encodeMap, symbol)) {
+					return '&' + encodeMap[symbol] + ';';
+				}
+				return hexEscape(symbol);
+			});
+			// Shorten a few escapes that represent two symbols, of which at least one
+			// is within the ASCII range.
+			if (useNamedReferences) {
+				string = string
+					.replace(/&gt;\u20D2/g, '&nvgt;')
+					.replace(/&lt;\u20D2/g, '&nvlt;')
+					.replace(/&#x66;&#x6A;/g, '&fjlig;');
+			}
+			// Encode non-ASCII symbols.
+			if (useNamedReferences) {
+				// Encode non-ASCII symbols that can be replaced with a named reference.
+				string = string.replace(regexEncodeNonAscii, function(string) {
+					// Note: there is no need to check `has(encodeMap, string)` here.
+					return '&' + encodeMap[string] + ';';
+				});
+			}
+			// Note: any remaining non-ASCII symbols are handled outside of the `if`.
+		} else if (useNamedReferences) {
+			// Apply named character references.
+			// Encode `<>"'&` using named character references.
+			if (!allowUnsafeSymbols) {
+				string = string.replace(regexEscape, function(string) {
+					return '&' + encodeMap[string] + ';'; // no need to check `has()` here
+				});
+			}
+			// Shorten escapes that represent two symbols, of which at least one is
+			// `<>"'&`.
+			string = string
+				.replace(/&gt;\u20D2/g, '&nvgt;')
+				.replace(/&lt;\u20D2/g, '&nvlt;');
+			// Encode non-ASCII symbols that can be replaced with a named reference.
+			string = string.replace(regexEncodeNonAscii, function(string) {
+				// Note: there is no need to check `has(encodeMap, string)` here.
+				return '&' + encodeMap[string] + ';';
+			});
+		} else if (!allowUnsafeSymbols) {
+			// Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
+			// using named character references.
+			string = string.replace(regexEscape, hexEscape);
+		}
+		return string
+			// Encode astral symbols.
+			.replace(regexAstralSymbols, function($0) {
+				// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
+				var high = $0.charCodeAt(0);
+				var low = $0.charCodeAt(1);
+				var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
+				return '&#x' + codePoint.toString(16).toUpperCase() + ';';
+			})
+			// Encode any remaining BMP symbols that are not printable ASCII symbols
+			// using a hexadecimal escape.
+			.replace(regexBmpWhitelist, hexEscape);
+	};
+	// Expose default options (so they can be overridden globally).
+	encode.options = {
+		'allowUnsafeSymbols': false,
+		'encodeEverything': false,
+		'strict': false,
+		'useNamedReferences': false
+	};
+
+	var decode = function(html, options) {
+		options = merge(options, decode.options);
+		var strict = options.strict;
+		if (strict && regexInvalidEntity.test(html)) {
+			parseError('malformed character reference');
+		}
+		return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7) {
+			var codePoint;
+			var semicolon;
+			var hexDigits;
+			var reference;
+			var next;
+			if ($1) {
+				// Decode decimal escapes, e.g. `&#119558;`.
+				codePoint = $1;
+				semicolon = $2;
+				if (strict && !semicolon) {
+					parseError('character reference was not terminated by a semicolon');
+				}
+				return codePointToSymbol(codePoint, strict);
+			}
+			if ($3) {
+				// Decode hexadecimal escapes, e.g. `&#x1D306;`.
+				hexDigits = $3;
+				semicolon = $4;
+				if (strict && !semicolon) {
+					parseError('character reference was not terminated by a semicolon');
+				}
+				codePoint = parseInt(hexDigits, 16);
+				return codePointToSymbol(codePoint, strict);
+			}
+			if ($5) {
+				// Decode named character references with trailing `;`, e.g. `&copy;`.
+				reference = $5;
+				if (has(decodeMap, reference)) {
+					return decodeMap[reference];
+				} else {
+					// Ambiguous ampersand. https://mths.be/notes/ambiguous-ampersands
+					if (strict) {
+						parseError(
+							'named character reference was not terminated by a semicolon'
+						);
+					}
+					return $0;
+				}
+			}
+			// If we’re still here, it’s a legacy reference for sure. No need for an
+			// extra `if` check.
+			// Decode named character references without trailing `;`, e.g. `&amp`
+			// This is only a parse error if it gets converted to `&`, or if it is
+			// followed by `=` in an attribute context.
+			reference = $6;
+			next = $7;
+			if (next && options.isAttributeValue) {
+				if (strict && next == '=') {
+					parseError('`&` did not start a character reference');
+				}
+				return $0;
+			} else {
+				if (strict) {
+					parseError(
+						'named character reference was not terminated by a semicolon'
+					);
+				}
+				// Note: there is no need to check `has(decodeMapLegacy, reference)`.
+				return decodeMapLegacy[reference] + (next || '');
+			}
+		});
+	};
+	// Expose default options (so they can be overridden globally).
+	decode.options = {
+		'isAttributeValue': false,
+		'strict': false
+	};
+
+	var escape = function(string) {
+		return string.replace(regexEscape, function($0) {
+			// Note: there is no need to check `has(escapeMap, $0)` here.
+			return escapeMap[$0];
+		});
+	};
+
+	/*--------------------------------------------------------------------------*/
+
+	var he = {
+		'version': '0.5.0',
+		'encode': encode,
+		'decode': decode,
+		'escape': escape,
+		'unescape': decode
+	};
+
+	// Some AMD build optimizers, like r.js, check for specific condition patterns
+	// like the following:
+	if (
+		typeof define == 'function' &&
+		typeof define.amd == 'object' &&
+		define.amd
+	) {
+		define(function() {
+			return he;
+		});
+	}	else if (freeExports && !freeExports.nodeType) {
+		if (freeModule) { // in Node.js or RingoJS v0.8.0+
+			freeModule.exports = he;
+		} else { // in Narwhal or RingoJS v0.7.0-
+			for (var key in he) {
+				has(he, key) && (freeExports[key] = he[key]);
+			}
+		}
+	} else { // in Rhino or a web browser
+		root.he = he;
+	}
+
+}(this));
+
+/*
+ * to-markdown - an HTML to Markdown converter
+ *
+ * Copyright 2011, Dom Christie
+ * Licenced under the MIT licence
+ *
+ */
+
+if (typeof he !== 'object' && typeof require === 'function') {
+  var he = require('he');
+}
+
+var toMarkdown = function(string) {
+
+  var ELEMENTS = [
+    {
+      patterns: 'p',
+      replacement: function(str, attrs, innerHTML) {
+        return innerHTML ? '\n\n' + innerHTML + '\n' : '';
+      }
+    },
+    {
+      patterns: 'br',
+      type: 'void',
+      replacement: '\n'
+    },
+    {
+      patterns: 'h([1-6])',
+      replacement: function(str, hLevel, attrs, innerHTML) {
+        var hPrefix = '';
+        for(var i = 0; i < hLevel; i++) {
+          hPrefix += '#';
+        }
+        return '\n\n' + hPrefix + ' ' + innerHTML + '\n';
+      }
+    },
+    {
+      patterns: 'hr',
+      type: 'void',
+      replacement: '\n\n* * *\n'
+    },
+    {
+      patterns: 'a',
+      replacement: function(str, attrs, innerHTML) {
+        var href = attrs.match(attrRegExp('href')),
+            title = attrs.match(attrRegExp('title'));
+        return href ? '[' + innerHTML + ']' + '(' + href[1] + (title && title[1] ? ' "' + title[1] + '"' : '') + ')' : str;
+      }
+    },
+    {
+      patterns: ['b', 'strong'],
+      replacement: function(str, attrs, innerHTML) {
+        return innerHTML ? '**' + innerHTML + '**' : '';
+      }
+    },
+    {
+      patterns: ['i', 'em'],
+      replacement: function(str, attrs, innerHTML) {
+        return innerHTML ? '*' + innerHTML + '*' : '';
+      }
+    },
+    {
+      patterns: 'pre',
+      replacement: function(str, attrs, innerHTML) {
+        var lang = innerHTML.match(attrRegExp('class')),
+            codeText = innerHTML.replace(/<code[^>]*>([\s\S]*?)<\/code>/,'$1'),
+            linebreaks;
+        lang = lang ? lang[1].replace(/\w+-/,'') : ''; // ignore the prefix like 'lang-' or 'language-'
+        linebreaks = codeText.charAt(0) === '\n' ? '' : '\n'; // if the first character is a line break, avoid adding it again
+        return codeText ? '```' + lang + linebreaks + he.decode(codeText) + '```' : '';
+      }
+    },
+    {
+      patterns: 'code',
+      replacement: function(str, attrs, innerHTML) {
+        return innerHTML ? '`' + he.decode(innerHTML) + '`' : '';
+      }
+    },
+    {
+      patterns: 'img',
+      type: 'void',
+      replacement: function(str, attrs, innerHTML) {
+        var src = attrs.match(attrRegExp('src')),
+            alt = attrs.match(attrRegExp('alt')),
+            title = attrs.match(attrRegExp('title'));
+        return '![' + (alt && alt[1] ? alt[1] : '') + ']' + '(' + src[1] + (title && title[1] ? ' "' + title[1] + '"' : '') + ')';
+      }
+    }
+  ];
+
+  for(var i = 0, len = ELEMENTS.length; i < len; i++) {
+    if(typeof ELEMENTS[i].patterns === 'string') {
+      string = replaceEls(string, { tag: ELEMENTS[i].patterns, replacement: ELEMENTS[i].replacement, type:  ELEMENTS[i].type });
+    }
+    else {
+      for(var j = 0, pLen = ELEMENTS[i].patterns.length; j < pLen; j++) {
+        string = replaceEls(string, { tag: ELEMENTS[i].patterns[j], replacement: ELEMENTS[i].replacement, type:  ELEMENTS[i].type });
+      }
+    }
+  }
+
+  function replaceEls(html, elProperties) {
+    var pattern = elProperties.type === 'void' ? '<' + elProperties.tag + '\\b([^>]*)\\/?>' : '<' + elProperties.tag + '\\b([^>]*)>([\\s\\S]*?)<\\/' + elProperties.tag + '>',
+        regex = new RegExp(pattern, 'gi'),
+        markdown = '';
+    if(typeof elProperties.replacement === 'string') {
+      markdown = html.replace(regex, elProperties.replacement);
+    }
+    else {
+      markdown = html.replace(regex, function(str, p1, p2, p3) {
+        return elProperties.replacement.call(this, str, p1, p2, p3);
+      });
+    }
+    return markdown;
+  }
+
+  function attrRegExp(attr) {
+    return new RegExp(attr + '\\s*=\\s*["\']?([^"\']*)["\']?', 'i');
+  }
+
+  // Pre code blocks
+
+  string = string.replace(/<pre\b[^>]*>```([\s\S]*?)```<\/pre>/gi, function(str, innerHTML) {
+    var text = he.decode(innerHTML);
+    text = text.replace(/^\t+/g, '  '); // convert tabs to spaces (you know it makes sense)
+    text = text.replace(/\n/g, '\n    ');
+    return '\n\n    ' + text + '\n';
+  });
+
+  // Lists
+
+  // Escape numbers that could trigger an ol
+  // If there are more than three spaces before the code, it would be in a pre tag
+  // Make sure we are escaping the period not matching any character
+  string = string.replace(/^(\s{0,3}\d+)\. /g, '$1\\. ');
+
+  // Converts lists that have no child lists (of same type) first, then works its way up
+  var noChildrenRegex = /<(ul|ol)\b[^>]*>(?:(?!<ul|<ol)[\s\S])*?<\/\1>/gi;
+  while(string.match(noChildrenRegex)) {
+    string = string.replace(noChildrenRegex, function(str) {
+      return replaceLists(str);
+    });
+  }
+
+  function replaceLists(html) {
+
+    html = html.replace(/<(ul|ol)\b[^>]*>([\s\S]*?)<\/\1>/gi, function(str, listType, innerHTML) {
+      var lis = innerHTML.split('</li>');
+      lis.splice(lis.length - 1, 1);
+
+      for(i = 0, len = lis.length; i < len; i++) {
+        if(lis[i]) {
+          var prefix = (listType === 'ol') ? (i + 1) + ".  " : "*   ";
+          lis[i] = lis[i].replace(/\s*<li[^>]*>([\s\S]*)/i, function(str, innerHTML) {
+
+            innerHTML = innerHTML.replace(/^\s+/, '');
+            innerHTML = innerHTML.replace(/\n\n/g, '\n\n    ');
+            // indent nested lists
+            innerHTML = innerHTML.replace(/\n([ ]*)+(\*|\d+\.) /g, '\n$1    $2 ');
+            return prefix + innerHTML;
+          });
+        }
+      }
+      return lis.join('\n');
+    });
+    return '\n\n' + html.replace(/[ \t]+\n|\s+$/g, '');
+  }
+
+  // Blockquotes
+  var deepest = /<blockquote\b[^>]*>((?:(?!<blockquote)[\s\S])*?)<\/blockquote>/gi;
+  while(string.match(deepest)) {
+    string = string.replace(deepest, function(str) {
+      return replaceBlockquotes(str);
+    });
+  }
+
+  function replaceBlockquotes(html) {
+    html = html.replace(/<blockquote\b[^>]*>([\s\S]*?)<\/blockquote>/gi, function(str, inner) {
+      inner = inner.replace(/^\s+|\s+$/g, '');
+      inner = cleanUp(inner);
+      inner = inner.replace(/^/gm, '> ');
+      inner = inner.replace(/^(>([ \t]{2,}>)+)/gm, '> >');
+      return inner;
+    });
+    return html;
+  }
+
+  function cleanUp(string) {
+    string = string.replace(/^[\t\r\n]+|[\t\r\n]+$/g, ''); // trim leading/trailing whitespace
+    string = string.replace(/\n\s+\n/g, '\n\n');
+    string = string.replace(/\n{3,}/g, '\n\n'); // limit consecutive linebreaks to 2
+    return string;
+  }
+
+  return cleanUp(string);
+};
+
+if (typeof exports === 'object') {
+  exports.toMarkdown = toMarkdown;
+}
diff --git a/plugins/ckeditor4/markdown/plugin.js b/plugins/ckeditor4/markdown/plugin.js
new file mode 100755
index 0000000..9056972
--- /dev/null
+++ b/plugins/ckeditor4/markdown/plugin.js
@@ -0,0 +1,194 @@
+/*
+ *  The "markdown" plugin. It's indented to enhance the
+ *  "sourcearea" editing mode, convert to markdown mode and highlight syntax.
+ * Licensed under the MIT license
+ * CodeMirror Plugin: http://codemirror.net/ (MIT License)
+ * Markdown Parser:
+ * HTML to Markdown Parser: 
+ */
+'use strict';
+(function() {
+    CKEDITOR.plugins.add('markdown', {
+        // lang: 'en,zh', // %REMOVE_LINE_CORE%
+        icons: 'markdown',
+        hidpi: true, // %REMOVE_LINE_CORE%
+        init: function(editor) {
+            // Source mode in inline editors is only available through the "sourcedialog" plugin.
+            if (editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE)
+                return;
+
+            var markdown = CKEDITOR.plugins.markdown,
+                rootPath = this.path,
+                defaultConfig = {
+                    mode: 'gfm',
+                    lineNumbers: true,
+                    theme: 'default'
+                };
+            editor.config.markdown = CKEDITOR.tools.extend(defaultConfig, editor.config.markdown || {}, true);
+
+            editor.addMode('markdown', function(callback) {
+                var contentsSpace = editor.ui.space('contents'),
+                    textarea = contentsSpace.getDocument().createElement('textarea'),
+                    config = editor.config.markdown;
+
+                textarea.setStyles(
+                    CKEDITOR.tools.extend({
+                            // IE7 has overflow the <textarea> from wrapping table cell.
+                            width: CKEDITOR.env.ie7Compat ? '99%' : '100%',
+                            height: '100%',
+                            resize: 'none',
+                            outline: 'none',
+                            'text-align': 'left'
+                        },
+                        CKEDITOR.tools.cssVendorPrefix('tab-size', editor.config.sourceAreaTabSize || 4)));
+
+                // Make sure that source code is always displayed LTR,
+                // regardless of editor language (#10105).
+                textarea.setAttribute('dir', 'ltr');
+
+                textarea.addClass('cke_source cke_reset cke_enable_context_menu');
+
+                editor.ui.space('contents').append(textarea);
+
+                var editable = editor.editable(new sourceEditable(editor, textarea)),
+                    htmlData = editor.getData(1);
+
+                // Convert to Markdown and Fill the textarea.
+                if (typeof(toMarkdown) == 'undefined') {
+                    CKEDITOR.scriptLoader.load(rootPath + 'js/to-markdown.js', function() {
+                        editable.setData(toMarkdown(htmlData));
+                    });
+                } else {
+                    editable.setData(toMarkdown(htmlData));
+                }
+
+                if (typeof (CodeMirror) == 'undefined' || typeof (CodeMirror.modes.gfm) == 'undefined') {
+                    CKEDITOR.document.appendStyleSheet(rootPath + 'css/codemirror.min.css');
+                
+                    if (config.theme.length && config.theme != 'default') {
+                        CKEDITOR.document.appendStyleSheet(rootPath + 'theme/' + config.theme + '.css');
+                    }
+
+                    CKEDITOR.scriptLoader.load(rootPath + 'js/codemirror-gfm-min.js', function() {
+                        loadCodeMirror(editor, editable);
+                    });
+                } else {
+                    loadCodeMirror(editor, editable);
+                }
+                if (typeof(marked) == 'undefined') {
+                    CKEDITOR.scriptLoader.load(rootPath + 'js/marked.js');
+                }
+                // Having to make <textarea> fixed sized to conquer the following bugs:
+                // 1. The textarea height/width='100%' doesn't constraint to the 'td' in IE6/7.
+                // 2. Unexpected vertical-scrolling behavior happens whenever focus is moving out of editor
+                // if text content within it has overflowed. (#4762)
+                if (CKEDITOR.env.ie) {
+                    editable.attachListener(editor, 'resize', onResize, editable);
+                    editable.attachListener(CKEDITOR.document.getWindow(), 'resize', onResize, editable);
+                    CKEDITOR.tools.setTimeout(onResize, 0, editable);
+                }
+
+                editor.fire('ariaWidget', this);
+                editor.commands.maximize.modes.markdown = 1;
+                callback();
+            });
+
+            function loadCodeMirror(editor, editable){
+                window["codemirror_" + editor.id] = CodeMirror.fromTextArea(editable.$, editor.config.markdown);
+                window["codemirror_" + editor.id].setSize(null, '100%');
+            }
+
+            editor.addCommand('markdown', markdown.commands.markdown);
+
+            if (editor.ui.addButton) {
+                editor.ui.addButton('Markdown', {
+                    label: 'Markdown',
+                    command: 'markdown'
+                    // toolbar: 'mode,10'
+                });
+            }
+            CKEDITOR.document.appendStyleText('.cke_button__markdown_label {display: inline;}'); // display button Label
+            editor.on('mode', function() {
+                editor.getCommand('markdown').setState(editor.mode == 'markdown' ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF);
+            });
+
+            var needsFocusHack = CKEDITOR.env.ie && CKEDITOR.env.version == 9;
+
+            function onResize() {
+                // We have to do something with focus on IE9, because if sourcearea had focus
+                // before being resized, the caret ends somewhere in the editor UI (#11839).
+                var wasActive = needsFocusHack && this.equals(CKEDITOR.document.getActive());
+
+                // Holder rectange size is stretched by textarea,
+                // so hide it just for a moment.
+                this.hide();
+                this.setStyle('height', this.getParent().$.clientHeight + 'px');
+                this.setStyle('width', this.getParent().$.clientWidth + 'px');
+                // When we have proper holder size, show textarea again.
+                this.show();
+
+                if (wasActive)
+                    this.focus();
+            }
+        }
+    });
+
+    var sourceEditable = CKEDITOR.tools.createClass({
+        base: CKEDITOR.editable,
+        proto: {
+            setData: function(data) {
+                this.setValue(data);
+                this.status = 'ready';
+                this.editor.fire('dataReady');
+            },
+
+            getData: function() {
+                return this.getValue();
+            },
+
+            // Insertions are not supported in source editable.
+            insertHtml: function() {},
+            insertElement: function() {},
+            insertText: function() {},
+
+            // Read-only support for textarea.
+            setReadOnly: function(isReadOnly) {
+                this[(isReadOnly ? 'set' : 'remove') + 'Attribute']('readOnly', 'readonly');
+            },
+
+            detach: function() {
+                var editor = this.editor;
+
+                window["codemirror_" + editor.id].toTextArea(); // Remove codemirror and restore Data to origin textarea
+                window["codemirror_" + editor.id] = null; // Free Memory on destroy
+
+                var markdownSource = editor.getData();
+                editor.setData(marked(markdownSource, {langPrefix: 'language-'}));
+
+                sourceEditable.baseProto.detach.call(this);
+
+                this.clearCustomData();
+                this.remove();
+            }
+        }
+    });
+})();
+CKEDITOR.plugins.markdown = {
+    commands: {
+        markdown: {
+            modes: {
+                wysiwyg: 1,
+                markdown: 1
+            },
+            editorFocus: false,
+            readOnly: 1,
+            exec: function(editor) {
+                if (editor.mode == 'wysiwyg')
+                    editor.fire('saveSnapshot');
+                editor.getCommand('markdown').setState(CKEDITOR.TRISTATE_DISABLED);
+                editor.setMode(editor.mode == 'markdown' ? 'wysiwyg' : 'markdown');
+            },
+            canUndo: false
+        }
+    }
+};
diff --git a/plugins/ckeditor4/markdown/theme/3024-day.css b/plugins/ckeditor4/markdown/theme/3024-day.css
new file mode 100755
index 0000000..ebf46fb
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/3024-day.css
@@ -0,0 +1,38 @@
+/*
+
+    Name:       3024 day
+    Author:     Jan T. Sott (http://github.com/idleberg)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-3024-day.CodeMirror {background: #f7f7f7; color: #3a3432;}
+.cm-s-3024-day div.CodeMirror-selected {background: #d6d5d4 !important;}
+
+.cm-s-3024-day .CodeMirror-gutters {background: #f7f7f7; border-right: 0px;}
+.cm-s-3024-day .CodeMirror-guttermarker { color: #db2d20; }
+.cm-s-3024-day .CodeMirror-guttermarker-subtle { color: #807d7c; }
+.cm-s-3024-day .CodeMirror-linenumber {color: #807d7c;}
+
+.cm-s-3024-day .CodeMirror-cursor {border-left: 1px solid #5c5855 !important;}
+
+.cm-s-3024-day span.cm-comment {color: #cdab53;}
+.cm-s-3024-day span.cm-atom {color: #a16a94;}
+.cm-s-3024-day span.cm-number {color: #a16a94;}
+
+.cm-s-3024-day span.cm-property, .cm-s-3024-day span.cm-attribute {color: #01a252;}
+.cm-s-3024-day span.cm-keyword {color: #db2d20;}
+.cm-s-3024-day span.cm-string {color: #fded02;}
+
+.cm-s-3024-day span.cm-variable {color: #01a252;}
+.cm-s-3024-day span.cm-variable-2 {color: #01a0e4;}
+.cm-s-3024-day span.cm-def {color: #e8bbd0;}
+.cm-s-3024-day span.cm-bracket {color: #3a3432;}
+.cm-s-3024-day span.cm-tag {color: #db2d20;}
+.cm-s-3024-day span.cm-link {color: #a16a94;}
+.cm-s-3024-day span.cm-error {background: #db2d20; color: #5c5855;}
+
+.cm-s-3024-day .CodeMirror-activeline-background {background: #e8f2ff !important;}
+.cm-s-3024-day .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/3024-night.css b/plugins/ckeditor4/markdown/theme/3024-night.css
new file mode 100755
index 0000000..631757f
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/3024-night.css
@@ -0,0 +1,37 @@
+/*
+
+    Name:       3024 night
+    Author:     Jan T. Sott (http://github.com/idleberg)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-3024-night.CodeMirror {background: #090300; color: #d6d5d4;}
+.cm-s-3024-night div.CodeMirror-selected {background: #3a3432 !important;}
+.cm-s-3024-night .CodeMirror-gutters {background: #090300; border-right: 0px;}
+.cm-s-3024-night .CodeMirror-guttermarker { color: #db2d20; }
+.cm-s-3024-night .CodeMirror-guttermarker-subtle { color: #5c5855; }
+.cm-s-3024-night .CodeMirror-linenumber {color: #5c5855;}
+
+.cm-s-3024-night .CodeMirror-cursor {border-left: 1px solid #807d7c !important;}
+
+.cm-s-3024-night span.cm-comment {color: #cdab53;}
+.cm-s-3024-night span.cm-atom {color: #a16a94;}
+.cm-s-3024-night span.cm-number {color: #a16a94;}
+
+.cm-s-3024-night span.cm-property, .cm-s-3024-night span.cm-attribute {color: #01a252;}
+.cm-s-3024-night span.cm-keyword {color: #db2d20;}
+.cm-s-3024-night span.cm-string {color: #fded02;}
+
+.cm-s-3024-night span.cm-variable {color: #01a252;}
+.cm-s-3024-night span.cm-variable-2 {color: #01a0e4;}
+.cm-s-3024-night span.cm-def {color: #e8bbd0;}
+.cm-s-3024-night span.cm-bracket {color: #d6d5d4;}
+.cm-s-3024-night span.cm-tag {color: #db2d20;}
+.cm-s-3024-night span.cm-link {color: #a16a94;}
+.cm-s-3024-night span.cm-error {background: #db2d20; color: #807d7c;}
+
+.cm-s-3024-night .CodeMirror-activeline-background {background: #2F2F2F !important;}
+.cm-s-3024-night .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/ambiance-mobile.css b/plugins/ckeditor4/markdown/theme/ambiance-mobile.css
new file mode 100755
index 0000000..88d332e
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/ambiance-mobile.css
@@ -0,0 +1,5 @@
+.cm-s-ambiance.CodeMirror {
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
diff --git a/plugins/ckeditor4/markdown/theme/ambiance.css b/plugins/ckeditor4/markdown/theme/ambiance.css
new file mode 100755
index 0000000..c844566
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/ambiance.css
@@ -0,0 +1,77 @@
+/* ambiance theme for codemirror */
+
+/* Color scheme */
+
+.cm-s-ambiance .cm-keyword { color: #cda869; }
+.cm-s-ambiance .cm-atom { color: #CF7EA9; }
+.cm-s-ambiance .cm-number { color: #78CF8A; }
+.cm-s-ambiance .cm-def { color: #aac6e3; }
+.cm-s-ambiance .cm-variable { color: #ffb795; }
+.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }
+.cm-s-ambiance .cm-variable-3 { color: #faded3; }
+.cm-s-ambiance .cm-property { color: #eed1b3; }
+.cm-s-ambiance .cm-operator {color: #fa8d6a;}
+.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }
+.cm-s-ambiance .cm-string { color: #8f9d6a; }
+.cm-s-ambiance .cm-string-2 { color: #9d937c; }
+.cm-s-ambiance .cm-meta { color: #D2A8A1; }
+.cm-s-ambiance .cm-qualifier { color: yellow; }
+.cm-s-ambiance .cm-builtin { color: #9999cc; }
+.cm-s-ambiance .cm-bracket { color: #24C2C7; }
+.cm-s-ambiance .cm-tag { color: #fee4ff }
+.cm-s-ambiance .cm-attribute {  color: #9B859D; }
+.cm-s-ambiance .cm-header {color: blue;}
+.cm-s-ambiance .cm-quote { color: #24C2C7; }
+.cm-s-ambiance .cm-hr { color: pink; }
+.cm-s-ambiance .cm-link { color: #F4C20B; }
+.cm-s-ambiance .cm-special { color: #FF9D00; }
+.cm-s-ambiance .cm-error { color: #AF2018; }
+
+.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }
+.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }
+
+.cm-s-ambiance .CodeMirror-selected {
+  background: rgba(255, 255, 255, 0.15);
+}
+.cm-s-ambiance.CodeMirror-focused .CodeMirror-selected {
+  background: rgba(255, 255, 255, 0.10);
+}
+
+/* Editor styling */
+
+.cm-s-ambiance.CodeMirror {
+  line-height: 1.40em;
+  color: #E6E1DC;
+  background-color: #202020;
+  -webkit-box-shadow: inset 0 0 10px black;
+  -moz-box-shadow: inset 0 0 10px black;
+  box-shadow: inset 0 0 10px black;
+}
+
+.cm-s-ambiance .CodeMirror-gutters {
+  background: #3D3D3D;
+  border-right: 1px solid #4D4D4D;
+  box-shadow: 0 10px 20px black;
+}
+
+.cm-s-ambiance .CodeMirror-linenumber {
+  text-shadow: 0px 1px 1px #4d4d4d;
+  color: #111;
+  padding: 0 5px;
+}
+
+.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; }
+.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; }
+
+.cm-s-ambiance .CodeMirror-lines .CodeMirror-cursor {
+  border-left: 1px solid #7991E8;
+}
+
+.cm-s-ambiance .CodeMirror-activeline-background {
+  background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);
+}
+
+.cm-s-ambiance.CodeMirror,
+.cm-s-ambiance .CodeMirror-gutters {
+  background-image: url("data:image/png;base64,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");
+}
diff --git a/plugins/ckeditor4/markdown/theme/base16-dark.css b/plugins/ckeditor4/markdown/theme/base16-dark.css
new file mode 100755
index 0000000..199997a
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/base16-dark.css
@@ -0,0 +1,36 @@
+/*
+
+    Name:       Base16 Default Dark
+    Author:     Chris Kempson (http://chriskempson.com)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-base16-dark.CodeMirror {background: #151515; color: #e0e0e0;}
+.cm-s-base16-dark div.CodeMirror-selected {background: #202020 !important;}
+.cm-s-base16-dark .CodeMirror-gutters {background: #151515; border-right: 0px;}
+.cm-s-base16-dark .CodeMirror-guttermarker { color: #ac4142; }
+.cm-s-base16-dark .CodeMirror-guttermarker-subtle { color: #505050; }
+.cm-s-base16-dark .CodeMirror-linenumber {color: #505050;}
+.cm-s-base16-dark .CodeMirror-cursor {border-left: 1px solid #b0b0b0 !important;}
+
+.cm-s-base16-dark span.cm-comment {color: #8f5536;}
+.cm-s-base16-dark span.cm-atom {color: #aa759f;}
+.cm-s-base16-dark span.cm-number {color: #aa759f;}
+
+.cm-s-base16-dark span.cm-property, .cm-s-base16-dark span.cm-attribute {color: #90a959;}
+.cm-s-base16-dark span.cm-keyword {color: #ac4142;}
+.cm-s-base16-dark span.cm-string {color: #f4bf75;}
+
+.cm-s-base16-dark span.cm-variable {color: #90a959;}
+.cm-s-base16-dark span.cm-variable-2 {color: #6a9fb5;}
+.cm-s-base16-dark span.cm-def {color: #d28445;}
+.cm-s-base16-dark span.cm-bracket {color: #e0e0e0;}
+.cm-s-base16-dark span.cm-tag {color: #ac4142;}
+.cm-s-base16-dark span.cm-link {color: #aa759f;}
+.cm-s-base16-dark span.cm-error {background: #ac4142; color: #b0b0b0;}
+
+.cm-s-base16-dark .CodeMirror-activeline-background {background: #2F2F2F !important;}
+.cm-s-base16-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/base16-light.css b/plugins/ckeditor4/markdown/theme/base16-light.css
new file mode 100755
index 0000000..12ff2eb
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/base16-light.css
@@ -0,0 +1,36 @@
+/*
+
+    Name:       Base16 Default Light
+    Author:     Chris Kempson (http://chriskempson.com)
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-chrome-devtools)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-base16-light.CodeMirror {background: #f5f5f5; color: #202020;}
+.cm-s-base16-light div.CodeMirror-selected {background: #e0e0e0 !important;}
+.cm-s-base16-light .CodeMirror-gutters {background: #f5f5f5; border-right: 0px;}
+.cm-s-base16-light .CodeMirror-guttermarker { color: #ac4142; }
+.cm-s-base16-light .CodeMirror-guttermarker-subtle { color: #b0b0b0; }
+.cm-s-base16-light .CodeMirror-linenumber {color: #b0b0b0;}
+.cm-s-base16-light .CodeMirror-cursor {border-left: 1px solid #505050 !important;}
+
+.cm-s-base16-light span.cm-comment {color: #8f5536;}
+.cm-s-base16-light span.cm-atom {color: #aa759f;}
+.cm-s-base16-light span.cm-number {color: #aa759f;}
+
+.cm-s-base16-light span.cm-property, .cm-s-base16-light span.cm-attribute {color: #90a959;}
+.cm-s-base16-light span.cm-keyword {color: #ac4142;}
+.cm-s-base16-light span.cm-string {color: #f4bf75;}
+
+.cm-s-base16-light span.cm-variable {color: #90a959;}
+.cm-s-base16-light span.cm-variable-2 {color: #6a9fb5;}
+.cm-s-base16-light span.cm-def {color: #d28445;}
+.cm-s-base16-light span.cm-bracket {color: #202020;}
+.cm-s-base16-light span.cm-tag {color: #ac4142;}
+.cm-s-base16-light span.cm-link {color: #aa759f;}
+.cm-s-base16-light span.cm-error {background: #ac4142; color: #505050;}
+
+.cm-s-base16-light .CodeMirror-activeline-background {background: #DDDCDC !important;}
+.cm-s-base16-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/blackboard.css b/plugins/ckeditor4/markdown/theme/blackboard.css
new file mode 100755
index 0000000..d7a2dc9
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/blackboard.css
@@ -0,0 +1,30 @@
+/* Port of TextMate's Blackboard theme */
+
+.cm-s-blackboard.CodeMirror { background: #0C1021; color: #F8F8F8; }
+.cm-s-blackboard .CodeMirror-selected { background: #253B76 !important; }
+.cm-s-blackboard .CodeMirror-gutters { background: #0C1021; border-right: 0; }
+.cm-s-blackboard .CodeMirror-guttermarker { color: #FBDE2D; }
+.cm-s-blackboard .CodeMirror-guttermarker-subtle { color: #888; }
+.cm-s-blackboard .CodeMirror-linenumber { color: #888; }
+.cm-s-blackboard .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }
+
+.cm-s-blackboard .cm-keyword { color: #FBDE2D; }
+.cm-s-blackboard .cm-atom { color: #D8FA3C; }
+.cm-s-blackboard .cm-number { color: #D8FA3C; }
+.cm-s-blackboard .cm-def { color: #8DA6CE; }
+.cm-s-blackboard .cm-variable { color: #FF6400; }
+.cm-s-blackboard .cm-operator { color: #FBDE2D;}
+.cm-s-blackboard .cm-comment { color: #AEAEAE; }
+.cm-s-blackboard .cm-string { color: #61CE3C; }
+.cm-s-blackboard .cm-string-2 { color: #61CE3C; }
+.cm-s-blackboard .cm-meta { color: #D8FA3C; }
+.cm-s-blackboard .cm-builtin { color: #8DA6CE; }
+.cm-s-blackboard .cm-tag { color: #8DA6CE; }
+.cm-s-blackboard .cm-attribute { color: #8DA6CE; }
+.cm-s-blackboard .cm-header { color: #FF6400; }
+.cm-s-blackboard .cm-hr { color: #AEAEAE; }
+.cm-s-blackboard .cm-link { color: #8DA6CE; }
+.cm-s-blackboard .cm-error { background: #9D1E15; color: #F8F8F8; }
+
+.cm-s-blackboard .CodeMirror-activeline-background {background: #3C3636 !important;}
+.cm-s-blackboard .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important}
\ No newline at end of file
diff --git a/plugins/ckeditor4/markdown/theme/cobalt.css b/plugins/ckeditor4/markdown/theme/cobalt.css
new file mode 100755
index 0000000..4744053
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/cobalt.css
@@ -0,0 +1,23 @@
+.cm-s-cobalt.CodeMirror { background: #002240; color: white; }
+.cm-s-cobalt div.CodeMirror-selected { background: #b36539 !important; }
+.cm-s-cobalt .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-cobalt .CodeMirror-guttermarker { color: #ffee80; }
+.cm-s-cobalt .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-cobalt .CodeMirror-linenumber { color: #d0d0d0; }
+.cm-s-cobalt .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-cobalt span.cm-comment { color: #08f; }
+.cm-s-cobalt span.cm-atom { color: #845dc4; }
+.cm-s-cobalt span.cm-number, .cm-s-cobalt span.cm-attribute { color: #ff80e1; }
+.cm-s-cobalt span.cm-keyword { color: #ffee80; }
+.cm-s-cobalt span.cm-string { color: #3ad900; }
+.cm-s-cobalt span.cm-meta { color: #ff9d00; }
+.cm-s-cobalt span.cm-variable-2, .cm-s-cobalt span.cm-tag { color: #9effff; }
+.cm-s-cobalt span.cm-variable-3, .cm-s-cobalt span.cm-def { color: white; }
+.cm-s-cobalt span.cm-bracket { color: #d8d8d8; }
+.cm-s-cobalt span.cm-builtin, .cm-s-cobalt span.cm-special { color: #ff9e59; }
+.cm-s-cobalt span.cm-link { color: #845dc4; }
+.cm-s-cobalt span.cm-error { color: #9d1e15; }
+
+.cm-s-cobalt .CodeMirror-activeline-background {background: #002D57 !important;}
+.cm-s-cobalt .CodeMirror-matchingbracket {outline:1px solid grey;color:white !important}
diff --git a/plugins/ckeditor4/markdown/theme/eclipse.css b/plugins/ckeditor4/markdown/theme/eclipse.css
new file mode 100755
index 0000000..317218e
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/eclipse.css
@@ -0,0 +1,23 @@
+.cm-s-eclipse span.cm-meta {color: #FF1717;}
+.cm-s-eclipse span.cm-keyword { line-height: 1em; font-weight: bold; color: #7F0055; }
+.cm-s-eclipse span.cm-atom {color: #219;}
+.cm-s-eclipse span.cm-number {color: #164;}
+.cm-s-eclipse span.cm-def {color: #00f;}
+.cm-s-eclipse span.cm-variable {color: black;}
+.cm-s-eclipse span.cm-variable-2 {color: #0000C0;}
+.cm-s-eclipse span.cm-variable-3 {color: #0000C0;}
+.cm-s-eclipse span.cm-property {color: black;}
+.cm-s-eclipse span.cm-operator {color: black;}
+.cm-s-eclipse span.cm-comment {color: #3F7F5F;}
+.cm-s-eclipse span.cm-string {color: #2A00FF;}
+.cm-s-eclipse span.cm-string-2 {color: #f50;}
+.cm-s-eclipse span.cm-qualifier {color: #555;}
+.cm-s-eclipse span.cm-builtin {color: #30a;}
+.cm-s-eclipse span.cm-bracket {color: #cc7;}
+.cm-s-eclipse span.cm-tag {color: #170;}
+.cm-s-eclipse span.cm-attribute {color: #00c;}
+.cm-s-eclipse span.cm-link {color: #219;}
+.cm-s-eclipse span.cm-error {color: #f00;}
+
+.cm-s-eclipse .CodeMirror-activeline-background {background: #e8f2ff !important;}
+.cm-s-eclipse .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}
diff --git a/plugins/ckeditor4/markdown/theme/elegant.css b/plugins/ckeditor4/markdown/theme/elegant.css
new file mode 100755
index 0000000..dd7df7b
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/elegant.css
@@ -0,0 +1,13 @@
+.cm-s-elegant span.cm-number, .cm-s-elegant span.cm-string, .cm-s-elegant span.cm-atom {color: #762;}
+.cm-s-elegant span.cm-comment {color: #262; font-style: italic; line-height: 1em;}
+.cm-s-elegant span.cm-meta {color: #555; font-style: italic; line-height: 1em;}
+.cm-s-elegant span.cm-variable {color: black;}
+.cm-s-elegant span.cm-variable-2 {color: #b11;}
+.cm-s-elegant span.cm-qualifier {color: #555;}
+.cm-s-elegant span.cm-keyword {color: #730;}
+.cm-s-elegant span.cm-builtin {color: #30a;}
+.cm-s-elegant span.cm-link {color: #762;}
+.cm-s-elegant span.cm-error {background-color: #fdd;}
+
+.cm-s-elegant .CodeMirror-activeline-background {background: #e8f2ff !important;}
+.cm-s-elegant .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}
diff --git a/plugins/ckeditor4/markdown/theme/erlang-dark.css b/plugins/ckeditor4/markdown/theme/erlang-dark.css
new file mode 100755
index 0000000..ff47d7f
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/erlang-dark.css
@@ -0,0 +1,32 @@
+.cm-s-erlang-dark.CodeMirror { background: #002240; color: white; }
+.cm-s-erlang-dark div.CodeMirror-selected { background: #b36539 !important; }
+.cm-s-erlang-dark .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-erlang-dark .CodeMirror-guttermarker { color: white; }
+.cm-s-erlang-dark .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-erlang-dark .CodeMirror-linenumber { color: #d0d0d0; }
+.cm-s-erlang-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-erlang-dark span.cm-atom       { color: #f133f1; }
+.cm-s-erlang-dark span.cm-attribute  { color: #ff80e1; }
+.cm-s-erlang-dark span.cm-bracket    { color: #ff9d00; }
+.cm-s-erlang-dark span.cm-builtin    { color: #eaa; }
+.cm-s-erlang-dark span.cm-comment    { color: #77f; }
+.cm-s-erlang-dark span.cm-def        { color: #e7a; }
+.cm-s-erlang-dark span.cm-keyword    { color: #ffee80; }
+.cm-s-erlang-dark span.cm-meta       { color: #50fefe; }
+.cm-s-erlang-dark span.cm-number     { color: #ffd0d0; }
+.cm-s-erlang-dark span.cm-operator   { color: #d55; }
+.cm-s-erlang-dark span.cm-property   { color: #ccc; }
+.cm-s-erlang-dark span.cm-qualifier  { color: #ccc; }
+.cm-s-erlang-dark span.cm-quote      { color: #ccc; }
+.cm-s-erlang-dark span.cm-special    { color: #ffbbbb; }
+.cm-s-erlang-dark span.cm-string     { color: #3ad900; }
+.cm-s-erlang-dark span.cm-string-2   { color: #ccc; }
+.cm-s-erlang-dark span.cm-tag        { color: #9effff; }
+.cm-s-erlang-dark span.cm-variable   { color: #50fe50; }
+.cm-s-erlang-dark span.cm-variable-2 { color: #e0e; }
+.cm-s-erlang-dark span.cm-variable-3 { color: #ccc; }
+.cm-s-erlang-dark span.cm-error      { color: #9d1e15; }
+
+.cm-s-erlang-dark .CodeMirror-activeline-background {background: #013461 !important;}
+.cm-s-erlang-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/lesser-dark.css b/plugins/ckeditor4/markdown/theme/lesser-dark.css
new file mode 100755
index 0000000..a782474
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/lesser-dark.css
@@ -0,0 +1,45 @@
+/*
+http://lesscss.org/ dark theme
+Ported to CodeMirror by Peter Kroon
+*/
+.cm-s-lesser-dark {
+  line-height: 1.3em;
+}
+.cm-s-lesser-dark.CodeMirror { background: #262626; color: #EBEFE7; text-shadow: 0 -1px 1px #262626; }
+.cm-s-lesser-dark div.CodeMirror-selected {background: #45443B !important;} /* 33322B*/
+.cm-s-lesser-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
+.cm-s-lesser-dark pre { padding: 0 8px; }/*editable code holder*/
+
+.cm-s-lesser-dark.CodeMirror span.CodeMirror-matchingbracket { color: #7EFC7E; }/*65FC65*/
+
+.cm-s-lesser-dark .CodeMirror-gutters { background: #262626; border-right:1px solid #aaa; }
+.cm-s-lesser-dark .CodeMirror-guttermarker { color: #599eff; }
+.cm-s-lesser-dark .CodeMirror-guttermarker-subtle { color: #777; }
+.cm-s-lesser-dark .CodeMirror-linenumber { color: #777; }
+
+.cm-s-lesser-dark span.cm-keyword { color: #599eff; }
+.cm-s-lesser-dark span.cm-atom { color: #C2B470; }
+.cm-s-lesser-dark span.cm-number { color: #B35E4D; }
+.cm-s-lesser-dark span.cm-def {color: white;}
+.cm-s-lesser-dark span.cm-variable { color:#D9BF8C; }
+.cm-s-lesser-dark span.cm-variable-2 { color: #669199; }
+.cm-s-lesser-dark span.cm-variable-3 { color: white; }
+.cm-s-lesser-dark span.cm-property {color: #92A75C;}
+.cm-s-lesser-dark span.cm-operator {color: #92A75C;}
+.cm-s-lesser-dark span.cm-comment { color: #666; }
+.cm-s-lesser-dark span.cm-string { color: #BCD279; }
+.cm-s-lesser-dark span.cm-string-2 {color: #f50;}
+.cm-s-lesser-dark span.cm-meta { color: #738C73; }
+.cm-s-lesser-dark span.cm-qualifier {color: #555;}
+.cm-s-lesser-dark span.cm-builtin { color: #ff9e59; }
+.cm-s-lesser-dark span.cm-bracket { color: #EBEFE7; }
+.cm-s-lesser-dark span.cm-tag { color: #669199; }
+.cm-s-lesser-dark span.cm-attribute {color: #00c;}
+.cm-s-lesser-dark span.cm-header {color: #a0a;}
+.cm-s-lesser-dark span.cm-quote {color: #090;}
+.cm-s-lesser-dark span.cm-hr {color: #999;}
+.cm-s-lesser-dark span.cm-link {color: #00c;}
+.cm-s-lesser-dark span.cm-error { color: #9d1e15; }
+
+.cm-s-lesser-dark .CodeMirror-activeline-background {background: #3C3A3A !important;}
+.cm-s-lesser-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/mbo.css b/plugins/ckeditor4/markdown/theme/mbo.css
new file mode 100755
index 0000000..0ad6360
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/mbo.css
@@ -0,0 +1,35 @@
+/****************************************************************/
+/*   Based on mbonaci's Brackets mbo theme                      */
+/*   https://github.com/mbonaci/global/blob/master/Mbo.tmTheme  */
+/*   Create your own: http://tmtheme-editor.herokuapp.com       */
+/****************************************************************/
+
+.cm-s-mbo.CodeMirror {background: #2c2c2c; color: #ffffec;}
+.cm-s-mbo div.CodeMirror-selected {background: #716C62 !important;}
+.cm-s-mbo .CodeMirror-gutters {background: #4e4e4e; border-right: 0px;}
+.cm-s-mbo .CodeMirror-guttermarker { color: white; }
+.cm-s-mbo .CodeMirror-guttermarker-subtle { color: grey; }
+.cm-s-mbo .CodeMirror-linenumber {color: #dadada;}
+.cm-s-mbo .CodeMirror-cursor {border-left: 1px solid #ffffec !important;}
+
+.cm-s-mbo span.cm-comment {color: #95958a;}
+.cm-s-mbo span.cm-atom {color: #00a8c6;}
+.cm-s-mbo span.cm-number {color: #00a8c6;}
+
+.cm-s-mbo span.cm-property, .cm-s-mbo span.cm-attribute {color: #9ddfe9;}
+.cm-s-mbo span.cm-keyword {color: #ffb928;}
+.cm-s-mbo span.cm-string {color: #ffcf6c;}
+.cm-s-mbo span.cm-string.cm-property {color: #ffffec;}
+
+.cm-s-mbo span.cm-variable {color: #ffffec;}
+.cm-s-mbo span.cm-variable-2 {color: #00a8c6;}
+.cm-s-mbo span.cm-def {color: #ffffec;}
+.cm-s-mbo span.cm-bracket {color: #fffffc; font-weight: bold;}
+.cm-s-mbo span.cm-tag {color: #9ddfe9;}
+.cm-s-mbo span.cm-link {color: #f54b07;}
+.cm-s-mbo span.cm-error {border-bottom: #636363; color: #ffffec;}
+.cm-s-mbo span.cm-qualifier {color: #ffffec;}
+
+.cm-s-mbo .CodeMirror-activeline-background {background: #494b41 !important;}
+.cm-s-mbo .CodeMirror-matchingbracket {color: #222 !important;}
+.cm-s-mbo .CodeMirror-matchingtag {background: rgba(255, 255, 255, .37);}
diff --git a/plugins/ckeditor4/markdown/theme/mdn-like.css b/plugins/ckeditor4/markdown/theme/mdn-like.css
new file mode 100755
index 0000000..1e20b9e
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/mdn-like.css
@@ -0,0 +1,44 @@
+/*
+  MDN-LIKE Theme - Mozilla
+  Ported to CodeMirror by Peter Kroon <plakroon@gmail.com>
+  Report bugs/issues here: https://github.com/marijnh/CodeMirror/issues
+  GitHub: @peterkroon
+
+  The mdn-like theme is inspired on the displayed code examples at: https://developer.mozilla.org/en-US/docs/Web/CSS/animation
+
+*/
+.cm-s-mdn-like.CodeMirror { color: #999; background-color: #fff; }
+.cm-s-mdn-like .CodeMirror-selected { background: #cfc !important; }
+
+.cm-s-mdn-like .CodeMirror-gutters { background: #f8f8f8; border-left: 6px solid rgba(0,83,159,0.65); color: #333; }
+.cm-s-mdn-like .CodeMirror-linenumber { color: #aaa; margin-left: 3px; }
+div.cm-s-mdn-like .CodeMirror-cursor { border-left: 2px solid #222; }
+
+.cm-s-mdn-like .cm-keyword {  color: #6262FF; }
+.cm-s-mdn-like .cm-atom { color: #F90; }
+.cm-s-mdn-like .cm-number { color:  #ca7841; }
+.cm-s-mdn-like .cm-def { color: #8DA6CE; }
+.cm-s-mdn-like span.cm-variable-2, .cm-s-mdn-like span.cm-tag { color: #690; }
+.cm-s-mdn-like span.cm-variable-3, .cm-s-mdn-like span.cm-def { color: #07a; }
+
+.cm-s-mdn-like .cm-variable { color: #07a; }
+.cm-s-mdn-like .cm-property { color: #905; }
+.cm-s-mdn-like .cm-qualifier { color: #690; }
+
+.cm-s-mdn-like .cm-operator { color: #cda869; }
+.cm-s-mdn-like .cm-comment { color:#777; font-weight:normal; }
+.cm-s-mdn-like .cm-string { color:#07a; font-style:italic; }
+.cm-s-mdn-like .cm-string-2 { color:#bd6b18; } /*?*/
+.cm-s-mdn-like .cm-meta { color: #000; } /*?*/
+.cm-s-mdn-like .cm-builtin { color: #9B7536; } /*?*/
+.cm-s-mdn-like .cm-tag { color: #997643; }
+.cm-s-mdn-like .cm-attribute { color: #d6bb6d; } /*?*/
+.cm-s-mdn-like .cm-header { color: #FF6400; }
+.cm-s-mdn-like .cm-hr { color: #AEAEAE; }
+.cm-s-mdn-like .cm-link {   color:#ad9361; font-style:italic; text-decoration:none; }
+.cm-s-mdn-like .cm-error { border-bottom: 1px solid red; }
+
+div.cm-s-mdn-like .CodeMirror-activeline-background {background: #efefff;}
+div.cm-s-mdn-like span.CodeMirror-matchingbracket {outline:1px solid grey; color: inherit;}
+
+.cm-s-mdn-like.CodeMirror { background-image: url(data:image/png;base64,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); }
diff --git a/plugins/ckeditor4/markdown/theme/midnight.css b/plugins/ckeditor4/markdown/theme/midnight.css
new file mode 100755
index 0000000..4567d29
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/midnight.css
@@ -0,0 +1,45 @@
+/* Based on the theme at http://bonsaiden.github.com/JavaScript-Garden */
+
+/*<!--match-->*/
+.cm-s-midnight span.CodeMirror-matchhighlight { background: #494949; }
+.cm-s-midnight.CodeMirror-focused span.CodeMirror-matchhighlight { background: #314D67 !important; }
+
+/*<!--activeline-->*/
+.cm-s-midnight .CodeMirror-activeline-background {background: #253540 !important;}
+
+.cm-s-midnight.CodeMirror {
+    background: #0F192A;
+    color: #D1EDFF;
+}
+
+.cm-s-midnight.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
+
+.cm-s-midnight div.CodeMirror-selected {background: #314D67 !important;}
+.cm-s-midnight .CodeMirror-gutters {background: #0F192A; border-right: 1px solid;}
+.cm-s-midnight .CodeMirror-guttermarker { color: white; }
+.cm-s-midnight .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-midnight .CodeMirror-linenumber {color: #D0D0D0;}
+.cm-s-midnight .CodeMirror-cursor {
+    border-left: 1px solid #F8F8F0 !important;
+}
+
+.cm-s-midnight span.cm-comment {color: #428BDD;}
+.cm-s-midnight span.cm-atom {color: #AE81FF;}
+.cm-s-midnight span.cm-number {color: #D1EDFF;}
+
+.cm-s-midnight span.cm-property, .cm-s-midnight span.cm-attribute {color: #A6E22E;}
+.cm-s-midnight span.cm-keyword {color: #E83737;}
+.cm-s-midnight span.cm-string {color: #1DC116;}
+
+.cm-s-midnight span.cm-variable {color: #FFAA3E;}
+.cm-s-midnight span.cm-variable-2 {color: #FFAA3E;}
+.cm-s-midnight span.cm-def {color: #4DD;}
+.cm-s-midnight span.cm-bracket {color: #D1EDFF;}
+.cm-s-midnight span.cm-tag {color: #449;}
+.cm-s-midnight span.cm-link {color: #AE81FF;}
+.cm-s-midnight span.cm-error {background: #F92672; color: #F8F8F0;}
+
+.cm-s-midnight .CodeMirror-matchingbracket {
+  text-decoration: underline;
+  color: white !important;
+}
diff --git a/plugins/ckeditor4/markdown/theme/monokai.css b/plugins/ckeditor4/markdown/theme/monokai.css
new file mode 100755
index 0000000..548d2df
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/monokai.css
@@ -0,0 +1,31 @@
+/* Based on Sublime Text's Monokai theme */
+
+.cm-s-monokai.CodeMirror {background: #272822; color: #f8f8f2;}
+.cm-s-monokai div.CodeMirror-selected {background: #49483E !important;}
+.cm-s-monokai .CodeMirror-gutters {background: #272822; border-right: 0px;}
+.cm-s-monokai .CodeMirror-guttermarker { color: white; }
+.cm-s-monokai .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-monokai .CodeMirror-linenumber {color: #d0d0d0;}
+.cm-s-monokai .CodeMirror-cursor {border-left: 1px solid #f8f8f0 !important;}
+
+.cm-s-monokai span.cm-comment {color: #75715e;}
+.cm-s-monokai span.cm-atom {color: #ae81ff;}
+.cm-s-monokai span.cm-number {color: #ae81ff;}
+
+.cm-s-monokai span.cm-property, .cm-s-monokai span.cm-attribute {color: #a6e22e;}
+.cm-s-monokai span.cm-keyword {color: #f92672;}
+.cm-s-monokai span.cm-string {color: #e6db74;}
+
+.cm-s-monokai span.cm-variable {color: #a6e22e;}
+.cm-s-monokai span.cm-variable-2 {color: #9effff;}
+.cm-s-monokai span.cm-def {color: #fd971f;}
+.cm-s-monokai span.cm-bracket {color: #f8f8f2;}
+.cm-s-monokai span.cm-tag {color: #f92672;}
+.cm-s-monokai span.cm-link {color: #ae81ff;}
+.cm-s-monokai span.cm-error {background: #f92672; color: #f8f8f0;}
+
+.cm-s-monokai .CodeMirror-activeline-background {background: #373831 !important;}
+.cm-s-monokai .CodeMirror-matchingbracket {
+  text-decoration: underline;
+  color: white !important;
+}
diff --git a/plugins/ckeditor4/markdown/theme/neat.css b/plugins/ckeditor4/markdown/theme/neat.css
new file mode 100755
index 0000000..115083b
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/neat.css
@@ -0,0 +1,12 @@
+.cm-s-neat span.cm-comment { color: #a86; }
+.cm-s-neat span.cm-keyword { line-height: 1em; font-weight: bold; color: blue; }
+.cm-s-neat span.cm-string { color: #a22; }
+.cm-s-neat span.cm-builtin { line-height: 1em; font-weight: bold; color: #077; }
+.cm-s-neat span.cm-special { line-height: 1em; font-weight: bold; color: #0aa; }
+.cm-s-neat span.cm-variable { color: black; }
+.cm-s-neat span.cm-number, .cm-s-neat span.cm-atom { color: #3a3; }
+.cm-s-neat span.cm-meta {color: #555;}
+.cm-s-neat span.cm-link { color: #3a3; }
+
+.cm-s-neat .CodeMirror-activeline-background {background: #e8f2ff !important;}
+.cm-s-neat .CodeMirror-matchingbracket {outline:1px solid grey; color:black !important;}
diff --git a/plugins/ckeditor4/markdown/theme/neo.css b/plugins/ckeditor4/markdown/theme/neo.css
new file mode 100755
index 0000000..cecaaf2
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/neo.css
@@ -0,0 +1,43 @@
+/* neo theme for codemirror */
+
+/* Color scheme */
+
+.cm-s-neo.CodeMirror {
+  background-color:#ffffff;
+  color:#2e383c;
+  line-height:1.4375;
+}
+.cm-s-neo .cm-comment {color:#75787b}
+.cm-s-neo .cm-keyword, .cm-s-neo .cm-property {color:#1d75b3}
+.cm-s-neo .cm-atom,.cm-s-neo .cm-number {color:#75438a}
+.cm-s-neo .cm-node,.cm-s-neo .cm-tag {color:#9c3328}
+.cm-s-neo .cm-string {color:#b35e14}
+.cm-s-neo .cm-variable,.cm-s-neo .cm-qualifier {color:#047d65}
+
+
+/* Editor styling */
+
+.cm-s-neo pre {
+  padding:0;
+}
+
+.cm-s-neo .CodeMirror-gutters {
+  border:none;
+  border-right:10px solid transparent;
+  background-color:transparent;
+}
+
+.cm-s-neo .CodeMirror-linenumber {
+  padding:0;
+  color:#e0e2e5;
+}
+
+.cm-s-neo .CodeMirror-guttermarker { color: #1d75b3; }
+.cm-s-neo .CodeMirror-guttermarker-subtle { color: #e0e2e5; }
+
+.cm-s-neo div.CodeMirror-cursor {
+  width: auto;
+  border: 0;
+  background: rgba(155,157,162,0.37);
+  z-index: 1;
+}
diff --git a/plugins/ckeditor4/markdown/theme/night.css b/plugins/ckeditor4/markdown/theme/night.css
new file mode 100755
index 0000000..a0bf8cf
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/night.css
@@ -0,0 +1,26 @@
+/* Loosely based on the Midnight Textmate theme */
+
+.cm-s-night.CodeMirror { background: #0a001f; color: #f8f8f8; }
+.cm-s-night div.CodeMirror-selected { background: #447 !important; }
+.cm-s-night .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-night .CodeMirror-guttermarker { color: white; }
+.cm-s-night .CodeMirror-guttermarker-subtle { color: #bbb; }
+.cm-s-night .CodeMirror-linenumber { color: #f8f8f8; }
+.cm-s-night .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-night span.cm-comment { color: #6900a1; }
+.cm-s-night span.cm-atom { color: #845dc4; }
+.cm-s-night span.cm-number, .cm-s-night span.cm-attribute { color: #ffd500; }
+.cm-s-night span.cm-keyword { color: #599eff; }
+.cm-s-night span.cm-string { color: #37f14a; }
+.cm-s-night span.cm-meta { color: #7678e2; }
+.cm-s-night span.cm-variable-2, .cm-s-night span.cm-tag { color: #99b2ff; }
+.cm-s-night span.cm-variable-3, .cm-s-night span.cm-def { color: white; }
+.cm-s-night span.cm-bracket { color: #8da6ce; }
+.cm-s-night span.cm-comment { color: #6900a1; }
+.cm-s-night span.cm-builtin, .cm-s-night span.cm-special { color: #ff9e59; }
+.cm-s-night span.cm-link { color: #845dc4; }
+.cm-s-night span.cm-error { color: #9d1e15; }
+
+.cm-s-night .CodeMirror-activeline-background {background: #1C005A !important;}
+.cm-s-night .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/paraiso-dark.css b/plugins/ckeditor4/markdown/theme/paraiso-dark.css
new file mode 100755
index 0000000..53dcdf7
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/paraiso-dark.css
@@ -0,0 +1,36 @@
+/*
+
+    Name:       Paraíso (Dark)
+    Author:     Jan T. Sott
+
+    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)
+    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
+
+*/
+
+.cm-s-paraiso-dark.CodeMirror {background: #2f1e2e; color: #b9b6b0;}
+.cm-s-paraiso-dark div.CodeMirror-selected {background: #41323f !important;}
+.cm-s-paraiso-dark .CodeMirror-gutters {background: #2f1e2e; border-right: 0px;}
+.cm-s-paraiso-dark .CodeMirror-guttermarker { color: #ef6155; }
+.cm-s-paraiso-dark .CodeMirror-guttermarker-subtle { color: #776e71; }
+.cm-s-paraiso-dark .CodeMirror-linenumber {color: #776e71;}
+.cm-s-paraiso-dark .CodeMirror-cursor {border-left: 1px solid #8d8687 !important;}
+
+.cm-s-paraiso-dark span.cm-comment {color: #e96ba8;}
+.cm-s-paraiso-dark span.cm-atom {color: #815ba4;}
+.cm-s-paraiso-dark span.cm-number {color: #815ba4;}
+
+.cm-s-paraiso-dark span.cm-property, .cm-s-paraiso-dark span.cm-attribute {color: #48b685;}
+.cm-s-paraiso-dark span.cm-keyword {color: #ef6155;}
+.cm-s-paraiso-dark span.cm-string {color: #fec418;}
+
+.cm-s-paraiso-dark span.cm-variable {color: #48b685;}
+.cm-s-paraiso-dark span.cm-variable-2 {color: #06b6ef;}
+.cm-s-paraiso-dark span.cm-def {color: #f99b15;}
+.cm-s-paraiso-dark span.cm-bracket {color: #b9b6b0;}
+.cm-s-paraiso-dark span.cm-tag {color: #ef6155;}
+.cm-s-paraiso-dark span.cm-link {color: #815ba4;}
+.cm-s-paraiso-dark span.cm-error {background: #ef6155; color: #8d8687;}
+
+.cm-s-paraiso-dark .CodeMirror-activeline-background {background: #4D344A !important;}
+.cm-s-paraiso-dark .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/paraiso-light.css b/plugins/ckeditor4/markdown/theme/paraiso-light.css
new file mode 100755
index 0000000..07ca325
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/paraiso-light.css
@@ -0,0 +1,36 @@
+/*
+
+    Name:       Paraíso (Light)
+    Author:     Jan T. Sott
+
+    Color scheme by Jan T. Sott (https://github.com/idleberg/Paraiso-CodeMirror)
+    Inspired by the art of Rubens LP (http://www.rubenslp.com.br)
+
+*/
+
+.cm-s-paraiso-light.CodeMirror {background: #e7e9db; color: #41323f;}
+.cm-s-paraiso-light div.CodeMirror-selected {background: #b9b6b0 !important;}
+.cm-s-paraiso-light .CodeMirror-gutters {background: #e7e9db; border-right: 0px;}
+.cm-s-paraiso-light .CodeMirror-guttermarker { color: black; }
+.cm-s-paraiso-light .CodeMirror-guttermarker-subtle { color: #8d8687; }
+.cm-s-paraiso-light .CodeMirror-linenumber {color: #8d8687;}
+.cm-s-paraiso-light .CodeMirror-cursor {border-left: 1px solid #776e71 !important;}
+
+.cm-s-paraiso-light span.cm-comment {color: #e96ba8;}
+.cm-s-paraiso-light span.cm-atom {color: #815ba4;}
+.cm-s-paraiso-light span.cm-number {color: #815ba4;}
+
+.cm-s-paraiso-light span.cm-property, .cm-s-paraiso-light span.cm-attribute {color: #48b685;}
+.cm-s-paraiso-light span.cm-keyword {color: #ef6155;}
+.cm-s-paraiso-light span.cm-string {color: #fec418;}
+
+.cm-s-paraiso-light span.cm-variable {color: #48b685;}
+.cm-s-paraiso-light span.cm-variable-2 {color: #06b6ef;}
+.cm-s-paraiso-light span.cm-def {color: #f99b15;}
+.cm-s-paraiso-light span.cm-bracket {color: #41323f;}
+.cm-s-paraiso-light span.cm-tag {color: #ef6155;}
+.cm-s-paraiso-light span.cm-link {color: #815ba4;}
+.cm-s-paraiso-light span.cm-error {background: #ef6155; color: #776e71;}
+
+.cm-s-paraiso-light .CodeMirror-activeline-background {background: #CFD1C4 !important;}
+.cm-s-paraiso-light .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/pastel-on-dark.css b/plugins/ckeditor4/markdown/theme/pastel-on-dark.css
new file mode 100755
index 0000000..7992ac7
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/pastel-on-dark.css
@@ -0,0 +1,50 @@
+/**
+ * Pastel On Dark theme ported from ACE editor
+ * @license MIT
+ * @copyright AtomicPages LLC 2014
+ * @author Dennis Thompson, AtomicPages LLC
+ * @version 1.1
+ * @source https://github.com/atomicpages/codemirror-pastel-on-dark-theme
+ */
+
+.cm-s-pastel-on-dark.CodeMirror {
+	background: #2c2827;
+	color: #8F938F;
+	line-height: 1.5;
+	font-size: 14px;
+}
+.cm-s-pastel-on-dark div.CodeMirror-selected { background: rgba(221,240,255,0.2) !important; }
+.cm-s-pastel-on-dark .CodeMirror-gutters {
+	background: #34302f;
+	border-right: 0px;
+	padding: 0 3px;
+}
+.cm-s-pastel-on-dark .CodeMirror-guttermarker { color: white; }
+.cm-s-pastel-on-dark .CodeMirror-guttermarker-subtle { color: #8F938F; }
+.cm-s-pastel-on-dark .CodeMirror-linenumber { color: #8F938F; }
+.cm-s-pastel-on-dark .CodeMirror-cursor { border-left: 1px solid #A7A7A7 !important; }
+.cm-s-pastel-on-dark span.cm-comment { color: #A6C6FF; }
+.cm-s-pastel-on-dark span.cm-atom { color: #DE8E30; }
+.cm-s-pastel-on-dark span.cm-number { color: #CCCCCC; }
+.cm-s-pastel-on-dark span.cm-property { color: #8F938F; }
+.cm-s-pastel-on-dark span.cm-attribute { color: #a6e22e; }
+.cm-s-pastel-on-dark span.cm-keyword { color: #AEB2F8; }
+.cm-s-pastel-on-dark span.cm-string { color: #66A968; }
+.cm-s-pastel-on-dark span.cm-variable { color: #AEB2F8; }
+.cm-s-pastel-on-dark span.cm-variable-2 { color: #BEBF55; }
+.cm-s-pastel-on-dark span.cm-variable-3 { color: #DE8E30; }
+.cm-s-pastel-on-dark span.cm-def { color: #757aD8; }
+.cm-s-pastel-on-dark span.cm-bracket { color: #f8f8f2; }
+.cm-s-pastel-on-dark span.cm-tag { color: #C1C144; }
+.cm-s-pastel-on-dark span.cm-link { color: #ae81ff; }
+.cm-s-pastel-on-dark span.cm-qualifier,.cm-s-pastel-on-dark span.cm-builtin { color: #C1C144; }
+.cm-s-pastel-on-dark span.cm-error {
+	background: #757aD8;
+	color: #f8f8f0;
+}
+.cm-s-pastel-on-dark .CodeMirror-activeline-background { background: rgba(255, 255, 255, 0.031) !important; }
+.cm-s-pastel-on-dark .CodeMirror-matchingbracket {
+	border: 1px solid rgba(255,255,255,0.25);
+	color: #8F938F !important;
+	margin: -1px -1px 0 -1px;
+}
diff --git a/plugins/ckeditor4/markdown/theme/rubyblue.css b/plugins/ckeditor4/markdown/theme/rubyblue.css
new file mode 100755
index 0000000..5349838
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/rubyblue.css
@@ -0,0 +1,23 @@
+.cm-s-rubyblue.CodeMirror { background: #112435; color: white; }
+.cm-s-rubyblue div.CodeMirror-selected { background: #38566F !important; }
+.cm-s-rubyblue .CodeMirror-gutters { background: #1F4661; border-right: 7px solid #3E7087; }
+.cm-s-rubyblue .CodeMirror-guttermarker { color: white; }
+.cm-s-rubyblue .CodeMirror-guttermarker-subtle { color: #3E7087; }
+.cm-s-rubyblue .CodeMirror-linenumber { color: white; }
+.cm-s-rubyblue .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-rubyblue span.cm-comment { color: #999; font-style:italic; line-height: 1em; }
+.cm-s-rubyblue span.cm-atom { color: #F4C20B; }
+.cm-s-rubyblue span.cm-number, .cm-s-rubyblue span.cm-attribute { color: #82C6E0; }
+.cm-s-rubyblue span.cm-keyword { color: #F0F; }
+.cm-s-rubyblue span.cm-string { color: #F08047; }
+.cm-s-rubyblue span.cm-meta { color: #F0F; }
+.cm-s-rubyblue span.cm-variable-2, .cm-s-rubyblue span.cm-tag { color: #7BD827; }
+.cm-s-rubyblue span.cm-variable-3, .cm-s-rubyblue span.cm-def { color: white; }
+.cm-s-rubyblue span.cm-bracket { color: #F0F; }
+.cm-s-rubyblue span.cm-link { color: #F4C20B; }
+.cm-s-rubyblue span.CodeMirror-matchingbracket { color:#F0F !important; }
+.cm-s-rubyblue span.cm-builtin, .cm-s-rubyblue span.cm-special { color: #FF9D00; }
+.cm-s-rubyblue span.cm-error { color: #AF2018; }
+
+.cm-s-rubyblue .CodeMirror-activeline-background {background: #173047 !important;}
diff --git a/plugins/ckeditor4/markdown/theme/solarized.css b/plugins/ckeditor4/markdown/theme/solarized.css
new file mode 100755
index 0000000..36d5f79
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/solarized.css
@@ -0,0 +1,170 @@
+/*
+Solarized theme for code-mirror
+http://ethanschoonover.com/solarized
+*/
+
+/*
+Solarized color pallet
+http://ethanschoonover.com/solarized/img/solarized-palette.png
+*/
+
+.solarized.base03 { color: #002b36; }
+.solarized.base02 { color: #073642; }
+.solarized.base01 { color: #586e75; }
+.solarized.base00 { color: #657b83; }
+.solarized.base0 { color: #839496; }
+.solarized.base1 { color: #93a1a1; }
+.solarized.base2 { color: #eee8d5; }
+.solarized.base3  { color: #fdf6e3; }
+.solarized.solar-yellow  { color: #b58900; }
+.solarized.solar-orange  { color: #cb4b16; }
+.solarized.solar-red { color: #dc322f; }
+.solarized.solar-magenta { color: #d33682; }
+.solarized.solar-violet  { color: #6c71c4; }
+.solarized.solar-blue { color: #268bd2; }
+.solarized.solar-cyan { color: #2aa198; }
+.solarized.solar-green { color: #859900; }
+
+/* Color scheme for code-mirror */
+
+.cm-s-solarized {
+  line-height: 1.45em;
+  color-profile: sRGB;
+  rendering-intent: auto;
+}
+.cm-s-solarized.cm-s-dark {
+  color: #839496;
+  background-color:  #002b36;
+  text-shadow: #002b36 0 1px;
+}
+.cm-s-solarized.cm-s-light {
+  background-color: #fdf6e3;
+  color: #657b83;
+  text-shadow: #eee8d5 0 1px;
+}
+
+.cm-s-solarized .CodeMirror-widget {
+  text-shadow: none;
+}
+
+
+.cm-s-solarized .cm-keyword { color: #cb4b16 }
+.cm-s-solarized .cm-atom { color: #d33682; }
+.cm-s-solarized .cm-number { color: #d33682; }
+.cm-s-solarized .cm-def { color: #2aa198; }
+
+.cm-s-solarized .cm-variable { color: #268bd2; }
+.cm-s-solarized .cm-variable-2 { color: #b58900; }
+.cm-s-solarized .cm-variable-3 { color: #6c71c4; }
+
+.cm-s-solarized .cm-property { color: #2aa198; }
+.cm-s-solarized .cm-operator {color: #6c71c4;}
+
+.cm-s-solarized .cm-comment { color: #586e75; font-style:italic; }
+
+.cm-s-solarized .cm-string { color: #859900; }
+.cm-s-solarized .cm-string-2 { color: #b58900; }
+
+.cm-s-solarized .cm-meta { color: #859900; }
+.cm-s-solarized .cm-qualifier { color: #b58900; }
+.cm-s-solarized .cm-builtin { color: #d33682; }
+.cm-s-solarized .cm-bracket { color: #cb4b16; }
+.cm-s-solarized .CodeMirror-matchingbracket { color: #859900; }
+.cm-s-solarized .CodeMirror-nonmatchingbracket { color: #dc322f; }
+.cm-s-solarized .cm-tag { color: #93a1a1 }
+.cm-s-solarized .cm-attribute {  color: #2aa198; }
+.cm-s-solarized .cm-header { color: #586e75; }
+.cm-s-solarized .cm-quote { color: #93a1a1; }
+.cm-s-solarized .cm-hr {
+  color: transparent;
+  border-top: 1px solid #586e75;
+  display: block;
+}
+.cm-s-solarized .cm-link { color: #93a1a1; cursor: pointer; }
+.cm-s-solarized .cm-special { color: #6c71c4; }
+.cm-s-solarized .cm-em {
+  color: #999;
+  text-decoration: underline;
+  text-decoration-style: dotted;
+}
+.cm-s-solarized .cm-strong { color: #eee; }
+.cm-s-solarized .cm-tab:before {
+  content: "➤";   /*visualize tab character*/
+  color: #586e75;
+  position:absolute;
+}
+.cm-s-solarized .cm-error,
+.cm-s-solarized .cm-invalidchar {
+  color: #586e75;
+  border-bottom: 1px dotted #dc322f;
+}
+
+.cm-s-solarized.cm-s-dark .CodeMirror-selected {
+  background: #073642;
+}
+
+.cm-s-solarized.cm-s-light .CodeMirror-selected {
+  background: #eee8d5;
+}
+
+/* Editor styling */
+
+
+
+/* Little shadow on the view-port of the buffer view */
+.cm-s-solarized.CodeMirror {
+  -moz-box-shadow: inset 7px 0 12px -6px #000;
+  -webkit-box-shadow: inset 7px 0 12px -6px #000;
+  box-shadow: inset 7px 0 12px -6px #000;
+}
+
+/* Gutter border and some shadow from it  */
+.cm-s-solarized .CodeMirror-gutters {
+  border-right: 1px solid;
+}
+
+/* Gutter colors and line number styling based of color scheme (dark / light) */
+
+/* Dark */
+.cm-s-solarized.cm-s-dark .CodeMirror-gutters {
+  background-color:  #002b36;
+  border-color: #00232c;
+}
+
+.cm-s-solarized.cm-s-dark .CodeMirror-linenumber {
+  text-shadow: #021014 0 -1px;
+}
+
+/* Light */
+.cm-s-solarized.cm-s-light .CodeMirror-gutters {
+  background-color: #fdf6e3;
+  border-color: #eee8d5;
+}
+
+/* Common */
+.cm-s-solarized .CodeMirror-linenumber {
+  color: #586e75;
+  padding: 0 5px;
+}
+.cm-s-solarized .CodeMirror-guttermarker-subtle { color: #586e75; }
+.cm-s-solarized.cm-s-dark .CodeMirror-guttermarker { color: #ddd; }
+.cm-s-solarized.cm-s-light .CodeMirror-guttermarker { color: #cb4b16; }
+
+.cm-s-solarized .CodeMirror-gutter .CodeMirror-gutter-text {
+  color: #586e75;
+}
+
+.cm-s-solarized .CodeMirror-lines .CodeMirror-cursor {
+  border-left: 1px solid #819090;
+}
+
+/*
+Active line. Negative margin compensates left padding of the text in the
+view-port
+*/
+.cm-s-solarized.cm-s-dark .CodeMirror-activeline-background {
+  background: rgba(255, 255, 255, 0.10);
+}
+.cm-s-solarized.cm-s-light .CodeMirror-activeline-background {
+  background: rgba(0, 0, 0, 0.10);
+}
diff --git a/plugins/ckeditor4/markdown/theme/the-matrix.css b/plugins/ckeditor4/markdown/theme/the-matrix.css
new file mode 100755
index 0000000..01474ca
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/the-matrix.css
@@ -0,0 +1,28 @@
+.cm-s-the-matrix.CodeMirror { background: #000000; color: #00FF00; }
+.cm-s-the-matrix div.CodeMirror-selected { background: #2D2D2D !important; }
+.cm-s-the-matrix .CodeMirror-gutters { background: #060; border-right: 2px solid #00FF00; }
+.cm-s-the-matrix .CodeMirror-guttermarker { color: #0f0; }
+.cm-s-the-matrix .CodeMirror-guttermarker-subtle { color: white; }
+.cm-s-the-matrix .CodeMirror-linenumber { color: #FFFFFF; }
+.cm-s-the-matrix .CodeMirror-cursor { border-left: 1px solid #00FF00 !important; }
+
+.cm-s-the-matrix span.cm-keyword {color: #008803; font-weight: bold;}
+.cm-s-the-matrix span.cm-atom {color: #3FF;}
+.cm-s-the-matrix span.cm-number {color: #FFB94F;}
+.cm-s-the-matrix span.cm-def {color: #99C;}
+.cm-s-the-matrix span.cm-variable {color: #F6C;}
+.cm-s-the-matrix span.cm-variable-2 {color: #C6F;}
+.cm-s-the-matrix span.cm-variable-3 {color: #96F;}
+.cm-s-the-matrix span.cm-property {color: #62FFA0;}
+.cm-s-the-matrix span.cm-operator {color: #999}
+.cm-s-the-matrix span.cm-comment {color: #CCCCCC;}
+.cm-s-the-matrix span.cm-string {color: #39C;}
+.cm-s-the-matrix span.cm-meta {color: #C9F;}
+.cm-s-the-matrix span.cm-qualifier {color: #FFF700;}
+.cm-s-the-matrix span.cm-builtin {color: #30a;}
+.cm-s-the-matrix span.cm-bracket {color: #cc7;}
+.cm-s-the-matrix span.cm-tag {color: #FFBD40;}
+.cm-s-the-matrix span.cm-attribute {color: #FFF700;}
+.cm-s-the-matrix span.cm-error {color: #FF0000;}
+
+.cm-s-the-matrix .CodeMirror-activeline-background {background: #040;}
diff --git a/plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css b/plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css
new file mode 100755
index 0000000..8414135
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/tomorrow-night-eighties.css
@@ -0,0 +1,36 @@
+/*
+
+    Name:       Tomorrow Night - Eighties
+    Author:     Chris Kempson
+
+    CodeMirror template by Jan T. Sott (https://github.com/idleberg/base16-codemirror)
+    Original Base16 color scheme by Chris Kempson (https://github.com/chriskempson/base16)
+
+*/
+
+.cm-s-tomorrow-night-eighties.CodeMirror {background: #000000; color: #CCCCCC;}
+.cm-s-tomorrow-night-eighties div.CodeMirror-selected {background: #2D2D2D !important;}
+.cm-s-tomorrow-night-eighties .CodeMirror-gutters {background: #000000; border-right: 0px;}
+.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker { color: #f2777a; }
+.cm-s-tomorrow-night-eighties .CodeMirror-guttermarker-subtle { color: #777; }
+.cm-s-tomorrow-night-eighties .CodeMirror-linenumber {color: #515151;}
+.cm-s-tomorrow-night-eighties .CodeMirror-cursor {border-left: 1px solid #6A6A6A !important;}
+
+.cm-s-tomorrow-night-eighties span.cm-comment {color: #d27b53;}
+.cm-s-tomorrow-night-eighties span.cm-atom {color: #a16a94;}
+.cm-s-tomorrow-night-eighties span.cm-number {color: #a16a94;}
+
+.cm-s-tomorrow-night-eighties span.cm-property, .cm-s-tomorrow-night-eighties span.cm-attribute {color: #99cc99;}
+.cm-s-tomorrow-night-eighties span.cm-keyword {color: #f2777a;}
+.cm-s-tomorrow-night-eighties span.cm-string {color: #ffcc66;}
+
+.cm-s-tomorrow-night-eighties span.cm-variable {color: #99cc99;}
+.cm-s-tomorrow-night-eighties span.cm-variable-2 {color: #6699cc;}
+.cm-s-tomorrow-night-eighties span.cm-def {color: #f99157;}
+.cm-s-tomorrow-night-eighties span.cm-bracket {color: #CCCCCC;}
+.cm-s-tomorrow-night-eighties span.cm-tag {color: #f2777a;}
+.cm-s-tomorrow-night-eighties span.cm-link {color: #a16a94;}
+.cm-s-tomorrow-night-eighties span.cm-error {background: #f2777a; color: #6A6A6A;}
+
+.cm-s-tomorrow-night-eighties .CodeMirror-activeline-background {background: #343600 !important;}
+.cm-s-tomorrow-night-eighties .CodeMirror-matchingbracket { text-decoration: underline; color: white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/twilight.css b/plugins/ckeditor4/markdown/theme/twilight.css
new file mode 100755
index 0000000..9ca5057
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/twilight.css
@@ -0,0 +1,30 @@
+.cm-s-twilight.CodeMirror { background: #141414; color: #f7f7f7; } /**/
+.cm-s-twilight .CodeMirror-selected { background: #323232 !important; } /**/
+
+.cm-s-twilight .CodeMirror-gutters { background: #222; border-right: 1px solid #aaa; }
+.cm-s-twilight .CodeMirror-guttermarker { color: white; }
+.cm-s-twilight .CodeMirror-guttermarker-subtle { color: #aaa; }
+.cm-s-twilight .CodeMirror-linenumber { color: #aaa; }
+.cm-s-twilight .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-twilight .cm-keyword {  color: #f9ee98; } /**/
+.cm-s-twilight .cm-atom { color: #FC0; }
+.cm-s-twilight .cm-number { color:  #ca7841; } /**/
+.cm-s-twilight .cm-def { color: #8DA6CE; }
+.cm-s-twilight span.cm-variable-2, .cm-s-twilight span.cm-tag { color: #607392; } /**/
+.cm-s-twilight span.cm-variable-3, .cm-s-twilight span.cm-def { color: #607392; } /**/
+.cm-s-twilight .cm-operator { color: #cda869; } /**/
+.cm-s-twilight .cm-comment { color:#777; font-style:italic; font-weight:normal; } /**/
+.cm-s-twilight .cm-string { color:#8f9d6a; font-style:italic; } /**/
+.cm-s-twilight .cm-string-2 { color:#bd6b18 } /*?*/
+.cm-s-twilight .cm-meta { background-color:#141414; color:#f7f7f7; } /*?*/
+.cm-s-twilight .cm-builtin { color: #cda869; } /*?*/
+.cm-s-twilight .cm-tag { color: #997643; } /**/
+.cm-s-twilight .cm-attribute { color: #d6bb6d; } /*?*/
+.cm-s-twilight .cm-header { color: #FF6400; }
+.cm-s-twilight .cm-hr { color: #AEAEAE; }
+.cm-s-twilight .cm-link {   color:#ad9361; font-style:italic; text-decoration:none; } /**/
+.cm-s-twilight .cm-error { border-bottom: 1px solid red; }
+
+.cm-s-twilight .CodeMirror-activeline-background {background: #27282E !important;}
+.cm-s-twilight .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/vibrant-ink.css b/plugins/ckeditor4/markdown/theme/vibrant-ink.css
new file mode 100755
index 0000000..5177282
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/vibrant-ink.css
@@ -0,0 +1,32 @@
+/* Taken from the popular Visual Studio Vibrant Ink Schema */
+
+.cm-s-vibrant-ink.CodeMirror { background: black; color: white; }
+.cm-s-vibrant-ink .CodeMirror-selected { background: #35493c !important; }
+
+.cm-s-vibrant-ink .CodeMirror-gutters { background: #002240; border-right: 1px solid #aaa; }
+.cm-s-vibrant-ink .CodeMirror-guttermarker { color: white; }
+.cm-s-vibrant-ink .CodeMirror-guttermarker-subtle { color: #d0d0d0; }
+.cm-s-vibrant-ink .CodeMirror-linenumber { color: #d0d0d0; }
+.cm-s-vibrant-ink .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-vibrant-ink .cm-keyword {  color: #CC7832; }
+.cm-s-vibrant-ink .cm-atom { color: #FC0; }
+.cm-s-vibrant-ink .cm-number { color:  #FFEE98; }
+.cm-s-vibrant-ink .cm-def { color: #8DA6CE; }
+.cm-s-vibrant-ink span.cm-variable-2, .cm-s-vibrant span.cm-tag { color: #FFC66D }
+.cm-s-vibrant-ink span.cm-variable-3, .cm-s-vibrant span.cm-def { color: #FFC66D }
+.cm-s-vibrant-ink .cm-operator { color: #888; }
+.cm-s-vibrant-ink .cm-comment { color: gray; font-weight: bold; }
+.cm-s-vibrant-ink .cm-string { color:  #A5C25C }
+.cm-s-vibrant-ink .cm-string-2 { color: red }
+.cm-s-vibrant-ink .cm-meta { color: #D8FA3C; }
+.cm-s-vibrant-ink .cm-builtin { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-tag { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-attribute { color: #8DA6CE; }
+.cm-s-vibrant-ink .cm-header { color: #FF6400; }
+.cm-s-vibrant-ink .cm-hr { color: #AEAEAE; }
+.cm-s-vibrant-ink .cm-link { color: blue; }
+.cm-s-vibrant-ink .cm-error { border-bottom: 1px solid red; }
+
+.cm-s-vibrant-ink .CodeMirror-activeline-background {background: #27282E !important;}
+.cm-s-vibrant-ink .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}
diff --git a/plugins/ckeditor4/markdown/theme/xq-dark.css b/plugins/ckeditor4/markdown/theme/xq-dark.css
new file mode 100755
index 0000000..116eccf
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/xq-dark.css
@@ -0,0 +1,51 @@
+/*
+Copyright (C) 2011 by MarkLogic Corporation
+Author: Mike Brevoort <mike@brevoort.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+.cm-s-xq-dark.CodeMirror { background: #0a001f; color: #f8f8f8; }
+.cm-s-xq-dark .CodeMirror-selected { background: #27007A !important; }
+.cm-s-xq-dark .CodeMirror-gutters { background: #0a001f; border-right: 1px solid #aaa; }
+.cm-s-xq-dark .CodeMirror-guttermarker { color: #FFBD40; }
+.cm-s-xq-dark .CodeMirror-guttermarker-subtle { color: #f8f8f8; }
+.cm-s-xq-dark .CodeMirror-linenumber { color: #f8f8f8; }
+.cm-s-xq-dark .CodeMirror-cursor { border-left: 1px solid white !important; }
+
+.cm-s-xq-dark span.cm-keyword {color: #FFBD40;}
+.cm-s-xq-dark span.cm-atom {color: #6C8CD5;}
+.cm-s-xq-dark span.cm-number {color: #164;}
+.cm-s-xq-dark span.cm-def {color: #FFF; text-decoration:underline;}
+.cm-s-xq-dark span.cm-variable {color: #FFF;}
+.cm-s-xq-dark span.cm-variable-2 {color: #EEE;}
+.cm-s-xq-dark span.cm-variable-3 {color: #DDD;}
+.cm-s-xq-dark span.cm-property {}
+.cm-s-xq-dark span.cm-operator {}
+.cm-s-xq-dark span.cm-comment {color: gray;}
+.cm-s-xq-dark span.cm-string {color: #9FEE00;}
+.cm-s-xq-dark span.cm-meta {color: yellow;}
+.cm-s-xq-dark span.cm-qualifier {color: #FFF700;}
+.cm-s-xq-dark span.cm-builtin {color: #30a;}
+.cm-s-xq-dark span.cm-bracket {color: #cc7;}
+.cm-s-xq-dark span.cm-tag {color: #FFBD40;}
+.cm-s-xq-dark span.cm-attribute {color: #FFF700;}
+.cm-s-xq-dark span.cm-error {color: #f00;}
+
+.cm-s-xq-dark .CodeMirror-activeline-background {background: #27282E !important;}
+.cm-s-xq-dark .CodeMirror-matchingbracket {outline:1px solid grey; color:white !important;}
\ No newline at end of file
diff --git a/plugins/ckeditor4/markdown/theme/xq-light.css b/plugins/ckeditor4/markdown/theme/xq-light.css
new file mode 100755
index 0000000..20b5c79
--- /dev/null
+++ b/plugins/ckeditor4/markdown/theme/xq-light.css
@@ -0,0 +1,43 @@
+/*
+Copyright (C) 2011 by MarkLogic Corporation
+Author: Mike Brevoort <mike@brevoort.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+*/
+.cm-s-xq-light span.cm-keyword {line-height: 1em; font-weight: bold; color: #5A5CAD; }
+.cm-s-xq-light span.cm-atom {color: #6C8CD5;}
+.cm-s-xq-light span.cm-number {color: #164;}
+.cm-s-xq-light span.cm-def {text-decoration:underline;}
+.cm-s-xq-light span.cm-variable {color: black; }
+.cm-s-xq-light span.cm-variable-2 {color:black;}
+.cm-s-xq-light span.cm-variable-3 {color: black; }
+.cm-s-xq-light span.cm-property {}
+.cm-s-xq-light span.cm-operator {}
+.cm-s-xq-light span.cm-comment {color: #0080FF; font-style: italic;}
+.cm-s-xq-light span.cm-string {color: red;}
+.cm-s-xq-light span.cm-meta {color: yellow;}
+.cm-s-xq-light span.cm-qualifier {color: grey}
+.cm-s-xq-light span.cm-builtin {color: #7EA656;}
+.cm-s-xq-light span.cm-bracket {color: #cc7;}
+.cm-s-xq-light span.cm-tag {color: #3F7F7F;}
+.cm-s-xq-light span.cm-attribute {color: #7F007F;}
+.cm-s-xq-light span.cm-error {color: #f00;}
+
+.cm-s-xq-light .CodeMirror-activeline-background {background: #e8f2ff !important;}
+.cm-s-xq-light .CodeMirror-matchingbracket {outline:1px solid grey;color:black !important;background:yellow;}
\ No newline at end of file
diff --git a/plugins/ckeditor4/page2images/icons/page2images.png b/plugins/ckeditor4/page2images/icons/page2images.png
new file mode 100644
index 0000000000000000000000000000000000000000..c8e4ab77853c11c0ec372676993205a7a98e4387
GIT binary patch
literal 7326
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
Eg2j0DO#lD@

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/page2images/plugin.js b/plugins/ckeditor4/page2images/plugin.js
new file mode 100644
index 0000000..177117f
--- /dev/null
+++ b/plugins/ckeditor4/page2images/plugin.js
@@ -0,0 +1,94 @@
+var page2imagesIframeEditor=null;
+CKEDITOR.plugins.add( 'page2images',
+{
+	icons: 'page2images',
+	init : function( editor )
+	{
+		var pluginName = 'page2images';
+		var title = "";
+		var validate = "";
+		var serverUrl="http://www.page2images.com";
+		className="cke_button_page2images";
+		var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
+				var eventer = window[eventMethod];
+				var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
+				eventer(messageEvent, function (e) {
+					  if (e.origin == serverUrl&&e.data.indexOf("'")<0&&e.data.indexOf("tmp/")>-1) {
+							editor.insertHtml("<img style='max-width:100%' src=\""+e.data+"\" />");
+							// $("#page2image_plugin").remove();
+							// $("#page2image_lightboxOverlay").remove();
+							var oP = document.getElementById("page2image_plugin");
+							oP.parentNode.removeChild(oP);
+							var oPL = document.getElementById("page2image_lightboxOverlay");
+							oPL.parentNode.removeChild(oPL);
+					  }
+				}, false);  
+		editor.ui.addButton( 'page2images',
+			{
+				label : title,
+				command : pluginName,
+				click:function(){
+					document.documentElement.scrollTop=0;
+
+					var str = "<div class='page2images_loading' style='display:none;font-weight:bold;position:absolute;left:30px;top:5px;'>Loading...</div><div id='page2images_close' style='cursor:pointer;font-weight:bold;position:absolute;right:20px;top:5px;'><img src='http://www.page2images.com/resources/img/tools/icon_failed.png' /></div>";
+					str += "<iframe id='page2image_iframe'   height='100%' width='100%' name='page2image_iframe' border=0 src='"+serverUrl+"/URL-Live-Website-Screenshot-Generator?noDisplayHeaderFooterHTML=1' style='background:#fff;border:0px;' /></div>";
+					//if($("#page2image_iframe").length == 0){
+					//	$('body').append(str);
+					//}
+					var oP = document.getElementById("page2image_plugin");
+					if(!oP)
+					{
+						
+						
+						var newDiv = document.createElement("div");
+						newDiv.id="page2image_plugin"; 
+						newDiv.style.background = "#fff";
+						newDiv.style.position = "absolute";
+						newDiv.style.top = "0";
+						newDiv.style.width = "1032px";
+						var clintW=document.body.clientWidth;
+						if(clintW>1032)
+						{
+							newDiv.style.marginLeft = (clintW-1032)/2+"px";
+						}
+						newDiv.style.height = "96%";   
+						newDiv.style.marginTop = "2%";
+						newDiv.style.zIndex = "9000";   
+						newDiv.innerHTML = str;
+						document.body.insertBefore(newDiv, document.body.childNodes[0]);
+						var newOp=document.createElement("div");
+						newOp.id="page2image_lightboxOverlay"; 
+						newOp.className = "lightboxOverlay"; 
+						newOp.style.background = "#000"; 
+						newOp.style.opacity = "0.8"; 
+						newOp.style.position = "absolute"; 
+						newOp.style.zIndex = "1999"; 
+						newOp.style.top = "0"; 
+						newOp.style.left = "0"; 
+						newOp.style.width="100%";
+						newOp.style.height=document.body.scrollHeight+"px";
+						document.body.insertBefore(newOp, document.body.childNodes[0]);
+					}
+					var page2images_close=document.getElementById("page2images_close");
+					page2images_close.onclick = function(){
+						    var oP = document.getElementById("page2image_plugin");
+							oP.parentNode.removeChild(oP);
+							var oPL = document.getElementById("page2image_lightboxOverlay");
+							oPL.parentNode.removeChild(oPL);
+					 };
+				
+					
+					
+				},
+				className:className
+			});
+	}
+} );
+/**
+ *  Padding text to set off the image in preview area.
+ * @name CKEDITOR.config.image_previewText
+ * @type String
+ * @default "Lorem ipsum dolor..." placehoder text.
+ * @example
+ * config.image_previewText = CKEDITOR.tools.repeat( '___ ', 100 );
+ */
diff --git a/plugins/ckeditor4/pastebase64/plugin.js b/plugins/ckeditor4/pastebase64/plugin.js
new file mode 100755
index 0000000..f278a17
--- /dev/null
+++ b/plugins/ckeditor4/pastebase64/plugin.js
@@ -0,0 +1,70 @@
+(function () {
+    'use strict';
+
+    CKEDITOR.plugins.add('pastebase64', {
+        init: init
+    });
+
+    function init(editor) {
+        if (editor.addFeature) {
+            editor.addFeature({
+                allowedContent: 'img[alt,id,!src]{width,height};'
+            });
+        }
+
+        editor.on("contentDom", function () {
+            var editableElement = editor.editable ? editor.editable() : editor.document;
+            editableElement.on("paste", onPaste, null, {editor: editor});
+        });
+
+
+    }
+
+    function onPaste(event) {
+        var editor = event.listenerData && event.listenerData.editor;
+        var $event = event.data.$;
+        var clipboardData = $event.clipboardData;
+        var found = false;
+        var imageType = /^image/;
+
+        if (!clipboardData) {
+            return;
+        }
+
+        return Array.prototype.forEach.call(clipboardData.types, function (type, i) {
+            if (found) {
+                return;
+            }
+
+            if (type.match(imageType) || clipboardData.items[i].type.match(imageType)) {
+                readImageAsBase64(clipboardData.items[i], editor);
+                return found = true;
+            }
+        });
+    }
+
+    function readImageAsBase64(item, editor) {
+        if (!item || typeof item.getAsFile !== 'function') {
+            return;
+        }
+
+        var file = item.getAsFile();
+        var reader = new FileReader();
+
+        reader.onload = function (evt) {
+            var element = editor.document.createElement('img', {
+                attributes: {
+                    src: evt.target.result
+                }
+            });
+
+            // We use a timeout callback to prevent a bug where insertElement inserts at first caret
+            // position
+            setTimeout(function () {
+                editor.insertElement(element);
+            }, 10);
+        };
+
+        reader.readAsDataURL(file);
+    }
+})();
diff --git a/plugins/ckeditor4/pbckcode/CHANGELOG.md b/plugins/ckeditor4/pbckcode/CHANGELOG.md
new file mode 100644
index 0000000..9df82a1
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/CHANGELOG.md
@@ -0,0 +1,44 @@
+# Changelog
+
+## v1.2.5 (4.0.x - 4.6.x)
+I updated the code style guide to 2spaces instead of 4.
+
+  * [FEATURE] : Updated ACE editor to 1.2.6
+  * [DOC] : Added the examples directly in the master branch
+
+## v1.2.4 (4.0.x - 4.5.x)
+
+  * [FIX] : Fixed C/C++ mode
+  * [FIX] : Avoid mixed content with cdn script
+  * [FIX] : Fixed tab size value
+  * [FEATURE] : Added HiDPI icon
+  * [FEATURE] : Added Turkish
+  * [FEATURE] : Added Russian
+
+## v1.2.3 (4.0.x - 4.4.x)
+
+  * [FIX] : Fixed auto focus on the editor when opening the dialog.
+  * [FIX] : Fixed space character encoding
+  * [FEATURE] : Added property to choose the ACE Editor sources
+
+## v1.2.2 (4.0.x - 4.4.x)
+
+  * [FIX] : Fixed ckeditor style overriden by pbckcode plugin
+
+## v1.2.1 (4.0.x - 4.3.x)
+
+  * [FIX] : problem with minification for CKEditor Builder
+  * [FIX] : multiples script loads when you instanciate several CKEditor on the same page
+
+From the v1.2.1, ACE Editor is now loaded from the [jsDelivr CDN](http://www.jsdelivr.com/). The loading will be faster and the plugin size will be smaller.
+
+## v1.2.0 (4.0.x - 4.3.x)
+
+  * [FIX] : fix problem of external files loading
+  * [IMPROVEMENT] : load external files only once
+  * [FEATURE] : tab size settings
+  * [FIX] : added CKEditor ACF to parse already saved code
+
+## v1.1.0 (4.0.x - 4.1.x)
+
+  * [FEATURE] : added several syntax highlighters (Prism.js, Highlight.js, SyntaxHighlighter.js)
diff --git a/plugins/ckeditor4/pbckcode/LICENSE b/plugins/ckeditor4/pbckcode/LICENSE
new file mode 100644
index 0000000..ad410e1
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/LICENSE
@@ -0,0 +1,201 @@
+Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "{}"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright {yyyy} {name of copyright owner}
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
\ No newline at end of file
diff --git a/plugins/ckeditor4/pbckcode/README.md b/plugins/ckeditor4/pbckcode/README.md
new file mode 100755
index 0000000..9959af0
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/README.md
@@ -0,0 +1,179 @@
+# pbckcode
+
+A CKEditor plugin to easily add code into your articles.
+The plugin will create a dialog where you will be able to format your code as your will. When you press the **OK** button, the plugin will create a *pre* tag with your code inside.
+
+# Demos
+
+*  [Basic configuration](http://prbaron.github.com/pbckcode/basic.html)
+*  [Use options](http://prbaron.github.com/pbckcode/options.html)
+*  [Load ACE from custom directory](http://prbaron.github.com/pbckcode/custom-ace.html)
+*  [Full CKEditor](http://prbaron.github.com/pbckcode/full.html)
+
+# Installation
+1. Download the plugin from the Github repository : [https://github.com/prbaron/pbckcode/tags](https://github.com/prbaron/pbckcode/tags)
+1. Place the **src** folder into the plugins folder of CKEditor (*{Path to CKEDitor}/plugins/*)
+1. Rename the folder to **pbckcode** (it will be easier to call it into CKEditor)
+1. Open the config.js file and add the following lines :
+
+```js
+CKEDITOR.editorConfig = function(config) {
+  // CKEDITOR TOOLBAR CUSTOMIZATION
+  // I only set the needed buttons, so feel frey to add those you want in the array
+  config.toolbarGroups = [
+    {name: 'pbckcode'},
+    // your other buttons here
+    // get information about available buttons here: bhttp://docs.ckeditor.com/?mobile=/guide/dev_toolbar
+  ];
+
+  // CKEDITOR PLUGINS LOADING
+  config.extraPlugins = 'pbckcode'; // add other plugins here (comma separated)
+
+  // ADVANCED CONTENT FILTER (ACF)
+  // ACF protects your CKEditor instance of adding unofficial tags
+  // however it strips out the pre tag of pbckcode plugin
+  // add this rule to enable it, useful when you want to re edit a post
+  // only needed on v1.1.x
+  config.allowedContent = 'pre[*]{*}(*)'; // add other rules here
+
+  // PBCKCODE CUSTOMIZATION
+  config.pbckcode = {
+    // An optional class to your pre tag.
+    cls: '',
+
+    // The syntax highlighter you will use in the output view
+    highlighter: 'PRETTIFY',
+
+    // An array of the available modes for you plugin.
+    // The key corresponds to the string shown in the select tag.
+    // The value correspond to the loaded file for ACE Editor.
+    modes: [['HTML', 'html'], ['CSS', 'css'], ['PHP', 'php'], ['JS', 'javascript']],
+
+    // The theme of the ACE Editor of the plugin.
+    theme: 'textmate',
+
+    // Tab indentation (in spaces)
+    tab_size: '4'
+  };
+};
+```
+And you are good to go! You will have the same configuration than the demo.
+
+# Options
+
+## highlighter
+
+Choose your synta highlighter output. Remove the option if you want to output a basic &lt;pre&gt; tag, otherwise, choose one of them.
+
+```js
+'HIGHLIGHT' // http://highlightjs.org/
+'PRETTIFY' // https://code.google.com/p/google-code-prettify/
+'PRISM' // http://prismjs.com/
+'SYNTAX_HIGHLIGHTER' // http://alexgorbatchev.com/SyntaxHighlighter/
+```
+
+## modes
+```js
+// Available modes
+['C/C++'        , 'c_cpp']
+['C9Search'     , 'c9search']
+['Clojure'      , 'clojure']
+['CoffeeScript' , 'coffee']
+['ColdFusion'   , 'coldfusion']
+['C#'           , 'csharp']
+['CSS'          , 'css']
+['Diff'         , 'diff']
+['Glsl'         , 'glsl']
+['Go'           , 'golang']
+['Groovy'       , 'groovy']
+['haXe'         , 'haxe']
+['HTML'         , 'html']
+['Jade'         , 'jade']
+['Java'         , 'java']
+['JavaScript'   , 'javascript']
+['JSON'         , 'json']
+['JSP'          , 'jsp']
+['JSX'          , 'jsx']
+['LaTeX'        , 'latex']
+['LESS'         , 'less']
+['Liquid'       , 'liquid']
+['Lua'          , 'lua']
+['LuaPage'      , 'luapage']
+['Markdown'     , 'markdown']
+['OCaml'        , 'ocaml']
+['Perl'         , 'perl']
+['pgSQL'        , 'pgsql']
+['PHP'          , 'php']
+['Powershell'   , 'powershel1']
+['Python'       , 'python']
+['R'            , 'ruby']
+['OpenSCAD'     , 'scad']
+['Scala'        , 'scala']
+['SCSS/Sass'    , 'scss']
+['SH'           , 'sh']
+['SQL'          , 'sql']
+['SVG'          , 'svg']
+['Tcl'          , 'tcl']
+['Text'         , 'text']
+['Textile'      , 'textile']
+['XML'          , 'xml']
+['XQuery'       , 'xq']
+['YAML'         , 'yaml']
+```
+
+## theme
+
+```js
+// Bright themes
+'chrome'
+'clouds'
+'crimson_editor'
+'dawn'
+'dreamweaver'
+'eclipse'
+'github'
+'solarized_light'
+'textmate' // default theme
+'tomorrow'
+'xcode'
+'kuroir'
+'katzenmilch'
+```
+
+```js
+// Dark themes
+'ambiance'
+'chaos'
+'clouds_midnight'
+'cobalt'
+'idle_fingers'
+'kr_theme'
+'merbivore'
+'merbivore_soft'
+'mono_industrial'
+'monokai'
+'pastel_on_dark'
+'solarized_dark'
+'terminal'
+'tomorrow_night'
+'tomorrow_night_blue'
+'tomorrow_night_bright'
+'tomorrow_night_eighties'
+'twilight'
+'vibrant_ink'
+```
+
+# Special Thanks
+
+  * CKEditor : [http://ckeditor.com/](http://ckeditor.com/)
+  * ACE : [http://ace.ajax.org/](http://ace.ajax.org/)
+  * Lea Verou : [http://prismjs.com/](http://prismjs.com/)
+  * Google : [https://code.google.com/p/google-code-prettify/](https://code.google.com/p/google-code-prettify/)
+  * Ivan Sagalaev : [http://highlightjs.org/](http://highlightjs.org/)
+  * Alex Gorbatchev : [http://alexgorbatchev.com/SyntaxHighlighter/](http://alexgorbatchev.com/SyntaxHighlighter/)
+
+# Credits
+#### Pierre Baron
+*  Website : [http://www.pierrebaron.fr](http://www.pierrebaron.fr)
+*  Twitter : [@prbaron](https://twitter.com/prbaron)
+*  Contact : <prbaron22@gmail.com>
diff --git a/plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js b/plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js
new file mode 100755
index 0000000..c7cf269
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/dialogs/PBSyntaxHighlighter.js
@@ -0,0 +1,102 @@
+var PBSyntaxHighlighter = (function() {
+  "use strict";
+
+  var sh;
+
+  /**
+   * Constructor
+   * @param {String} sh The SyntaxHighlighter
+   */
+  function PBSyntaxHighlighter(sh) {
+    switch (sh) {
+      case "HIGHLIGHT" :
+        this.sh = HIGHLIGHT;
+        break;
+      case "PRETTIFY" :
+        this.sh = PRETTIFY;
+        break;
+      case "PRISM" :
+        this.sh = PRISM;
+        break;
+      case "SYNTAX_HIGHLIGHTER" :
+        this.sh = SYNTAX_HIGHLIGHTER;
+        break;
+      default :
+        this.sh = {
+          _type: "DEFAULT",
+          _cls: "",
+          _tag: 'pre'
+        };
+        break;
+    }
+  }
+
+  /**
+   * Sets the SyntaxHighlighter type
+   * @param {String} type The name of the SyntaxHighlighter
+   */
+  PBSyntaxHighlighter.prototype.setType = function(type) {
+    this.sh._type = type;
+  };
+
+  /**
+   * Gets the SyntaxHighlighter type
+   * @return {String} The type of the SyntaxHighlighter
+   */
+  PBSyntaxHighlighter.prototype.getType = function() {
+    return this.sh._type;
+  };
+
+  /**
+   * Sets the full class of the SH object
+   * @param {String} cls the class to add to the Object
+   */
+  PBSyntaxHighlighter.prototype.setCls = function(cls) {
+    this.sh.cls = this.sh._cls + cls;
+  };
+
+  /**
+   * Gets the full class of the SH Object
+   * @return {String} the full class of the SH Object
+   */
+  PBSyntaxHighlighter.prototype.getCls = function() {
+    return this.sh.cls;
+  };
+
+  /**
+   * Get the tag to insert into the pre tag
+   * @return {String} the tag to insert, pre otherwise
+   */
+  PBSyntaxHighlighter.prototype.getTag = function() {
+    return this.sh._tag;
+  };
+
+  return PBSyntaxHighlighter;
+})();
+
+/**********************************/
+/* SYNTAX HIGHLIGHTERS DEFINITION */
+/**********************************/
+var HIGHLIGHT = {
+  _type: "HIGHLIGHT",
+  _cls: "", // only show language (done in pbckcode.js)
+  _tag: 'code'
+};
+
+var PRETTIFY = {
+  _type: "PRETTIFY",
+  _cls: "prettyprint linenums lang-",
+  _tag: 'pre'
+};
+
+var PRISM = {
+  _type: "PRISM",
+  _cls: "language-",
+  _tag: 'code'
+};
+
+var SYNTAX_HIGHLIGHTER = {
+  _type: "SYNTAX_HIGHLIGHTER",
+  _cls: "brush: ",
+  _tag: 'pre'
+};
diff --git a/plugins/ckeditor4/pbckcode/dialogs/pbckcode.js b/plugins/ckeditor4/pbckcode/dialogs/pbckcode.js
new file mode 100755
index 0000000..018fc84
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/dialogs/pbckcode.js
@@ -0,0 +1,205 @@
+CKEDITOR.dialog.add('pbckcodeDialog', function(editor) {
+  var tab_sizes = ['1', '2', '4', '8'];
+
+  // CKEditor variables
+  var dialog;
+  var shighlighter = new PBSyntaxHighlighter(editor.settings.highlighter);
+
+  // ACE variables
+  var aceEditor, aceSession, whitespace;
+
+  // EDITOR panel
+  var editorPanel = {
+    id: 'editor',
+    label: editor.lang.pbckcode.editor,
+    elements: [
+      {
+        type: 'hbox',
+        children: [
+          {
+            type: 'select',
+            id: 'code-select',
+            className: 'cke_pbckcode_form',
+            label: editor.lang.pbckcode.mode,
+            items: editor.settings.modes,
+            'default': editor.settings.modes[0][1],
+            setup: function(element) {
+              if (element) {
+                element = element.getAscendant('pre', true);
+                this.setValue(element.getAttribute('data-pbcklang'));
+              }
+            },
+            commit: function(element) {
+              if (element) {
+                element = element.getAscendant('pre', true);
+                element.setAttribute('data-pbcklang', this.getValue());
+              }
+            },
+            onChange: function() {
+              aceSession.setMode('ace/mode/' + this.getValue());
+            }
+          },
+          {
+            type: 'select',
+            id: 'code-tabsize-select',
+            className: 'cke_pbckcode_form',
+            label: editor.lang.pbckcode.tabSize,
+            items: tab_sizes,
+            'default': editor.settings.tab_size,
+            setup: function(element) {
+              if (element) {
+                element = element.getAscendant('pre', true);
+                this.setValue(element.getAttribute('data-pbcktabsize'));
+              }
+            },
+            commit: function(element) {
+              if (element) {
+                element = element.getAscendant('pre', true);
+                element.setAttribute('data-pbcktabsize', this.getValue());
+              }
+            },
+            onChange: function(element) {
+              if (element) {
+                whitespace.convertIndentation(aceSession, ' ', this.getValue());
+                aceSession.setTabSize(this.getValue());
+              }
+            }
+          }
+        ]
+      },
+      {
+        type: 'html',
+        html: '<div></div>',
+        id: 'code-textarea',
+        className: 'cke_pbckcode_ace',
+        style: 'position: absolute; top: 80px; left: 10px; right: 10px; bottom: 50px;',
+        setup: function(element) {
+          // get the value of the editor
+          var code = element.getHtml();
+
+          // replace some regexp
+          code = code.replace(new RegExp('<br/>', 'g'), '\n')
+            .replace(new RegExp('<br>', 'g'), '\n')
+            .replace(new RegExp('&lt;', 'g'), '<')
+            .replace(new RegExp('&gt;', 'g'), '>')
+            .replace(new RegExp('&amp;', 'g'), '&')
+            .replace(new RegExp('&nbsp;', 'g'), ' ');
+
+          aceEditor.setValue(code);
+        },
+        commit: function(element) {
+          element.setText(aceEditor.getValue());
+        }
+      }
+    ]
+  };
+
+  // dialog code
+  return {
+    // Basic properties of the dialog window: title, minimum size.
+    title: editor.lang.pbckcode.title,
+    minWidth: 600,
+    minHeight: 400,
+    // Dialog window contents definition.
+    contents: [
+      editorPanel
+    ],
+    onLoad: function() {
+      dialog = this;
+      // we load the ACE plugin to our div
+      aceEditor = ace.edit(dialog.getContentElement('editor', 'code-textarea')
+        .getElement().getId());
+      // save the aceEditor into the editor object for the resize event
+      editor.aceEditor = aceEditor;
+
+      // set default settings
+      aceEditor.setTheme('ace/theme/' + editor.settings.theme);
+      aceEditor.setHighlightActiveLine(true);
+      aceEditor.setShowInvisibles(true);
+
+      aceSession = aceEditor.getSession();
+      aceSession.setMode('ace/mode/' + editor.settings.modes[0][1]);
+      aceSession.setTabSize(editor.settings.tab_size);
+      aceSession.setUseSoftTabs(true);
+
+      // load ace extensions
+      whitespace = ace.require('ace/ext/whitespace');
+    },
+    onShow: function() {
+      // get the selection
+      var selection = editor.getSelection();
+      // get the entire element
+      var element = selection.getStartElement();
+
+      // looking for the pre parent tag
+      if (element) {
+        element = element.getAscendant('pre', true);
+      }
+      // if there is no pre tag, it is an addition. Therefore, it is an edition
+      if (!element || element.getName() !== 'pre') {
+        element = new CKEDITOR.dom.element('pre');
+
+        if (shighlighter.getTag() !== 'pre') {
+          element.append(new CKEDITOR.dom.element('code'));
+        }
+        this.insertMode = true;
+      }
+      else {
+        if (shighlighter.getTag() !== 'pre') {
+          element = element.getChild(0);
+        }
+        this.insertMode = false;
+      }
+      // get the element to fill the inputs
+      this.element = element;
+
+      // focus on the editor
+      aceEditor.focus();
+
+      // we empty the editor
+      aceEditor.setValue('');
+
+      // we fill the inputs
+      if (!this.insertMode) {
+        this.setupContent(this.element);
+      }
+    },
+    // This method is invoked once a user clicks the OK button, confirming the dialog.
+    onOk: function() {
+      var pre, element;
+      pre = element = this.element;
+
+      if (this.insertMode) {
+        if (shighlighter.getTag() !== 'pre') {
+          element = this.element.getChild(0);
+        }
+      }
+      else {
+        pre = element.getAscendant('pre', true);
+      }
+
+      this.commitContent(element);
+
+      // set the full class to the code tag
+      shighlighter.setCls(pre.getAttribute('data-pbcklang') + ' ' + editor.settings.cls);
+
+      element.setAttribute('class', shighlighter.getCls());
+
+      // we add a new code tag into ckeditor editor
+      if (this.insertMode) {
+        editor.insertElement(pre);
+      }
+    }
+  };
+});
+
+/*
+ * Resize the ACE Editor
+ */
+CKEDITOR.dialog.on('resize', function(evt) {
+  var AceEditor = evt.editor.aceEditor;
+  if (AceEditor !== undefined) {
+    AceEditor.resize();
+  }
+});
+
diff --git a/plugins/ckeditor4/pbckcode/dialogs/style.css b/plugins/ckeditor4/pbckcode/dialogs/style.css
new file mode 100755
index 0000000..8b233e6
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/dialogs/style.css
@@ -0,0 +1,38 @@
+/*label styling */
+.cke_pbckcode_form .cke_dialog_ui_labeled_content {
+  display: inline-block;
+  vertical-align: middle;
+  margin-left: 6px;
+}
+
+/*select styling */
+.cke_pbckcode_form .cke_dialog_ui_input_select select {
+  background-color: white;
+  border: 1px solid #ccc;
+  border-radius: 4px;
+  color: #555;
+  display: inline-block;
+  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
+  font-size: 12px;
+  height: auto;
+  margin-bottom: 0;
+  padding: 0;
+  vertical-align: middle;
+  width: 110px;
+}
+
+/* ace reset needed due to ckeditor style */
+.cke_pbckcode_ace.ace_editor * {
+  font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', 'Droid Sans Mono', 'Consolas', monospace;
+  font-size: 12px;
+}
+
+.cke_pbckcode_ace .ace_invisible {
+  opacity: 0;
+  visibility: hidden;
+}
+
+/*good font color on dark theme*/
+.cke_pbckcode_ace.ace_dark * {
+  color: inherit;
+}
diff --git a/plugins/ckeditor4/pbckcode/icons/.DS_Store b/plugins/ckeditor4/pbckcode/icons/.DS_Store
new file mode 100644
index 0000000000000000000000000000000000000000..c73941b5416fa3956c1fec44d8408844861fea64
GIT binary patch
literal 6148
zcmeHK%}*0S6rX`2EvPIXRT?~O>_r0y2sG%yuoQ?AL#UKM8^F5T9oh-YPP4nE0%_8-
zH~#=HexLN<(W_Da1rNqQL9cr9%}1qJO*|PR`;wX8+c)pM$^0fWvkxJJ(^Y!{Aq^oE
zg~l<`1Klr#kMq_h9m>)Ph(!)+)%=R(FsscsG=vO<4E%cx@Uz>6%7`KxRZ#2s{bp4h
z>IdWFA8<!!r0Z07G}a?T>mS(4mRT(um_gM~o8E@_qBgOVo-u=RQ(tAw`JtQE8YQ)Y
zHZ;fFz@#qmT0%G1scW-ZnpIuf-^|K<>(ma)1udTO$R31dOqZ-tpIX$R!G26gK}#GS
zPEM!B^vSEK`j~z=F)?*zOixWu*6Z4fXmsRqYIZ4Kso#6}=<$=M&z`?|E4Kl|oh4*Y
zVH4hg(!vQX?x{NsziM*wNz;y4={<esY#*>P*gw=CkH^oQj}IpjBL!{HGK)JUkFRHr
zIm}BtRkBg?sGY5tMe3Gv0l6Dw=>aKd13$U05c~F#X?4E>K0`+ak?y)jh%53fZ*Th~
z$Q86czvwZ?$uOS=l)3qq(fp<ld$t&m-9>ks!Hk^F<qCK6*NEo>w#Dc2rstV%iKO?p
z9MdAsvYTc>z;?MO&sJov+L#;#ov$T1^F{KQG!_~{OB$D?MMFucz<Z+MRoC1lu~^c`
zC}R|jqFJ<r*3b?*K=;uD^b);B@6ku}8GXgwIDs$XQ9OmO;Te1bFXEdxgKyy#8Qsy`
z%nQvaB;pOgmd)JDdalFV5?GrN#{*8#mm(nAdxF*+E;VEzWZ=&j;P-<LjiaHkAyHf%
z(1{WNFal;Fpz~US$LI<Tg$;=?0)k~IpbW*T#K1Bf?7H$Z6gDKvaD-Lyfz`}dRVY}@
z4*7NAj<6vy>_Y}Z297hp|NTKU{{AogzWx_ZVHYwGGVp&gfFtwS`82Fey{&Dl<ZrDG
u?G7|9+^-=~gg~dBW1;Y;co>=x7}L1|Xeew*1Pe&`BOqu9yO4pu%D{KCxZx)N

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/pbckcode/icons/hidpi/pbckcode.png b/plugins/ckeditor4/pbckcode/icons/hidpi/pbckcode.png
new file mode 100644
index 0000000000000000000000000000000000000000..3f85c846d80bcb81afe0969cb758c1085f4f41a6
GIT binary patch
literal 2269
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

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/pbckcode/icons/pbckcode.png b/plugins/ckeditor4/pbckcode/icons/pbckcode.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef10ae1fc144a9994e03d584a35ba613ef3f5462
GIT binary patch
literal 1632
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|I14-?iy0WW
zg+Z8+Vb&Z81_l<D%#etZ2wxwo<osN{#FYG`RK1Ga0-$OJ2Ac{iATu|$BvGLvHz%*y
zs=`(YtilS&1_|pcDS(xfWZNo5_y#CA=NF|anChA687SFtDJUq|6s4qD1-ZCEwF7y!
zN*N_31y=g{<>lpi<;HsXMd|v6mX?<K21fcuM!G;1y2X`wC5aWfdBw^QLty5(q!uR^
zWfqiV=I1GZ%uP(nFD<cEQUX~72M~9bWTqi($}5I?3+O?8kc_^eo`F6#ZK)NRIJALe
zaB53QhWo0Zv?vGcr<7#<)ST4Z)Vz{npgu#a)&av7t`WtN6^R89%fNvM@tY0E<yJwd
z#rZj<pdbj%%Pg@ovH^PtT^JD}5M9psxdlb3#l=8vcBW7*$YSW~BM{cunZxWr7DU(J
zUz7>-X(Gs7c7{+3kj2o|M`E)8SrADBDCn&MGAmMZB3v?o0Sfkop_z?7Rta>C&iOg{
zMZpD$$*CZRfwdqBp{oX46N$?jBnc#qDalsFrAb+-$t6g!1&lLr+ILD!*GCez(Z{OV
z2AC48eDhN>(<)sOOH%EO3=B<m4GeV+jY14ftqcsUEKO|m(bOQh03_pFl$uzQUlfv`
zpJNC1MJ|Y|V611X2lO|(3aDlqeNa9^%2$v~3l;_DT01VFPFM+G$JJKyBp6trT=jHu
z46zWr8swcV;wZ50mFKmbIllgB?5v&EwljCWJ?Z*Ep&~GX{~xQX>qLP7{wgk(nnsDH
zXUo*}<^Hh8HG8x)Fdpn~w<!}86uXvpu=!otbW?8L#H+jcc&^5Nt&QI+^<e-1Ci~I}
z+NFE-o}S!in18xr-m>kBG_o?2&5nPxcsC<F%aOs3ZP7w*m+V89iJaRc)EgcgD=UA0
zv+mqKE(7n&s*O8NIfyO$&G%p`>xG&!jtVKkb0;M&FWf&Pt#2fhVK#f}tuJ2|Gc>EJ
z{Cd|QR&F)dbnVxIFVdfP$(=mErrM38uxy*!VP*H{*Q)o<<Nah~Z}P`5;_(^oIX{I3
z;_khCxA%+Wo~M;LS0CTxk2$L;vM86`{`sSoDasv7W1h_u_g0u#yW#Fzo9{~sZ(skF
zEaNKrz-!0SWWODW0sfPGU%zn_vpm@Nc;lR(pRUgM{`kqKbIkjWJky)J`rJ+R$yZla
z%c*y@?FwGe(`6z(CHpgD{>}2;J)&M0Yn*jA*Kcv$&-zMw@44O2I-R8hx1_EWlUosH
ze#l^rjNhboCRfiQmx{^hTOPI6SF^h+Tl;(XpA^(TyzPW9*NlSq6(?SBtbbcp9$)b(
uUU&bI?wEI?{3kZQ$+~w!@5k@`sr8IX=a(tlII$iF75kp9elF{r5}E*GDLf?r

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/pbckcode/lang/en.js b/plugins/ckeditor4/pbckcode/lang/en.js
new file mode 100755
index 0000000..bb85d8d
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/lang/en.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang("pbckcode", "en",
+  {
+    title: 'PBCKCODE',
+    addCode: 'Add code',
+    editCode: 'Edit code',
+    editor: 'Editor',
+    settings: 'Settings',
+    mode: 'Mode',
+    tabSize: 'Tab size',
+    theme: 'Theme',
+    softTab: 'Enable soft tabs',
+    emmet: 'Enable Emmet'
+  });
diff --git a/plugins/ckeditor4/pbckcode/lang/fr.js b/plugins/ckeditor4/pbckcode/lang/fr.js
new file mode 100755
index 0000000..029cbf2
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/lang/fr.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang("pbckcode", "fr",
+  {
+    title: 'PBCKCODE',
+    addCode: 'Ajouter du code',
+    editCode: 'Modifier ce code',
+    editor: 'Editeur',
+    settings: 'Réglages',
+    mode: 'Langage',
+    tabSize: 'Indentation',
+    theme: 'Theme',
+    softTab: 'Enable soft tabs',
+    emmet: 'Activer Emmet'
+  });
diff --git a/plugins/ckeditor4/pbckcode/lang/ru.js b/plugins/ckeditor4/pbckcode/lang/ru.js
new file mode 100644
index 0000000..edb1cc0
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/lang/ru.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang("pbckcode", "ru",
+  {
+    title: 'PBCKCODE',
+    addCode: 'Добавить код',
+    editCode: 'Редактировать код',
+    editor: 'Редактор',
+    settings: 'Настройки',
+    mode: 'Режим',
+    tabSize: 'Ширина табуляции',
+    theme: 'Тема',
+    softTab: 'Включить мягкую табуляцию',
+    emmet: 'Включить Emmet'
+  });
diff --git a/plugins/ckeditor4/pbckcode/lang/tr.js b/plugins/ckeditor4/pbckcode/lang/tr.js
new file mode 100644
index 0000000..698bb68
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/lang/tr.js
@@ -0,0 +1,13 @@
+CKEDITOR.plugins.setLang("pbckcode", "tr",
+  {
+    title: 'PBCKCODE',
+    addCode: 'Kod ekle',
+    editCode: 'Kodu düzenle',
+    editor: 'Editör',
+    settings: 'Ayarlar',
+    mode: 'Mod',
+    tabSize: 'Sekme boyutu',
+    theme: 'Tema',
+    softTab: 'YumuÅŸak sekmeleri aktif et',
+    emmet: 'Emmet\'i aktif et'
+  });
diff --git a/plugins/ckeditor4/pbckcode/plugin.js b/plugins/ckeditor4/pbckcode/plugin.js
new file mode 100755
index 0000000..871e41a
--- /dev/null
+++ b/plugins/ckeditor4/pbckcode/plugin.js
@@ -0,0 +1,109 @@
+// needed js files
+var js = {
+  ace: 'ace.js',
+  aceExtWhitespace: 'ext-whitespace.js',
+  pbSyntaxHighlighter: CKEDITOR.plugins.getPath('pbckcode') + 'dialogs/PBSyntaxHighlighter.js'
+};
+
+var commandName = 'pbckcode';
+
+/**
+ * Plugin definition
+ */
+CKEDITOR.plugins.add('pbckcode', {
+  icons: 'pbckcode',
+  hidpi: true,
+  lang: ['fr', 'en', 'ru'],
+  init: function(editor) {
+    // if there is no user settings
+    // create an empty object
+    if (editor.config.pbckcode === undefined) {
+      editor.config.pbckcode = {};
+    }
+
+    // default settings object
+    var DEFAULT_SETTINGS = {
+      cls: '',
+      modes: [
+        ['HTML', 'html'],
+        ['CSS', 'css'],
+        ['PHP', 'php'],
+        ['JS', 'javascript']
+      ],
+      theme: 'textmate',
+      tab_size: 4,
+      js: '//cdnjs.cloudflare.com/ajax/libs/ace/1.2.6/'
+    };
+
+    // merge user settings with default settings
+    editor.settings = CKEDITOR.tools.extend(DEFAULT_SETTINGS, editor.config.pbckcode, true);
+    editor.settings.js = normalizeJsUrl(editor.settings.js);
+
+    // load CSS for the dialog
+    editor.on('instanceReady', function() {
+      CKEDITOR.document.appendStyleSheet(this.path + 'dialogs/style.css');
+    }.bind(this));
+
+    // add the button in the toolbar
+    editor.ui.addButton('pbckcode', {
+      label: editor.lang.pbckcode.addCode,
+      command: commandName,
+      toolbar: 'pbckcode'
+    });
+
+    // link the button to the command
+    editor.addCommand(commandName, new CKEDITOR.dialogCommand('pbckcodeDialog', {
+        allowedContent: 'pre[*]{*}(*)'
+      })
+    );
+
+    // disable the button while the required js files are not loaded
+    editor.getCommand(commandName).disable();
+
+    // add the plugin dialog element to the plugin
+    CKEDITOR.dialog.add('pbckcodeDialog', this.path + 'dialogs/pbckcode.js');
+
+    // add the context menu
+    if (editor.contextMenu) {
+      editor.addMenuGroup('pbckcodeGroup');
+      editor.addMenuItem('pbckcodeItem', {
+        label: editor.lang.pbckcode.editCode,
+        icon: this.path + 'icons/pbckcode.png',
+        command: commandName,
+        group: 'pbckcodeGroup'
+      });
+
+      editor.contextMenu.addListener(function(element) {
+        if (element.getAscendant('pre', true)) {
+          return {pbckcodeItem: CKEDITOR.TRISTATE_OFF};
+        }
+      });
+    }
+
+    var scripts = [
+      getScriptUrl(editor.settings.js, js.ace),
+      js.pbSyntaxHighlighter
+    ];
+
+    // Load the required js files
+    // enable the button when loaded
+    CKEDITOR.scriptLoader.load(scripts, function() {
+      editor.getCommand(commandName).enable();
+
+      // need ace to be loaded
+      CKEDITOR.scriptLoader.load([
+        getScriptUrl(editor.settings.js, js.aceExtWhitespace)
+      ]);
+    });
+  }
+});
+
+function normalizeJsUrl(js) {
+  return js.concat('/')
+    .replace(new RegExp('([^:]\/)\/+', 'g'), '$1');
+}
+
+function getScriptUrl(prefix, scriptName) {
+  return prefix + scriptName;
+}
+
diff --git a/plugins/ckeditor4/pre/dialogs/pre.js b/plugins/ckeditor4/pre/dialogs/pre.js
new file mode 100644
index 0000000..df82277
--- /dev/null
+++ b/plugins/ckeditor4/pre/dialogs/pre.js
@@ -0,0 +1,142 @@
+/**
+ * Copyright (c) 2016, SmartCore Studio.
+ * Licensed under the terms of the MIT License.
+*/
+
+CKEDITOR.dialog.add('pre', function( editor ) {
+	return {
+		title: editor.lang.pre.dialogTitle,
+		minWidth: 300,
+		minHeight: 100,
+		contents: [
+		{
+			id: 'info',
+			label: editor.lang.pre.tab,
+			elements: [
+			{
+				id: 'title',
+				type: 'text',
+				label: editor.lang.pre.title,
+				setup: function( widget ) {
+					this.setValue( widget.data.title );
+				},
+				commit: function( widget ) {
+					widget.setData( 'title', this.getValue() );
+				}
+			},
+			{
+				type: 'hbox',
+				widths: ['50%', '50%'],
+				children: [				
+				{
+					type: 'vbox',
+					children: [
+					{
+						id: 'color',
+						type: 'select',
+						label: editor.lang.pre.color,
+						items: [
+							[ editor.lang.pre.colorDefault, '' ],
+							[ editor.lang.pre.colorGray, 'Gray' ],
+							[ editor.lang.pre.colorBlack, 'Black' ]
+						],
+						setup: function( widget ) {
+							this.setValue( widget.data.color );
+						},
+						commit: function( widget ) {
+							widget.setData( 'color', this.getValue() );
+						}
+					},
+					{
+						id: 'maxheight',
+						type: 'select',
+						label: editor.lang.pre.maxheight,
+						items: [
+							[ editor.lang.pre.maxheightDefault, '' ],
+							[ '100px', '100px' ],
+							[ '200px', '200px' ],
+							[ '300px', '300px' ]
+						],
+						setup: function( widget ) {
+							this.setValue( widget.data.maxheight );
+						},
+						commit: function( widget ) {
+							widget.setData( 'maxheight', this.getValue() );
+						}
+					},
+					{
+						id: 'cssclass',
+						type: 'text',
+						label: editor.lang.pre.cssclass,
+						setup: function( widget ) {
+							this.setValue( widget.data.cssclass );
+						},
+						commit: function( widget ) {
+							widget.setData( 'cssclass', this.getValue() );
+						}
+					}]
+				},
+				{
+					type: 'vbox',
+					styles: ['vertical-align:top'],
+					children: [
+					{
+						id: 'hidesummary',
+						type: 'checkbox',
+						label: editor.lang.pre.hidesummary,
+						setup: function( widget ) {
+							this.setValue( widget.data.hidesummary );
+						},
+						commit: function( widget ) {
+							widget.setData( 'hidesummary', this.getValue()?'true':'' );
+						}
+					},
+					{
+						id: 'collapse',
+						type: 'checkbox',
+						label: editor.lang.pre.collapse,
+						setup: function( widget ) {
+							this.setValue( widget.data.collapse );
+						},
+						commit: function( widget ) {
+							widget.setData( 'collapse', this.getValue()?'true':'' );
+						}
+					},
+					{
+						id: 'monospace',
+						type: 'checkbox',
+						label: editor.lang.pre.monospace,
+						setup: function( widget ) {
+							this.setValue( widget.data.monospace );
+						},
+						commit: function( widget ) {
+							widget.setData( 'monospace', this.getValue()?'true':'' );
+						}
+					},
+					{
+						id: 'wrap',
+						type: 'checkbox',
+						label: editor.lang.pre.wrap,
+						setup: function( widget ) {
+							this.setValue( widget.data.wrap );
+						},
+						commit: function( widget ) {
+							widget.setData( 'wrap', this.getValue()?'true':'' );
+						}
+					},
+					{
+						id: 'bordered',
+						type: 'checkbox',
+						label: editor.lang.pre.bordered,
+						setup: function( widget ) {
+							this.setValue( widget.data.bordered );
+						},
+						commit: function( widget ) {
+							widget.setData( 'bordered', this.getValue()?'true':'' );
+						}
+					}]
+				}]
+			}]
+		}]
+	}
+})
diff --git a/plugins/ckeditor4/pre/icons/pre.png b/plugins/ckeditor4/pre/icons/pre.png
new file mode 100644
index 0000000000000000000000000000000000000000..ff40adf2212fb0510b9330d67e7f76e657709890
GIT binary patch
literal 1020
zcmaJ=&ui0A9M9MU8Eo^g%f!PYyHsX=w&|9v*=Uo_6_!%k!U|qYlh-zG$&1O`n$E*S
zybRQ<-n|SDJBbM5Pdq654?K$qg7Yrey>xBo!5Wgh@Atj$=kxvf4ob!AQ<Ik`DT<mZ
ztm|d6UW&hq<K&-UW-4Tv!}%JnpayQ60i?1vszXq4%_b~E)9&2<3^Nopo^Yx)Tr)Nl
z3%RTr+pv-A6EsC-RwLiEwjc&|*mOLVK6&+)29B-Lo07pBz6M*)`d$Dld&R1?w`IvT
zy}AN2kwOSuh)oc=+g_+dD&6B%h#YToH0YV&EtNhCs%Dgch5`sAHqBT<QUr@KD@d}q
zl)45)UPyC%iW6i;NGjw_@u2_E#9LrDl(N3o_eC_7Zei>z9M^8Q*>;jeL6cx*nd3!H
z6d7W{gdGo?5#xpP0|p(2R^a&9K^}-1%{tn_Dor9iOTqPrv|iXR6Db%MnLa15e4Nt2
z&@ldQ>bgVg5SQV3y#FK)s~sP5Wf-EJz#@%n%*U>LMGK&bQBXx_dr-wv3t<$tkPkF1
zuA0P3AhGFqHfo1gdnm(D3SNj!&w>SAr3nw~IJP2Yd5M?PvX+x1LCB|bYrL#$g0AON
zi}}=&G{EY}+Hs+W2Uz<Yn;nUb2g3D<XB`I4F0|JI<bqz}iZeQv#gTk{tUWrGrIA>U
z1jEJc{j1%BEiyx~I2>N0496dOWaa}h+%H=TyX0cbls2k)UDvza?&0BKr_&+Ao#naj
z<mdt}7b`^VQomnJ$Cq%Wpl7Smm-`QIOjG>C#Ot5?-<~}`$k+euPJNo3{hG@h|2Vn3
vk!f0Q#uAS|B=;Ln-@m)HaP;xmn|(x$Q@`*S^W?#mWx_-i@<sh9ck|vUO*uop

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/pre/lang/en.js b/plugins/ckeditor4/pre/lang/en.js
new file mode 100644
index 0000000..4b9efc2
--- /dev/null
+++ b/plugins/ckeditor4/pre/lang/en.js
@@ -0,0 +1,19 @@
+CKEDITOR.plugins.setLang( 'pre', 'en', {
+  title : 'Title',
+  content : 'Enter text or code snippet...',
+	dialogTitle: 'Collapsible snippet settings',
+	button: 'Insert collapsible snippet',
+  color : 'Background',
+  colorDefault : 'Default',
+  colorGray : 'Gray',
+  colorBlack : 'Black',
+  maxheight : 'Max height',
+  maxheightDefault : 'Unconstrained',
+	hidesummary: 'Hide title',
+	collapse: 'Collapsed',
+	monospace: 'Monospace font',
+	wrap: 'Autowrap long lines',
+	bordered: 'Bordered',
+	cssclass: 'CSS classes'
+});
+
diff --git a/plugins/ckeditor4/pre/lang/ru.js b/plugins/ckeditor4/pre/lang/ru.js
new file mode 100644
index 0000000..8a2b4c3
--- /dev/null
+++ b/plugins/ckeditor4/pre/lang/ru.js
@@ -0,0 +1,18 @@
+CKEDITOR.plugins.setLang( 'pre', 'ru', {
+  title : 'Заголовок',
+  content : 'Введите текст или фрагмент кода...',
+	dialogTitle: 'Пареметры фрагмента кода',
+	button: 'Вставить фрагмент кода',
+  color : 'Цвет фона',
+  colorDefault : 'По умолчанию',
+  colorGray : 'Серый',
+  colorBlack : 'Черный',
+  maxheight : 'Макс. высота',
+  maxheightDefault : 'Не ограничена',
+	hidesummary: 'Скрыть заголовок',
+	collapse: 'Свернуть',
+	monospace: 'Моноширинный шрифт',
+	wrap: 'Автоперенос строк',
+	bordered: 'Обводка',
+	cssclass: 'CSS-классы'
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/pre/plugin.js b/plugins/ckeditor4/pre/plugin.js
new file mode 100644
index 0000000..18ec00e
--- /dev/null
+++ b/plugins/ckeditor4/pre/plugin.js
@@ -0,0 +1,202 @@
+/**
+ * Copyright (c) 2016, SmartCore Studio.
+ * Licensed under the terms of the MIT License.
+*/
+
+CKEDITOR.plugins.add( 'pre', {
+	requires: 'widget,dialog',
+	lang : 'en,ru',
+	icons: 'pre',
+	init: function( editor ) {
+		var preDefaultTitle = editor.config.preDefaultTitle;
+		var preDefaultClass = editor.config.preDefaultClass || '';
+		var preDefaults;
+		if (editor.config.preDefaultMonospace!=false) preDefaults+= ' data-monospace="true"';
+		if (editor.config.preDefaultHidesummary==true) preDefaults+= ' data-hidesummary="true"';
+		if (editor.config.preDefaultCollapse==true) preDefaults+= ' data-collapse="true"';
+		if (editor.config.preDefaultWrap==true) preDefaults+= ' data-wrap="true"';
+		if (editor.config.preDefaultBordered==true) preDefaults+= 'data-bordered="true"';
+		CKEDITOR.dialog.add( 'pre', this.path + 'dialogs/pre.js' );
+		editor.ui.addButton('pre', {
+			label: editor.lang.pre.button,
+			command: 'pre',
+			toolbar: 'insert'
+		});
+		editor.widgets.add( 'pre', {
+			allowedContent:
+				'details(*)[open,data-*]{*};' +
+				'summary(!pre-title){*}; pre(*){*}',
+			requiredContent: 'details',
+			editables: {
+				content: {
+					selector: 'div.pre-content',
+					allowedContent: 'br strong em a[href,target](*){*}'
+				}
+			},
+			template:
+				'<details class="pre" '+preDefaults+' data-cssclass="'+ preDefaultClass + '" open>' +
+					'<summary class="pre-title" style="font-weight: bold">' + preDefaultTitle + '</summary>' +
+					'<div class="pre-content" style="padding: 4px 12px; margin-top: 2px; font-family: monospace; white-space: pre; overflow: auto;">' + editor.lang.pre.content + '</div>' +
+				'</details>',				
+			dialog: 'pre',
+			upcast: function( element ) {
+				return element.name == 'details' && element.hasClass( 'pre' );
+			},
+			init: function() {
+				var title = this.element.findOne('.pre-title').getText();
+				if ( title )
+					this.setData( 'title', title );
+				
+				var cssclass = this.element.getAttribute("data-cssclass");
+				if ( cssclass )
+					this.setData( 'cssclass', cssclass );
+				
+				var color = this.element.getAttribute("data-color");
+				if ( color )
+					this.setData( 'color', color );
+				else
+					this.setData( 'color', '' );
+
+				var maxheight = this.element.getAttribute("data-maxheight");
+				if ( maxheight )
+					this.setData( 'maxheight', maxheight );
+				else
+					this.setData( 'maxheight', '' );
+
+				var hidesummary = this.element.getAttribute("data-hidesummary");
+				if ( hidesummary )
+					this.setData( 'hidesummary', hidesummary );
+
+				var collapse = this.element.getAttribute("data-collapse");
+				if ( collapse )
+					this.setData( 'collapse', collapse );
+
+				var monospace = this.element.getAttribute("data-monospace");
+				if ( monospace )
+					this.setData( 'monospace', monospace );
+
+				var bordered = this.element.getAttribute("data-bordered");
+				if ( bordered )
+					this.setData( 'bordered', bordered );
+
+				var wrap = this.element.getAttribute("data-wrap");
+				if ( wrap )
+					this.setData( 'wrap', wrap );
+			},
+
+			data: function() {
+				if (typeof this.data.color !== 'undefined') 
+				{
+					this.element.setAttribute("data-color", this.data.color);
+					if ( this.data.color == '' )
+					{
+						this.element.findOne('.pre-content').removeStyle( 'color' );
+						this.element.findOne('.pre-content').removeStyle( 'background-color' );
+					}
+					else
+					{
+						if (this.data.color=='Gray')
+						{
+							this.element.findOne('.pre-content').setStyle( 'background-color', '#eee' );
+							this.element.findOne('.pre-content').setStyle( 'color', '#000' );
+						}
+						if (this.data.color=='Black')
+						{
+							this.element.findOne('.pre-content').setStyle( 'background-color', '#000' );
+							this.element.findOne('.pre-content').setStyle( 'color', '#FFF' );
+						}
+					}
+				}
+				
+				if (typeof this.data.maxheight !== 'undefined') 
+				{
+					this.element.setAttribute("data-maxheight", this.data.maxheight);
+					if ( this.data.maxheight == '' )
+					{
+						this.element.findOne('.pre-content').removeStyle( 'max-height' );
+					}
+					else
+					{
+						this.element.findOne('.pre-content').setStyle( 'max-height', this.data.maxheight );
+					}
+				}
+				
+				if (typeof this.data.monospace !== 'undefined') 
+				{
+					this.element.setAttribute("data-monospace", this.data.monospace);
+					if ( this.data.monospace == '' )
+					{
+						this.element.findOne('.pre-content').removeStyle( 'font-family' );
+					}
+					else
+					{
+						this.element.findOne('.pre-content').setStyle( 'font-family', 'monospace' );
+					}
+				}
+				
+				if (typeof this.data.wrap !== 'undefined') 
+				{
+					this.element.setAttribute("data-wrap", this.data.wrap);
+					if ( this.data.wrap == '' )
+					{
+						this.element.findOne('.pre-content').setStyle( 'white-space', 'pre' );
+					}
+					else
+					{
+						this.element.findOne('.pre-content').removeStyle( 'white-space' );
+					}
+				}
+				
+				if (typeof this.data.bordered !== 'undefined') 
+				{
+					this.element.setAttribute("data-bordered", this.data.bordered);
+					if ( this.data.bordered == '' )
+					{
+						this.element.removeStyle( 'border');
+						this.element.findOne('summary').removeStyle( 'padding' );
+					}
+					else
+					{
+						this.element.setStyle( 'border', '1px solid #ddd' );
+						this.element.findOne('summary').setStyle( 'padding',  '2px 12px');
+					}
+				}
+				
+				if (typeof this.data.hidesummary !== 'undefined') 
+				{
+					this.element.setAttribute("data-hidesummary", this.data.hidesummary);
+					if ( this.data.hidesummary == '' )
+					{
+						this.element.findOne('summary').removeStyle( 'display' );
+					}
+					else
+					{
+						this.element.findOne('summary').setStyle( 'display', 'none' );
+					}
+				}
+				
+				if (typeof this.data.title !== 'undefined') 
+				{
+					this.element.findOne('.pre-title').setText(this.data.title);
+				}
+				
+				if (typeof this.data.cssclass !== '') 
+				{
+					if ( this.data.cssclass )
+						this.element.setAttributes({'class': 'pre '+this.data.cssclass});
+					else
+						this.element.setAttributes({'class': 'pre'});
+				}
+				
+				if (typeof this.data.collapse !== 'undefined') 
+				{
+					this.element.setAttribute("data-collapse", this.data.collapse);
+					if ( this.data.collapse )
+						this.element.removeAttribute( 'open' );
+					else
+						this.element.setAttribute( 'open' );
+				}
+			}
+		});
+	}
+});
diff --git a/plugins/ckeditor4/prism/LICENSE.txt b/plugins/ckeditor4/prism/LICENSE.txt
new file mode 100644
index 0000000..4362b49
--- /dev/null
+++ b/plugins/ckeditor4/prism/LICENSE.txt
@@ -0,0 +1,502 @@
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
+ 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+[This is the first released version of the Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+Licenses are intended to guarantee your freedom to share and change
+free software--to make sure the software is free for all its users.
+
+  This license, the Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations below.
+
+  When we speak of free software, we are referring to freedom of use,
+not price.  Our General Public Licenses are designed to make sure that
+you have the freedom to distribute copies of free software (and charge
+for this service if you wish); that you receive source code or can get
+it if you want it; that you can change the software and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+rights.  These restrictions translate to certain responsibilities for
+you if you distribute copies of the library or if you modify it.
+
+  For example, if you distribute copies of the library, whether gratis
+or for a fee, you must give the recipients all the rights that we gave
+you.  You must make sure that they, too, receive or can get the source
+code.  If you link other code with the library, you must provide
+complete object files to the recipients, so that they can relink them
+with the library after making changes to the library and recompiling
+it.  And you must show them these terms so they know their rights.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.  Pay close attention to the difference between a
+"work based on the library" and a "work that uses the library".  The
+former contains code derived from the library, whereas the latter must
+be combined with the library in order to run.
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser General Public License (also called "this License").
+Each licensee is addressed as "you".
+
+  A "library" means a collection of software functions and/or data
+prepared so as to be conveniently linked with application programs
+(which use some of those functions and data) to form executables.
+
+  The "Library", below, refers to any such software library or work
+which has been distributed under these terms.  A "work based on the
+Library" means either the Library or any derivative work under
+copyright law: that is to say, a work containing the Library or a
+portion of it, either verbatim or with modifications and/or translated
+straightforwardly into another language.  (Hereinafter, translation is
+included without limitation in the term "modification".)
+
+  "Source code" for a work means the preferred form of the work for
+making modifications to it.  For a library, complete source code means
+all the source code for all modules it contains, plus any associated
+interface definition files, plus the scripts used to control compilation
+and installation of the library.
+
+  Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running a program using the Library is not restricted, and output from
+such a program is covered only if its contents constitute a work based
+on the Library (independent of the use of the Library in a tool for
+writing it).  Whether that is true depends on what the Library does
+and what the program that uses the Library does.
+
+  1. You may copy and distribute verbatim copies of the Library's
+complete source code as you receive it, in any medium, provided that
+you conspicuously and appropriately publish on each copy an
+appropriate copyright notice and disclaimer of warranty; keep intact
+all the notices that refer to this License and to the absence of any
+warranty; and distribute a copy of this License along with the
+Library.
+
+  You may charge a fee for the physical act of transferring a copy,
+and you may at your option offer warranty protection in exchange for a
+fee.
+
+  2. You may modify your copy or copies of the Library or any portion
+of it, thus forming a work based on the Library, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) The modified work must itself be a software library.
+
+    b) You must cause the files modified to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    c) You must cause the whole of the work to be licensed at no
+    charge to all third parties under the terms of this License.
+
+    d) If a facility in the modified Library refers to a function or a
+    table of data to be supplied by an application program that uses
+    the facility, other than as an argument passed when the facility
+    is invoked, then you must make a good faith effort to ensure that,
+    in the event an application does not supply such function or
+    table, the facility still operates, and performs whatever part of
+    its purpose remains meaningful.
+
+    (For example, a function in a library to compute square roots has
+    a purpose that is entirely well-defined independent of the
+    application.  Therefore, Subsection 2d requires that any
+    application-supplied function or table used by this function must
+    be optional: if the application does not supply it, the square
+    root function must still compute square roots.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Library,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Library, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote
+it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Library.
+
+In addition, mere aggregation of another work not based on the Library
+with the Library (or with a work based on the Library) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may opt to apply the terms of the ordinary GNU General Public
+License instead of this License to a given copy of the Library.  To do
+this, you must alter all the notices that refer to this License, so
+that they refer to the ordinary GNU General Public License, version 2,
+instead of to this License.  (If a newer version than version 2 of the
+ordinary GNU General Public License has appeared, then you can specify
+that version instead if you wish.)  Do not make any other change in
+these notices.
+
+  Once this change is made in a given copy, it is irreversible for
+that copy, so the ordinary GNU General Public License applies to all
+subsequent copies and derivative works made from that copy.
+
+  This option is useful when you wish to copy part of the code of
+the Library into a program that is not a library.
+
+  4. You may copy and distribute the Library (or a portion or
+derivative of it, under Section 2) in object code or executable form
+under the terms of Sections 1 and 2 above provided that you accompany
+it with the complete corresponding machine-readable source code, which
+must be distributed under the terms of Sections 1 and 2 above on a
+medium customarily used for software interchange.
+
+  If distribution of object code is made by offering access to copy
+from a designated place, then offering equivalent access to copy the
+source code from the same place satisfies the requirement to
+distribute the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  5. A program that contains no derivative of any portion of the
+Library, but is designed to work with the Library by being compiled or
+linked with it, is called a "work that uses the Library".  Such a
+work, in isolation, is not a derivative work of the Library, and
+therefore falls outside the scope of this License.
+
+  However, linking a "work that uses the Library" with the Library
+creates an executable that is a derivative of the Library (because it
+contains portions of the Library), rather than a "work that uses the
+library".  The executable is therefore covered by this License.
+Section 6 states terms for distribution of such executables.
+
+  When a "work that uses the Library" uses material from a header file
+that is part of the Library, the object code for the work may be a
+derivative work of the Library even though the source code is not.
+Whether this is true is especially significant if the work can be
+linked without the Library, or if the work is itself a library.  The
+threshold for this to be true is not precisely defined by law.
+
+  If such an object file uses only numerical parameters, data
+structure layouts and accessors, and small macros and small inline
+functions (ten lines or less in length), then the use of the object
+file is unrestricted, regardless of whether it is legally a derivative
+work.  (Executables containing this object code plus portions of the
+Library will still fall under Section 6.)
+
+  Otherwise, if the work is a derivative of the Library, you may
+distribute the object code for the work under the terms of Section 6.
+Any executables containing that work also fall under Section 6,
+whether or not they are linked directly with the Library itself.
+
+  6. As an exception to the Sections above, you may also combine or
+link a "work that uses the Library" with the Library to produce a
+work containing portions of the Library, and distribute that work
+under terms of your choice, provided that the terms permit
+modification of the work for the customer's own use and reverse
+engineering for debugging such modifications.
+
+  You must give prominent notice with each copy of the work that the
+Library is used in it and that the Library and its use are covered by
+this License.  You must supply a copy of this License.  If the work
+during execution displays copyright notices, you must include the
+copyright notice for the Library among them, as well as a reference
+directing the user to the copy of this License.  Also, you must do one
+of these things:
+
+    a) Accompany the work with the complete corresponding
+    machine-readable source code for the Library including whatever
+    changes were used in the work (which must be distributed under
+    Sections 1 and 2 above); and, if the work is an executable linked
+    with the Library, with the complete machine-readable "work that
+    uses the Library", as object code and/or source code, so that the
+    user can modify the Library and then relink to produce a modified
+    executable containing the modified Library.  (It is understood
+    that the user who changes the contents of definitions files in the
+    Library will not necessarily be able to recompile the application
+    to use the modified definitions.)
+
+    b) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) Accompany the work with a written offer, valid for at
+    least three years, to give the same user the materials
+    specified in Subsection 6a, above, for a charge no more
+    than the cost of performing this distribution.
+
+    d) If distribution of the work is made by offering access to copy
+    from a designated place, offer equivalent access to copy the above
+    specified materials from the same place.
+
+    e) Verify that the user has already received a copy of these
+    materials or that you have already sent this user a copy.
+
+  For an executable, the required form of the "work that uses the
+Library" must include any data and utility programs needed for
+reproducing the executable from it.  However, as a special exception,
+the materials to be distributed need not include anything that is
+normally distributed (in either source or binary form) with the major
+components (compiler, kernel, and so on) of the operating system on
+which the executable runs, unless that component itself accompanies
+the executable.
+
+  It may happen that this requirement contradicts the license
+restrictions of other proprietary libraries that do not normally
+accompany the operating system.  Such a contradiction means you cannot
+use both them and the Library together in an executable that you
+distribute.
+
+  7. You may place library facilities that are a work based on the
+Library side-by-side in a single library together with other library
+facilities not covered by this License, and distribute such a combined
+library, provided that the separate distribution of the work based on
+the Library and of the other library facilities is otherwise
+permitted, and provided that you do these two things:
+
+    a) Accompany the combined library with a copy of the same work
+    based on the Library, uncombined with any other library
+    facilities.  This must be distributed under the terms of the
+    Sections above.
+
+    b) Give prominent notice with the combined library of the fact
+    that part of it is a work based on the Library, and explaining
+    where to find the accompanying uncombined form of the same work.
+
+  8. You may not copy, modify, sublicense, link with, or distribute
+the Library except as expressly provided under this License.  Any
+attempt otherwise to copy, modify, sublicense, link with, or
+distribute the Library is void, and will automatically terminate your
+rights under this License.  However, parties who have received copies,
+or rights, from you under this License will not have their licenses
+terminated so long as such parties remain in full compliance.
+
+  9. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Library or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Library (or any work based on the
+Library), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Library or works based on it.
+
+  10. Each time you redistribute the Library (or any work based on the
+Library), the recipient automatically receives a license from the
+original licensor to copy, distribute, link with or modify the Library
+subject to these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties with
+this License.
+
+  11. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Library at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Library by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Library.
+
+If any portion of this section is held invalid or unenforceable under any
+particular circumstance, the balance of the section is intended to apply,
+and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  12. If the distribution and/or use of the Library is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Library under this License may add
+an explicit geographical distribution limitation excluding those countries,
+so that distribution is permitted only in or among countries not thus
+excluded.  In such case, this License incorporates the limitation as if
+written in the body of this License.
+
+  13. The Free Software Foundation may publish revised and/or new
+versions of the Lesser General Public License from time to time.
+Such new versions will be similar in spirit to the present version,
+but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Library
+specifies a version number of this License which applies to it and
+"any later version", you have the option of following the terms and
+conditions either of that version or of any later version published by
+the Free Software Foundation.  If the Library does not specify a
+license version number, you may choose any version ever published by
+the Free Software Foundation.
+
+  14. If you wish to incorporate parts of the Library into other free
+programs whose distribution conditions are incompatible with these,
+write to the author to ask for permission.  For software which is
+copyrighted by the Free Software Foundation, write to the Free
+Software Foundation; we sometimes make exceptions for this.  Our
+decision will be guided by the two goals of preserving the free status
+of all derivatives of our free software and of promoting the sharing
+and reuse of software generally.
+
+                            NO WARRANTY
+
+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Libraries
+
+  If you develop a new library, and you want it to be of the greatest
+possible use to the public, we recommend making it free software that
+everyone can redistribute and change.  You can do so by permitting
+redistribution under these terms (or, alternatively, under the terms of the
+ordinary General Public License).
+
+  To apply these terms, attach the following notices to the library.  It is
+safest to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least the
+"copyright" line and a pointer to where the full notice is found.
+
+    <one line to give the library's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    This library is free software; you can redistribute it and/or
+    modify it under the terms of the GNU Lesser General Public
+    License as published by the Free Software Foundation; either
+    version 2.1 of the License, or (at your option) any later version.
+
+    This library is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser General Public
+    License along with this library; if not, write to the Free Software
+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
+
+Also add information on how to contact you by electronic and paper mail.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the library, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
+
+  <signature of Ty Coon>, 1 April 1990
+  Ty Coon, President of Vice
+
+That's all there is to it!
diff --git a/plugins/ckeditor4/prism/README.md b/plugins/ckeditor4/prism/README.md
new file mode 100644
index 0000000..cf27d9c
--- /dev/null
+++ b/plugins/ckeditor4/prism/README.md
@@ -0,0 +1,38 @@
+ckeditor-prism
+================
+<strong>OVERVIEW</strong>:<br>
+<a href="http://ckeditor.com/addon/prism">Prism Highlighter</a> is a plugin for <a href="http://ckeditor.com">CKEditor</a> for inserting beautiful formatted text, markdown, or code snippets in your blog or website. Prism is the chosen renderer/highlighter/colorizer since it's pretty, lightweight, and extendable. I also use this plugin in my [personal website](http://www.ranelpadon.com/content/practical-regex-part-12-common-operators).
+
+This plugin utilizes the following libraries: <br>
+<ul>
+  <li><a href="http://ckeditor.com/addon/codesnippet">CKEditor Code Snippet Plugin</a></li>
+    <li><a href="http://docs.ckeditor.com/#!/api/CKEDITOR.plugins.codesnippet.highlighter">CKEditor Code Snippet API</a></li>
+  <li><a href="http://prismjs.com/">Prism Syntax Highlighter with Dark Theme</a></li>
+  <li><a href="http://prismjs.com/plugins/line-numbers/">Prism Line Numbers Add-on</a></li>
+</ul>
+
+By default, Prism has no line numbering mechanism, so the **Line Number** add-on has been added. Also, in order for the line numbers to work smoothly in CKEditor and when rendering the actual page, I did some minor patching in **prism.js** and **prism.css**.
+
+<strong>LIVE DEMO PAGE</strong>:<br>
+Demo page could be found <a href="http://www.ranelpadon.com/sites/all/libraries/ckeditor/plugins/prism/demo/index.html">here</a>.
+
+<strong>INSTALLATION</strong>:<br>
+Kindly refer to <a href="https://github.com/ranelpadon/ckeditor-prism/blob/master/Installation%20Guide.txt">Installation Guide</a>.
+
+<strong>HOW TO USE</strong>:<br>
+Kindly refer to <a href="https://github.com/ranelpadon/ckeditor-prism/blob/master/Creating%20and%20Editing%20Code%20Snippets.txt">How to Create and Edit Prism Snippets</a>.
+
+<strong>LICENSE and CREDITS</strong>:<br>
+License: <a href="https://www.gnu.org/licenses/lgpl-2.1.txt">LGPLv2.1</a> or later should apply. Note that LGPLv2.1+ is also compatible with <a href="https://www.drupal.org/node/1475972#gplv2-compatible-licenses">GPLv2</a>.<br>
+Copyright 2015 by [Engr. Ranel O. Padon](http://www.ranelpadon.com)<br>
+
+Thanks to CKEditor, Prism, and other great open-source softwares and their unsung developers.<br>
+
+=======================================================
+
+
+
+
+
+
+
diff --git a/plugins/ckeditor4/prism/lib/prism/prism_patched.min.css b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.css
new file mode 100644
index 0000000..a8a001f
--- /dev/null
+++ b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.css
@@ -0,0 +1 @@
+code[class*="language-"],pre{color:white;text-shadow:0 -.1em .2em black;font-family:Monaco,Consolas,'Andale Mono','Ubuntu Mono',monospace;direction:ltr;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}@media print{code[class*="language-"],pre{text-shadow:none}}pre,:not(pre)>code[class*="language-"]{background:hsl(30,20%,25%)}pre{padding:1em;margin:.5em 0;overflow:auto;border:.3em solid hsl(30,20%,40%);border-radius:.5em;box-shadow:1px 1px .5em black inset}:not(pre)>code[class*="language-"]{padding:.15em .2em .05em;border-radius:.3em;border:.13em solid hsl(30,20%,40%);box-shadow:1px 1px .3em -.1em black inset;white-space:normal}.token.comment,.token.prolog,.token.doctype,.token.cdata{color:hsl(30,20%,50%)}.token.punctuation{opacity:.7}.namespace{opacity:.7}.token.property,.token.tag,.token.boolean,.token.number,.token.constant,.token.symbol{color:hsl(350,40%,70%)}.token.selector,.token.attr-name,.token.string,.token.char,.token.builtin,.token.inserted{color:hsl(75,70%,60%)}.token.operator,.token.entity,.token.url,.language-css .token.string,.style .token.string,.token.variable{color:hsl(40,90%,60%)}.token.atrule,.token.attr-value,.token.keyword{color:hsl(350,40%,70%)}.token.regex,.token.important{color:#e90}.token.important,.token.bold{font-weight:bold}.token.italic{font-style:italic}.token.entity{cursor:help}.token.deleted{color:red}pre{position:relative;padding-left:3.8em;counter-reset:linenumber}pre>code{position:relative}pre>code .line-numbers-rows{position:absolute;pointer-events:none;top:0;font-size:100%;left:-3.8em;width:3em;letter-spacing:-1px;border-right:1px solid #999;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.line-numbers-rows>span{pointer-events:none;display:block;counter-increment:linenumber}.line-numbers-rows>span:before{content:counter(linenumber);color:#999;display:block;padding-right:.8em;text-align:right}
diff --git a/plugins/ckeditor4/prism/lib/prism/prism_patched.min.js b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.js
new file mode 100644
index 0000000..c81aa61
--- /dev/null
+++ b/plugins/ckeditor4/prism/lib/prism/prism_patched.min.js
@@ -0,0 +1,4 @@
+var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(){var e=/\blang(?:uage)?-(?!\*)(\w+)\b/i,t=_self.Prism={util:{encode:function(e){return e instanceof i?new i(e.type,t.util.encode(e.content),e.alias):"Array"===t.util.type(e)?e.map(t.util.encode):e.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).match(/\[object (\w+)\]/)[1]},clone:function(e){var i=t.util.type(e);switch(i){case"Object":var n={};for(var a in e)e.hasOwnProperty(a)&&(n[a]=t.util.clone(e[a]));return n;case"Array":return e.map&&e.map(function(e){return t.util.clone(e)})}return e}},languages:{extend:function(e,i){var n=t.util.clone(t.languages[e]);for(var a in i)n[a]=i[a];return n},insertBefore:function(e,i,n,a){a=a||t.languages;var r=a[e];if(2==arguments.length){n=arguments[1];for(var s in n)n.hasOwnProperty(s)&&(r[s]=n[s]);return r}var o={};for(var l in r)if(r.hasOwnProperty(l)){if(l==i)for(var s in n)n.hasOwnProperty(s)&&(o[s]=n[s]);o[l]=r[l]}return t.languages.DFS(t.languages,function(t,i){i===a[e]&&t!=e&&(this[t]=o)}),a[e]=o},DFS:function(e,i,n){for(var a in e)e.hasOwnProperty(a)&&(i.call(e,a,e[a],n||a),"Object"===t.util.type(e[a])?t.languages.DFS(e[a],i):"Array"===t.util.type(e[a])&&t.languages.DFS(e[a],i,a))}},plugins:{},highlightAll:function(e,i){for(var n,a=document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'),r=0;n=a[r++];)t.highlightElement(n,e===!0,i)},highlightElement:function(i,n,a){for(var r,s,o=i;o&&!e.test(o.className);)o=o.parentNode;o&&(r=(o.className.match(e)||[,""])[1],s=t.languages[r]),i.className=i.className.replace(e,"").replace(/\s+/g," ")+" language-"+r,o=i.parentNode,/pre/i.test(o.nodeName)&&(o.className=o.className.replace(e,"").replace(/\s+/g," ")+" language-"+r);var l=i.textContent,c={element:i,language:r,grammar:s,code:l};if(!l||!s)return void t.hooks.run("complete",c);if(t.hooks.run("before-highlight",c),n&&_self.Worker){var d=new Worker(t.filename);d.onmessage=function(e){c.highlightedCode=e.data,t.hooks.run("before-insert",c),c.element.innerHTML=c.highlightedCode,a&&a.call(c.element),t.hooks.run("after-highlight",c),t.hooks.run("complete",c)},d.postMessage(JSON.stringify({language:c.language,code:c.code,immediateClose:!0}))}else c.highlightedCode=t.highlight(c.code,c.grammar,c.language),t.hooks.run("before-insert",c),c.element.innerHTML=c.highlightedCode,a&&a.call(i),t.hooks.run("after-highlight",c),t.hooks.run("complete",c)},highlight:function(e,n,a){var r=t.tokenize(e,n);return i.stringify(t.util.encode(r),a)},tokenize:function(e,i,n){var a=t.Token,r=[e],s=i.rest;if(s){for(var o in s)i[o]=s[o];delete i.rest}e:for(var o in i)if(i.hasOwnProperty(o)&&i[o]){var l=i[o];l="Array"===t.util.type(l)?l:[l];for(var c=0;c<l.length;++c){var d=l[c],p=d.inside,u=!!d.lookbehind,m=0,E=d.alias;d=d.pattern||d;for(var g=0;g<r.length;g++){var f=r[g];if(r.length>e.length)break e;if(!(f instanceof a)){d.lastIndex=0;var b=d.exec(f);if(b){u&&(m=b[1].length);var h=b.index-1+m,b=b[0].slice(m),S=b.length,T=h+S,A=f.slice(0,h+1),N=f.slice(T+1),I=[g,1];A&&I.push(A);var L=new a(o,p?t.tokenize(b,p):b,E);I.push(L),N&&I.push(N),Array.prototype.splice.apply(r,I)}}}}}return r},hooks:{all:{},add:function(e,i){var n=t.hooks.all;n[e]=n[e]||[],n[e].push(i)},run:function(e,i){var n=t.hooks.all[e];if(n&&n.length)for(var a,r=0;a=n[r++];)a(i)}}},i=t.Token=function(e,t,i){this.type=e,this.content=t,this.alias=i};if(i.stringify=function(e,n,a){if("string"==typeof e)return e;if("Array"===t.util.type(e))return e.map(function(t){return i.stringify(t,n,e)}).join("");var r={type:e.type,content:i.stringify(e.content,n,a),tag:"span",classes:["token",e.type],attributes:{},language:n,parent:a};if("comment"==r.type&&(r.attributes.spellcheck="true"),e.alias){var s="Array"===t.util.type(e.alias)?e.alias:[e.alias];Array.prototype.push.apply(r.classes,s)}t.hooks.run("wrap",r);var o="";for(var l in r.attributes)o+=(o?" ":"")+l+'="'+(r.attributes[l]||"")+'"';return"<"+r.tag+' class="'+r.classes.join(" ")+'" '+o+">"+r.content+"</"+r.tag+">"},!_self.document)return _self.addEventListener?(_self.addEventListener("message",function(e){var i=JSON.parse(e.data),n=i.language,a=i.code,r=i.immediateClose;_self.postMessage(t.highlight(a,t.languages[n],n)),r&&_self.close()},!1),_self.Prism):_self.Prism;var n=document.getElementsByTagName("script");return n=n[n.length-1],n&&(t.filename=n.src,document.addEventListener&&!n.hasAttribute("data-manual")&&document.addEventListener("DOMContentLoaded",t.highlightAll)),_self.Prism}();"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism),Prism.languages.markup={comment:/<!--[\w\W]*?-->/,prolog:/<\?[\w\W]+?\?>/,doctype:/<!DOCTYPE[\w\W]+?>/,cdata:/<!\[CDATA\[[\w\W]*?]]>/i,tag:{pattern:/<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,inside:{tag:{pattern:/^<\/?[^\s>\/]+/i,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"attr-value":{pattern:/=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i,inside:{punctuation:/[=>"']/}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:/&#?[\da-z]{1,8};/i},Prism.hooks.add("wrap",function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&amp;/,"&"))}),Prism.languages.xml=Prism.languages.markup,Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.css={comment:/\/\*[\w\W]*?\*\//,atrule:{pattern:/@[\w-]+?.*?(;|(?=\s*\{))/i,inside:{rule:/@[\w-]+/}},url:/url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i,selector:/[^\{\}\s][^\{\};]*?(?=\s*\{)/,string:/("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/,property:/(\b|\B)[\w-]+(?=\s*:)/i,important:/\B!important\b/i,"function":/[-a-z0-9]+(?=\()/i,punctuation:/[(){};:]/},Prism.languages.css.atrule.inside.rest=Prism.util.clone(Prism.languages.css),Prism.languages.markup&&(Prism.languages.insertBefore("markup","tag",{style:{pattern:/(<style[\w\W]*?>)[\w\W]*?(?=<\/style>)/i,lookbehind:!0,inside:Prism.languages.css,alias:"language-css"}}),Prism.languages.insertBefore("inside","attr-value",{"style-attr":{pattern:/\s*style=("|').*?\1/i,inside:{"attr-name":{pattern:/^\s*style/i,inside:Prism.languages.markup.tag.inside},punctuation:/^\s*=\s*['"]|['"]\s*$/,"attr-value":{pattern:/.+/i,inside:Prism.languages.css}},alias:"language-css"}},Prism.languages.markup.tag)),Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:/(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,"class-name":{pattern:/((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i,lookbehind:!0,inside:{punctuation:/(\.|\\)/}},keyword:/\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/,"boolean":/\b(true|false)\b/,"function":/[a-z0-9_]+(?=\()/i,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i,operator:/--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/,punctuation:/[{}[\];(),.:]/},Prism.languages.javascript=Prism.languages.extend("clike",{keyword:/\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/,number:/\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/,"function":/[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i}),Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}}),Prism.languages.insertBefore("javascript","class-name",{"template-string":{pattern:/`(?:\\`|\\?[^`])*`/,inside:{interpolation:{pattern:/\$\{[^}]+\}/,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}}}),Prism.languages.markup&&Prism.languages.insertBefore("markup","tag",{script:{pattern:/(<script[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.javascript,alias:"language-javascript"}}),Prism.languages.js=Prism.languages.javascript,Prism.languages.abap={comment:/^\*.*/m,string:/(`|')(\\?.)*?\1/m,"string-template":{pattern:/(\||\})(\\?.)*?(?=\||\{)/,lookbehind:!0,alias:"string"},"eol-comment":{pattern:/(^|\s)".*/m,lookbehind:!0,alias:"comment"},keyword:{pattern:/(\s|\.|^)(?:SCIENTIFIC_WITH_LEADING_ZERO|SCALE_PRESERVING_SCIENTIFIC|RMC_COMMUNICATION_FAILURE|END-ENHANCEMENT-SECTION|MULTIPLY-CORRESPONDING|SUBTRACT-CORRESPONDING|VERIFICATION-MESSAGE|DIVIDE-CORRESPONDING|ENHANCEMENT-SECTION|CURRENCY_CONVERSION|RMC_SYSTEM_FAILURE|START-OF-SELECTION|MOVE-CORRESPONDING|RMC_INVALID_STATUS|CUSTOMER-FUNCTION|END-OF-DEFINITION|ENHANCEMENT-POINT|SYSTEM-EXCEPTIONS|ADD-CORRESPONDING|SCALE_PRESERVING|SELECTION-SCREEN|CURSOR-SELECTION|END-OF-SELECTION|LOAD-OF-PROGRAM|SCROLL-BOUNDARY|SELECTION-TABLE|EXCEPTION-TABLE|IMPLEMENTATIONS|PARAMETER-TABLE|RIGHT-JUSTIFIED|UNIT_CONVERSION|AUTHORITY-CHECK|LIST-PROCESSING|SIGN_AS_POSTFIX|COL_BACKGROUND|IMPLEMENTATION|INTERFACE-POOL|TRANSFORMATION|IDENTIFICATION|ENDENHANCEMENT|LINE-SELECTION|INITIALIZATION|LEFT-JUSTIFIED|SELECT-OPTIONS|SELECTION-SETS|COMMUNICATION|CORRESPONDING|DECIMAL_SHIFT|PRINT-CONTROL|VALUE-REQUEST|CHAIN-REQUEST|FUNCTION-POOL|FIELD-SYMBOLS|FUNCTIONALITY|INVERTED-DATE|SELECTION-SET|CLASS-METHODS|OUTPUT-LENGTH|CLASS-CODING|COL_NEGATIVE|ERRORMESSAGE|FIELD-GROUPS|HELP-REQUEST|NO-EXTENSION|NO-TOPOFPAGE|REDEFINITION|DISPLAY-MODE|ENDINTERFACE|EXIT-COMMAND|FIELD-SYMBOL|NO-SCROLLING|SHORTDUMP-ID|ACCESSPOLICY|CLASS-EVENTS|COL_POSITIVE|DECLARATIONS|ENHANCEMENTS|FILTER-TABLE|SWITCHSTATES|SYNTAX-CHECK|TRANSPORTING|ASYNCHRONOUS|SYNTAX-TRACE|TOKENIZATION|USER-COMMAND|WITH-HEADING|ABAP-SOURCE|BREAK-POINT|CHAIN-INPUT|COMPRESSION|FIXED-POINT|NEW-SECTION|NON-UNICODE|OCCURRENCES|RESPONSIBLE|SYSTEM-CALL|TRACE-TABLE|ABBREVIATED|CHAR-TO-HEX|END-OF-FILE|ENDFUNCTION|ENVIRONMENT|ASSOCIATION|COL_HEADING|EDITOR-CALL|END-OF-PAGE|ENGINEERING|IMPLEMENTED|INTENSIFIED|RADIOBUTTON|SYSTEM-EXIT|TOP-OF-PAGE|TRANSACTION|APPLICATION|CONCATENATE|DESTINATION|ENHANCEMENT|IMMEDIATELY|NO-GROUPING|PRECOMPILED|REPLACEMENT|TITLE-LINES|ACTIVATION|BYTE-ORDER|CLASS-POOL|CONNECTION|CONVERSION|DEFINITION|DEPARTMENT|EXPIRATION|INHERITING|MESSAGE-ID|NO-HEADING|PERFORMING|QUEUE-ONLY|RIGHTSPACE|SCIENTIFIC|STATUSINFO|STRUCTURES|SYNCPOINTS|WITH-TITLE|ATTRIBUTES|BOUNDARIES|CLASS-DATA|COL_NORMAL|DD\/MM\/YYYY|DESCENDING|INTERFACES|LINE-COUNT|MM\/DD\/YYYY|NON-UNIQUE|PRESERVING|SELECTIONS|STATEMENTS|SUBROUTINE|TRUNCATION|TYPE-POOLS|ARITHMETIC|BACKGROUND|ENDPROVIDE|EXCEPTIONS|IDENTIFIER|INDEX-LINE|OBLIGATORY|PARAMETERS|PERCENTAGE|PUSHBUTTON|RESOLUTION|COMPONENTS|DEALLOCATE|DISCONNECT|DUPLICATES|FIRST-LINE|HEAD-LINES|NO-DISPLAY|OCCURRENCE|RESPECTING|RETURNCODE|SUBMATCHES|TRACE-FILE|ASCENDING|BYPASSING|ENDMODULE|EXCEPTION|EXCLUDING|EXPORTING|INCREMENT|MATCHCODE|PARAMETER|PARTIALLY|PREFERRED|REFERENCE|REPLACING|RETURNING|SELECTION|SEPARATED|SPECIFIED|STATEMENT|TIMESTAMP|TYPE-POOL|ACCEPTING|APPENDAGE|ASSIGNING|COL_GROUP|COMPARING|CONSTANTS|DANGEROUS|IMPORTING|INSTANCES|LEFTSPACE|LOG-POINT|QUICKINFO|READ-ONLY|SCROLLING|SQLSCRIPT|STEP-LOOP|TOP-LINES|TRANSLATE|APPENDING|AUTHORITY|CHARACTER|COMPONENT|CONDITION|DIRECTORY|DUPLICATE|MESSAGING|RECEIVING|SUBSCREEN|ACCORDING|COL_TOTAL|END-LINES|ENDMETHOD|ENDSELECT|EXPANDING|EXTENSION|INCLUDING|INFOTYPES|INTERFACE|INTERVALS|LINE-SIZE|PF-STATUS|PROCEDURE|PROTECTED|REQUESTED|RESUMABLE|RIGHTPLUS|SAP-SPOOL|SECONDARY|STRUCTURE|SUBSTRING|TABLEVIEW|NUMOFCHAR|ADJACENT|ANALYSIS|ASSIGNED|BACKWARD|CHANNELS|CHECKBOX|CONTINUE|CRITICAL|DATAINFO|DD\/MM\/YY|DURATION|ENCODING|ENDCLASS|FUNCTION|LEFTPLUS|LINEFEED|MM\/DD\/YY|OVERFLOW|RECEIVED|SKIPPING|SORTABLE|STANDARD|SUBTRACT|SUPPRESS|TABSTRIP|TITLEBAR|TRUNCATE|UNASSIGN|WHENEVER|ANALYZER|COALESCE|COMMENTS|CONDENSE|DECIMALS|DEFERRED|ENDWHILE|EXPLICIT|KEYWORDS|MESSAGES|POSITION|PRIORITY|RECEIVER|RENAMING|TIMEZONE|TRAILING|ALLOCATE|CENTERED|CIRCULAR|CONTROLS|CURRENCY|DELETING|DESCRIBE|DISTANCE|ENDCATCH|EXPONENT|EXTENDED|GENERATE|IGNORING|INCLUDES|INTERNAL|MAJOR-ID|MODIFIER|NEW-LINE|OPTIONAL|PROPERTY|ROLLBACK|STARTING|SUPPLIED|ABSTRACT|CHANGING|CONTEXTS|CREATING|CUSTOMER|DATABASE|DAYLIGHT|DEFINING|DISTINCT|DIVISION|ENABLING|ENDCHAIN|ESCAPING|HARMLESS|IMPLICIT|INACTIVE|LANGUAGE|MINOR-ID|MULTIPLY|NEW-PAGE|NO-TITLE|POS_HIGH|SEPARATE|TEXTPOOL|TRANSFER|SELECTOR|DBMAXLEN|ITERATOR|SELECTOR|ARCHIVE|BIT-XOR|BYTE-CO|COLLECT|COMMENT|CURRENT|DEFAULT|DISPLAY|ENDFORM|EXTRACT|LEADING|LISTBOX|LOCATOR|MEMBERS|METHODS|NESTING|POS_LOW|PROCESS|PROVIDE|RAISING|RESERVE|SECONDS|SUMMARY|VISIBLE|BETWEEN|BIT-AND|BYTE-CS|CLEANUP|COMPUTE|CONTROL|CONVERT|DATASET|ENDCASE|FORWARD|HEADERS|HOTSPOT|INCLUDE|INVERSE|KEEPING|NO-ZERO|OBJECTS|OVERLAY|PADDING|PATTERN|PROGRAM|REFRESH|SECTION|SUMMING|TESTING|VERSION|WINDOWS|WITHOUT|BIT-NOT|BYTE-CA|BYTE-NA|CASTING|CONTEXT|COUNTRY|DYNAMIC|ENABLED|ENDLOOP|EXECUTE|FRIENDS|HANDLER|HEADING|INITIAL|\*-INPUT|LOGFILE|MAXIMUM|MINIMUM|NO-GAPS|NO-SIGN|PRAGMAS|PRIMARY|PRIVATE|REDUCED|REPLACE|REQUEST|RESULTS|UNICODE|WARNING|ALIASES|BYTE-CN|BYTE-NS|CALLING|COL_KEY|COLUMNS|CONNECT|ENDEXEC|ENTRIES|EXCLUDE|FILTERS|FURTHER|HELP-ID|LOGICAL|MAPPING|MESSAGE|NAMETAB|OPTIONS|PACKAGE|PERFORM|RECEIVE|STATICS|VARYING|BINDING|CHARLEN|GREATER|XSTRLEN|ACCEPT|APPEND|DETAIL|ELSEIF|ENDING|ENDTRY|FORMAT|FRAMES|GIVING|HASHED|HEADER|IMPORT|INSERT|MARGIN|MODULE|NATIVE|OBJECT|OFFSET|REMOTE|RESUME|SAVING|SIMPLE|SUBMIT|TABBED|TOKENS|UNIQUE|UNPACK|UPDATE|WINDOW|YELLOW|ACTUAL|ASPECT|CENTER|CURSOR|DELETE|DIALOG|DIVIDE|DURING|ERRORS|EVENTS|EXTEND|FILTER|HANDLE|HAVING|IGNORE|LITTLE|MEMORY|NO-GAP|OCCURS|OPTION|PERSON|PLACES|PUBLIC|REDUCE|REPORT|RESULT|SINGLE|SORTED|SWITCH|SYNTAX|TARGET|VALUES|WRITER|ASSERT|BLOCKS|BOUNDS|BUFFER|CHANGE|COLUMN|COMMIT|CONCAT|COPIES|CREATE|DDMMYY|DEFINE|ENDIAN|ESCAPE|EXPAND|KERNEL|LAYOUT|LEGACY|LEVELS|MMDDYY|NUMBER|OUTPUT|RANGES|READER|RETURN|SCREEN|SEARCH|SELECT|SHARED|SOURCE|STABLE|STATIC|SUBKEY|SUFFIX|TABLES|UNWIND|YYMMDD|ASSIGN|BACKUP|BEFORE|BINARY|BIT-OR|BLANKS|CLIENT|CODING|COMMON|DEMAND|DYNPRO|EXCEPT|EXISTS|EXPORT|FIELDS|GLOBAL|GROUPS|LENGTH|LOCALE|MEDIUM|METHOD|MODIFY|NESTED|OTHERS|REJECT|SCROLL|SUPPLY|SYMBOL|ENDFOR|STRLEN|ALIGN|BEGIN|BOUND|ENDAT|ENTRY|EVENT|FINAL|FLUSH|GRANT|INNER|SHORT|USING|WRITE|AFTER|BLACK|BLOCK|CLOCK|COLOR|COUNT|DUMMY|EMPTY|ENDDO|ENDON|GREEN|INDEX|INOUT|LEAVE|LEVEL|LINES|MODIF|ORDER|OUTER|RANGE|RESET|RETRY|RIGHT|SMART|SPLIT|STYLE|TABLE|THROW|UNDER|UNTIL|UPPER|UTF-8|WHERE|ALIAS|BLANK|CLEAR|CLOSE|EXACT|FETCH|FIRST|FOUND|GROUP|LLANG|LOCAL|OTHER|REGEX|SPOOL|TITLE|TYPES|VALID|WHILE|ALPHA|BOXED|CATCH|CHAIN|CHECK|CLASS|COVER|ENDIF|EQUIV|FIELD|FLOOR|FRAME|INPUT|LOWER|MATCH|NODES|PAGES|PRINT|RAISE|ROUND|SHIFT|SPACE|SPOTS|STAMP|STATE|TASKS|TIMES|TRMAC|ULINE|UNION|VALUE|WIDTH|EQUAL|LOG10|TRUNC|BLOB|CASE|CEIL|CLOB|COND|EXIT|FILE|GAPS|HOLD|INCL|INTO|KEEP|KEYS|LAST|LINE|LONG|LPAD|MAIL|MODE|OPEN|PINK|READ|ROWS|TEST|THEN|ZERO|AREA|BACK|BADI|BYTE|CAST|EDIT|EXEC|FAIL|FIND|FKEQ|FONT|FREE|GKEQ|HIDE|INIT|ITNO|LATE|LOOP|MAIN|MARK|MOVE|NEXT|NULL|RISK|ROLE|UNIT|WAIT|ZONE|BASE|CALL|CODE|DATA|DATE|FKGE|GKGE|HIGH|KIND|LEFT|LIST|MASK|MESH|NAME|NODE|PACK|PAGE|POOL|SEND|SIGN|SIZE|SOME|STOP|TASK|TEXT|TIME|USER|VARY|WITH|WORD|BLUE|CONV|COPY|DEEP|ELSE|FORM|FROM|HINT|ICON|JOIN|LIKE|LOAD|ONLY|PART|SCAN|SKIP|SORT|TYPE|UNIX|VIEW|WHEN|WORK|ACOS|ASIN|ATAN|COSH|EACH|FRAC|LESS|RTTI|SINH|SQRT|TANH|AVG|BIT|DIV|ISO|LET|OUT|PAD|SQL|ALL|CI_|CPI|END|LOB|LPI|MAX|MIN|NEW|OLE|RUN|SET|\?TO|YES|ABS|ADD|AND|BIG|FOR|HDB|JOB|LOW|NOT|SAP|TRY|VIA|XML|ANY|GET|IDS|KEY|MOD|OFF|PUT|RAW|RED|REF|SUM|TAB|XSD|CNT|COS|EXP|LOG|SIN|TAN|XOR|AT|CO|CP|DO|GT|ID|IF|NS|OR|BT|CA|CS|GE|NA|NB|EQ|IN|LT|NE|NO|OF|ON|PF|TO|AS|BY|CN|IS|LE|NP|UP|E|I|M|O|Z|C|X)\b/i,lookbehind:!0},number:/\b\d+\b/,operator:{pattern:/(\s)(?:\*\*?|<[=>]?|>=?|\?=|[-+\/=])(?=\s)/,lookbehind:!0},"string-operator":{pattern:/(\s)&&?(?=\s)/,lookbehind:!0,alias:"keyword"},"token-operator":[{pattern:/(\w)(?:->?|=>|[~|{}])(?=\w)/,lookbehind:!0,alias:"punctuation"},{pattern:/[|{}]/,alias:"punctuation"}],punctuation:/[,.:()]/},Prism.languages.actionscript=Prism.languages.extend("javascript",{keyword:/\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,operator:/\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/}),Prism.languages.actionscript["class-name"].alias="function",Prism.languages.markup&&Prism.languages.insertBefore("actionscript","string",{xml:{pattern:/(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\\1|\\?(?!\1)[\w\W])*\2)*\s*\/?>/,lookbehind:!0,inside:{rest:Prism.languages.markup}}}),Prism.languages.apacheconf={comment:/#.*/,"directive-inline":{pattern:/^(\s*)\b(AcceptFilter|AcceptPathInfo|AccessFileName|Action|AddAlt|AddAltByEncoding|AddAltByType|AddCharset|AddDefaultCharset|AddDescription|AddEncoding|AddHandler|AddIcon|AddIconByEncoding|AddIconByType|AddInputFilter|AddLanguage|AddModuleInfo|AddOutputFilter|AddOutputFilterByType|AddType|Alias|AliasMatch|Allow|AllowCONNECT|AllowEncodedSlashes|AllowMethods|AllowOverride|AllowOverrideList|Anonymous|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail|AsyncRequestWorkerFactor|AuthBasicAuthoritative|AuthBasicFake|AuthBasicProvider|AuthBasicUseDigestAlgorithm|AuthDBDUserPWQuery|AuthDBDUserRealmQuery|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile|AuthDigestAlgorithm|AuthDigestDomain|AuthDigestNonceLifetime|AuthDigestProvider|AuthDigestQop|AuthDigestShmemSize|AuthFormAuthoritative|AuthFormBody|AuthFormDisableNoStore|AuthFormFakeBasicAuth|AuthFormLocation|AuthFormLoginRequiredLocation|AuthFormLoginSuccessLocation|AuthFormLogoutLocation|AuthFormMethod|AuthFormMimetype|AuthFormPassword|AuthFormProvider|AuthFormSitePassphrase|AuthFormSize|AuthFormUsername|AuthGroupFile|AuthLDAPAuthorizePrefix|AuthLDAPBindAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareAsUser|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPInitialBindAsUser|AuthLDAPInitialBindPattern|AuthLDAPMaxSubGroupDepth|AuthLDAPRemoteUserAttribute|AuthLDAPRemoteUserIsDN|AuthLDAPSearchAsUser|AuthLDAPSubGroupAttribute|AuthLDAPSubGroupClass|AuthLDAPUrl|AuthMerging|AuthName|AuthnCacheContext|AuthnCacheEnable|AuthnCacheProvideFor|AuthnCacheSOCache|AuthnCacheTimeout|AuthnzFcgiCheckAuthnProvider|AuthnzFcgiDefineProvider|AuthType|AuthUserFile|AuthzDBDLoginToReferer|AuthzDBDQuery|AuthzDBDRedirectQuery|AuthzDBMType|AuthzSendForbiddenOnFailure|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|CacheDefaultExpire|CacheDetailHeader|CacheDirLength|CacheDirLevels|CacheDisable|CacheEnable|CacheFile|CacheHeader|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheIgnoreQueryString|CacheIgnoreURLSessionIdentifiers|CacheKeyBaseURL|CacheLastModifiedFactor|CacheLock|CacheLockMaxAge|CacheLockPath|CacheMaxExpire|CacheMaxFileSize|CacheMinExpire|CacheMinFileSize|CacheNegotiatedDocs|CacheQuickHandler|CacheReadSize|CacheReadTime|CacheRoot|CacheSocache|CacheSocacheMaxSize|CacheSocacheMaxTime|CacheSocacheMinTime|CacheSocacheReadSize|CacheSocacheReadTime|CacheStaleOnError|CacheStoreExpired|CacheStoreNoStore|CacheStorePrivate|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateInflateLimitRequestBody|DeflateInflateRatioBurst|DeflateInflateRatioLimit|DeflateMemLevel|DeflateWindowSize|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|HeartbeatAddress|HeartbeatListen|HeartbeatMaxServers|HeartbeatStorage|HeartbeatStorage|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|IndexHeadInsert|IndexIgnore|IndexIgnoreReset|IndexOptions|IndexOrderDefault|IndexStyleSheet|InputSed|ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFile|ISAPIFakeAsync|ISAPILogNotSupported|ISAPIReadAheadBuffer|KeepAlive|KeepAliveTimeout|KeptBodySize|LanguagePriority|LDAPCacheEntries|LDAPCacheTTL|LDAPConnectionPoolTTL|LDAPConnectionTimeout|LDAPLibraryDebug|LDAPOpCacheEntries|LDAPOpCacheTTL|LDAPReferralHopLimit|LDAPReferrals|LDAPRetries|LDAPRetryDelay|LDAPSharedCacheFile|LDAPSharedCacheSize|LDAPTimeout|LDAPTrustedClientCert|LDAPTrustedGlobalCert|LDAPTrustedMode|LDAPVerifyServerCert|LimitInternalRecursion|LimitRequestBody|LimitRequestFields|LimitRequestFieldSize|LimitRequestLine|LimitXMLRequestBody|Listen|ListenBackLog|LoadFile|LoadModule|LogFormat|LogLevel|LogMessage|LuaAuthzProvider|LuaCodeCache|LuaHookAccessChecker|LuaHookAuthChecker|LuaHookCheckUserID|LuaHookFixups|LuaHookInsertFilter|LuaHookLog|LuaHookMapToStorage|LuaHookTranslateName|LuaHookTypeChecker|LuaInherit|LuaInputFilter|LuaMapHandler|LuaOutputFilter|LuaPackageCPath|LuaPackagePath|LuaQuickHandler|LuaRoot|LuaScope|MaxConnectionsPerChild|MaxKeepAliveRequests|MaxMemFree|MaxRangeOverlaps|MaxRangeReversals|MaxRanges|MaxRequestWorkers|MaxSpareServers|MaxSpareThreads|MaxThreads|MergeTrailers|MetaDir|MetaFiles|MetaSuffix|MimeMagicFile|MinSpareServers|MinSpareThreads|MMapFile|ModemStandard|ModMimeUsePathInfo|MultiviewsMatch|Mutex|NameVirtualHost|NoProxy|NWSSLTrustedCerts|NWSSLUpgradeable|Options|Order|OutputSed|PassEnv|PidFile|PrivilegesMode|Protocol|ProtocolEcho|ProxyAddHeaders|ProxyBadHeader|ProxyBlock|ProxyDomain|ProxyErrorOverride|ProxyExpressDBMFile|ProxyExpressDBMType|ProxyExpressEnable|ProxyFtpDirCharset|ProxyFtpEscapeWildcards|ProxyFtpListOnWildcard|ProxyHTMLBufSize|ProxyHTMLCharsetOut|ProxyHTMLDocType|ProxyHTMLEnable|ProxyHTMLEvents|ProxyHTMLExtended|ProxyHTMLFixups|ProxyHTMLInterp|ProxyHTMLLinks|ProxyHTMLMeta|ProxyHTMLStripComments|ProxyHTMLURLMap|ProxyIOBufferSize|ProxyMaxForwards|ProxyPass|ProxyPassInherit|ProxyPassInterpolateEnv|ProxyPassMatch|ProxyPassReverse|ProxyPassReverseCookieDomain|ProxyPassReverseCookiePath|ProxyPreserveHost|ProxyReceiveBufferSize|ProxyRemote|ProxyRemoteMatch|ProxyRequests|ProxySCGIInternalRedirect|ProxySCGISendfile|ProxySet|ProxySourceAddress|ProxyStatus|ProxyTimeout|ProxyVia|ReadmeName|ReceiveBufferSize|Redirect|RedirectMatch|RedirectPermanent|RedirectTemp|ReflectorHeader|RemoteIPHeader|RemoteIPInternalProxy|RemoteIPInternalProxyList|RemoteIPProxiesHeader|RemoteIPTrustedProxy|RemoteIPTrustedProxyList|RemoveCharset|RemoveEncoding|RemoveHandler|RemoveInputFilter|RemoveLanguage|RemoveOutputFilter|RemoveType|RequestHeader|RequestReadTimeout|Require|RewriteBase|RewriteCond|RewriteEngine|RewriteMap|RewriteOptions|RewriteRule|RLimitCPU|RLimitMEM|RLimitNPROC|Satisfy|ScoreBoardFile|Script|ScriptAlias|ScriptAliasMatch|ScriptInterpreterSource|ScriptLog|ScriptLogBuffer|ScriptLogLength|ScriptSock|SecureListen|SeeRequestTail|SendBufferSize|ServerAdmin|ServerAlias|ServerLimit|ServerName|ServerPath|ServerRoot|ServerSignature|ServerTokens|Session|SessionCookieName|SessionCookieName2|SessionCookieRemove|SessionCryptoCipher|SessionCryptoDriver|SessionCryptoPassphrase|SessionCryptoPassphraseFile|SessionDBDCookieName|SessionDBDCookieName2|SessionDBDCookieRemove|SessionDBDDeleteLabel|SessionDBDInsertLabel|SessionDBDPerUser|SessionDBDSelectLabel|SessionDBDUpdateLabel|SessionEnv|SessionExclude|SessionHeader|SessionInclude|SessionMaxAge|SetEnv|SetEnvIf|SetEnvIfExpr|SetEnvIfNoCase|SetHandler|SetInputFilter|SetOutputFilter|SSIEndTag|SSIErrorMsg|SSIETag|SSILastModified|SSILegacyExprParser|SSIStartTag|SSITimeFormat|SSIUndefinedEcho|SSLCACertificateFile|SSLCACertificatePath|SSLCADNRequestFile|SSLCADNRequestPath|SSLCARevocationCheck|SSLCARevocationFile|SSLCARevocationPath|SSLCertificateChainFile|SSLCertificateFile|SSLCertificateKeyFile|SSLCipherSuite|SSLCompression|SSLCryptoDevice|SSLEngine|SSLFIPS|SSLHonorCipherOrder|SSLInsecureRenegotiation|SSLOCSPDefaultResponder|SSLOCSPEnable|SSLOCSPOverrideResponder|SSLOCSPResponderTimeout|SSLOCSPResponseMaxAge|SSLOCSPResponseTimeSkew|SSLOCSPUseRequestNonce|SSLOpenSSLConfCmd|SSLOptions|SSLPassPhraseDialog|SSLProtocol|SSLProxyCACertificateFile|SSLProxyCACertificatePath|SSLProxyCARevocationCheck|SSLProxyCARevocationFile|SSLProxyCARevocationPath|SSLProxyCheckPeerCN|SSLProxyCheckPeerExpire|SSLProxyCheckPeerName|SSLProxyCipherSuite|SSLProxyEngine|SSLProxyMachineCertificateChainFile|SSLProxyMachineCertificateFile|SSLProxyMachineCertificatePath|SSLProxyProtocol|SSLProxyVerify|SSLProxyVerifyDepth|SSLRandomSeed|SSLRenegBufferSize|SSLRequire|SSLRequireSSL|SSLSessionCache|SSLSessionCacheTimeout|SSLSessionTicketKeyFile|SSLSRPUnknownUserSeed|SSLSRPVerifierFile|SSLStaplingCache|SSLStaplingErrorCacheTimeout|SSLStaplingFakeTryLater|SSLStaplingForceURL|SSLStaplingResponderTimeout|SSLStaplingResponseMaxAge|SSLStaplingResponseTimeSkew|SSLStaplingReturnResponderErrors|SSLStaplingStandardCacheTimeout|SSLStrictSNIVHostCheck|SSLUserName|SSLUseStapling|SSLVerifyClient|SSLVerifyDepth|StartServers|StartThreads|Substitute|Suexec|SuexecUserGroup|ThreadLimit|ThreadsPerChild|ThreadStackSize|TimeOut|TraceEnable|TransferLog|TypesConfig|UnDefine|UndefMacro|UnsetEnv|Use|UseCanonicalName|UseCanonicalPhysicalPort|User|UserDir|VHostCGIMode|VHostCGIPrivs|VHostGroup|VHostPrivs|VHostSecure|VHostUser|VirtualDocumentRoot|VirtualDocumentRootIP|VirtualScriptAlias|VirtualScriptAliasIP|WatchdogInterval|XBitHack|xml2EncAlias|xml2EncDefault|xml2StartParse)\b/im,lookbehind:!0,alias:"property"},"directive-block":{pattern:/<\/?\b(AuthnProviderAlias|AuthzProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|RequireAll|RequireAny|RequireNone|VirtualHost)\b *.*>/i,inside:{"directive-block":{pattern:/^<\/?\w+/,inside:{punctuation:/^<\/?/},alias:"tag"},"directive-block-parameter":{pattern:/.*[^>]/,inside:{punctuation:/:/,string:{pattern:/("|').*\1/,inside:{variable:/(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/}}},alias:"attr-value"},punctuation:/>/},alias:"tag"},"directive-flags":{pattern:/\[(\w,?)+\]/,alias:"keyword"},string:{pattern:/("|').*\1/,inside:{variable:/(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/}},variable:/(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/,regex:/\^?.*\$|\^.*\$?/},Prism.languages.applescript={comment:[/\(\*(?:\(\*[\w\W]*?\*\)|[\w\W])*?\*\)/,/--.+/,/#.+/],string:/"(?:\\?.)*?"/,number:/\b-?\d*\.?\d+([Ee]-?\d+)?\b/,operator:[/[&=≠≤≥*+\-\/÷^]|[<>]=?/,/\b(?:(?:start|begin|end)s? with|(?:(?:does not|doesn't) contain|contains?)|(?:is|isn't|is not) (?:in|contained by)|(?:(?:is|isn't|is not) )?(?:greater|less) than(?: or equal)?(?: to)?|(?:(?:does not|doesn't) come|comes) (?:before|after)|(?:is|isn't|is not) equal(?: to)?|(?:(?:does not|doesn't) equal|equals|equal to|isn't|is not)|(?:a )?(?:ref(?: to)?|reference to)|(?:and|or|div|mod|as|not))\b/],keyword:/\b(?:about|above|after|against|apart from|around|aside from|at|back|before|beginning|behind|below|beneath|beside|between|but|by|considering|continue|copy|does|eighth|else|end|equal|error|every|exit|false|fifth|first|for|fourth|from|front|get|given|global|if|ignoring|in|instead of|into|is|it|its|last|local|me|middle|my|ninth|of|on|onto|out of|over|prop|property|put|repeat|return|returning|second|set|seventh|since|sixth|some|tell|tenth|that|the|then|third|through|thru|timeout|times|to|transaction|true|try|until|where|while|whose|with|without)\b/,"class":{pattern:/\b(?:alias|application|boolean|class|constant|date|file|integer|list|number|POSIX file|real|record|reference|RGB color|script|text|centimetres|centimeters|feet|inches|kilometres|kilometers|metres|meters|miles|yards|square feet|square kilometres|square kilometers|square metres|square meters|square miles|square yards|cubic centimetres|cubic centimeters|cubic feet|cubic inches|cubic metres|cubic meters|cubic yards|gallons|litres|liters|quarts|grams|kilograms|ounces|pounds|degrees Celsius|degrees Fahrenheit|degrees Kelvin)\b/,alias:"builtin"},punctuation:/[{}():,¬«»《》]/},Prism.languages.aspnet=Prism.languages.extend("markup",{"page-directive tag":{pattern:/<%\s*@.*%>/i,inside:{"page-directive tag":/<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,rest:Prism.languages.markup.tag.inside}},"directive tag":{pattern:/<%.*%>/i,inside:{"directive tag":/<%\s*?[$=%#:]{0,2}|%>/i,rest:Prism.languages.csharp}}}),Prism.languages.aspnet.tag.pattern=/<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i,Prism.languages.insertBefore("inside","punctuation",{"directive tag":Prism.languages.aspnet["directive tag"]},Prism.languages.aspnet.tag.inside["attr-value"]),Prism.languages.insertBefore("aspnet","comment",{"asp comment":/<%--[\w\W]*?--%>/}),Prism.languages.insertBefore("aspnet",Prism.languages.javascript?"script":"tag",{"asp script":{pattern:/(<script(?=.*runat=['"]?server['"]?)[\w\W]*?>)[\w\W]*?(?=<\/script>)/i,lookbehind:!0,inside:Prism.languages.csharp||{}}}),function(e){var t={variable:[{pattern:/\$?\(\([\w\W]+?\)\)/,inside:{variable:[{pattern:/(^\$\(\([\w\W]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee]-?\d+)?)\b/,operator:/--?|-=|\+\+?|\+=|!=?|~|\*\*?|\*=|\/=?|%=?|<<=?|>>=?|<=?|>=?|==?|&&?|&=|\^=?|\|\|?|\|=|\?|:/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\([^)]+\)|`[^`]+`/,inside:{variable:/^\$\(|^`|\)$|`$/}},/\$(?:[a-z0-9_#\?\*!@]+|\{[^}]+\})/i]};e.languages.bash={shebang:{pattern:/^#!\s*\/bin\/bash|^#!\s*\/bin\/sh/,alias:"important"},comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},string:[{pattern:/((?:^|[^<])<<\s*)(?:"|')?(\w+?)(?:"|')?\s*\r?\n(?:[\s\S])*?\r?\n\2/g,lookbehind:!0,inside:t},{pattern:/("|')(?:\\?[\s\S])*?\1/g,inside:t}],variable:t.variable,"function":{pattern:/(^|\s|;|\||&)(?:alias|apropos|apt-get|aptitude|aspell|awk|basename|bash|bc|bg|builtin|bzip2|cal|cat|cd|cfdisk|chgrp|chmod|chown|chroot|chkconfig|cksum|clear|cmp|comm|command|cp|cron|crontab|csplit|cut|date|dc|dd|ddrescue|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|du|egrep|eject|enable|env|ethtool|eval|exec|expand|expect|export|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|getopts|git|grep|groupadd|groupdel|groupmod|groups|gzip|hash|head|help|hg|history|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|jobs|join|kill|killall|less|link|ln|locate|logname|logout|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|make|man|mkdir|mkfifo|mkisofs|mknod|more|most|mount|mtools|mtr|mv|mmv|nano|netstat|nice|nl|nohup|notify-send|nslookup|open|op|passwd|paste|pathchk|ping|pkill|popd|pr|printcap|printenv|printf|ps|pushd|pv|pwd|quota|quotacheck|quotactl|ram|rar|rcp|read|readarray|readonly|reboot|rename|renice|remsync|rev|rm|rmdir|rsync|screen|scp|sdiff|sed|seq|service|sftp|shift|shopt|shutdown|sleep|slocate|sort|source|split|ssh|stat|strace|su|sudo|sum|suspend|sync|tail|tar|tee|test|time|timeout|times|touch|top|traceroute|trap|tr|tsort|tty|type|ulimit|umask|umount|unalias|uname|unexpand|uniq|units|unrar|unshar|uptime|useradd|userdel|usermod|users|uuencode|uudecode|v|vdir|vi|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yes|zip)(?=$|\s|;|\||&)/,
+lookbehind:!0},keyword:{pattern:/(^|\s|;|\||&)(?:let|:|\.|if|then|else|elif|fi|for|break|continue|while|in|case|function|select|do|done|until|echo|exit|return|set|declare)(?=$|\s|;|\||&)/,lookbehind:!0},"boolean":{pattern:/(^|\s|;|\||&)(?:true|false)(?=$|\s|;|\||&)/,lookbehind:!0},operator:/&&?|\|\|?|==?|!=?|<<<?|>>|<=?|>=?|=~/,punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];]/};var i=t.variable[1].inside;i["function"]=e.languages.bash["function"],i.keyword=e.languages.bash.keyword,i["boolean"]=e.languages.bash["boolean"],i.operator=e.languages.bash.operator,i.punctuation=e.languages.bash.punctuation}(Prism),Prism.languages.basic={string:/"(?:""|[!#$%&'()*,\/:;<=>?^_ +\-.A-Z\d])*"/i,comment:{pattern:/(?:!|REM\b).+/i,inside:{keyword:/^REM/i}},number:/(?:\b|\B[.-])(?:\d+\.?\d*)(?:E[+-]?\d+)?/i,keyword:/\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SHARED|SINGLE|SELECT CASE|SHELL|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\$|\b)/i,"function":/\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\$|\b)/i,operator:/<[=>]?|>=?|[+\-*\/^=&]|\b(?:AND|EQV|IMP|NOT|OR|XOR)\b/i,punctuation:/[,;:()]/},Prism.languages.c=Prism.languages.extend("clike",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,operator:/\-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*\/]/,number:/\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i}),Prism.languages.insertBefore("c","string",{macro:{pattern:/(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,lookbehind:!0,alias:"property",inside:{string:{pattern:/(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,lookbehind:!0},directive:{pattern:/(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,lookbehind:!0,alias:"keyword"}}},constant:/\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/}),delete Prism.languages.c["class-name"],delete Prism.languages.c["boolean"],Prism.languages.csharp=Prism.languages.extend("clike",{keyword:/\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,string:[/@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,/("|')(\\?.)*?\1/],number:/\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i}),Prism.languages.insertBefore("csharp","keyword",{preprocessor:{pattern:/(^\s*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}}),Prism.languages.cpp=Prism.languages.extend("c",{keyword:/\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,"boolean":/\b(true|false)\b/,operator:/[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/}),Prism.languages.insertBefore("cpp","keyword",{"class-name":{pattern:/(class\s+)[a-z0-9_]+/i,lookbehind:!0}}),function(e){var t=/#(?!\{).+/,i={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[/'(?:\\?[^\\])*?'/,{pattern:/"(?:\\?[^\\])*?"/,inside:{interpolation:i}}],keyword:/\b(and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:i}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\?[\s\S])*?`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},rest:e.languages.javascript}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,alias:"string"},{pattern:/"""[\s\S]*?"""/,alias:"string",inside:{interpolation:i}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/})}(Prism),function(e){e.languages.ruby=e.languages.extend("clike",{comment:/#(?!\{[^\r\n]*?\}).*/,keyword:/\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/});var t={pattern:/#\{[^}]+\}/,inside:{delimiter:{pattern:/^#\{|\}$/,alias:"tag"},rest:e.util.clone(e.languages.ruby)}};e.languages.insertBefore("ruby","keyword",{regex:[{pattern:/%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,inside:{interpolation:t}},{pattern:/%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,inside:{interpolation:t}},{pattern:/(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,lookbehind:!0}],variable:/[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,symbol:/:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.insertBefore("ruby","number",{builtin:/\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,constant:/\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/}),e.languages.ruby.string=[{pattern:/%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,inside:{interpolation:t}},{pattern:/%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,inside:{interpolation:t}},{pattern:/("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,inside:{interpolation:t}}]}(Prism),Prism.languages.d=Prism.languages.extend("clike",{string:[/\b[rx]"(\\.|[^\\"])*"[cwd]?/,/\bq"(?:\[[\s\S]*?\]|\([\s\S]*?\)|<[\s\S]*?>|\{[\s\S]*?\})"/,/\bq"([_a-zA-Z][_a-zA-Z\d]*)(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\1"/,/\bq"(.)[\s\S]*?\1"/,/'(?:\\'|\\?[^']+)'/,/(["`])(\\.|(?!\1)[^\\])*\1[cwd]?/],number:[/\b0x\.?[a-f\d_]+(?:(?!\.\.)\.[a-f\d_]*)?(?:p[+-]?[a-f\d_]+)?[ulfi]*/i,{pattern:/((?:\.\.)?)(?:\b0b\.?|\b|\.)\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:e[+-]?\d[\d_]*)?[ulfi]*/i,lookbehind:!0}],keyword:/\$|\b(?:abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|real|ref|return|scope|shared|short|static|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|__(?:(?:FILE|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__|gshared|traits|vector|parameters)|string|wstring|dstring|size_t|ptrdiff_t)\b/,operator:/\|[|=]?|&[&=]?|\+[+=]?|-[-=]?|\.?\.\.|=[>=]?|!(?:i[ns]\b|<>?=?|>=?|=)?|\bi[ns]\b|(?:<[<>]?|>>?>?|\^\^|[*\/%^~])=?/}),Prism.languages.d.comment=[/^\s*#!.+/,{pattern:/(^|[^\\])\/\+(?:\/\+[\w\W]*?\+\/|[\w\W])*?\+\//,lookbehind:!0}].concat(Prism.languages.d.comment),Prism.languages.insertBefore("d","comment",{"token-string":{pattern:/\bq\{(?:|\{[^}]*\}|[^}])*\}/,alias:"string"}}),Prism.languages.insertBefore("d","keyword",{property:/\B@\w*/}),Prism.languages.insertBefore("d","function",{register:{pattern:/\b(?:[ABCD][LHX]|E[ABCD]X|E?(?:BP|SP|DI|SI)|[ECSDGF]S|CR[0234]|DR[012367]|TR[3-7]|X?MM[0-7]|R[ABCD]X|[BS]PL|R[BS]P|[DS]IL|R[DS]I|R(?:[89]|1[0-5])[BWD]?|XMM(?:[89]|1[0-5])|YMM(?:1[0-5]|\d))\b|\bST(?:\([0-7]\)|\b)/,alias:"variable"}}),Prism.languages.dart=Prism.languages.extend("clike",{string:[/r?("""|''')[\s\S]*?\1/,/r?("|')(\\?.)*?\1/],keyword:[/\b(?:async|sync|yield)\*/,/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\b/],operator:/\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/}),Prism.languages.insertBefore("dart","function",{metadata:{pattern:/@\w+/,alias:"symbol"}}),Prism.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d+.*$/m],deleted:/^[-<].+$/m,inserted:/^[+>].+$/m,diff:{pattern:/^!(?!!).+$/m,alias:"important"}},Prism.languages.docker={keyword:{pattern:/(^\s*)(?:ONBUILD|FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|COPY|VOLUME|USER|WORKDIR|CMD|LABEL|ENTRYPOINT)(?=\s)/im,lookbehind:!0},string:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*?\1/,comment:/#.*/,punctuation:/---|\.\.\.|[:[\]{}\-,|>?]/},Prism.languages.erlang={comment:/%.+/,string:/"(?:\\?.)*?"/,"quoted-function":{pattern:/'(?:\\.|[^'\\])+'(?=\()/,alias:"function"},"quoted-atom":{pattern:/'(?:\\.|[^'\\])+'/,alias:"atom"},"boolean":/\b(?:true|false)\b/,keyword:/\b(?:fun|when|case|of|end|if|receive|after|try|catch)\b/,number:[/\$\\?./,/\d+#[a-z0-9]+/i,/(?:\b|-)\d*\.?\d+([Ee][+-]?\d+)?\b/],"function":/\b[a-z][\w@]*(?=\()/,variable:{pattern:/(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,lookbehind:!0},operator:[/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\b/,{pattern:/(^|[^<])<(?!<)/,lookbehind:!0},{pattern:/(^|[^>])>(?!>)/,lookbehind:!0}],atom:/\b[a-z][\w@]*/,punctuation:/[()[\]{}:;,.#|]|<<|>>/},Prism.languages.fsharp=Prism.languages.extend("clike",{comment:[{pattern:/(^|[^\\])\(\*[\w\W]*?\*\)/,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],keyword:/\b(?:let|return|use|yield)(?:!\B|\b)|\b(abstract|and|as|assert|base|begin|class|default|delegate|do|done|downcast|downto|elif|else|end|exception|extern|false|finally|for|fun|function|global|if|in|inherit|inline|interface|internal|lazy|match|member|module|mutable|namespace|new|not|null|of|open|or|override|private|public|rec|select|static|struct|then|to|true|try|type|upcast|val|void|when|while|with|asr|land|lor|lsl|lsr|lxor|mod|sig|atomic|break|checked|component|const|constraint|constructor|continue|eager|event|external|fixed|functor|include|method|mixin|object|parallel|process|protected|pure|sealed|tailcall|trait|virtual|volatile)\b/,string:/(?:"""[\s\S]*?"""|@"(?:""|[^"])*"|("|')(?:\\\1|\\?(?!\1)[\s\S])*\1)B?/,number:[/\b-?0x[\da-fA-F]+(un|lf|LF)?\b/,/\b-?0b[01]+(y|uy)?\b/,/\b-?(\d*\.?\d+|\d+\.)([fFmM]|[eE][+-]?\d+)?\b/,/\b-?\d+(y|uy|s|us|l|u|ul|L|UL|I)?\b/]}),Prism.languages.insertBefore("fsharp","keyword",{preprocessor:{pattern:/^[^\r\n\S]*#.*/m,alias:"property",inside:{directive:{pattern:/(\s*#)\b(else|endif|if|light|line|nowarn)\b/,lookbehind:!0,alias:"keyword"}}}}),Prism.languages.fortran={"quoted-number":{pattern:/[BOZ](['"])[A-F0-9]+\1/i,alias:"number"},string:{pattern:/(?:\w+_)?(['"])(?:\1\1|&(?:\r\n?|\n)(?:\s*!.+(?:\r\n?|\n))?|(?!\1).)*(?:\1|&)/,inside:{comment:{pattern:/(&(?:\r\n?|\n)\s*)!.*/,lookbehind:!0}}},comment:/!.*/,"boolean":/\.(?:TRUE|FALSE)\.(?:_\w+)?/i,number:/(?:\b|[+-])(?:\d+(?:\.\d*)?|\.\d+)(?:[ED][+-]?\d+)?(?:_\w+)?/i,keyword:[/\b(?:INTEGER|REAL|DOUBLE ?PRECISION|COMPLEX|CHARACTER|LOGICAL)\b/i,/\b(?:END ?)?(?:BLOCK ?DATA|DO|FILE|FORALL|FUNCTION|IF|INTERFACE|MODULE(?! PROCEDURE)|PROGRAM|SELECT|SUBROUTINE|TYPE|WHERE)\b/i,/\b(?:ALLOCATABLE|ALLOCATE|BACKSPACE|CALL|CASE|CLOSE|COMMON|CONTAINS|CONTINUE|CYCLE|DATA|DEALLOCATE|DIMENSION|DO|END|EQUIVALENCE|EXIT|EXTERNAL|FORMAT|GO ?TO|IMPLICIT(?: NONE)?|INQUIRE|INTENT|INTRINSIC|MODULE PROCEDURE|NAMELIST|NULLIFY|OPEN|OPTIONAL|PARAMETER|POINTER|PRINT|PRIVATE|PUBLIC|READ|RETURN|REWIND|SAVE|SELECT|STOP|TARGET|WHILE|WRITE)\b/i,/\b(?:ASSIGNMENT|DEFAULT|ELEMENTAL|ELSE|ELSEWHERE|ELSEIF|ENTRY|IN|INCLUDE|INOUT|KIND|NULL|ONLY|OPERATOR|OUT|PURE|RECURSIVE|RESULT|SEQUENCE|STAT|THEN|USE)\b/i],operator:[/\*\*|\/\/|=>|[=\/]=|[<>]=?|::|[+\-*=%]|\.(?:EQ|NE|LT|LE|GT|GE|NOT|AND|OR|EQV|NEQV)\.|\.[A-Z]+\./i,{pattern:/(^|(?!\().)\/(?!\))/,lookbehind:!0}],punctuation:/\(\/|\/\)|[(),;:&]/},Prism.languages.git={comment:/^#.*/m,deleted:/^[-–].*/m,inserted:/^\+.*/m,string:/("|')(\\?.)*?\1/m,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s(--|-)\w+/m}},coord:/^@@.*@@$/m,commit_sha1:/^commit \w{40}$/m},Prism.languages.go=Prism.languages.extend("clike",{keyword:/\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,builtin:/\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\b/,"boolean":/\b(_|iota|nil|true|false)\b/,operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,number:/\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/i,string:/("|'|`)(\\?.|\r|\n)*?\1/}),delete Prism.languages.go["class-name"],Prism.languages.groovy=Prism.languages.extend("clike",{keyword:/\b(as|def|in|abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|native|new|package|private|protected|public|return|short|static|strictfp|super|switch|synchronized|this|throw|throws|trait|transient|try|void|volatile|while)\b/,string:/("""|''')[\W\w]*?\1|("|'|\/)(?:\\?.)*?\2|(\$\/)(\$\/\$|[\W\w])*?\/\$/,number:/\b(?:0b[01_]+|0x[\da-f_]+(?:\.[\da-f_p\-]+)?|[\d_]+(?:\.[\d_]+)?(?:e[+-]?[\d]+)?)[glidf]?\b/i,operator:{pattern:/(^|[^.])(~|==?~?|\?[.:]?|\*(?:[.=]|\*=?)?|\.[@&]|\.\.<|\.{1,2}(?!\.)|-[-=>]?|\+[+=]?|!=?|<(?:<=?|=>?)?|>(?:>>?=?|=)?|&[&=]?|\|[|=]?|\/=?|\^=?|%=?)/,lookbehind:!0},punctuation:/\.+|[{}[\];(),:$]/}),Prism.languages.insertBefore("groovy","string",{shebang:{pattern:/#!.+/,alias:"comment"}}),Prism.languages.insertBefore("groovy","punctuation",{"spock-block":/\b(setup|given|when|then|and|cleanup|expect|where):/}),Prism.languages.insertBefore("groovy","function",{annotation:{pattern:/(^|[^.])@\w+/,lookbehind:!0}}),Prism.hooks.add("wrap",function(e){if("groovy"===e.language&&"string"===e.type){var t=e.content[0];if("'"!=t){var i=/([^\\])(\$(\{.*?\}|[\w\.]+))/;"$"===t&&(i=/([^\$])(\$(\{.*?\}|[\w\.]+))/),e.content=Prism.highlight(e.content,{expression:{pattern:i,lookbehind:!0,inside:Prism.languages.groovy}}),e.classes.push("/"===t?"regex":"gstring")}}}),Prism.languages.haskell={comment:{pattern:/(^|[^-!#$%*+=?&@|~.:<>^\\\/])(--[^-!#$%*+=?&@|~.:<>^\\\/].*|{-[\w\W]*?-})/m,lookbehind:!0},"char":/'([^\\']|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,string:/"([^\\"]|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+)|\\\s+\\)*"/,keyword:/\b(case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,import_statement:{pattern:/(\r?\n|\r|^)\s*import\s+(qualified\s+)?([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*(\s+as\s+([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*)?(\s+hiding\b)?/m,inside:{keyword:/\b(import|qualified|as|hiding)\b/}},builtin:/\b(abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,number:/\b(\d+(\.\d+)?(e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,operator:/\s\.\s|[-!#$%*+=?&@|~.:<>^\\\/]*\.[-!#$%*+=?&@|~.:<>^\\\/]+|[-!#$%*+=?&@|~.:<>^\\\/]+\.[-!#$%*+=?&@|~.:<>^\\\/]*|[-!#$%*+=?&@|~:<>^\\\/]+|`([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*`/,hvariable:/\b([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*\b/,constant:/\b([A-Z][_a-zA-Z0-9']*\.)*[A-Z][_a-zA-Z0-9']*\b/,punctuation:/[{}[\];(),.:]/},Prism.languages.http={"request-line":{pattern:/^(POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b\shttps?:\/\/\S+\sHTTP\/[0-9.]+/m,inside:{property:/^(POST|GET|PUT|DELETE|OPTIONS|PATCH|TRACE|CONNECT)\b/,"attr-name":/:\w+/}},"response-status":{pattern:/^HTTP\/1.[01] [0-9]+.*/m,inside:{property:{pattern:/(^HTTP\/1.[01] )[0-9]+.*/i,lookbehind:!0}}},"header-name":{pattern:/^[\w-]+:(?=.)/m,alias:"keyword"}};var httpLanguages={"application/json":Prism.languages.javascript,"application/xml":Prism.languages.markup,"text/xml":Prism.languages.markup,"text/html":Prism.languages.markup};for(var contentType in httpLanguages)if(httpLanguages[contentType]){var options={};options[contentType]={pattern:new RegExp("(content-type:\\s*"+contentType+"[\\w\\W]*?)(?:\\r?\\n|\\r){2}[\\w\\W]*","i"),lookbehind:!0,inside:{rest:httpLanguages[contentType]}},Prism.languages.insertBefore("http","header-name",options)}Prism.languages.ini={comment:/^[ \t]*;.*$/m,important:/\[.*?\]/,constant:/^[ \t]*[^\s=]+?(?=[ \t]*=)/m,"attr-value":{pattern:/=.*/,inside:{punctuation:/^[=]/}}},Prism.languages.java=Prism.languages.extend("clike",{keyword:/\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,number:/\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,operator:{pattern:/(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,lookbehind:!0}}),Prism.languages.lua={comment:/^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,string:/(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,number:/\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,keyword:/\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,"function":/(?!\d)\w+(?=\s*(?:[({]))/,operator:[/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,{pattern:/(^|[^.])\.\.(?!\.)/,lookbehind:!0}],punctuation:/[\[\](){},;]|\.+|:+/},Prism.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|.)*/,lookbehind:!0},string:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,builtin:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,symbol:{pattern:/^[^:=\r\n]+(?=\s*:(?!=))/m,inside:{variable:/\$+(?:[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:[/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,{pattern:/(\()(?:addsuffix|abspath|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:s|list)?)(?=[ \t])/,lookbehind:!0}],operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},Prism.languages.markdown=Prism.languages.extend("markup",{}),Prism.languages.insertBefore("markdown","prolog",{blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},code:[{pattern:/^(?: {4}|\t).+/m,alias:"keyword"},{pattern:/``.+?``|`[^`\n]+`/,alias:"keyword"}],title:[{pattern:/\w+.*(?:\r?\n|\r)(?:==+|--+)/,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#+.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])([\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:/(^|[^\\])(\*\*|__)(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^\*\*|^__|\*\*$|__$/}},italic:{pattern:/(^|[^\\])([*_])(?:(?:\r?\n|\r)(?!\r?\n|\r)|.)+?\2/,lookbehind:!0,inside:{punctuation:/^[*_]|[*_]$/}},url:{pattern:/!?\[[^\]]+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)| ?\[[^\]\n]*\])/,inside:{variable:{pattern:/(!?\[)[^\]]+(?=\]$)/,lookbehind:!0},string:{pattern:/"(?:\\.|[^"\\])*"(?=\)$)/}}}}),Prism.languages.markdown.bold.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.italic.inside.url=Prism.util.clone(Prism.languages.markdown.url),Prism.languages.markdown.bold.inside.italic=Prism.util.clone(Prism.languages.markdown.italic),Prism.languages.markdown.italic.inside.bold=Prism.util.clone(Prism.languages.markdown.bold),Prism.languages.matlab={string:/\B'(?:''|[^'\n])*'/,comment:[/%\{[\s\S]*?\}%/,/%.+/],number:/\b-?(?:\d*\.?\d+(?:[eE][+-]?\d+)?(?:[ij])?|[ij])\b/,keyword:/\b(?:break|case|catch|continue|else|elseif|end|for|function|if|inf|NaN|otherwise|parfor|pause|pi|return|switch|try|while)\b/,"function":/(?!\d)\w+(?=\s*\()/,operator:/\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,punctuation:/\.{3}|[.,;\[\](){}!]/},Prism.languages.nginx=Prism.languages.extend("clike",{comment:{pattern:/(^|[^"{\\])#.*/,lookbehind:!0},keyword:/\b(?:CONTENT_|DOCUMENT_|GATEWAY_|HTTP_|HTTPS|if_not_empty|PATH_|QUERY_|REDIRECT_|REMOTE_|REQUEST_|SCGI|SCRIPT_|SERVER_|http|server|events|location|include|accept_mutex|accept_mutex_delay|access_log|add_after_body|add_before_body|add_header|addition_types|aio|alias|allow|ancient_browser|ancient_browser_value|auth|auth_basic|auth_basic_user_file|auth_http|auth_http_header|auth_http_timeout|autoindex|autoindex_exact_size|autoindex_localtime|break|charset|charset_map|charset_types|chunked_transfer_encoding|client_body_buffer_size|client_body_in_file_only|client_body_in_single_buffer|client_body_temp_path|client_body_timeout|client_header_buffer_size|client_header_timeout|client_max_body_size|connection_pool_size|create_full_put_path|daemon|dav_access|dav_methods|debug_connection|debug_points|default_type|deny|devpoll_changes|devpoll_events|directio|directio_alignment|disable_symlinks|empty_gif|env|epoll_events|error_log|error_page|expires|fastcgi_buffer_size|fastcgi_buffers|fastcgi_busy_buffers_size|fastcgi_cache|fastcgi_cache_bypass|fastcgi_cache_key|fastcgi_cache_lock|fastcgi_cache_lock_timeout|fastcgi_cache_methods|fastcgi_cache_min_uses|fastcgi_cache_path|fastcgi_cache_purge|fastcgi_cache_use_stale|fastcgi_cache_valid|fastcgi_connect_timeout|fastcgi_hide_header|fastcgi_ignore_client_abort|fastcgi_ignore_headers|fastcgi_index|fastcgi_intercept_errors|fastcgi_keep_conn|fastcgi_max_temp_file_size|fastcgi_next_upstream|fastcgi_no_cache|fastcgi_param|fastcgi_pass|fastcgi_pass_header|fastcgi_read_timeout|fastcgi_redirect_errors|fastcgi_send_timeout|fastcgi_split_path_info|fastcgi_store|fastcgi_store_access|fastcgi_temp_file_write_size|fastcgi_temp_path|flv|geo|geoip_city|geoip_country|google_perftools_profiles|gzip|gzip_buffers|gzip_comp_level|gzip_disable|gzip_http_version|gzip_min_length|gzip_proxied|gzip_static|gzip_types|gzip_vary|if|if_modified_since|ignore_invalid_headers|image_filter|image_filter_buffer|image_filter_jpeg_quality|image_filter_sharpen|image_filter_transparency|imap_capabilities|imap_client_buffer|include|index|internal|ip_hash|keepalive|keepalive_disable|keepalive_requests|keepalive_timeout|kqueue_changes|kqueue_events|large_client_header_buffers|limit_conn|limit_conn_log_level|limit_conn_zone|limit_except|limit_rate|limit_rate_after|limit_req|limit_req_log_level|limit_req_zone|limit_zone|lingering_close|lingering_time|lingering_timeout|listen|location|lock_file|log_format|log_format_combined|log_not_found|log_subrequest|map|map_hash_bucket_size|map_hash_max_size|master_process|max_ranges|memcached_buffer_size|memcached_connect_timeout|memcached_next_upstream|memcached_pass|memcached_read_timeout|memcached_send_timeout|merge_slashes|min_delete_depth|modern_browser|modern_browser_value|mp4|mp4_buffer_size|mp4_max_buffer_size|msie_padding|msie_refresh|multi_accept|open_file_cache|open_file_cache_errors|open_file_cache_min_uses|open_file_cache_valid|open_log_file_cache|optimize_server_names|override_charset|pcre_jit|perl|perl_modules|perl_require|perl_set|pid|pop3_auth|pop3_capabilities|port_in_redirect|post_action|postpone_output|protocol|proxy|proxy_buffer|proxy_buffer_size|proxy_buffering|proxy_buffers|proxy_busy_buffers_size|proxy_cache|proxy_cache_bypass|proxy_cache_key|proxy_cache_lock|proxy_cache_lock_timeout|proxy_cache_methods|proxy_cache_min_uses|proxy_cache_path|proxy_cache_use_stale|proxy_cache_valid|proxy_connect_timeout|proxy_cookie_domain|proxy_cookie_path|proxy_headers_hash_bucket_size|proxy_headers_hash_max_size|proxy_hide_header|proxy_http_version|proxy_ignore_client_abort|proxy_ignore_headers|proxy_intercept_errors|proxy_max_temp_file_size|proxy_method|proxy_next_upstream|proxy_no_cache|proxy_pass|proxy_pass_error_message|proxy_pass_header|proxy_pass_request_body|proxy_pass_request_headers|proxy_read_timeout|proxy_redirect|proxy_redirect_errors|proxy_send_lowat|proxy_send_timeout|proxy_set_body|proxy_set_header|proxy_ssl_session_reuse|proxy_store|proxy_store_access|proxy_temp_file_write_size|proxy_temp_path|proxy_timeout|proxy_upstream_fail_timeout|proxy_upstream_max_fails|random_index|read_ahead|real_ip_header|recursive_error_pages|request_pool_size|reset_timedout_connection|resolver|resolver_timeout|return|rewrite|root|rtsig_overflow_events|rtsig_overflow_test|rtsig_overflow_threshold|rtsig_signo|satisfy|satisfy_any|secure_link_secret|send_lowat|send_timeout|sendfile|sendfile_max_chunk|server|server_name|server_name_in_redirect|server_names_hash_bucket_size|server_names_hash_max_size|server_tokens|set|set_real_ip_from|smtp_auth|smtp_capabilities|so_keepalive|source_charset|split_clients|ssi|ssi_silent_errors|ssi_types|ssi_value_length|ssl|ssl_certificate|ssl_certificate_key|ssl_ciphers|ssl_client_certificate|ssl_crl|ssl_dhparam|ssl_engine|ssl_prefer_server_ciphers|ssl_protocols|ssl_session_cache|ssl_session_timeout|ssl_verify_client|ssl_verify_depth|starttls|stub_status|sub_filter|sub_filter_once|sub_filter_types|tcp_nodelay|tcp_nopush|timeout|timer_resolution|try_files|types|types_hash_bucket_size|types_hash_max_size|underscores_in_headers|uninitialized_variable_warn|upstream|use|user|userid|userid_domain|userid_expires|userid_name|userid_p3p|userid_path|userid_service|valid_referers|variables_hash_bucket_size|variables_hash_max_size|worker_connections|worker_cpu_affinity|worker_priority|worker_processes|worker_rlimit_core|worker_rlimit_nofile|worker_rlimit_sigpending|working_directory|xclient|xml_entities|xslt_entities|xslt_stylesheet|xslt_types)\b/i}),Prism.languages.insertBefore("nginx","keyword",{variable:/\$[a-z_]+/i}),Prism.languages.objectivec=Prism.languages.extend("c",{keyword:/\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,string:/("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),Prism.languages.pascal={comment:[/\(\*[\s\S]+?\*\)/,/\{[\s\S]+?\}/,/\/\/.*/],string:/(?:'(?:''|[^'\r\n])*'|#[&$%]?[a-f\d]+)+|\^[a-z]/i,keyword:[{pattern:/(^|[^&])\b(?:absolute|array|asm|begin|case|const|constructor|destructor|do|downto|else|end|file|for|function|goto|if|implementation|inherited|inline|interface|label|nil|object|of|operator|packed|procedure|program|record|reintroduce|repeat|self|set|string|then|to|type|unit|until|uses|var|while|with)\b/i,
+lookbehind:!0},{pattern:/(^|[^&])\b(?:dispose|exit|false|new|true)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:class|dispinterface|except|exports|finalization|finally|initialization|inline|library|on|out|packed|property|raise|resourcestring|threadvar|try)\b/i,lookbehind:!0},{pattern:/(^|[^&])\b(?:absolute|abstract|alias|assembler|bitpacked|break|cdecl|continue|cppdecl|cvar|default|deprecated|dynamic|enumerator|experimental|export|external|far|far16|forward|generic|helper|implements|index|interrupt|iochecks|local|message|name|near|nodefault|noreturn|nostackframe|oldfpccall|otherwise|overload|override|pascal|platform|private|protected|public|published|read|register|reintroduce|result|safecall|saveregisters|softfloat|specialize|static|stdcall|stored|strict|unaligned|unimplemented|varargs|virtual|write)\b/i,lookbehind:!0}],number:[/[+-]?(?:[&%]\d+|\$[a-f\d]+)/i,/([+-]|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?/i],operator:[/\.\.|\*\*|:=|<[<=>]?|>[>=]?|[+\-*\/]=?|[@^=]/i,{pattern:/(^|[^&])\b(?:and|as|div|exclude|in|include|is|mod|not|or|shl|shr|xor)\b/,lookbehind:!0}],punctuation:/\(\.|\.\)|[()\[\]:;,.]/},Prism.languages.perl={comment:[{pattern:/(^\s*)=\w+[\s\S]*?=cut.*/m,lookbehind:!0},{pattern:/(^|[^\\$])#.*/,lookbehind:!0}],string:[/\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,/\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\1/,/\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,/\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,/\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,/\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,/("|`)(?:[^\\]|\\[\s\S])*?\1/,/'(?:[^'\\\r\n]|\\.)*'/],regex:[/\b(?:m|qr)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[msixpodualngc]*/,/\b(?:m|qr)\s+([a-zA-Z0-9])(?:[^\\]|\\.)*?\1[msixpodualngc]*/,/\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,/\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,/\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,/\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,{pattern:/(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,lookbehind:!0},{pattern:/(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,lookbehind:!0},/\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/],variable:[/[&*$@%]\{\^[A-Z]+\}/,/[&*$@%]\^[A-Z_]/,/[&*$@%]#?(?=\{)/,/[&*$@%]#?((::)*'?(?!\d)[\w$]+)+(::)*/i,/[&*$@%]\d+/,/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/],filehandle:{pattern:/<(?![<=])\S*>|\b_\b/,alias:"symbol"},vstring:{pattern:/v\d+(\.\d+)*|\d+(\.\d+){2,}/,alias:"string"},"function":{pattern:/sub [a-z0-9_]+/i,inside:{keyword:/sub/}},keyword:/\b(any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/,number:/\b-?(0x[\dA-Fa-f](_?[\dA-Fa-f])*|0b[01](_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)\b/,operator:/-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,punctuation:/[{}[\];(),:]/},Prism.languages.php=Prism.languages.extend("clike",{keyword:/\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,constant:/\b[A-Z0-9_]{2,}\b/,comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/,lookbehind:!0}}),Prism.languages.insertBefore("php","class-name",{"shell-comment":{pattern:/(^|[^\\])#.*/,lookbehind:!0,alias:"comment"}}),Prism.languages.insertBefore("php","keyword",{delimiter:/\?>|<\?(?:php)?/i,variable:/\$\w+\b/i,"package":{pattern:/(\\|namespace\s+|use\s+)[\w\\]+/,lookbehind:!0,inside:{punctuation:/\\/}}}),Prism.languages.insertBefore("php","operator",{property:{pattern:/(->)[\w]+/,lookbehind:!0}}),Prism.languages.markup&&(Prism.hooks.add("before-highlight",function(e){"php"===e.language&&(e.tokenStack=[],e.backupCode=e.code,e.code=e.code.replace(/(?:<\?php|<\?)[\w\W]*?(?:\?>)/gi,function(t){return e.tokenStack.push(t),"{{{PHP"+e.tokenStack.length+"}}}"}))}),Prism.hooks.add("before-insert",function(e){"php"===e.language&&(e.code=e.backupCode,delete e.backupCode)}),Prism.hooks.add("after-highlight",function(e){if("php"===e.language){for(var t,i=0;t=e.tokenStack[i];i++)e.highlightedCode=e.highlightedCode.replace("{{{PHP"+(i+1)+"}}}",Prism.highlight(t,e.grammar,"php").replace(/\$/g,"$$$$"));e.element.innerHTML=e.highlightedCode}}),Prism.hooks.add("wrap",function(e){"php"===e.language&&"markup"===e.type&&(e.content=e.content.replace(/(\{\{\{PHP[0-9]+\}\}\})/g,'<span class="token php">$1</span>'))}),Prism.languages.insertBefore("php","comment",{markup:{pattern:/<[^?]\/?(.*?)>/,inside:Prism.languages.markup},php:/\{\{\{PHP[0-9]+\}\}\}/})),Prism.languages.insertBefore("php","variable",{"this":/\$this\b/,global:/\$(?:_(?:SERVER|GET|POST|FILES|REQUEST|SESSION|ENV|COOKIE)|GLOBALS|HTTP_RAW_POST_DATA|argc|argv|php_errormsg|http_response_header)/,scope:{pattern:/\b[\w\\]+::/,inside:{keyword:/(static|self|parent)/,punctuation:/(::|\\)/}}}),Prism.languages.prolog={comment:[/%.+/,/\/\*[\s\S]*?\*\//],string:/(["'])(?:\1\1|\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,builtin:/\b(?:fx|fy|xf[xy]?|yfx?)\b/,variable:/\b[A-Z_]\w*/,"function":/\b[a-z]\w*(?:(?=\()|\/\d+)/,number:/\b\d+\.?\d*/,operator:/[:\\=><\-?*@\/;+^|!$.]+|\b(?:is|mod|not|xor)\b/,punctuation:/[(){}\[\],]/},function(e){e.languages.puppet={heredoc:[{pattern:/(@\("([^"\r\n\/):]+)"(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/(@\(([^"\r\n\/):]+)(?:\/[nrts$uL]*)?\).*(?:\r?\n|\r))(?:.*(?:\r?\n|\r))*?[ \t]*\|?[ \t]*-?[ \t]*\2/,lookbehind:!0,alias:"string",inside:{punctuation:/(?=\S).*\S(?= *$)/}},{pattern:/@\("?(?:[^"\r\n\/):]+)"?(?:\/[nrts$uL]*)?\)/,alias:"string",inside:{punctuation:{pattern:/(\().+?(?=\))/,lookbehind:!0}}}],"multiline-comment":{pattern:/(^|[^\\])\/\*[\s\S]*?\*\//,lookbehind:!0,alias:"comment"},regex:{pattern:/((?:\bnode\s+|[^\s\w\\]\s*))\/(?:[^\/\\]|\\[\s\S])+\/(?:[imx]+\b|\B)/,lookbehind:!0,inside:{"extended-regex":{pattern:/^\/(?:[^\/\\]|\\[\s\S])+\/[im]*x[im]*$/,inside:{comment:/#.*/}}}},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:{pattern:/(["'])(?:\$\{(?:[^'"}]|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}|(?!\1)[^\\]|\\[\s\S])*\1/,inside:{"double-quoted":{pattern:/^"[\s\S]*"$/,inside:{}}}},variable:{pattern:/\$(?:::)?\w+(?:::\w+)*/,inside:{punctuation:/::/}},"attr-name":/(?:\w+|\*)(?=\s*=>)/,"function":[{pattern:/(\.)(?!\d)\w+/,lookbehind:!0},/\b(?:contain|debug|err|fail|include|info|notice|realize|require|tag|warning)\b|\b(?!\d)\w+(?=\()/],number:/\b(?:0x[a-f\d]+|\d+(?:\.\d+)?(?:e-?\d+)?)\b/i,"boolean":/\b(?:true|false)\b/,keyword:/\b(?:application|attr|case|class|consumes|default|define|else|elsif|function|if|import|inherits|node|private|produces|type|undef|unless)\b/,datatype:{pattern:/\b(?:Any|Array|Boolean|Callable|Catalogentry|Class|Collection|Data|Default|Enum|Float|Hash|Integer|NotUndef|Numeric|Optional|Pattern|Regexp|Resource|Runtime|Scalar|String|Struct|Tuple|Type|Undef|Variant)\b/,alias:"symbol"},operator:/=[=~>]?|![=~]?|<(?:<\|?|[=~|-])?|>[>=]?|->?|~>|\|>?>?|[*\/%+?]|\b(?:and|in|or)\b/,punctuation:/[\[\]{}().,;]|:+/};var t=[{pattern:/(^|[^\\])\$\{(?:[^'"{}]|\{[^}]*\}|(["'])(?:(?!\2)[^\\]|\\[\s\S])*\2)+\}/,lookbehind:!0,inside:{"short-variable":{pattern:/(^\$\{)(?!\w+\()(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}},delimiter:{pattern:/^\$/,alias:"variable"},rest:e.util.clone(e.languages.puppet)}},{pattern:/(^|[^\\])\$(?:::)?\w+(?:::\w+)*/,lookbehind:!0,alias:"variable",inside:{punctuation:/::/}}];e.languages.puppet.heredoc[0].inside.interpolation=t,e.languages.puppet.string.inside["double-quoted"].inside.interpolation=t}(Prism),Prism.languages.python={"triple-quoted-string":{pattern:/"""[\s\S]+?"""|'''[\s\S]+?'''/,alias:"string"},comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0},string:/("|')(?:\\?.)*?\1/,"function":{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)[a-z0-9_]+/i,lookbehind:!0},keyword:/\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,"boolean":/\b(?:True|False)\b/,number:/\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,operator:/[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,punctuation:/[{}[\];(),.:]/},Prism.languages.r={comment:/#.*/,string:/(['"])(?:\\?.)*?\1/,"percent-operator":{pattern:/%[^%\s]*%/,alias:"operator"},"boolean":/\b(?:TRUE|FALSE)\b/,ellipsis:/\.\.(?:\.|\d+)/,number:[/\b(?:NaN|Inf)\b/,/\b(?:0x[\dA-Fa-f]+(?:\.\d*)?|\d*\.?\d+)(?:[EePp][+-]?\d+)?[iL]?\b/],keyword:/\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\b/,operator:/->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,punctuation:/[(){}\[\],;]/},Prism.languages.rust={comment:[{pattern:/(^|[^\\])\/\*[\w\W]*?\*\//,lookbehind:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0}],string:[/b?r(#*)"(?:\\?.)*?"\1/,/b?("|')(?:\\?.)*?\1/],keyword:/\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/,attribute:{pattern:/#!?\[.+?\]/,alias:"attr-name"},"function":[/[a-z0-9_]+(?=\s*\()/i,/[a-z0-9_]+!(?=\s*\(|\[)/i],"macro-rules":{pattern:/[a-z0-9_]+!/i,alias:"function"},number:/\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/,"closure-params":{pattern:/\|[^|]*\|(?=\s*[{-])/,inside:{punctuation:/[\|:,]/,operator:/[&*]/}},punctuation:/[{}[\];(),:]|\.+|->/,operator:/[-+*\/%!^=]=?|@|&[&=]?|\|[|=]?|<<?=?|>>?=?/},Prism.languages.sas={datalines:{pattern:/^\s*(?:(?:data)?lines|cards);[\s\S]+?(?:\r?\n|\r);/im,alias:"string",inside:{keyword:{pattern:/^(\s*)(?:(?:data)?lines|cards)/i,lookbehind:!0},punctuation:/;/}},comment:[{pattern:/(^\s*|;\s*)\*.*;/m,lookbehind:!0},/\/\*[\s\S]+?\*\//],datetime:{pattern:/'[^']+'(?:dt?|t)\b/i,alias:"number"},string:/(["'])(?:\1\1|(?!\1)[\s\S])*\1/,keyword:/\b(?:data|else|format|if|input|proc|run|then)\b/i,number:/(?:\B-|\b)(?:[\da-f]+x|\d+(?:\.\d+)?(?:e[+-]?\d+)?)/i,operator:/\*\*?|\|\|?|!!?|¦¦?|<[>=]?|>[<=]?|[-+\/=&]|[~¬^]=?|\b(?:eq|ne|gt|lt|ge|le|in|not)\b/i,punctuation:/[$%@.(){}\[\];,\\]/},Prism.languages.scala=Prism.languages.extend("java",{keyword:/<-|=>|\b(?:abstract|case|catch|class|def|do|else|extends|final|finally|for|forSome|if|implicit|import|lazy|match|new|null|object|override|package|private|protected|return|sealed|self|super|this|throw|trait|try|type|val|var|while|with|yield)\b/,string:/"""[\W\w]*?"""|"(?:[^"\\\r\n]|\\.)*"|'(?:[^\\\r\n']|\\.[^\\']*)'/,builtin:/\b(?:String|Int|Long|Short|Byte|Boolean|Double|Float|Char|Any|AnyRef|AnyVal|Unit|Nothing)\b/,number:/\b(?:0x[\da-f]*\.?[\da-f]+|\d*\.?\d+e?\d*[dfl]?)\b/i,symbol:/'[^\d\s\\]\w*/}),delete Prism.languages.scala["class-name"],delete Prism.languages.scala["function"],Prism.languages.scheme={comment:/;.*/,string:/"(?:[^"\\\r\n]|\\.)*?"|'[^('\s]*/,keyword:{pattern:/(\()(?:define(?:-syntax|-library|-values)?|(?:case-)?lambda|let(?:\*|rec)?(?:-values)?|else|if|cond|begin|delay(?:-force)?|parameterize|guard|set!|(?:quasi-)?quote|syntax-rules)/,lookbehind:!0},builtin:{pattern:/(\()(?:(?:cons|car|cdr|list|call-with-current-continuation|call\/cc|append|abs|apply|eval)\b|null\?|pair\?|boolean\?|eof-object\?|char\?|procedure\?|number\?|port\?|string\?|vector\?|symbol\?|bytevector\?)/,lookbehind:!0},number:{pattern:/(\s|\))[-+]?[0-9]*\.?[0-9]+(?:\s*[-+]\s*[0-9]*\.?[0-9]+i)?\b/,lookbehind:!0},"boolean":/#[tf]/,operator:{pattern:/(\()(?:[-+*%\/]|[<>]=?|=>?)/,lookbehind:!0},"function":{pattern:/(\()[^\s()]*(?=\s)/,lookbehind:!0},punctuation:/[()]/},Prism.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\w\W]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},string:{pattern:/(^|[^@\\])("|')(?:\\?[\s\S])*?\2/,lookbehind:!0},variable:/@[\w.$]+|@("|'|`)(?:\\?[\s\S])+?\1/,"function":/\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATETIME|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\b/i,"boolean":/\b(?:TRUE|FALSE|NULL)\b/i,number:/\b-?(?:0x)?\d*\.?[\da-f]+\b/,operator:/[-+*\/=%^~]|&&?|\|?\||!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},Prism.languages.swift=Prism.languages.extend("clike",{string:{pattern:/("|')(\\(?:\((?:[^()]|\([^)]+\))+\)|\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,inside:{interpolation:{pattern:/\\\((?:[^()]|\([^)]+\))+\)/,inside:{delimiter:{pattern:/^\\\(|\)$/,alias:"variable"}}}}},keyword:/\b(as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|Protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\b/,number:/\b([\d_]+(\.[\de_]+)?|0x[a-f0-9_]+(\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,constant:/\b(nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,atrule:/@\b(IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\b/,builtin:/\b([A-Z]\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\b/}),Prism.languages.swift.string.inside.interpolation.inside.rest=Prism.util.clone(Prism.languages.swift),Prism.languages.twig={comment:/\{#[\s\S]*?#\}/,tag:{pattern:/\{\{[\s\S]*?\}\}|\{%[\s\S]*?%\}/,inside:{ld:{pattern:/^(?:\{\{\-?|\{%\-?\s*\w+)/,inside:{punctuation:/^(?:\{\{|\{%)\-?/,keyword:/\w+/}},rd:{pattern:/\-?(?:%\}|\}\})$/,inside:{punctuation:/.*/}},string:{pattern:/("|')(?:\\?.)*?\1/,inside:{punctuation:/^['"]|['"]$/}},keyword:/\b(?:even|if|odd)\b/,"boolean":/\b(?:true|false|null)\b/,number:/\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+([Ee][-+]?\d+)?)\b/,operator:[{pattern:/(\s)(?:and|b\-and|b\-xor|b\-or|ends with|in|is|matches|not|or|same as|starts with)(?=\s)/,lookbehind:!0},/[=<>]=?|!=|\*\*?|\/\/?|\?:?|[-+~%|]/],property:/\b[a-zA-Z_][a-zA-Z0-9_]*\b/,punctuation:/[()\[\]{}:.,]/}},other:{pattern:/\S(?:[\s\S]*\S)?/,inside:Prism.languages.markup}},Prism.languages.vim={string:/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,comment:/".*/,"function":/\w+(?=\()/,keyword:/\b(?:ab|abbreviate|abc|abclear|abo|aboveleft|al|all|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|ar|args|argu|argument|as|ascii|bad|badd|ba|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bN|bNext|bo|botright|bp|bprevious|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|br|brewind|bro|browse|bufdo|b|buffer|buffers|bun|bunload|bw|bwipeout|ca|cabbrev|cabc|cabclear|caddb|caddbuffer|cad|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cgetb|cgetbuffer|cgete|cgetexpr|cg|cgetfile|c|change|changes|chd|chdir|che|checkpath|checkt|checktime|cla|clast|cl|clist|clo|close|cmapc|cmapclear|cnew|cnewer|cn|cnext|cN|cNext|cnf|cnfile|cNfcNfile|cnorea|cnoreabbrev|col|colder|colo|colorscheme|comc|comclear|comp|compiler|conf|confirm|con|continue|cope|copen|co|copy|cpf|cpfile|cp|cprevious|cq|cquit|cr|crewind|cuna|cunabbrev|cu|cunmap|cw|cwindow|debugg|debuggreedy|delc|delcommand|d|delete|delf|delfunction|delm|delmarks|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|di|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|earlier|echoe|echoerr|echom|echomsg|echon|e|edit|el|else|elsei|elseif|em|emenu|endfo|endfor|endf|endfunction|endfun|en|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fina|finally|fin|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|folddoc|folddoclosed|foldd|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|ha|hardcopy|h|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iuna|iunabbrev|iu|iunmap|j|join|ju|jumps|k|keepalt|keepj|keepjumps|kee|keepmarks|laddb|laddbuffer|lad|laddexpr|laddf|laddfile|lan|language|la|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|let|left|lefta|leftabove|lex|lexpr|lf|lfile|lfir|lfirst|lgetb|lgetbuffer|lgete|lgetexpr|lg|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|l|list|ll|lla|llast|lli|llist|lmak|lmake|lm|lmap|lmapc|lmapclear|lnew|lnewer|lne|lnext|lN|lNext|lnf|lnfile|lNf|lNfile|ln|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lpf|lpfile|lp|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|mak|make|ma|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkvie|mkview|mkv|mkvimrc|mod|mode|m|move|mzf|mzfile|mz|mzscheme|nbkey|new|n|next|N|Next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|omapc|omapclear|on|only|o|open|opt|options|ou|ounmap|pc|pclose|ped|pedit|pe|perl|perld|perldo|po|pop|popu|popu|popup|pp|ppop|pre|preserve|prev|previous|p|print|P|Print|profd|profdel|prof|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptN|ptNext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|pyf|pyfile|py|python|qa|qall|q|quit|quita|quitall|r|read|rec|recover|redi|redir|red|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|rub|ruby|rubyd|rubydo|rubyf|rubyfile|ru|runtime|rv|rviminfo|sal|sall|san|sandbox|sa|sargument|sav|saveas|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbN|sbNext|sbp|sbprevious|sbr|sbrewind|sb|sbuffer|scripte|scriptencoding|scrip|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sla|slast|sl|sleep|sm|smagic|sm|smap|smapc|smapclear|sme|smenu|sn|snext|sN|sNext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|sor|sort|so|source|spelld|spelldump|spe|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|sp|split|spr|sprevious|sre|srewind|sta|stag|startg|startgreplace|star|startinsert|startr|startreplace|stj|stjump|st|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tab|tabc|tabclose|tabd|tabdo|tabe|tabedit|tabf|tabfind|tabfir|tabfirst|tabl|tablast|tabm|tabmove|tabnew|tabn|tabnext|tabN|tabNext|tabo|tabonly|tabp|tabprevious|tabr|tabrewind|tabs|ta|tag|tags|tc|tcl|tcld|tcldo|tclf|tclfile|te|tearoff|tf|tfirst|th|throw|tj|tjump|tl|tlast|tm|tm|tmenu|tn|tnext|tN|tNext|to|topleft|tp|tprevious|tr|trewind|try|ts|tselect|tu|tu|tunmenu|una|unabbreviate|u|undo|undoj|undojoin|undol|undolist|unh|unhide|unlet|unlo|unlockvar|unm|unmap|up|update|verb|verbose|ve|version|vert|vertical|vie|view|vim|vimgrep|vimgrepa|vimgrepadd|vi|visual|viu|viusage|vmapc|vmapclear|vne|vnew|vs|vsplit|vu|vunmap|wa|wall|wh|while|winc|wincmd|windo|winp|winpos|win|winsize|wn|wnext|wN|wNext|wp|wprevious|wq|wqa|wqall|w|write|ws|wsverb|wv|wviminfo|X|xa|xall|x|xit|xm|xmap|xmapc|xmapclear|xme|xmenu|XMLent|XMLns|xn|xnoremap|xnoreme|xnoremenu|xu|xunmap|y|yank)\b/,builtin:/\b(?:autocmd|acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir|verbosefile|vfile|viewdir|viewoptions|viminfo|virtualedit|visualbell|vop|wak|warn|wb|wc|wcm|wd|weirdinvert|wfh|wfw|whichwrap|wi|wig|wildchar|wildcharm|wildignore|wildmenu|wildmode|wildoptions|wim|winaltkeys|window|winfixheight|winfixwidth|winheight|winminheight|winminwidth|winwidth|wiv|wiw|wm|wmh|wmnu|wmw|wop|wrap|wrapmargin|wrapscan|writeany|writebackup|writedelay|ww|noacd|noai|noakm|noallowrevins|noaltkeymap|noanti|noantialias|noar|noarab|noarabic|noarabicshape|noari|noarshape|noautochdir|noautoindent|noautoread|noautowrite|noautowriteall|noaw|noawa|nobackup|noballooneval|nobeval|nobin|nobinary|nobiosk|nobioskey|nobk|nobl|nobomb|nobuflisted|nocf|noci|nocin|nocindent|nocompatible|noconfirm|noconsk|noconskey|nocopyindent|nocp|nocscopetag|nocscopeverbose|nocst|nocsverb|nocuc|nocul|nocursorcolumn|nocursorline|nodeco|nodelcombine|nodg|nodiff|nodigraph|nodisable|noea|noeb|noed|noedcompatible|noek|noendofline|noeol|noequalalways|noerrorbells|noesckeys|noet|noex|noexpandtab|noexrc|nofen|nofk|nofkmap|nofoldenable|nogd|nogdefault|noguipty|nohid|nohidden|nohk|nohkmap|nohkmapp|nohkp|nohls|noic|noicon|noignorecase|noim|noimc|noimcmdline|noimd|noincsearch|noinf|noinfercase|noinsertmode|nois|nojoinspaces|nojs|nolazyredraw|nolbr|nolinebreak|nolisp|nolist|noloadplugins|nolpl|nolz|noma|nomacatsui|nomagic|nomh|noml|nomod|nomodeline|nomodifiable|nomodified|nomore|nomousef|nomousefocus|nomousehide|nonu|nonumber|noodev|noopendevice|nopaste|nopi|nopreserveindent|nopreviewwindow|noprompt|nopvw|noreadonly|noremap|norestorescreen|norevins|nori|norightleft|norightleftcmd|norl|norlc|noro|nors|noru|noruler|nosb|nosc|noscb|noscrollbind|noscs|nosecure|nosft|noshellslash|noshelltemp|noshiftround|noshortname|noshowcmd|noshowfulltag|noshowmatch|noshowmode|nosi|nosm|nosmartcase|nosmartindent|nosmarttab|nosmd|nosn|nosol|nospell|nosplitbelow|nosplitright|nospr|nosr|nossl|nosta|nostartofline|nostmp|noswapfile|noswf|nota|notagbsearch|notagrelative|notagstack|notbi|notbidi|notbs|notermbidi|noterse|notextauto|notextmode|notf|notgst|notildeop|notimeout|notitle|noto|notop|notr|nottimeout|nottybuiltin|nottyfast|notx|novb|novisualbell|nowa|nowarn|nowb|noweirdinvert|nowfh|nowfw|nowildmenu|nowinfixheight|nowinfixwidth|nowiv|nowmnu|nowrap|nowrapscan|nowrite|nowriteany|nowritebackup|nows|invacd|invai|invakm|invallowrevins|invaltkeymap|invanti|invantialias|invar|invarab|invarabic|invarabicshape|invari|invarshape|invautochdir|invautoindent|invautoread|invautowrite|invautowriteall|invaw|invawa|invbackup|invballooneval|invbeval|invbin|invbinary|invbiosk|invbioskey|invbk|invbl|invbomb|invbuflisted|invcf|invci|invcin|invcindent|invcompatible|invconfirm|invconsk|invconskey|invcopyindent|invcp|invcscopetag|invcscopeverbose|invcst|invcsverb|invcuc|invcul|invcursorcolumn|invcursorline|invdeco|invdelcombine|invdg|invdiff|invdigraph|invdisable|invea|inveb|inved|invedcompatible|invek|invendofline|inveol|invequalalways|inverrorbells|invesckeys|invet|invex|invexpandtab|invexrc|invfen|invfk|invfkmap|invfoldenable|invgd|invgdefault|invguipty|invhid|invhidden|invhk|invhkmap|invhkmapp|invhkp|invhls|invhlsearch|invic|invicon|invignorecase|invim|invimc|invimcmdline|invimd|invincsearch|invinf|invinfercase|invinsertmode|invis|invjoinspaces|invjs|invlazyredraw|invlbr|invlinebreak|invlisp|invlist|invloadplugins|invlpl|invlz|invma|invmacatsui|invmagic|invmh|invml|invmod|invmodeline|invmodifiable|invmodified|invmore|invmousef|invmousefocus|invmousehide|invnu|invnumber|invodev|invopendevice|invpaste|invpi|invpreserveindent|invpreviewwindow|invprompt|invpvw|invreadonly|invremap|invrestorescreen|invrevins|invri|invrightleft|invrightleftcmd|invrl|invrlc|invro|invrs|invru|invruler|invsb|invsc|invscb|invscrollbind|invscs|invsecure|invsft|invshellslash|invshelltemp|invshiftround|invshortname|invshowcmd|invshowfulltag|invshowmatch|invshowmode|invsi|invsm|invsmartcase|invsmartindent|invsmarttab|invsmd|invsn|invsol|invspell|invsplitbelow|invsplitright|invspr|invsr|invssl|invsta|invstartofline|invstmp|invswapfile|invswf|invta|invtagbsearch|invtagrelative|invtagstack|invtbi|invtbidi|invtbs|invtermbidi|invterse|invtextauto|invtextmode|invtf|invtgst|invtildeop|invtimeout|invtitle|invto|invtop|invtr|invttimeout|invttybuiltin|invttyfast|invtx|invvb|invvisualbell|invwa|invwarn|invwb|invweirdinvert|invwfh|invwfw|invwildmenu|invwinfixheight|invwinfixwidth|invwiv|invwmnu|invwrap|invwrapscan|invwrite|invwriteany|invwritebackup|invws|t_AB|t_AF|t_al|t_AL|t_bc|t_cd|t_ce|t_Ce|t_cl|t_cm|t_Co|t_cs|t_Cs|t_CS|t_CV|t_da|t_db|t_dl|t_DL|t_EI|t_F1|t_F2|t_F3|t_F4|t_F5|t_F6|t_F7|t_F8|t_F9|t_fs|t_IE|t_IS|t_k1|t_K1|t_k2|t_k3|t_K3|t_k4|t_K4|t_k5|t_K5|t_k6|t_K6|t_k7|t_K7|t_k8|t_K8|t_k9|t_K9|t_KA|t_kb|t_kB|t_KB|t_KC|t_kd|t_kD|t_KD|t_ke|t_KE|t_KF|t_KG|t_kh|t_KH|t_kI|t_KI|t_KJ|t_KK|t_kl|t_KL|t_kN|t_kP|t_kr|t_ks|t_ku|t_le|t_mb|t_md|t_me|t_mr|t_ms|t_nd|t_op|t_RI|t_RV|t_Sb|t_se|t_Sf|t_SI|t_so|t_sr|t_te|t_ti|t_ts|t_ue|t_us|t_ut|t_vb|t_ve|t_vi|t_vs|t_WP|t_WS|t_xs|t_ZH|t_ZR)\b/,
+number:/\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,operator:/\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\/%?]|\b(?:is(?:not)?)\b/,punctuation:/[{}[\](),;:]/},Prism.languages.yaml={scalar:{pattern:/([\-:]\s*(![^\s]+)?[ \t]*[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)[^\r\n]+(?:\3[^\r\n]+)*)/,lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:/(\s*[:\-,[{\r\n?][ \t]*(![^\s]+)?[ \t]*)[^\r\n{[\]},#]+?(?=\s*:\s)/,lookbehind:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(\d{4}-\d\d?-\d\d?([tT]|[ \t]+)\d\d?:\d{2}:\d{2}(\.\d*)?[ \t]*(Z|[-+]\d\d?(:\d{2})?)?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(:\d{2}(\.\d*)?)?)(?=[ \t]*($|,|]|}))/m,lookbehind:!0,alias:"number"},"boolean":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(true|false)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},"null":{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)(null|~)[ \t]*(?=$|,|]|})/im,lookbehind:!0,alias:"important"},string:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)("(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?=[ \t]*($|,|]|}))/m,lookbehind:!0},number:{pattern:/([:\-,[{]\s*(![^\s]+)?[ \t]*)[+\-]?(0x[\da-f]+|0o[0-7]+|(\d+\.?\d*|\.?\d+)(e[\+\-]?\d+)?|\.inf|\.nan)[ \t]*(?=$|,|]|})/im,lookbehind:!0},tag:/![^\s]+/,important:/[&*][\w]+/,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},function(){"undefined"!=typeof self&&self.Prism&&self.document&&Prism.hooks.add("complete",function(e){if(e.code){var t=e.element.parentNode,i=/\s*\bline-numbers\b\s*/;if(t&&/pre/i.test(t.nodeName)&&!e.element.querySelector(".line-numbers-rows")){i.test(e.element.className)&&(e.element.className=e.element.className.replace(i,"")),i.test(t.className)||(t.className+=" line-numbers");var n,a=e.code.match(/\n(?!$)/g),r=a?a.length+1:1,s=new Array(r+1);s=s.join("<span></span>"),n=document.createElement("span"),n.className="line-numbers-rows",n.innerHTML=s,t.hasAttribute("data-start")&&(t.style.counterReset="linenumber "+(parseInt(t.getAttribute("data-start"),10)-1)),e.element.appendChild(n)}}})}();
diff --git a/plugins/ckeditor4/prism/plugin.js b/plugins/ckeditor4/prism/plugin.js
new file mode 100644
index 0000000..dcb2179
--- /dev/null
+++ b/plugins/ckeditor4/prism/plugin.js
@@ -0,0 +1,130 @@
+/**
+ * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.md or http://ckeditor.com/license
+ */
+
+/**
+ * @fileOverview Rich code snippets for CKEditor.
+ */
+
+'use strict';
+
+(function() {
+  // Create a new plugin which registers a custom code highlighter
+  // based on Prism.js in order to replace the one that comes
+  // with the Code Snippet plugin.
+  CKEDITOR.plugins.add('prism', {
+    requires: 'codesnippet',
+
+    init: function(editor) {
+      var path = this.path;
+
+      // Loading the prism.js style file.
+      // Idea taken from codesnippet/plugin.js code.
+      // Method is available only if wysiwygarea exists and
+      // CKEditor is at least version 4.4.
+      if (editor.addContentsCss) {
+        editor.addContentsCss(path + 'lib/prism/prism_patched.min.css');
+      }
+
+      // Create a new instance of the highlighter.
+      var prismHighlighter = new CKEDITOR.plugins.codesnippet.highlighter({
+        init: function(ready) {
+          // Load the Prism.js library asynchronously.
+          CKEDITOR.scriptLoader.load(path + 'lib/prism/prism_patched.min.js', function() {
+            // Notify the handler that the library has been loaded.
+            ready();
+          });
+        },
+
+        // Specify the supported languages.
+        languages: {
+          abap: 'ABAP',
+          actionscript: 'ActionScript',
+          apacheconf: 'Apache Conf',
+          applescript: 'AppleScript',
+          aspnet: 'ASP.NET',
+          bash: 'Bash',
+          basic: 'BASIC',
+          c: 'C',
+          coffeescript: 'CoffeeScript',
+          cpp: 'C++',
+          csharp: 'C#',
+          css: 'CSS',
+          d: 'D',
+          dart: 'Dart',
+          diff: 'Diff',
+          docker: 'Docker',
+          erlang: 'Erlang',
+          fortran: 'Fortran',
+          fsharp: 'F#',
+          git: 'Git',
+          go: 'Go',
+          groovy: 'Groovy',
+          haskell: 'Haskell',
+          markup: 'HTML',
+          http: 'HTTP',
+          ini: 'INI',
+          java: 'Java',
+          javascript: 'JavaScript',
+          lua: 'Lua',
+          makefile: 'Makefile',
+          markdown: 'Markdown',
+          matlab: 'MATLAB',
+          nginx: 'Nginx',
+          objectivec: 'Objective-C',
+          pascal: 'Pascal',
+          perl: 'Perl',
+          php: 'PHP',
+          prolog: 'Prolog',
+          python: 'Python',
+          puppet: 'Puppet',
+          r: 'R',
+          ruby: 'Ruby',
+          rust: 'Rust',
+          sas: 'SAS',
+          scala: 'Scala',
+          scheme: 'Scheme',
+          sql: 'SQL',
+          swift: 'Swift',
+          twig: 'Twig',
+          vim: 'vim',
+          yaml: 'YAML',
+        },
+
+        highlighter: function(code, language, callback) {
+          // _self.Prism is a global namespace/object created by Prism.js.
+          var _prism = _self.Prism;
+
+          // Let the Prism.js highlight the code.
+          var highlightedCode = _prism.highlight(code, _prism.languages[language], language);
+
+          // The clever idea below is taken from the 'Line Numbers' plugin
+          // of Prism. Basically, we want to count the number of newlines (\n)
+          // in the highlighted code, then create the same number
+          // of SPAN elements, append them to the highlighted code
+          // and finally number/label them using prism.css.
+          var match = highlightedCode.match(/\n(?!$)/g);
+          var linesNum = match ? match.length + 1 : 1;
+
+          var lines = new Array(linesNum + 1);
+          lines = lines.join('<span></span>');
+
+          // Create the SPAN root/wrapper, insert its child SPAN lines,
+          // then append them to the highlighted code.
+          var lineNumbersWrapper = '<span class="line-numbers-rows">';
+          lineNumbersWrapper += lines;
+          lineNumbersWrapper += '</span>';
+          highlightedCode += lineNumbersWrapper;
+
+          // Return highlighted code.
+          callback(highlightedCode);
+        }
+      });
+
+      // From now on, prismHighlighter will be used as a Code Snippet
+      // highlighter, overwriting the default engine.
+      editor.plugins.codesnippet.setHighlighter(prismHighlighter );
+    }
+  });
+})();
diff --git a/plugins/ckeditor4/selectallcontextmenu/icons/hidpi/selectall.png b/plugins/ckeditor4/selectallcontextmenu/icons/hidpi/selectall.png
new file mode 100644
index 0000000000000000000000000000000000000000..c67f64ddebbb427841df12e95e00bddc3ed8affe
GIT binary patch
literal 1093
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzwj^(N7l!{JxM1({$v_d#0*}aI
zppNSx%;=;syMlp%InL9?F(l&f+v#WXZo3H_um7!>>8UN$vOvBqR^f%O(Sz+Lv{_zc
zKgs2JGVRHn)&6zOhuRvWN`t?ID3&$4^eIdhIeGW3qmb^YO)figFEGhAFr2*k^vs{<
z_Qu|YH8nXun;x|)gm&G#I@N2cQ=R8yhPs!L+=?m<0!)f5UYbjEem|Xa*pj_r%BOjC
zlP#Waxc2Dpl|2zR);~9Q;%HJ>a5XEjN3+M`xyPiIj}<%)n{Vp8TrJ^0spVpZi_Gx{
zf4@YPIcU1BzWV6H2Z3asDF4vPd6QK*#l^)d-dkE&%*ea4YZ7ziJm!M3vSTW~8#h0n
z#O%beWQs(x!Lbe7x4Z9+V^{DEW@~126qummnYmdYsdnGq^vP2WO$b`Fby?hcaXuY4
zX;;C&b@L5)wtG2>xbn0gZgN+hJ$2tFelJeO=Q2RsmSuj_^S!LppD1zZZ5emSswD{%
znF}W+Ob@v5xwUwkn&+Veg9Tx$87HJheykI1sh4KD7Ip0L$GtN8(;q&4`t(}rjy~q^
zS(!6;ettD$@+ZUI6+%p2nuiRQTz~B=>TRjF>qgriefHo^=Fk-B!~ISNqJFQiy07wo
zuARa217@ZBJXaMwxZix>zf8pO#>&<AOyZs=*B0K7f5+S{zjD(x%l4ow)5dU?4HKEK
zS?1;EzbxH7)$jcB<;%4=nl9;dKAtgqw)7>P!&UvliyVrTna)`*S~~fH)z6=Qt6xPa
ziwn$<_nP}%f#saUC!NFErO$yeB**^Xolp7acXQ8e>RBJRC!+Jn`}}(=Ucb(+tN6Jo
zXy3WMz6-r>Un2u<-*nU|Sa>yy(Lkz~Yj2*Jw(`?74pBaf=Mw$L=ggl!{n_5H^8%+C
zzWUzzSi;_W-lZtUiubw)^w-BLOYzp(SY6UPEw@HOk!4fZVlftl)SHbKeV&)M{P1Kf
zIN;)C73g9z^Nwr6>6smuMN)abs{4m+sy)elWKGQ1q)tx76Pwm-xyJ3d%=BD!$l`<R
z^Y6cUUtaE*&Hup9?@PYC-Gbi6_EY)2FDm)uMKnJidoXA5&AiX0%bV}qRn6JH{MFyu
zZ&M%jpP#>TuFp0*bFTNbs@MK~c{TOlyPL+h&d-m&{PM%w%gcoxyn5_Dou|FW&+p3B
z<^D@VXNL*KUu``Xb;ymmsUhD=c9x?<ahbos24m%S+nE3OKW%3T*d3H73Cw<~C9V-A
zDTyViR>?)FK#IZ0z|dINz)aW3AjHtn%D~*pz(m`?$jZRr+oNTkC>nC}Q!>*kacgMb
zFZUIwK@wy`aDG}zd16s2LwR|*US?i)adKios$PCk`s{Z$Qb0uvp00i_>zopr074Mz
A6#xJL

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/selectallcontextmenu/icons/selectall.png b/plugins/ckeditor4/selectallcontextmenu/icons/selectall.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d1e8160e422f8cc3615c2787a26fe0af53dcf06
GIT binary patch
literal 665
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE)4%caKYZ?lYt_f1s;*b
zKpodXn9)gNb_D|i<0elR#}JFtb0?qedgLI|dVcLGe#Z{!Rx|F_9}Ic5CGrlgn?A4}
zX;4U0p3$}F+JBw2Ns`NNFPzDIw6)3V>)qnj85<)ij!9TNS5T^W|8Ot6U}MLJ?Q@C^
zjy?ETkzhAJ_<)4-Bo&X#B84)}*}R&n7SA~jZ!pg4T{<OW7Tfvf!VCfh=O!-GOxqk;
ze)?g-ffS>I)@!e48yu^X5)gc3!N$PT?i`~huHxCWYSjc4PKjjM#;sz$mlv#Bbx!BQ
zJ)nsU0!{}cn4inIExs7tbT;jCmcr5_FH4+eEi*Xg;MMv0XOBi#T+^0oP8=V-E~w2;
zmE5=5pCz~8Z=L*{&)eDet7HiNpZaS%=OvT39Jl_4xqSI5@~=H%Yt%tY_V<6a9oJuP
zo+1=Et+wj0YhVS#grG(1vOP2t*Z#F_wdbt++q#Z@t?AQBzjKybPD?PaHJxF|_Wif4
zYhc3eyGc7^wy9mY_WEnr!Gr}Z0zZEI2-tp`_wmPw$ZSClMFAGZSG(Rd1$ilUE$Zti
z?%SlJ%y8pvnV?|l)IHy`_TP8E{4!)}s^rtkb$h-GCZB0f<XCIE=X;5b+`=hUGx-D`
zvP*L)Cd<?aW&op9wZt`|BqgyV)hf9t6-Y4{85kPt8kp-En1mRbTNxNy85(ID7+Dz@
zDEB1fqiD#@PsvQH#H}Id;*HBd4U!-mg7ec#$`gxH8OqDc^)mCai<1)zQuXqS(r3T3
Rkpe1W@O1TaS?83{1ONfb43+=@

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/af.js b/plugins/ckeditor4/selectallcontextmenu/lang/af.js
new file mode 100644
index 0000000..5cf6770
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/af.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'af', {
+	toolbar: 'Selekteer alles'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ar.js b/plugins/ckeditor4/selectallcontextmenu/lang/ar.js
new file mode 100644
index 0000000..42f47b3
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ar.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ar', {
+	toolbar: 'تحديد الكل'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/bg.js b/plugins/ckeditor4/selectallcontextmenu/lang/bg.js
new file mode 100644
index 0000000..1d63091
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/bg.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'bg', {
+	toolbar: 'Избери всичко'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/bn.js b/plugins/ckeditor4/selectallcontextmenu/lang/bn.js
new file mode 100644
index 0000000..4039808
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/bn.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'bn', {
+	toolbar: 'সব সিলেক্ট করি'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/bs.js b/plugins/ckeditor4/selectallcontextmenu/lang/bs.js
new file mode 100644
index 0000000..ff9d4b0
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/bs.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'bs', {
+	toolbar: 'Selektuj sve'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ca.js b/plugins/ckeditor4/selectallcontextmenu/lang/ca.js
new file mode 100644
index 0000000..2832c34
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ca.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ca', {
+	toolbar: 'Selecciona-ho tot'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/cs.js b/plugins/ckeditor4/selectallcontextmenu/lang/cs.js
new file mode 100644
index 0000000..28ca341
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/cs.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'cs', {
+	toolbar: 'Vybrat vše'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/cy.js b/plugins/ckeditor4/selectallcontextmenu/lang/cy.js
new file mode 100644
index 0000000..b2cda96
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/cy.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'cy', {
+	toolbar: 'Dewis Popeth'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/da.js b/plugins/ckeditor4/selectallcontextmenu/lang/da.js
new file mode 100644
index 0000000..d9a0640
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/da.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'da', {
+	toolbar: 'Vælg alt'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js b/plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js
new file mode 100644
index 0000000..af52684
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/de-ch.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'de-ch', {
+	toolbar: 'Alles auswählen'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/de.js b/plugins/ckeditor4/selectallcontextmenu/lang/de.js
new file mode 100644
index 0000000..7652f9f
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/de.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'de', {
+	toolbar: 'Alles auswählen'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/el.js b/plugins/ckeditor4/selectallcontextmenu/lang/el.js
new file mode 100644
index 0000000..8d396c1
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/el.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'el', {
+	toolbar: 'Επιλογή όλων'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en-au.js b/plugins/ckeditor4/selectallcontextmenu/lang/en-au.js
new file mode 100644
index 0000000..4f359cf
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/en-au.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'en-au', {
+	toolbar: 'Select All'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js b/plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js
new file mode 100644
index 0000000..513d756
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/en-ca.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'en-ca', {
+	toolbar: 'Select All'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js b/plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js
new file mode 100644
index 0000000..3a9f235
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/en-gb.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'en-gb', {
+	toolbar: 'Select All'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/en.js b/plugins/ckeditor4/selectallcontextmenu/lang/en.js
new file mode 100644
index 0000000..646f474
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/en.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'en', {
+	toolbar: 'Select All'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/eo.js b/plugins/ckeditor4/selectallcontextmenu/lang/eo.js
new file mode 100644
index 0000000..ead5243
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/eo.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'eo', {
+	toolbar: 'Elekti ĉion'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/es.js b/plugins/ckeditor4/selectallcontextmenu/lang/es.js
new file mode 100644
index 0000000..2b32ec1
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/es.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'es', {
+	toolbar: 'Seleccionar Todo'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/et.js b/plugins/ckeditor4/selectallcontextmenu/lang/et.js
new file mode 100644
index 0000000..4a9ca84
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/et.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'et', {
+	toolbar: 'Kõige valimine'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/eu.js b/plugins/ckeditor4/selectallcontextmenu/lang/eu.js
new file mode 100644
index 0000000..5a149d4
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/eu.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'eu', {
+	toolbar: 'Hautatu dena'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fa.js b/plugins/ckeditor4/selectallcontextmenu/lang/fa.js
new file mode 100644
index 0000000..6087960
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/fa.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'fa', {
+	toolbar: 'گزینش همه'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fi.js b/plugins/ckeditor4/selectallcontextmenu/lang/fi.js
new file mode 100644
index 0000000..a91e3c7
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/fi.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'fi', {
+	toolbar: 'Valitse kaikki'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fo.js b/plugins/ckeditor4/selectallcontextmenu/lang/fo.js
new file mode 100644
index 0000000..1c06b4e
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/fo.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'fo', {
+	toolbar: 'Markera alt'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js b/plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js
new file mode 100644
index 0000000..884f3ff
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/fr-ca.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'fr-ca', {
+	toolbar: 'Sélectionner tout'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/fr.js b/plugins/ckeditor4/selectallcontextmenu/lang/fr.js
new file mode 100644
index 0000000..41f4a7f
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/fr.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'fr', {
+	toolbar: 'Tout sélectionner'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/gl.js b/plugins/ckeditor4/selectallcontextmenu/lang/gl.js
new file mode 100644
index 0000000..63de170
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/gl.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'gl', {
+	toolbar: 'Seleccionar todo'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/gu.js b/plugins/ckeditor4/selectallcontextmenu/lang/gu.js
new file mode 100644
index 0000000..d7d14c1
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/gu.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'gu', {
+	toolbar: 'બઘું પસંદ કરવું'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/he.js b/plugins/ckeditor4/selectallcontextmenu/lang/he.js
new file mode 100644
index 0000000..2b9b217
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/he.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'he', {
+	toolbar: 'בחירת הכל'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/hi.js b/plugins/ckeditor4/selectallcontextmenu/lang/hi.js
new file mode 100644
index 0000000..10c72e4
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/hi.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'hi', {
+	toolbar: 'सब सॅलॅक्ट करें'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/hr.js b/plugins/ckeditor4/selectallcontextmenu/lang/hr.js
new file mode 100644
index 0000000..80c38da
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/hr.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'hr', {
+	toolbar: 'Odaberi sve'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/hu.js b/plugins/ckeditor4/selectallcontextmenu/lang/hu.js
new file mode 100644
index 0000000..89b109e
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/hu.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'hu', {
+	toolbar: 'Mindent kijelöl'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/id.js b/plugins/ckeditor4/selectallcontextmenu/lang/id.js
new file mode 100644
index 0000000..df8a9b3
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/id.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'id', {
+	toolbar: 'Pilih Semua'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/is.js b/plugins/ckeditor4/selectallcontextmenu/lang/is.js
new file mode 100644
index 0000000..9c58c6d
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/is.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'is', {
+	toolbar: 'Velja allt'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/it.js b/plugins/ckeditor4/selectallcontextmenu/lang/it.js
new file mode 100644
index 0000000..c0b164b
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/it.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'it', {
+	toolbar: 'Seleziona tutto'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ja.js b/plugins/ckeditor4/selectallcontextmenu/lang/ja.js
new file mode 100644
index 0000000..7f54832
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ja.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ja', {
+	toolbar: 'すべて選択'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ka.js b/plugins/ckeditor4/selectallcontextmenu/lang/ka.js
new file mode 100644
index 0000000..1530fbf
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ka.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ka', {
+	toolbar: 'ყველაფრის მონიშნვა'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/km.js b/plugins/ckeditor4/selectallcontextmenu/lang/km.js
new file mode 100644
index 0000000..5c10e58
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/km.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'km', {
+	toolbar: 'រើស​ទាំង​អស់'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ko.js b/plugins/ckeditor4/selectallcontextmenu/lang/ko.js
new file mode 100644
index 0000000..ca3f466
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ko.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ko', {
+	toolbar: '모두 선택'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ku.js b/plugins/ckeditor4/selectallcontextmenu/lang/ku.js
new file mode 100644
index 0000000..8430686
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ku.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ku', {
+	toolbar: 'دیاریکردنی هەمووی'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/lt.js b/plugins/ckeditor4/selectallcontextmenu/lang/lt.js
new file mode 100644
index 0000000..f838eb7
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/lt.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'lt', {
+	toolbar: 'Pažymėti viską'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/lv.js b/plugins/ckeditor4/selectallcontextmenu/lang/lv.js
new file mode 100644
index 0000000..ff9a49a
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/lv.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'lv', {
+	toolbar: 'Iezīmēt visu'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/mk.js b/plugins/ckeditor4/selectallcontextmenu/lang/mk.js
new file mode 100644
index 0000000..3d9ee48
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/mk.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'mk', {
+	toolbar: 'Select All' // MISSING
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/mn.js b/plugins/ckeditor4/selectallcontextmenu/lang/mn.js
new file mode 100644
index 0000000..6837464
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/mn.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'mn', {
+	toolbar: 'Бүгдийг нь сонгох'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ms.js b/plugins/ckeditor4/selectallcontextmenu/lang/ms.js
new file mode 100644
index 0000000..450c96a
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ms.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ms', {
+	toolbar: 'Pilih Semua'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/nb.js b/plugins/ckeditor4/selectallcontextmenu/lang/nb.js
new file mode 100644
index 0000000..cfaee81
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/nb.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'nb', {
+	toolbar: 'Merk alt'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/nl.js b/plugins/ckeditor4/selectallcontextmenu/lang/nl.js
new file mode 100644
index 0000000..badc585
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/nl.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'nl', {
+	toolbar: 'Alles selecteren'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/no.js b/plugins/ckeditor4/selectallcontextmenu/lang/no.js
new file mode 100644
index 0000000..22875dc
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/no.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'no', {
+	toolbar: 'Merk alt'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/pl.js b/plugins/ckeditor4/selectallcontextmenu/lang/pl.js
new file mode 100644
index 0000000..2c76868
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/pl.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'pl', {
+	toolbar: 'Zaznacz wszystko'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js b/plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js
new file mode 100644
index 0000000..1141b9c
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/pt-br.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'pt-br', {
+	toolbar: 'Selecionar Tudo'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/pt.js b/plugins/ckeditor4/selectallcontextmenu/lang/pt.js
new file mode 100644
index 0000000..2a615d5
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/pt.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'pt', {
+	toolbar: 'Selecionar tudo'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ro.js b/plugins/ckeditor4/selectallcontextmenu/lang/ro.js
new file mode 100644
index 0000000..647a6fb
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ro.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ro', {
+	toolbar: 'Selectează tot'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ru.js b/plugins/ckeditor4/selectallcontextmenu/lang/ru.js
new file mode 100644
index 0000000..95fb454
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ru.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ru', {
+	toolbar: 'Выделить все'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/si.js b/plugins/ckeditor4/selectallcontextmenu/lang/si.js
new file mode 100644
index 0000000..62a760c
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/si.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'si', {
+	toolbar: 'සියල්ලම '
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sk.js b/plugins/ckeditor4/selectallcontextmenu/lang/sk.js
new file mode 100644
index 0000000..329d3f1
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/sk.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'sk', {
+	toolbar: 'Vybrať všetko'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sl.js b/plugins/ckeditor4/selectallcontextmenu/lang/sl.js
new file mode 100644
index 0000000..5ef1c08
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/sl.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'sl', {
+	toolbar: 'Izberi vse'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sq.js b/plugins/ckeditor4/selectallcontextmenu/lang/sq.js
new file mode 100644
index 0000000..ecfedd7
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/sq.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'sq', {
+	toolbar: 'Përzgjidh të Gjitha'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js b/plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js
new file mode 100644
index 0000000..cb18bc3
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/sr-latn.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'sr-latn', {
+	toolbar: 'Označi sve'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sr.js b/plugins/ckeditor4/selectallcontextmenu/lang/sr.js
new file mode 100644
index 0000000..7cdf2c2
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/sr.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'sr', {
+	toolbar: 'Означи све'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/sv.js b/plugins/ckeditor4/selectallcontextmenu/lang/sv.js
new file mode 100644
index 0000000..ce3b700
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/sv.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'sv', {
+	toolbar: 'Markera allt'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/th.js b/plugins/ckeditor4/selectallcontextmenu/lang/th.js
new file mode 100644
index 0000000..5f70890
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/th.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'th', {
+	toolbar: 'เลือกทั้งหมด'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/tr.js b/plugins/ckeditor4/selectallcontextmenu/lang/tr.js
new file mode 100644
index 0000000..3458438
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/tr.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'tr', {
+	toolbar: 'Tümünü Seç'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/tt.js b/plugins/ckeditor4/selectallcontextmenu/lang/tt.js
new file mode 100644
index 0000000..73d5606
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/tt.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'tt', {
+	toolbar: 'Барысын сайлау'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/ug.js b/plugins/ckeditor4/selectallcontextmenu/lang/ug.js
new file mode 100644
index 0000000..d7151cd
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/ug.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'ug', {
+	toolbar: 'ھەممىنى تاللا'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/uk.js b/plugins/ckeditor4/selectallcontextmenu/lang/uk.js
new file mode 100644
index 0000000..9cd9d2e
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/uk.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'uk', {
+	toolbar: 'Виділити все'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/vi.js b/plugins/ckeditor4/selectallcontextmenu/lang/vi.js
new file mode 100644
index 0000000..7fc1ff3
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/vi.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'vi', {
+	toolbar: 'Chọn tất cả'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js b/plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js
new file mode 100644
index 0000000..e9a1b51
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/zh-cn.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'zh-cn', {
+	toolbar: '全选'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/lang/zh.js b/plugins/ckeditor4/selectallcontextmenu/lang/zh.js
new file mode 100644
index 0000000..a6b7428
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/lang/zh.js
@@ -0,0 +1,7 @@
+/*
+Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang( 'selectall', 'zh', {
+	toolbar: '全選'
+} );
diff --git a/plugins/ckeditor4/selectallcontextmenu/plugin.js b/plugins/ckeditor4/selectallcontextmenu/plugin.js
new file mode 100644
index 0000000..7e894e9
--- /dev/null
+++ b/plugins/ckeditor4/selectallcontextmenu/plugin.js
@@ -0,0 +1,76 @@
+/**
+ *  Developer: Ahmad Faiyaz ( faiyaz26 [at] gmail [dot] com )
+ */
+
+/**
+ * @fileOverview The "selectallcontextmenu" plugin provides an editor command that
+ *               allows selecting the entire content of editable area.
+ *               This plugin also enables a context menu button for the feature.
+ */
+
+(function() {
+    CKEDITOR.plugins.add('selectallcontextmenu', {
+        // jscs:disable maximumLineLength
+        lang: 'af,ar,bg,bn,bs,ca,cs,cy,da,de,de-ch,el,en,en-au,en-ca,en-gb,eo,es,et,eu,fa,fi,fo,fr,fr-ca,gl,gu,he,hi,hr,hu,id,is,it,ja,ka,km,ko,ku,lt,lv,mk,mn,ms,nb,nl,no,pl,pt,pt-br,ro,ru,si,sk,sl,sq,sr,sr-latn,sv,th,tr,tt,ug,uk,vi,zh,zh-cn', // %REMOVE_LINE_CORE%
+        // jscs:enable maximumLineLength
+        icons: 'selectall', // %REMOVE_LINE_CORE%
+        hidpi: true,
+        init: function(editor) {
+            editor.addCommand('selectallcontextmenu', {
+                modes: { wysiwyg: 1, source: 1 },
+                exec: function(editor) {
+                    var editable = editor.editable();
+
+                    if (editable.is('textarea')) {
+                        var textarea = editable.$;
+
+                        if (CKEDITOR.env.ie)
+                            textarea.createTextRange().execCommand('SelectAll');
+                        else {
+                            textarea.selectionStart = 0;
+                            textarea.selectionEnd = textarea.value.length;
+                        }
+
+                        textarea.focus();
+                    } else {
+                        if (editable.is('body'))
+                            editor.document.$.execCommand('SelectAll', false, null);
+                        else {
+                            var range = editor.createRange();
+                            range.selectNodeContents(editable);
+                            range.select();
+                        }
+
+                        // Force triggering selectionChange (#7008)
+                        editor.forceNextSelectionCheck();
+                        editor.selectionChange();
+                    }
+
+                },
+                canUndo: false
+            });
+
+
+            if (editor.addMenuItems) {
+                editor.addMenuGroup('selectallcontextmenu', 3);
+
+                editor.addMenuItems({
+                    selectall: {
+                        label: editor.lang.selectall.toolbar,
+                        group: 'selectallcontextmenu',
+                        order: 21,
+                        command: 'selectallcontextmenu'
+                    }
+                });
+            }
+
+            if (editor.contextMenu) {
+                editor.contextMenu.addListener(function(element, selection) {
+                    return {
+                        selectall: CKEDITOR.TRISTATE_OFF
+                    };
+                });
+            }
+        }
+    });
+})();
diff --git a/plugins/ckeditor4/smallerselection/plugin.js b/plugins/ckeditor4/smallerselection/plugin.js
new file mode 100644
index 0000000..12f7fba
--- /dev/null
+++ b/plugins/ckeditor4/smallerselection/plugin.js
@@ -0,0 +1,80 @@
+/**
+ * @file Smaller Selection plugin for CKEditor
+ * Copyright (C) 2012 Alfonso Martínez de Lizarrondo
+ * Available under the GPL/LGPL/MPL
+ * Fixes http://dev.ckeditor.com/ticket/8690
+ * version 0.1.1 24/05/2016
+ * Sponsored by: Netmedia.org
+ */
+
+/* globals CKEDITOR */
+
+CKEDITOR.plugins.add( 'smallerselection', {
+	init : function( editor ) {
+		var trimSelection = function( event ) {
+			var sel = editor.getSelection(),
+				range = sel && sel.getRanges()[ 0 ],
+				custom = false;
+
+			if ( !range || range.collapsed )
+				return;
+
+			// If it's selecting different nodes, adjust to cover only one node (if possible?)
+			if ( range.startContainer && range.endContainer && !range.startContainer.equals( range.endContainer) &&
+				range.startContainer.type == CKEDITOR.NODE_TEXT ) {
+				var start = range.startContainer,
+					startOffset = range.startOffset,
+					end = range.endContainer,
+					endOffset = range.endOffset,
+					startText = start.getText();
+
+				// Move forward the start if it's at the end of a text node
+				if ( startOffset == startText.length ) {
+					start = start.getNextSourceNode( false, CKEDITOR.NODE_TEXT );
+					startOffset = 0;
+				}
+
+				// Move back the end if it's at the start of a text node
+				if ( end.type == CKEDITOR.NODE_TEXT && endOffset == 0 ) {
+					end = end.getPreviousSourceNode( false, CKEDITOR.NODE_TEXT );
+					endOffset = end.getText().length;
+				}
+
+				// IE might put as end container a node instead of a text node sometimes
+				if ( end.type == CKEDITOR.NODE_ELEMENT ) {
+					// get the node
+					end = end.getChild( endOffset );
+					// move back to the end of a text node
+					end = end.getPreviousSourceNode( true, CKEDITOR.NODE_TEXT );
+					endOffset = end.getText().length;
+				}
+
+				// If we have modified some of the anchors nodes:
+				if ( !range.startContainer.equals( start ) || !range.endContainer.equals( end ) ) {
+					range.startContainer = start;
+					range.endContainer = end;
+					range.startOffset = startOffset;
+					range.endOffset = endOffset;
+					custom = true;
+				}
+			}
+
+			// Trim right
+			if ( range.endContainer.type == CKEDITOR.NODE_TEXT && range.endOffset > 0 && range.endContainer.getText().substr( range.endOffset - 1 , 1 ) == ' ' ) {
+				range.endOffset -= 1;
+				custom = true;
+			}
+
+			if ( custom )
+				range.select();
+		};
+
+		editor.on( 'contentDom', function() {
+			// Try to adjust text selection by double click to not include trailing space
+			editor.document.on( 'dblclick', trimSelection );
+
+			editor.document.on( 'mouseup', trimSelection );
+		});
+	}
+} );
+
diff --git a/plugins/ckeditor4/symbol/dialogs/lang/en.js b/plugins/ckeditor4/symbol/dialogs/lang/en.js
new file mode 100644
index 0000000..ae8759c
--- /dev/null
+++ b/plugins/ckeditor4/symbol/dialogs/lang/en.js
@@ -0,0 +1,181 @@
+CKEDITOR.plugins.setLang("symbol","en",{32:"Space",33:"Exclamation mark",34:"Quotation mark",35:"Number sign",36:"Dollar sign",37:"Percent sign",38:"Ampersand",39:"Apostrophe",40:"Left parenthesis",41:"Right parenthesis",42:"Asterisk",43:"Plus sign",44:"Comma",45:"Hyphen-minus",46:"Full stop",47:"Solidus",48:"Digit 0",49:"Digit 1",50:"Digit 2",51:"Digit 3",52:"Digit 4",53:"Digit 5",54:"Digit 6",55:"Digit 7",56:"Digit 8",57:"Digit 9",58:"Colon",59:"Semicolon",60:"Less-than sign",61:"Equals sign",62:"Greater-than sign",
+63:"Question mark",64:"Commercial at",65:"Latin capital letter A",66:"Latin capital letter B",67:"Latin capital letter C",68:"Latin capital letter D",69:"Latin capital letter E",70:"Latin capital letter F",71:"Latin capital letter G",72:"Latin capital letter H",73:"Latin capital letter I",74:"Latin capital letter J",75:"Latin capital letter K",76:"Latin capital letter L",77:"Latin capital letter M",78:"Latin capital letter N",79:"Latin capital letter O",80:"Latin capital letter P",81:"Latin capital letter Q",
+82:"Latin capital letter R",83:"Latin capital letter S",84:"Latin capital letter T",85:"Latin capital letter U",86:"Latin capital letter V",87:"Latin capital letter W",88:"Latin capital letter X",89:"Latin capital letter Y",90:"Latin capital letter Z",91:"Left square bracket",92:"Reverse solidus",93:"Right square bracket",94:"Circumflex accent",95:"Low line",96:"Grave accent",97:"Latin small letter a",98:"Latin small letter b",99:"Latin small letter c",100:"Latin small letter d",101:"Latin small letter e",
+102:"Latin small letter f",103:"Latin small letter g",104:"Latin small letter h",105:"Latin small letter i",106:"Latin small letter j",107:"Latin small letter k",108:"Latin small letter l",109:"Latin small letter m",110:"Latin small letter n",111:"Latin small letter o",112:"Latin small letter p",113:"Latin small letter q",114:"Latin small letter r",115:"Latin small letter s",116:"Latin small letter t",117:"Latin small letter u",118:"Latin small letter v",119:"Latin small letter w",120:"Latin small letter x",
+121:"Latin small letter y",122:"Latin small letter z",123:"Left curly bracket",124:"Vertical line",125:"Right curly bracket",126:"Tilde",160:"No-break space",161:"Inverted exclamation mark",162:"Cent sign",163:"Pound sign",164:"Currency sign",165:"Yen sign",166:"Broken bar",167:"Section sign",168:"Diaeresis",169:"Copyright sign",170:"Feminine ordinal indicator",171:"Left-pointing double angle quotation mark",172:"Not sign",173:"Soft hyphen",174:"Registered sign",175:"Macron",176:"Degree sign",177:"Plus-minus sign",
+178:"Superscript two",179:"Superscript three",180:"Acute accent",181:"Micro sign",182:"Pilcrow sign",183:"Middle dot",184:"Cedilla",185:"Superscript one",186:"Masculine ordinal indicator",187:"Right-pointing double angle quotation mark",188:"Vulgar fraction one quarter",189:"Vulgar fraction one half",190:"Vulgar fraction three quarters",191:"Inverted question mark",192:"Latin capital letter A with grave",193:"Latin capital letter A with acute",194:"Latin capital letter A with circumflex",195:"Latin capital letter A with tilde",
+196:"Latin capital letter A with diaeresis",197:"Latin capital letter A with ring above",198:"Latin capital letter AE",199:"Latin capital letter C with cedilla",200:"Latin capital letter E with grave",201:"Latin capital letter E with acute",202:"Latin capital letter E with circumflex",203:"Latin capital letter E with diaeresis",204:"Latin capital letterI with grave",205:"Latin capital letter I with acute",206:"Latin capital letter I with circumflex",207:"Latin capital letter I with diaeresis",208:"Latin capital letter ETH",
+209:"Latin capital letter N with tilde",210:"Latin capital letter O with grave",211:"Latin capital letter O with acute",212:"Latin capital letter O with circumflex",213:"Latin capital letter O with tilde",214:"Latin capital letter O with diaeresis",215:"Multiplication sign",216:"Latin capital letter O with stroke",217:"Latin capital letter U with grave",218:"Latin capital letter U with acute",219:"Latin capital letter U with circumflex",220:"Latin capital letter U with diaeresis",221:"Latin capital letter Y with acute",
+222:"Latin capital letter THORN",223:"Latin small letter SHARP S",224:"Latin small letter A with grave",225:"Latin small letter A with acute",226:"Latin small letter A with circumflex",227:"Latin small letter A with tilde",228:"Latin small letter A with diaeresis",229:"Latin small letter A with ring above",230:"Latin small letter AE",231:"Latin small letter C with cedilla",232:"Latin small letter E with grave",233:"Latin small letter E with acute",234:"Latin small letter E with circumflex",235:"Latin small letter E with diaeresis",
+236:"Latin small letter I with grave",237:"Latin small letter I with acute",238:"Latin small letter I with circumflex",239:"Latin small letter I with diaeresis",240:"Latin small letter ETH",241:"Latin small letter N with tilde",242:"Latin small letter O with grave",243:"Latin small letter O with acute",244:"Latin small letter O with circumflex",245:"Latin small letter O with tilde",246:"Latin small letter O with diaeresis",247:"Division sign",248:"Latin small letter O with stroke",249:"Latin small letter U with grave",
+250:"Latin small letter U with acute",251:"Latin small letter U with circumflex",252:"Latin small letter U with diaeresis",253:"Latin small letter Y with acute",254:"Latin small letter THORN",255:"Latin small letter Y with diaeresis",256:"Latin capital letter A with macron",257:"Latin small letter A with macron",258:"Latin capital letter A with breve",259:"Latin small letter A with breve",260:"Latin capital letter A with ogonek",261:"Latin small letter A with ogonek",262:"Latin capital letter C with acute",
+263:"Latin small letter C with acute",264:"Latin capital letter C with circumflex",265:"Latin small letter C with circumflex",266:"Latin captial letter C with dot above",267:"Latin small letter C with dot above",268:"Latin capital letter C with caron",269:"Latin small letter C with caron",270:"Latin capital letter D with caron",271:"Latin small letter D with caron",272:"Latin capital letter D with stroke",273:"Latin small letter D with stroke",274:"Latin capital letter E with macron",275:"Latin small letter E with macron",
+276:"Latin capital letter E with breve",277:"Latin small letter E with breve",278:"Latin capital letter E with dot above",279:"Latin small letter E with dot above",280:"Latin capital letter E with ogonek",281:"Latin small letter E with ogonek",282:"Latin capital letter E with caron",283:"Latin small letter E with caron",284:"Latin capital letter G with circumflex",285:"Latin small letter G with circumflex",286:"Latin capital letter G with breve",287:"Latin small letter G with breve",288:"Latin capital letter G with dot above",
+289:"Latin small letter G with dot above",290:"Latin capital letter G with cedilla",291:"Latin small letter G with cedilla",292:"Latin capital letter H with circumflex",293:"Latin small letter H with circumflex",294:"Latin capital letter H with stroke",295:"Latin small letter H with stroke",296:"Latin capital letter I with tilde",297:"Latin small letter I with tilde",298:"Latin capital letter I with macron",299:"Latin small letter I with macron",301:"Latin small letter I with breve",302:"Latin capital letter I with ogonek",
+303:"Latin small letter I with ogonek",304:"Latin capital letter I with dot above",305:"Latin small letter dotless I",306:"Latin capital ligature IJ",307:"Latin small ligature IJ",308:"Latin capital letter J with circumflex",309:"Latin small letter J with circumflex",310:"Latin capital letter K with cedilla",311:"Latin small letter K with cedilla",312:"Latin small letter KRA",313:"Latin capital letter L with acute",314:"Latin small letter L with acute",315:"Latin capital letter L with cedilla",316:"Latin small letter L with cedilla",
+317:"Latin capital letter L with caron",318:"Latin small letter L with caron",319:"Latin capital letter L with middle dot",320:"Latin small letter L with middle dot",321:"Latin capital letter L with stroke",322:"Latin small letter L with stroke",323:"Latin capital letter N with acute",324:"Latin small letter N with acute",325:"Latin capital letter N with cedilla",326:"Latin small letter N with cedilla",327:"Latin capital letter N with caron",328:"Latin small letter N with caron",329:"Latin small letter N proceded by apostrophe (Depricated)",
+330:"Latin capital letter ENG",331:"Latin small letter ENG",332:"Latin capital letter O with macron",333:"Latin small letter O with macron",334:"Latin capital letter O with breve",335:"Latin small letter O with breve",336:"Latin capital letter O with double acute",337:"Latin small letter O with double acute",338:"Latin capital ligature OE",339:"Latin small ligature OE",340:"Latin capital letter R with acute",341:"Latin small letter R with acute",342:"Latin capital letter R with cedilla",343:"Latin small letter R with cedilla",
+344:"Latin capital letter R with caron",345:"Latin small letter R with caron",346:"Latin capital letter S with acute",347:"Latin small letter S with acute",348:"Latin capital letter S with circumflex",349:"Latin small letter S with circumflex",350:"Latin capital letter S with cedilla",351:"Latin small letter S with cedilla",352:"Latin capital letter S with caron",353:"Latin small letter S with caron",354:"Latin capital letter T with cedilla",355:"Latin small letter T with cedilla",356:"Latin capital letter T with caron",
+357:"Latin small letter T with caron",358:"Latin capital letter T with stroke",359:"Latin small letter T with stroke",360:"Latin capital letter U with tilde",361:"Latin small letter U with tilde",362:"Latin capital letter U with macron",363:"Latin small letter U with macron",364:"Latin capital letter U with breve",365:"Latin small letter U with breve",366:"Latin capital letter U with ring above",367:"Latin small letter U with ring above",368:"Latin capital letter U with double acute",369:"Latin small letter U with double acute",
+370:"Latin capital letter U with ogonek",371:"Latin small letter U with ogonek",372:"Latin capital letter W with circumflex",373:"Latin small letter W with circumflex",374:"Latin capital letter Y with circumflex",375:"Latin small letter Y with circumflex",376:"Latin capital letter Y with diaeresis",377:"Latin capital letter Z with acute",378:"Latin small letter Z with acute",379:"Latin capital letter Z with dot above",380:"Latin small letter Z with dot above",381:"Latin capital letter Z with caron",
+382:"Latin small letter Z with caron",383:"Latin small letter Long S",384:"Latin small letter B with stroke",385:"Latin capital letter B with hook",386:"Latin capital letter B with topbar",387:"Latin small letter B with topbar",388:"Latin capital letter TONE SIX",389:"Latin small letter TONE SIX",390:"Latin capital letter Open O",391:"Latin capital letter C with hook",392:"Latin small letter C with hook",393:"Latin capital letter AFRICAN D",394:"Latin capital letter D with hook",395:"Latin capital letter D with topbar",
+396:"Latin small letter D with topbar",397:"Latin small letter turned DELTA",398:"Latin capital letter reversed E",399:"Latin capital letter SCHWA",400:"Latin capital letter Open E",401:"Latin capital letter F with hook",402:"Latin small letter F with hook",403:"Latin capital letter G with hook",404:"Latin capital letter GAMMA",405:"Latin small letter HV",406:"Latin capital letter IOTA",407:"Latin capital letter I with stroke",409:"Latin small letter K with hook",410:"Latin small letter L with bar",
+411:"Latin letter LAMBDA BAR",412:"Latin capital letter turned M",413:"Latin capital letter N with left hook",414:"Latin small letter N with long right LEG",415:"Latin capital letter O with middle tilde",416:"Latin capital letter O with horn",417:"Latin small letter O with horn",418:"Latin capital letter OI",419:"Latin small letter OI",420:"Latin capital letter P with hook",421:"Latin small letter P with hook",422:"Latin letter YR",423:"Latin capital letter TONE TWO",424:"Latin small letter TONE TWO",
+425:"Latin capital letter ESH",426:"Latin letter reversed ESH LOOP",427:"Latin small letter T with palatal hook",428:"Latin capital letter T with hook",429:"Latin small letter T with hook",430:"Latin capital letter T with retroflex hook",431:"Latin capital letter U with horn",432:"Latin small letter U with horn",433:"Latin capital letter UPSILON",434:"Latin capital letter V with hook",435:"Latin capital letter Y with hook",436:"Latin small letter Y with hook",437:"Latin capital letter Z with stroke",
+438:"Latin small letter Z with stroke",439:"Latin capital letter EZH",440:"Latin capital letter EZH reversed",441:"Latin small letter EZH reversed",442:"Latin small letter EZH with tail",443:"Latin letter TWO with stroke",444:"Latin capital letter Tone Five",445:"Latin small letter Tone Five",446:"Latin letter inversed GLOTTAL STOP with stroke",447:"Latin letter WYNN",448:"Latin letter DENTAL CLICK",449:"Latin letter LATERAL CLICK",450:"Latin letter ALVEOLAR CLICK",451:"Latin letter RETROFLEX CLICK",
+452:"Latin capital letter DZ with caron",453:"Latin capital letter D with small letter Z with caron",454:"Latin small letter DZ with caron",455:"Latin capital letter LJ",456:"Latin capital letter L with small letter J",457:"Latin capital letter NJ",458:"Latin capital letter N with small letter J",459:"Latin small letter NJ",460:"Latin capital letter A wth caron",461:"Latin capital letter A with caron",462:"Latin small letter A with caron",463:"Latin capital letter I with caron",464:"Latin small letter I with caron",
+465:"Latin capital letter O with caron",466:"Latin small letter O with caron",467:"Latin capital letter U with caron",468:"Latin small letter U with caron",469:"Latin capital letter U with diaeresis and macron",470:"Latin small letter U with diaeresis and macron",471:"Latin capital letter U with diaeresis and acute",472:"Latin small letter U with diaeresis and acute",473:"Latin capital letter U with diaeresis and caron",474:"Latin small letter U with diaeresis and caron",475:"Latin capital letter U with diaeresis and grave",
+476:"Latin small letter U with diaeresis and grave",477:"Latin small letter turned E",478:"Latin capital letter A with diaeresis and macron",479:"Latin small letter A with diaeresis and macron",480:"Latin capital letter A with dot above and macron",481:"Latin small letter A with dot above and macron",482:"Latin capital letter AE with macron",483:"Latin small letter AE with macron",484:"Latin capital letter G with stroke",485:"Latin small letter G with stroke",486:"Latin capital letter G with caron",
+487:"Latin small letter G with caron",488:"Latin capital letter K with caron",489:"Latin small letter K with caron",490:"Latin capital letter O with ogonek",491:"Latin small letter O with ogonek",492:"Latin capital letter O with ogonek and macron",493:"Latin small letter O with ogonek and macron",494:"Latin capital letter EZH with caron",495:"Latin small letter EZH with caron",496:"Latin small letter J with caron",501:"Latin small letter G with acute",502:"Latin capital letter HWAIR",503:"Latin capital letter WYNN",
+505:"Latin small letter N with grave",513:"Latin small letter A with double grave",515:"Latin small letter A with inverted breve",517:"Latin small letter E with double grave",519:"Latin small letter E with inverted breve",521:"Latin small letter I with double grave",523:"Latin small letter I with inverted breve",525:"Latin small letter O with double grave",527:"Latin small letter O with inverted breve",529:"Latin small letter R with double grave",531:"Latin small letter R with inverted breve",533:"Latin small letter U with double grave",
+535:"Latin small letter U with inverted breve",537:"Latin small letter S with comma below",539:"Latin small letter T with comma below",541:"Latin small letter YOGH",543:"Latin small letter H with caron",544:"Latin capital letter N with long right leg",545:"Latin small letter D with curl",547:"Latin small letter OU",549:"Latin small letter Z with hook",551:"Latin small letter A with dot above",553:"Latin small letter E with cedilla",559:"Latin small letter O with dot above",563:"Latin small letter Y with macron",
+564:"Latin small letter L with curl",565:"Latin small letter N with curl",566:"Latin small letter T with curl",567:"Latin small letter dotless J",568:"Latin small letter DB digraph",569:"Latin small letter QP digraph",570:"Latin capital letter A with stroke",571:"Latin capital letter C with stroke",572:"Latin small letter C with stroke",573:"Latin capital letter L with bar",574:"Latin capital letter T with diagonal stroke",575:"Latin small letter S with swash tail",576:"Latin small letter Z with swash tail",
+577:"Latin capital letter GLOTTAL STOP",578:"Latin small letter GLOTTAL STOP",579:"Latin capital letter B with stroke",580:"Latin capital letter U bar",581:"Latin capital letter turned V",582:"Latin capital letter E with stroke",583:"Latin small letter E with stroke",584:"Latin capital letter J with stroke",585:"Latin small letter J with stroke",586:"Latin capital letter small Q with hook tail",587:"Latin small letter Q with hook tail",588:"Latin capital letter R with stroke",589:"Latin small letter R with stroke",
+590:"Latin capital letter Y with stroke",591:"Latin small letter Y with stroke",592:"Latin small letter turned A",593:"Latin small letter ALPHA",594:"Latin small letter turned ALPHA",595:"Latin small letter B with hook",596:"Latin small letter open O",597:"Latin small letter C with curl",598:"Latin small letter D with tail",599:"Latin small letter D with hook",600:"Latin small letter reversed E",601:"Latin small letter SCHWA",603:"Latin small letter open E",604:"Latin small letter reversed open E",
+605:"Latin small letter reversed open E with hook",606:"Latin small letter closed reversed open E",607:"Latin small letter DOTLESS J with stroke",608:"Latin small letter G with hook",609:"Latin small letter script G",610:"Latin letter small capital G",611:"Latin small letter GAMMA",612:"Latin small letter RAMS horn",613:"Latin small letter turned H",614:"Latin small letter H with hook",616:"Latin small letter I with stroke",617:"Latin small letter IOTA",618:"Latin letter small capital I",619:"Latin small letter L with middle tilde",
+620:"Latin small letter L with belt",621:"Latin small letter L with retroflex hook",622:"Latin small letter LEZH",623:"Latin small letter turned M",624:"Latin small letter turned M with long leg",625:"Latin small letter M with hook",626:"Latin small letter N with left hook",627:"Latin small letter N with retroflex hook",628:"Latin letter small capital N",629:"Latin small letter barred O",630:"Latin letter small capital OE",631:"Latin small letter closed OMEGA",632:"Latin small letter PHI",633:"Latin small letter turned R",
+634:"Latin small letter turned R with long leg",635:"Latin small letter turned R with hook",636:"Latin small letter R with long leg",637:"Latin small letter R with tail",638:"Latin small letter R with fishhook",639:"Latin small letter reversed R with fishhook",640:"Latin letter small capital R",641:"Latin letter small capital inverted R",642:"Latin small letter S with hook",643:"Latin small letter ESH",645:"Latin small letter SQUAT reversed ESH",647:"Latin small letter turned T",648:"Latin small letter T with retroflex hook",
+649:"Latin small letter U bar",650:"Latin small letter UPSILON",651:"Latin small letter V with hook",652:"Latin small letter turned V",653:"Latin small letter turned W",654:"Latin small letter turned Y",655:"Latin letter small capital Y",656:"Latin small letter Z with retroxflex hook",657:"Latin small letter Z with curl",658:"Latin small letter EZH",660:"Latin letter GLOTTAL STOP",661:"Latin letter PHARYNGEAL VOICED FRICATIVE",662:"Latin letter inverted GLOTTAL STOP",663:"Latin letter stretched C",
+664:"Latin letter BULLSEYE",665:"Latin letter small capital B",666:"Latin small letter closed EPSILON",667:"Latin letter small capital G with hook",668:"Latin letter small capital H",669:"Latin small letter J with crossed-tail",670:"Latin small letter turned K",671:"Latin letter small capital L",672:"Latin small letter Q with hook",675:"Phonetic Digraphs",684:"Latin letter BILABIAL PERCUSSIVE",685:"Latin letter BIDENTAL PERCUSSIVE",686:"Latin small letter turned H with fishhook",688:"Phonetic Modifiers Derived from Latin Letters",
+690:"Modifier letter small J",691:"Modifier letter small R",692:"Modifier letter small turned R",694:"Modifier letter small capital inverted R",695:"Modifier letter small W",696:"Modifier letter small Y",697:"Phonetic Modifiers",698:"Modifier letter DOUBLE PRIME",699:"Modifier letter turned COMMA",700:"Modifier letter APOSTROPHE",701:"Modifier letter reversed COMMA",703:"Modifier letter left half ring",704:"Modifier letter GLOTTAL STOP",705:"Modifier letter reversed GLOTTAL STOP",706:"Modifier letter ARROWHEADS",
+710:"Modifier letter circumflex accent",711:"Mandarin chinese third tone",712:"Modifier letter vertical line",713:"Mandarin chinese first tone",714:"Mandarin chinese second tone",715:"Mandarin chinese fourth tone",716:"Modifier letter low VERTICAL LINE",717:"Modifier letter low MACRON",718:"Modifier letter low grave ACCENT",719:"Modifier letter low acute ACCENT",720:"Modifier letter TRIANGULAR COLON",721:"Modifier letter HALF TRIANGULAR COLON",723:"Modifier letter CENTRED LEFT HALF ring",724:"Modifier letter UP TACK",
+726:"Modifier letter PLUS sign",727:"Modifier letter MINUS sign",728:"Breve",729:"Mandarin chinese fifth or neutral tone",730:"Ring above",731:"OGONEK",732:"Small TILDE",733:"Double acute accent",734:"Modifier letter RHOTIC hook",735:"Modifier letter CROSS accent",736:"Modifier letter small GAMMA",737:"Modifier letter small L",738:"Modifier letter small S",739:"Modifier letter small X",740:"Modifier letter small reversed GLOTTAL STOP",741:"Tone Letters",748:"Modifier letter VOICING",749:"Modifier letter UNASPIRATED",
+750:"Modifier letter DOUBLE APOSTROPHE",751:"UPA Modifiers",768:"Combining grave accent",769:"Combining acute accent",770:"Combining circumflex accent",771:"Combining Tilde",772:"Combining macron",773:"Combining Overline",774:"Combining Breve",775:"Combining dot above",776:"Double dot above",777:"Combining hook above",778:"Combining ring above",779:"Combining double acute accent",780:"Combining caron",781:"Combining vertical line above",782:"Combining double vertical line above",783:"Combining double grave accent",
+784:"Combining CANDRABINDU",785:"Combining inverted breve",786:"Cedilla above",787:"Combining COMMA above",788:"Combining reversed COMMA above",789:"Combining COMMA above right",790:"Combining grave accent below",791:"Combining acute accent below",792:"Combining left TACK below",793:"Combining right TACK below",794:"Combining left ANGLE above",795:"Combining horn",796:"Combining left half ring below",797:"Combining up TACK below",798:"Combining down TACK below",799:"Combining PLUS sign below",800:"Combining MINUS sign below",
+801:"Combining PALATALIZED hook below",802:"Combining RETROFLEX hook below",803:"Combining DOT below",804:"Combining DIAERESIS below",805:"Combining ring below",806:"Combining COMMA below",807:"Combining CEDILLA",808:"Combining ogonek",809:"Combining vertical line below",810:"Combining BRIDGE below",811:"Combining inverted double ARCH below",812:"Combining CARON below",813:"Combining CIRCUMFLEX accent below",814:"Combining BREVE below",815:"Combining inverted BREVE below",816:"Combining TILDE below",
+817:"Combining MACRON below",818:"Underscore",819:"Double underscore",820:"Combining TILDE overlay",821:"Combining short stroke overlay",822:"Combining long stroke overlay",823:"Combining short SOLIDUS overlay",824:"Combining long SOLIDUS overlay",825:"Combining right half ring below",826:"Combining inverted BRIDGE below",827:"Combining SQUARE below",828:"Combining SEAGULL below",829:"Combining X above",830:"Combining vertical TILDE",831:"Combining double OVERLINE",832:"Combining grave TONE MARK",
+833:"Combining acute TONE MARK",834:"Combining Greek PERISPOMENI",835:"Combining Greek KORONIS",836:"Combining Greek DIALYTIKA TONOS",837:"Combining Greek YPOGEGRAMMENI",838:"Combining BRIDGE above",839:"Combining EQUALS sign below",840:"Combining double VERTICAL LINE below",841:"Combining left ANGLE below",842:"Combining NOT TILDE above",843:"Combining HOMOTHETIC above",844:"Combining ALMOST EQUAL TO above",845:"Combining left right ARROW below",846:"Combining UPWARDS ARROW below",847:"Combining GRAPHEME JOINER",
+848:"Combining right ARROWHEAD above",849:"Combining Left half ring above",850:"Combining FERMATA",851:"Combining X below",852:"Combining left ARROWHEAD below",853:"Combining right ARROWHEAD below",855:"Combining right half ring above",856:"Combining DOT above right",857:"Combining ASTERISK below",858:"Combining double ring below",859:"Combining ZIGZAG above",860:"Combining double BREVE below",861:"Combining double BREVE",862:"Combining double MACRON",863:"Combining double MACRON below",864:"Combining double TILDE",
+865:"Combining double inverted BREVE",866:"Combining double RIGHTWARDS ARROW below",867:"Combining Latin small letter A",868:"Combining Latin small letter E",869:"Combining Latin small letter I",870:"Combining Latin small letter O",871:"Combining Latin small letter U",872:"Combining Latin small letter C",873:"Combining Latin small letter D",874:"Combining Latin small letter H",875:"Combining Latin small letter M",876:"Combining Latin small letter R",877:"Combining Latin small letter T",878:"Combining Latin small letter V",
+879:"Combining Latin small letter X",884:"Greek Punctuation and Signs",894:"Greek Question Mark",913:"Greek Capital Letters",915:"GAMMA function",945:"Greek Small Letters",960:"Greek small letter PI",976:"Greek BETA SYMBOL",977:"Greek THETA SYMBOL",981:"Greek PHI SYMBOL",982:"Greek PI SYMBOL",984:"Greek Archaic Letters",994:"Coptic Letters Derived from Demotic",1010:"Greek small letter lunate sigma",1013:"Greek LUNATE EPSILON SYMBOL",1014:"Greek reversed LUNATE EPSILON SYMBOL",1024:"Cyrillic Capital Letters",
+1040:"Russian Alphabet",1072:"Cyrillic Small Letters",1104:"Cyrillic Extensions",1120:"Cyrillic Historic Letters",1155:"Cyrillic Combining Characters",1162:"Cyrillic Extensions",1280:"Cyrillic Supplement",1328:"Armenian Alphabet",1329:"Armenian Capital Letters",1369:"Armenian modifier letter left half ring",1370:"Armenian modifier letter right half ring",1371:"Armenian shesht",1372:"Armenian batsaganchakan nshan",1373:"Armenian bowt",1374:"Armenian hartsakan nshan",1375:"Armenian patiw",1377:"Armenian Small Letters",
+1417:"Armenian vertsaket",1418:"Armenian yentamna",1424:"Hebrew",1425:"Hebrew Cantillation Marks",1456:"Hebrew Points and Punctuation",1488:"Hebrew Alphabet",1520:"Yiddish Digraphs",1536:"Arabic Subtending Marks",1547:"Afghani sign",1548:"Arabic Comma",1549:"Arabic Date Separator",1552:"Arabic Honorifics",1563:"Arabic Semicolon",1567:"Arabic Question Mark",1569:"Arabic Alphabet",1600:"Arabic kashida",1611:"Arabic Harakat",1619:"Arabic Combining Marks",1632:"Arabic-Indic Digits",1643:"Arabic Decimal Separator",
+1644:"Arabic phrase separator",1645:"Arabic Five Pointed Star",1649:"Extended Arabic Letters",1728:"Arabic letter hamzah on ha",1748:"Arabic Full Stop",1750:"Arabic Koranic Annotation Signs",1776:"Eastern Arabic-Indic Digits",1792:"Syriac Punctuation and Signs",1807:"Syriac Abbreviation Mark",1808:"Syriac Letters",1840:"Syriac Points",1872:"Extended Arabic Letters",1920:"Thaana",1984:"NKo",2048:"Samaritan",2112:"Mandaic",2304:"Devanagari",2305:"Devanagari sign CANDRABINDU",2306:"Devanagari sign ANUSVARA",
+2307:"Devanagari sign VISARGA",2308:"Devanagari Independent Vowels",2325:"Devanagari Consonants",2364:"Devanagari sign NUKTA",2365:"Devanagari sign AVAGRAHA",2366:"Devanagari Dependent Vowel Signs",2381:"Devanagari sign VIRAMA",2384:"Devanagari OM",2385:"Devanagari Extensions",2404:"Devanagari purna viram",2405:"Devanagari deergh viram",2406:"Devanagari Digits",2416:"Devanagari ABBREVIATION sign",2432:"Bengali",2437:"Bengali Independent Vowels",2453:"Bengali Consonants",2494:"Bengali Dependent Vowel Signs",
+2509:"bengali hasant",2534:"Bengali Digits",2546:"Bengali Rupee Mark",2547:"Bengali RUPEE sign",2554:"Bengali ISSHAR",2560:"Gurmukhi",2565:"Gurmukhi Independent Vowels",2581:"Gurmukhi Consonants",2622:"Gurmukhi Dependent Vowel Signs",2662:"Gurmukhi Digits",2672:"Gurmukhi TIPPI",2673:"Gurmukhi ADDAK",2676:"Gurmukhi EK ONKAR",2688:"Gujarati",2693:"Gujarati Independent Vowels",2709:"Gujarati Consonants",2750:"Gujarati Dependent Vowel Signs",2790:"Gujarati Digits",2801:"GUJARATI RUPEE sign",2816:"Oriya",
+2821:"Oriya Independent Vowels",2837:"Oriya Consonants",2878:"Oriya Dependent Vowel Signs",2918:"Oriya Digits",2928:"ORIYA ISSHAR",2944:"Tamil",2947:"Tamil aytham",2949:"Tamil Independent Vowels",2965:"Tamil Consonants",3006:"Tamil Dependent Vowel Signs",3047:"Tamil Digits",3059:"Tamil DAY sign",3060:"Tamil maatham",3061:"Tamil varudam",3062:"Tamil patru",3063:"Tamil varavu",3064:"Tamil merpadi",3065:"Tamil rupai",3066:"Tamil enn",3072:"Telugu",3074:"Telugu sunna",3077:"Telugu Independent Vowels",
+3093:"Telugu Consonants",3134:"Telugu Dependent Vowel Signs",3174:"Telugu Digits",3200:"Kannada",3205:"Kannada Independent Vowels",3221:"Kannada Consonants",3262:"Kannada Dependent Vowel Signs",3302:"Kannada Digits",3313:"Vedic Signs",3328:"Malayalam",3333:"Malayalam Independent Vowels",3349:"Malayalam Consonants",3390:"Malayalam Dependent Vowel Signs",3405:"Malayalam chandrakkala",3430:"Malayalam Digits",3450:"Malayalam Chillu Letters",3456:"Sinhala",3461:"Sinhala Independent Vowels",3482:"Sinhala Consonants",
+3530:"Sinhala sign AL-LAKUNA",3535:"Sinhala Dependent Vowel Signs",3584:"Thai",3585:"Thai Consonants",3632:"Thai Vowels",3647:"Thai CURRENCY SYMBOL BAHT",3656:"Thai Marks and Signs",3660:"Thai CHARACTER THANTHAKHAT",3661:"Thai CHARACTER NIKHAHIT",3662:"Thai CHARACTER YAMAKKAN",3663:"Thai CHARACTER FONGMAN",3664:"Thai Digits",3674:"Thai CHARACTER ANGKHANKHU",3675:"Thai CHARACTER KHOMUT",3712:"Lao",3713:"Lao Consonants",3759:"Lao ELLIPSIS",3760:"Lao Vowels",3784:"Lao Marks and Signs",3788:"Lao CANCELLATION MARK",
+3789:"Lao NIGGAHITA",3792:"Lao Digits",3840:"Tibetan SYLLABLE OM",3841:"Tibetan Head Marks",3848:"Tibetan Marks and Signs",3851:"Tibetan MARK INTERSYLLABIC TSHEG",3852:"Tibetan MARK DELIMITER TSHEG BSTAR",3861:"Tibetan Astrological Signs",3872:"Tibetan Digits",3882:"Tibetan Digits Minus Half",3892:"Tibetan Marks and Signs",3904:"Tibetan Consonants",3953:"Tibetan Dependent Vowel Signs",3966:"tibetan anusvara",3967:"tibetan visarga",3970:"Tibetan Marks and Signs",3972:"tibetan srog med",3973:"Tibetan MARK PALUTA",
+3984:"Tibetan Subjoined Consonants",4030:"Tibetan Marks and Signs",4031:"Tibetan KU RU KHA BZHI MIG CAN",4032:"Tibetan Cantillation Signs",4036:"Tibetan Symbols",4053:"Svasti Signs",4096:"Myanmar Consonants",4129:"Myanmar Independent Vowels",4140:"Myanmar Dependent Vowel Signs",4150:"Myanmar Signs",4151:"Myanmar sign DOT below",4153:"myanmar killer",4160:"Myanmar Digits",4170:"Myanmar Punctuation and Signs",4256:"Georgian Khutsuri",4304:"Georgian Mkhedruli",4337:"Georgian Extensions",4347:"Georgian PARAGRAPH SEPARATOR",
+4352:"Korean Combining Alphabet",4447:"HANGUL CHOSEONG FILLER",4448:"HANGUL JUNGSEONG FILLER",4608:"Ethiopic Syllables",4957:"Ethiopic Combining Marks",4961:"Ethiopic Punctuation",4962:"Ethiopic FULL STOP",4963:"Ethiopic COMMA",4964:"Ethiopic SEMICOLON",4965:"Ethiopic COLON",4966:"Ethiopic PREFACE COLON",4967:"Ethiopic Question Mark",4968:"Ethiopic PARAGRAPH SEPARATOR",4969:"Ethiopic Digits",4992:"Ethiopic Supplement",5024:"Cherokee",5120:"Unified Canadian Aboriginal Syllabics",5741:"Canadian Syllabics Punctuation",
+5742:"CANADIAN SYLLABICS FULL STOP",5760:"Ogham",5761:"Ogham Traditional Letters",5781:"Ogham Forfeda Supplement",5787:"Ogham Punctuation",5792:"Runic",5867:"Runic Punctuation",5870:"Runic Golden Numbers",5888:"Tagalog",5908:"TAGALOG sign VIRAMA",5920:"Hanunoo",5940:"HANUNOO sign PAMUDPOD",5941:"PHILIPPINE SINGLE PUNCTUATION",5942:"PHILIPPINE double PUNCTUATION",5952:"Buhid",5984:"Tagbanwa",6016:"Khmer Consonants",6053:"Khmer Independent Vowels",6070:"Khmer Dependent Vowel Signs",6086:"khmer anusvara",
+6087:"khmer srak ah",6107:"KHMER CURRENCY SYMBOL RIEL",6112:"Khmer Digits",6128:"Khmer Numeric Symbols for Divination",6144:"Mongolian BIRGA",6145:"Mongolian ELLIPSIS",6146:"Mongolian COMMA",6147:"Mongolian FULL STOP",6148:"Mongolian COLON",6149:"Mongolian FOUR DOTS",6150:"Mongolian TODO SOFT HYPHEN",6151:"Mongolian SIBE SYLLABLE BOUNDARY MARKER",6152:"Mongolian MANCHU COMMA",6153:"Mongolian MANCHU FULL STOP",6154:"Mongolian NIRUGU",6155:"Mongolian FREE VARIATION SELECTOR ONE",6156:"Mongolian FREE VARIATION SELECTOR TWO",
+6157:"Mongolian FREE VARIATION SELECTOR THREE",6158:"Mongolian VOWEL SEPARATOR",6160:"Mongolian Digits",6176:"Mongolian Basic Letters",6211:"Mongolian Extensions",6320:"Unified Canadian Aboriginal Syllabics Extended",6400:"Limbu",6457:"Limbu Signs",6468:"LIMBU EXCLAMATION MARK",6469:"LIMBU Question Mark",6470:"Limbu Digits",6480:"Tai Le",6528:"New Tai Lue",6608:"New Tai Lue Digits",6624:"Khmer Symbols",6656:"Buginese",6688:"Tai Tham",6912:"Balinese",6992:"Balinese Digits",7009:"Balinese Musical Symbols",
+7040:"Sundanese",7104:"Batak",7168:"Lepcha",7248:"Ol Chiki",7376:"Vedic Extensions",7424:"Latin letter small capital A",7425:"Latin letter small capital AE",7426:"Latin small letter turned AE",7427:"Latin letter small capital BARRED B",7428:"Latin letter small capital C",7429:"Latin letter small capital D",7430:"Latin letter small capital ETH",7431:"Latin letter small capital E",7432:"Latin small letter turned OPEN E",7433:"Latin small letter turned I",7434:"Latin letter small capital J",7435:"Latin letter small capital K",
+7436:"Latin letter small capital L with stroke",7437:"Latin letter small capital M",7438:"Latin letter small capital reversed N",7439:"Latin letter small capital O",7440:"Latin letter small capital OPEN O",7441:"Latin small letter SIDEWAYS O",7442:"Latin small letter SIDEWAYS OPEN O",7443:"Latin small letter SIDEWAYS O with stroke",7444:"Latin small letter turned OE",7445:"Latin letter small capital OU",7446:"Latin small letter TOP half O",7447:"Latin small letter BOTTOM half O",7448:"Latin letter small capital P",
+7449:"Latin letter small capital reversed R",7450:"Latin letter small capital turned R",7451:"Latin letter small capital T",7452:"Latin letter small capital U",7453:"Latin small letter SIDEWAYS U",7454:"Latin small letter SIDEWAYS DIAERESIZED U",7455:"Latin small letter SIDEWAYS turned M",7456:"Latin letter small capital V",7457:"Latin letter small capital W",7458:"Latin letter small capital Z",7459:"Latin letter small capital EZH",7460:"Latin letter VOICED LARYNGEAL SPIRANT",7461:"Latin letter AIN",
+7468:"Modifier letter Extensions",7522:"Latin subscript small letter I",7523:"Latin subscript small letter R",7524:"Latin subscript small letter U",7525:"Latin subscript small letter V",7627:"Contour Tone Marks",7635:"Latin Medieval Superscript Letter Diacritics",7676:"Combining double inverted BREVE below",7680:"Latin Extended Additional",7681:"Latin small letter A with ring below",7683:"Latin small letter B with dot above",7685:"Latin small letter B with DOT below",7687:"Latin small letter B with LINE below",
+7691:"Latin small letter D with dot above",7693:"Latin small letter D with DOT below",7695:"Latin small letter D with LINE below",7697:"Latin small letter D with cedilla",7699:"Latin small letter D with CIRCUMFLEX below",7705:"Latin small letter E with CIRCUMFLEX below",7707:"Latin small letter E with TILDE below",7711:"Latin small letter F with dot above",7713:"Latin small letter G with macron",7715:"Latin small letter H with dot above",7717:"Latin small letter H with DOT below",7719:"Latin small letter H with diaeresis",
+7721:"Latin small letter H with cedilla",7723:"Latin small letter H with BREVE below",7725:"Latin small letter I with TILDE below",7729:"Latin small letter K with acute",7731:"Latin small letter K with DOT below",7733:"Latin small letter K with LINE below",7735:"Latin small letter L with DOT below",7739:"Latin small letter L with LINE below",7741:"Latin small letter L with CIRCUMFLEX below",7743:"Latin small letter M with acute",7745:"Latin small letter M with dot above",7747:"Latin small letter M with DOT below",
+7749:"Latin small letter N with dot above",7751:"Latin small letter N with DOT below",7753:"Latin small letter N with LINE below",7755:"Latin small letter N with CIRCUMFLEX below",7765:"Latin small letter P with acute",7767:"Latin small letter P with dot above",7769:"Latin small letter R with dot above",7771:"Latin small letter R with DOT below",7775:"Latin small letter R with LINE below",7777:"Latin small letter S with dot above",7779:"Latin small letter S with DOT below",7787:"Latin small letter T with dot above",
+7789:"Latin small letter T with DOT below",7791:"Latin small letter T with LINE below",7793:"Latin small letter T with CIRCUMFLEX below",7795:"Latin small letter U with DIAERESIS below",7797:"Latin small letter U with TILDE below",7799:"Latin small letter U with CIRCUMFLEX below",7805:"Latin small letter V with tilde",7807:"Latin small letter V with DOT below",7809:"Latin small letter W with grave",7811:"Latin small letter W with acute",7813:"Latin small letter W with diaeresis",7815:"Latin small letter W with dot above",
+7817:"Latin small letter W with DOT below",7819:"Latin small letter X with dot above",7821:"Latin small letter X with diaeresis",7823:"Latin small letter Y with dot above",7825:"Latin small letter Z with circumflex",7827:"Latin small letter Z with DOT below",7829:"Latin small letter Z with LINE below",7830:"Latin small letter H with LINE below",7831:"Latin small letter T with diaeresis",7832:"Latin small letter W with ring above",7833:"Latin small letter Y with ring above",7834:"Latin small letter A with right half ring",
+7835:"Latin small letter long S with DOT above",7841:"Latin small letter A with DOT below",7843:"Latin small letter A with hook above",7865:"Latin small letter E with DOT below",7867:"Latin small letter E with hook above",7869:"Latin small letter E with tilde",7881:"Latin small letter I with hook above",7883:"Latin small letter I with DOT below",7885:"Latin small letter O with DOT below",7887:"Latin small letter O with hook above",7909:"Latin small letter U with DOT below",7911:"Latin small letter U with hook above",
+7923:"Latin small letter Y with grave",7925:"Latin small letter Y with DOT below",7927:"Latin small letter Y with hook above",7929:"Latin small letter Y with tilde",7936:"Greek Extended",8192:"Symbols Area",8193:"EM QUAD",8193:"mutton quad",8193:"EM QUAD",8193:"mutton quad",8194:"EN SPACE",8194:"nut",8194:"EN SPACE",8195:"EM SPACE",8195:"mutton",8195:"EM SPACE",8196:"thick space",8196:"THREE-PER-EM SPACE",8196:"thick space",8196:"THREE-PER-EM SPACE",8197:"FOUR-PER-EM SPACE",8197:"mid space",8197:"FOUR-PER-EM SPACE",
+8197:"mid space",8198:"SIX-PER-EM SPACE",8199:"FIGURE SPACE",8200:"PUNCTUATION SPACE",8201:"THIN SPACE",8202:"HAIR SPACE",8203:"ZERO WIDTH SPACE",8203:"zwsp",8204:"Format Characters",8204:"ZERO WIDTH NON-JOINER",8204:"zwnj",8205:"ZERO WIDTH JOINER",8205:"zwj",8206:"Left-TO-RIGHT MARK",8206:"lrm",8207:"RIGHT-TO-LEFT MARK",8207:"rlm",8208:"Dashes",8208:"HYPHEN",8209:"NON-BREAKING HYPHEN",8210:"FIGURE DASH",8211:"EN DASH",8212:"EM DASH",8213:"HORIZONTAL BAR",8213:"quotation dash",8213:"HORIZONTAL bar",
+8213:"quotation dash",8214:"DOUBLE VERTICAL LINE",8215:"DOUBLE low LINE",8215:"spacing double underscore",8215:"DOUBLE low LINE",8215:"spacing double underscore",8216:"single turned comma quotation mark",8216:"Left SINGLE QUOTATION MARK",8216:"LEFT SINGLE QUOTATION MARK",8216:"single turned comma quotation mark",8216:"Quotation Marks",8216:"LEFT SINGLE QUOTATION MARK",8216:"single turned comma quotation mark",8217:"apostrophe",8217:"single comma quotation mark",8217:"right SINGLE QUOTATION MARK",
+8217:"single comma quotation mark",8217:"RIGHT SINGLE QUOTATION MARK",8217:"single comma quotation mark",8217:"right SINGLE QUOTATION MARK",8218:"low single comma quotation mark",8218:"SINGLE LOW-9 QUOTATION MARK",8218:"low single comma quotation mark",8218:"SINGLE LOW-9 QUOTATION MARK",8218:"low single comma quotation mark",8218:"SINGLE LOW-9 QUOTATION MARK",8219:"single reversed comma quotation mark",8219:"SINGLE HIGH-reversed-9 QUOTATION MARK",8219:"single reversed comma quotation mark",8219:"SINGLE HIGH-reversed-9 QUOTATION MARK",
+8219:"single reversed comma quotation mark",8220:"double turned comma quotation mark",8220:"LEFT double QUOTATION MARK",8220:"double turned comma quotation mark",8220:"Left double QUOTATION MARK",8220:"double turned comma quotation mark",8220:"LEFT double QUOTATION MARK",8220:"double turned comma quotation mark",8221:"double comma quotation mark",8221:"right double QUOTATION MARK",8221:"double comma quotation mark",8221:"right double QUOTATION MARK",8221:"RIGHT double QUOTATION MARK",8222:"low double comma quotation mark",
+8222:"DOUBLE LOW-9 QUOTATION MARK",8222:"low double comma quotation mark",8222:"DOUBLE LOW-9 QUOTATION MARK",8222:"low double comma quotation mark",8223:"double reversed comma quotation mark",8223:"DOUBLE HIGH-reversed-9 QUOTATION MARK",8223:"double reversed comma quotation mark",8223:"DOUBLE HIGH-reversed-9 QUOTATION MARK",8223:"double reversed comma quotation mark",8224:"DAGGER",8225:"DOUBLE DAGGER",8226:"BULLET",8227:"TRIANGULAR BULLET",8228:"ONE DOT LEADER",8229:"TWO DOT LEADER",8230:"three dot leader",
+8230:"HORIZONTAL ELLIPSIS",8230:"three dot leader",8231:"HYPHENATION POINT",8232:"LINE SEPARATOR",8233:"PARAGRAPH SEPARATOR",8234:"Bidirectional Format Characters",8234:"Bidirectional Format Controls",8234:"Directional Format Characters",8234:"LEFT-TO-RIGHT EMBEDDING",8234:"Directional Format Characters",8234:"Left-TO-RIGHT EMBEDDING",8234:"lre",8235:"right-TO-LEFT EMBEDDING",8235:"RIGHT-TO-LEFT EMBEDDING",8235:"rle",8236:"POP DIRECTIONAL FORMATTING",8236:"pdf",8236:"POP DIRECTIONAL FORMATTING",8237:"Left-TO-RIGHT OVERRIDE",
+8237:"lro",8237:"LEFT-TO-RIGHT OVERRIDE",8238:"right-TO-LEFT OVERRIDE",8238:"RIGHT-TO-LEFT OVERRIDE",8238:"rlo",8239:"NARROW NO-BREAK SPACE",8239:"nnbsp",8239:"NARROW NO-BREAK SPACE",8240:"PER MILLE sign",8240:"per thousand",8241:"PER TEN THOUSAND sign",8242:"feet",8242:"minutes",8242:"PRIME",8243:"DOUBLE PRIME",8243:"inches",8243:"DOUBLE PRIME",8243:"seconds",8244:"TRIPLE PRIME",8245:"reversed PRIME",8246:"reversed double PRIME",8247:"reversed TRIPLE PRIME",8248:"CARET",8249:"SINGLE LEFT-POINTING ANGLE QUOTATION MARK",
+8249:"left pointing single guillemet",8249:"SINGLE Left-POINTING ANGLE QUOTATION MARK",8249:"SINGLE LEFT-POINTING ANGLE QUOTATION MARK",8249:"left pointing single guillemet",8249:"SINGLE LEFT-POINTING ANGLE QUOTATION MARK",8250:"SINGLE right-POINTING ANGLE QUOTATION MARK",8250:"right pointing single guillemet",8250:"SINGLE right-POINTING ANGLE QUOTATION MARK",8250:"right pointing single guillemet",8250:"SINGLE RIGHT-POINTING ANGLE QUOTATION MARK",8250:"right pointing single guillemet",8250:"SINGLE right-POINTING ANGLE QUOTATION MARK",
+8251:"japanese kome",8251:"urdu paragraph separator",8251:"REFERENCE MARK",8251:"urdu paragraph separator",8252:"DOUBLE EXCLAMATION MARK",8253:"INTERROBANG",8254:"OVERLINE",8254:"spacing overscore",8255:"greek enotikon",8255:"UNDERTIE",8256:"CHARACTER TIE",8256:"sequence concatenation",8256:"CHARACTER TIE",8257:"CARET INSERTION POINT",8258:"ASTERISM",8259:"HYPHEN BULLET",8260:"FRACTION SLASH",8260:"solidus",8261:"LEFT SQUARE BRACKET with QUILL",8261:"Left SQUARE BRACKET with QUILL",8261:"LEFT SQUARE BRACKET with QUILL",
+8262:"right SQUARE BRACKET with QUILL",8262:"RIGHT SQUARE BRACKET with QUILL",8262:"right SQUARE BRACKET with QUILL",8263:"Double Punctuation for Vertical Text",8263:"DOUBLE Question Mark",8263:"Double Punctuation for Vertical Text",8263:"DOUBLE Question Mark",8263:"Double Punctuation for Vertical Text",8264:"QUESTION EXCLAMATION MARK",8265:"EXCLAMATION Question Mark",8266:"TIRONIAN sign ET",8267:"reversed PILCROW sign",8268:"BLACK LEFTWARDS BULLET",8268:"BLACK LeftWARDS BULLET",8269:"BLACK rightWARDS BULLET",
+8269:"BLACK RIGHTWARDS BULLET",8270:"LOW ASTERISK",8271:"reversed SEMICOLON",8272:"CLOSE UP",8273:"TWO ASTERISKS ALIGNED VERTICALLY",8274:"COMMERCIAL MINUS sign",8274:"med avdrag av",8274:"COMMERCIAL MINUS sign",8274:"piska",8275:"SWUNG DASH",8276:"INVERTED UNDERTIE",8277:"phul",8277:"puspika",8278:"THREE DOT PUNCTUATION",8279:"QUADRUPLE PRIME",8280:"FOUR DOT PUNCTUATION",8281:"FIVE DOT PUNCTUATION",8281:"greek pentonkion",8282:"TWO DOT PUNCTUATION",8283:"FOUR DOT MARK",8284:"DOTTED CROSS",8285:"epidaurean acrophonic symbol three",
+8285:"TRICOLON",8286:"VERTICAL FOUR DOTS",8287:"MEDIUM MATHEMATICAL SPACE",8287:"mmsp",8287:"MEDIUM MATHEMATICAL SPACE",8288:"WORD JOINER",8288:"wj",8288:"WORD JOINER",8289:"FUNCTION APPLICATION",8289:"Invisible Operators",8290:"INVISIBLE TIMES",8291:"invisible comma",8291:"INVISIBLE SEPARATOR",8292:"INVISIBLE PLUS",8304:"Superscript Digits",8304:"SUPERSCRIPT ZERO",8304:"Superscripts",8304:"SUPERSCRIPT ZERO",8305:"SUPERSCRIPT Latin small letter I",8320:"Subscript Digits",8320:"Subscripts",8341:"Latin subscript small letter H",
+8342:"Latin subscript small letter K",8343:"Latin subscript small letter L",8344:"Latin subscript small letter M",8345:"Latin subscript small letter N",8346:"Latin subscript small letter P",8347:"Latin subscript small letter S",8348:"Latin subscript small letter T",8352:"Currency Symbols",8353:"COLON sign",8353:"costa rican currency",8353:"el salvadorian currency",8354:"brazilian currency",8354:"CRUZEIRO sign",8354:"brazilian currency",8355:"french currency",8355:"FRENCH FRANC sign",8356:"italian currency",
+8356:"turkish currency",8356:"italian currency",8356:"LIRA sign",8356:"turkish currency",8357:"MILL sign",8358:"nigerian currency",8358:"NAIRA sign",8358:"nigerian currency",8359:"spanish currency",8359:"PESETA sign",8359:"spanish currency",8360:"indian currency",8360:"RUPEE sign",8361:"korean currency",8361:"WON sign",8362:"israeli currency",8362:"NEW SHEQEL sign",8363:"vietnamese currency",8363:"DONG sign",8363:"vietnamese currency",8364:"euro european currency",8364:"EURO sign",8365:"laotian currency",
+8365:"KIP sign",8365:"laotian currency",8366:"mongolian currency",8366:"TUGRIK sign",8367:"greek currency",8367:"DRACHMA sign",8367:"greek currency",8368:"GERMAN PENNY sign",8369:"phillipine currency",8369:"PESO sign",8369:"phillipine currency",8370:"paraguayan currency",8370:"GUARANI sign",8370:"paraguayan currency",8371:"argentinian former currency",8371:"AUSTRAL sign",8371:"argentinian former currency",8372:"ukrainian currency",8372:"HRYVNIA sign",8372:"ukrainian currency",8373:"CEDI sign",8373:"ghana currency",
+8374:"LIVRE TOURNOIS sign",8375:"SPESMILO sign",8376:"TENGE sign",8377:"INDIAN RUPEE sign",8400:"Combining left HARPOON above",8400:"Combining Diacritical Marks for Symbols",8400:"Combining left HARPOON above",8400:"Combining Diacritical Marks for Symbols",8400:"Combining left HARPOON above",8400:"Combining Left HARPOON above",8400:"Combining Diacritical Marks for Symbols",8400:"Diacritical Marks for Symbols",8401:"Combining right HARPOON above",8401:"Combining RIGHT HARPOON above",8401:"vector",
+8402:"Combining long VERTICAL LINE OVERLAY",8403:"Combining SHORT VERTICAL LINE OVERLAY",8404:"Combining ANTICLOCKWISE ARROW above",8404:"combining counterclockwise arrow above",8404:"Combining ANTICLOCKWISE ARROW above",8404:"combining counterclockwise arrow above",8404:"Combining ANTICLOCKWISE ARROW above",8404:"combining counterclockwise arrow above",8405:"Combining CLOCKWISE ARROW above",8406:"Combining left ARROW above",8406:"Combining Left ARROW above",8407:"Combining right ARROW above",8407:"Combining RIGHT ARROW above",
+8407:"vector",8408:"Combining ring OVERLAY",8409:"Combining CLOCKWISE ring OVERLAY",8410:"Combining ANTICLOCKWISE ring OVERLAY",8410:"combining counterclockwise ring overlay",8410:"Combining ANTICLOCKWISE ring OVERLAY",8410:"combining counterclockwise ring overlay",8410:"Combining ANTICLOCKWISE ring OVERLAY",8410:"combining counterclockwise ring overlay",8411:"Combining THREE DOTS above",8411:"third derivative",8411:"Combining THREE DOTS above",8411:"third derivative",8411:"Combining THREE DOTS above",
+8412:"Combining FOUR DOTS above",8412:"fourth derivative",8412:"Combining FOUR DOTS above",8412:"fourth derivative",8413:"Combining enclosing CIRCLE",8413:"jis composition circle",8413:"Combining enclosing CIRCLE",8413:"jis composition circle",8413:"Enclosing Diacritics",8413:"Combining enclosing CIRCLE",8413:"Enclosing Diacritics",8413:"jis composition circle",8414:"Combining enclosing SQUARE",8415:"Combining enclosing DIAMOND",8416:"Combining enclosing CIRCLE BACKSLASH",8416:"no",8416:"prohibition",
+8417:"Combining left right ARROW above",8417:"Combining Left right ARROW above",8417:"Combining left RIGHT ARROW above",8418:"Combining enclosing SCREEN",8419:"Combining enclosing KEYCAP",8420:"Combining enclosing UPWARD POINTING TRIANGLE",8421:"Combining REVERSE SOLIDUS OVERLAY",8421:"Combining Reverse SOLIDUS OVERLAY",8421:"Combining REVERSE SOLIDUS OVERLAY",8422:"Combining double VERTICAL stroke OVERLAY",8422:"finite function diacritic",8422:"Combining double VERTICAL stroke OVERLAY",8422:"finite function diacritic",
+8422:"Combining double VERTICAL stroke OVERLAY",8423:"actuarial bend",8423:"Combining ANNUITY SYMBOL",8423:"actuarial bend",8423:"Combining ANNUITY SYMBOL",8424:"Combining TRIPLE UNDERDOT",8425:"Combining WIDE BRIDGE above",8425:"contraction operator",8425:"Combining WIDE BRIDGE above",8426:"Combining LEFTWARDS ARROW OVERLAY",8426:"Combining LeftWARDS ARROW OVERLAY",8426:"Combining LEFTWARDS ARROW OVERLAY",8427:"Combining long double SOLIDUS OVERLAY",8427:"long double slash overlay",8427:"Combining LONG double SOLIDUS OVERLAY",
+8427:"long double slash overlay",8427:"Combining LONG double SOLIDUS OVERLAY",8427:"long double slash overlay",8427:"Combining LONG double SOLIDUS OVERLAY",8428:"Combining rightWARDS HARPOON with BARB DOWNWARDS",8428:"Combining RIGHTWARDS HARPOON with BARB DOWNWARDS",8429:"Combining LEFTWARDS HARPOON with BARB DOWNWARDS",8429:"Combining LeftWARDS HARPOON with BARB DOWNWARDS",8430:"Combining left ARROW below",8430:"Combining Left ARROW below",8431:"Combining right ARROW below",8431:"Combining RIGHT ARROW below",
+8432:"Combining ASTERISK above",8448:"ACCOUNT OF",8448:"Letterlike Symbols",8449:"ADDRESSED TO THE SUBJECT",8450:"DOUBLE-STRUCK capital C",8450:"complex numbers",8450:"the set of complex numbers",8451:"DEGREE CELSIUS",8451:"degrees centigrade",8451:"DEGREE CELSIUS",8451:"degrees centigrade",8452:"CENTRE LINE SYMBOL",8452:"clone",8452:"CENTRE LINE SYMBOL",8453:"CARE OF",8454:"CADA UNA",8455:"EULER CONSTANT",8456:"SCRUPLE",8457:"DEGREE FAHRENHEIT",8458:"SCRIPT small G",8458:"real number symbol",8458:"SCRIPT small G",
+8459:"SCRIPT capital H",8460:"BLACK-letter capital H",8460:"hilbert space",8461:"DOUBLE-STRUCK capital H",8462:"PLANCK CONSTANT",8463:"PLANCK CONSTANT OVER TWO PI",8464:"SCRIPT capital I",8465:"BLACK-letter capital I",8465:"imaginary part",8466:"SCRIPT capital L",8466:"laplace transform",8466:"SCRIPT capital L",8467:"SCRIPT small L",8467:"liter",8467:"SCRIPT small L",8468:"L B BAR SYMBOL",8468:"pounds",8469:"DOUBLE-STRUCK capital N",8469:"natural number",8470:"NUMERO sign",8471:"SOUND RECORDING COPYRIGHT",
+8471:"phonorecord sign",8471:"published",8471:"SOUND RECORDING COPYRIGHT",8472:"weierstrass elliptic function",8472:"SCRIPT capital P",8472:"weierstrass elliptic function",8473:"DOUBLE-STRUCK capital P",8474:"rational numbers",8474:"DOUBLE-STRUCK capital Q",8474:"rational numbers",8474:"the set of rational numbers",8475:"riemann integral",8475:"SCRIPT capital R",8475:"riemann integral",8475:"SCRIPT capital R",8476:"BLACK-letter capital R",8476:"real part",8477:"real numbers",8477:"DOUBLE-STRUCK capital R",
+8477:"real numbers",8477:"the set of real numbers",8478:"cross ratio",8478:"PRESCRIPTION TAKE",8478:"cross ratio",8478:"recipe",8478:"PRESCRIPTION TAKE",8479:"RESPONSE",8480:"SERVICE MARK",8481:"TELEPHONE sign",8482:"TRADE MARK sign",8483:"VERSICLE",8484:"integers",8484:"the set of integers",8484:"DOUBLE-STRUCK capital Z",8485:"OUNCE sign",8486:"OHM sign",8487:"INVERTED OHM sign",8487:"mho",8487:"INVERTED OHM sign",8488:"BLACK-letter capital Z",8489:"unique element",8489:"turned Greek small letter IOTA",
+8489:"unique element",8490:"KELVIN sign",8491:"ANGSTROM sign",8492:"SCRIPT capital B",8492:"bernoulli function",8492:"SCRIPT capital B",8493:"BLACK-letter capital C",8494:"ESTIMATED SYMBOL",8495:"SCRIPT small E",8495:"error",8495:"natural exponent",8495:"SCRIPT small E",8496:"SCRIPT capital E",8496:"electromotive force",8496:"emf",8496:"SCRIPT capital E",8497:"SCRIPT capital F",8497:"fourier transform",8497:"SCRIPT capital F",8497:"fourier transform",8498:"claudian digamma inversum",8498:"turned capital F",
+8499:"german mark pre-wwii",8499:"SCRIPT capital M",8499:"m-matrix",8499:"german mark pre-wwii",8499:"SCRIPT capital M",8500:"SCRIPT small O",8500:"order",8500:"SCRIPT small O",8501:"ALEF SYMBOL",8501:"first transfinite cardinal",8501:"first transfinite cardinal countable",8501:"Hebrew Letterlike Mathematical Symbols",8501:"first transfinite cardinal",8502:"BET SYMBOL",8502:"second transfinite cardinal",8502:"second transfinite cardinal continuum",8502:"second transfinite cardinal",8503:"third transfinite cardinal",
+8503:"GIMEL SYMBOL",8503:"third transfinite cardinal",8504:"fourth transfinite cardinal",8504:"DALET SYMBOL",8504:"fourth transfinite cardinal",8505:"INFORMATION SOURCE",8506:"ROTATED capital Q",8507:"FACSIMILE sign",8508:"Double-struck Greek Letters",8508:"DOUBLE-STRUCK small PI",8509:"Double-struck Greek Letters",8509:"DOUBLE-STRUCK small GAMMA",8510:"DOUBLE-STRUCK capital GAMMA",8511:"DOUBLE-STRUCK capital PI",8512:"DOUBLE-STRUCK N-ARY SUMMATION",8513:"turned SANS-SERIF capital G",8513:"game",
+8513:"turned SANS-SERIF capital G",8514:"turned SANS-SERIF capital L",8515:"reversed SANS-SERIF capital L",8516:"turned SANS-SERIF capital Y",8517:"DOUBLE-STRUCK ITALIC capital D",8517:"Double-struck Italic Mathematical Symbols",8518:"DOUBLE-STRUCK ITALIC small D",8519:"DOUBLE-STRUCK ITALIC small E",8520:"DOUBLE-STRUCK ITALIC small I",8521:"DOUBLE-STRUCK ITALIC small J",8522:"PROPERTY LINE",8523:"turned AMPERSAND",8524:"PER sign",8525:"AKTIESELSKAB",8526:"turned small F",8527:"SYMBOL FOR SAMARITAN SOURCE",
+8528:"VULGAR FRACTION ONE SEVENTH",8528:"Number Forms",8528:"VULGAR FRACTION ONE SEVENTH",8529:"VULGAR FRACTION ONE NINTH",8530:"VULGAR FRACTION ONE TENTH",8531:"Fractions Thirds",8531:"Vulgar Fractions",8531:"Fractions Thirds",8531:"Vulgar Fractions",8533:"Fractions Fifths",8537:"Fractions Sixths",8539:"Fractions Eighths",8543:"FRACTION NUMERATOR ONE",8544:"Roman Numerals",8579:"claudian antisigma",8579:"apostrophic c",8579:"claudian antisigma",8580:"Latin small letter reversed C",8581:"Archaic Roman Numerals",
+8592:"LEFTWARDS ARROW",8592:"Arrows",8592:"LeftWARDS ARROW",8593:"UPWARDS ARROW",8593:"egressive airflow",8593:"UPWARDS ARROW",8594:"rightWARDS ARROW",8594:"total function",8594:"RIGHTWARDS ARROW",8594:"total function",8595:"DOWNWARDS ARROW",8595:"ingressive airflow",8596:"relation",8606:"fast cursor left",8607:"fast cursor up",8608:"fast cursor right",8608:"total surjection",8609:"fast cursor down",8609:"form feed",8611:"total injection",8614:"maplet",8615:"depth symbol",8623:"electrolysis",8628:"line feed",
+8632:"home",8633:"tab with shift tab",8636:"Harpoons",8653:"Double Arrows",8670:"page up",8671:"page down",8676:"leftward tab",8677:"rightward tab",8678:"Keyboard Symbols",8679:"shift",8682:"caps lock",8683:"level 2 lock",8684:"caps lock",8685:"numerics lock",8686:"level 3 select",8687:"level 3 lock",8688:"group lock",8689:"home",8690:"end",8691:"scrolling",8696:"partial function",8697:"partial relation",8699:"finite function",8700:"finite relation",8704:"FOR ALL",8704:"Mathematical Operators",8704:"universal quantifier",
+8705:"COMPLEMENT",8706:"PARTIAL DIFFERENTIAL",8707:"existential quantifier",8707:"THERE EXISTS",8707:"existential quantifier",8707:"THERE EXISTS",8708:"THERE DOES NOT EXIST",8709:"EMPTY SET",8709:"null set",8709:"EMPTY SET",8709:"null set",8710:"forward difference",8710:"symmetric difference",8710:"forward difference",8710:"INCREMENT",8710:"laplace operator",8710:"symmetric difference",8711:"backward difference",8711:"del",8711:"backward difference",8711:"NABLA",8712:"ELEMENT OF",8712:"Set Membership Signs",
+8713:"NOT AN ELEMENT OF",8714:"SMALL ELEMENT OF",8715:"CONTAINS AS MEMBER",8715:"such that",8716:"DOES NOT CONTAIN AS MEMBER",8717:"SMALL CONTAINS AS MEMBER",8717:"reversed straight epsilon",8717:"SMALL CONTAINS AS MEMBER",8718:"END OF PROOF",8718:"q.e.d.",8719:"N-ARY PRODUCT",8719:"product sign",8719:"N-ARY PRODUCT",8720:"coproduct sign",8720:"N-ARY COPRODUCT",8721:"N-ARY SUMMATION",8721:"summation sign",8721:"N-ARY SUMMATION",8722:"MINUS sign",8723:"MINUS-OR-PLUS sign",8724:"DOT PLUS",8725:"DIVISION SLASH",
+8726:"SET MINUS",8727:"ASTERISK OPERATOR",8728:"apl jot",8728:"composite function",8728:"apl jot",8728:"ring OPERATOR",8729:"BULLET OPERATOR",8730:"radical sign",8730:"SQUARE ROOT",8731:"CUBE ROOT",8732:"FOURTH ROOT",8733:"PROPORTIONAL TO",8734:"INFINITY",8735:"right ANGLE",8735:"Angles",8735:"RIGHT ANGLE",8736:"ANGLE",8737:"MEASURED ANGLE",8738:"angle arc",8738:"SPHERICAL ANGLE",8738:"angle arc",8738:"SPHERICAL ANGLE",8739:"apl stile",8739:"DIVIDES",8739:"Vertical Lines",8739:"apl stile",8739:"such that",
+8739:"Vertical Lines",8740:"DOES NOT DIVIDE",8741:"PARALLEL TO",8742:"NOT PARALLEL TO",8743:"LOGICAL AND",8743:"conjunction",8743:"LOGICAL AND",8743:"wedge",8744:"disjunction",8744:"LOGICAL OR",8744:"vee",8745:"cap",8745:"hat",8745:"INTERSECTION",8746:"cup",8746:"UNION",8747:"INTEGRAL",8747:"Integral Signs",8748:"DOUBLE INTEGRAL",8749:"TRIPLE INTEGRAL",8750:"CONTOUR INTEGRAL",8751:"SURFACE INTEGRAL",8752:"VOLUME INTEGRAL",8753:"CLOCKWISE INTEGRAL",8754:"CLOCKWISE CONTOUR INTEGRAL",8755:"ANTICLOCKWISE CONTOUR INTEGRAL",
+8755:"counterclockwise contour integral",8755:"ANTICLOCKWISE CONTOUR INTEGRAL",8755:"counterclockwise contour integral",8756:"Dotted Mathematical Operators",8756:"THEREFORE",8757:"BECAUSE",8758:"RATIO",8759:"PROPORTION",8760:"symmetric difference",8760:"DOT MINUS",8760:"saturating subtraction",8760:"symmetric difference",8761:"EXCESS",8762:"GEOMETRIC PROPORTION",8763:"HOMOTHETIC",8763:"Tilde Mathematical Operators",8764:"apl tilde",8764:"cycle",8764:"difference between",8764:"not",8764:"proportional to",
+8764:"similar to",8764:"TILDE OPERATOR",8764:"apl tilde",8764:"varies with",8765:"lazy s",8765:"reversed TILDE",8765:"lazy s",8765:"reversed TILDE",8766:"INVERTED LAZY S",8766:"most positive",8766:"INVERTED LAZY S",8767:"alternating current",8767:"SINE WAVE",8768:"WREATH PRODUCT",8769:"NOT TILDE",8770:"MINUS TILDE",8771:"ASYMPTOTICALLY EQUAL TO",8771:"Equality and Inequality Signs",8772:"NOT ASYMPTOTICALLY EQUAL TO",8773:"APPROXIMATELY EQUAL TO",8776:"ALMOST EQUAL TO",8776:"asymptotic to",8776:"ALMOST EQUAL TO",
+8777:"NOT ALMOST EQUAL TO",8779:"TRIPLE TILDE",8780:"ALL EQUAL TO",8781:"EQUIVALENT TO",8782:"GEOMETRICALLY EQUIVALENT TO",8783:"DIFFERENCE BETWEEN",8784:"APPROACHES THE LIMIT",8785:"GEOMETRICALLY EQUAL TO",8786:"nearly equals",8788:"COLON EQUALS",8789:"EQUALS COLON",8790:"ring IN EQUAL TO",8791:"approximately equal to",8791:"ring EQUAL TO",8792:"CORRESPONDS TO",8793:"corresponds to",8793:"ESTIMATES",8794:"EQUIANGULAR TO",8795:"STAR EQUALS",8796:"equal to by definition",8796:"DELTA EQUAL TO",8796:"equal to by definition",
+8796:"DELTA EQUAL TO",8796:"equiangular",8797:"EQUAL TO BY DEFINITION",8798:"MEASURED BY",8799:"QUESTIONED EQUAL TO",8800:"NOT EQUAL TO",8801:"IDENTICAL TO",8802:"NOT IDENTICAL TO",8803:"STRICTLY EQUIVALENT TO",8804:"LESS-THAN OR EQUAL TO",8805:"GREATER-THAN OR EQUAL TO",8810:"MUCH LESS-THAN",8811:"MUCH GREATER-THAN",8812:"BETWEEN",8812:"plaintiff",8812:"quantic",8826:"lower rank than",8826:"Order Relation Precedence Signs",8826:"PRECEDES",8827:"higher rank than",8827:"SUCCEEDS",8834:"included in set",
+8834:"SUBSET OF",8834:"Superset and Subset Signs",8835:"includes in set",8835:"SUPERSET OF",8836:"NOT A SUBSET OF",8837:"NOT A SUPERSET OF",8844:"MULTISET",8845:"MULTISET MULTIPLICATION",8846:"bag addition",8846:"MULTISET UNION",8847:"SQUARE IMAGE OF",8848:"SQUARE ORIGINAL OF",8851:"SQUARE CAP",8852:"SQUARE CUP",8853:"CIRCLED PLUS",8853:"direct sum",8853:"Enclosed Mathematical Operators",8853:"CIRCLED PLUS",8853:"direct sum",8853:"vector pointing into page",8854:"CIRCLED MINUS",8854:"symmetric difference",
+8854:"CIRCLED MINUS",8854:"symmetric difference",8855:"CIRCLED TIMES",8855:"tensor product",8855:"CIRCLED TIMES",8855:"vector pointing into page",8856:"CIRCLED DIVISION SLASH",8857:"CIRCLED DOT OPERATOR",8857:"direct product",8857:"CIRCLED DOT OPERATOR",8857:"direct product",8857:"vector pointing out of page",8858:"CIRCLED ring OPERATOR",8859:"CIRCLED ASTERISK OPERATOR",8860:"CIRCLED EQUALS",8861:"CIRCLED DASH",8862:"SQUARED PLUS",8863:"SQUARED MINUS",8864:"SQUARED TIMES",8865:"SQUARED DOT OPERATOR",
+8866:"implies",8866:"proves",8866:"reducible",8866:"RIGHT TACK",8866:"right TACK",8866:"Tacks and Turnstiles",8866:"turnstile",8866:"Tacks and Turnstiles",8866:"yields",8867:"does not yield",8867:"Left TACK",8867:"non-theorem",8867:"does not yield",8867:"reverse turnstile",8867:"LEFT TACK",8867:"reverse turnstile",8867:"does not yield",8868:"DOWN TACK",8868:"top",8869:"base",8869:"bottom",8869:"orthogonal to",8869:"perpendicular",8869:"UP TACK",8870:"ASSERTION",8870:"reduces to",8871:"MODELS",8872:"results in",
+8872:"satisfies",8872:"statement is true",8872:"tautology",8872:"TRUE",8872:"valid",8873:"FORCES",8880:"PRECEDES UNDER RELATION",8881:"SUCCEEDS UNDER RELATION",8882:"NORMAL SUBGROUP OF",8883:"CONTAINS AS NORMAL SUBGROUP",8886:"ORIGINAL OF",8887:"IMAGE OF",8888:"MULTIMAP",8889:"HERMITIAN CONJUGATE MATRIX",8890:"INTERCALATE",8891:"XOR",8892:"NAND",8893:"NOR",8894:"right ANGLE with ARC",8894:"RIGHT ANGLE with ARC",8895:"RIGHT TRIANGLE",8895:"right TRIANGLE",8896:"N-ARY LOGICAL AND",8896:"N-ary Operators",
+8897:"N-ARY LOGICAL OR",8898:"generalized intersection",8898:"N-ARY INTERSECTION",8899:"generalized union",8899:"N-ARY UNION",8899:"generalized union",8899:"N-ARY UNION",8900:"DIAMOND OPERATOR",8901:"DOT OPERATOR",8902:"STAR OPERATOR",8903:"DIVISION TIMES",8904:"BOWTIE",8905:"Left NORMAL FACTOR SEMIDIRECT PRODUCT",8905:"LEFT NORMAL FACTOR SEMIDIRECT PRODUCT",8906:"right NORMAL FACTOR SEMIDIRECT PRODUCT",8906:"RIGHT NORMAL FACTOR SEMIDIRECT PRODUCT",8906:"right NORMAL FACTOR SEMIDIRECT PRODUCT",8907:"Left SEMIDIRECT PRODUCT",
+8907:"LEFT SEMIDIRECT PRODUCT",8908:"right SEMIDIRECT PRODUCT",8908:"RIGHT SEMIDIRECT PRODUCT",8908:"right SEMIDIRECT PRODUCT",8909:"reversed TILDE EQUALS",8910:"CURLY LOGICAL OR",8911:"CURLY LOGICAL AND",8912:"Double Operators",8912:"DOUBLE SUBSET",8912:"Double Operators",8912:"DOUBLE SUBSET",8913:"DOUBLE SUPERSET",8914:"DOUBLE INTERSECTION",8915:"DOUBLE UNION",8916:"proper intersection",8916:"PITCHFORK",8916:"proper intersection",8917:"Equality and Inequality Signs",8920:"VERY MUCH LESS-THAN",8921:"VERY MUCH GREATER-THAN",
+8926:"Order Relation Precedence Signs",8938:"Normal Subgroup Signs",8942:"VERTICAL ELLIPSIS",8943:"MIDLINE HORIZONTAL ELLIPSIS",8944:"UP right DIAGONAL ELLIPSIS",8944:"UP RIGHT DIAGONAL ELLIPSIS",8944:"UP right DIAGONAL ELLIPSIS",8945:"DOWN right DIAGONAL ELLIPSIS",8945:"DOWN RIGHT DIAGONAL ELLIPSIS",8959:"Z NOTATION BAG MEMBERSHIP",8960:"DIAMETER sign",8960:"Miscellaneous Technical",8961:"ELECTRIC ARROW",8961:"end of transmission symbol",8962:"HOUSE",8963:"UP ARROWHEAD",8964:"DOWN ARROWHEAD",8965:"PROJECTIVE",
+8966:"PERSPECTIVE",8967:"WAVY LINE",8968:"apl upstile",8968:"Corner Brackets",8968:"LEFT CEILING",8968:"Corner Brackets",8968:"Left CEILING",8968:"apl upstile",8969:"right CEILING",8969:"RIGHT CEILING",8970:"apl downstile",8970:"LEFT FLOOR",8970:"Left FLOOR",8971:"right FLOOR",8971:"RIGHT FLOOR",8972:"Crops",8976:"beginning of line",8976:"reversed NOT sign",8977:"kissen",8977:"SQUARE LOZENGE",8977:"pillow",8977:"SQUARE LOZENGE",8978:"ARC",8979:"SEGMENT",8980:"SECTOR",8981:"TELEPHONE RECORDER",8982:"POSITION INDICATOR",
+8983:"VIEWDATA SQUARE",8984:"command key",8984:"PLACE OF INTEREST sign",8984:"command key",8984:"PLACE OF INTEREST sign",8985:"line marker",8985:"turned NOT sign",8986:"WATCH",8987:"HOURGLASS",8988:"Quine Corners",8992:"TOP half INTEGRAL",8993:"BOTTOM half INTEGRAL",8994:"FROWN",8995:"SMILE",8996:"enter key",8996:"Keyboard Symbols",8997:"OPTION KEY",8998:"delete to the right key",8998:"ERASE TO THE right",8998:"delete to the right key",8998:"ERASE TO THE RIGHT",8999:"X IN A RECTANGLE BOX",8999:"clear key",
+8999:"X IN A RECTANGLE BOX",9E3:"KEYBOARD",9001:"LEFT-POINTING ANGLE BRACKET",9001:"Left-POINTING ANGLE BRACKET",9002:"right-POINTING ANGLE BRACKET",9002:"RIGHT-POINTING ANGLE BRACKET",9003:"delete to the left key",9003:"ERASE TO THE LEFT",9003:"delete to the left key",9003:"ERASE TO THE Left",9004:"BENZENE ring",9005:"CYLINDRICITY",9005:"Drafting Symbols",9006:"ALL AROUND-PROFILE",9007:"SYMMETRY",9008:"TOTAL RUNOUT",9009:"DIMENSION ORIGIN",9010:"CONICAL TAPER",9011:"SLOPE",9012:"COUNTERBORE",9013:"COUNTERSINK",
+9014:"APL Functional Symbols",9060:"hoot",9061:"holler",9064:"smirk",9083:"NOT CHECK MARK",9085:"SHOULDERED OPEN BOX",9085:"Graphics for Control Codes",9085:"keyboard symbol for no break space",9085:"SHOULDERED OPEN BOX",9085:"keyboard symbol for no break space",9086:"BELL SYMBOL",9087:"VERTICAL LINE with MIDDLE DOT",9087:"symbol for end of medium",9087:"VERTICAL LINE with MIDDLE DOT",9087:"VERTICAL LINE with middle dot",9088:"INSERTION SYMBOL",9088:"Keyboard Symbols",9089:"CONTINUOUS UNDERLINE SYMBOL",
+9090:"DISCONTINUOUS UNDERLINE SYMBOL",9091:"EMPHASIS SYMBOL",9092:"COMPOSITION SYMBOL",9093:"center",9094:"ENTER SYMBOL",9095:"ALTERNATIVE KEY SYMBOL",9096:"control",9096:"HELM SYMBOL",9097:"pause",9098:"interrupt",9099:"escape",9100:"UNDO SYMBOL",9101:"Electrotechnical Symbols",9101:"MONOSTABLE SYMBOL",9101:"Electrotechnical Symbols",9102:"HYSTERESIS SYMBOL",9107:"DIRECT CURRENT SYMBOL FORM TWO",9108:"SOFTWARE-FUNCTION SYMBOL",9110:"DECIMAL SEPARATOR KEY SYMBOL",9110:"Keyboard Symbols",9110:"DECIMAL SEPARATOR KEY SYMBOL",
+9110:"Keyboard Symbols",9111:"PREVIOUS PAGE",9112:"NEXT PAGE",9113:"PRINT SCREEN SYMBOL",9114:"CLEAR SCREEN SYMBOL",9115:"Bracket Pieces",9136:"Bracket Pieces",9136:"left moustache",9137:"right moustache",9138:"Summation Sign Parts",9140:"Vertical Brackets",9143:"Terminal Graphic Characters",9146:"Horizontal Scan Lines",9150:"Dentistry Notation Symbols",9165:"SQUARE FOOT",9166:"RETURN SYMBOL",9167:"eject media",9169:"Metrical Symbols",9178:"EARTH GROUND",9179:"FUSE",9180:"Bracket Variants for Vertical Text",
+9186:"WHITE TRAPEZIUM",9188:"STRAIGHTNESS",9189:"FLATNESS",9190:"AC CURRENT",9191:"ELECTRICAL INTERSECTION",9192:"DECIMAL EXPONENT SYMBOL",9193:"Double Triangles",9193:"fast forward",9193:"Double Triangles",9194:"fast rewind",9200:"ALARM CLOCK",9201:"STOPWATCH",9202:"TIMER CLOCK",9203:"HOURGLASS with FLOWING SAND",9216:"Graphic Pictures for Control Codes",9216:"SYMBOL FOR NULL",9216:"Graphic Pictures for Control Codes",9217:"SYMBOL FOR START OF HEADING",9218:"SYMBOL FOR START OF TEXT",9219:"SYMBOL FOR END OF TEXT",
+9220:"SYMBOL FOR END OF TRANSMISSION",9221:"SYMBOL FOR ENQUIRY",9222:"SYMBOL FOR ACKNOWLEDGE",9223:"SYMBOL FOR BELL",9224:"SYMBOL FOR BACKSPACE",9225:"SYMBOL FOR HORIZONTAL TABULATION",9226:"SYMBOL FOR LINE FEED",9227:"SYMBOL FOR VERTICAL TABULATION",9228:"SYMBOL FOR FORM FEED",9229:"SYMBOL FOR CARRIAGE RETURN",9230:"SYMBOL FOR SHIFT OUT",9231:"SYMBOL FOR SHIFT IN",9232:"SYMBOL FOR DATA LINK ESCAPE",9233:"Symbols for Device Controls",9237:"SYMBOL FOR NEGATIVE ACKNOWLEDGE",9238:"SYMBOL FOR SYNCHRONOUS IDLE",
+9239:"SYMBOL FOR END OF TRANSMISSION BLOCK",9240:"SYMBOL FOR CANCEL",9241:"SYMBOL FOR END OF MEDIUM",9242:"SYMBOL FOR SUBSTITUTE",9243:"SYMBOL FOR ESCAPE",9244:"SYMBOL FOR FILE SEPARATOR",9245:"SYMBOL FOR GROUP SEPARATOR",9246:"SYMBOL FOR RECORD SEPARATOR",9247:"SYMBOL FOR UNIT SEPARATOR",9248:"SYMBOL FOR SPACE",9249:"SYMBOL FOR DELETE",9250:"BLANK SYMBOL",9251:"OPEN BOX",9251:"graphic for space",9252:"SYMBOL FOR NEWLINE",9253:"SYMBOL FOR DELETE FORM TWO",9254:"SYMBOL FOR SUBSTITUTE FORM TWO",9280:"Optical Character Recognition OCR",
+9280:"OCR Optical Character Recognition",9312:"Enclosed Alphanumerics",9312:"Circled Numbers",9312:"Enclosed Alphanumerics",9312:"Circled Numbers",9332:"Parenthesized Numbers",9352:"Numbers Followed by Period",9372:"Parenthesized Latin Letters",9398:"Circled Latin Letters",9450:"CIRCLED DIGIT ZERO",9451:"White on Black Circled Numbers",9461:"Double Circled Numbers",9472:"Box Drawing",9472:"Form and Chart Components",9600:"Block Elements",9608:"FULL BLOCK",9608:"solid",9617:"Shade Characters",9622:"Terminal Graphic Characters",
+9632:"Geometric Shapes",9632:"Squares",9633:"quadrature",9644:"Rectangles",9646:"histogram marker",9648:"BLACK PARALLELOGRAM",9650:"Triangles",9651:"trine",9655:"range restriction",9658:"Pointers",9659:"forward arrow indicator",9661:"hamilton operator",9665:"domain restriction",9669:"backward arrow indicator",9670:"Diamonds",9673:"tainome japanese bullet",9673:"FISHEYE",9673:"tainome japanese bullet",9674:"LOZENGE",9675:"WHITE CIRCLE",9675:"Circles",9675:"WHITE CIRCLE",9676:"DOTTED CIRCLE",9678:"BULLSEYE",
+9679:"BLACK CIRCLE",9692:"Arcs",9702:"WHITE BULLET",9711:"LARGE CIRCLE",9712:"Quadrant Control Code Graphics",9723:"always",9724:"BLACK MEDIUM SQUARE",9726:"BLACK MEDIUM small SQUARE",9728:"Weather and Astrological Symbols",9728:"BLACK SUN with RAYS",9728:"clear weather",9728:"Miscellaneous Dingbats",9728:"Weather Dingbats",9728:"BLACK SUN with RAYS",9728:"Miscellaneous Symbols",9728:"Weather and Astrological Symbols",9728:"clear weather",9729:"CLOUD",9729:"cloudy weather",9730:"rainy weather",9730:"UMBRELLA",
+9730:"rainy weather",9731:"SNOWMAN",9731:"snowy weather",9732:"COMET",9733:"BLACK STAR",9734:"WHITE STAR",9735:"LIGHTNING",9736:"THUNDERSTORM",9737:"SUN",9738:"ASCENDING NODE",9739:"DESCENDING NODE",9740:"CONJUNCTION",9741:"OPPOSITION",9742:"BLACK TELEPHONE",9743:"WHITE TELEPHONE",9744:"BALLOT BOX",9745:"BALLOT BOX with CHECK",9746:"BALLOT BOX with X",9747:"st. andrews cross",9747:"SALTIRE",9747:"st. andrews cross",9748:"UMBRELLA with RAIN DROPS",9748:"showery weather",9748:"UMBRELLA with RAIN DROPS",
+9748:"showery weather",9749:"HOT BEVERAGE",9749:"cup of coffee",9749:"cup of tea",9749:"HOT BEVERAGE",9749:"cup of tea",9750:"Japanese Chess Symbols",9750:"WHITE SHOGI PIECE",9750:"Japanese Chess Symbols",9750:"WHITE SHOGI PIECE",9751:"BLACK SHOGI PIECE",9752:"SHAMROCK",9753:"reversed ROTATED FLORAL HEART BULLET",9754:"BLACK left POINTING INDEX",9754:"Pointing Index Finger Dingbats",9754:"Pointing Hand Symbols",9754:"Pointing Index Finger Dingbats",9754:"BLACK left POINTING INDEX",9754:"BLACK Left POINTING INDEX",
+9754:"Pointing Hand Symbols",9754:"Pointing Index Finger Dingbats",9754:"BLACK left POINTING INDEX",9754:"Pointing Hand Symbols",9755:"BLACK right POINTING INDEX",9755:"BLACK RIGHT POINTING INDEX",9756:"WHITE left POINTING INDEX",9756:"WHITE Left POINTING INDEX",9756:"WHITE left POINTING INDEX",9757:"WHITE UP POINTING INDEX",9758:"fist",9758:"WHITE right POINTING INDEX",9758:"WHITE RIGHT POINTING INDEX",9758:"WHITE right POINTING INDEX",9759:"WHITE DOWN POINTING INDEX",9760:"Hazard Dingbats",9760:"Warning Dingbats",
+9760:"Hazard Dingbats",9760:"jolly roger",9760:"poison",9760:"Warning Signs",9760:"SKULL and CROSSBONES",9760:"Warning Signs",9761:"CAUTION sign",9762:"RADIOACTIVE sign",9763:"BIOHAZARD sign",9764:"CADUCEUS",9765:"ANKH",9765:"Religious and Political Symbols",9766:"ORTHODOX CROSS",9766:"Religious and Political Symbols",9767:"CHI RHO",9767:"christogram",9767:"constantines cross",9768:"CROSS OF LORRAINE",9769:"CROSS OF JERUSALEM",9770:"STAR and CRESCENT",9772:"ADI SHAKTI",9772:"gurmukhi khanda",9773:"HAMMER and SICKLE",
+9774:"PEACE SYMBOL",9775:"YIN YANG",9776:"I Ching / Yijing Trigram Symbols",9776:"Yijing / I Ching Trigram Symbols",9784:"WHEEL OF DHARMA",9785:"WHITE FROWNING FACE",9786:"WHITE SMILING FACE",9786:"have a nice day!",9786:"WHITE SMILING FACE",9787:"BLACK SMILING FACE",9788:"compass",9788:"WHITE SUN with RAYS",9789:"Astrological Symbols",9789:"FIRST QUARTER MOON",9789:"Astrological Symbols",9790:"LAST QUARTER MOON",9791:"MERCURY",9791:"Planet Symbols",9792:"FEMALE sign",9792:"venus",9793:"EARTH",9794:"MALE sign",
+9794:"mars",9795:"JUPITER",9796:"SATURN",9797:"URANUS",9798:"NEPTUNE",9799:"PLUTO",9800:"ARIES",9800:"Zodiacal Symbols",9801:"TAURUS",9802:"GEMINI",9803:"CANCER",9804:"LEO",9805:"minim alternate glyph",9805:"VIRGO",9806:"LIBRA",9807:"drop",9807:"minim",9807:"SCORPIUS",9808:"SAGITTARIUS",9809:"CAPRICORN",9810:"AQUARIUS",9811:"PISCES",9812:"Chess Symbols",9824:"Playing Card Suits",9824:"Playing Card Symbols",9827:"shamrock",9829:"valentine",9832:"HOT SPringS",9833:"crotchet",9833:"Music Dingbats",9833:"Basic Musical Symbols",
+9833:"QUARTER NOTE",9833:"Basic Musical Symbols",9834:"EIGHTH NOTE",9834:"quaver",9835:"BEAMED EIGHTH NOTES",9835:"beamed quavers",9835:"BEAMED EIGHTH NOTES",9835:"beamed quavers",9836:"beamed semiquavers",9836:"BEAMED SIXTEENTH NOTES",9836:"beamed semiquavers",9836:"BEAMED SIXTEENTH NOTES",9837:"MUSIC FLAT sign",9838:"MUSIC NATURAL sign",9839:"infix bag count",9839:"MUSIC SHARP sign",9840:"WEST SYRIAC CROSS",9841:"EAST SYRIAC CROSS",9842:"UNIVERSAL RECYCLING SYMBOL",9842:"Recycling Symbols",9842:"UNIVERSAL RECYCLING SYMBOL",
+9843:"Plastics Recycling Symbols",9852:"RECYCLED PAPER SYMBOL",9853:"PARTIALLY-RECYCLED PAPER SYMBOL",9853:"PARTIALLY- RECYCLED PAPER SYMBOL",9854:"PERMANENT PAPER sign",9855:"WHEELCHAIR SYMBOL",9856:"Dice",9862:"Go Markers",9866:"Yijing / I Ching Monogram and Digram Symbols",9866:"I Ching / Yijing Monogram and Digram Symbols",9866:"Yijing / I Ching Monogram and Digram Symbols",9866:"I Ching / Yijing Monogram and Digram Symbols",9866:"Yijing / I Ching Monogram and Digram Symbols",9872:"Dictionary and Map Symbols",
+9872:"WHITE FLAG",9872:"Dictionary and Map Symbols",9872:"WHITE FLAG",9873:"BLACK FLAG",9874:"HAMMER and PICK",9874:"mining symbol",9874:"working day symbol",9875:"ANCHOR",9875:"harbor symbol",9876:"battleground symbol",9876:"CROSSED SWORDS",9877:"STAFF OF AESCULAPIUS",9878:"jurisprudence symbol",9878:"SCALES",9879:"ALEMBIC",9881:"GEAR",9882:"STAFF OF HERMES",9883:"ATOM SYMBOL",9884:"FLEUR-DE-LIS",9888:"Warning Signs",9888:"WARNING sign",9889:"HIGH VOLTAGE sign",9889:"lightning",9889:"thunder",9889:"HIGH VOLTAGE sign",
+9890:"Gender Symbols",9898:"MEDIUM WHITE CIRCLE",9899:"MEDIUM BLACK CIRCLE",9900:"MEDIUM small WHITE CIRCLE",9901:"Genealogical Symbols",9901:"MARRIAGE SYMBOL",9901:"Genealogical Symbols",9902:"DIVORCE SYMBOL",9903:"UNMARRIED PARTNERSHIP SYMBOL",9904:"buried symbol",9904:"COFFIN",9905:"cremated symbol",9905:"FUNERAL URN",9906:"NEUTER",9907:"Astrological Signs",9917:"SOCCER BALL",9918:"BASEBALL",9919:"SQUARED KEY",9919:"parental lock",9920:"Symbols for Draughts and Checkers",9924:"light snow",9924:"SNOWMAN WITHOUT SNOW",
+9925:"partly cloudy",9925:"SUN BEHIND CLOUD",9926:"RAIN",9927:"heavy snow",9927:"BLACK SNOWMAN",9928:"thunderstorm",9929:"turned WHITE SHOGI PIECE",9930:"turned BLACK SHOGI PIECE",9932:"accident",9933:"DISABLED CAR",9934:"OPHIUCHUS",9935:"construction",9935:"PICK",9936:"CAR SLIDING",9936:"icy road",9937:"HELMET with WHITE CROSS",9938:"CIRCLED CROSSING LANES",9938:"road closed",9939:"CHAINS",9940:"do not enter",9940:"NO ENTRY",9946:"DRIVE SLOW sign",9947:"yield",9951:"black lorry",9951:"BLACK TRUCK",
+9954:"uranus",9956:"PENTAGRAM",9956:"pentangle pentalpha",9960:"hospital",9960:"BLACK CROSS ON SHIELD",9961:"SHINTO SHRINE",9961:"torii",9962:"CHURCH",9963:"CASTLE",9964:"HISTORIC SITE",9965:"factory",9966:"power plant",9967:"MAP SYMBOL FOR LIGHTHOUSE",9968:"MOUNTAIN",9969:"bathing beach",9969:"UMBRELLA ON GROUND",9970:"FOUNTAIN",9970:"park",9971:"FLAG IN HOLE",9971:"golf course",9972:"boat terminal",9972:"FERRY",9972:"marina or yacht harbour",9972:"SAILBOAT",9974:"SQUARE FOUR CORNERS",9975:"SKIER",
+9976:"ICE SKATE",9978:"camping site",9978:"TENT",9980:"cemetery",9980:"graveyard",9980:"HEADSTONE GRAVEYARD SYMBOL",9981:"FUEL PUMP",9981:"gas station",9981:"petrol station",9982:"CUP ON BLACK SQUARE",9982:"drive-in restaurant",9984:"Dingbats",9984:"ITC Zapf Dingbats Series 100",9984:"Zapf Dingbats",9984:"ITC Zapf Dingbats Series 100",9985:"Scissors Dingbats",9985:"UPPER BLADE SCISSORS",9986:"BLACK SCISSORS",9988:"WHITE SCISSORS",9990:"TELEPHONE LOCATION sign",9991:"TAPE DRIVE",9992:"AIRPLANE",9993:"ENVELOPE",
+9994:"RAISED FIST",9994:"paper, scissors game rock in rock",9995:"RAISED HAND",9995:"paper, scissors game paper in rock",9996:"VICTORY HAND",9996:"paper, scissors game scissors in rock",9996:"VICTORY HAND",9997:"WRITING HAND",9998:"Pencil Dingbats",9998:"LOWER right PENCIL",9998:"LOWER RIGHT PENCIL",9999:"PENCIL",1E4:"UPPER right PENCIL",1E4:"UPPER RIGHT PENCIL",1E4:"UPPER right PENCIL",10001:"WHITE NIB",10002:"BLACK NIB",10003:"CHECK MARK",10004:"HEAVY CHECK MARK",10005:"MULTIPLICATION X",10006:"HEAVY MULTIPLICATION X",
+10007:"BALLOT X",10008:"HEAVY BALLOT X",10009:"Cross Dingbats",10009:"Crosses",10009:"Cross Dingbats",10013:"Latin CROSS",10016:"MALTESE CROSS",10017:"STAR OF DAVID",10017:"Snowflakes",10017:"STAR OF DAVID",10017:"Stars",10018:"Asterisk Dingbats",10022:"Star Dingbats",10024:"SPARKLES",10038:"sextile",10042:"starburst",10052:"Snowflake Dingbats",10055:"SPARKLE",10056:"HEAVY SPARKLE",10057:"jack",10059:"turbofan",10060:"CROSS MARK",10061:"SHADOWED WHITE CIRCLE",10061:"Drop-shadowed Dingbats",10061:"SHADOWED WHITE CIRCLE",
+10062:"NEGATIVE SQUARED NEGATIVE SQUARED CROSS MARK",10067:"BLACK Question Mark ORNAMENT",10068:"WHITE Question Mark ORNAMENT",10069:"WHITE EXCLAMATION MARK ORNAMENT",10072:"Vertical Bar Dingbats",10075:"Quotation Mark Dingbats",10075:"Punctuation Ornaments",10075:"Quotation Mark Ornaments",10075:"Punctuation Ornaments",10075:"Quotation Mark Dingbats",10075:"Quotation Mark Ornaments",10081:"CURVED STEM PARAGRAPH sign ORNAMENT",10082:"HEAVY EXCLAMATION MARK ORNAMENT",10083:"Heart Dingbats",10083:"Heart Ornaments",
+10086:"aldus leaf",10087:"hedera",10087:"ivy leaf",10088:"Ornamental Brackets",10094:"Ornamental Angle Quotation Marks",10102:"Dingbat Circled Digits",10102:"Circled Inverse Numbers",10102:"Dingbat Circled Digits",10102:"Circled Inverse Numbers",10132:"Arrow Dingbats",10132:"Dingbat Arrows",10132:"Arrow Dingbats",10160:"CURLY LOOP",10175:"DOUBLE CURLY LOOP",10176:"Mathematical Symbols",10176:"Miscellaneous Mathematical Symbols-A",10176:"Mathematical Symbols",10176:"Miscellaneous Mathematical Symbols-A",
+10188:"LONG DIVISION",10195:"pullback",10196:"pushout",10197:"Database Theory Operators",10200:"Modal Logic Operators",10200:"Tacks and Turnstiles",10207:"radial component",10208:"Modal Logic Operators",10214:"left bag bracket",10214:"Mathematical Brackets",10214:"left bag bracket",10214:"Mathematical Brackets",10215:"right bag bracket",10216:"MATHEMATICAL left ANGLE BRACKET",10216:"bra",10216:"left sequence bracket",10216:"MATHEMATICAL Left ANGLE BRACKET",10216:"left sequence bracket",10217:"MATHEMATICAL right ANGLE BRACKET",
+10217:"right sequence bracket",10217:"ket",10217:"MATHEMATICAL RIGHT ANGLE BRACKET",10217:"right sequence bracket",10218:"MATHEMATICAL left double ANGLE BRACKET",10218:"left chevron bracket",10218:"MATHEMATICAL left double ANGLE BRACKET",10218:"left chevron bracket",10218:"MATHEMATICAL left double ANGLE BRACKET",10218:"left chevron bracket",10218:"MATHEMATICAL Left double ANGLE BRACKET",10219:"MATHEMATICAL right double ANGLE BRACKET",10219:"right chevron bracket",10219:"MATHEMATICAL right double ANGLE BRACKET",
+10219:"right chevron bracket",10219:"MATHEMATICAL RIGHT double ANGLE BRACKET",10222:"lgroup",10223:"rgroup",10224:"Arrows-A Supplement",10229:"Long Arrows",10235:"maps from",10236:"maps to",10240:"Braille Patterns",10496:"Supplemental Arrows-B",10496:"partial surjection",10496:"Supplemental Arrows-B",10496:"partial surjection",10497:"finite surjection",10501:"maps to",10502:"maps from",10503:"maps to",10516:"partial injection",10517:"finite injection",10518:"bijection",10519:"surjective injection",
+10520:"finite surjective injection",10570:"Miscellaneous Harpoons",10620:"Fish Tails",10624:"Mathematical Symbols",10624:"Miscellaneous Mathematical Symbols-B",10624:"Mathematical Symbols",10624:"Miscellaneous Mathematical Symbols-B",10624:"TRIPLE VERTICAL BAR DELIMITER",10625:"Z NOTATION SPOT",10626:"Z NOTATION TYPE COLON",10627:"LEFT WHITE CURLY BRACKET",10627:"Brackets",10627:"LEFT WHITE CURLY BRACKET",10627:"Left WHITE CURLY BRACKET",10627:"LEFT WHITE CURLY BRACKET",10628:"right WHITE CURLY BRACKET",
+10628:"RIGHT WHITE CURLY BRACKET",10628:"right WHITE CURLY BRACKET",10629:"Left WHITE PARENTHESIS",10629:"LEFT WHITE PARENTHESIS",10630:"right WHITE PARENTHESIS",10630:"RIGHT WHITE PARENTHESIS",10630:"right WHITE PARENTHESIS",10649:"DOTTED FENCE",10649:"Fences",10651:"Angles and Measured Angles",10672:"Empty Sets",10677:"Circle Symbols",10692:"Square Symbols",10698:"Triangle Symbols",10705:"Bowtie Symbols",10710:"vertical bowtie",10710:"white framus",10710:"vertical bowtie",10710:"white framus",10711:"BLACK HOURGLASS",
+10712:"Wiggly Fences",10716:"isotech entity &iinfin;",10720:"dalembertian",10722:"SHUFFLE PRODUCT",10723:"Relational Operators",10726:"tautological equivalent",10726:"GLEICH STARK",10726:"tautological equivalent",10727:"THERMODYNAMIC",10731:"BLACK LOZENGE",10734:"Error Bar Symbols",10740:"colon right arrow",10740:"RULE-DELAYED",10741:"Reverse SOLIDUS OPERATOR",10741:"REVERSE SOLIDUS OPERATOR",10744:"BIG SOLIDUS",10744:"Large Operators",10744:"BIG SOLIDUS",10745:"BIG REVERSE SOLIDUS",10745:"BIG Reverse SOLIDUS",
+10745:"schema hiding",10745:"BIG REVERSE SOLIDUS",10746:"DOUBLE PLUS",10746:"Specialized Plus Sign Operators",10746:"DOUBLE PLUS",10747:"TRIPLE PLUS",10750:"TINY",10751:"MINY",10752:"N-ARY CIRCLED DOT OPERATOR",10752:"Supplemental Mathematical Operators",10752:"N-ary Operators",10752:"Mathematical Operators Supplement",10752:"N-ary Operators",10752:"Supplemental Mathematical Operators",10753:"N-ARY CIRCLED PLUS OPERATOR",10754:"N-ARY CIRCLED TIMES OPERATOR",10759:"merge",10761:"N-ARY TIMES OPERATOR",
+10762:"Summations and Integrals",10769:"ANTICLOCKWISE INTEGRATION",10769:"counterclockwise integration",10769:"ANTICLOCKWISE INTEGRATION",10769:"counterclockwise integration",10774:"QUATERNION INTEGRAL OPERATOR",10779:"upper integral",10780:"lower integral",10781:"large bowtie",10781:"JOIN",10781:"large bowtie",10786:"Plus and Minus Sign Operators",10788:"positive difference or sum",10790:"sum or positive difference",10791:"nim-addition",10799:"Multiplication and Division Sign Operators",10799:"VECTOR OR CROSS PRODUCT",
+10803:"SMASH PRODUCT",10808:"CIRCLED DIVISION sign",10812:"INTERIOR PRODUCT",10813:"rightHAND INTERIOR PRODUCT",10813:"RIGHTHAND INTERIOR PRODUCT",10816:"Intersections and Unions",10817:"bag subtraction",10833:"Logical Ands and Ors",10835:"DOUBLE LOGICAL AND",10836:"DOUBLE LOGICAL OR",10913:"absolute continuity",10939:"DOUBLE PRECEDES",10940:"DOUBLE SUCCEEDS",10941:"Subset and Superset Relations",10969:"Forks",10972:"not independent",10973:"independent",10974:"Tacks and Turnstiles",10978:"ordinarily satisfies",
+10987:"independence",10990:"Vertical Line Operators",10993:"necessarily satisfies",10996:"interleave",11005:"DOUBLE SOLIDUS OPERATOR",11006:"WHITE VERTICAL BAR",11006:"dijkstra choice",11006:"WHITE VERTICAL BAR",11006:"WHITE VERTICAL bar",11007:"n-ary dijkstra choice",11007:"N-ARY WHITE VERTICAL bar",11007:"N-ARY WHITE VERTICAL BAR",11008:"Miscellaneous Arrows",11026:"Polygonal Symbols",11034:"Squares",11045:"Diamonds and Lozenges",11052:"Ellipses",11056:"Mathematical Arrows",11093:"Heavy Circle Signs",
+11264:"Glagolitic",11360:"Latin Extended-C",11392:"Bohairic Coptic",11442:"Extended Coptic",11499:"Cryptogrammic Letters",11520:"Georgian Supplement",11568:"Tifinagh",11648:"Ethiopic Extended",11744:"Cyrillic Extended-A",11776:"New Testament Editorial Symbols",11776:"Supplemental Punctuation",11776:"New Testament Editorial Symbols",11790:"Ancient Greek Textual Symbols",11800:"gnaborretni",11800:"INVERTED INTERROBANG",11801:"PALM BRANCH",11802:"Dictionary Punctuation",11818:"Medievalist Punctuation",
+11825:"WORD SEPARATOR MIDDLE DOT",11825:"WORD SEPARATOR middle dot",11904:"CJK Phonetics and Symbols Area",11904:"CJK Radicals Supplement",11904:"CJK Phonetics and Symbols Area",11904:"CJK Radicals Supplement",11904:"CJK Phonetics and Symbols Area",12032:"CJK Kangxi Radicals",12272:"CJK Ideographic Description Characters",12288:"CJK Symbols and Punctuation",12288:"IDEOGRAPHIC SPACE",12288:"CJK Symbols and Punctuation",12288:"IDEOGRAPHIC SPACE",12288:"CJK Symbols and Punctuation",12289:"IDEOGRAPHIC COMMA",
+12290:"IDEOGRAPHIC FULL STOP",12291:"DITTO MARK",12292:"JAPANESE INDUSTRIAL STANDARD SYMBOL",12293:"IDEOGRAPHIC ITERATION MARK",12294:"IDEOGRAPHIC CLOSING MARK",12295:"IDEOGRAPHIC NUMBER ZERO",12296:"LEFT ANGLE BRACKET",12296:"CJK Angle Brackets",12296:"LEFT ANGLE BRACKET",12296:"CJK Angle Brackets",12296:"Left ANGLE BRACKET",12297:"right ANGLE BRACKET",12297:"RIGHT ANGLE BRACKET",12298:"LEFT double ANGLE BRACKET",12298:"Left double ANGLE BRACKET",12299:"right double ANGLE BRACKET",12299:"RIGHT double ANGLE BRACKET",
+12300:"LEFT CORNER BRACKET",12300:"CJK Corner Brackets",12300:"CJK Quotation Marks",12300:"CJK Corner Brackets",12300:"Left CORNER BRACKET",12300:"CJK Quotation Marks",12301:"right CORNER BRACKET",12301:"RIGHT CORNER BRACKET",12302:"LEFT WHITE CORNER BRACKET",12302:"Left WHITE CORNER BRACKET",12302:"LEFT WHITE CORNER BRACKET",12303:"right WHITE CORNER BRACKET",12303:"RIGHT WHITE CORNER BRACKET",12303:"right WHITE CORNER BRACKET",12304:"LEFT BLACK LENTICULAR BRACKET",12304:"Left BLACK LENTICULAR BRACKET",
+12304:"LEFT BLACK LENTICULAR BRACKET",12305:"right BLACK LENTICULAR BRACKET",12305:"RIGHT BLACK LENTICULAR BRACKET",12306:"POSTAL MARK",12307:"GETA MARK",12308:"LEFT TORTOISE SHELL BRACKET",12308:"Left TORTOISE SHELL BRACKET",12308:"LEFT TORTOISE SHELL BRACKET",12309:"right TORTOISE SHELL BRACKET",12309:"RIGHT TORTOISE SHELL BRACKET",12309:"right TORTOISE SHELL BRACKET",12310:"LEFT WHITE LENTICULAR BRACKET",12310:"Left WHITE LENTICULAR BRACKET",12310:"LEFT WHITE LENTICULAR BRACKET",12311:"right WHITE LENTICULAR BRACKET",
+12311:"RIGHT WHITE LENTICULAR BRACKET",12311:"right WHITE LENTICULAR BRACKET",12312:"LEFT WHITE TORTOISE SHELL BRACKET",12312:"Left WHITE TORTOISE SHELL BRACKET",12312:"LEFT WHITE TORTOISE SHELL BRACKET",12313:"right WHITE TORTOISE SHELL BRACKET",12313:"RIGHT WHITE TORTOISE SHELL BRACKET",12313:"right WHITE TORTOISE SHELL BRACKET",12314:"left abstract syntax bracket",12314:"LEFT WHITE SQUARE BRACKET",12314:"left abstract syntax bracket",12314:"Left WHITE SQUARE BRACKET",12314:"LEFT WHITE SQUARE BRACKET",
+12315:"right abstract syntax bracket",12315:"right WHITE SQUARE BRACKET",12315:"right abstract syntax bracket",12315:"RIGHT WHITE SQUARE BRACKET",12315:"right WHITE SQUARE BRACKET",12316:"WAVE DASH",12317:"reversed double PRIME QUOTATION MARK",12318:"DOUBLE PRIME QUOTATION MARK",12319:"LOW double PRIME QUOTATION MARK",12320:"POSTAL MARK FACE",12321:"Hangzhou Numerals",12321:"Suzhou Numerals",12330:"CJK Diacritics",12330:"Ideographic Tone Marks",12336:"WAVY DASH",12337:"Kana Repeat Marks",12342:"CIRCLED POSTAL MARK",
+12347:"VERTICAL IDEOGRAPHIC ITERATION MARK",12348:"MASU MARK",12350:"IDEOGRAPHIC VARIATION INDICATOR",12351:"IDEOGRAPHIC half FILL SPACE",12352:"Hiragana",12352:"Japanese Hiragana",12437:"HIRAGANA letter small KA",12437:"Hiragana Supplement",12437:"HIRAGANA letter small KA",12438:"HIRAGANA letter small KE",12441:"combining japanese daku-on",12442:"combining japanese han-daku-on",12443:"japanese daku-on",12444:"japanese han-daku-on",12445:"HIRAGANA ITERATION MARK",12446:"HIRAGANA VOICED ITERATION MARK",
+12448:"KATAKANA-HIRAGANA double HYPHEN",12448:"Japanese Katakana",12448:"Katakana",12448:"KATAKANA-HIRAGANA double HYPHEN",12539:"KATAKANA MIDDLE DOT",12539:"KATAKANA middle dot",12539:"KATAKANA MIDDLE DOT",12540:"KATAKANA-HIRAGANA PROLONGED SOUND MARK",12541:"KATAKANA ITERATION MARK",12542:"KATAKANA VOICED ITERATION MARK",12543:"KATAKANA DIGRAPH KOTO",12544:"Chinese Bopomofo",12592:"Korean Hangul Compatibility Jamo",12644:"HANGUL FILLER",12645:"Korean Hangul Archaic Letters",12688:"Japanese Kanbun Ideographic Annotation",
+12704:"Chinese Bopomofo Extensions",12736:"CJK Strokes",12784:"Katakana Extensions for Ainu",12784:"Katakana Phonetic Extensions",12800:"Enclosed CJK Letters and Months",12800:"Parenthesized Korean Hangul Letters",12800:"Enclosed CJK Letters and Months",12800:"Parenthesized Korean Hangul Letters",12814:"Parenthesized Korean Hangul Syllables",12832:"Parenthesized CJK Ideographs",12881:"Circled Numbers",12896:"Circled Korean Hangul Letters",12910:"Circled Korean Hangul Syllables",12927:"KOREAN STANDARD SYMBOL",
+12928:"Circled Ideographs",12977:"Circled Numbers",12992:"Ideographic Telegraph Symbols for Months",13008:"Circled Katakana",13008:"Circled Japanese Katakana",13008:"Circled Katakana",13056:"CJK Compatibility",13056:"Squared Japanese Katakana Words",13056:"Squared Katakana Words",13056:"Squared Japanese Katakana Words",13056:"Squared Katakana Words",13144:"Ideographic Telegraph Symbols for Hours",13169:"Squared Latin Abbreviations",13179:"Japanese Era Names",13183:"japanese incorporated",13183:"kabusiki-gaisya",
+13184:"Squared Latin Abbreviations",13280:"Ideographic Telegraph Symbols for Days",13312:"CJK Ideographs Area",13312:"CJK Unified Ideographs Extension A",13312:"CJK Ideographs Area",13312:"CJK Unified Ideographs Extension A",19904:"Yijing / I Ching Hexagram Symbols",19904:"I Ching / Yijing Hexagram Symbols",19904:"Yijing / I Ching Hexagram Symbols",19968:"CJK Unified Ideographs",19968:"Han Ideographs",19968:"CJK Unified Ideographs",19968:"Han Ideographs",19968:"CJK Unified Ideographs",40960:"Yi Syllables",
+42128:"Yi Radicals",42192:"Lisu",42240:"Vai",42560:"Cyrillic Extended-B",42656:"Bamum",42752:"Corner Tone Marks for Chinese",42752:"Modifier Tone Letters",42752:"Corner Tone Marks for Chinese",42784:"Latin Extended-D",43008:"Syloti Nagri",43014:"SYLOTI NAGRI sign HASANTA",43056:"Common Indic Number Forms",43072:"Phags-pa",43136:"Saurashtra",43232:"Devanagari Extended",43264:"Kayah Li",43312:"Rejang",43360:"Korean Hangul Jamo Extended-A",43392:"Javanese",43520:"Cham",43616:"Myanmar Extended-A",43648:"Tai Viet",
+43776:"Ethiopic Extended-A",43968:"Meetei Mayek",44032:"Asian Scripts Area",44032:"Korean Hangul Syllables Area",44032:"Asian Scripts Area",44032:"Korean Hangul Syllables Area",44032:"Korean Hangul Syllables",55216:"Korean Hangul Jamo Extended-B",55296:"Surrogates Area",55296:"High Surrogates",55296:"Surrogates Area",55296:"High Surrogates",56320:"Low Surrogates",57344:"Private Use Area",63744:"Compatibility and Specials Area",63744:"CJK Compatibility Ideographs",63744:"Compatibility and Specials Area",
+63744:"CJK Compatibility Ideographs",63744:"Compatibility and Specials Area",64012:"Duplicate Characters from Big 5",64048:"JIS X 0213 Compatibility Ideographs",64112:"DPRK Compatibility Ideographs",64256:"Alphabetic Presentation Forms",64256:"Latin Ligatures",64256:"Alphabetic Presentation Forms",64275:"Armenian Ligatures",64285:"Hebrew Presentation Forms",64336:"Arabic Contextual Form Glyphs",64336:"Arabic Presentation Forms-A",64336:"Arabic Contextual Form Glyphs",64336:"Arabic Presentation Forms-A",
+64434:"Arabic Spacing Diacritics",64490:"Arabic Ligatures",64830:"ORNATE Left PARENTHESIS",64830:"ORNATE left PARENTHESIS",64831:"ORNATE right PARENTHESIS",64831:"ORNATE Right PARENTHESIS",65020:"iranian currency",65020:"RIAL sign",65021:"Arabic LIGATURE BISMILLAH AR-RAHMAN AR-RAHEEM",65024:"Variation Selectors",65024:"VARIATION SELECTOR-1",65024:"Variation Selectors",65024:"vs1",65040:"Glyphs for Vertical Variants",65056:"Combining Half Marks",65060:"Combining MACRON left HALF",65060:"Continuous Macrons for Coptic",
+65060:"Combining MACRON left HALF",65061:"Combining MACRON right HALF",65062:"Combining CONJOINING macron",65062:"Combining CONJOINING MACRON",65072:"CJK Compatibility Forms",65072:"Vertical Form Variants",65072:"Glyphs for Vertical Variants",65093:"SESAME DOT",65093:"Sidelining Emphasis Marks",65093:"SESAME DOT",65093:"Sidelining Emphasis Marks",65094:"WHITE SESAME DOT",65097:"DASHED OVERLINE",65097:"Overscores and Underscores",65098:"CENTRELINE OVERLINE",65099:"WAVY OVERLINE",65100:"DOUBLE WAVY OVERLINE",
+65101:"DASHED low LINE",65102:"CENTRELINE low LINE",65103:"WAVY low LINE",65104:"Small Form Variants",65136:"Glyphs for Spacing Forms of Arabic Points",65136:"Arabic Presentation Forms-B",65152:"Arabic Contextual Form Glyphs",65279:"bom",65279:"byte order mark",65279:"ZERO WIDTH NO-BREAK SPACE",65279:"zwnbsp",65280:"Halfwidth and Fullwidth Forms",65281:"Fullwidth ASCII Variants",65377:"Halfwidth CJK Punctuation",65377:"Halfwidth Japanese Katakana Variants",65377:"Halfwidth CJK Punctuation",65440:"Halfwidth Korean Hangul Variants",
+65504:"Fullwidth Symbol Variants",65512:"Halfwidth Symbol Variants",65520:"Specials",65529:"INTERLINEAR ANNOTATION ANCHOR",65529:"Interlinear Annotation",65529:"INTERLINEAR ANNOTATION ANCHOR",65530:"INTERLINEAR ANNOTATION SEPARATOR",65531:"INTERLINEAR ANNOTATION TERMINATOR",65532:"OBJECT REPLACEMENT CHARACTER",65533:"REPLACEMENT CHARACTER"});
\ No newline at end of file
diff --git a/plugins/ckeditor4/symbol/dialogs/symbol.js b/plugins/ckeditor4/symbol/dialogs/symbol.js
new file mode 100644
index 0000000..fb30534
--- /dev/null
+++ b/plugins/ckeditor4/symbol/dialogs/symbol.js
@@ -0,0 +1,18 @@
+/*
+ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.dialog.add("symbol",function(j){function o(a,b,c){if(null!=a){for(var s=CKEDITOR.tools.getNextId()+"_symbol_table_label",i=[""],h=0,d=0,j=!1,f,g,k=a.split(","),l=0;l<k.length;l++){f=0;a=-1;g=!1;var e=k[l].split("-");switch(e.length){case 0:break;case 1:"*"==e[0].charAt(e[0].length-1)?(a=f=parseInt(e[0].substring(0,e[0].length-1),16),g=!0):a=f=parseInt(e[0],16);break;default:("*"==e[0].charAt(e[0].length-1)?(f=parseInt(e[0].substring(0,e[0].length-1),16),g=!0):f=parseInt(e[0],16),"*"==e[1].charAt(e[1].length-
+1))?(a=parseInt(e[1].substring(0,e[1].length-1),16),g=!0):a=parseInt(e[1],16)}h+=a-f+1;if(a>=f){j||(i.push('<table role="listbox" aria-labelledby="'+s+'" style="width: 100%; height: 100%; border-collapse: separate;" align="center" cellspacing="2" cellpadding="2" border="0">'),j=!0);for(;f<=a;){0==d&&i.push("<tr>");for(var e=!0,n=d;n<c;n++,f++)if(f<=a){var o=t(f),p=q&&q[f]||o,r="cke_symbol_label_"+f+"_"+CKEDITOR.tools.getNextNumber();i.push('<td class="cke_dark_background" style="cursor: default" role="presentation"><a href="javascript: void(0);" role="option" aria-posinset="'+
+(f+1)+'"',' aria-setsize="'+h+'"',' aria-labelledby="'+r+'"',' style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="',CKEDITOR.tools.htmlEncode(p),'" onkeydown="CKEDITOR.tools.callFunction( '+u+', event, this )" onclick="CKEDITOR.tools.callFunction('+v+', this); return false;" tabindex="-1"><span style="margin: 0 auto;cursor: inherit"'+(g?">"+m:">")+o+'</span><span class="cke_voice_label" id="'+r+'">'+p+"</span></a>");i.push("</td>")}else{d=n;e=!1;
+break}if(e)d=0,i.push("</tr>");else break}}}if(0!=d){for(f=d;f<c;f++)i.push("<td>&nbsp;</td>");i.push("</tr>")}j?(i[0]=255<h?'<div style="width:100%;height:300px;overflow:auto;">':"<div>",i.push("</table></div>"),c=i.join(""),b.getElement().setHtml(c)):b.getElement().setHtml("<div>No valid range(s) defined...</div>")}else b.getElement().setHtml("<div>No range defined...</div>")}function t(a){a=a.toString(16).toUpperCase();return 1>a.length?eval('"\\u0000"'):2>a.length?eval('"\\u000'+a+'"'):3>a.length?
+eval('"\\u00'+a+'"'):4>a.length?eval('"\\u0'+a+'"'):eval('"\\u'+a+'"')}function w(a,b){return a[0]==b[0]?0:a[0]>b[0]?1:-1}var m="&nbsp;",n=null,d,q=j.lang.symbol,k=null,p=function(a){var b,a=a.data?a.data.getTarget():new CKEDITOR.dom.element(a);if("a"==a.getName()&&(b=a.getChild(0).getHtml()))a.removeClass("cke_light_background"),b.length>m.length&&0==b.indexOf(m)&&(b=b.substring(m.length)),d.hide(),a=j.document.createElement("span"),a.setHtml(b),j.insertText(a.getText())},v=CKEDITOR.tools.addFunction(p),
+l,g=function(a,b){var c,b=b||a.data.getTarget();"span"==b.getName()&&(b=b.getParent());if("a"==b.getName()&&(c=b.getChild(0).getHtml())){l&&h(null,l);var g=d.getContentElement("info","unicodePreview").getElement();d.getContentElement("info","charPreview").getElement().setHtml(c);var i=0,i="&nbsp;"==c?160:c.length>m.length&&0==c.indexOf(m)?c.charCodeAt(m.length):c.charCodeAt(0);g.setHtml("Unicode (hex): "+i+" ("+i.toString(16).toUpperCase()+")");b.getParent().addClass("cke_light_background");l=b}},
+h=function(a,b){b=b||a.data.getTarget();"span"==b.getName()&&(b=b.getParent());"a"==b.getName()&&(d.getContentElement("info","unicodePreview").getElement().setHtml("&nbsp;"),d.getContentElement("info","charPreview").getElement().setHtml("&nbsp;"),b.getParent().removeClass("cke_light_background"),l=void 0)},u=CKEDITOR.tools.addFunction(function(a){var a=new CKEDITOR.dom.event(a),b=a.getTarget(),c;c=a.getKeystroke();var d="rtl"==j.lang.dir;switch(c){case 38:if(c=b.getParent().getParent().getPrevious())c=
+c.getChild([b.getParent().getIndex(),0]),c.focus(),h(null,b),g(null,c);a.preventDefault();break;case 40:if(c=b.getParent().getParent().getNext())if((c=c.getChild([b.getParent().getIndex(),0]))&&1==c.type)c.focus(),h(null,b),g(null,c);a.preventDefault();break;case 32:p({data:a});a.preventDefault();break;case d?37:39:case 9:if(c=b.getParent().getNext())c=c.getChild(0),1==c.type?(c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):h(null,b);else if(c=b.getParent().getParent().getNext())(c=c.getChild([0,
+0]))&&1==c.type?(c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):h(null,b);break;case d?39:37:case CKEDITOR.SHIFT+9:(c=b.getParent().getPrevious())?(c=c.getChild(0),c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):(c=b.getParent().getParent().getPrevious())?(c=c.getLast().getChild(0),c.focus(),h(null,b),g(null,c),a.preventDefault(!0)):h(null,b)}}),x=[CKEDITOR.dialog.cancelButton],y=j.lang.common.generalTab,z=j.lang.common.generalTab;j.config.sortSymbolRangesAlphabetically?k||(k=CKEDITOR.config.symbolRanges.slice(),
+k.sort(w)):k=CKEDITOR.config.symbolRanges;return{title:"Select Symbol",buttons:x,charColumns:16,onShow:function(){var a=this.getContentElement("info","symbolRange").getInputElement().$;console.log("domElement.childNodes.length="+a.childNodes.length);if(a.childNodes.length>0){var b=null;if(!n){b="Basic Latin";if(j.config.defaultSymbolRange)b=j.config.defaultSymbolRange;console.log("startRange = "+b)}for(var c=0,d=0;d<a.childNodes.length;d++){console.log(d+" domElement.childNodes[i].text = "+a.childNodes[d].text);
+if(a.childNodes[d].text==b||a.childNodes[d].value==n){c=d;break}}a.selectedIndex=c;console.log("selectedIndex = "+a.selectedIndex);b=this.getContentElement("info","charContainer");o(a.childNodes[c].value,b,this.definition.charColumns)}},contents:[{id:"info",label:y,title:z,padding:0,align:"top",onHide:function(){d&&d.destroy()},elements:[{type:"vbox",align:"top",width:"100%",children:[{type:"select",id:"symbolRange",width:"100%",items:k,size:1,onChange:function(a){console.log("Range changed:");console.log(a.sender.getValue());
+n=a.sender.getValue();var b=d.getContentElement("info","charContainer");o(a.sender.getValue(),b,d.definition.charColumns)}},{type:"html",id:"charContainer",html:"",onMouseover:g,onMouseout:h,focus:function(){var a=this.getElement().getElementsByTag("a").getItem(0);setTimeout(function(){a.focus();g(null,a)},0)},onShow:function(){var a=this.getElement().getElementsByTag("a").getItem(0);a!=null&&setTimeout(function(){a.focus();g(null,a)},0)},onLoad:function(a){d=a.sender}},{type:"hbox",align:"top",width:"100%",
+children:[{type:"html",html:"<div></div>"},{type:"html",id:"unicodePreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:14px;height:20px;width:192px;padding-top:25px;font-family:'Microsoft Sans Serif',Arial,'Arial Unicode',Helvetica,Verdana;text-align:center;",html:"<div>&nbsp;</div>"},{type:"html",id:"charPreview",className:"cke_dark_background",style:"border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:'Microsoft Sans Serif',Arial,'Arial Unicode',Helvetica,Verdana;text-align:center;",
+html:"<div>&nbsp;</div>"}]}]}]}]}});
\ No newline at end of file
diff --git a/plugins/ckeditor4/symbol/icons/symbol.png b/plugins/ckeditor4/symbol/icons/symbol.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f89bde90073f3cbdd79e62f9b35781235a81d1d
GIT binary patch
literal 212
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJdx@v7EBiH0MphZC+3UrcfI^%F
z9+AZi4BSE>%y{W;-5;PJOS+@4BLl<6e(pbstRO`JJ|V6L4jgD{X<=Y!IkHXUFHn%N
zB*-tA!Qt7BG$6;()5S5Q;#O~;w-AE@httL1@>aQj67rG+ZO%wG>c13SJY!c8pZpt6
zn-yES{+!%x=&{WrBKf5JTH~d);vaUm{<+BL<HRtZ_3)NLpkWN2u6{1-oD!M<o=iZ5

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/symbol/lang/en.js b/plugins/ckeditor4/symbol/lang/en.js
new file mode 100644
index 0000000..21579b7
--- /dev/null
+++ b/plugins/ckeditor4/symbol/lang/en.js
@@ -0,0 +1 @@
+CKEDITOR.plugins.setLang("symbol","en",{options:"Symbol Options",title:"Select Symbol",toolbar:"Insert Symbol"});
\ No newline at end of file
diff --git a/plugins/ckeditor4/symbol/plugin.js b/plugins/ckeditor4/symbol/plugin.js
new file mode 100644
index 0000000..bf95ec8
--- /dev/null
+++ b/plugins/ckeditor4/symbol/plugin.js
@@ -0,0 +1,15 @@
+/*
+ Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+ For licensing, see LICENSE.html or http://ckeditor.com/license
+
+ If you find an error please let me know (helmoe {AT} gmail {DOTCOM}
+*/
+CKEDITOR.plugins.add("symbol",{availableLangs:{en:1},lang:"en",requires:"dialog",icons:"symbol",init:function(a){var c=this;CKEDITOR.dialog.add("symbol",this.path+"dialogs/symbol.js");a.addCommand("symbol",{exec:function(){if(a.config.removeSymbolRanges&&0<a.config.removeSymbolRanges.length)for(var d=a.config.removeSymbolRanges.length-1;0<=d;d--){var e=a.config.removeSymbolRanges[d];e<a.config.symbolRanges.length&&a.config.symbolRanges.splice(e,1)}var b=a.langCode,b=c.availableLangs[b]?b:c.availableLangs[b.replace(/-.*/,
+"")]?b.replace(/-.*/,""):"en";CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(c.path+"dialogs/lang/"+b+".js"),function(){CKEDITOR.tools.extend(a.lang.symbol,c.langEntries[b]);a.openDialog("symbol")})},modes:{wysiwyg:1},canUndo:!1});a.ui.addButton&&a.ui.addButton("Symbol",{label:"Insert symbol",command:"symbol",toolbar:"insert"})}});
+CKEDITOR.config.symbolRanges=[["Basic Latin","0020-007E"],["Latin-1 Supplement","00A0-00B0,00B1,00B2-00FF"],["Latin Extended-A","0100-017F"],["Latin Extended-B","0180-024F"],["IPA Extensions","0250-02AF"],["Spacing Modifier Letters","02B0-02FF"],["Combining Diacritical Marks","0300-036F*"],["Greek and Coptic","0370-03FF"],["Cyrillic","0400-04FF"],["Cyrillic Supplementary","0500-052F"],["Armenian","0530-058F"],["Hebrew","0590-05FF"],["Arabic","0600-06FF"],["Syriac","0700-074F"],["Thaana","0780-07BF"],
+["Devanagari","0900-097F"],["Bengali","0980-09FF"],["Gurmukhi","0A00-0A7F"],["Gujarati","0A80-0AFF"],["Oriya","0B00-0B7F"],["Tamil","0B80-0BFF"],["Telugu","0C00-0C7F"],["Kannada","0C80-0CFF"],["Malayalam","0D00-0D7F"],["Sinhala","0D80-0DFF"],["Thai","0E00-0E7F"],["Lao","0E80-0EFF"],["Tibetan","0F00-0FFF"],["Myanmar","1000-109F"],["Georgian","10A0-10FF"],["Hangul Jamo","1100-11FF"],["Ethiopic","1200-137F"],["Cherokee","13A0-13FF"],["Unified Canadian Aboriginal Syllabics","1400-167F"],["Ogham","1680-169F"],
+["Runic","16A0-16FF"],["Tagalog","1700-171F"],["Hanunoo","1720-173F"],["Buhid","1740-175F"],["Tagbanwa","1760-177F"],["Khmer","1780-17FF"],["Mongolian","1800-18AF"],["Limbu","1900-194F"],["Tai Le","1950-197F"],["Khmer Symbols","19E0-19FF"],["Phonetic Extensions","1D00-1D7F"],["Latin Extended Additional","1E00-1EFF"],["Greek Extended","1F00-1FFF"],["General Punctuation","2000-206F"],["Superscripts and Subscripts","2070-209F"],["Currency Symbols","20A0-20CF"],["Combining Diacritical Marks for Symbols",
+"20D0-20FF"],["Letterlike Symbols","2100-214F"],["Number Forms","2150-218F"],["Arrows","2190-21FF"],["Mathematical Operators","2200-22FF"],["Miscellaneous Technical","2300-23FF"],["Control Pictures","2400-243F"],["Optical Character Recognition","2440-245F"],["Enclosed Alphanumerics","2460-24FF"],["Box Drawing","2500-257F"],["Block Elements","2580-259F"],["Geometric Shapes","25A0-25FF"],["Miscellaneous Symbols","2600-26FF"],["Dingbats","2700-27BF"],["Miscellaneous Mathematical Symbols-A","27C0-27EF"],
+["Supplemental Arrows-A","27F0-27FF"],["Braille Patterns","2800-28FF"],["Supplemental Arrows-B","2900-297F"],["Miscellaneous Mathematical Symbols-B","2980-29FF"],["Supplemental Mathematical Operators","2A00-2AFF"],["Miscellaneous Symbols and Arrows","2B00-2BFF"],["CJK Radicals Supplement","2E80-2EFF"],["Kangxi Radicals","2F00-2FDF"],["Ideographic Description Characters","2FF0-2FFF"],["CJK Symbols and Punctuation","3000-303F"],["Hiragana","3040-309F"],["Katakana","30A0-30FF"],["Bopomofo","3100-312F"],
+["Hangul Compatibility Jamo","3130-318F"],["Kanbun","3190-319F"],["Bopomofo Extended","31A0-31BF"],["Katakana Phonetic Extensions","31F0-31FF"],["Enclosed CJK Letters and Months","3200-32FF"],["CJK Compatibility","3300-33FF"],["CJK Unified Ideographs Extension A","3400-4DBF"],["Yijing Hexagram Symbols","4DC0-4DFF"],["CJK Unified Ideographs","4E00-9FFF"],["Yi Syllables","A000-A48F"],["Yi Radicals","A490-A4CF"],["Hangul Syllables","AC00-D7AF"],["High Surrogates","D800-DB7F"],["High Private Use Surrogates",
+"DB80-DBFF"],["Low Surrogates","DC00-DFFF"],["Private Use Area","E000-F8FF"],["CJK Compatibility Ideographs","F900-FAFF"],["Alphabetic Presentation Forms","FB00-FB4F"],["Arabic Presentation Forms-A","FB50-FDFF"],["Variation Selectors","FE00-FE0F"],["Combining Half Marks","FE20-FE2F"],["CJK Compatibility Forms","FE30-FE4F"],["Small Form Variants","FE50-FE6F"],["Arabic Presentation Forms-B","FE70-FEFF"],["Halfwidth and Fullwidth Forms","FF00-FFEF"],["Specials","FFF0-FFFF"]];
\ No newline at end of file
diff --git a/plugins/ckeditor4/textselection/plugin.js b/plugins/ckeditor4/textselection/plugin.js
new file mode 100644
index 0000000..9c9ad22
--- /dev/null
+++ b/plugins/ckeditor4/textselection/plugin.js
@@ -0,0 +1,423 @@
+/* 
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 
+For licensing, see LICENSE.html or http://ckeditor.com/license 
+*/
+    /** 
+     * Represent plain text selection range. 
+     */
+    CKEDITOR.plugins.add('textselection',
+    {
+        version: 1.04,
+        init: function (editor) {
+            // Corresponding text range of wysiwyg bookmark.
+            var wysiwygBookmark;
+
+            // Auto sync text selection with 'WYSIWYG' mode selection range.
+            if (editor.config.syncSelection
+                    && CKEDITOR.plugins.sourcearea) {
+                editor.on('beforeModeUnload', function (evt) {
+                    if (editor.mode === 'source') {
+                        if (editor.mode === 'source' && !editor.plugins.codemirror) {
+                            var range = editor.getTextSelection();
+
+                            // Fly the range when create bookmark. 
+                            delete range.element;
+                            range.createBookmark(editor);
+                            sourceBookmark = true;
+                            evt.data = range.content;
+                        }
+                    }
+                });
+                editor.on('mode', function () {
+                    if (editor.mode === 'wysiwyg' && sourceBookmark) {
+
+                        editor.focus();
+                        var doc = editor.document,
+                            range = new CKEDITOR.dom.range(editor.document),
+                            startNode,
+                            endNode,
+                            isTextNode = false;
+
+                        range.setStartAt(doc.getBody(), CKEDITOR.POSITION_AFTER_START);
+                        range.setEndAt(doc.getBody(), CKEDITOR.POSITION_BEFORE_END);
+                        var walker = new CKEDITOR.dom.walker(range);
+                        // walker.type = CKEDITOR.NODE_COMMENT;
+                        walker.evaluator = function (node) {
+                            //
+                            var match = /cke_bookmark_\d+(\w)/.exec(node.$.nodeValue);
+                            if (match) {
+                                if(decodeURIComponent(node.$.nodeValue)
+                                    .match(/<!--cke_bookmark_[0-9]+S-->.*<!--cke_bookmark_[0-9]+E-->/)){
+                                    isTextNode = true;
+                                    startNode = endNode = node;
+                                    return false;
+                                } else {
+                                    if (match[1] === 'S') {
+                                        startNode = node;
+                                    } else if (match[1] === 'E') {
+                                        endNode = node;
+                                        return false;
+                                    }
+                                }
+                            }
+                        };
+                        walker.lastForward();
+                        range.setStartAfter(startNode);
+                        range.setEndBefore(endNode);
+                        range.select();
+                        // Scroll into view for non-IE.
+                        if (!CKEDITOR.env.ie || (CKEDITOR.env.ie && CKEDITOR.env.version === 9)) {
+                            editor.getSelection().getStartElement().scrollIntoView(true);
+                        } // Remove the comments node which are out of range.
+                        if(isTextNode){
+                            //remove all of our bookmarks from the text node
+                            //then remove all of the cke_protected bits that added because we had a comment
+                            //whatever code is supposed to clean these cke_protected up doesn't work
+                            //when there's two comments in a row like: <!--{cke_protected}{C}--><!--{cke_protected}{C}-->
+                            startNode.$.nodeValue = decodeURIComponent(startNode.$.nodeValue).
+                                replace(/<!--cke_bookmark_[0-9]+[SE]-->/g,'').
+                                replace(/<!--[\s]*\{cke_protected}[\s]*\{C}[\s]*-->/g,'');
+                        } else {
+                            //just remove the comment nodes
+                            startNode.remove();
+                            endNode.remove();
+                        }
+                    }
+                }, null, null, 10);
+
+                editor.on('beforeGetModeData', function () {
+                    if (editor.mode === 'wysiwyg' && editor.getData()) {
+                        if (CKEDITOR.env.gecko && !editor.focusManager.hasFocus) {
+                            return;
+                        }
+                        var sel = editor.getSelection(), range;
+                        if (sel && (range = sel.getRanges()[0])) {
+                            wysiwygBookmark = range.createBookmark(editor);
+                        }
+                    }
+                });
+                // Build text range right after wysiwyg has unloaded. 
+                editor.on('afterModeUnload', function (evt) {
+                    if (editor.mode === 'wysiwyg' && wysiwygBookmark) {
+                        textRange = new CKEDITOR.dom.textRange(evt.data);
+                        textRange.moveToBookmark(wysiwygBookmark, editor);
+
+                        evt.data = textRange.content;
+                    }
+                });
+                editor.on('mode', function () {
+                    if (editor.mode === 'source' && textRange && !editor.plugins.codemirror) {
+                        textRange.element = new CKEDITOR.dom.element(editor._.editable.$);
+                        textRange.select();
+                    }
+                });
+
+                editor.on('destroy', function () {
+                    textRange = null;
+                    sourceBookmark = null;
+                });
+            }
+        }
+    });
+
+    /** 
+     * Gets the current text selection from the editing area when in Source mode. 
+     * @returns {CKEDITOR.dom.textRange} Text range represent the caret positoins. 
+     * @example 
+     * var textSelection = CKEDITOR.instances.editor1.<b>getTextSelection()</b>; 
+     * alert( textSelection.startOffset ); 
+     * alert( textSelection.endOffset ); 
+     */
+    CKEDITOR.editor.prototype.getTextSelection = function () {
+        return this._.editable && getTextSelection(this._.editable.$) || null;
+    };
+
+    /** 
+     * Returns the caret position of the specified textfield/textarea. 
+     * @param {HTMLTextArea|HTMLTextInput} element 
+     */
+    function getTextSelection(element) {
+        var startOffset, endOffset;
+
+        if (!CKEDITOR.env.ie) {
+            startOffset = element.selectionStart;
+            endOffset = element.selectionEnd;
+        } else {
+            element.focus();
+            
+            // The current selection 
+            if (window.getSelection) {
+                startOffset = element.selectionStart;
+                endOffset = element.selectionEnd;
+            } else {
+                var range = document.selection.createRange(),
+                    textLength = range.text.length;
+                
+                // Create a 'measuring' range to help calculate the start offset by 
+                // stretching it from start to current position. 
+                var measureRange = range.duplicate();
+                measureRange.moveToElementText(element);
+                measureRange.setEndPoint('EndToEnd', range);
+
+                endOffset = measureRange.text.length;
+                startOffset = endOffset - textLength;
+            }
+        }
+        return new CKEDITOR.dom.textRange(
+            new CKEDITOR.dom.element(element), startOffset, endOffset);
+    }
+
+    /** 
+     * Represent the selection range within a html textfield/textarea element, 
+     * or even a flyweight string content represent the text content. 
+     * @constructor 
+     * @param {CKEDITOR.dom.element|String} element 
+     * @param {Number} start 
+     * @param {Number} end 
+     */
+    CKEDITOR.dom.textRange = function (element, start, end) {
+        if (element instanceof CKEDITOR.dom.element
+            && (element.is('textarea')
+                || element.is('input') && element.getAttribute('type') == 'text')) {
+            this.element = element;
+            this.content = element.$.value;
+        } else if (typeof element == 'string')
+            this.content = element;
+        else
+            throw 'Unkown "element" type.';
+        this.startOffset = start || 0;
+        this.endOffset = end || 0;
+    };
+    
+     /**
+     * Changes the editing mode of this editor instance. (Override of the original function)
+     *
+     * **Note:** The mode switch could be asynchronous depending on the mode provider.
+     * Use the `callback` to hook subsequent code.
+     *
+     *                // Switch to "source" view.
+     *                CKEDITOR.instances.editor1.setMode( 'source' );
+     *                // Switch to "wysiwyg" view and be notified on completion.
+     *                CKEDITOR.instances.editor1.setMode( 'wysiwyg', function() { alert( 'wysiwyg mode loaded!' ); } );
+     *
+     * @param {String} [newMode] If not specified, the {@link CKEDITOR.config#startupMode} will be used.
+     * @param {Function} [callback] Optional callback function which is invoked once the mode switch has succeeded.
+     */
+    CKEDITOR.editor.prototype.setMode = function (newMode, callback) {
+        var editor = this;
+
+        var modes = this._.modes;
+
+        // Mode loading quickly fails.
+        if (newMode == editor.mode || !modes || !modes[newMode])
+            return;
+
+        editor.fire('beforeSetMode', newMode);
+
+        if (editor.mode) {
+            var isDirty = editor.checkDirty();
+
+            editor._.previousMode = editor.mode;
+
+            editor.fire('beforeModeUnload');
+
+            editor.fire('beforeGetModeData');
+            var data = editor.getData();
+
+            data = editor.fire('beforeModeUnload', data);
+            data = editor.fire('afterModeUnload', data);
+
+            // Detach the current editable.
+            editor.editable(0);
+
+            editor._.data = data;
+
+            // Clear up the mode space.
+            editor.ui.space('contents').setHtml('');
+
+            editor.mode = '';
+        }
+
+        // Fire the mode handler.
+        this._.modes[newMode](function () {
+            // Set the current mode.
+            editor.mode = newMode;
+
+            if (isDirty !== undefined) {
+                !isDirty && editor.resetDirty();
+            }
+
+            // Delay to avoid race conditions (setMode inside setMode).
+            setTimeout(function () {
+                editor.fire('mode');
+                callback && callback.call(editor);
+            }, 0);
+        });
+    };
+
+    CKEDITOR.dom.textRange.prototype =
+    {
+        /** 
+         * Sets the text selection of the specified textfield/textarea. 
+         * @param {HTMLTextArea|HTMLTextInput} element 
+         * @param {CKEDITOR.dom.textRange} range 
+         */
+        select: function() {
+
+            var startOffset = this.startOffset,
+                endOffset = this.endOffset,
+                element = this.element.$;
+            if (endOffset == undefined) {
+                endOffset = startOffset;
+            }
+
+            if (CKEDITOR.env.ie && CKEDITOR.env.version == 9) {
+                element.focus();
+                element.selectionStart = startOffset;
+                element.selectionEnd = startOffset;
+                setTimeout(function() {
+                    element.selectionStart = startOffset;
+                    element.selectionEnd = endOffset;
+                }, 20);
+
+            } else {
+                if (element.setSelectionRange) {
+                    if (CKEDITOR.env.ie) {
+                        element.focus();
+                    }
+                    element.setSelectionRange(startOffset, endOffset);
+                    if (!CKEDITOR.env.ie) {
+                        element.focus();
+                    }
+                } else if (element.createTextRange) {
+                    element.focus();
+                    var range = element.createTextRange();
+                    range.collapse(true);
+                    range.moveStart('character', startOffset);
+                    range.moveEnd('character', endOffset - startOffset);
+                    range.select();
+                }
+            }
+        },
+
+        /** 
+         * Select the range included within the bookmark text with the bookmark 
+         * text removed. 
+         * @param {Object} bookmark Exactly the one created by CKEDITOR.dom.range.createBookmark( true ). 
+         */
+        moveToBookmark: function(bookmark, editor) {
+            var content = this.content;
+            function removeBookmarkText(bookmarkId) {
+
+                var bookmarkRegex = new RegExp('<span[^<]*?' + bookmarkId + '.*?/span>'),
+                    offset;
+                content = content.replace(bookmarkRegex, function(str, index) {
+                    offset = index;
+                    return '';
+                });
+                return offset;
+            }
+
+            this.startOffset = removeBookmarkText(bookmark.startNode);
+            this.endOffset = removeBookmarkText(bookmark.endNode);
+            this.content = content;
+            this.updateElement();
+
+            if (editor.undoManager) {
+                editor.undoManager.unlock();
+            }
+        },
+
+        /** 
+         * If startOffset/endOffset anchor inside element tag, start the range before/after the element 
+         */
+        enlarge: function() {
+            var htmlOpenTagRegexp = /<[a-zA-Z]+(>|.*?[^?]>)/g;
+            var htmlCloseTagRegexp = /<\/[^>]+>/g;
+            var content = this.content,
+                start = this.startOffset,
+                end = this.endOffset,
+                match,
+                tagStartIndex,
+                tagEndIndex;
+
+            // Adjust offset position on parsing result. 
+             while (match = htmlCloseTagRegexp.exec(content)) {
+
+                 tagStartIndex = match.index;
+
+                 if (start > tagStartIndex) {
+                     start = tagStartIndex;
+                 }
+
+                 if (end > tagStartIndex) {
+                     end = tagStartIndex;
+                     break;
+                 }
+
+                break;
+             }
+
+             while (match = htmlOpenTagRegexp.exec(content)) {
+
+                 tagStartIndex = match.index;
+
+                 tagEndIndex = tagStartIndex + match[0].length;
+
+                 if (start < tagEndIndex) {
+                     start = tagEndIndex;
+                 }
+
+                 if (end < tagEndIndex) {
+                     end = tagEndIndex;
+                     break;
+                 }
+
+                 break;
+             }
+            
+
+            this.startOffset = start;
+            this.endOffset = end;
+        },
+
+        createBookmark: function(editor) {
+            // Enlarge the range to avoid tag partial selection. 
+            this.enlarge();
+            var content = this.content,
+                start = this.startOffset,
+                end = this.endOffset,
+                id = CKEDITOR.tools.getNextNumber(),
+                bookmarkTemplate = '<!--cke_bookmark_%1-->';
+
+            content = content.substring(0, start) + bookmarkTemplate.replace('%1', id + 'S')
+                + content.substring(start, end) + bookmarkTemplate.replace('%1', id + 'E')
+                + content.substring(end);
+
+            if (editor.undoManager) {
+                editor.undoManager.lock();
+            }
+
+            this.content = content;
+            this.updateElement();
+        },
+
+        updateElement: function() {
+            if (this.element)
+                this.element.$.value = this.content;
+        }
+    };
+
+    var Browser = {
+        Version: function() {
+            var version = 999;
+            if (navigator.appVersion.indexOf("MSIE") != -1)
+                version = parseFloat(navigator.appVersion.split("MSIE")[1]);
+            return version;
+        }
+    };
+
+    // Seamless selection range across different modes. 
+    CKEDITOR.config.syncSelection = true;
+
+    var textRange,sourceBookmark;
diff --git a/plugins/ckeditor4/textselection/samples/textselection.html b/plugins/ckeditor4/textselection/samples/textselection.html
new file mode 100644
index 0000000..fd10785
--- /dev/null
+++ b/plugins/ckeditor4/textselection/samples/textselection.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+-->
+<html>
+<head>
+	<title>Textselection Plugin &mdash; CKEditor Sample</title>
+	<meta charset="utf-8">
+	<script src="../../../ckeditor.js"></script>
+	<link rel="stylesheet" href="../../../samples/sample.css">
+	<meta name="ckeditor-sample-name" content="textselection plugin">
+	<meta name="ckeditor-sample-group" content="Plugins">
+	<meta name="ckeditor-sample-description" content="Using the textselection plugin in order to make the editor keep it's text-selection when switching between WYSIWYG and Source mode">
+</head>
+<body>
+	<h1 class="samples">
+		<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; Using textselection Plugin
+	</h1>
+	<div class="description">
+		<p>
+			This sample shows how to configure CKEditor instances to use the
+			<strong>textselection</strong> (<code>textselection</code>) plugin that makes the editor keep it's text-selection when switching between WYSIWYG and Source mode, and scrolls the selection into the viewport.</p>
+		<p>
+			To add a CKEditor instance using the <code>textselection</code> plugin, insert the following JavaScript call to your code:
+		</p>
+<pre class="samples">
+CKEDITOR.replace( '<em>textarea_id</em>', {
+	<strong>extraPlugins: 'textselection',</strong>
+});</pre>
+		<p>
+			Note that <code><em>textarea_id</em></code> in the code above is the <code>id</code> attribute of
+		the <code>&lt;textarea&gt;</code> element to be replaced with CKEditor.</p>
+	</div>
+	<form action="../../../samples/sample_posteddata.php" method="post">
+		<p>
+			<label for="editor1">
+			CKEditor using the <code>textselection</code> plugin <strong>(mark some text and switch to Source View)</strong>: </label>
+			<textarea cols="80" id="editor1" name="editor1" rows="10"><p>&nbsp;<p></p>
+
+<h1><img alt="Saturn V carrying Apollo 11" class="right" src="http://b.cksource.com/a/1/img/sample.jpg" /> Apollo 11</h1>
+
+<p><strong>Apollo 11</strong> was the spaceflight that landed the first humans, Americans <a href="http://en.wikipedia.org/wiki/Neil_Armstrong">Neil Armstrong</a> and <a href="http://en.wikipedia.org/wiki/Buzz_Aldrin">Buzz Aldrin</a>, on the Moon on July 20, 1969, at 20:18 UTC. Armstrong became the first to step onto the lunar surface 6 hours later on July 21 at 02:56 UTC.<p></p>
+
+<p>Armstrong spent about <s>three and a half</s> two and a half hours outside the spacecraft, Aldrin slightly less; and together they collected 47.5 pounds (21.5&nbsp;kg) of lunar material for return to Earth. A third member of the mission, <a href="http://en.wikipedia.org/wiki/Michael_Collins_(astronaut)">Michael Collins</a>, piloted the <a href="http://en.wikipedia.org/wiki/Apollo_Command/Service_Module">command</a> spacecraft alone in lunar orbit until Armstrong and Aldrin returned to it for the trip back to Earth.<p></p>
+
+<h2>Broadcasting and <em>quotes</em> <a id="quotes" name="quotes"></a></h2>
+
+<p>Broadcast on live TV to a world-wide audience, Armstrong stepped onto the lunar surface and described the event as:<p></p>
+
+<blockquote>
+<p>One small step for [a] man, one giant leap for mankind.<p></p>
+</blockquote>
+
+<p>Apollo 11 effectively ended the <a href="http://en.wikipedia.org/wiki/Space_Race">Space Race</a> and fulfilled a national goal proposed in 1961 by the late U.S. President <a href="http://en.wikipedia.org/wiki/John_F._Kennedy">John F. Kennedy</a> in a speech before the United States Congress:<p></p>
+
+<blockquote>
+<p>[...] before this decade is out, of landing a man on the Moon and returning him safely to the Earth.<p></p>
+</blockquote>
+
+<h2>Technical details <a id="tech-details" name="tech-details"></a></h2>
+
+<table align="right" border="1" cellpadding="5" cellspacing="0" style="border-collapse:collapse">
+	<caption><strong>Mission crew</strong></caption>
+	<thead>
+		<tr>
+			<th scope="col">Position</th>
+			<th scope="col">Astronaut</th>
+		</tr>
+	</thead>
+	<tbody>
+		<tr>
+			<td>Commander</td>
+			<td>Neil A. Armstrong</td>
+		</tr>
+		<tr>
+			<td>Command Module Pilot</td>
+			<td>Michael Collins</td>
+		</tr>
+		<tr>
+			<td>Lunar Module Pilot</td>
+			<td>Edwin &quot;Buzz&quot; E. Aldrin, Jr.</td>
+		</tr>
+	</tbody>
+</table>
+
+<p>Launched by a <strong>Saturn V</strong> rocket from <a href="http://en.wikipedia.org/wiki/Kennedy_Space_Center">Kennedy Space Center</a> in Merritt Island, Florida on July 16, Apollo 11 was the fifth manned mission of <a href="http://en.wikipedia.org/wiki/NASA">NASA</a>&#39;s Apollo program. The Apollo spacecraft had three parts:<p></p>
+
+<ol>
+	<li><strong>Command Module</strong> with a cabin for the three astronauts which was the only part which landed back on Earth</li>
+	<li><strong>Service Module</strong> which supported the Command Module with propulsion, electrical power, oxygen and water</li>
+	<li><strong>Lunar Module</strong> for landing on the Moon.</li>
+</ol>
+
+<p>After being sent to the Moon by the Saturn V&#39;s upper stage, the astronauts separated the spacecraft from it and travelled for three days until they entered into lunar orbit. Armstrong and Aldrin then moved into the Lunar Module and landed in the <a href="http://en.wikipedia.org/wiki/Mare_Tranquillitatis">Sea of Tranquility</a>. They stayed a total of about 21 and a half hours on the lunar surface. After lifting off in the upper part of the Lunar Module and rejoining Collins in the Command Module, they returned to Earth and landed in the <a href="http://en.wikipedia.org/wiki/Pacific_Ocean">Pacific Ocean</a> on July 24.<p></p>
+
+<hr />
+<p><small>Source: <a href="http://en.wikipedia.org/wiki/Apollo_11">Wikipedia.org</a></small><p></p>
+
+<p>&nbsp;<p></p>
+            </textarea>
+			<script>
+
+				CKEDITOR.replace( 'editor1', {
+					extraPlugins: 'textselection',
+				});
+
+			</script>
+		</p>
+		<p>
+			<input type="submit" value="Submit">
+		</p>
+	</form>
+	<div id="footer">
+		<hr>
+		<p>
+			CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2013, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
diff --git a/plugins/ckeditor4/texttransform/LICENSE.md b/plugins/ckeditor4/texttransform/LICENSE.md
new file mode 100644
index 0000000..b0e58ef
--- /dev/null
+++ b/plugins/ckeditor4/texttransform/LICENSE.md
@@ -0,0 +1,28 @@
+Software License Agreement
+==========================
+
+CKEditor Text Transform Plugin - A very simple plugin which provides transforming selected texts to new cases. - http://github.com/onderceylan/ckeditor-texttransform-plugin
+Copyright (c) 2013, Önder Ceylan. All rights reserved.
+
+Licensed under the terms of any of the following licenses at your
+choice:
+
+ - GNU General Public License Version 2 or later (the "GPL")
+   http://www.gnu.org/licenses/gpl.html
+   (See Appendix A)
+
+ - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+   http://www.gnu.org/licenses/lgpl.html
+   (See Appendix B)
+
+ - Mozilla Public License Version 1.1 or later (the "MPL")
+   http://www.mozilla.org/MPL/MPL-1.1.html
+   (See Appendix C)
+
+You are not required to, but if you want to explicitly declare the
+license you have chosen to be bound to when using, reproducing,
+modifying and distributing this software, just include a text file
+titled "legal.txt" in your version of this software, indicating your
+license choice. In any case, your choice will not restrict any
+recipient of your version of this software to use, reproduce, modify
+and distribute this software under any of the above licenses.
diff --git a/plugins/ckeditor4/texttransform/README.md b/plugins/ckeditor4/texttransform/README.md
new file mode 100644
index 0000000..62b9740
--- /dev/null
+++ b/plugins/ckeditor4/texttransform/README.md
@@ -0,0 +1,55 @@
+Text Transform Plugin for CKEditor
+================================
+
+A very simple plugin which provides transforming selected text to new cases. You can transform selected text to uppercase, lowercase or simply capitalize it.
+
+Available Transform Cases
+-------------------------
+
+* Transform Text to Uppercase: Convert letters to uppercase
+* Transform Text to Lowercase: Convert letters to lowercase
+* Transform Capitalize: Capitalize each word of selected text
+* Transform Switcher: Loop through all cases
+
+Internationalization
+-------------------------
+
+Currently plugin supports 2 languages.
+
+* en
+* tr
+
+*Translations are welcomed.*
+
+Usage
+-------------------------
+
+1. Download source files and place them on to be created "texttransform" folder under the CKEditor's plugin base.
+
+2. Define plugin in CKEDITOR config object.
+
+        CKEDITOR.config.extraPlugins = 'texttransform';
+
+3. Add transform buttons to your editor toolbar.
+
+        CKEDITOR.config.toolbar = [
+            { name: 'texttransform', items: [ 'TransformTextToUppercase', 'TransformTextToLowercase', 'TransformTextCapitalize', 'TransformTextSwitcher' ] }
+        ];
+
+4. Set your CKEDITOR language if you did not set it yet.
+
+        CKEDITOR.config.language = 'en';
+
+Demo
+-------------------------
+
+[View the live demo](http://jsfiddle.net/t99kV/5/) on jsFiddle.
+
+
+Cheers
+--------------------
+
+Thanks to [CKEditor] [1] and [jsFiddle] [2] for their good work.
+
+  [1]: http://ckeditor.com        "CKEditor"
+  [2]: http://jsfiddle.net        "jsFiddle"
diff --git a/plugins/ckeditor4/texttransform/images/transformCapitalize.png b/plugins/ckeditor4/texttransform/images/transformCapitalize.png
new file mode 100644
index 0000000000000000000000000000000000000000..2914c059fdaa8d96136a9cb20921d57a12d8fc9a
GIT binary patch
literal 1410
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+*
zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn
zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87
z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$
zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc
zN<f!FypUVq>kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0
zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}jalaZmD
zp`)>rlclSXp`oR-g`umHv!#WFg_)bVu_eq5Y<f+c9L)?|T}+%Tjhze)U5%W~jLa;Z
z%?ym(oLo%}Or2qRJ@bl767!N%VfJPM?S<+!#;e!LxhOTUB)=#mKR*YS0s=DfOY(~|
z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTy<l0yuoFGO^fC*xwMnDddEiKF~4x
zpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o<J;#P%>SFmCd6aSW-rmGtNTe|u)thR#MO
zhmDLpFXA3NcrZgvL*vKX*4Cvgv9e}8@0c>Zy}hsh_))=UYrEHBLZtzxo12@M!Zfyr
zk(<+g+SdM>B7K-UCMM>f!)?+3|Nj0C1hVBdo-j=|HZu!jf26Ju6B)TP(9P`_?_KU1
zD=RDOM~@!W&9N%YstO3WQ19t^a;8Vz1cpaD9c;F)UHjI~-28j}ggCK^3?oBH=G^kX
zpPrtcyKC33?MzHe@hPdPcjwvHuVb9D&#>^(5%Kx<_4oLv{I7j|O}BV~c<O|`2UL`l
z9%<|7ocZ$OWAf6=%l*UmRDN#rc5-rJ%$T6-;ppgiaL?7%;reVw;SD;>m+T+1F|aPF
ztf)|$IdkTIhP?$W8Mpb=)t4vFx2yfdDALca^)NIj$g8Kf*Y@tkix2sE+AljyFHmTA
zR10|c|I?>Wr4IYl1hnt(EI#fR8TpgVAi<GK=Iq(C|8L*Ey`Cj2t)Q$d?&YILO&rbK
z;(9w6bN@5?Fwd_4`>S+rZ*Q-opWnNq-`?JS|Nr-Q|A!|gDlZBP3wsZA>78}4yUUJW
rycj4U5hs7}qV<>0Oh?%mSR@#%A0A%K%-;VNR4RJ9`njxgN@xNACqDJP

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/texttransform/images/transformSwitcher.png b/plugins/ckeditor4/texttransform/images/transformSwitcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..0d6db88e91319af6488286d9d9dfbc404178d27a
GIT binary patch
literal 1542
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+*
zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn
zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87
z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$
zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc
zN<f!FypUVq>kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0
zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}jalaZmD
zp`)>rlclSXp`oR-g`umHv!#WFg_)bVu_eq5Y<f+Mjoi#!Tr8a|jhze)U5zZvT}&)3
zot-UB+}upeOif{WJ@bl767!N%VfJPM?S<;Kz^m8FxhOTUB)=#mKR*YS0s=DfOY(~|
z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTy<l0yuoFGO^fC*xwMnDddEiKF~4x
zpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o=uD>yI%oFqwI}IEGZ*>Y41{5#%Uy{P=Xc
z|E|m0*k*|=N?`xIV8Ro}u(tx*Hi?{ToH;ih_gge&`d-$1Hdhuld$V{RbYfTJSai6F
zJ$k}{3w*a73paO5Y<fBA{Pl9V&v&LzF!}KCdvV?8ea4?>uW#9~@M1<;V@t{O6>Tb>
z*%vpJiYINHar*h^iEfJzmhO)Iw7)sIu>JYZ9jBiv`7QsfR%ahDx2H((&Bj0aDU8hr
zH$41W#ou)Bfw7BKY4p~UwI7bY|IXcE`a$5sE8(048E?P;-k-fyN|J{yovHDF>Y4au
z++3}PMCZJjelbHu;CsS#rDgVw#haRL=F~~^wTp+Xo@y5Gslp~mYwE8|qnYzIsO2^B
z{rW8Uk=a6Ls@MB~s#P3+I9i>K?~Hj@Y&XANpW{&D(WJ<P<IYpg8%_NDK=pLxg!Lg>
z)tee_znv%AebjvN$s^wLm&UD+Kd#A^khJ}F{@>NVBeYL=?!G&1)zz#;mtUTEZ#CC%
zeXrZ%zj5o!gY>4ChwT#%kB~aLAnoirb*>k)bq;OZKCjVNEIqp>Iq<^kuPQ>FI=wEu
zQ(P;2at|(x3vOSvzwO6HrrNNzVbxj&GJO3P{_ghJ-&`9}-7UqDqxrr6_+yzq`{fA&
zeUJTE4di-{KNdXmMR)Q^f!Sx>7F~RyH2ZAaQr8+Em%tc}@C8g)P8A7<`d(_v{lIi@
z!LgrQ?=DEa(^i}885lX+Z~0LdCB-7`@;S}VAH=P`YIW!e@00ZzYj5V9`#3++Zt3BN
g3RZLb{s<;8%;^v;&;C)g1ynM7y85}Sb4q9e0I%CfbN~PV

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/texttransform/images/transformToLower.png b/plugins/ckeditor4/texttransform/images/transformToLower.png
new file mode 100644
index 0000000000000000000000000000000000000000..2fcdf713140e2a2cc9082cad3604d115d11e4686
GIT binary patch
literal 1152
zcmbVMT}b3s6b`kD2(~J8!L6+!mhIopWNya9N$ON5$xNN%sEpH{=|f>+a@C;8O_OUU
z3Z?YVwjlbjr9V#v>B6?GTYcDNL6_2HD=4LXsL*z#MewoEE-bqu7VM2Wwhv;VA<6y8
z`M&R*bI-{K1AQ;l*PX4SD5^f)qh`t25InUt<lTCAUn4^^P8RSW8pb8fg;c^oLy%5e
z+6c@-&6s?34R%sg)v%c>;6kQX(vcO`0-LaJIRs5non5}8>0=PnLvX~j<IJDSUo*66
z#F;#wiDVoFj+#AFE*zZd%jr{Nx@a(6&(od0L<lU1HQKkvZBO#!%mJ@N=D{}0&<7@X
zEY2J{Rmcp`3UVRMhod1q0st)tVbIPC0ys}|5x}t#atk5QF7blIb<jr_L)2VjSjwuY
zBQ3IuGou(g63doKrEn=4M(zj;L{SVlI4(piLf)i}H9ur~Z50L;db(>m*hDrRFls|+
z0>>HR>0t<#lgS(t+ul*4NXl4Wb660Lu$C3Xbztq`Ed0lf6Ro}6qyyP3^w5N>lk*sE
ztAI)FP8SLci8oTeYm!6J##N+GSkT64HO`PPVZ$^eMU**^0*R<Bi%AXuQHg=1tcbB#
zOh|P^#R|tsSYA*-M~YWuF)9O)<YFKyD7=~w+Et#9Mz{(#ZF^X=by(3giS7}WsGfqA
z6c=h3xjBT!D-|#>iZJp<kwYtk0{v9pv<+19o(_)ZFj^J5=4;SMxyYgq@++Aq=>K=z
zhgjqP<cuZGut9PBt5_;qqymHKap{xAaq~c%bc{<{qrB1o2x+Uuw3^8I<&BHqJXF=#
zF#TTB?;AJ#ravCnKHJ>unJT>W`HzcB_qR6E=ca%7Yq#-<OAkJq(7;F4Mf}dn^|s~h
zD=*I#8szmmv3vERm3z2X@BJyVz3}#vXXN*b3-RY#-SW?MpJZPw&P@E8Z>gU5X6L_c
z={9$|KVDfkYQbtp`MXDN?aXh@=09za#r)FlGhcl8r8m?3)dRon>6^mJFPE>?e81aY
jTwUAWe;2+vM^#ZbZ@;nm`h`~>3;qe|WS@FfF240Q0V99E

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/texttransform/images/transformToUpper.png b/plugins/ckeditor4/texttransform/images/transformToUpper.png
new file mode 100644
index 0000000000000000000000000000000000000000..4857535ad47186a4267b5bf6d3fc8ec29891076a
GIT binary patch
literal 1211
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`k|nMYCBgY=CFO}lsSJ)O`AMk?
zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+*
zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn
zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87
z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$
zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`<jAm(=3qqRfJl%=|nBkco*&`K2Yc
zN<f!FypUVq>kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0
zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}jalaZmD
zp`)>rlclSXp`oR-g`umHv!#WFg_)bVu_eq5Y<f*y%q*OYO^lo@jhze)U5zY_3=JGj
z%pF|}Tnr3NoLpggJ@bl767!N%VfJPM?S<+!#H-iJxhOTUB)=#mKR*YS0s=DfOY(~|
z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTy<l0yuoFGO^fC*xwMnDddEiKF~4x
zpu~ZcSYSfH6bNF%lRl6G&pfGlz#LNq%o>kd>g#~n>b0kfV@SoVq(A@v+cT>+bT&E}
zd|*>(uC1x5S-_B~;_X{e@#BBy<z;`%i;8}=dz+h?Cg^Y2v}xPsjT;R+y1L??K75$S
z!qvJk``A*poQ9PvGg+0DAFqG#Afb4IQfcW|u@dHjm5h=C3l}XqRPgv%?|&a3pW`!U
z&XnZg;R$Jcl;!cOa8+VhaPaOk=g*%%aQ5uq<2P<Z{5n71etv`5hWdYhA|D@a=kIph
z^>HQR$^ZNu96MNiCJH&MVK`Fdu+d(jP+=NNlKY-4Is3Xl|6g8SzHxyH?_r03<_mQH
ti|a%P{QvXw^Zy@L4Emn2vNbR;Gt88m`E8eO-&{~};_2$=vd$@?2>|zZpk@F7

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/texttransform/lang/en.js b/plugins/ckeditor4/texttransform/lang/en.js
new file mode 100644
index 0000000..75bab00
--- /dev/null
+++ b/plugins/ckeditor4/texttransform/lang/en.js
@@ -0,0 +1,17 @@
+/**
+ * @author: Önder Ceylan <onderceylan@gmail.com>
+ * @copyright Copyright (c) 2013 - Önder Ceylan. All rights reserved.
+ * @license Licensed under the terms of GPL, LGPL and MPL licenses.
+ * @version 1.0
+ *
+ * Date: 5/10/13
+ * Time: 9:45 AM
+ */
+
+// set CKeditor lang
+CKEDITOR.plugins.setLang( 'texttransform', 'en', {
+    transformTextSwitchLabel: 'Transform Text Switcher',
+    transformTextToLowercaseLabel: 'Transform Text to Lowercase',
+    transformTextToUppercaseLabel: 'Transform Text to Uppercase',
+    transformTextCapitalizeLabel: 'Capitalize Text'
+});
diff --git a/plugins/ckeditor4/texttransform/lang/tr.js b/plugins/ckeditor4/texttransform/lang/tr.js
new file mode 100644
index 0000000..9caedbc
--- /dev/null
+++ b/plugins/ckeditor4/texttransform/lang/tr.js
@@ -0,0 +1,41 @@
+/**
+ * @author: Önder Ceylan <onderceylan@gmail.com>
+ * @copyright Copyright (c) 2013 - Önder Ceylan. All rights reserved.
+ * @license Licensed under the terms of GPL, LGPL and MPL licenses.
+ * @version 1.0
+ *
+ * Date: 5/10/13
+ * Time: 9:45 AM
+ */
+
+// define a prototype toUpperCase fn for Turkish character recognization
+String.prototype.trToUpperCase = function(){
+    var string = this;
+    var letters = { "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" };
+    string = string.replace(/(([iışğüçö]))/g, function(letter){ return letters[letter]; });
+    if (typeof(String.prototype.toLocaleUpperCase()) != 'undefined') {
+        return string.toLocaleUpperCase();
+    } else {
+        return string.toUpperCase();
+    }
+};
+
+// define prototype toLowerCase fn for Turkish character recognization
+String.prototype.trToLowerCase = function(){
+    var string = this;
+    var letters = { "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" };
+    string = string.replace(/(([İIŞĞÜÇÖ]))/g, function(letter){ return letters[letter]; });
+    if (typeof(String.prototype.toLocaleLowerCase()) != 'undefined') {
+        return string.toLocaleLowerCase();
+    } else {
+        return string.toLowerCase();
+    }
+};
+
+// set CKeditor lang
+CKEDITOR.plugins.setLang( 'texttransform', 'tr', {
+    transformTextSwitchLabel: 'Harf Düzenini Değiştir',
+    transformTextToLowercaseLabel: 'Küçük Harfe Dönüştür',
+    transformTextToUppercaseLabel: 'Büyük Harfe Dönüştür',
+    transformTextCapitalizeLabel: 'Baş Harfleri Büyüt'
+});
diff --git a/plugins/ckeditor4/texttransform/plugin.js b/plugins/ckeditor4/texttransform/plugin.js
new file mode 100644
index 0000000..7ccdcfe
--- /dev/null
+++ b/plugins/ckeditor4/texttransform/plugin.js
@@ -0,0 +1,151 @@
+/**
+ * @authors: Önder Ceylan <onderceylan@gmail.com>, PPKRAUSS https://github.com/ppKrauss
+ * @license Licensed under the terms of GPL, LGPL and MPL licenses.
+ * @version 1.1
+ * @history v1.0 at 2013-05-09 by onderceylan, v1.1 at 2013-08-27 by ppkrauss.
+ */
+
+CKEDITOR.plugins.add('texttransform',
+    {
+
+        // define lang codes for available lang files here
+        lang: 'en,tr',
+
+        // plugin initialise
+        init: function(editor)
+        {
+            // set num for switcher loop
+            var num = 0;
+
+            // add transformTextSwitch command to be used with button
+            editor.addCommand('transformTextSwitch',
+                {
+                    exec : function()
+                    {
+                        var selection = editor.getSelection();
+                        var commandArray = ['transformTextToUppercase', 'transformTextToLowercase', 'transformTextCapitalize'];
+
+                        if (selection.getSelectedText().length > 0) {
+
+                            selection.lock();
+
+                            editor.execCommand( commandArray[num] );
+
+                            selection.unlock(true);
+
+                            if (num < commandArray.length - 1) {
+                                num++;
+                            } else {
+                                num = 0;
+                            }
+
+                        }
+                    }
+                });
+
+            // add transformTextToUppercase command to be used with buttons and 'execCommand' method
+            editor.addCommand('transformTextToUppercase',
+                {
+                    exec : function()
+                    {
+                        var selection = editor.getSelection();
+                        if (selection.getSelectedText().length > 0) {
+				var ranges = selection.getRanges(),
+				    walker = new CKEDITOR.dom.walker( ranges[0] ), 
+				    node;
+				while ( ( node = walker.next() ) ) 
+					if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) 
+						if (editor.langCode == "tr") {
+							node.$.textContent = node.$.textContent.trToUpperCase();
+						} else {
+							node.$.textContent = node.$.textContent.toLocaleUpperCase();		
+						}
+                        }//if
+                    } //func
+                });
+
+            // add transformTextToUppercase command to be used with buttons and 'execCommand' method
+            editor.addCommand('transformTextToLowercase',
+                {
+                    exec : function()
+                    {
+                        var selection = editor.getSelection();
+                        if (selection.getSelectedText().length > 0) {
+				var ranges = selection.getRanges(),
+				    walker = new CKEDITOR.dom.walker( ranges[0] ), 
+				    node;
+				while ( ( node = walker.next() ) ) 
+					if ( node.type == CKEDITOR.NODE_TEXT && node.getText() ) 
+						if (editor.langCode == "tr") {
+							node.$.textContent = node.$.textContent.trToLowerCase();
+						} else {
+							node.$.textContent = node.$.textContent.toLocaleLowerCase();		
+						}
+						
+                        }//if
+
+                    }
+                });
+
+            // add transformTextCapitalize command to be used with buttons and 'execCommand' method
+            editor.addCommand( 'transformTextCapitalize',
+                {
+                    exec : function()
+                    {
+                        var selection = editor.getSelection();
+                        if (selection.getSelectedText().length > 0) {
+				var ranges = selection.getRanges(),
+				    walker = new CKEDITOR.dom.walker( ranges[0] ), 
+				    node;
+				while ( ( node = walker.next() ) ) 
+					if ( node.type == CKEDITOR.NODE_TEXT && node.getText() )
+						node.$.textContent = node.$.textContent.replace(
+							/[^\s]\S*/g, 
+							function(txt){
+								if (editor.langCode == "tr") {
+									return  txt.charAt(0).trToUpperCase() + 
+										txt.substr(1).trToLowerCase();
+								} else {
+									return  txt.charAt(0).toLocaleUpperCase() + 
+										txt.substr(1).toLocaleLowerCase();
+								}
+							
+							}
+						);
+                        }//if
+                    }
+                });
+
+            // add TransformTextSwitcher button to editor
+            editor.ui.addButton('TransformTextSwitcher',
+                {
+                    label: editor.lang.texttransform.transformTextSwitchLabel,
+                    command: 'transformTextSwitch',
+                    icon: this.path + 'images/transformSwitcher.png'
+                } );
+
+            // add TransformTextToLowercase button to editor
+            editor.ui.addButton('TransformTextToLowercase',
+                {
+                    label: editor.lang.texttransform.transformTextToLowercaseLabel,
+                    command: 'transformTextToLowercase',
+                    icon: this.path + 'images/transformToLower.png'
+                } );
+
+            // add TransformTextToUppercase button to editor
+            editor.ui.addButton('TransformTextToUppercase',
+                {
+                    label: editor.lang.texttransform.transformTextToUppercaseLabel,
+                    command: 'transformTextToUppercase',
+                    icon: this.path + 'images/transformToUpper.png'
+                } );
+
+            // add TransformTextCapitalize button to editor
+            editor.ui.addButton('TransformTextCapitalize',
+                {
+                    label: editor.lang.texttransform.transformTextCapitalizeLabel,
+                    command: 'transformTextCapitalize',
+                    icon: this.path + 'images/transformCapitalize.png'
+                } );
+        }
+    } );
diff --git a/plugins/ckeditor4/token/LICENSE b/plugins/ckeditor4/token/LICENSE
new file mode 100644
index 0000000..8cdb845
--- /dev/null
+++ b/plugins/ckeditor4/token/LICENSE
@@ -0,0 +1,340 @@
+                    GNU GENERAL PUBLIC LICENSE
+                       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc., <http://fsf.org/>
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                            Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, too.
+
+  When we speak of free software, we are referring to freedom, not
+price.  Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+  To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                    GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+    a) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works.  But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) Accompany it with the complete corresponding machine-readable
+    source code, which must be distributed under the terms of Sections
+    1 and 2 above on a medium customarily used for software interchange; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable.  However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+  5. You are not required to accept this License, since you have not
+signed it.  However, nothing else grants you permission to modify or
+distribute the Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions.  You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+  7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License.  If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices.  Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded.  In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time.  Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number.  If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation.  If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission.  For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this.  Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+                            NO WARRANTY
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.  THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                     END OF TERMS AND CONDITIONS
+
+            How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+    {description}
+    Copyright (C) {year}  {fullname}
+
+    This program is free software; you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  {signature of Ty Coon}, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
+
diff --git a/plugins/ckeditor4/token/ReadMe.md b/plugins/ckeditor4/token/ReadMe.md
new file mode 100644
index 0000000..b6ac641
--- /dev/null
+++ b/plugins/ckeditor4/token/ReadMe.md
@@ -0,0 +1,103 @@
+Token Replacement CKEditor Plugin
+=================================
+
+Overview
+--------
+
+This plugin allows you to insert tokens into the CKEditor for replacement with data. For instance, it can be used for variables in [mako](http://www.makotemplates.org) or [twig](http://twig.sensiolabs.org) templates, or your own custom token replacement code.
+
+The default token style is currently for mako template variables (e.g. - ${tokenName}), as that is what I initially developed this for, but it is configurable for any strings to start/end a token. You can also configure what tokens are available in the dropdown.
+
+This plugin is largely based on the [placeholder](http://ckeditor.com/addon/placeholder) plugin made by the CKEditor folks. I haven't supplied all of the translations that they did in that plugin, but I will add in any contributed translations that folks would like if they supply them.
+
+How To Use It
+-------------
+
+#### Install It
+Put the `token` folder in the `ckeditor/plugins` folder.
+
+#### Enable It
+
+##### Globally
+
+Add the plugin along with any other configuration items you would like to the `config.js` file in the `ckeditor` folder.
+
+```
+// Enable token plugin
+config.extraPlugins = 'token';
+
+// Configure available tokens
+config.availableTokens = [
+	["", ""],
+	["token1", "token1"],
+	["token2", "token2"],
+	["token3", "token3"],
+];
+
+// Configure token string
+config.tokenStart = '[[';
+config.tokenEnd = ']]';
+```
+
+##### At instantiation
+
+```
+CKEDITOR.replace('some-class', {
+	extraPlugins: 'token',
+	availableTokens: [
+		["", ""],
+		["token1", "token1"],
+		["token2", "token2"],
+		["token3", "token3"],
+	]
+});
+```
+
+Or...
+
+```
+CKEDITOR.replaceAll(function (textarea, config) {
+	if (textarea.className == 'some-class') {
+		// Enable token plugin
+		config.extraPlugins = 'token';
+
+		// Configure available tokens
+		config.availableTokens = [
+			["", ""],
+			["token1", "token1"],
+			["token2", "token2"],
+			["token3", "token3"],
+		];
+		return true;
+	}
+	return false;
+});
+```
+
+Configuration Options
+---------------------
+
+None of these are required, per se, but the plugin will be pretty useless if you don't configure the list of available tokens. I may add a configuration to allow the user to type in arbitrary tokens like the original placeholder plugin, but that isn't something I needed in the initial version.
+
+#### availableTokens
+
+A list of tokens the user can select from the dropdown in the format:
+
+```
+[ [ "Display Text", "form_value"], [ "Display Text 2", "form_value_2" ] ]
+```
+
+#### tokenStart
+
+A string that designates the beginning of a token (`${` by default).
+
+#### tokenEnd
+
+A string that deginates the end of a token (`}` by default).
+
+Putting it all together
+-----------------------
+
+So given the configuration above, a user would be presented with a dialog that has a dropdown with the items 'Display Text' and 'Display Text 2' in it. When they select 'Display Text 2' and hit OK, the token `${form_value_2}` will be inserted at the caret.
+
+The user can also double-click any of the tokens to change their value.
\ No newline at end of file
diff --git a/plugins/ckeditor4/token/dialogs/token.js b/plugins/ckeditor4/token/dialogs/token.js
new file mode 100644
index 0000000..52029af
--- /dev/null
+++ b/plugins/ckeditor4/token/dialogs/token.js
@@ -0,0 +1,46 @@
+/**
+ * @fileOverview Definition for token plugin dialog.
+ *
+ */
+
+'use strict';
+
+CKEDITOR.dialog.add( 'token', function( editor ) {
+	var lang = editor.lang.token;
+	var	generalLabel = editor.lang.common.generalTab;
+	var tokens = [["",""]];
+	if (typeof editor.config.availableTokens != "undefined") {
+		tokens = editor.config.availableTokens;
+	}
+
+	return {
+		title: lang.title,
+		minWidth: 300,
+		minHeight: 60,
+		contents: [
+			{
+				id: 'info',
+				label: generalLabel,
+				title: generalLabel,
+				elements: [
+					// Dialog window UI elements.
+					{
+						id: "name",
+						type: "select",
+						style: 'width: 300px;',
+						label: lang.name,
+						'default': '',
+						required: true,
+						items: tokens,
+						setup: function( widget ) {
+							this.setValue( widget.data.name );
+						},
+						commit: function( widget ) {
+							widget.setData( 'name', this.getValue() );
+						}
+					}
+				]
+			}
+		]
+	};
+} );
diff --git a/plugins/ckeditor4/token/icons/hidpi/token.png b/plugins/ckeditor4/token/icons/hidpi/token.png
new file mode 100644
index 0000000000000000000000000000000000000000..5b77c582717ec68080388430fa1db2459fc24ffa
GIT binary patch
literal 14976
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
YCieTY9f#*Vp*|y8R4~u^VO~wke<fdaSO5S3

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/token/icons/token.png b/plugins/ckeditor4/token/icons/token.png
new file mode 100644
index 0000000000000000000000000000000000000000..1d0276d2c8931c6298b409b8ce091c291f088614
GIT binary patch
literal 14658
zcmeI3TWs4@7{^_yf>Jiv+Ym2UDNLP&<4Z1XOp>W<x;BV(RT{JogjUx+X{{!<vE3yt
znl!B-=p$>Tag!z?E>9pa4PFM?141x?5Kl}@NSojZkcPw%Xiw$XPLnTb(zBsGo~TK_
zp7Z~I-|_EU;uo(^PfhF{d~}dun7#SQToHfo^WOva;m^lzZK?R{0ekYei~Fzo@4mys
zZ`T=SWY{Rpdb5RR6wRteRo$9L(R$U!YKBQ4s@tlzggka0Ef{7d^5><?5!TQ%kz<L1
zP_W0)qA|JZpqbUFlD4{}rS!<5>|naC-~?6VscgMkF<qsei3E8S9Q)0DgbgI#QYJF$
z7i4D()9je#AT|+Aa+;8oSveII6S5qapJXLLOz=XCj|rR<Q{sXWm)OQDk{!fR+R@8O
zF?Xa<4*!>lEP9@;@O-USi`HUM%UR&XR4T;_5-&*{R&ef$>8W+jbcezu+j(-x)f~h2
z49jHwyz0EQ>}4VmzfkklxUQ<*EM&S3c9<exS8ZO53Vb({t~EXOvQr6$rfWQ^peiyw
z7yHDnK6}yfEO*iBQL@?HvoM~MLZMl^>v*fxuBBaX{3J%uK-$&mmR4-U7m;f%I~p24
zi7#cS+tqtUxivX$nf#ufV@GwPht2N^ZNX9qXDE%YRT*=T>RC?7vMSkdl}&FWWXHyW
zRmBb$RLwAbt_Rb6r>QmLt$Zk_dMN9!NKTMBK`IHdg8!sAC&U#&07*h+M~;G}8|4*{
zV}ujMk~pG>NktriIe@Y=2i`%t>Zx~>1!_SaT~o@IQ&qjJQB@ZZZ<`BgzSRhn&2^=W
zSryB{!$R3un(x*OT)|pX@}}#lriSvlEN+MzhOWfqa#@sRi9@;`=i&)5#;Iyt=i+E&
zBq61cl#=xTVxa)-J5uK?ZQ0*1jnw*GrUv#MsgF7aKI_y9(D<Xj+Y(*U>?k#9xOj!G
zfR&5aZ*ZE;pcmU)w>v6Ea4OlV<0600Wg^>~u6c|#PbuFM>|I6G{PQfU`C9^Ez-_Iq
zVKto%oAG}qFw76^y=&AKk-6K33R4BD-bq}m?A25UjV|Cdac8?d%-e44ERg2?Ux13y
zJ{4hW`wVTb*_|_*_764%uLe9aHJAl4&F^SyRSxyD{;XD(1AR*HU%cplHmtC_(|UY&
zE9~yHww%wJhL@EZ)jFDi%Rha?gJA~WD4=XIk%%SId}ni~W7?>r%52WSJJ|KtrI>7Z
zIy<@=kM}Zyj)pOuD)5sY%w*V#Zy4~s3g5h0X`kfgR=CGO>x%AiVwjE=fi#FQ#YIE}
z1r!&gL5wLbA|fcDxF8K;OmPtrK>@`DX%J(Ii--scC@x5Y7*kwCL{LC+K^nxE;vyn~
z0*VXLAjT9I5fKznT#yDarnrcRpn&3nG>9?9MMMMz6c?mHj43W6A}FA^APr(naS;(g
z0mTJr5MzpqhzJTOE=YqIQ(QzuP(X1(8pN35A|iqUiVM;p#uOJ35fo5dkOncPxQK|L
zfZ~EQh%v=QL<9vC7o<UqDJ~)+D4@6?4Ps1j5fMQF#RX{)<6UtLwjTdOCVu9xh9B;`
znUp8+gMq9zSu8Nj>JtoedW~UjZ{hFX7-m^unBV6ZMtOr__FHF9e02nCH}kpCQvKS`
z8>0_>$?oa@`n3ly|GIVkMt`5h8=LQbP}q3>*e~-J%b!aJ)}NB*{$Q_6z4=}8=r^gM
zE8o9${^9(EcVeGx{`J`{c_6=89Qf$dZ*N_FZvBgYQycrQttpJQ=gg%O2OiP(okKsp
z8vF26{r(?bx;$~?=F11y&i~E#pD$+L-#q){E3ZHP&%(8>Q!kt@K7HZR_1hwIZuL~(
U+~MK(@c5Yg_*CxW!*gf;1FRG42><{9

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/token/lang/en.js b/plugins/ckeditor4/token/lang/en.js
new file mode 100644
index 0000000..98d5e45
--- /dev/null
+++ b/plugins/ckeditor4/token/lang/en.js
@@ -0,0 +1,6 @@
+CKEDITOR.plugins.setLang( 'token', 'en', {
+	title: 'Token Insertion',
+	toolbar: 'Token',
+	name: 'Token to Insert',
+	pathName: 'token'
+} );
diff --git a/plugins/ckeditor4/token/lang/ru.js b/plugins/ckeditor4/token/lang/ru.js
new file mode 100644
index 0000000..dc240df
--- /dev/null
+++ b/plugins/ckeditor4/token/lang/ru.js
@@ -0,0 +1,6 @@
+CKEDITOR.plugins.setLang( 'token', 'ru', {
+	title: 'Вставить токен',
+	toolbar: 'Токен',
+	name: 'Токен',
+	pathName: 'token'
+} );
diff --git a/plugins/ckeditor4/token/plugin.js b/plugins/ckeditor4/token/plugin.js
new file mode 100644
index 0000000..9cc7e22
--- /dev/null
+++ b/plugins/ckeditor4/token/plugin.js
@@ -0,0 +1,115 @@
+/**
+ * @fileOverview The "token" plugin.
+ *
+ */
+
+'use strict';
+
+function escapeRegExp(string){
+    return string.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
+}
+
+( function() {
+	CKEDITOR.plugins.add( 'token', {
+		requires: 'widget,dialog',
+		lang: 'en,ru',
+		icons: 'token',
+		hidpi: true,
+
+		onLoad: function() {
+			// Register styles for token widget frame.
+			CKEDITOR.addCss( '.cke_token{background-color:#ff0}' );
+		},
+
+		init: function( editor ) {
+
+			var lang = editor.lang.token;
+			var tokenStart = '${';
+            var tokenEnd = '}';
+            if (typeof editor.config.tokenStart != 'undefined') {
+                tokenStart = editor.config.tokenStart;
+            }
+            if (typeof editor.config.tokenEnd != 'undefined') {
+                tokenEnd = editor.config.tokenEnd;
+            }
+            var tokenStartNum = tokenStart.length;
+            var tokenEndNum = 0 - tokenEnd.length;
+
+			// Register dialog.
+			CKEDITOR.dialog.add( 'token', this.path + 'dialogs/token.js' );
+
+			// Put ur init code here.
+			editor.widgets.add( 'token', {
+				// Widget code.
+				dialog: 'token',
+				pathName: lang.pathName,
+				// We need to have wrapping element, otherwise there are issues in
+				// add dialog.
+				template: '<span class="cke_token"></span>',
+
+				downcast: function() {
+					return new CKEDITOR.htmlParser.text( tokenStart + this.data.name + tokenEnd );
+				},
+
+				init: function() {
+					// Note that token markup characters are stripped for the name.
+					this.setData( 'name', this.element.getText().slice( tokenStartNum, tokenEndNum ) );
+				},
+
+				data: function() {
+					this.element.setText( tokenStart + this.data.name + tokenEnd );
+				}
+			} );
+
+			editor.ui.addButton && editor.ui.addButton( 'CreateToken', {
+				label: lang.toolbar,
+				command: 'token',
+				toolbar: 'insert,5',
+				icon: 'token'
+			} );
+		},
+
+		afterInit: function( editor ) {
+
+            var tokenStart = '${';
+            var tokenEnd = '}';
+            if (typeof editor.config.tokenStart != 'undefined') {
+                tokenStart = editor.config.tokenStart;
+            }
+            if (typeof editor.config.tokenEnd != 'undefined') {
+                tokenEnd = editor.config.tokenEnd;
+            }
+            var tokenStartRegex = escapeRegExp(tokenStart);
+            var tokenEndRegex = escapeRegExp(tokenEnd);
+			var tokenReplaceRegex = new RegExp(tokenStartRegex + '([^' + tokenStartRegex + tokenEndRegex +'])+' + tokenEndRegex, 'g');
+
+			editor.dataProcessor.dataFilter.addRules( {
+				text: function( text, node ) {
+					var dtd = node.parent && CKEDITOR.dtd[ node.parent.name ];
+
+					// Skip the case when token is in elements like <title> or <textarea>
+					// but upcast token in custom elements (no DTD).
+					if ( dtd && !dtd.span )
+						return;
+
+					return text.replace( tokenReplaceRegex, function( match ) {
+						// Creating widget code.
+						var widgetWrapper = null,
+							innerElement = new CKEDITOR.htmlParser.element( 'span', {
+								'class': 'cke_token'
+							} );
+
+						// Adds token identifier as innertext.
+						innerElement.add( new CKEDITOR.htmlParser.text( match ) );
+						widgetWrapper = editor.widgets.wrapElement( innerElement, 'token' );
+
+						// Return outerhtml of widget wrapper so it will be placed
+						// as replacement.
+						return widgetWrapper.getOuterHtml();
+					} );
+				}
+			} );
+		}
+	} );
+
+} )();
diff --git a/plugins/ckeditor4/tweetabletext/README.md b/plugins/ckeditor4/tweetabletext/README.md
new file mode 100644
index 0000000..4ce6f1e
--- /dev/null
+++ b/plugins/ckeditor4/tweetabletext/README.md
@@ -0,0 +1,58 @@
+# Tweetable Text
+A simple CKEditor plugin to make some of text tweetable.
+
+##### Screenshots for the UI as below:
+
+![Screenshot]
+(http://i.imgur.com/mQAu3wI.png)
+
+![Screenshot]
+(http://i.imgur.com/38J9RLn.png)
+
+![Screenshot]
+(http://i.imgur.com/w08LYCz.png)
+
+------------------------------------------------------------------
+
+##### Screenshot on the frontend as below:
+
+![Screenshot]
+(http://i.imgur.com/1ATzYJ3.png)
+
+##### CSS for the frontend:
+
+```css
+a.tweetabletext {
+  text-decoration: underline;
+}
+a.tweetabletext:hover {
+  background-color: #A9F43B;
+  color: #2C4414;
+  text-decoration: none;
+}
+a.tweetabletext::after {
+  display: inline-block;
+  background: url("http://i.imgur.com/ikC8axw.png") no-repeat center center;
+  width: 16px;
+  height: 16px;
+  content: "\00a0";
+  text-decoration: none;
+  margin: 0;
+  margin-left: 5px;
+  right: 0px;
+  position: relative;
+  padding: 0;
+  top: 3px;
+}
+```
+_feel free to make modification on the css._
+
+
+##### @todo:
+* Proper Roadmap planning.
+* ~~URL need to encode~~ (_checked_).
+* Adding more parameter as mentioned here: https://dev.twitter.com/web/tweet-button/web-intent
+* Improving README file.
+
+
+
diff --git a/plugins/ckeditor4/tweetabletext/css/tweetabletext.css b/plugins/ckeditor4/tweetabletext/css/tweetabletext.css
new file mode 100755
index 0000000..40bdf71
--- /dev/null
+++ b/plugins/ckeditor4/tweetabletext/css/tweetabletext.css
@@ -0,0 +1,7 @@
+.tweetabletext {
+  margin: 0;
+  padding: 0;
+  background-color: #4099FF;
+  text-decoration: none;
+  color: #ffffff;
+}
diff --git a/plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js b/plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js
new file mode 100755
index 0000000..8e007d3
--- /dev/null
+++ b/plugins/ckeditor4/tweetabletext/dialogs/tweetabletext.js
@@ -0,0 +1,92 @@
+CKEDITOR.dialog.add('tweetabletextDialog', function(editor) {
+  return {
+    title: 'TweetableText Properties',
+    minWidth: 400,
+    minHeight: 200,
+    contents: [
+      {
+        id: 'tab-basic',
+        label: 'Basic Settings',
+        elements: [
+          {
+            type: 'text',
+            id: 'displaytext',
+            label: 'Display Text',
+            validate: CKEDITOR.dialog.validate.notEmpty('Display Text field can not be empty.'),
+            setup: function(element) {
+              this.setValue(element.getText());
+
+            },
+            commit: function(element) {
+              element.setText(this.getValue());
+
+            }
+          },
+          {
+            type: 'text',
+            id: 'tweetabletext',
+            label: 'Tweetable Text',
+            validate: CKEDITOR.dialog.validate.notEmpty('Tweetable Text field can not be empty.'),
+            setup: function(element) {
+              var splitURL = element.getAttribute('href').split("?");
+              var dataTweet = splitURL[1].split("=");
+              var decodedDataTweet = decodeURI(dataTweet[1]);
+              this.setValue(decodedDataTweet);
+
+            },
+            commit: function(element) {
+              var twitterBaseUrl = 'http://twitter.com/intent/tweet?';
+              var encodedValue = encodeURI(this.getValue());
+              twitterBaseUrl += 'text=' + encodedValue;
+              element.setAttribute('href', twitterBaseUrl);
+
+              // For some reason, without doing this the changes won't be reflected on frontend.
+              element.setAttribute('data-cke-saved-href', twitterBaseUrl);
+            }
+          }
+        ]
+      }
+    ],
+
+    onShow: function() {
+      var selection = editor.getSelection();
+      var element = selection.getStartElement();
+
+      if (element.getAttribute('class') !== 'tweetabletext') {
+        element = editor.document.createElement('a');
+        this.insertMode = true;
+      }
+      else {  
+        this.insertMode = false;
+      }
+
+      this.element = element;
+      if (!this.insertMode) {
+        this.setupContent(this.element);
+      }
+    },
+
+    onOk: function() {
+      var dialog = this;
+      var retrieveElement = this.element;
+
+      var getDisplayText = dialog.getValueOf('tab-basic', 'displaytext');
+      var getTweetableText = dialog.getValueOf('tab-basic', 'tweetabletext');
+      var getTweetableText = encodeURI(getTweetableText);
+
+      var twitterBaseUrl = 'http://twitter.com/intent/tweet?';
+      var tweetabletext = editor.document.createElement('a');
+      tweetabletext.setAttribute('class', 'tweetabletext');
+
+      twitterBaseUrl += 'text=' + getTweetableText;
+      tweetabletext.setAttribute('href', twitterBaseUrl);
+      tweetabletext.setText(getDisplayText);
+
+      this.commitContent(retrieveElement);
+
+      if (this.insertMode) {
+        editor.insertElement(tweetabletext);
+      }
+    }
+  };
+});
diff --git a/plugins/ckeditor4/tweetabletext/icons/tweetabletext.png b/plugins/ckeditor4/tweetabletext/icons/tweetabletext.png
new file mode 100755
index 0000000000000000000000000000000000000000..057ab004b5d826e151a4f9cc6a66d88caffa8911
GIT binary patch
literal 1509
zcmbVMT}%{L6dqg_sA8nmMy!cU7j3A8ow>X0-^j}T%x<BwNC7Kp)$TBJVJEmd<Ln>{
ziioWWjRg{0+q5?FKw6$ECbfwv%~C-uL8X=08cY)ugvM&sqT&xSy$h`N!T8Y0%-nm=
zobNl|IrrRYEXaRz;rv(TV;HtDH-|1nV^ZWvh(qs`357w!GTBuk7YSu@6(d2+&IzRu
z&-F9qun;m_^|n5kg<&cmUtA)Wc=9M#@N1cfk2d5N5gNm?vO^-nRzMjqh2?y}s=4_?
zScCJNRkP9HAw8lK`uLn02^Q7l7qc}LtcBBLuf?-M6e93LnZZN;t$`pFvT9~{DKw9m
z2@O8uB3D>7v!Y5o1-Mg?Aa2m=GguM;+-TH-OoPz~(s3OLbOecRV+P2i3`R<4!sjjx
ziY9SoR3Yu2i-lHJjZc<EiXf`0s<c&ltss>Xz+$mPICQ!U<dG4q4#-R>BM?lDGSD!{
zO1voZLI962GNnSLY}Fv8vnlvRkLL+-AUIbjR5BvOhy>7*gx?>@YsNb$7s979p6MMd
zt`;Ft2!leU#G?HuOO1k2?VcYf;)v8x>m?p-3bU0K*h)VP$hovtgT81vo}=6*lN$h2
zCTY@<Ml(R^XF45DquEZ=CWkB266JUn)@3#Vy~}O4yLEN|T);xQEN)uwa5)SPgWgU@
zvAKbu%mi2%jmx9Bb6CrBv6NGSj4VjSg0MB(0R=um7J@!O#GOS3Ex<ht%LgKs$Og^k
zOGAm@4mr0Z`0<$vQ~Wa&ka{!fpQo9dodBgyJAq4QrVVDKeiqC9pQ;f^3=wIM|Flcg
zgnBSCebW4B@#Ofx06H@gIvkrP`0W@rZ*eYdFAfcrPAN*ZYSr$>dPkQu+!Ygd+Id8M
z@6zpEU0-7><J+#)U&I<xux+UYH&pG1=cPJFUQ@Zt4yhGodYjD@+qNvNYB=0}c&#el
zr0TwTB=Nw}6}3~!qtiQEzf)x|TEF~Y=jR=xb?VKvttS`Q7RIHWW1(kWA4pgSNO3|>
zCNzMljmF{fmV(vZcR=xUfA7mZZNyK?67FFgbXMcFD||oiY#Fr0HN2J6x7+WIJCmM>
zt2V@*_`dEO5V$2@id`PMpS(NtP54!>I%NwWJ8NR)znkOJul$o<M{}@a?^(rb-{8If
z2lIB)<wv`&O^+mX=<V2_dF1rtqRWe#TE<z}sXCw7)O+yPedEWMz~8;?rEtGD-F8Q5
z9u!k7X7kjQ(WN`@e%ko)?YjfYY9%@OV#2A~rt8Y4Q|}*5Il1`!srZ4wrV|rgcLt7R
zXMLFYhNQpY)4jOnh340jj)9)xjFyikEe}_X4vmK&PKKu^x~@((zI&$9rYJUmrQM28
zuB_`>2}{;?h=1vBHI`oJ?AxP1yXC;+srnr`yt@5ZOwPD!<h|hwDXq<+2L*#vYWLFG
zn6cwOQr8#Mf3fI;bmyV+*fICs5uvUk@5H12(Xr3Ms|Ui$#<KFV`<kBK`-NZae~{m#
zyR>W_^V@RU@%6tLx)XO-t3TmGt;uakqXR^1oBArN#$w{Idt7(_nwNIiB0t_-S3do%
H!@K8S?9(ld

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/tweetabletext/plugin.js b/plugins/ckeditor4/tweetabletext/plugin.js
new file mode 100755
index 0000000..5e31ab3
--- /dev/null
+++ b/plugins/ckeditor4/tweetabletext/plugin.js
@@ -0,0 +1,78 @@
+CKEDITOR.plugins.add('tweetabletext', {
+  icons: 'tweetabletext',
+  beforeInit: function () {
+    
+  },
+
+  init: function(editor) {
+    editor.addCommand('tweetabletext', new CKEDITOR.dialogCommand('tweetabletextDialog'));
+    editor.addCommand('untweetabletext', new CKEDITOR.unlinkCommand());
+
+    editor.ui.addButton('TweetableText', {
+  	  label: 'Insert TweetableText',
+  	  command: 'tweetabletext',
+  	  toolbar: 'insert'
+  	});
+
+    if (editor.contextMenu) {
+      editor.addMenuGroup('tweetabletextGroup');
+
+      editor.addMenuItems({
+        tweetabletextItem: {
+          label: 'Edit TweetableText',
+          icon: this.path + 'icons/tweetabletext.png',
+          command: 'tweetabletext',
+          group: 'tweetabletextGroup' 
+        },
+        unTweetabletextItem: {
+          label: 'Remove TweetableText',
+          icon: this.path + 'icons/tweetabletext.png',
+          command: 'untweetabletext',
+          group: 'tweetabletextGroup' 
+        },
+
+      });
+
+      editor.contextMenu.addListener(function(element) {
+          if (element.getAttribute('class') === 'tweetabletext') {
+            return { tweetabletextItem: CKEDITOR.TRISTATE_OFF, unTweetabletextItem: CKEDITOR.TRISTATE_OFF,};
+          }
+      });
+    }
+
+    CKEDITOR.dialog.add('tweetabletextDialog', this.path + 'dialogs/tweetabletext.js');
+
+    if (typeof editor.config.contentsCss === 'object') {
+      editor.config.contentsCss.push(CKEDITOR.getUrl(this.path + 'css/tweetabletext.css'));
+    }
+  }
+});
+
+// This part was getting from http://ckeditor.com/addon/link.
+CKEDITOR.unlinkCommand = function() {};
+CKEDITOR.unlinkCommand.prototype = {
+  exec: function(editor) {
+    var style = new CKEDITOR.style({
+      element: 'a', 
+      type: CKEDITOR.STYLE_INLINE, 
+      alwaysRemoveElement: 1 
+    });
+
+    editor.removeStyle(style);
+  },
+
+  refresh: function(editor, path) {  
+    var element = path.lastElement && path.lastElement.getAscendant('a', true);
+    if (element && element.getName() === 'a' && element.getAttribute('href') && element.getChildCount()) {
+      this.setState(CKEDITOR.TRISTATE_OFF);
+    }
+    else {
+      this.setState(CKEDITOR.TRISTATE_DISABLED);
+    }
+  },
+
+  contextSensitive: 1,
+  startDisabled: 1,
+  requiredContent: 'a[href]'
+};
+  
\ No newline at end of file
diff --git a/plugins/ckeditor4/videodetector/dialogs/videoDialog.js b/plugins/ckeditor4/videodetector/dialogs/videoDialog.js
new file mode 100644
index 0000000..93f81b8
--- /dev/null
+++ b/plugins/ckeditor4/videodetector/dialogs/videoDialog.js
@@ -0,0 +1,143 @@
+/*
+*   Plugin developed by Netbroad, C.B.
+*
+*   LICENCE: GPL, LGPL, MPL
+*   NON-COMMERCIAL PLUGIN.
+*
+*   Website: netbroad.eu
+*   Twitter: @netbroadcb
+*   Facebook: Netbroad
+*   LinkedIn: Netbroad
+*
+*/
+
+CKEDITOR.dialog.add( 'videoDialog', function( editor ) {
+    return {
+        title: 'Insert a Youtube, Vimeo, Dailymotion URL or embed code',
+        minWidth: 400,
+        minHeight: 100,
+        contents: [
+            {
+                id: 'tab-basic',
+                label: 'Basic Settings',
+                elements: [
+                    {
+                        type: 'text',
+                        id: 'url_video',
+                        label: 'Youtube, Vimeo, Dailymotion URL or embed code',
+                        validate: CKEDITOR.dialog.validate.notEmpty( "Empty!" )
+                    }
+                ]
+            }
+        ],
+
+        onOk: function(){
+            var dialog = this;
+
+
+            //detectamos el video
+            var respuesta = detectar();
+            var url = "";
+
+            if(respuesta.reproductor == "youtube"){
+                var url = "https://www.youtube.com/embed/"+respuesta.id_video+"?autohide=1&controls=1&showinfo=0";
+            }
+            else if(respuesta.reproductor == "vimeo"){
+                var url = "https://player.vimeo.com/video/"+respuesta.id_video+"?portrait=0";
+            }
+            else if(respuesta.reproductor == "dailymotion"){
+                var url = "https://www.dailymotion.com/embed/video/"+respuesta.id_video;
+            }
+
+            var p = new CKEDITOR.dom.element('div');
+            p.setAttribute('class', 'videodetector');
+
+            var iframe = new CKEDITOR.dom.element('iframe');
+            iframe.setAttribute('src', url);
+            iframe.setAttribute('frameborder', '0');
+            p.append(iframe);
+
+            // var edit_btn = new CKEDITOR.dom.element('input');
+            // edit_btn.setAttribute('type', 'button');
+            // edit_btn.setAttribute('value', 'Edit video');
+            // edit_btn.setAttribute('class', 'edit-videodetector');
+            // p.append(edit_btn);
+
+            var remove_btn = new CKEDITOR.dom.element('input');
+            remove_btn.setAttribute('type', 'button');
+            remove_btn.setAttribute('value', 'Remove video');
+            remove_btn.setAttribute('class', 'remove-videodetector');
+            p.append(remove_btn);
+
+            editor.insertElement(p);
+
+            // edit_btn.on('click', function(){
+            //     new CKEDITOR.dialog(editor, 'videoDialog');
+            // });
+
+            remove_btn.on('click', function(){
+                var to_remove = remove_btn.getParent();
+                to_remove.remove();
+            });
+        }
+    };
+});
+
+
+//funcion para detectar el id y la plataforma (youtube, vimeo o dailymotion) de los videos
+function detectar(){
+    var getDialog     = document.getElementsByClassName('cke_dialog_contents').item(0);
+    var url           = getDialog.getElementsByTagName('input').item(0).value;
+    var id            = '';
+    var reproductor   = '';
+    var url_comprobar = '';
+
+    if(url.indexOf('youtu.be') >= 0){
+        reproductor = 'youtube';
+        id          = url.substring(url.lastIndexOf("/")+1, url.length);
+    }
+    if(url.indexOf("youtube") >= 0){
+        reproductor = 'youtube'
+        if(url.indexOf("</iframe>") >= 0){
+            var fin = url.substring(url.indexOf("embed/")+6, url.length)
+            id      = fin.substring(fin.indexOf('"'), 0);
+        }else{
+            if(url.indexOf("&") >= 0)
+                id = url.substring(url.indexOf("?v=")+3, url.indexOf("&"));
+            else
+                id = url.substring(url.indexOf("?v=")+3, url.length);
+        }
+        url_comprobar = "https://gdata.youtube.com/feeds/api/videos/" + id + "?v=2&alt=json";
+        //"https://gdata.youtube.com/feeds/api/videos/" + id + "?v=2&alt=json"
+    }
+    if(url.indexOf("vimeo") >= 0){
+        reproductor = 'vimeo'
+        if(url.indexOf("</iframe>") >= 0){
+            var fin = url.substring(url.lastIndexOf('vimeo.com/"')+6, url.indexOf('>'))
+            id      = fin.substring(fin.lastIndexOf('/')+1, fin.indexOf('"',fin.lastIndexOf('/')+1))
+        }else{
+            id = url.substring(url.lastIndexOf("/")+1, url.length)
+        }
+        url_comprobar = 'http://vimeo.com/api/v2/video/' + id + '.json';
+        //'http://vimeo.com/api/v2/video/' + video_id + '.json';
+    }
+    if(url.indexOf('dai.ly') >= 0){
+        reproductor = 'dailymotion';
+        id          = url.substring(url.lastIndexOf("/")+1, url.length);
+    }
+    if(url.indexOf("dailymotion") >= 0){
+        reproductor = 'dailymotion';
+        if(url.indexOf("</iframe>") >= 0){
+            var fin = url.substring(url.indexOf('dailymotion.com/')+16, url.indexOf('></iframe>'))
+            id      = fin.substring(fin.lastIndexOf('/')+1, fin.lastIndexOf('"'))
+        }else{
+            if(url.indexOf('_') >= 0)
+                id = url.substring(url.lastIndexOf('/')+1, url.indexOf('_'))
+            else
+                id = url.substring(url.lastIndexOf('/')+1, url.length);
+        }
+        url_comprobar = 'https://api.dailymotion.com/video/' + id;
+        // https://api.dailymotion.com/video/x26ezrb
+    }
+    return {'reproductor':reproductor,'id_video':id};
+}
\ No newline at end of file
diff --git a/plugins/ckeditor4/videodetector/icons/icon_black.png b/plugins/ckeditor4/videodetector/icons/icon_black.png
new file mode 100644
index 0000000000000000000000000000000000000000..5f8a0434522173b13fe56846b5cd6ab27f581db4
GIT binary patch
literal 656
zcmV;B0&o3^P)<h;3K|Lk000e1NJLTq000pH000pP1^@s6J8eh$00004XF*Lt006O%
z3;baP0006<Nkl<ZI1!DMPiPZS5XQ5cElnU^^x#1(B-j?QUflfKrbrYo!Gj{+ys4nn
zgV2fxp%6q`u!5ITM9^bEB6x_H7AkJNX#PnNwM8hs^^lVi5dzt)zj<WKnzrb`*YCY=
z=FPmFd8roYvt%+EbzS!cI0It14NcRwSid(6<9Vf0`P_FTpm~C6ngawsAovcN4t}s-
zhg~p=eyF#82H$Qp8oyy>5*)~8vj+5vz`O7lUDtE<di@|62bpLzdKmo**Z|i_zLLpg
z4zO0HlC)Z_Id<p4awrs<sMTsq1j-GR6^liO%7s`gb`t#!#jJL_z3BNhdN9)McE2L5
zMIsT)w(XAR+>5z&grckXPSGQa9(~lwdKF0X?)wwO<MCo5kvQF-h?rj-z9qWjIFrJX
z<Se|&CzM3+4E-`UT$N-pF;5qk>J<IXGAnyYatz)zHgSqcGAgb!z1e&|uX@<i*YF*c
zq3C4n0!N+L|IZ*Uvs5aDd?BiL;cz%8qunCosL%P=Qm)O&r>oWKYrg}1gmc^Fa=9&^
zW8)l4rBcKGAl4fMPT?QxPe81R9>*_J3dl{KfT>QW^AN`+9O`}WE{;pUUPg~*diqmg
zo#0LQF}TPi=0)7kD5BBeNALxTz2r69605q+OT35pmi;t|3h8uu*DWl|I)d+o#DGu1
zVDK8OZ084<%jE`}&E^8CI9-yygTDcd$|v9nFaQc*k}voPE89up3B1w-hi-y%XhS`H
q8@8#wK$AasvH!(#JNXy!ui!rsHw6QO4V|<A0000<MNUMnLSTaAG&3~-

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/videodetector/icons/icon_white.png b/plugins/ckeditor4/videodetector/icons/icon_white.png
new file mode 100644
index 0000000000000000000000000000000000000000..688fd85e818649c0d4a11b5fa65fb478619fc57f
GIT binary patch
literal 983
zcmV;|11S87P)<h;3K|Lk000e1NJLTq001HY001Hg1^@s6I!6n_00004XF*Lt006O%
z3;baP000AyNkl<ZSP9jbU1*O{9LN1fV`Q^s2)U8Tyd*DSZg8PUiW=qpLL?XDVi&j=
z<-+|gxU!OrsFjP+Cbc20xL8Ip%#^ozDQ(!i{C&RL|2#YY^M9UaXaDWSuRfjM`*Z$#
zp68tNEHTPclF8&4Qdh#N6muBIK`!*bQ+NUope~U}^fHc|Fo8)>0Uh8gpGd5Nl3~w;
zCJ8tSU68HxP<RH$4>qAhSOSGp@K?izkhpHcBX|g1AY1wKVKL-`E3a^D;&$oQ`3aMl
z3GLuYGmdRAHmZ|iP!6}imCra<MAfGGNi2d^r^8$9jcJJ<hHBuY(@VE`d2BfeInd-3
z)?rVMEsP0LI}vU>J=^4uEF*Z(DX7QRt2r#8hi=ymr}xFsrX&@^7c031eL`q*7EXHQ
zgL|8_CZ!8Wr@_cyl+2{`k|A64EQ3GhB8*qkn&8lSVZS98(h?kl+*45QxV=p3u7QzX
zD6@h>j5Q{b8e^Yoa(<`s?lLY58hI$nPt}^?NKl5S(s&tLgFu90<x16UtcK|k=^1Wv
z_52yBF$p;+rN&@vv~(X;EAw7>M(2~DO>i)=ub~aJUnsU0u*1e5HJYCiF}}vXJ*rlI
z;=7#Mz9m9`5qocV6W7EeriZVF3u$4T7Lote@dp#pre#EDj*$?({yMLO$#=&YI*~jl
zDI4<+MN8Rfn<9z}Eq@Zd?+>9{({2S8So%=a7Zhw^0_&h9rg)we>mavVwkC4V3Y1y8
zulkL|3Mi#%tw+%kE9Y^b^HA9f+E47_AQ++$H=^bGJm^s5CFJVZ`2&oc2nzA!!aEaT
ztPFx73UM6`Zo;CFaIA}(LtsRU;lL8FN*u>cl(7@+S30)2Z;+k^VE^ETj9L;3!9FC1
zpBFMJ{T=kL0$bLHR+Dke&O+Z4nwW)?UI(1smm}MdsN+C`RiIsVUu1!2fF3)+K8NT4
z7Pad3cO_v4d;lYQp!8khvzet$jhZ|-2ex!$tWHaeGDw^Y?pIwKzO69m7C?^9sQckL
z*rJcE@aKZbM15fCwW@~_XTl$`b%tmLEk>Q7y+WsQEmZoon_(*0(t)v?1+UR|dg;u5
zJe&m`>4qbhC@%22Xj~Fa7Q$7~s_QFyIIqLN!6)t_#6oXPSPe~!@b7@Npv`eMj0Pj`
zQSPUx<u+&&^cL@lxE-08-Xwkd=>H(ST-ZL>xat3o{SP!~*07IWz-Ryf002ovPDHLk
FV1jgV&c6Tv

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/videodetector/icons/videodetector.svg b/plugins/ckeditor4/videodetector/icons/videodetector.svg
new file mode 100644
index 0000000..8f2ef99
--- /dev/null
+++ b/plugins/ckeditor4/videodetector/icons/videodetector.svg
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
+<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+	 viewBox="0 0 16 16" enable-background="new 0 0 16 16" xml:space="preserve">
+<g>
+	<g id="_x33_56._Play">
+		<g>
+			<path fill="#FFFFFF" d="M15,4C12.8,0.2,7.9-1.1,4,1.1C0.2,3.3-1.1,8.2,1.1,12C3.3,15.9,8.2,17.2,12,15C15.9,12.8,17.2,7.9,15,4z
+				 M11.2,13.6c-3.1,1.8-7,0.7-8.7-2.3c-1.8-3.1-0.7-7,2.3-8.7c3.1-1.8,7-0.7,8.7,2.3C15.3,7.9,14.3,11.8,11.2,13.6z M10.9,7.7
+				L6.7,5.3C6.3,5,6,5.2,6,5.7l0,4.8c0,0.4,0.3,0.6,0.7,0.4l4.2-2.4C11.3,8.3,11.3,7.9,10.9,7.7z"/>
+		</g>
+	</g>
+</g>
+</svg>
diff --git a/plugins/ckeditor4/videodetector/plugin.js b/plugins/ckeditor4/videodetector/plugin.js
new file mode 100644
index 0000000..16bfa6b
--- /dev/null
+++ b/plugins/ckeditor4/videodetector/plugin.js
@@ -0,0 +1,31 @@
+/*
+*   Plugin developed by Netbroad, C.B.
+*
+*   LICENCE: GPL, LGPL, MPL
+*   NON-COMMERCIAL PLUGIN.
+*
+*   Website: netbroad.eu
+*   Twitter: @netbroadcb
+*   Facebook: Netbroad
+*   LinkedIn: Netbroad
+*
+*/
+
+CKEDITOR.plugins.add( 'videodetector', {
+    icons: 'videodetector',
+    init: function( editor ) {
+
+        var pluginDirectory = this.path;
+        editor.addContentsCss(pluginDirectory + '/videodetector.css');
+
+        editor.addCommand('videodetector', new CKEDITOR.dialogCommand('videoDialog'));
+        editor.ui.addButton( 'VideoDetector', {
+            label: 'Insert a Youtube, Vimeo or Dailymotion video',
+            command: 'videodetector',
+            icon: CKEDITOR.plugins.getPath('videodetector') + '/icons/icon_black.png'
+        });
+
+        CKEDITOR.dialog.add('videoDialog', this.path + 'dialogs/videoDialog.js');
+
+    }
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/videodetector/videodetector.css b/plugins/ckeditor4/videodetector/videodetector.css
new file mode 100644
index 0000000..fd7c42c
--- /dev/null
+++ b/plugins/ckeditor4/videodetector/videodetector.css
@@ -0,0 +1,48 @@
+.videodetector {
+    position      : relative;
+    width         : 100%;
+    height        : 0;
+    padding-bottom: 60%;
+}
+
+.videodetector iframe {
+    position: absolute;
+    top     : 0;
+    left    : 0;
+    width   : 100%;
+    height  : 100%;
+}
+
+.remove-videodetector{
+    position: absolute;
+    top: 15px;
+    left: 15px;
+    z-index: 999;
+    cursor: pointer!important;
+    display: none;
+    outline: none;
+    padding: 10px 20px;
+    appearance: none;
+    -webkit-appearance: none;
+    box-shadow: 0px 2px 6px rgba(0,0,0,0.2);
+    border-radius: 3px;
+    border: none;
+    background-color: #e74c3c;
+    color: #fff;
+    font-weight: bold;
+    font-size: 12px;
+    text-transform: uppercase;
+    -webkit-transition: 0.2s;
+    -moz-transition: 0.2s;
+    -ms-transition: 0.2s;
+    -o-transition: 0.2s;
+    transition: 0.2s;
+}
+
+.remove-videodetector:hover{
+    background-color: #c0392b;
+}
+
+.videodetector:hover .remove-videodetector{
+    display: block;
+}
\ No newline at end of file
diff --git a/plugins/ckeditor4/wordcount/README.md b/plugins/ckeditor4/wordcount/README.md
new file mode 100644
index 0000000..428f2f0
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/README.md
@@ -0,0 +1,92 @@
+CKEditor-WordCount-Plugin
+=========================
+
+WordCount Plugin for CKEditor v4 (or above) that counts the words/characters an shows the word count and/or char count in the footer of the editor.
+
+![Screenshot]
+(http://www.watchersnet.de/Portals/0/screenshots/dnn/CKEditorWordCountPlugin.png)
+
+####Demo
+
+http://w8tcha.github.com/CKEditor-WordCount-Plugin/
+
+DISCLAIMER: This is a forked Version, i can not find the original Author anymore if anyone knows the original Author please contact me and i can include the Author in the Copyright Notices. 
+
+####License
+
+Licensed under the terms of the MIT License.
+
+####Installation
+
+ If building a new editor using the CKBuilder from http://ckeditor.com/, there is no need to follow numbers steps below. If adding the Word Count & Char Count plugin to an already established CKEditor, follow the numbered steps below.
+
+1.	Download the Word Count &  Char Count plugin from http://ckeditor.com/addon/wordcount or https://github.com/w8tcha/CKEditor-WordCount-Plugin. This will download a folder named **wordcount_*version*.zip** or **CKEditor-WordCount-Plugin-master.zip** to your Downloads folder.
+2.	Download the Notification plugin from http://ckeditor.com/addon/notification. This will download a folder named **notification_*version*.zip** to your Downloads folder.
+3.	Extract the .zip folders for both the Word Count & Char Count and Notification plugin. After extraction, you should have a folder named **wordcount** and a folder named **notification**.
+4.	Move the wordcount folder to /web/server/root/ckeditor/plugins/.  Move the notification folder to /web/server/root/ckeditor/plugins/.
+5.	Add the following line of text to the config.js file, which is located at /web/server/root/ckeditor/.
+
+```javascript
+config.extraPlugins = 'wordcount,notification'; 
+```
+
+Below is an example of what your config.js file might look like after adding config.extraPlugins = 'wordcount,notification';
+
+```javascript
+CKEDITOR.editorConfig = function( config ) {
+  config.extraPlugins = 'wordcount,notification';
+  config.toolbar [
+  et cetera . . .
+  ];
+};
+```
+
+There now should be text in the bottom right-hand corner of your CKEditor which counts the number of Paragraphs and number of Words in your CKEditor.
+
+![plugin example](http://www.trojanbot.com/uploads/ckeditor_paragraph_words.png)
+
+To modify the behavior of the Word Count & Char Count text at the bottom right-hand corner of your CKEditor, add the following text to your config.js file located at /web/server/root/ckeditor/config.js.
+
+````js
+config.wordcount = {
+
+    // Whether or not you want to show the Paragraphs Count
+    showParagraphs: true,
+
+    // Whether or not you want to show the Word Count
+    showWordCount: true,
+
+    // Whether or not you want to show the Char Count
+    showCharCount: false,
+
+    // Whether or not you want to count Spaces as Chars
+    countSpacesAsChars: false,
+
+    // Whether or not to include Html chars in the Char Count
+    countHTML: false,
+    
+    // Maximum allowed Word Count, -1 is default for unlimited
+    maxWordCount: -1,
+
+    // Maximum allowed Char Count, -1 is default for unlimited
+    maxCharCount: -1,
+
+    // How long to show the 'paste' warning, 0 is default for not auto-closing the notification
+    pasteWarningDuration: 0,
+    
+
+    // Add filter to add or remove element before counting (see CKEDITOR.htmlParser.filter), Default value : null (no filter)
+    filter: new CKEDITOR.htmlParser.filter({
+        elements: {
+            div: function( element ) {
+                if(element.attributes.class == 'mediaembed') {
+                    return false;
+                }
+            }
+        }
+    })
+};
+````
+
+**Note:** If you plan to change some of the JavaScript, you probably will not want to use the CKBuilder, because this will place the JavaScript of the Word Count & Char Count plugin in the ckeditor.js file located at /web/server/root/ckeditor/ckeditor.js. The JavaScript for the Word Count & Char Count plugin in the ckeditor.js file is different than the JavaScript used when manually adding the Word Count & Char Count plugin.  When manually adding the Word Count & Char Count plugin, the JavaScript will be in the plugin.js file located at 
+
diff --git a/plugins/ckeditor4/wordcount/css/wordcount.css b/plugins/ckeditor4/wordcount/css/wordcount.css
new file mode 100644
index 0000000..36f86d4
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/css/wordcount.css
@@ -0,0 +1,3 @@
+.cke_wordcount {display:block;float:right;margin-top:-2px;margin-right:3px;color:black;}
+
+.cke_wordcountLimitReached {color:red! important}
\ No newline at end of file
diff --git a/plugins/ckeditor4/wordcount/lang/ar.js b/plugins/ckeditor4/wordcount/lang/ar.js
new file mode 100644
index 0000000..f22d815
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/ar.js
@@ -0,0 +1,11 @@
+// Arabic Translation by Amine BENHAMIDA
+
+CKEDITOR.plugins.setLang('wordcount', 'ar', {
+    WordCount: 'كلمات:',
+    CharCount: 'حروف:',
+    CharCountWithHTML: 'حروف مع إتش تي إم إل',
+    Paragraphs: 'فقرات',
+    pasteWarning: 'لا يمكن اضافة هذا المحتوى لانه تجاوز الحد الاقصى',
+    Selected: 'محدد: ',
+    title: 'احصائيات'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/ca.js b/plugins/ckeditor4/wordcount/lang/ca.js
new file mode 100644
index 0000000..e47365b
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/ca.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'ca', {
+    WordCount: 'Paraules:',
+    CharCount: 'Caràcters:',
+    CharCountWithHTML: 'Caràcters (including HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Estadístiques'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/da.js b/plugins/ckeditor4/wordcount/lang/da.js
new file mode 100644
index 0000000..73a3502
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/da.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'da', {
+    WordCount: 'Ord:',
+    CharCount: 'Karakterer:',
+    CharCountWithHTML: 'Karakterer (med HTML):',
+    Paragraphs: 'Afsnit:',
+    pasteWarning: 'Indholdet kan ikke indsættes da det er længere end den tilladte grænse.',
+    Selected: 'Markeret: ',
+    title: 'Statistik'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/de.js b/plugins/ckeditor4/wordcount/lang/de.js
new file mode 100644
index 0000000..e3d3319
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/de.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'de', {
+    WordCount: 'Wörter:',
+    CharCount: 'Zeichen:',
+    CharCountWithHTML: 'Zeichen (inkl. HTML):',
+    Paragraphs: 'Absätze:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Statistik'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/el.js b/plugins/ckeditor4/wordcount/lang/el.js
new file mode 100644
index 0000000..3140df8
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/el.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'el', {
+    WordCount: 'Λέξεις:',
+    CharCount: 'Χαρακτήρες:',
+    CharCountWithHTML: 'Χαρακτήρες (μαζί με HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Στατιστικά'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/en.js b/plugins/ckeditor4/wordcount/lang/en.js
new file mode 100644
index 0000000..dfc7f01
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/en.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'en', {
+    WordCount: 'Words:',
+    CharCount: 'Characters:',
+    CharCountWithHTML: 'Characters (with HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Statistics'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/es.js b/plugins/ckeditor4/wordcount/lang/es.js
new file mode 100644
index 0000000..e7f4864
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/es.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'es', {
+    WordCount: 'Palabras:',
+    CharCount: 'Carácteres:',
+    CharCountWithHTML: 'Carácteres (con HTML):',
+    Paragraphs: 'Párrafos:',
+    pasteWarning: 'El contenido no se puede pegar, ya que se encuentra fuera del límite permitido',
+    Selected: 'Seleccionado: ',
+    title: 'Estadísticas'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/eu.js b/plugins/ckeditor4/wordcount/lang/eu.js
new file mode 100644
index 0000000..9eefa74
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/eu.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'eu', {
+    WordCount: 'Hitzak:',
+    CharCount: 'Karaktereak:',
+    CharCountWithHTML: 'Karaktereak (HTMLarekin):',
+    Paragraphs: 'Paragrafoak:',
+    pasteWarning: 'Ezin da edukia itsatsi, onartutako muga gainditu duelako',
+    Selected: 'Hautatuta: ',
+    title: 'Estatistikak'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/fa.js b/plugins/ckeditor4/wordcount/lang/fa.js
new file mode 100644
index 0000000..2c646a9
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/fa.js
@@ -0,0 +1,12 @@
+/*
+Its The Persian (Farsi) Language Translate For Iranian By "Mohsen Esmaili"
+*/
+CKEDITOR.plugins.setLang('wordcount', 'fa', {
+    WordCount: 'لغت:',
+    CharCount: 'کاراکتر:',
+    CharCountWithHTML: 'کاراکترها (با HTML):',
+    Paragraphs: 'پاراگراف:',
+    pasteWarning: 'محتوای مورد نظر را نمی توان چسباند. زیرا این بیشتر از حد مجاز است.',
+    Selected: 'انتخاب شده: ',
+    title: 'آمار'
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/wordcount/lang/fi.js b/plugins/ckeditor4/wordcount/lang/fi.js
new file mode 100644
index 0000000..a905900
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/fi.js
@@ -0,0 +1,14 @@
+/**
+ * Finnish localisation.
+ *
+ * @author Joel Posti / Response200.pro
+ */
+CKEDITOR.plugins.setLang('wordcount', 'fi', {
+    WordCount: 'Sanoja:',
+    CharCount: 'Merkkejä:',
+    CharCountWithHTML: 'Merkkejä (ml. HTML):',
+    Paragraphs: 'Kappaleita:',
+    pasteWarning: 'Sisältöä ei voida liittää, koska se ylittää sallitun rajan.',
+    Selected: 'Valittuna: ',
+    title: 'Statistiikkaa'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/fr.js b/plugins/ckeditor4/wordcount/lang/fr.js
new file mode 100644
index 0000000..250935f
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/fr.js
@@ -0,0 +1,11 @@
+// French Translation by Nicolas M. et Pierre-Luc Auclair
+
+CKEDITOR.plugins.setLang('wordcount', 'fr', {
+    WordCount: 'Mots :',
+    CharCount: 'Caractères :',
+    CharCountWithHTML: 'Caractères (incluant HTML) :',
+    Paragraphs: 'Paragraphes :',
+    pasteWarning: 'Le contenu ne peut pas être collé car il dépasse la limite autorisée',
+    Selected: 'Sélectionné :',
+    title: 'Statistiques'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/he.js b/plugins/ckeditor4/wordcount/lang/he.js
new file mode 100644
index 0000000..83ebafd
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/he.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'he', {
+    WordCount: 'מילים:',
+    CharCount: 'תווים:',
+    CharCountWithHTML: 'תווים (כולל HTML):',
+    Paragraphs: 'פסקאות:',
+    pasteWarning: 'לא ניתן להדביק תוכן בשל עודף תווים',
+    Selected: 'נבחר: ',
+    title: 'סטטיסטיקות'
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/wordcount/lang/hr.js b/plugins/ckeditor4/wordcount/lang/hr.js
new file mode 100644
index 0000000..adeae1d
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/hr.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'hr', {
+    WordCount: 'Riječi:',
+    CharCount: 'Znakova:',
+    CharCountWithHTML: 'Znakova (uključujući HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Statistika'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/hu.js b/plugins/ckeditor4/wordcount/lang/hu.js
new file mode 100644
index 0000000..715281a
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/hu.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'hu', {
+    WordCount: 'Szavak:',
+    CharCount: 'Karakaterek:',
+    CharCountWithHTML: 'Karakterek (HTML tagekkel):',
+    Paragraphs: 'Bekezdések:',
+    pasteWarning: 'A szöveget nem lehet beilleszteni, mert a megadott limit felett van',
+    Selected: 'Kiválasztva: ',
+    title: 'Statisztika'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/it.js b/plugins/ckeditor4/wordcount/lang/it.js
new file mode 100644
index 0000000..c6433d1
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/it.js
@@ -0,0 +1,14 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+@author translation: Davide Montorio
+*/
+CKEDITOR.plugins.setLang('wordcount', 'it', {
+    WordCount: 'Parole:',
+    CharCount: 'Caratteri:',
+    CharCountWithHTML: 'Caratteri (HTML incluso):',
+    Paragraphs: 'Paragrafi:',
+    pasteWarning: 'Il contenuto non può essere incollato poiché supera il limite massimo di caratteri disponibili',
+    Selected: 'Selezionato: ',
+    title: 'Statistiche'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/ja.js b/plugins/ckeditor4/wordcount/lang/ja.js
new file mode 100644
index 0000000..60576b4
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/ja.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'ja', {
+    WordCount: '単語数:',
+    CharCount: '文字数:',
+    CharCountWithHTML: '文字数 (with HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'ワードカウント'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/nl.js b/plugins/ckeditor4/wordcount/lang/nl.js
new file mode 100644
index 0000000..e8fb501
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/nl.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'nl', {
+    WordCount: 'Woorden:',
+    CharCount: 'Tekens:',
+    CharCountWithHTML: 'Tekens (inclusief HTML):',
+    Paragraphs: 'Paragraven:',
+    pasteWarning: 'De tekst kan niet worden geplakt omdat de limiet is overschreden',
+    Selected: 'Selected: ',
+    title: 'Statistieken'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/no.js b/plugins/ckeditor4/wordcount/lang/no.js
new file mode 100644
index 0000000..16dfae5
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/no.js
@@ -0,0 +1,10 @@
+// Norwegian translation by Vegard S.
+CKEDITOR.plugins.setLang('wordcount', 'no', {
+    WordCount: 'Ord:',
+    CharCount: 'Tegn:',
+    CharCountWithHTML: 'Tegn (including HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Statistikk'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/pl.js b/plugins/ckeditor4/wordcount/lang/pl.js
new file mode 100644
index 0000000..7c522dc
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/pl.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'pl', {
+    WordCount: 'Słów:',
+    CharCount: 'Znaków:',
+    CharCountWithHTML: 'Znaków (wraz z kodem HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Zawartość nie może zostać wklejona, ponieważ przekracza dozwolony limit',
+    Selected: 'Selected: ',
+    title: 'Statystyka'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/pt-br.js b/plugins/ckeditor4/wordcount/lang/pt-br.js
new file mode 100644
index 0000000..6c45f7f
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/pt-br.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'pt-br', {
+    WordCount: 'Contagem de palavras:',
+    CharCount: 'Contagem de carateres:',
+    CharCountWithHTML: 'Carateres (incluindo HTML):',
+    Paragraphs: 'Parágrafos:',
+    pasteWarning: 'Conteúdo não pode ser colado porque ultrapassa o limite permitido',
+    Selected: 'Selecionado: ',
+    title: 'Estatísticas'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/pt.js b/plugins/ckeditor4/wordcount/lang/pt.js
new file mode 100644
index 0000000..ddeacb7
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/pt.js
@@ -0,0 +1,9 @@
+CKEDITOR.plugins.setLang('wordcount', 'pt', {
+    WordCount: 'Palavras:',
+    CharCount: 'Caracteres:',
+    CharCountWithHTML: 'Carateres (incluindo HTML):',
+    Paragraphs: 'Parágrafos:',
+    pasteWarning: 'O conteúdo não pode ser colado porque ultrapassa o limite permitido',
+    Selected: 'Selecionado: ',
+    title: 'Estatísticas'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/ru.js b/plugins/ckeditor4/wordcount/lang/ru.js
new file mode 100644
index 0000000..54972aa
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/ru.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'ru', {
+    WordCount: 'Слов:',
+    CharCount: 'Символов:',
+    CharCountWithHTML: ' (включая HTML разметку):',
+    Paragraphs: 'Параграфов:',
+    pasteWarning: 'Контент не может быть вставлен, т.к. привышает допустимый лимит',
+    Selected: 'Выделено: ',
+    title: 'Статистика'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/sk.js b/plugins/ckeditor4/wordcount/lang/sk.js
new file mode 100644
index 0000000..6db2670
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/sk.js
@@ -0,0 +1,14 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'sk', {
+      WordCount: 'Slov:',
+      CharCount: 'Znakov:',
+      CharCountWithHTML: 'Znakov (vrátane HTML):',
+      Paragraphs: 'Odstavcov:',
+      pasteWarning: 'Obsah sa nedá prilepiť.',
+      Selected: 'Výber: ',
+      title: 'Å tatistika'
+});
+
diff --git a/plugins/ckeditor4/wordcount/lang/sv.js b/plugins/ckeditor4/wordcount/lang/sv.js
new file mode 100644
index 0000000..ba12a75
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/sv.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'sv', {
+    WordCount: 'Ord:',
+    CharCount: 'Tecken:',
+    CharCountWithHTML: 'Tecken (inklusive HTML):',
+    Paragraphs: 'Paragraphs:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Statistik'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/tr.js b/plugins/ckeditor4/wordcount/lang/tr.js
new file mode 100644
index 0000000..ea08c87
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/tr.js
@@ -0,0 +1,13 @@
+/*
+Mesut ÇAKIR
+mesut.cakir@hotmail.com.tr
+*/
+CKEDITOR.plugins.setLang('wordcount', 'tr', {
+    WordCount: 'Kelime:',
+    CharCount: 'Karakter:',
+    CharCountWithHTML: 'Karakter (HTML dahil):',
+    Paragraphs: 'Paragraf:',
+    pasteWarning: 'Content can not be pasted because it is above the allowed limit',
+    Selected: 'Selected: ',
+    title: 'Ä°statistik'
+});
diff --git a/plugins/ckeditor4/wordcount/lang/zh-cn.js b/plugins/ckeditor4/wordcount/lang/zh-cn.js
new file mode 100644
index 0000000..853e3c6
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/lang/zh-cn.js
@@ -0,0 +1,13 @@
+/*
+Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.html or http://ckeditor.com/license
+*/
+CKEDITOR.plugins.setLang('wordcount', 'zh-cn', {
+    WordCount: '词数:',
+    CharCount: '字符:',
+    CharCountWithHTML: '字符 (含HTML)',
+    Paragraphs: '段落:',
+    pasteWarning: '由于上限允许,内容不能粘贴',
+    Selected: '已选择: ',
+    title: '统计'
+});
diff --git a/plugins/ckeditor4/wordcount/plugin.js b/plugins/ckeditor4/wordcount/plugin.js
new file mode 100644
index 0000000..3296ea0
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/plugin.js
@@ -0,0 +1,430 @@
+/**
+ * @license Copyright (c) CKSource - Frederico Knabben. All rights reserved.
+ * For licensing, see LICENSE.html or http://ckeditor.com/license
+ */
+
+CKEDITOR.plugins.add("wordcount", {
+    lang: "ar,ca,da,de,el,en,es,eu,fa,fi,fr,he,hr,hu,it,ja,nl,no,pl,pt,pt-br,ru,sk,sv,tr,zh-cn", // %REMOVE_LINE_CORE%
+    version: 1.16,
+    requires: 'htmlwriter,notification,undo',
+    bbcodePluginLoaded: false,
+    onLoad: function(editor) {
+        CKEDITOR.document.appendStyleSheet(this.path + "css/wordcount.css");
+    },
+    init: function (editor) {
+        var defaultFormat = "",
+            intervalId,
+            lastWordCount = -1,
+            lastCharCount = -1,
+            limitReachedNotified = false,
+            limitRestoredNotified = false,
+            snapShot = editor.getSnapshot(),
+            notification = null;
+
+
+        var dispatchEvent = function (type, currentLength, maxLength) {
+            if (typeof document.dispatchEvent == 'undefined') {
+                return;
+            }
+
+            type = 'ckeditor.wordcount.' + type;
+
+            var cEvent;
+            var eventInitDict = {
+                bubbles: false,
+                cancelable: true,
+                detail: {
+                    currentLength: currentLength,
+                    maxLength: maxLength
+                }
+            };
+
+            try {
+                cEvent = new CustomEvent(type, eventInitDict);
+            } catch (o_O) {
+                cEvent = document.createEvent('CustomEvent');
+                cEvent.initCustomEvent(
+                    type,
+                    eventInitDict.bubbles,
+                    eventInitDict.cancelable,
+                    eventInitDict.detail
+                );
+            }
+
+            document.dispatchEvent(cEvent);
+        };
+
+        // Default Config
+        var defaultConfig = {
+            showParagraphs: true,
+            showWordCount: true,
+            showCharCount: false,
+            countSpacesAsChars: false,
+            countHTML: false,
+            hardLimit: true,
+
+            //MAXLENGTH Properties
+            maxWordCount: -1,
+            maxCharCount: -1,
+
+            // Filter
+            filter: null,
+
+            // How long to show the 'paste' warning
+            pasteWarningDuration: 0,
+
+            //DisAllowed functions
+            wordCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+                dispatchEvent('wordCountGreaterThanMaxLengthEvent', currentLength, maxLength);
+            },
+            charCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+                dispatchEvent('charCountGreaterThanMaxLengthEvent', currentLength, maxLength);
+            },
+
+            //Allowed Functions
+            wordCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+                dispatchEvent('wordCountLessThanMaxLengthEvent', currentLength, maxLength);
+            },
+            charCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+                dispatchEvent('charCountLessThanMaxLengthEvent', currentLength, maxLength);
+            }
+        };
+
+        // Get Config & Lang
+        var config = CKEDITOR.tools.extend(defaultConfig, editor.config.wordcount || {}, true);
+
+        if (config.showParagraphs) {
+            defaultFormat += editor.lang.wordcount.Paragraphs + " %paragraphs%";
+        }
+
+        if (config.showParagraphs && (config.showWordCount || config.showCharCount)) {
+            defaultFormat += ", ";
+        }
+
+        if (config.showWordCount) {
+            defaultFormat += editor.lang.wordcount.WordCount + " %wordCount%";
+            if (config.maxWordCount > -1) {
+                defaultFormat += "/" + config.maxWordCount;
+            }
+        }
+
+        if (config.showCharCount && config.showWordCount) {
+            defaultFormat += ", ";
+        }
+
+        if (config.showCharCount) {
+            var charLabel = editor.lang.wordcount[config.countHTML ? "CharCountWithHTML" : "CharCount"];
+
+            defaultFormat += charLabel + " %charCount%";
+            if (config.maxCharCount > -1) {
+                defaultFormat += "/" + config.maxCharCount;
+            }
+        }
+
+        var format = defaultFormat;
+
+        bbcodePluginLoaded = typeof editor.plugins.bbcode != 'undefined';
+
+       function counterId(editorInstance) {
+            return "cke_wordcount_" + editorInstance.name;
+        }
+
+        function counterElement(editorInstance) {
+            return document.getElementById(counterId(editorInstance));
+        }
+
+        function strip(html) {
+            if (bbcodePluginLoaded) {
+                // stripping out BBCode tags [...][/...]
+                return html.replace(/\[.*?\]/gi, '');
+            }
+
+            var tmp = document.createElement("div");
+
+            // Add filter before strip
+            html = filter(html);
+
+            tmp.innerHTML = html;
+
+            if (tmp.textContent == "" && typeof tmp.innerText == "undefined") {
+                return "";
+            }
+
+            return tmp.textContent || tmp.innerText;
+        }
+
+        /**
+         * Implement filter to add or remove before counting
+         * @param html
+         * @returns string
+         */
+        function filter(html) {
+            if(config.filter instanceof CKEDITOR.htmlParser.filter) {
+                var fragment = CKEDITOR.htmlParser.fragment.fromHtml(html),
+                    writer = new CKEDITOR.htmlParser.basicWriter();
+                config.filter.applyTo( fragment );
+                fragment.writeHtml( writer );
+                return writer.getHtml();
+            }
+            return html;
+        }
+
+        function countCharacters(text, editorInstance) {
+            if (config.countHTML) {
+                return (filter(text).length);
+            } else {
+                var normalizedText;
+
+                // strip body tags
+                if (editor.config.fullPage) {
+                    var i = text.search(new RegExp("<body>", "i"));
+                    if (i != -1) {
+                        var j = text.search(new RegExp("</body>", "i"));
+                        text = text.substring(i + 6, j);
+                    }
+
+                }
+
+                normalizedText = text;
+
+                if (!config.countSpacesAsChars) {
+                    normalizedText = text.
+                        replace(/\s/g, "").
+                        replace(/&nbsp;/g, "");
+                }
+
+                normalizedText = normalizedText.
+                    replace(/(\r\n|\n|\r)/gm, "").
+                    replace(/&nbsp;/gi, " ");
+
+                normalizedText = strip(normalizedText).replace(/^([\t\r\n]*)$/, "");
+
+                return(normalizedText.length);
+            }
+        }
+
+        function countParagraphs(text) {
+            return (text.replace(/&nbsp;/g, " ").replace(/(<([^>]+)>)/ig, "").replace(/^\s*$[\n\r]{1,}/gm, "++").split("++").length);
+        }
+
+        function countWords(text) {
+            var normalizedText = text.
+                replace(/(\r\n|\n|\r)/gm, " ").
+                replace(/^\s+|\s+$/g, "").
+                replace("&nbsp;", " ");
+
+            normalizedText = strip(normalizedText);
+
+            var words = normalizedText.split(/\s+/);
+
+            for (var wordIndex = words.length - 1; wordIndex >= 0; wordIndex--) {
+                if (words[wordIndex].match(/^([\s\t\r\n]*)$/)) {
+                    words.splice(wordIndex, 1);
+                }
+            }
+
+            return (words.length);
+        }
+
+        function limitReached(editorInstance, notify) {
+            limitReachedNotified = true;
+            limitRestoredNotified = false;
+
+            if (config.hardLimit) {
+                editorInstance.loadSnapshot(snapShot);
+                // lock editor
+                editorInstance.config.Locked = 1;
+            }
+
+            if (!notify) {
+                counterElement(editorInstance).className = "cke_path_item cke_wordcountLimitReached";
+                editorInstance.fire("limitReached", {}, editor);
+            }
+        }
+
+        function limitRestored(editorInstance) {
+            limitRestoredNotified = true;
+            limitReachedNotified = false;
+            editorInstance.config.Locked = 0;
+            snapShot = editor.getSnapshot();
+
+            counterElement(editorInstance).className = "cke_path_item";
+        }
+
+        function updateCounter(editorInstance) {
+            var paragraphs = 0,
+                wordCount = 0,
+                charCount = 0,
+                text;
+
+            if (text = editorInstance.getData()) {
+                if (config.showCharCount) {
+                    charCount = countCharacters(text, editorInstance);
+                }
+
+                if (config.showParagraphs) {
+                    paragraphs = countParagraphs(text);
+                }
+
+                if (config.showWordCount) {
+                    wordCount = countWords(text);
+                }
+            }
+
+            var html = format.replace("%wordCount%", wordCount).replace("%charCount%", charCount).replace("%paragraphs%", paragraphs);
+
+            (editorInstance.config.wordcount || (editorInstance.config.wordcount = {})).wordCount = wordCount;
+            (editorInstance.config.wordcount || (editorInstance.config.wordcount = {})).charCount = charCount;
+
+            if (CKEDITOR.env.gecko) {
+                counterElement(editorInstance).innerHTML = html;
+            } else {
+                counterElement(editorInstance).innerText = html;
+            }
+
+            if (charCount == lastCharCount && wordCount == lastWordCount) {
+                return true;
+            }
+
+            //If the limit is already over, allow the deletion of characters/words. Otherwise,
+            //the user would have to delete at one go the number of offending characters
+            var deltaWord = wordCount - lastWordCount;
+            var deltaChar = charCount - lastCharCount;
+
+            lastWordCount = wordCount;
+            lastCharCount = charCount;
+
+            if (lastWordCount == -1) {
+                lastWordCount = wordCount;
+            }
+            if (lastCharCount == -1) {
+                lastCharCount = charCount;
+            }
+
+            // Check for word limit and/or char limit
+            if ((config.maxWordCount > -1 && wordCount > config.maxWordCount && deltaWord > 0) ||
+                (config.maxCharCount > -1 && charCount > config.maxCharCount && deltaChar > 0)) {
+
+                limitReached(editorInstance, limitReachedNotified);
+            } else if ((config.maxWordCount == -1 || wordCount < config.maxWordCount) &&
+            (config.maxCharCount == -1 || charCount < config.maxCharCount)) {
+
+                limitRestored(editorInstance);
+            } else {
+                snapShot = editorInstance.getSnapshot();
+            }
+
+            // Fire Custom Events
+            if (config.charCountGreaterThanMaxLengthEvent && config.charCountLessThanMaxLengthEvent) {
+                if (charCount > config.maxCharCount && config.maxCharCount > -1) {
+                    config.charCountGreaterThanMaxLengthEvent(charCount, config.maxCharCount);
+                } else {
+                    config.charCountLessThanMaxLengthEvent(charCount, config.maxCharCount);
+                }
+            }
+
+            if (config.wordCountGreaterThanMaxLengthEvent && config.wordCountLessThanMaxLengthEvent) {
+                if (wordCount > config.maxWordCount && config.maxWordCount > -1) {
+                    config.wordCountGreaterThanMaxLengthEvent(wordCount, config.maxWordCount);
+
+                } else {
+                    config.wordCountLessThanMaxLengthEvent(wordCount, config.maxWordCount);
+                }
+            }
+
+            return true;
+        }
+
+        editor.on("key", function (event) {
+            if (editor.mode === "source") {
+                updateCounter(event.editor);
+            }
+        }, editor, null, 100);
+
+        editor.on("change", function (event) {
+            updateCounter(event.editor);
+        }, editor, null, 100);
+
+        editor.on("uiSpace", function (event) {
+            if (editor.elementMode === CKEDITOR.ELEMENT_MODE_INLINE) {
+                if (event.data.space == "top") {
+                    event.data.html += "<div class=\"cke_wordcount\" style=\"\"" +
+                        " title=\"" +
+                        editor.lang.wordcount.title +
+                        "\"" +
+                        "><span id=\"" +
+                        counterId(event.editor) +
+                        "\" class=\"cke_path_item\">&nbsp;</span></div>";
+                }
+            } else {
+                if (event.data.space == "bottom") {
+                    event.data.html += "<div class=\"cke_wordcount\" style=\"\"" +
+                        " title=\"" +
+                        editor.lang.wordcount.title +
+                        "\"" +
+                        "><span id=\"" +
+                        counterId(event.editor) +
+                        "\" class=\"cke_path_item\">&nbsp;</span></div>";
+                }
+            }
+
+        }, editor, null, 100);
+
+        editor.on("dataReady", function (event) {
+            updateCounter(event.editor);
+        }, editor, null, 100);
+
+        editor.on("paste", function(event) {
+            if (config.maxWordCount > 0 || config.maxCharCount > 0) {
+
+                // Check if pasted content is above the limits
+                var wordCount = -1,
+                    charCount = -1,
+                    text = event.editor.getData() + event.data.dataValue;
+
+
+                if (config.showCharCount) {
+                    charCount = countCharacters(text, event.editor);
+                }
+
+                if (config.showWordCount) {
+                    wordCount = countWords(text);
+                }
+
+
+                // Instantiate the notification when needed and only have one instance
+                if(notification === null) {
+                    notification = new CKEDITOR.plugins.notification(event.editor, {
+                        message: event.editor.lang.wordcount.pasteWarning,
+                        type: 'warning',
+                        duration: config.pasteWarningDuration
+                    });
+                }
+
+                if (config.maxCharCount > 0 && charCount > config.maxCharCount && config.hardLimit) {
+                    if(!notification.isVisible()) {
+                        notification.show();
+                    }
+                    event.cancel();
+                }
+
+                if (config.maxWordCount > 0 && wordCount > config.maxWordCount && config.hardLimit) {
+                    if(!notification.isVisible()) {
+                        notification.show();
+                    }
+                    event.cancel();
+                }
+            }
+        }, editor, null, 100);
+
+        editor.on("afterPaste", function (event) {
+            updateCounter(event.editor);
+        }, editor, null, 100);
+
+        editor.on("blur", function () {
+            if (intervalId) {
+                window.clearInterval(intervalId);
+            }
+        }, editor, null, 300);
+    }
+});
diff --git a/plugins/ckeditor4/wordcount/samples/wordcount.html b/plugins/ckeditor4/wordcount/samples/wordcount.html
new file mode 100644
index 0000000..2f11345
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/samples/wordcount.html
@@ -0,0 +1,61 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+-->
+<html>
+<head>
+	<meta charset="utf-8">
+        <title>WordCount &mdash; CKEditor Sample</title>
+        <script src="../../../ckeditor.js"></script>
+	<link href="../../../samples/sample.css" rel="stylesheet">
+	<meta name="ckeditor-sample-name" content="WordCount plugin">
+	<meta name="ckeditor-sample-group" content="Plugins">
+    <meta name="ckeditor-sample-description" content="Counts the words an shows the word count in the footer of the editor.">
+	<meta name="ckeditor-sample-isnew" content="1">
+	<script>
+		CKEDITOR.disableAutoInline = true;
+	</script>
+</head>
+<body>
+	<h1 class="samples">
+		<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; WordCount Plugin
+	</h1>
+
+	<div class="description">
+		<p>
+            WordCount Plugin for CKEditor that counts the words an shows the word count in the footer of the editor.</a>.
+		</p>
+		<p>
+			In order to use the new plugin, include it in the <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code> configuration setting.
+		</p>
+<pre class="samples">
+CKEDITOR.replace( '<em>textarea_id</em>', {
+	<strong>extraPlugins: 'wordcount'</strong>
+} );
+</pre>
+	</div>
+
+<textarea cols="80" id="editor1" name="editor1" rows="10">
+    This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.
+</textarea>
+    <script>
+
+	    CKEDITOR.replace('editor1', {
+	        extraPlugins: 'wordcount'
+	    });
+
+	</script>
+
+	<div id="footer">
+		<hr>
+		<p>
+			CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2015, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
diff --git a/plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html b/plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html
new file mode 100644
index 0000000..04c00c4
--- /dev/null
+++ b/plugins/ckeditor4/wordcount/samples/wordcountWithMaxCount.html
@@ -0,0 +1,110 @@
+<!DOCTYPE html>
+<!--
+Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
+For licensing, see LICENSE.md or http://ckeditor.com/license
+-->
+<html>
+<head>
+	<meta charset="utf-8">
+        <title>WordCount &mdash; CKEditor Sample</title>
+        <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
+        <script src="../../../ckeditor.js"></script>
+	<link href="../../../samples/sample.css" rel="stylesheet">
+	<meta name="ckeditor-sample-name" content="WordCount plugin">
+	<meta name="ckeditor-sample-group" content="Plugins">
+    <meta name="ckeditor-sample-description" content="Counts the words an shows the word count in the footer of the editor.">
+	<meta name="ckeditor-sample-isnew" content="1">
+	<script>
+		CKEDITOR.disableAutoInline = true;
+	</script>
+</head>
+<body>
+	<h1 class="samples">
+		<a href="../../../samples/index.html">CKEditor Samples</a> &raquo; WordCount Plugin
+	</h1>
+
+	<div class="description">
+		<p>
+            WordCount Plugin for CKEditor that counts the words an shows the word count in the footer of the editor.</a>.
+		</p>
+		<p>
+			In order to use the new plugin, include it in the <code><a class="samples" href="http://docs.ckeditor.com/#!/api/CKEDITOR.config-cfg-extraPlugins">config.extraPlugins</a></code> configuration setting.
+		</p>
+<pre class="samples">
+CKEDITOR.replace( '<em>textarea_id</em>', {
+	<strong>extraPlugins: 'wordcount', 
+                maxWordCount: 4,
+	        maxCharCount: 10,
+                // optional events
+	        paragraphsCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationparagraphs").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - paragraphs").show();
+	        },
+	        wordCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationword").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - word").show();
+	        },
+	        charCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationchar").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - char").show();
+	        },
+	        charCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationchar").css("background-color", "white").css("color", "black").hide();
+	        },
+	        paragraphsCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationparagraphs").css("background-color", "white").css("color", "black").hide();
+	        },
+	        wordCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationword").css("background-color", "white").css("color", "black").hide();
+	        }</strong>
+} );
+</pre>
+	</div>
+
+<textarea cols="80" id="editor1" name="editor1" rows="10">
+    This is some <strong>sample text</strong>. You are using <a href="http://ckeditor.com/">CKEditor</a>.
+</textarea>
+    <div id="informationchar"></div>
+    <div id="informationword"></div>
+    <div id="informationparagraphs"></div>
+	<script>
+
+	    CKEDITOR.replace('editor1', {
+	        extraPlugins: 'wordcount',
+	        wordcount: {
+	            showWordCount: true, 
+                    showCharCount: true,
+	            maxWordCount: 4,
+	            maxCharCount: 10,
+	            paragraphsCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationparagraphs").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - paragraphs").show();
+	            },
+	            wordCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationword").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - word").show();
+	            },
+	            charCountGreaterThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationchar").css("background-color", "crimson").css("color", "white").text(currentLength + "/" + maxLength + " - char").show();
+	            },
+	            charCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationchar").css("background-color", "white").css("color", "black").hide();
+	            },
+	            paragraphsCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationparagraphs").css("background-color", "white").css("color", "black").hide();
+	            },
+	            wordCountLessThanMaxLengthEvent: function (currentLength, maxLength) {
+	                $("#informationword").css("background-color", "white").css("color", "black").hide();
+	            }
+	        }
+	    });
+
+	</script>
+
+	<div id="footer">
+		<hr>
+		<p>
+			CKEditor - The text editor for the Internet - <a class="samples" href="http://ckeditor.com/">http://ckeditor.com</a>
+		</p>
+		<p id="copy">
+			Copyright &copy; 2003-2015, <a class="samples" href="http://cksource.com/">CKSource</a> - Frederico
+			Knabben. All rights reserved.
+		</p>
+	</div>
+</body>
+</html>
diff --git a/plugins/ckeditor4/youtube/LICENSE.md b/plugins/ckeditor4/youtube/LICENSE.md
new file mode 100644
index 0000000..29eab05
--- /dev/null
+++ b/plugins/ckeditor4/youtube/LICENSE.md
@@ -0,0 +1,15 @@
+            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+                    Version 2, December 2004
+
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+            DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. You just DO WHAT THE FUCK YOU WANT TO.
+
+
diff --git a/plugins/ckeditor4/youtube/images/icon.png b/plugins/ckeditor4/youtube/images/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..b1cf6deda686cc01192b48be2651c765e371932c
GIT binary patch
literal 419
zcmV;U0bKrxP)<h;3K|Lk000e1NJLTq000mG000mO1ONa4wfZ;e00007bV*G`2i*!D
z2`VBj*ef3Z000SaNLh0L03N{r03N{s!)a7g00004XF*Lt006O%3;baP0003pNkl<Z
zc-nQ4F-rqM5QV?nBtjyH2oXUDSENbf*@=aXg%&oZwiHEBtQ5f?kjBPBti(T%#y_B?
z2o~B|7`PxP5-ag8$>oxq?_!D&lQ+DbVdm}5%vuLd?j~z95?|G~O-imGje{SRTr+DY
zsAF*_)`u*?ylpag3YXbpgKZ``rYLc-C-6vN0va^g<C7h3Iit)IHL)pc5ReQBHO`8-
zK!zDHMy8iVXR;;L9|E%MtJx2yO!c!Zl7UoRh0jV|4XhXoj81DV%J-l9j}#S5NSa;l
zx$Gw|1_bGNhS*)R$e}iQp`d3^cwn7r&iU@Ok-(C(B+7|~5BXJ<mQ*2LGet*1XQ+Rf
zcU3}+um9@O#^;eW`L=G>c;!g<J!LK2yj@^o#11XZRH=f4OEkt@oL}{-i5T@GK0p8f
N002ovPDHLkV1fv>r=S1;

literal 0
HcmV?d00001

diff --git a/plugins/ckeditor4/youtube/lang/ar.js b/plugins/ckeditor4/youtube/lang/ar.js
new file mode 100644
index 0000000..bfc5123
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/ar.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'ar', {
+	button : 'شيفرة تضمين اليوتيوب',
+	title : 'شيفرة تضمين اليوتيوب',
+	txtEmbed : 'الصق شيفرة التضمين هنا',
+	txtUrl : 'الصق رابط فيديو اليوتيوب',
+	txtWidth : 'العرض',
+	txtHeight : 'الطول',
+	chkRelated : 'اظهر الفيديوهات المقترحة في نهاية الفيديو',
+	txtStartAt : 'ابدأ عند (ss او mm:ss او hh:mm:ss)',
+	chkPrivacy : 'تفعيل وضع تحسين الخصوصية',
+	chkOlderCode : 'استخدم شيفرة التضمين القديمة',
+	chkAutoplay : 'Autoplay',
+	chkControls: 'إظهار عناصر التحكم بالمشغّل',
+	noCode : 'يجب عليك ادخال شيفرة التضمين او الرابط',
+	invalidEmbed : 'شيفرة التضمين التي قمت بإدخالها تبدو غير صحيحة',
+	invalidUrl : 'الرابط الذي قمت بإدخاله يبدو غير صحيح',
+	or : 'او',
+	noWidth : 'يجب عليك ادخال العرض',
+	invalidWidth : 'يجب عليك ادخال عرض صحيح',
+	noHeight : 'يجب عليك ادخال الطول',
+	invalidHeight : 'يجب عليك ادخال طول صحيح',
+	invalidTime : 'يجب عليك ادخال وقت بداية صحيح',
+	txtResponsive : 'Responsive video'
+});
diff --git a/plugins/ckeditor4/youtube/lang/cs.js b/plugins/ckeditor4/youtube/lang/cs.js
new file mode 100644
index 0000000..29eb2a6
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/cs.js
@@ -0,0 +1,25 @@
+CKEDITOR.plugins.setLang('youtube', 'cs', {
+	button : 'Vložit video YouTube',
+	title : 'Vložit video YouTube',
+	txtEmbed : 'Zde vložte kód pro vložení',
+	txtUrl : 'Vložte adresu URL videa YouTube',
+	txtWidth : 'Šířka',
+	txtHeight : 'Výška',
+	chkRelated : 'Po dohrání videa zobrazit navrhovaná videa',
+	txtStartAt : 'Začít přehrávat v čase (ss nebo mm:ss nebo hh:mm:ss)',
+	chkPrivacy : 'Povolit režim s rozšířeným soukromím',
+	chkOlderCode : 'Použít starý kód pro vložení',
+	chkAutoplay : 'Automatické spuštění přehrávání',
+	chkControls : 'Zobrazit ovladače přehrávání',
+	noCode : 'Musíte vložit kód pro vložení nebo adresu URL',
+	invalidEmbed : 'Vložený kód pro vložení zřejmě není platný',
+	invalidUrl : 'Zadaná adresa URL zřejmě není platná',
+	or : 'nebo',
+	noWidth : 'Musíte zadat šířku',
+	invalidWidth : 'Zadejte platnou šířku',
+	noHeight : 'Musíte zadat výšku',
+	invalidHeight : 'Zadejte platnou výšku',
+	invalidTime : 'Zadejte platný počáteční čas',
+	txtResponsive : 'Responzivní design (ignorovat výšku a šířku, uzpůsobit šířce)',
+	txtNoEmbed : 'Pouze obrázek videa s odkazem'
+});
diff --git a/plugins/ckeditor4/youtube/lang/de.js b/plugins/ckeditor4/youtube/lang/de.js
new file mode 100644
index 0000000..e8f644d
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/de.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'de', {
+	button : 'YouTube Video einbinden',
+	title : 'YouTube Video einbinden',
+	txtEmbed : 'Embed Code hier einfügen',
+	txtUrl : 'YouTube Video URL hier einfügen',
+	txtWidth : 'Breite',
+	txtHeight : 'Höhe',
+	chkRelated : 'Vorschläge am Ende des Videos einblenden',
+	txtStartAt : 'Start bei Position (ss oder mm:ss oder hh:mm:ss)',
+	chkPrivacy : 'Erweiterten Datenschutzmodus aktivieren',
+	chkOlderCode : 'Benutze alten Embed Code',
+	chkAutoplay : 'Autoplay',
+	chkControls : 'Player-Steuerelemente anzeigen',
+	noCode : 'Sie müssen einen Embed Code oder URL angeben',
+	invalidEmbed : 'Der angegebene Embed Code scheint nicht gültig zu sein.',
+	invalidUrl : 'Die angegebene URL scheint nicht gültig zu sein.',
+	or : 'oder',
+	noWidth : 'Geben Sie eine Breite an',
+	invalidWidth : 'Geben Sie eine gültige Breite an',
+	noHeight : 'Geben Sie eine Höhe an',
+	invalidHeight : 'Geben Sie eine gültige Höhe an',
+	invalidTime : 'Geben Sie eine gültige Startzeit an',
+	txtResponsive : 'Automatische Größe (ignoriert Breite und Höhe)'
+});
diff --git a/plugins/ckeditor4/youtube/lang/el.js b/plugins/ckeditor4/youtube/lang/el.js
new file mode 100644
index 0000000..57a18c7
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/el.js
@@ -0,0 +1,23 @@
+CKEDITOR.plugins.setLang('youtube', 'el', {
+    button: 'Ενσωμάτωση Youtube βίντεο',
+    title: 'Ενσωμάτωση Youtube βίντεο',
+    txtEmbed: 'Επικόλλησε τον κώδικα ενσωμάτωσης',
+    txtUrl: 'Επικόλλησε το URL του βίντεο',
+    txtWidth: 'Πλάτος',
+    txtHeight: 'Ύψος',
+    chkRelated: 'Εμφάνιση προτεινόμενων βίντεο μόλις ολοκληρωθεί',
+    txtStartAt: 'Χρόνος εκκίνησης (ss or mm:ss or hh:mm:ss)',
+    chkPrivacy: 'Ενεργοποίηση λειτουργίας ενισχυμένου απορρήτου',
+    chkOlderCode: 'Χρήση παλαιού κώδικα ενσωμάτωσης',
+    chkAutoplay: 'Αυτόματη εκκίνηση',
+    chkControls: 'Εμφάνιση στοιχείων ελέγχου προγράμματος αναπαραγωγής',
+    noCode: 'Χρειάζεται κώδικας ενσωμάτωσης ή URL',
+    invalidEmbed: 'Ο κώδικας ενσωμάτωσης που εισήγατε δεν μοιάζει σωστός',
+    invalidUrl: 'Το URL που εισήγατε δεν μοιάζει σωστό',
+    or: 'ή',
+    noWidth: 'Συμπληρώστε το πλάτος',
+    invalidWidth: 'Λανθασμένο πλάτος',
+    noHeight: 'Συμπληρώστε το ύψος',
+    invalidHeight: 'Λανθασμένο ύψος',
+    invalidTime: 'Λανθασμένος χρόνος εκκίνησης'
+});
diff --git a/plugins/ckeditor4/youtube/lang/en.js b/plugins/ckeditor4/youtube/lang/en.js
new file mode 100644
index 0000000..173fbc7
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/en.js
@@ -0,0 +1,25 @@
+CKEDITOR.plugins.setLang('youtube', 'en', {
+	button : 'Embed YouTube Video',
+	title : 'Embed YouTube Video',
+	txtEmbed : 'Paste Embed Code Here',
+	txtUrl : 'Paste YouTube Video URL',
+	txtWidth : 'Width',
+	txtHeight : 'Height',
+	chkRelated : 'Show suggested videos at the video\'s end',
+	txtStartAt : 'Start at (ss or mm:ss or hh:mm:ss)',
+	chkPrivacy : 'Enable privacy-enhanced mode',
+	chkOlderCode : 'Use old embed code',
+	chkAutoplay: 'Autoplay',
+	chkControls: 'Show player controls',
+	noCode : 'You must input an embed code or URL',
+	invalidEmbed : 'The embed code you\'ve entered doesn\'t appear to be valid',
+	invalidUrl : 'The URL you\'ve entered doesn\'t appear to be valid',
+	or : 'or',
+	noWidth : 'You must inform the width',
+	invalidWidth : 'Inform a valid width',
+	noHeight : 'You must inform the height',
+	invalidHeight : 'Inform a valid height',
+	invalidTime : 'Inform a valid start time',
+	txtResponsive : 'Make Responsive (ignore width and height, fit to width)',
+	txtNoEmbed : 'Video image and link only'
+});
diff --git a/plugins/ckeditor4/youtube/lang/es.js b/plugins/ckeditor4/youtube/lang/es.js
new file mode 100644
index 0000000..c567cb1
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/es.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'es', {
+    button : 'Embed YouTube video',
+    title : 'Embed YouTube video',
+    txtEmbed : 'Pegar el código embed',
+    txtUrl : 'Pegar la URL al video de Youtube',
+    txtWidth : 'Anchura',
+    txtHeight : 'Altura',
+    chkRelated : 'Mostrar videos sugeridos al final de este video',
+    txtStartAt : 'Comenzar en (ss or mm:ss or hh:mm:ss)',
+    chkPrivacy : 'Habilitar el modo privacy-enhanced',
+    chkOlderCode : 'Usar código embed viejo',
+    chkAutoplay: 'Autoplay',
+    chkControls: 'Mostrar controles del reproductor',
+    noCode : 'Debes de introducir un código embed o URL',
+    invalidEmbed : 'El código embed introducido parece no ser valido',
+    invalidUrl : 'La URL introducida parece no ser valida',
+    or : 'o',
+    noWidth : 'Debes de dar la anchura',
+    invalidWidth : 'Da una anchura valida',
+    noHeight : 'Debes dar una altura valida',
+    invalidHeight : 'Da una altura valida',
+    invalidTime : 'Da un tiempo de valido',
+    txtResponsive : 'Hacer responsivo (ignorar anchura y altura, ajustar a la anchura)'
+});
diff --git a/plugins/ckeditor4/youtube/lang/et.js b/plugins/ckeditor4/youtube/lang/et.js
new file mode 100644
index 0000000..89588cb
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/et.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'et', {
+	button : 'Lisa YouTube video',
+	title : 'YouTube video lisamine',
+	txtEmbed : 'Kleepige manustatud kood siia',
+	txtUrl : 'Kleepige YouTube video veebiaadress',
+	txtWidth : 'Laius',
+	txtHeight : 'Kõrgus',
+	chkRelated : 'Näita soovitatud videosi antud video lõppus',
+	txtStartAt : 'Alguskoht: (ss või mm:ss või hh:mm:ss)',
+	chkPrivacy : 'Aktiveerige privaatsust täiendav režiim',
+	chkOlderCode : 'Kasutage vana manuskoodi',
+	chkAutoplay: 'Automaatesitlus',
+	chkControls : 'Kuva pleieri nupud',
+	noCode : 'Te peate sisestama video manuskoodi või veebiaadressi',
+	invalidEmbed : 'Manuskood mille sisestasite ei paista olevat korrektne',
+	invalidUrl : 'Veebiaadress mille sisestasite ei paista olevat korrektne',
+	or : 'või',
+	noWidth : 'Te peate sisestama video laiuse',
+	invalidWidth : 'Sisestage korrektne laius',
+	noHeight : 'Te peate sisestama video kõrguse',
+	invalidHeight : 'Sisestage korrektne kõrgus',
+	invalidTime : 'Sisestage korrektne algusaeg',
+	txtResponsive : 'Aktiveerige ekraani laiusega ühilduv režiim'
+});
diff --git a/plugins/ckeditor4/youtube/lang/fi.js b/plugins/ckeditor4/youtube/lang/fi.js
new file mode 100644
index 0000000..f42b2ae
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/fi.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'fi', {
+	button : 'Upota YouTube-video',
+	title : 'Upota YouTube-video',
+	txtEmbed : 'Syötä YouTube-videon upotuskoodi',
+	txtUrl : 'Syötä YouTube-videon www-osoite',
+	txtWidth : 'Leveys',
+	txtHeight : 'Korkeus',
+	chkRelated : 'Näytä suositukset lopussa',
+	txtStartAt : 'Aloitusaika (ss tai mm:ss tai tt:mm:ss)',
+	chkPrivacy : 'Aktivoi yksityisyyttä parantava tila',
+	chkOlderCode : 'Käytä vanhaa upotuskoodia',
+	chkAutoplay: 'Soita automaattisesti',
+	chkControls : 'Näytä soittimen ohjaimet',
+	noCode : 'Sinun täytyy syötää upotuskoodi tai www-osoite',
+	invalidEmbed : 'Upotuskoodi on virheellinen',
+	invalidUrl : 'Www-osoite on virheellinen',
+	or : 'tai',
+	noWidth : 'Syötä leveys',
+	invalidWidth : 'Leveys on virheellinen',
+	noHeight : 'Syötä korkeus',
+	invalidHeight : 'Korkeus on virheellinen',
+	invalidTime : 'Aloitusaika on virheellinen',
+	txtResponsive : 'Responsiivinen leveys (sovita leveys)'
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/youtube/lang/fr.js b/plugins/ckeditor4/youtube/lang/fr.js
new file mode 100644
index 0000000..94c434a
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/fr.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'fr', {
+	button : 'Insérer une vidéo Youtube',
+	title : 'Insérer une vidéo youtube',
+	txtEmbed : 'Coller le code embed ici',
+	txtUrl : 'Coller l\'url de la vidéo ici',
+	txtWidth : 'Largeur',
+	txtHeight : 'Hauteur',
+	chkRelated : 'Montrer les suggestions de vidéo à la fin',
+	txtStartAt : 'Commencer à (ss ou mm:ss ou hh:mm:ss)',
+	chkPrivacy : 'Activer la protection de la vie privée',
+	chkOlderCode : 'Utiliser l\'ancien code embed',
+	chkAutoplay : 'Autoplay',
+	chkControls : 'Afficher les commandes du lecteur',
+	noCode : 'Vous devez entrer un code embed ou une url',
+	invalidEmbed : 'Le code embed est invalide',
+	invalidUrl : 'L\'url est invalide',
+	or : 'ou',
+	noWidth : 'Vous devez saisir une largeur',
+	invalidWidth : 'La largeur saisie est invalide',
+	noHeight : 'Vous devez saisir une hauteur',
+	invalidHeight : 'La hauteur saisie est invalide',
+	invalidTime : 'Le temps de départ de la vidéo est invalide',
+	txtResponsive : 'Responsive video'
+});
diff --git a/plugins/ckeditor4/youtube/lang/he.js b/plugins/ckeditor4/youtube/lang/he.js
new file mode 100644
index 0000000..cd91b6b
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/he.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'he', {
+	button : 'שבץ וידאו של YouTube',
+	title : 'שבץ וידאו של YouTube',
+	txtEmbed : 'הדבק את קוד השיבוץ כאן',
+	txtUrl : 'הדבק כתובת וידאו YouTube',
+	txtWidth : 'אורך',
+	txtHeight : 'גובה',
+	chkRelated : 'הצג סרטונים מומלצים בסוף הודיאו',
+	txtStartAt : 'התחל ב (ss או mm:ss או hh:mm:ss)',
+	chkPrivacy : 'הפעל מצב פרטיות המשופרת',
+	chkOlderCode : 'השתמש בקוד הטמעה ישן',
+	chkAutoplay: 'הפעלה אוטומטית',
+	chkControls : 'הצג פקדי נגן',
+	noCode : 'אתה חייב להזין קוד embed כתובת וידאו אתר',
+	invalidEmbed : 'קוד ההטמעה שהוזן אינו נראה חוקי',
+	invalidUrl : 'כתובת הוידאו אינה נראת חוקית',
+	or : 'או',
+	noWidth : 'חובה להזין אורך',
+	invalidWidth : 'האורך שהוזן שגוי',
+	noHeight : 'חובה להזין גובה',
+	invalidHeight : 'הגובה שהוזן שגוי',
+	invalidTime : 'זמן התחלה שהוזן שגוי',
+	txtResponsive : 'הפוך לרספונסיבי (התעלם מרוחב וגובה, התאם לרוחב)'
+});
diff --git a/plugins/ckeditor4/youtube/lang/hu.js b/plugins/ckeditor4/youtube/lang/hu.js
new file mode 100644
index 0000000..c708434
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/hu.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'hu', {
+	button : 'Youtube videó beillesztése',
+	title : 'Youtube videó beillesztése',
+	txtEmbed : 'Illessze be a beágyazott kódot',
+	txtUrl : 'Illessze be a Youtube videó URL-jét',
+	txtWidth : 'Szélesség',
+	txtHeight : 'Magasság',
+	txtStartAt : 'Kezdő időpont (ss vagy mm:ss vagy hh:mm:ss)',
+	chkRelated : 'Ajánlott videók megjelenítése, amikor a videó befejeződik',
+	chkPrivacy : 'Fokozott adatvédelmi mód engedélyezése',
+	chkOlderCode : 'Régi beágyazott kód használata',
+	chkAutoplay : 'Automatikus lejátszás',
+	chkControls : 'Lejátszásvezérlők mutatása',
+	noCode : 'A beágyazott kód, vagy az URL megadása kötelező',
+	invalidEmbed : 'A beágyazott kód érvénytelen',
+	invalidUrl : 'A megadott URL érvénytelen',
+	or : 'vagy',
+	noWidth : 'A szélesség megadása kötelező',
+	invalidWidth : 'Érvényes szélességet adjon meg',
+	noHeight : 'A magasság megadása kötelező',
+	invalidHeight : 'Érvényes magasságot adjon meg',
+	invalidTime : 'Érvényes kezdő időpontot adjon meg',
+	txtResponsive : 'Responsive video'
+});
diff --git a/plugins/ckeditor4/youtube/lang/it.js b/plugins/ckeditor4/youtube/lang/it.js
new file mode 100644
index 0000000..9c55d90
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/it.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'it', {
+	button : 'Incorpora video Youtube',
+	title : 'Incorpora video Youtube',
+	txtEmbed : 'Incolla qui il codice di incorporamento',
+	txtUrl : 'Incolla l\'URL del video Youtube',
+	txtWidth : 'Larghezza',
+	txtHeight : 'Altezza',
+	chkRelated : 'Mostra i video suggeriti dopo il video',
+	txtStartAt : 'Inizia a (ss o mm:ss o hh:mm:ss)',
+	chkPrivacy : 'Abilita la protezione della privacy',
+	chkOlderCode : 'Usa il vecchio codice di incorporamento',
+	chkAutoplay : 'Autoplay',
+	chkControls : 'Mostra i controlli del player',
+	noCode : 'Devi inserire un codice di incorporamento o un URL',
+	invalidEmbed : 'Il codice di incorporamento inserito non sembra valido',
+	invalidUrl : 'L\'URL inserito non sembra valido',
+	or : 'o',
+	noWidth : 'Devi indicare la larghezza',
+	invalidWidth : 'Indica una larghezza valida',
+	noHeight : 'Devi indicare l\'altezza',
+	invalidHeight : 'Indica un\'altezza valida',
+	invalidTime : 'Indica un tempo di inizio valido',
+	txtResponsive : 'Responsive video'
+});
diff --git a/plugins/ckeditor4/youtube/lang/ja.js b/plugins/ckeditor4/youtube/lang/ja.js
new file mode 100644
index 0000000..2d10146
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/ja.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'ja', {
+	button : 'Youtube動画埋め込み',
+	title : 'Youtube動画埋め込み',
+	txtEmbed : '埋め込みコードを貼り付けてください',
+	txtUrl : 'URLを貼り付けてください',
+	txtWidth : 'å¹…',
+	txtHeight : '高さ',
+	chkRelated : '動画が終わったら関連動画を表示する',
+	txtStartAt : '開始時間(秒)',
+	chkPrivacy : 'プライバシー強化モードを有効にする',
+	chkOlderCode : '以前の埋め込みコードを使用する',
+	chkAutoplay : '自動再生',
+	chkControls: 'プレーヤーのコントロールを表示する',
+	noCode : '埋め込みコードまたはURLを入力してください',
+	invalidEmbed : '不適切な埋め込みコードが入力されました',
+	invalidUrl : '不適切なURLが入力されました',
+	or : 'または',
+	noWidth : '幅を指定してください',
+	invalidWidth : '幅指定に誤りがあります',
+	noHeight : '高さを指定してください',
+	invalidHeight : '高さ指定に誤りがあります',
+	invalidTime : '開始時間を正の整数で入力してください',
+	txtResponsive : 'レスポンシブ表示'
+});
diff --git a/plugins/ckeditor4/youtube/lang/ko.js b/plugins/ckeditor4/youtube/lang/ko.js
new file mode 100644
index 0000000..199143f
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/ko.js
@@ -0,0 +1,25 @@
+CKEDITOR.plugins.setLang('youtube', 'ko', {
+	button : '유투브 비디오 삽입',
+	title : '유투브 비디오 삽입',
+	txtEmbed : '여기 embed 코드를 붙여넣으세요',
+	txtUrl : '유투브 주소(URL)를 붙여넣으세요',
+	txtWidth : '너비',
+	txtHeight : '높이',
+	chkRelated : '비디오 마지막에 추천 영상 보이기',
+	txtStartAt : '시작 시점 (ss 또는 mm:ss 또는 hh:mm:ss)',
+	chkPrivacy : '개인정보 보호 모드 활성화',
+	chkOlderCode : '옛날 embed 코드 사용',
+	chkAutoplay: '자동 재생',
+	chkControls: '플레이어 컨트롤 표시',
+	noCode : 'embed 코드 또는 URL을 입력해야 합니다',
+	invalidEmbed : '입력하신 embed 코드가 유효하지 않습니다',
+	invalidUrl : '입력하신 주소(URL)가 유효하지 않습니다',
+	or : '또는',
+	noWidth : '너비를 알려주세요',
+	invalidWidth : '너비가 유효하지 않습니다',
+	noHeight : '높이를 알려주세요',
+	invalidHeight : '높이가 유효하지 않습니다',
+	invalidTime : '시작 시점이 유효하지 않습니다',
+	txtResponsive : '반응형 너비 (입력한 너비와 높이를 무시하고 창 너비에 맞춤)',
+	txtNoEmbed : '비디오 이미지와 링크만 달기'
+});
diff --git a/plugins/ckeditor4/youtube/lang/nb.js b/plugins/ckeditor4/youtube/lang/nb.js
new file mode 100644
index 0000000..ee5532f
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/nb.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'nb', {
+	button : 'Bygg inn YouTube-video',
+	title : 'Bygg inn YouTube-video',
+	txtEmbed : 'Lim inn embed-kode her',
+	txtUrl : 'Lim inn YouTube video-URL',
+	txtWidth : 'Bredde',
+	txtHeight : 'Høyde',
+	chkRelated : 'Vis foreslåtte videoer når videoen er ferdig',
+	txtStartAt : 'Start ved (ss eller mm:ss eller hh:mm:ss)',
+	chkPrivacy : 'Bruk personverntilpasset modus',
+	chkOlderCode : 'Bruk gammel embedkode',
+	chkAutoplay: 'Spill automatisk',
+	chkControls: 'Vis spillerkontrollene',
+	noCode : 'Du må legge inn en embed-kode eller URL',
+	invalidEmbed : 'Emded-koden du la inn ser ikke ut til å være gyldig',
+	invalidUrl : 'URLen du la inn ser ikke ut til å være gyldig',
+	or : 'eller',
+	noWidth : 'Du må legge inn bredde',
+	invalidWidth : 'Legg inn en gyldig bredde',
+	noHeight : 'Du må legge inn høyde',
+	invalidHeight : 'Legg inn en gyldig høyde',
+	invalidTime : 'Legg inn gyldig starttid',
+	txtResponsive : 'Gjør responsiv (ignorer bredde og høyde, tilpass bredde på sida)'
+});
diff --git a/plugins/ckeditor4/youtube/lang/nl.js b/plugins/ckeditor4/youtube/lang/nl.js
new file mode 100644
index 0000000..698951f
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/nl.js
@@ -0,0 +1,25 @@
+CKEDITOR.plugins.setLang('youtube', 'nl', {
+	button : 'Youtube video insluiten',
+	title : 'Youtube video insluiten',
+	txtEmbed : 'Plak embedcode hier',
+	txtUrl : 'Plak video URL',
+	txtWidth : 'Breedte',
+	txtHeight : 'Hoogte',
+	chkRelated : 'Toon gesuggereerde video aan het einde van de video',
+	txtStartAt : 'Starten op (ss of mm:ss of hh:mm:ss)',
+	chkPrivacy : 'Privacy-enhanced mode inschakelen',
+	chkOlderCode : 'Gebruik oude embedcode',
+	chkAutoplay: 'Automatisch starten',
+	chkControls: 'Afspeelbediening weergeven',
+	noCode : 'U moet een embedcode of url ingeven',
+	invalidEmbed : 'De ingegeven embedcode lijkt niet geldig',
+	invalidUrl : 'De ingegeven url lijkt niet geldig',
+	or : 'of',
+	noWidth : 'U moet een breedte ingeven',
+	invalidWidth : 'U moet een geldige breedte ingeven',
+	noHeight : 'U moet een hoogte ingeven',
+	invalidHeight : 'U moet een geldige starttijd ingeven',
+	invalidTime : 'Inform a valid start time',
+	txtResponsive : 'Responsive video',
+	txtNoEmbed : 'Alleen video afbeelding en link'
+});
diff --git a/plugins/ckeditor4/youtube/lang/nn.js b/plugins/ckeditor4/youtube/lang/nn.js
new file mode 100644
index 0000000..dd2a897
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/nn.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'nn', {
+	button : 'Bygg inn YouTube-video',
+	title : 'Bygg inn YouTube-video',
+	txtEmbed : 'Lim inn embed-kode her',
+	txtUrl : 'Lim inn YouTube video-URL',
+	txtWidth : 'Breidde',
+	txtHeight : 'Høgde',
+	chkRelated : 'Vis foreslåtte videoar når videoen er ferdig',
+	txtStartAt : 'Start ved (ss eller mm:ss eller hh:mm:ss)',
+	chkPrivacy : 'Bruk personverntilpassa modus',
+	chkOlderCode : 'Bruk gamal embedkode',
+	chkAutoplay: 'Spel automatisk',
+	chkControls: 'Vis spillerkontrollene',
+	noCode : 'Du må leggja inn ein embed-kode eller URL',
+	invalidEmbed : 'Emded-koden du la inn ser ikkje ut til å vera gyldig',
+	invalidUrl : 'URLen du la inn ser ikkje ut til å vera gyldig',
+	or : 'eller',
+	noWidth : 'Du må leggja inn breidde',
+	invalidWidth : 'Legg inn ei gyldig breidde',
+	noHeight : 'Du må leggja inn høgde',
+	invalidHeight : 'Legg inn ei gyldig høgde',
+	invalidTime : 'Legg inn gyldig starttid',
+	txtResponsive : 'Gjer responsiv (ignorer breidde og høgde, tilpass breidda på sida)'
+});
diff --git a/plugins/ckeditor4/youtube/lang/pl.js b/plugins/ckeditor4/youtube/lang/pl.js
new file mode 100644
index 0000000..48b2c33
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/pl.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'pl', {
+	button : 'Załącznik wideo z YouTube',
+	title : 'Załącznik wideo z YouTube',
+	txtEmbed : 'Wklej kod do umieszczenia',
+	txtUrl : 'Wklej adres URL do wideo z YouTube',
+	txtWidth : 'Szerokość',
+	txtHeight : 'Wysokość',
+	chkRelated : 'Pokaż sugerowane filmy po zakończeniu odtwarzania',
+	txtStartAt : 'Rozpocznij od (ss lub mm:ss lub gg:mm:ss)',
+	chkPrivacy : 'Włącz rozszerzony tryb prywatności',
+	chkOlderCode : 'Użyj starego kodu',
+	chkAutoplay: 'Autoodtwarzanie',
+	chkControls: 'Pokaż elementy sterujące odtwarzacza',
+	noCode : 'Musisz wprowadzić kod lub adres URL',
+	invalidEmbed : 'Wprowadzony kod nie jest poprawny',
+	invalidUrl : 'Wprowadzony adres URL nie jest poprawny',
+	or : 'lub',
+	noWidth : 'Musisz wpisać szerokość',
+	invalidWidth : 'Wprowadzona szerokość nie jest poprawna',
+	noHeight : 'Musisz wprowadzić wysokość',
+	invalidHeight : 'Wprowadzona wysokość nie jest poprawna',
+	invalidTime : 'Musisz wprowadzić poprawny czas rozpoczęcia',
+	txtResponsive : 'El. responsywny (ignoruj szerokość i wysokość, dopasuj do szerokości)'
+});
\ No newline at end of file
diff --git a/plugins/ckeditor4/youtube/lang/pt-br.js b/plugins/ckeditor4/youtube/lang/pt-br.js
new file mode 100644
index 0000000..803e04c
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/pt-br.js
@@ -0,0 +1,25 @@
+CKEDITOR.plugins.setLang('youtube', 'pt-br', {
+	button : 'Inserir Vídeo do Youtube',
+	title : 'Inserir Vídeo do Youtube',
+	txtEmbed : 'Cole aqui o código embed de um vídeo do Youtube',
+	txtUrl : 'Cole aqui uma URL de um vídeo do Youtube',
+	txtWidth : 'Largura',
+	txtHeight : 'Altura',
+	chkRelated : 'Mostrar vídeos sugeridos ao final do vídeo',
+	txtStartAt : 'Iniciar em (ss ou mm:ss ou hh:mm:ss)',
+	chkPrivacy : 'Ativar o modo de privacidade aprimorada',
+	chkOlderCode : 'Usar código de incorporação antigo',
+	chkAutoplay : 'Reproduzir automaticamente',
+	chkControls: 'Mostrar controles do player',
+	noCode : 'Você precisa informar um código embed ou uma URL',
+	invalidEmbed : 'O código informado não parece ser válido',
+	invalidUrl : 'A URL informada não parece ser válida',
+	or : 'ou',
+	noWidth : 'Você deve informar a largura do vídeo',
+	invalidWidth : 'Informe uma largura válida',
+	noHeight : 'Você deve informar a altura do vídeo',
+	invalidHeight : 'Informe uma altura válida',
+	invalidTime : 'O tempo informado é inválido',
+	txtResponsive : 'Vídeo responsivo',
+	txtNoEmbed : 'Somente imagem e link para o vídeo'
+});
diff --git a/plugins/ckeditor4/youtube/lang/pt.js b/plugins/ckeditor4/youtube/lang/pt.js
new file mode 100644
index 0000000..394a29e
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/pt.js
@@ -0,0 +1,25 @@
+CKEDITOR.plugins.setLang('youtube', 'pt', {
+	button : 'Inserir Vídeo do Youtube',
+	title : 'Inserir Vídeo do Youtube',
+	txtEmbed : 'Cole aqui o código embed de um vídeo do Youtube',
+	txtUrl : 'Cole aqui uma URL de um vídeo do Youtube',
+	txtWidth : 'Largura',
+	txtHeight : 'Altura',
+	chkRelated : 'Mostrar vídeos sugeridos quando o vídeo terminar',
+	txtStartAt : 'Iniciar em (ss ou mm:ss ou hh:mm:ss)',
+	chkPrivacy : 'Ativar o modo de privacidade otimizada',
+	chkOlderCode : 'Usar código de incorporação antigo',
+	chkAutoplay : 'Reproduzir automaticamente',
+	chkControls: 'Mostrar controles do player',
+	noCode : 'Você precisa informar um código embed ou uma URL',
+	invalidEmbed : 'O código informado não parece ser válido',
+	invalidUrl : 'A URL informada não parece ser válida',
+	or : 'ou',
+	noWidth : 'Você deve informar a largura do vídeo',
+	invalidWidth : 'Informe uma largura válida',
+	noHeight : 'Você deve informar a altura do vídeo',
+	invalidHeight : 'Informe uma altura válida',
+	invalidTime : 'O tempo informado é inválido',
+	txtResponsive : 'Vídeo responsivo',
+	txtNoEmbed : 'Somente imagem e link para o vídeo'
+});
diff --git a/plugins/ckeditor4/youtube/lang/ru.js b/plugins/ckeditor4/youtube/lang/ru.js
new file mode 100644
index 0000000..4cdd426
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/ru.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'ru', {
+	button : 'Вставить YouTube видео',
+	title : 'Вставить YouTube видео',
+	txtEmbed : 'Вставьте HTML-код сюда',
+	txtUrl : 'Вставьте адрес видео (URL)',
+	txtWidth : 'Ширина',
+	txtHeight : 'Высота',
+	chkRelated : 'Показать похожие видео после завершения просмотра',
+	txtStartAt : 'Начать с (сс или мм:сс или чч:мм:сс)',
+	chkPrivacy : 'Включить режим повышенной конфиденциальности',
+	chkOlderCode : 'Использовать старый код вставки',
+	chkAutoplay: 'Автозапуск',
+	chkControls: 'Показать панель управления',
+	noCode : 'Вы должны ввести HTML-код или адрес',
+	invalidEmbed : 'Ваш HTML-код не похож на правильный',
+	invalidUrl : 'Ваш адрес видео не похож на правильный',
+	or : 'или',
+	noWidth : 'Вы должны указать ширину',
+	invalidWidth : 'Укажите правильную ширину',
+	noHeight : 'Вы должны указать высоту',
+	invalidHeight : 'Укажите правильную высоту',
+	invalidTime : 'Укажите правильное время начала',
+	txtResponsive : 'Растягиваемое видео'
+});
diff --git a/plugins/ckeditor4/youtube/lang/sk.js b/plugins/ckeditor4/youtube/lang/sk.js
new file mode 100644
index 0000000..07a941d
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/sk.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'sk', {
+	button : 'Vložiť YouTube video',
+	title : 'Vložiť YouTube video',
+	txtEmbed : 'Vložiť Youtube Embed Video kódu',
+	txtUrl : 'Vložiť pomocou YouTube video URL',
+	txtWidth : 'Šírka',
+	txtHeight : 'Výška',
+	chkRelated : 'Zobraziť odporúčané videá po prehratí',
+	txtStartAt : 'Začať prehrávanie videa (ss alebo mm:ss alebo hh:mm:ss)',
+	chkPrivacy : 'Povoliť pokročilý mód súkromia',
+	chkOlderCode : 'Použiť starú metódu vkladania',
+	chkAutoplay: 'Automatické prehrávanie',
+	chkControls: 'Zobraziť ovládacie prvky prehrávača',
+	noCode : 'Musíte vložiť Youtube Embed kód alebo URL',
+	invalidEmbed : 'Vložený kód nie je valídny',
+	invalidUrl : 'Vložená URL nie je platná',
+	or : 'alebo',
+	noWidth : 'Prosím, zadajte šírku videa',
+	invalidWidth : 'Zadajte valídnu šírku videa',
+	noHeight : 'Prosím, zadajte výšku videa',
+	invalidHeight : 'Zadajte valídnu výšku videa',
+	invalidTime : 'Zadajte valídny formát začiatku prehrávania videa',
+	txtResponsive : 'Prispôsobit rozmery videa rozmerom obrazovky (ignoruje šírku a výšku, prispôsobí sa šírke obrazovky)'
+});
diff --git a/plugins/ckeditor4/youtube/lang/tr.js b/plugins/ckeditor4/youtube/lang/tr.js
new file mode 100644
index 0000000..ca00b1d
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/tr.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'tr', {
+	button : 'Youtube Video Gömün (Embed)',
+	title : 'Youtube Video',
+	txtEmbed : 'Youtube gömülü kodu (embed) buraya yapıştırınız',
+	txtUrl : 'Youtube linkinizi buraya yapıştırınız',
+	txtWidth : 'GeniÅŸlik',
+	txtHeight : 'Yükseklik',
+	chkRelated : 'Önerilen videoları video bitiminde göster',
+	txtStartAt : 'Video başlangıç anı (ss ya da dd:ss ya da ss:dd:ss)',
+	chkPrivacy : 'Gizlilik modunu etkinleÅŸtir',
+	chkOlderCode : 'Eski gömülü kodu (embed) kullan',
+	chkAutoplay: 'Otomatik',
+	chkControls: 'Oynatıcı kontrollerini göster',
+	noCode : 'Gömülü kod (embed) veya url yapıştırmak zorundasınız',
+	invalidEmbed : 'Verdiğiniz gömülü kod (embed) ile video bulunamadı',
+	invalidUrl : 'Verdiğiniz linkte video bulunamadı',
+	or : 'ya da',
+	noWidth : 'Genişliği belirtmek zorundasınız',
+	invalidWidth : 'Bir geniÅŸlik belirtin',
+	noHeight : 'Yükseliği belirtmek zorundasınız',
+	invalidHeight : 'Yükseklik belirtin',
+	invalidTime : 'Başlangıç anını doğru girin, örneğin: 13 (13. saniye) ya da 12:25 (12. dakika 25. saniye) ya da 01.25.33 (1 saat 25 dakika 33 saniye)',
+	txtResponsive : 'Responsive video'
+});
diff --git a/plugins/ckeditor4/youtube/lang/vi.js b/plugins/ckeditor4/youtube/lang/vi.js
new file mode 100644
index 0000000..18c9477
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/vi.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'vi', {
+	button : 'Embed Youtube Video',
+	title : 'Nhúng Video Youtube',
+	txtEmbed : 'Dãn mã nhúng Embed vào đây',
+	txtUrl : 'Dãn đường dẫn video Youtube',
+	txtWidth : 'Rá»™ng',
+	txtHeight : 'Cao',
+	chkRelated : 'Hiển thị các video được đề xuất khi video kết thúc',
+	txtStartAt : 'Bắt đầu (ss hoặc mm:ss hoặc hh:mm:ss)',
+	chkPrivacy : 'Kích hoạt chế độ bảo mật nâng cao',
+	chkOlderCode : 'Sử dụng mã nhúng cũ',
+	chkAutoplay: 'Tự động chạy video',
+	chkControls: 'Hiển thị các điều khiển trình phát',
+	noCode : 'Bạn phải nhập mã nhúng hoặc URL',
+	invalidEmbed : 'Mã nhúng bạn đã nhập không đúng',
+	invalidUrl : 'URL bạn đã nhập không đúng',
+	or : 'hoặc',
+	noWidth : 'Bạn phải chiều rộng',
+	invalidWidth : 'Chiều rộng hợp lệ',
+	noHeight : 'Bạn phải chiều cao',
+	invalidHeight : 'Chiều cao hợp lệ',
+	invalidTime : 'Thời gian bắt đầu không đúng',
+	txtResponsive : 'Responsive video'
+});
diff --git a/plugins/ckeditor4/youtube/lang/zh.js b/plugins/ckeditor4/youtube/lang/zh.js
new file mode 100644
index 0000000..3f4616f
--- /dev/null
+++ b/plugins/ckeditor4/youtube/lang/zh.js
@@ -0,0 +1,24 @@
+CKEDITOR.plugins.setLang('youtube', 'zh', {
+    button: '嵌入 Youtube 影片',
+    title: '嵌入 Youtube 影片',
+    txtEmbed: '貼上嵌入碼',
+    txtUrl: '貼上 Youtube 影片 URL',
+    txtWidth: '寬',
+    txtHeight: '高',
+    txtResponsive: '使用自適應縮放模式 (忽略設定的長寬, 以寬為基準縮放)',
+    chkRelated: '影片結束時顯示建議影片',
+    txtStartAt: '開始時間 (ss or mm:ss or hh:mm:ss)',
+    chkPrivacy: '啟用加強隱私模式',
+    chkOlderCode: '使用舊的嵌入碼',
+    chkAutoplay: '自動播放',
+    chkControls: '显示播放器控件',
+    noCode: '必須輸入嵌入碼',
+    invalidEmbed: '錯誤的嵌入碼',
+    invalidUrl: '錯誤的URL',
+    or: '或',
+    noWidth: '必須設定寬',
+    invalidWidth: '寬設定錯誤',
+    noHeight: '必須設定高',
+    invalidHeight: '高設定錯誤',
+    invalidTime: '開始時間設定錯誤'
+});
diff --git a/plugins/ckeditor4/youtube/plugin.js b/plugins/ckeditor4/youtube/plugin.js
new file mode 100644
index 0000000..4f57a45
--- /dev/null
+++ b/plugins/ckeditor4/youtube/plugin.js
@@ -0,0 +1,448 @@
+/*
+* Youtube Embed Plugin
+*
+* @author Jonnas Fonini <jonnasfonini@gmail.com>
+* @version 2.1.5
+*/
+(function () {
+	CKEDITOR.plugins.add('youtube', {
+		lang: [ 'en', 'pt', 'pt-br', 'ja', 'hu', 'it', 'fr', 'tr', 'ru', 'de', 'ar', 'nl', 'pl', 'vi', 'zh', 'el', 'he', 'es', 'nb', 'nn', 'fi', 'et', 'sk', 'cs', 'ko'],
+		init: function (editor) {
+			editor.addCommand('youtube', new CKEDITOR.dialogCommand('youtube', {
+				allowedContent: 'div{*}(*); iframe{*}[!width,!height,!src,!frameborder,!allowfullscreen]; object param[*]; a[*]; img[*]'
+			}));
+
+			editor.ui.addButton('Youtube', {
+				label : editor.lang.youtube.button,
+				toolbar : 'insert',
+				command : 'youtube',
+				icon : this.path + 'images/icon.png'
+			});
+
+			CKEDITOR.dialog.add('youtube', function (instance) {
+				var video,
+					disabled = editor.config.youtube_disabled_fields || [];
+
+				return {
+					title : editor.lang.youtube.title,
+					minWidth : 510,
+					minHeight : 200,
+					onShow: function () {
+						for (var i = 0; i < disabled.length; i++) {
+							this.getContentElement('youtubePlugin', disabled[i]).disable();
+						}
+					},
+					contents :
+						[{
+							id : 'youtubePlugin',
+							expand : true,
+							elements :
+								[{
+									id : 'txtEmbed',
+									type : 'textarea',
+									label : editor.lang.youtube.txtEmbed,
+									onChange : function (api) {
+										handleEmbedChange(this, api);
+									},
+									onKeyUp : function (api) {
+										handleEmbedChange(this, api);
+									},
+									validate : function () {
+										if (this.isEnabled()) {
+											if (!this.getValue()) {
+												alert(editor.lang.youtube.noCode);
+												return false;
+											}
+											else
+											if (this.getValue().length === 0 || this.getValue().indexOf('//') === -1) {
+												alert(editor.lang.youtube.invalidEmbed);
+												return false;
+											}
+										}
+									}
+								},
+								{
+									type : 'html',
+									html : editor.lang.youtube.or + '<hr>'
+								},
+								{
+									type : 'hbox',
+									widths : [ '70%', '15%', '15%' ],
+									children :
+									[
+										{
+											id : 'txtUrl',
+											type : 'text',
+											label : editor.lang.youtube.txtUrl,
+											onChange : function (api) {
+												handleLinkChange(this, api);
+											},
+											onKeyUp : function (api) {
+												handleLinkChange(this, api);
+											},
+											validate : function () {
+												if (this.isEnabled()) {
+													if (!this.getValue()) {
+														alert(editor.lang.youtube.noCode);
+														return false;
+													}
+													else{
+														video = ytVidId(this.getValue());
+
+														if (this.getValue().length === 0 ||  video === false)
+														{
+															alert(editor.lang.youtube.invalidUrl);
+															return false;
+														}
+													}
+												}
+											}
+										},
+										{
+											type : 'text',
+											id : 'txtWidth',
+											width : '60px',
+											label : editor.lang.youtube.txtWidth,
+											'default' : editor.config.youtube_width != null ? editor.config.youtube_width : '640',
+											validate : function () {
+												if (this.getValue()) {
+													var width = parseInt (this.getValue()) || 0;
+
+													if (width === 0) {
+														alert(editor.lang.youtube.invalidWidth);
+														return false;
+													}
+												}
+												else {
+													alert(editor.lang.youtube.noWidth);
+													return false;
+												}
+											}
+										},
+										{
+											type : 'text',
+											id : 'txtHeight',
+											width : '60px',
+											label : editor.lang.youtube.txtHeight,
+											'default' : editor.config.youtube_height != null ? editor.config.youtube_height : '360',
+											validate : function () {
+												if (this.getValue()) {
+													var height = parseInt(this.getValue()) || 0;
+
+													if (height === 0) {
+														alert(editor.lang.youtube.invalidHeight);
+														return false;
+													}
+												}
+												else {
+													alert(editor.lang.youtube.noHeight);
+													return false;
+												}
+											}
+										}
+									]
+								},
+								{
+									type : 'hbox',
+									widths : [ '55%', '45%' ],
+									children :
+										[
+											{
+												id : 'chkResponsive',
+												type : 'checkbox',
+												label : editor.lang.youtube.txtResponsive,
+												'default' : editor.config.youtube_responsive != null ? editor.config.youtube_responsive : false
+											},
+											{
+												id : 'chkNoEmbed',
+												type : 'checkbox',
+												label : editor.lang.youtube.txtNoEmbed,
+												'default' : editor.config.youtube_noembed != null ? editor.config.youtube_noembed : false
+											}
+										]
+								},
+								{
+									type : 'hbox',
+									widths : [ '55%', '45%' ],
+									children :
+									[
+										{
+											id : 'chkRelated',
+											type : 'checkbox',
+											'default' : editor.config.youtube_related != null ? editor.config.youtube_related : true,
+											label : editor.lang.youtube.chkRelated
+										},
+										{
+											id : 'chkOlderCode',
+											type : 'checkbox',
+											'default' : editor.config.youtube_older != null ? editor.config.youtube_older : false,
+											label : editor.lang.youtube.chkOlderCode
+										}
+									]
+								},
+								{
+									type : 'hbox',
+									widths : [ '55%', '45%' ],
+									children :
+									[
+										{
+											id : 'chkPrivacy',
+											type : 'checkbox',
+											label : editor.lang.youtube.chkPrivacy,
+											'default' : editor.config.youtube_privacy != null ? editor.config.youtube_privacy : false
+										},
+										{
+											id : 'chkAutoplay',
+											type : 'checkbox',
+											'default' : editor.config.youtube_autoplay != null ? editor.config.youtube_autoplay : false,
+											label : editor.lang.youtube.chkAutoplay
+										}
+									]
+								},
+								{
+									type : 'hbox',
+									widths : [ '55%', '45%'],
+									children :
+									[
+										{
+											id : 'txtStartAt',
+											type : 'text',
+											label : editor.lang.youtube.txtStartAt,
+											validate : function () {
+												if (this.getValue()) {
+													var str = this.getValue();
+
+													if (!/^(?:(?:([01]?\d|2[0-3]):)?([0-5]?\d):)?([0-5]?\d)$/i.test(str)) {
+														alert(editor.lang.youtube.invalidTime);
+														return false;
+													}
+												}
+											}
+										},
+										{
+											id : 'chkControls',
+											type : 'checkbox',
+											'default' : editor.config.youtube_controls != null ? editor.config.youtube_controls : true,
+											label : editor.lang.youtube.chkControls
+										}
+									]
+								}
+							]
+						}
+					],
+					onOk: function()
+					{
+						var content = '';
+						var responsiveStyle = '';
+
+						if (this.getContentElement('youtubePlugin', 'txtEmbed').isEnabled()) {
+							content = this.getValueOf('youtubePlugin', 'txtEmbed');
+						}
+						else {
+							var url = 'https://', params = [], startSecs;
+							var width = this.getValueOf('youtubePlugin', 'txtWidth');
+							var height = this.getValueOf('youtubePlugin', 'txtHeight');
+
+							if (this.getContentElement('youtubePlugin', 'chkPrivacy').getValue() === true) {
+								url += 'www.youtube-nocookie.com/';
+							}
+							else {
+								url += 'www.youtube.com/';
+							}
+
+							url += 'embed/' + video;
+
+							if (this.getContentElement('youtubePlugin', 'chkRelated').getValue() === false) {
+								params.push('rel=0');
+							}
+
+							if (this.getContentElement('youtubePlugin', 'chkAutoplay').getValue() === true) {
+								params.push('autoplay=1');
+							}
+
+							if (this.getContentElement('youtubePlugin', 'chkControls').getValue() === false) {
+								params.push('controls=0');
+							}
+
+							startSecs = this.getValueOf('youtubePlugin', 'txtStartAt');
+
+							if (startSecs) {
+								var seconds = hmsToSeconds(startSecs);
+
+								params.push('start=' + seconds);
+							}
+
+							if (params.length > 0) {
+								url = url + '?' + params.join('&');
+							}
+
+							if (this.getContentElement('youtubePlugin', 'chkResponsive').getValue() === true) {
+								content += '<div class="youtube-embed-wrapper" style="position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden">';
+								responsiveStyle = 'style="position:absolute;top:0;left:0;width:100%;height:100%"';
+							}
+
+							if (this.getContentElement('youtubePlugin', 'chkOlderCode').getValue() === true) {
+								url = url.replace('embed/', 'v/');
+								url = url.replace(/&/g, '&amp;');
+
+								if (url.indexOf('?') === -1) {
+									url += '?';
+								}
+								else {
+									url += '&amp;';
+								}
+								url += 'hl=' + (this.getParentEditor().config.language ? this.getParentEditor().config.language : 'en') + '&amp;version=3';
+
+								content += '<object width="' + width + '" height="' + height + '" ' + responsiveStyle + '>';
+								content += '<param name="movie" value="' + url + '"></param>';
+								content += '<param name="allowFullScreen" value="true"></param>';
+								content += '<param name="allowscriptaccess" value="always"></param>';
+								content += '<embed src="' + url + '" type="application/x-shockwave-flash" ';
+								content += 'width="' + width + '" height="' + height + '" '+ responsiveStyle + ' allowscriptaccess="always" ';
+								content += 'allowfullscreen="true"></embed>';
+								content += '</object>';
+							}
+							else
+							if (this.getContentElement('youtubePlugin', 'chkNoEmbed').getValue() === true) {
+								var imgSrc = '//img.youtube.com/vi/' + video + '/sddefault.jpg';
+								content += '<a href="' + url + '" ><img width="' + width + '" height="' + height + '" src="' + imgSrc + '" '  + responsiveStyle + '/></a>';
+							}
+							else {
+								content += '<iframe width="' + width + '" height="' + height + '" src="' + url + '" ' + responsiveStyle;
+								content += 'frameborder="0" allowfullscreen></iframe>';
+							}
+
+							if (this.getContentElement('youtubePlugin', 'chkResponsive').getValue() === true) {
+								content += '</div>';
+							}
+						}
+
+						var element = CKEDITOR.dom.element.createFromHtml(content);
+						var instance = this.getParentEditor();
+						instance.insertElement(element);
+					}
+				};
+			});
+		}
+	});
+})();
+
+function handleLinkChange(el, api) {
+	var video = ytVidId(el.getValue());
+	var time = ytVidTime(el.getValue());
+
+	if (el.getValue().length > 0) {
+		el.getDialog().getContentElement('youtubePlugin', 'txtEmbed').disable();
+	}
+	else {
+		el.getDialog().getContentElement('youtubePlugin', 'txtEmbed').enable();
+	}
+
+	if (video && time) {
+		var seconds = timeParamToSeconds(time);
+		var hms = secondsToHms(seconds);
+		el.getDialog().getContentElement('youtubePlugin', 'txtStartAt').setValue(hms);
+	}
+}
+
+function handleEmbedChange(el, api) {
+	if (el.getValue().length > 0) {
+		el.getDialog().getContentElement('youtubePlugin', 'txtUrl').disable();
+	}
+	else {
+		el.getDialog().getContentElement('youtubePlugin', 'txtUrl').enable();
+	}
+}
+
+
+/**
+ * JavaScript function to match (and return) the video Id
+ * of any valid Youtube Url, given as input string.
+ * @author: Stephan Schmitz <eyecatchup@gmail.com>
+ * @url: http://stackoverflow.com/a/10315969/624466
+ */
+function ytVidId(url) {
+	var p = /^(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com\/(?:embed\/|v\/|watch\?v=|watch\?.+&v=))((\w|-){11})(?:\S+)?$/;
+	return (url.match(p)) ? RegExp.$1 : false;
+}
+
+/**
+ * Matches and returns time param in YouTube Urls.
+ */
+function ytVidTime(url) {
+	var p = /t=([0-9hms]+)/;
+	return (url.match(p)) ? RegExp.$1 : false;
+}
+
+/**
+ * Converts time in hms format to seconds only
+ */
+function hmsToSeconds(time) {
+	var arr = time.split(':'), s = 0, m = 1;
+
+	while (arr.length > 0) {
+		s += m * parseInt(arr.pop(), 10);
+		m *= 60;
+	}
+
+	return s;
+}
+
+/**
+ * Converts seconds to hms format
+ */
+function secondsToHms(seconds) {
+	var h = Math.floor(seconds / 3600);
+	var m = Math.floor((seconds / 60) % 60);
+	var s = seconds % 60;
+
+	var pad = function (n) {
+		n = String(n);
+		return n.length >= 2 ? n : "0" + n;
+	};
+
+	if (h > 0) {
+		return pad(h) + ':' + pad(m) + ':' + pad(s);
+	}
+	else {
+		return pad(m) + ':' + pad(s);
+	}
+}
+
+/**
+ * Converts time in youtube t-param format to seconds
+ */
+function timeParamToSeconds(param) {
+	var componentValue = function (si) {
+		var regex = new RegExp('(\\d+)' + si);
+		return param.match(regex) ? parseInt(RegExp.$1, 10) : 0;
+	};
+
+	return componentValue('h') * 3600
+		+ componentValue('m') * 60
+		+ componentValue('s');
+}
+
+/**
+ * Converts seconds into youtube t-param value, e.g. 1h4m30s
+ */
+function secondsToTimeParam(seconds) {
+	var h = Math.floor(seconds / 3600);
+	var m = Math.floor((seconds / 60) % 60);
+	var s = seconds % 60;
+	var param = '';
+
+	if (h > 0) {
+		param += h + 'h';
+	}
+
+	if (m > 0) {
+		param += m + 'm';
+	}
+
+	if (s > 0) {
+		param += s + 's';
+	}
+
+	return param;
+}
\ No newline at end of file
diff --git a/plugins/ckeditor4/zoom/plugin.js b/plugins/ckeditor4/zoom/plugin.js
new file mode 100644
index 0000000..dcca3a1
--- /dev/null
+++ b/plugins/ckeditor4/zoom/plugin.js
@@ -0,0 +1,109 @@
+/*
+ * @file Zoom plugin for CKEditor
+ * Copyright (C) 2008-2013 Alfonso Martínez de Lizarrondo
+ * Upgrade to CKEditor 4 sponsored by Solution architects gmbh
+ *
+ * == BEGIN LICENSE ==
+ *
+ * Licensed under the terms of any of the following licenses at your
+ * choice:
+ *
+ *  - GNU General Public License Version 2 or later (the "GPL")
+ *    http://www.gnu.org/licenses/gpl.html
+ *
+ *  - GNU Lesser General Public License Version 2.1 or later (the "LGPL")
+ *    http://www.gnu.org/licenses/lgpl.html
+ *
+ *  - Mozilla Public License Version 1.1 or later (the "MPL")
+ *    http://www.mozilla.org/MPL/MPL-1.1.html
+ *
+ * == END LICENSE ==
+ *
+ */
+
+CKEDITOR.plugins.add( 'zoom',
+{
+	requires : [ 'richcombo' ],
+
+	init : function( editor )
+	{
+		var config = editor.config;
+
+		// Inject basic sizing for the pane as the richCombo doesn't allow to specify it
+		var node = CKEDITOR.document.getHead().append( 'style' );
+		node.setAttribute( 'type', 'text/css' );
+		var content = '.cke_combopanel__zoom { height: 200px; width: 100px; }' +
+					'.cke_combo__zoom .cke_combo_text { width: 40px;}';
+
+		if ( CKEDITOR.env.ie && CKEDITOR.env.version<11 )
+			node.$.styleSheet.cssText = content;
+		else
+			node.$.innerHTML = content;
+
+		editor.ui.addRichCombo( 'Zoom',
+			{
+				label : 'Zoom',
+				title : 'Zoom',
+				multiSelect : false,
+				className : 'zoom',
+				modes:{wysiwyg:1,source:1 },
+
+				panel :
+				{
+					css : [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss )
+				},
+
+				init : function()
+				{
+					var zoomOptions = [50, 75, 100, 125, 150, 200, 400],
+						zoom;
+
+					this.startGroup( 'Zoom level' );
+					// Loop over the Array, adding all items to the combo.
+					for ( var i = 0 ; i < zoomOptions.length ; i++ )
+					{
+						zoom = zoomOptions[ i ];
+						// value, html, text
+						this.add( zoom + "", zoom + " %", zoom + " %" );
+					}
+					// Default value on first click
+					this.setValue("100", "100 %");
+				},
+
+				onClick : function( sValue )
+				{
+					var body = editor.editable().$;
+					var value = parseInt(sValue);
+
+					body.style.MozTransformOrigin = "top left";
+					body.style.MozTransform = "scale(" + (value/100)  + ")";
+
+					body.style.WebkitTransformOrigin = "top left";
+					body.style.WebkitTransform = "scale(" + (value/100)  + ")";
+
+					body.style.OTransformOrigin = "top left";
+					body.style.OTransform = "scale(" + (value/100)  + ")";
+
+					body.style.TransformOrigin = "top left";
+					body.style.Transform = "scale(" + (value/100)  + ")";
+					// IE
+					body.style.zoom = value/100;
+
+					this.setValue( sValue, sValue + " %");
+					this.lastValue = sValue;
+				},
+
+				onRender: function() {
+					editor.on( 'mode', function( ev ) {
+						// Restore zoom level after switching from Source mode
+						if (this.lastValue)
+							this.onClick( this.lastValue );
+
+					}, this );
+				}
+			});
+		// End of richCombo element
+
+	} //Init
+} );
+
diff --git a/plugins/dependencies.json b/plugins/dependencies.json
index a322df5..aed771e 100644
--- a/plugins/dependencies.json
+++ b/plugins/dependencies.json
@@ -85,5 +85,52 @@
   ],
   "colordialog": [
     "dialog"
+  ],
+  "autocorrect": [
+    "menubutton"
+  ],
+  "enhancecolorbutton": [
+    "panelbutton",
+    "floatpanel"
+  ],
+  "floating-tools": [
+    "toolbar"
+  ],
+  "symbol": [
+    "dialog"
+  ],
+  "loremipsum": [
+    "richcombo"
+  ],
+  "wordcount": [
+    "htmlwriter",
+    "notification",
+    "undo"
+  ],
+  "zoom": [
+    "richcombo"
+  ],
+  "ckawesome": [
+    "colordialog"
+  ],
+  "html5audio": [
+    "widget"
+  ],
+  "prism": [
+    "codesnippet"
+  ],
+  "pre": [
+    "widget",
+    "dialog"
+  ],
+  "cssanim": [
+    "contextmenu"
+  ],
+  "crossreference": [
+    "dialog",
+    "notification"
+  ],
+  "lineheight": [
+    "richcombo"
   ]
 }
\ No newline at end of file
-- 
GitLab