[
  {
    "path": "BlackStone/.gitattributes",
    "content": "# Auto detect text files and perform LF normalization\n* text=auto\n"
  },
  {
    "path": "BlackStone/assets/css/style.css",
    "content": "/*-------------------------------------------------------------------\n  ===== Table of Contents =====\n\n  * Bootstrap functions\n  * Template variables\n  * SCSS Compass Functions\n  * Boostrap Main SCSS\n  * Template mixins\n    + Animation Mixins\n    + Background Mixins\n    + Badge Mixins\n    + Button Mixins\n    + Miscellaneous Mixins\n    + BlockQuote Mixins\n    + Cards Mixins\n    + Color Functions Mixins\n    + Tooltips\n    + popovers\n  * Core Styles\n    + Reset Styles\n    + Fonts\n    + Functions\n    + Backgrounds\n    + Typography\n    + Miscellaneous\n    + Footer\n    + Layouts\n    + Utilities\n    + Demo styles\n  * Components\n    + Accordions\n    + Badges\n    + Bootstrap Alerts\n    + Boostrap Progress\n    + Buttons\n    + Breadcrumbs\n    + Cards\n    + Checkboxes and Radios\n    + Dropdowns\n    + Forms\n    + Google maps\n    + Icons\n    + Loaders\n    + Lists\n    + Modals\n    + Pagination\n    + Popover\n    + Preview\n    + Tables\n    + Tabs\n    + Timeline\n    + Todo List\n    + Tooltips\n    + User Profile\n    + Pricing table\n  * Email\n    + Mail Sidebar\n    + Mail List Container\n    + Message Content\n  * Plugin Overrides\n    + Ace Editor\n    + Avgrund Popup\n    + Bootstrap Tour\n    + Chartist\n    + CodeMirror\n    + Colcade\n    + Colorpicker\n    + Context Menu\n    + Data Tables\n    + Datepicker\n    + Dropify\n    + Dropzone\n    + Flot chart\n    + Full Calendar\n    + Google Charts\n    + Icheck\n    + Jquery File Upload\n    + Js-grid\n    + Jvectormap\n    + Light Gallery\n    + Listify\n    + No-ui-slider\n    + Owl-carousel\n    + Progressbar-js\n    + Pws-tabs\n    + Quill Editor\n    + Rating\n    + Select2\n    + Summernote Editor\n    + SweetAlert\n    + Switchery\n    + Tags\n    + TinyMCE Editor\n    + Toast\n    + Typeahead\n    + Wysi Editor\n    + X-editable\n    + Wizard\n  * Landing screens\n    + Auth\n    + Lock Screen\n-------------------------------------------------------------------*/\n/*-------------------------------------------------------------------*/\n/* === Import Bootstrap functions and variables === */\n/*-------------------------------------------------------------------*/\n/* === Import template variables === */\n/*-------------------------------------------------------------------*/\n/* === SCSS Compass Functions === */\n@-moz-keyframes flash {\n  0% {\n    opacity: 1; }\n  25% {\n    opacity: 0; }\n  50% {\n    opacity: 1; }\n  75% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-webkit-keyframes flash {\n  0% {\n    opacity: 1; }\n  25% {\n    opacity: 0; }\n  50% {\n    opacity: 1; }\n  75% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-o-keyframes flash {\n  0% {\n    opacity: 1; }\n  25% {\n    opacity: 0; }\n  50% {\n    opacity: 1; }\n  75% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-ms-keyframes flash {\n  0% {\n    opacity: 1; }\n  25% {\n    opacity: 0; }\n  50% {\n    opacity: 1; }\n  75% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@keyframes flash {\n  0% {\n    opacity: 1; }\n  25% {\n    opacity: 0; }\n  50% {\n    opacity: 1; }\n  75% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-moz-keyframes bounce {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  40% {\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  50% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  60% {\n    -webkit-transform: translateY(-15px);\n    -moz-transform: translateY(-15px);\n    -ms-transform: translateY(-15px);\n    -o-transform: translateY(-15px);\n    transform: translateY(-15px); }\n  80% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-webkit-keyframes bounce {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  40% {\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  50% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  60% {\n    -webkit-transform: translateY(-15px);\n    -moz-transform: translateY(-15px);\n    -ms-transform: translateY(-15px);\n    -o-transform: translateY(-15px);\n    transform: translateY(-15px); }\n  80% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-o-keyframes bounce {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  40% {\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  50% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  60% {\n    -webkit-transform: translateY(-15px);\n    -moz-transform: translateY(-15px);\n    -ms-transform: translateY(-15px);\n    -o-transform: translateY(-15px);\n    transform: translateY(-15px); }\n  80% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-ms-keyframes bounce {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  40% {\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  50% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  60% {\n    -webkit-transform: translateY(-15px);\n    -moz-transform: translateY(-15px);\n    -ms-transform: translateY(-15px);\n    -o-transform: translateY(-15px);\n    transform: translateY(-15px); }\n  80% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@keyframes bounce {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  40% {\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  50% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  60% {\n    -webkit-transform: translateY(-15px);\n    -moz-transform: translateY(-15px);\n    -ms-transform: translateY(-15px);\n    -o-transform: translateY(-15px);\n    transform: translateY(-15px); }\n  80% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-moz-keyframes shake {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  10% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  20% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  30% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  40% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  50% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  60% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  70% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  90% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-webkit-keyframes shake {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  10% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  20% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  30% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  40% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  50% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  60% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  70% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  90% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-o-keyframes shake {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  10% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  20% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  30% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  40% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  50% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  60% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  70% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  90% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-ms-keyframes shake {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  10% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  20% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  30% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  40% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  50% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  60% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  70% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  90% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@keyframes shake {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  10% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  20% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  30% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  40% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  50% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  60% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  70% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  90% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-moz-keyframes tada {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  10% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  30% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  40% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  50% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  60% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  70% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    -moz-transform: scale(1) rotate(0);\n    -ms-transform: scale(1) rotate(0);\n    -o-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0); } }\n\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  10% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  30% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  40% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  50% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  60% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  70% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    -moz-transform: scale(1) rotate(0);\n    -ms-transform: scale(1) rotate(0);\n    -o-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0); } }\n\n@-o-keyframes tada {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  10% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  30% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  40% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  50% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  60% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  70% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    -moz-transform: scale(1) rotate(0);\n    -ms-transform: scale(1) rotate(0);\n    -o-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0); } }\n\n@-ms-keyframes tada {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  10% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  30% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  40% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  50% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  60% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  70% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    -moz-transform: scale(1) rotate(0);\n    -ms-transform: scale(1) rotate(0);\n    -o-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0); } }\n\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  10% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    -moz-transform: scale(0.9) rotate(-3deg);\n    -ms-transform: scale(0.9) rotate(-3deg);\n    -o-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg); }\n  30% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  40% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  50% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  60% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  70% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    -moz-transform: scale(1.1) rotate(-3deg);\n    -ms-transform: scale(1.1) rotate(-3deg);\n    -o-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg); }\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    -moz-transform: scale(1.1) rotate(3deg);\n    -ms-transform: scale(1.1) rotate(3deg);\n    -o-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg); }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    -moz-transform: scale(1) rotate(0);\n    -ms-transform: scale(1) rotate(0);\n    -o-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0); } }\n\n@-moz-keyframes swing {\n  20%, 40%, 60%, 80%, 100% {\n    -webkit-transform-origin: top center 50%;\n    -moz-transform-origin: top center 50%;\n    -ms-transform-origin: top center 50%;\n    -o-transform-origin: top center 50%;\n    transform-origin: top center 50%; }\n  20% {\n    -webkit-transform: rotate(15deg);\n    -moz-transform: rotate(15deg);\n    -ms-transform: rotate(15deg);\n    -o-transform: rotate(15deg);\n    transform: rotate(15deg); }\n  40% {\n    -webkit-transform: rotate(-10deg);\n    -moz-transform: rotate(-10deg);\n    -ms-transform: rotate(-10deg);\n    -o-transform: rotate(-10deg);\n    transform: rotate(-10deg); }\n  60% {\n    -webkit-transform: rotate(5deg);\n    -moz-transform: rotate(5deg);\n    -ms-transform: rotate(5deg);\n    -o-transform: rotate(5deg);\n    transform: rotate(5deg); }\n  80% {\n    -webkit-transform: rotate(-5deg);\n    -moz-transform: rotate(-5deg);\n    -ms-transform: rotate(-5deg);\n    -o-transform: rotate(-5deg);\n    transform: rotate(-5deg); }\n  100% {\n    -webkit-transform: rotate(0deg);\n    -moz-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    transform: rotate(0deg); } }\n\n@-webkit-keyframes swing {\n  20%, 40%, 60%, 80%, 100% {\n    -webkit-transform-origin: top center 50%;\n    -moz-transform-origin: top center 50%;\n    -ms-transform-origin: top center 50%;\n    -o-transform-origin: top center 50%;\n    transform-origin: top center 50%; }\n  20% {\n    -webkit-transform: rotate(15deg);\n    -moz-transform: rotate(15deg);\n    -ms-transform: rotate(15deg);\n    -o-transform: rotate(15deg);\n    transform: rotate(15deg); }\n  40% {\n    -webkit-transform: rotate(-10deg);\n    -moz-transform: rotate(-10deg);\n    -ms-transform: rotate(-10deg);\n    -o-transform: rotate(-10deg);\n    transform: rotate(-10deg); }\n  60% {\n    -webkit-transform: rotate(5deg);\n    -moz-transform: rotate(5deg);\n    -ms-transform: rotate(5deg);\n    -o-transform: rotate(5deg);\n    transform: rotate(5deg); }\n  80% {\n    -webkit-transform: rotate(-5deg);\n    -moz-transform: rotate(-5deg);\n    -ms-transform: rotate(-5deg);\n    -o-transform: rotate(-5deg);\n    transform: rotate(-5deg); }\n  100% {\n    -webkit-transform: rotate(0deg);\n    -moz-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    transform: rotate(0deg); } }\n\n@-o-keyframes swing {\n  20%, 40%, 60%, 80%, 100% {\n    -webkit-transform-origin: top center 50%;\n    -moz-transform-origin: top center 50%;\n    -ms-transform-origin: top center 50%;\n    -o-transform-origin: top center 50%;\n    transform-origin: top center 50%; }\n  20% {\n    -webkit-transform: rotate(15deg);\n    -moz-transform: rotate(15deg);\n    -ms-transform: rotate(15deg);\n    -o-transform: rotate(15deg);\n    transform: rotate(15deg); }\n  40% {\n    -webkit-transform: rotate(-10deg);\n    -moz-transform: rotate(-10deg);\n    -ms-transform: rotate(-10deg);\n    -o-transform: rotate(-10deg);\n    transform: rotate(-10deg); }\n  60% {\n    -webkit-transform: rotate(5deg);\n    -moz-transform: rotate(5deg);\n    -ms-transform: rotate(5deg);\n    -o-transform: rotate(5deg);\n    transform: rotate(5deg); }\n  80% {\n    -webkit-transform: rotate(-5deg);\n    -moz-transform: rotate(-5deg);\n    -ms-transform: rotate(-5deg);\n    -o-transform: rotate(-5deg);\n    transform: rotate(-5deg); }\n  100% {\n    -webkit-transform: rotate(0deg);\n    -moz-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    transform: rotate(0deg); } }\n\n@-ms-keyframes swing {\n  20%, 40%, 60%, 80%, 100% {\n    -webkit-transform-origin: top center 50%;\n    -moz-transform-origin: top center 50%;\n    -ms-transform-origin: top center 50%;\n    -o-transform-origin: top center 50%;\n    transform-origin: top center 50%; }\n  20% {\n    -webkit-transform: rotate(15deg);\n    -moz-transform: rotate(15deg);\n    -ms-transform: rotate(15deg);\n    -o-transform: rotate(15deg);\n    transform: rotate(15deg); }\n  40% {\n    -webkit-transform: rotate(-10deg);\n    -moz-transform: rotate(-10deg);\n    -ms-transform: rotate(-10deg);\n    -o-transform: rotate(-10deg);\n    transform: rotate(-10deg); }\n  60% {\n    -webkit-transform: rotate(5deg);\n    -moz-transform: rotate(5deg);\n    -ms-transform: rotate(5deg);\n    -o-transform: rotate(5deg);\n    transform: rotate(5deg); }\n  80% {\n    -webkit-transform: rotate(-5deg);\n    -moz-transform: rotate(-5deg);\n    -ms-transform: rotate(-5deg);\n    -o-transform: rotate(-5deg);\n    transform: rotate(-5deg); }\n  100% {\n    -webkit-transform: rotate(0deg);\n    -moz-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    transform: rotate(0deg); } }\n\n@keyframes swing {\n  20%, 40%, 60%, 80%, 100% {\n    -webkit-transform-origin: top center 50%;\n    -moz-transform-origin: top center 50%;\n    -ms-transform-origin: top center 50%;\n    -o-transform-origin: top center 50%;\n    transform-origin: top center 50%; }\n  20% {\n    -webkit-transform: rotate(15deg);\n    -moz-transform: rotate(15deg);\n    -ms-transform: rotate(15deg);\n    -o-transform: rotate(15deg);\n    transform: rotate(15deg); }\n  40% {\n    -webkit-transform: rotate(-10deg);\n    -moz-transform: rotate(-10deg);\n    -ms-transform: rotate(-10deg);\n    -o-transform: rotate(-10deg);\n    transform: rotate(-10deg); }\n  60% {\n    -webkit-transform: rotate(5deg);\n    -moz-transform: rotate(5deg);\n    -ms-transform: rotate(5deg);\n    -o-transform: rotate(5deg);\n    transform: rotate(5deg); }\n  80% {\n    -webkit-transform: rotate(-5deg);\n    -moz-transform: rotate(-5deg);\n    -ms-transform: rotate(-5deg);\n    -o-transform: rotate(-5deg);\n    transform: rotate(-5deg); }\n  100% {\n    -webkit-transform: rotate(0deg);\n    -moz-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    transform: rotate(0deg); } }\n\n@-moz-keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); }\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    -moz-transform: translateX(-25%) rotate(-5deg);\n    -ms-transform: translateX(-25%) rotate(-5deg);\n    -o-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg); }\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    -moz-transform: translateX(20%) rotate(3deg);\n    -ms-transform: translateX(20%) rotate(3deg);\n    -o-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg); }\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    -moz-transform: translateX(-15%) rotate(-3deg);\n    -ms-transform: translateX(-15%) rotate(-3deg);\n    -o-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg); }\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    -moz-transform: translateX(10%) rotate(2deg);\n    -ms-transform: translateX(10%) rotate(2deg);\n    -o-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg); }\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    -moz-transform: translateX(-5%) rotate(-1deg);\n    -ms-transform: translateX(-5%) rotate(-1deg);\n    -o-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg); }\n  100% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); } }\n\n@-webkit-keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); }\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    -moz-transform: translateX(-25%) rotate(-5deg);\n    -ms-transform: translateX(-25%) rotate(-5deg);\n    -o-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg); }\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    -moz-transform: translateX(20%) rotate(3deg);\n    -ms-transform: translateX(20%) rotate(3deg);\n    -o-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg); }\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    -moz-transform: translateX(-15%) rotate(-3deg);\n    -ms-transform: translateX(-15%) rotate(-3deg);\n    -o-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg); }\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    -moz-transform: translateX(10%) rotate(2deg);\n    -ms-transform: translateX(10%) rotate(2deg);\n    -o-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg); }\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    -moz-transform: translateX(-5%) rotate(-1deg);\n    -ms-transform: translateX(-5%) rotate(-1deg);\n    -o-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg); }\n  100% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); } }\n\n@-o-keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); }\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    -moz-transform: translateX(-25%) rotate(-5deg);\n    -ms-transform: translateX(-25%) rotate(-5deg);\n    -o-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg); }\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    -moz-transform: translateX(20%) rotate(3deg);\n    -ms-transform: translateX(20%) rotate(3deg);\n    -o-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg); }\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    -moz-transform: translateX(-15%) rotate(-3deg);\n    -ms-transform: translateX(-15%) rotate(-3deg);\n    -o-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg); }\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    -moz-transform: translateX(10%) rotate(2deg);\n    -ms-transform: translateX(10%) rotate(2deg);\n    -o-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg); }\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    -moz-transform: translateX(-5%) rotate(-1deg);\n    -ms-transform: translateX(-5%) rotate(-1deg);\n    -o-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg); }\n  100% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); } }\n\n@-ms-keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); }\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    -moz-transform: translateX(-25%) rotate(-5deg);\n    -ms-transform: translateX(-25%) rotate(-5deg);\n    -o-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg); }\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    -moz-transform: translateX(20%) rotate(3deg);\n    -ms-transform: translateX(20%) rotate(3deg);\n    -o-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg); }\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    -moz-transform: translateX(-15%) rotate(-3deg);\n    -ms-transform: translateX(-15%) rotate(-3deg);\n    -o-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg); }\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    -moz-transform: translateX(10%) rotate(2deg);\n    -ms-transform: translateX(10%) rotate(2deg);\n    -o-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg); }\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    -moz-transform: translateX(-5%) rotate(-1deg);\n    -ms-transform: translateX(-5%) rotate(-1deg);\n    -o-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg); }\n  100% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); } }\n\n@keyframes wobble {\n  0% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); }\n  15% {\n    -webkit-transform: translateX(-25%) rotate(-5deg);\n    -moz-transform: translateX(-25%) rotate(-5deg);\n    -ms-transform: translateX(-25%) rotate(-5deg);\n    -o-transform: translateX(-25%) rotate(-5deg);\n    transform: translateX(-25%) rotate(-5deg); }\n  30% {\n    -webkit-transform: translateX(20%) rotate(3deg);\n    -moz-transform: translateX(20%) rotate(3deg);\n    -ms-transform: translateX(20%) rotate(3deg);\n    -o-transform: translateX(20%) rotate(3deg);\n    transform: translateX(20%) rotate(3deg); }\n  45% {\n    -webkit-transform: translateX(-15%) rotate(-3deg);\n    -moz-transform: translateX(-15%) rotate(-3deg);\n    -ms-transform: translateX(-15%) rotate(-3deg);\n    -o-transform: translateX(-15%) rotate(-3deg);\n    transform: translateX(-15%) rotate(-3deg); }\n  60% {\n    -webkit-transform: translateX(10%) rotate(2deg);\n    -moz-transform: translateX(10%) rotate(2deg);\n    -ms-transform: translateX(10%) rotate(2deg);\n    -o-transform: translateX(10%) rotate(2deg);\n    transform: translateX(10%) rotate(2deg); }\n  75% {\n    -webkit-transform: translateX(-5%) rotate(-1deg);\n    -moz-transform: translateX(-5%) rotate(-1deg);\n    -ms-transform: translateX(-5%) rotate(-1deg);\n    -o-transform: translateX(-5%) rotate(-1deg);\n    transform: translateX(-5%) rotate(-1deg); }\n  100% {\n    -webkit-transform: translateX(0%);\n    -moz-transform: translateX(0%);\n    -ms-transform: translateX(0%);\n    -o-transform: translateX(0%);\n    transform: translateX(0%); } }\n\n@-moz-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-o-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-ms-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  50% {\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-moz-keyframes wiggle {\n  0% {\n    -webkit-transform: skewX(9deg);\n    -moz-transform: skewX(9deg);\n    -ms-transform: skewX(9deg);\n    -o-transform: skewX(9deg);\n    transform: skewX(9deg); }\n  10% {\n    -webkit-transform: skewX(-8deg);\n    -moz-transform: skewX(-8deg);\n    -ms-transform: skewX(-8deg);\n    -o-transform: skewX(-8deg);\n    transform: skewX(-8deg); }\n  20% {\n    -webkit-transform: skewX(7deg);\n    -moz-transform: skewX(7deg);\n    -ms-transform: skewX(7deg);\n    -o-transform: skewX(7deg);\n    transform: skewX(7deg); }\n  30% {\n    -webkit-transform: skewX(-6deg);\n    -moz-transform: skewX(-6deg);\n    -ms-transform: skewX(-6deg);\n    -o-transform: skewX(-6deg);\n    transform: skewX(-6deg); }\n  40% {\n    -webkit-transform: skewX(5deg);\n    -moz-transform: skewX(5deg);\n    -ms-transform: skewX(5deg);\n    -o-transform: skewX(5deg);\n    transform: skewX(5deg); }\n  50% {\n    -webkit-transform: skewX(-4deg);\n    -moz-transform: skewX(-4deg);\n    -ms-transform: skewX(-4deg);\n    -o-transform: skewX(-4deg);\n    transform: skewX(-4deg); }\n  60% {\n    -webkit-transform: skewX(3deg);\n    -moz-transform: skewX(3deg);\n    -ms-transform: skewX(3deg);\n    -o-transform: skewX(3deg);\n    transform: skewX(3deg); }\n  70% {\n    -webkit-transform: skewX(-2deg);\n    -moz-transform: skewX(-2deg);\n    -ms-transform: skewX(-2deg);\n    -o-transform: skewX(-2deg);\n    transform: skewX(-2deg); }\n  80% {\n    -webkit-transform: skewX(1deg);\n    -moz-transform: skewX(1deg);\n    -ms-transform: skewX(1deg);\n    -o-transform: skewX(1deg);\n    transform: skewX(1deg); }\n  90% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); }\n  100% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); } }\n\n@-webkit-keyframes wiggle {\n  0% {\n    -webkit-transform: skewX(9deg);\n    -moz-transform: skewX(9deg);\n    -ms-transform: skewX(9deg);\n    -o-transform: skewX(9deg);\n    transform: skewX(9deg); }\n  10% {\n    -webkit-transform: skewX(-8deg);\n    -moz-transform: skewX(-8deg);\n    -ms-transform: skewX(-8deg);\n    -o-transform: skewX(-8deg);\n    transform: skewX(-8deg); }\n  20% {\n    -webkit-transform: skewX(7deg);\n    -moz-transform: skewX(7deg);\n    -ms-transform: skewX(7deg);\n    -o-transform: skewX(7deg);\n    transform: skewX(7deg); }\n  30% {\n    -webkit-transform: skewX(-6deg);\n    -moz-transform: skewX(-6deg);\n    -ms-transform: skewX(-6deg);\n    -o-transform: skewX(-6deg);\n    transform: skewX(-6deg); }\n  40% {\n    -webkit-transform: skewX(5deg);\n    -moz-transform: skewX(5deg);\n    -ms-transform: skewX(5deg);\n    -o-transform: skewX(5deg);\n    transform: skewX(5deg); }\n  50% {\n    -webkit-transform: skewX(-4deg);\n    -moz-transform: skewX(-4deg);\n    -ms-transform: skewX(-4deg);\n    -o-transform: skewX(-4deg);\n    transform: skewX(-4deg); }\n  60% {\n    -webkit-transform: skewX(3deg);\n    -moz-transform: skewX(3deg);\n    -ms-transform: skewX(3deg);\n    -o-transform: skewX(3deg);\n    transform: skewX(3deg); }\n  70% {\n    -webkit-transform: skewX(-2deg);\n    -moz-transform: skewX(-2deg);\n    -ms-transform: skewX(-2deg);\n    -o-transform: skewX(-2deg);\n    transform: skewX(-2deg); }\n  80% {\n    -webkit-transform: skewX(1deg);\n    -moz-transform: skewX(1deg);\n    -ms-transform: skewX(1deg);\n    -o-transform: skewX(1deg);\n    transform: skewX(1deg); }\n  90% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); }\n  100% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); } }\n\n@-o-keyframes wiggle {\n  0% {\n    -webkit-transform: skewX(9deg);\n    -moz-transform: skewX(9deg);\n    -ms-transform: skewX(9deg);\n    -o-transform: skewX(9deg);\n    transform: skewX(9deg); }\n  10% {\n    -webkit-transform: skewX(-8deg);\n    -moz-transform: skewX(-8deg);\n    -ms-transform: skewX(-8deg);\n    -o-transform: skewX(-8deg);\n    transform: skewX(-8deg); }\n  20% {\n    -webkit-transform: skewX(7deg);\n    -moz-transform: skewX(7deg);\n    -ms-transform: skewX(7deg);\n    -o-transform: skewX(7deg);\n    transform: skewX(7deg); }\n  30% {\n    -webkit-transform: skewX(-6deg);\n    -moz-transform: skewX(-6deg);\n    -ms-transform: skewX(-6deg);\n    -o-transform: skewX(-6deg);\n    transform: skewX(-6deg); }\n  40% {\n    -webkit-transform: skewX(5deg);\n    -moz-transform: skewX(5deg);\n    -ms-transform: skewX(5deg);\n    -o-transform: skewX(5deg);\n    transform: skewX(5deg); }\n  50% {\n    -webkit-transform: skewX(-4deg);\n    -moz-transform: skewX(-4deg);\n    -ms-transform: skewX(-4deg);\n    -o-transform: skewX(-4deg);\n    transform: skewX(-4deg); }\n  60% {\n    -webkit-transform: skewX(3deg);\n    -moz-transform: skewX(3deg);\n    -ms-transform: skewX(3deg);\n    -o-transform: skewX(3deg);\n    transform: skewX(3deg); }\n  70% {\n    -webkit-transform: skewX(-2deg);\n    -moz-transform: skewX(-2deg);\n    -ms-transform: skewX(-2deg);\n    -o-transform: skewX(-2deg);\n    transform: skewX(-2deg); }\n  80% {\n    -webkit-transform: skewX(1deg);\n    -moz-transform: skewX(1deg);\n    -ms-transform: skewX(1deg);\n    -o-transform: skewX(1deg);\n    transform: skewX(1deg); }\n  90% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); }\n  100% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); } }\n\n@-ms-keyframes wiggle {\n  0% {\n    -webkit-transform: skewX(9deg);\n    -moz-transform: skewX(9deg);\n    -ms-transform: skewX(9deg);\n    -o-transform: skewX(9deg);\n    transform: skewX(9deg); }\n  10% {\n    -webkit-transform: skewX(-8deg);\n    -moz-transform: skewX(-8deg);\n    -ms-transform: skewX(-8deg);\n    -o-transform: skewX(-8deg);\n    transform: skewX(-8deg); }\n  20% {\n    -webkit-transform: skewX(7deg);\n    -moz-transform: skewX(7deg);\n    -ms-transform: skewX(7deg);\n    -o-transform: skewX(7deg);\n    transform: skewX(7deg); }\n  30% {\n    -webkit-transform: skewX(-6deg);\n    -moz-transform: skewX(-6deg);\n    -ms-transform: skewX(-6deg);\n    -o-transform: skewX(-6deg);\n    transform: skewX(-6deg); }\n  40% {\n    -webkit-transform: skewX(5deg);\n    -moz-transform: skewX(5deg);\n    -ms-transform: skewX(5deg);\n    -o-transform: skewX(5deg);\n    transform: skewX(5deg); }\n  50% {\n    -webkit-transform: skewX(-4deg);\n    -moz-transform: skewX(-4deg);\n    -ms-transform: skewX(-4deg);\n    -o-transform: skewX(-4deg);\n    transform: skewX(-4deg); }\n  60% {\n    -webkit-transform: skewX(3deg);\n    -moz-transform: skewX(3deg);\n    -ms-transform: skewX(3deg);\n    -o-transform: skewX(3deg);\n    transform: skewX(3deg); }\n  70% {\n    -webkit-transform: skewX(-2deg);\n    -moz-transform: skewX(-2deg);\n    -ms-transform: skewX(-2deg);\n    -o-transform: skewX(-2deg);\n    transform: skewX(-2deg); }\n  80% {\n    -webkit-transform: skewX(1deg);\n    -moz-transform: skewX(1deg);\n    -ms-transform: skewX(1deg);\n    -o-transform: skewX(1deg);\n    transform: skewX(1deg); }\n  90% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); }\n  100% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); } }\n\n@keyframes wiggle {\n  0% {\n    -webkit-transform: skewX(9deg);\n    -moz-transform: skewX(9deg);\n    -ms-transform: skewX(9deg);\n    -o-transform: skewX(9deg);\n    transform: skewX(9deg); }\n  10% {\n    -webkit-transform: skewX(-8deg);\n    -moz-transform: skewX(-8deg);\n    -ms-transform: skewX(-8deg);\n    -o-transform: skewX(-8deg);\n    transform: skewX(-8deg); }\n  20% {\n    -webkit-transform: skewX(7deg);\n    -moz-transform: skewX(7deg);\n    -ms-transform: skewX(7deg);\n    -o-transform: skewX(7deg);\n    transform: skewX(7deg); }\n  30% {\n    -webkit-transform: skewX(-6deg);\n    -moz-transform: skewX(-6deg);\n    -ms-transform: skewX(-6deg);\n    -o-transform: skewX(-6deg);\n    transform: skewX(-6deg); }\n  40% {\n    -webkit-transform: skewX(5deg);\n    -moz-transform: skewX(5deg);\n    -ms-transform: skewX(5deg);\n    -o-transform: skewX(5deg);\n    transform: skewX(5deg); }\n  50% {\n    -webkit-transform: skewX(-4deg);\n    -moz-transform: skewX(-4deg);\n    -ms-transform: skewX(-4deg);\n    -o-transform: skewX(-4deg);\n    transform: skewX(-4deg); }\n  60% {\n    -webkit-transform: skewX(3deg);\n    -moz-transform: skewX(3deg);\n    -ms-transform: skewX(3deg);\n    -o-transform: skewX(3deg);\n    transform: skewX(3deg); }\n  70% {\n    -webkit-transform: skewX(-2deg);\n    -moz-transform: skewX(-2deg);\n    -ms-transform: skewX(-2deg);\n    -o-transform: skewX(-2deg);\n    transform: skewX(-2deg); }\n  80% {\n    -webkit-transform: skewX(1deg);\n    -moz-transform: skewX(1deg);\n    -ms-transform: skewX(1deg);\n    -o-transform: skewX(1deg);\n    transform: skewX(1deg); }\n  90% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); }\n  100% {\n    -webkit-transform: skewX(0deg);\n    -moz-transform: skewX(0deg);\n    -ms-transform: skewX(0deg);\n    -o-transform: skewX(0deg);\n    transform: skewX(0deg); } }\n\n@-moz-keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  25% {\n    -webkit-transform: scale(0.95, 0.95);\n    -moz-transform: scale(0.95, 0.95);\n    -ms-transform: scale(0.95, 0.95);\n    -o-transform: scale(0.95, 0.95);\n    transform: scale(0.95, 0.95); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); } }\n\n@-webkit-keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  25% {\n    -webkit-transform: scale(0.95, 0.95);\n    -moz-transform: scale(0.95, 0.95);\n    -ms-transform: scale(0.95, 0.95);\n    -o-transform: scale(0.95, 0.95);\n    transform: scale(0.95, 0.95); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); } }\n\n@-o-keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  25% {\n    -webkit-transform: scale(0.95, 0.95);\n    -moz-transform: scale(0.95, 0.95);\n    -ms-transform: scale(0.95, 0.95);\n    -o-transform: scale(0.95, 0.95);\n    transform: scale(0.95, 0.95); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); } }\n\n@-ms-keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  25% {\n    -webkit-transform: scale(0.95, 0.95);\n    -moz-transform: scale(0.95, 0.95);\n    -ms-transform: scale(0.95, 0.95);\n    -o-transform: scale(0.95, 0.95);\n    transform: scale(0.95, 0.95); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); } }\n\n@keyframes bounceOut {\n  0% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); }\n  25% {\n    -webkit-transform: scale(0.95, 0.95);\n    -moz-transform: scale(0.95, 0.95);\n    -ms-transform: scale(0.95, 0.95);\n    -o-transform: scale(0.95, 0.95);\n    transform: scale(0.95, 0.95); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.1, 1.1);\n    -moz-transform: scale(1.1, 1.1);\n    -ms-transform: scale(1.1, 1.1);\n    -o-transform: scale(1.1, 1.1);\n    transform: scale(1.1, 1.1); }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); } }\n\n@-moz-keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); } }\n\n@-webkit-keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); } }\n\n@-o-keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); } }\n\n@-ms-keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); } }\n\n@keyframes bounceOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); } }\n\n@-moz-keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-webkit-keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-o-keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-ms-keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@keyframes bounceOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-moz-keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-webkit-keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-o-keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-ms-keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@keyframes bounceOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-moz-keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-webkit-keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-o-keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-ms-keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@keyframes bounceOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  20% {\n    opacity: 1;\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-moz-keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05, 1.05);\n    -moz-transform: scale(1.05, 1.05);\n    -ms-transform: scale(1.05, 1.05);\n    -o-transform: scale(1.05, 1.05);\n    transform: scale(1.05, 1.05); }\n  70% {\n    -webkit-transform: scale(0.9, 0.9);\n    -moz-transform: scale(0.9, 0.9);\n    -ms-transform: scale(0.9, 0.9);\n    -o-transform: scale(0.9, 0.9);\n    transform: scale(0.9, 0.9); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-webkit-keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05, 1.05);\n    -moz-transform: scale(1.05, 1.05);\n    -ms-transform: scale(1.05, 1.05);\n    -o-transform: scale(1.05, 1.05);\n    transform: scale(1.05, 1.05); }\n  70% {\n    -webkit-transform: scale(0.9, 0.9);\n    -moz-transform: scale(0.9, 0.9);\n    -ms-transform: scale(0.9, 0.9);\n    -o-transform: scale(0.9, 0.9);\n    transform: scale(0.9, 0.9); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-o-keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05, 1.05);\n    -moz-transform: scale(1.05, 1.05);\n    -ms-transform: scale(1.05, 1.05);\n    -o-transform: scale(1.05, 1.05);\n    transform: scale(1.05, 1.05); }\n  70% {\n    -webkit-transform: scale(0.9, 0.9);\n    -moz-transform: scale(0.9, 0.9);\n    -ms-transform: scale(0.9, 0.9);\n    -o-transform: scale(0.9, 0.9);\n    transform: scale(0.9, 0.9); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-ms-keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05, 1.05);\n    -moz-transform: scale(1.05, 1.05);\n    -ms-transform: scale(1.05, 1.05);\n    -o-transform: scale(1.05, 1.05);\n    transform: scale(1.05, 1.05); }\n  70% {\n    -webkit-transform: scale(0.9, 0.9);\n    -moz-transform: scale(0.9, 0.9);\n    -ms-transform: scale(0.9, 0.9);\n    -o-transform: scale(0.9, 0.9);\n    transform: scale(0.9, 0.9); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@keyframes bounceIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.3, 0.3);\n    -moz-transform: scale(0.3, 0.3);\n    -ms-transform: scale(0.3, 0.3);\n    -o-transform: scale(0.3, 0.3);\n    transform: scale(0.3, 0.3); }\n  50% {\n    opacity: 1;\n    -webkit-transform: scale(1.05, 1.05);\n    -moz-transform: scale(1.05, 1.05);\n    -ms-transform: scale(1.05, 1.05);\n    -o-transform: scale(1.05, 1.05);\n    transform: scale(1.05, 1.05); }\n  70% {\n    -webkit-transform: scale(0.9, 0.9);\n    -moz-transform: scale(0.9, 0.9);\n    -ms-transform: scale(0.9, 0.9);\n    -o-transform: scale(0.9, 0.9);\n    transform: scale(0.9, 0.9); }\n  100% {\n    -webkit-transform: scale(1, 1);\n    -moz-transform: scale(1, 1);\n    -ms-transform: scale(1, 1);\n    -o-transform: scale(1, 1);\n    transform: scale(1, 1); } }\n\n@-moz-keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    -moz-transform: translateY(30px);\n    -ms-transform: translateY(30px);\n    -o-transform: translateY(30px);\n    transform: translateY(30px); }\n  80% {\n    -webkit-transform: translateY(-10px);\n    -moz-transform: translateY(-10px);\n    -ms-transform: translateY(-10px);\n    -o-transform: translateY(-10px);\n    transform: translateY(-10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-webkit-keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    -moz-transform: translateY(30px);\n    -ms-transform: translateY(30px);\n    -o-transform: translateY(30px);\n    transform: translateY(30px); }\n  80% {\n    -webkit-transform: translateY(-10px);\n    -moz-transform: translateY(-10px);\n    -ms-transform: translateY(-10px);\n    -o-transform: translateY(-10px);\n    transform: translateY(-10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-o-keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    -moz-transform: translateY(30px);\n    -ms-transform: translateY(30px);\n    -o-transform: translateY(30px);\n    transform: translateY(30px); }\n  80% {\n    -webkit-transform: translateY(-10px);\n    -moz-transform: translateY(-10px);\n    -ms-transform: translateY(-10px);\n    -o-transform: translateY(-10px);\n    transform: translateY(-10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-ms-keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    -moz-transform: translateY(30px);\n    -ms-transform: translateY(30px);\n    -o-transform: translateY(30px);\n    transform: translateY(30px); }\n  80% {\n    -webkit-transform: translateY(-10px);\n    -moz-transform: translateY(-10px);\n    -ms-transform: translateY(-10px);\n    -o-transform: translateY(-10px);\n    transform: translateY(-10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@keyframes bounceInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(30px);\n    -moz-transform: translateY(30px);\n    -ms-transform: translateY(30px);\n    -o-transform: translateY(30px);\n    transform: translateY(30px); }\n  80% {\n    -webkit-transform: translateY(-10px);\n    -moz-transform: translateY(-10px);\n    -ms-transform: translateY(-10px);\n    -o-transform: translateY(-10px);\n    transform: translateY(-10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-moz-keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  80% {\n    -webkit-transform: translateY(10px);\n    -moz-transform: translateY(10px);\n    -ms-transform: translateY(10px);\n    -o-transform: translateY(10px);\n    transform: translateY(10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-webkit-keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  80% {\n    -webkit-transform: translateY(10px);\n    -moz-transform: translateY(10px);\n    -ms-transform: translateY(10px);\n    -o-transform: translateY(10px);\n    transform: translateY(10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-o-keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  80% {\n    -webkit-transform: translateY(10px);\n    -moz-transform: translateY(10px);\n    -ms-transform: translateY(10px);\n    -o-transform: translateY(10px);\n    transform: translateY(10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-ms-keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  80% {\n    -webkit-transform: translateY(10px);\n    -moz-transform: translateY(10px);\n    -ms-transform: translateY(10px);\n    -o-transform: translateY(10px);\n    transform: translateY(10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@keyframes bounceInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateY(-30px);\n    -moz-transform: translateY(-30px);\n    -ms-transform: translateY(-30px);\n    -o-transform: translateY(-30px);\n    transform: translateY(-30px); }\n  80% {\n    -webkit-transform: translateY(10px);\n    -moz-transform: translateY(10px);\n    -ms-transform: translateY(10px);\n    -o-transform: translateY(10px);\n    transform: translateY(10px); }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-moz-keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    -moz-transform: translateX(-30px);\n    -ms-transform: translateX(-30px);\n    -o-transform: translateX(-30px);\n    transform: translateX(-30px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-webkit-keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    -moz-transform: translateX(-30px);\n    -ms-transform: translateX(-30px);\n    -o-transform: translateX(-30px);\n    transform: translateX(-30px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-o-keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    -moz-transform: translateX(-30px);\n    -ms-transform: translateX(-30px);\n    -o-transform: translateX(-30px);\n    transform: translateX(-30px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-ms-keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    -moz-transform: translateX(-30px);\n    -ms-transform: translateX(-30px);\n    -o-transform: translateX(-30px);\n    transform: translateX(-30px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@keyframes bounceInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(-30px);\n    -moz-transform: translateX(-30px);\n    -ms-transform: translateX(-30px);\n    -o-transform: translateX(-30px);\n    transform: translateX(-30px); }\n  80% {\n    -webkit-transform: translateX(10px);\n    -moz-transform: translateX(10px);\n    -ms-transform: translateX(10px);\n    -o-transform: translateX(10px);\n    transform: translateX(10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-moz-keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    -moz-transform: translateX(30px);\n    -ms-transform: translateX(30px);\n    -o-transform: translateX(30px);\n    transform: translateX(30px); }\n  80% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-webkit-keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    -moz-transform: translateX(30px);\n    -ms-transform: translateX(30px);\n    -o-transform: translateX(30px);\n    transform: translateX(30px); }\n  80% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-o-keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    -moz-transform: translateX(30px);\n    -ms-transform: translateX(30px);\n    -o-transform: translateX(30px);\n    transform: translateX(30px); }\n  80% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-ms-keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    -moz-transform: translateX(30px);\n    -ms-transform: translateX(30px);\n    -o-transform: translateX(30px);\n    transform: translateX(30px); }\n  80% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@keyframes bounceInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  60% {\n    opacity: 1;\n    -webkit-transform: translateX(30px);\n    -moz-transform: translateX(30px);\n    -ms-transform: translateX(30px);\n    -o-transform: translateX(30px);\n    transform: translateX(30px); }\n  80% {\n    -webkit-transform: translateX(-10px);\n    -moz-transform: translateX(-10px);\n    -ms-transform: translateX(-10px);\n    -o-transform: translateX(-10px);\n    transform: translateX(-10px); }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-moz-keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-o-keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-ms-keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1; }\n  100% {\n    opacity: 0; } }\n\n@-moz-keyframes fadeOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; } }\n\n@-webkit-keyframes fadeOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; } }\n\n@-o-keyframes fadeOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; } }\n\n@-ms-keyframes fadeOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; } }\n\n@keyframes fadeOutUp {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; } }\n\n@-moz-keyframes fadeOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; } }\n\n@-webkit-keyframes fadeOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; } }\n\n@-o-keyframes fadeOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; } }\n\n@-ms-keyframes fadeOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; } }\n\n@keyframes fadeOutDown {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; } }\n\n@-moz-keyframes fadeOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; } }\n\n@-webkit-keyframes fadeOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; } }\n\n@-o-keyframes fadeOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; } }\n\n@-ms-keyframes fadeOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; } }\n\n@keyframes fadeOutRight {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; } }\n\n@-moz-keyframes fadeOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; } }\n\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; } }\n\n@-o-keyframes fadeOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; } }\n\n@-ms-keyframes fadeOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; } }\n\n@keyframes fadeOutLeft {\n  0% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; } }\n\n@-moz-keyframes fadeOutUpBig {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n    opacity: 0; } }\n\n@-webkit-keyframes fadeOutUpBig {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n    opacity: 0; } }\n\n@-o-keyframes fadeOutUpBig {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n    opacity: 0; } }\n\n@-ms-keyframes fadeOutUpBig {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n    opacity: 0; } }\n\n@keyframes fadeOutUpBig {\n  0% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px);\n    opacity: 0; } }\n\n@-moz-keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-webkit-keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-o-keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-ms-keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@keyframes fadeOutDownBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px); } }\n\n@-moz-keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-webkit-keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-o-keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-ms-keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@keyframes fadeOutRightBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); } }\n\n@-moz-keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-webkit-keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-o-keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-ms-keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@keyframes fadeOutLeftBig {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); } }\n\n@-moz-keyframes fadeIn {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-o-keyframes fadeIn {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-ms-keyframes fadeIn {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0; }\n  100% {\n    opacity: 1; } }\n\n@-moz-keyframes fadeInUp {\n  0% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-webkit-keyframes fadeInUp {\n  0% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-o-keyframes fadeInUp {\n  0% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-ms-keyframes fadeInUp {\n  0% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@keyframes fadeInUp {\n  0% {\n    -webkit-transform: translateY(20px);\n    -moz-transform: translateY(20px);\n    -ms-transform: translateY(20px);\n    -o-transform: translateY(20px);\n    transform: translateY(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-moz-keyframes fadeInDown {\n  0% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-webkit-keyframes fadeInDown {\n  0% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-o-keyframes fadeInDown {\n  0% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-ms-keyframes fadeInDown {\n  0% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@keyframes fadeInDown {\n  0% {\n    -webkit-transform: translateY(-20px);\n    -moz-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-moz-keyframes fadeInRight {\n  0% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-webkit-keyframes fadeInRight {\n  0% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-o-keyframes fadeInRight {\n  0% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-ms-keyframes fadeInRight {\n  0% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@keyframes fadeInRight {\n  0% {\n    -webkit-transform: translateX(20px);\n    -moz-transform: translateX(20px);\n    -ms-transform: translateX(20px);\n    -o-transform: translateX(20px);\n    transform: translateX(20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-moz-keyframes fadeInLeft {\n  0% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-webkit-keyframes fadeInLeft {\n  0% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-o-keyframes fadeInLeft {\n  0% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-ms-keyframes fadeInLeft {\n  0% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@keyframes fadeInLeft {\n  0% {\n    -webkit-transform: translateX(-20px);\n    -moz-transform: translateX(-20px);\n    -ms-transform: translateX(-20px);\n    -o-transform: translateX(-20px);\n    transform: translateX(-20px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0);\n    opacity: 1; } }\n\n@-moz-keyframes fadeInUpBig {\n  0% {\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-webkit-keyframes fadeInUpBig {\n  0% {\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-o-keyframes fadeInUpBig {\n  0% {\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-ms-keyframes fadeInUpBig {\n  0% {\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@keyframes fadeInUpBig {\n  0% {\n    -webkit-transform: translateY(2000px);\n    -moz-transform: translateY(2000px);\n    -ms-transform: translateY(2000px);\n    -o-transform: translateY(2000px);\n    transform: translateY(2000px);\n    opacity: 0; }\n  100% {\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0);\n    opacity: 1; } }\n\n@-moz-keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-webkit-keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-o-keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-ms-keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@keyframes fadeInDownBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-2000px);\n    -moz-transform: translateY(-2000px);\n    -ms-transform: translateY(-2000px);\n    -o-transform: translateY(-2000px);\n    transform: translateY(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0);\n    -moz-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); } }\n\n@-moz-keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-webkit-keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-o-keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-ms-keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@keyframes fadeInRightBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(2000px);\n    -moz-transform: translateX(2000px);\n    -ms-transform: translateX(2000px);\n    -o-transform: translateX(2000px);\n    transform: translateX(2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-moz-keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-webkit-keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-o-keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-ms-keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@keyframes fadeInLeftBig {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-2000px);\n    -moz-transform: translateX(-2000px);\n    -ms-transform: translateX(-2000px);\n    -o-transform: translateX(-2000px);\n    transform: translateX(-2000px); }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0);\n    -moz-transform: translateX(0);\n    -ms-transform: translateX(0);\n    -o-transform: translateX(0);\n    transform: translateX(0); } }\n\n@-moz-keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0);\n    -moz-transform: perspective(400px) rotateY(0);\n    -ms-transform: perspective(400px) rotateY(0);\n    -o-transform: perspective(400px) rotateY(0);\n    transform: perspective(400px) rotateY(0);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  80% {\n    -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -moz-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -ms-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -o-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  100% {\n    -webkit-transform: perspective(400px) scale(1);\n    -moz-transform: perspective(400px) scale(1);\n    -ms-transform: perspective(400px) scale(1);\n    -o-transform: perspective(400px) scale(1);\n    transform: perspective(400px) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; } }\n\n@-webkit-keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0);\n    -moz-transform: perspective(400px) rotateY(0);\n    -ms-transform: perspective(400px) rotateY(0);\n    -o-transform: perspective(400px) rotateY(0);\n    transform: perspective(400px) rotateY(0);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  80% {\n    -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -moz-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -ms-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -o-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  100% {\n    -webkit-transform: perspective(400px) scale(1);\n    -moz-transform: perspective(400px) scale(1);\n    -ms-transform: perspective(400px) scale(1);\n    -o-transform: perspective(400px) scale(1);\n    transform: perspective(400px) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; } }\n\n@-o-keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0);\n    -moz-transform: perspective(400px) rotateY(0);\n    -ms-transform: perspective(400px) rotateY(0);\n    -o-transform: perspective(400px) rotateY(0);\n    transform: perspective(400px) rotateY(0);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  80% {\n    -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -moz-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -ms-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -o-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  100% {\n    -webkit-transform: perspective(400px) scale(1);\n    -moz-transform: perspective(400px) scale(1);\n    -ms-transform: perspective(400px) scale(1);\n    -o-transform: perspective(400px) scale(1);\n    transform: perspective(400px) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; } }\n\n@-ms-keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0);\n    -moz-transform: perspective(400px) rotateY(0);\n    -ms-transform: perspective(400px) rotateY(0);\n    -o-transform: perspective(400px) rotateY(0);\n    transform: perspective(400px) rotateY(0);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  80% {\n    -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -moz-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -ms-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -o-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  100% {\n    -webkit-transform: perspective(400px) scale(1);\n    -moz-transform: perspective(400px) scale(1);\n    -ms-transform: perspective(400px) scale(1);\n    -o-transform: perspective(400px) scale(1);\n    transform: perspective(400px) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; } }\n\n@keyframes flip {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0);\n    -moz-transform: perspective(400px) rotateY(0);\n    -ms-transform: perspective(400px) rotateY(0);\n    -o-transform: perspective(400px) rotateY(0);\n    transform: perspective(400px) rotateY(0);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  40% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    transform: perspective(400px) translateZ(150px) rotateY(170deg);\n    -webkit-animation-timing-function: ease-out;\n    -moz-animation-timing-function: ease-out;\n    -ms-animation-timing-function: ease-out;\n    -o-animation-timing-function: ease-out;\n    animation-timing-function: ease-out; }\n  50% {\n    -webkit-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -moz-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -ms-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -o-transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    transform: perspective(400px) translateZ(150px) rotateY(190deg) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  80% {\n    -webkit-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -moz-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -ms-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -o-transform: perspective(400px) rotateY(360deg) scale(0.95);\n    transform: perspective(400px) rotateY(360deg) scale(0.95);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; }\n  100% {\n    -webkit-transform: perspective(400px) scale(1);\n    -moz-transform: perspective(400px) scale(1);\n    -ms-transform: perspective(400px) scale(1);\n    -o-transform: perspective(400px) scale(1);\n    transform: perspective(400px) scale(1);\n    -webkit-animation-timing-function: ease-in;\n    -moz-animation-timing-function: ease-in;\n    -ms-animation-timing-function: ease-in;\n    -o-animation-timing-function: ease-in;\n    animation-timing-function: ease-in; } }\n\n@-moz-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    -moz-transform: perspective(400px) rotateX(-10deg);\n    -ms-transform: perspective(400px) rotateX(-10deg);\n    -o-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    -moz-transform: perspective(400px) rotateX(10deg);\n    -ms-transform: perspective(400px) rotateX(10deg);\n    -o-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    -moz-transform: perspective(400px) rotateX(-10deg);\n    -ms-transform: perspective(400px) rotateX(-10deg);\n    -o-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    -moz-transform: perspective(400px) rotateX(10deg);\n    -ms-transform: perspective(400px) rotateX(10deg);\n    -o-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-o-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    -moz-transform: perspective(400px) rotateX(-10deg);\n    -ms-transform: perspective(400px) rotateX(-10deg);\n    -o-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    -moz-transform: perspective(400px) rotateX(10deg);\n    -ms-transform: perspective(400px) rotateX(10deg);\n    -o-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-ms-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    -moz-transform: perspective(400px) rotateX(-10deg);\n    -ms-transform: perspective(400px) rotateX(-10deg);\n    -o-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    -moz-transform: perspective(400px) rotateX(10deg);\n    -ms-transform: perspective(400px) rotateX(10deg);\n    -o-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateX(-10deg);\n    -moz-transform: perspective(400px) rotateX(-10deg);\n    -ms-transform: perspective(400px) rotateX(-10deg);\n    -o-transform: perspective(400px) rotateX(-10deg);\n    transform: perspective(400px) rotateX(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateX(10deg);\n    -moz-transform: perspective(400px) rotateX(10deg);\n    -ms-transform: perspective(400px) rotateX(10deg);\n    -o-transform: perspective(400px) rotateX(10deg);\n    transform: perspective(400px) rotateX(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-moz-keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-webkit-keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-o-keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-ms-keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@keyframes flipOutX {\n  0% {\n    -webkit-transform: perspective(400px) rotateX(0deg);\n    -moz-transform: perspective(400px) rotateX(0deg);\n    -ms-transform: perspective(400px) rotateX(0deg);\n    -o-transform: perspective(400px) rotateX(0deg);\n    transform: perspective(400px) rotateX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateX(90deg);\n    -moz-transform: perspective(400px) rotateX(90deg);\n    -ms-transform: perspective(400px) rotateX(90deg);\n    -o-transform: perspective(400px) rotateX(90deg);\n    transform: perspective(400px) rotateX(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-moz-keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    -moz-transform: perspective(400px) rotateY(-10deg);\n    -ms-transform: perspective(400px) rotateY(-10deg);\n    -o-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    -moz-transform: perspective(400px) rotateY(10deg);\n    -ms-transform: perspective(400px) rotateY(10deg);\n    -o-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-webkit-keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    -moz-transform: perspective(400px) rotateY(-10deg);\n    -ms-transform: perspective(400px) rotateY(-10deg);\n    -o-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    -moz-transform: perspective(400px) rotateY(10deg);\n    -ms-transform: perspective(400px) rotateY(10deg);\n    -o-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-o-keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    -moz-transform: perspective(400px) rotateY(-10deg);\n    -ms-transform: perspective(400px) rotateY(-10deg);\n    -o-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    -moz-transform: perspective(400px) rotateY(10deg);\n    -ms-transform: perspective(400px) rotateY(10deg);\n    -o-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-ms-keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    -moz-transform: perspective(400px) rotateY(-10deg);\n    -ms-transform: perspective(400px) rotateY(-10deg);\n    -o-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    -moz-transform: perspective(400px) rotateY(10deg);\n    -ms-transform: perspective(400px) rotateY(10deg);\n    -o-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@keyframes flipInY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  40% {\n    -webkit-transform: perspective(400px) rotateY(-10deg);\n    -moz-transform: perspective(400px) rotateY(-10deg);\n    -ms-transform: perspective(400px) rotateY(-10deg);\n    -o-transform: perspective(400px) rotateY(-10deg);\n    transform: perspective(400px) rotateY(-10deg); }\n  70% {\n    -webkit-transform: perspective(400px) rotateY(10deg);\n    -moz-transform: perspective(400px) rotateY(10deg);\n    -ms-transform: perspective(400px) rotateY(10deg);\n    -o-transform: perspective(400px) rotateY(10deg);\n    transform: perspective(400px) rotateY(10deg); }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-moz-keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-webkit-keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-o-keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-ms-keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@keyframes flipOutY {\n  0% {\n    -webkit-transform: perspective(400px) rotateY(0deg);\n    -moz-transform: perspective(400px) rotateY(0deg);\n    -ms-transform: perspective(400px) rotateY(0deg);\n    -o-transform: perspective(400px) rotateY(0deg);\n    transform: perspective(400px) rotateY(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: perspective(400px) rotateY(90deg);\n    -moz-transform: perspective(400px) rotateY(90deg);\n    -ms-transform: perspective(400px) rotateY(90deg);\n    -o-transform: perspective(400px) rotateY(90deg);\n    transform: perspective(400px) rotateY(90deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-moz-keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    -moz-transform: translateX(-20%) skewX(30deg);\n    -ms-transform: translateX(-20%) skewX(30deg);\n    -o-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    -moz-transform: translateX(0%) skewX(-15deg);\n    -ms-transform: translateX(0%) skewX(-15deg);\n    -o-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-webkit-keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    -moz-transform: translateX(-20%) skewX(30deg);\n    -ms-transform: translateX(-20%) skewX(30deg);\n    -o-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    -moz-transform: translateX(0%) skewX(-15deg);\n    -ms-transform: translateX(0%) skewX(-15deg);\n    -o-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-o-keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    -moz-transform: translateX(-20%) skewX(30deg);\n    -ms-transform: translateX(-20%) skewX(30deg);\n    -o-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    -moz-transform: translateX(0%) skewX(-15deg);\n    -ms-transform: translateX(0%) skewX(-15deg);\n    -o-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-ms-keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    -moz-transform: translateX(-20%) skewX(30deg);\n    -ms-transform: translateX(-20%) skewX(30deg);\n    -o-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    -moz-transform: translateX(0%) skewX(-15deg);\n    -ms-transform: translateX(0%) skewX(-15deg);\n    -o-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@keyframes lightSpeedIn {\n  0% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; }\n  60% {\n    -webkit-transform: translateX(-20%) skewX(30deg);\n    -moz-transform: translateX(-20%) skewX(30deg);\n    -ms-transform: translateX(-20%) skewX(30deg);\n    -o-transform: translateX(-20%) skewX(30deg);\n    transform: translateX(-20%) skewX(30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  80% {\n    -webkit-transform: translateX(0%) skewX(-15deg);\n    -moz-transform: translateX(0%) skewX(-15deg);\n    -ms-transform: translateX(0%) skewX(-15deg);\n    -o-transform: translateX(0%) skewX(-15deg);\n    transform: translateX(0%) skewX(-15deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; } }\n\n@-moz-keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-webkit-keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-o-keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-ms-keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@keyframes lightSpeedOut {\n  0% {\n    -webkit-transform: translateX(0%) skewX(0deg);\n    -moz-transform: translateX(0%) skewX(0deg);\n    -ms-transform: translateX(0%) skewX(0deg);\n    -o-transform: translateX(0%) skewX(0deg);\n    transform: translateX(0%) skewX(0deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1; }\n  100% {\n    -webkit-transform: translateX(100%) skewX(-30deg);\n    -moz-transform: translateX(100%) skewX(-30deg);\n    -ms-transform: translateX(100%) skewX(-30deg);\n    -o-transform: translateX(100%) skewX(-30deg);\n    transform: translateX(100%) skewX(-30deg);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-moz-keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(200deg);\n    -moz-transform: rotate(200deg);\n    -ms-transform: rotate(200deg);\n    -o-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0; } }\n\n@-webkit-keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(200deg);\n    -moz-transform: rotate(200deg);\n    -ms-transform: rotate(200deg);\n    -o-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0; } }\n\n@-o-keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(200deg);\n    -moz-transform: rotate(200deg);\n    -ms-transform: rotate(200deg);\n    -o-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0; } }\n\n@-ms-keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(200deg);\n    -moz-transform: rotate(200deg);\n    -ms-transform: rotate(200deg);\n    -o-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0; } }\n\n@keyframes rotateOut {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(200deg);\n    -moz-transform: rotate(200deg);\n    -ms-transform: rotate(200deg);\n    -o-transform: rotate(200deg);\n    transform: rotate(200deg);\n    opacity: 0; } }\n\n@-moz-keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-webkit-keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-o-keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-ms-keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@keyframes rotateOutDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-moz-keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-webkit-keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-o-keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-ms-keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@keyframes rotateOutUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-moz-keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-webkit-keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-o-keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-ms-keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@keyframes rotateOutDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; } }\n\n@-moz-keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-webkit-keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-o-keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-ms-keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@keyframes rotateOutUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; } }\n\n@-moz-keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(-200deg);\n    -moz-transform: rotate(-200deg);\n    -ms-transform: rotate(-200deg);\n    -o-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-webkit-keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(-200deg);\n    -moz-transform: rotate(-200deg);\n    -ms-transform: rotate(-200deg);\n    -o-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-o-keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(-200deg);\n    -moz-transform: rotate(-200deg);\n    -ms-transform: rotate(-200deg);\n    -o-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-ms-keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(-200deg);\n    -moz-transform: rotate(-200deg);\n    -ms-transform: rotate(-200deg);\n    -o-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@keyframes rotateIn {\n  0% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(-200deg);\n    -moz-transform: rotate(-200deg);\n    -ms-transform: rotate(-200deg);\n    -o-transform: rotate(-200deg);\n    transform: rotate(-200deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: center center 50%;\n    -moz-transform-origin: center center 50%;\n    -ms-transform-origin: center center 50%;\n    -o-transform-origin: center center 50%;\n    transform-origin: center center 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-moz-keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-webkit-keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-o-keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-ms-keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@keyframes rotateInDownLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-moz-keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-webkit-keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-o-keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-ms-keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@keyframes rotateInUpLeft {\n  0% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: left bottom 50%;\n    -moz-transform-origin: left bottom 50%;\n    -ms-transform-origin: left bottom 50%;\n    -o-transform-origin: left bottom 50%;\n    transform-origin: left bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-moz-keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-webkit-keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-o-keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-ms-keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@keyframes rotateInUpRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(-90deg);\n    -moz-transform: rotate(-90deg);\n    -ms-transform: rotate(-90deg);\n    -o-transform: rotate(-90deg);\n    transform: rotate(-90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-moz-keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-webkit-keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-o-keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-ms-keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@keyframes rotateInDownRight {\n  0% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(90deg);\n    -moz-transform: rotate(90deg);\n    -ms-transform: rotate(90deg);\n    -o-transform: rotate(90deg);\n    transform: rotate(90deg);\n    opacity: 0; }\n  100% {\n    -webkit-transform-origin: right bottom 50%;\n    -moz-transform-origin: right bottom 50%;\n    -ms-transform-origin: right bottom 50%;\n    -o-transform-origin: right bottom 50%;\n    transform-origin: right bottom 50%;\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    opacity: 1; } }\n\n@-moz-keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    -moz-transform: rotate(80deg);\n    -ms-transform: rotate(80deg);\n    -o-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  40% {\n    -webkit-transform: rotate(60deg);\n    -moz-transform: rotate(60deg);\n    -ms-transform: rotate(60deg);\n    -o-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    -moz-transform: rotate(60deg) translateY(0);\n    -ms-transform: rotate(60deg) translateY(0);\n    -o-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  100% {\n    -webkit-transform: translateY(700px);\n    -moz-transform: translateY(700px);\n    -ms-transform: translateY(700px);\n    -o-transform: translateY(700px);\n    transform: translateY(700px);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-webkit-keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    -moz-transform: rotate(80deg);\n    -ms-transform: rotate(80deg);\n    -o-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  40% {\n    -webkit-transform: rotate(60deg);\n    -moz-transform: rotate(60deg);\n    -ms-transform: rotate(60deg);\n    -o-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    -moz-transform: rotate(60deg) translateY(0);\n    -ms-transform: rotate(60deg) translateY(0);\n    -o-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  100% {\n    -webkit-transform: translateY(700px);\n    -moz-transform: translateY(700px);\n    -ms-transform: translateY(700px);\n    -o-transform: translateY(700px);\n    transform: translateY(700px);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-o-keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    -moz-transform: rotate(80deg);\n    -ms-transform: rotate(80deg);\n    -o-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  40% {\n    -webkit-transform: rotate(60deg);\n    -moz-transform: rotate(60deg);\n    -ms-transform: rotate(60deg);\n    -o-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    -moz-transform: rotate(60deg) translateY(0);\n    -ms-transform: rotate(60deg) translateY(0);\n    -o-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  100% {\n    -webkit-transform: translateY(700px);\n    -moz-transform: translateY(700px);\n    -ms-transform: translateY(700px);\n    -o-transform: translateY(700px);\n    transform: translateY(700px);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-ms-keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    -moz-transform: rotate(80deg);\n    -ms-transform: rotate(80deg);\n    -o-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  40% {\n    -webkit-transform: rotate(60deg);\n    -moz-transform: rotate(60deg);\n    -ms-transform: rotate(60deg);\n    -o-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    -moz-transform: rotate(60deg) translateY(0);\n    -ms-transform: rotate(60deg) translateY(0);\n    -o-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  100% {\n    -webkit-transform: translateY(700px);\n    -moz-transform: translateY(700px);\n    -ms-transform: translateY(700px);\n    -o-transform: translateY(700px);\n    transform: translateY(700px);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@keyframes hinge {\n  0% {\n    -webkit-transform: rotate(0);\n    -moz-transform: rotate(0);\n    -ms-transform: rotate(0);\n    -o-transform: rotate(0);\n    transform: rotate(0);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  20%, 60% {\n    -webkit-transform: rotate(80deg);\n    -moz-transform: rotate(80deg);\n    -ms-transform: rotate(80deg);\n    -o-transform: rotate(80deg);\n    transform: rotate(80deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  40% {\n    -webkit-transform: rotate(60deg);\n    -moz-transform: rotate(60deg);\n    -ms-transform: rotate(60deg);\n    -o-transform: rotate(60deg);\n    transform: rotate(60deg);\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  80% {\n    -webkit-transform: rotate(60deg) translateY(0);\n    -moz-transform: rotate(60deg) translateY(0);\n    -ms-transform: rotate(60deg) translateY(0);\n    -o-transform: rotate(60deg) translateY(0);\n    transform: rotate(60deg) translateY(0);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform-origin: top left 50%;\n    -moz-transform-origin: top left 50%;\n    -ms-transform-origin: top left 50%;\n    -o-transform-origin: top left 50%;\n    transform-origin: top left 50%;\n    -webkit-animation-timing-function: ease-in-out;\n    -moz-animation-timing-function: ease-in-out;\n    -ms-animation-timing-function: ease-in-out;\n    -o-animation-timing-function: ease-in-out;\n    animation-timing-function: ease-in-out; }\n  100% {\n    -webkit-transform: translateY(700px);\n    -moz-transform: translateY(700px);\n    -ms-transform: translateY(700px);\n    -o-transform: translateY(700px);\n    transform: translateY(700px);\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0; } }\n\n@-moz-keyframes rollIn {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); } }\n\n@-webkit-keyframes rollIn {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); } }\n\n@-o-keyframes rollIn {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); } }\n\n@-ms-keyframes rollIn {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); } }\n\n@keyframes rollIn {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); } }\n\n@-moz-keyframes rollOut {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); } }\n\n@-webkit-keyframes rollOut {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); } }\n\n@-o-keyframes rollOut {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); } }\n\n@-ms-keyframes rollOut {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); } }\n\n@keyframes rollOut {\n  0% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n    opacity: 1;\n    -webkit-transform: translateX(0px) rotate(0deg);\n    -moz-transform: translateX(0px) rotate(0deg);\n    -ms-transform: translateX(0px) rotate(0deg);\n    -o-transform: translateX(0px) rotate(0deg);\n    transform: translateX(0px) rotate(0deg); }\n  100% {\n    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);\n    opacity: 0;\n    -webkit-transform: translateX(-100%) rotate(-120deg);\n    -moz-transform: translateX(-100%) rotate(-120deg);\n    -ms-transform: translateX(-100%) rotate(-120deg);\n    -o-transform: translateX(-100%) rotate(-120deg);\n    transform: translateX(-100%) rotate(-120deg); } }\n\n/*-------------------------------------------------------------------*/\n/* === Boostrap Main SCSS === */\n/*!\n * Bootstrap v5.1.3 (https://getbootstrap.com/)\n * Copyright 2011-2021 The Bootstrap Authors\n * Copyright 2011-2021 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n */\n:root {\n  --bs-blue: #5E50F9;\n  --bs-indigo: #6610f2;\n  --bs-purple: #6a008a;\n  --bs-pink: #E91E63;\n  --bs-red: #f96868;\n  --bs-orange: #f2a654;\n  --bs-yellow: #f6e84e;\n  --bs-green: #46c35f;\n  --bs-teal: #58d8a3;\n  --bs-cyan: #57c7d4;\n  --bs-white: #ffffff;\n  --bs-gray: #434a54;\n  --bs-gray-light: #aab2bd;\n  --bs-gray-lighter: #e8eff4;\n  --bs-gray-lightest: #e6e9ed;\n  --bs-gray-dark: #12151e;\n  --bs-black: #000000;\n  --bs-gray-100: #f8f9fa;\n  --bs-gray-200: #e9ecef;\n  --bs-gray-300: #dee2e6;\n  --bs-gray-400: #ced4da;\n  --bs-gray-500: #adb5bd;\n  --bs-gray-600: #6c757d;\n  --bs-gray-700: #495057;\n  --bs-gray-800: #343a40;\n  --bs-gray-900: #212529;\n  --bs-primary: #0090e7;\n  --bs-secondary: #e4eaec;\n  --bs-success: #00d25b;\n  --bs-info: #8f5fe8;\n  --bs-warning: #ffab00;\n  --bs-danger: #fc424a;\n  --bs-light: #ffffff;\n  --bs-dark: #0d0d0d;\n  --bs-primary-rgb: 13, 110, 253;\n  --bs-secondary-rgb: 108, 117, 125;\n  --bs-success-rgb: 25, 135, 84;\n  --bs-info-rgb: 13, 202, 240;\n  --bs-warning-rgb: 255, 193, 7;\n  --bs-danger-rgb: 220, 53, 69;\n  --bs-light-rgb: 248, 249, 250;\n  --bs-dark-rgb: 33, 37, 41;\n  --bs-white-rgb: 255, 255, 255;\n  --bs-black-rgb: 0, 0, 0;\n  --bs-body-color-rgb: 255, 255, 255;\n  --bs-body-bg-rgb: 255, 255, 255;\n  --bs-font-sans-serif: system-ui, -apple-system, \"Segoe UI\", Roboto, \"Helvetica Neue\", Arial, \"Noto Sans\", \"Liberation Sans\", sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n  --bs-gradient: linear-gradient(180deg, rgba(255, 255, 255, 0.15), rgba(255, 255, 255, 0));\n  --bs-body-font-family: var(--bs-font-sans-serif);\n  --bs-body-font-size: 1rem;\n  --bs-body-font-weight: 400;\n  --bs-body-line-height: 1.5;\n  --bs-body-color: #ffffff;\n  --bs-body-bg: #fff; }\n\n*,\n*::before,\n*::after {\n  box-sizing: border-box; }\n\n@media (prefers-reduced-motion: no-preference) {\n  :root {\n    scroll-behavior: smooth; } }\n\nbody {\n  margin: 0;\n  font-family: var(--bs-body-font-family);\n  font-size: var(--bs-body-font-size);\n  font-weight: var(--bs-body-font-weight);\n  line-height: var(--bs-body-line-height);\n  color: var(--bs-body-color);\n  text-align: var(--bs-body-text-align);\n  background-color: var(--bs-body-bg);\n  -webkit-text-size-adjust: 100%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0); }\n\nhr {\n  margin: 1rem 0;\n  color: inherit;\n  background-color: currentColor;\n  border: 0;\n  opacity: 0.25; }\n\nhr:not([size]) {\n  height: 1px; }\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6 {\n  margin-top: 0;\n  margin-bottom: 0.5rem;\n  font-weight: 500;\n  line-height: 1.2; }\n\nh1, .h1 {\n  font-size: calc(1.375rem + 1.5vw); }\n  @media (min-width: 1200px) {\n    h1, .h1 {\n      font-size: 2.5rem; } }\n\nh2, .h2 {\n  font-size: calc(1.325rem + 0.9vw); }\n  @media (min-width: 1200px) {\n    h2, .h2 {\n      font-size: 2rem; } }\n\nh3, .h3 {\n  font-size: calc(1.3rem + 0.6vw); }\n  @media (min-width: 1200px) {\n    h3, .h3 {\n      font-size: 1.75rem; } }\n\nh4, .h4 {\n  font-size: calc(1.275rem + 0.3vw); }\n  @media (min-width: 1200px) {\n    h4, .h4 {\n      font-size: 1.5rem; } }\n\nh5, .h5 {\n  font-size: 1.25rem; }\n\nh6, .h6 {\n  font-size: 1rem; }\n\np {\n  margin-top: 0;\n  margin-bottom: 1rem; }\n\nabbr[title],\nabbr[data-bs-original-title] {\n  text-decoration: underline dotted;\n  cursor: help;\n  text-decoration-skip-ink: none; }\n\naddress {\n  margin-bottom: 1rem;\n  font-style: normal;\n  line-height: inherit; }\n\nol,\nul {\n  padding-left: 2rem; }\n\nol,\nul,\ndl {\n  margin-top: 0;\n  margin-bottom: 1rem; }\n\nol ol,\nul ul,\nol ul,\nul ol {\n  margin-bottom: 0; }\n\ndt {\n  font-weight: 700; }\n\ndd {\n  margin-bottom: .5rem;\n  margin-left: 0; }\n\nblockquote {\n  margin: 0 0 1rem; }\n\nb,\nstrong {\n  font-weight: bolder; }\n\nsmall, .small {\n  font-size: 0.875em; }\n\nmark, .mark {\n  padding: 0.2em;\n  background-color: #fcf8e3; }\n\nsub,\nsup {\n  position: relative;\n  font-size: 0.75em;\n  line-height: 0;\n  vertical-align: baseline; }\n\nsub {\n  bottom: -.25em; }\n\nsup {\n  top: -.5em; }\n\na {\n  color: #0d6efd;\n  text-decoration: underline; }\n  a:hover {\n    color: #0a58ca; }\n\na:not([href]):not([class]), a:not([href]):not([class]):hover {\n  color: inherit;\n  text-decoration: none; }\n\npre,\ncode,\nkbd,\nsamp {\n  font-family: var(--bs-font-monospace);\n  font-size: 1em;\n  direction: ltr /* rtl:ignore */;\n  unicode-bidi: bidi-override; }\n\npre {\n  display: block;\n  margin-top: 0;\n  margin-bottom: 1rem;\n  overflow: auto;\n  font-size: 0.875em; }\n  pre code {\n    font-size: inherit;\n    color: inherit;\n    word-break: normal; }\n\ncode {\n  font-size: 0.875em;\n  color: #d63384;\n  word-wrap: break-word; }\n  a > code {\n    color: inherit; }\n\nkbd {\n  padding: 0.2rem 0.4rem;\n  font-size: 0.875em;\n  color: #fff;\n  background-color: #212529;\n  border-radius: 0.2rem; }\n  kbd kbd {\n    padding: 0;\n    font-size: 1em;\n    font-weight: 700; }\n\nfigure {\n  margin: 0 0 1rem; }\n\nimg,\nsvg {\n  vertical-align: middle; }\n\ntable {\n  caption-side: bottom;\n  border-collapse: collapse; }\n\ncaption {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  color: #6c757d;\n  text-align: left; }\n\nth {\n  text-align: inherit;\n  text-align: -webkit-match-parent; }\n\nthead,\ntbody,\ntfoot,\ntr,\ntd,\nth {\n  border-color: inherit;\n  border-style: solid;\n  border-width: 0; }\n\nlabel {\n  display: inline-block; }\n\nbutton {\n  border-radius: 0; }\n\nbutton:focus:not(:focus-visible) {\n  outline: 0; }\n\ninput,\nbutton,\nselect,\noptgroup,\ntextarea {\n  margin: 0;\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit; }\n\nbutton,\nselect {\n  text-transform: none; }\n\n[role=\"button\"] {\n  cursor: pointer; }\n\nselect {\n  word-wrap: normal; }\n  select:disabled {\n    opacity: 1; }\n\n[list]::-webkit-calendar-picker-indicator {\n  display: none; }\n\nbutton,\n[type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; }\n  button:not(:disabled),\n  [type=\"button\"]:not(:disabled),\n  [type=\"reset\"]:not(:disabled),\n  [type=\"submit\"]:not(:disabled) {\n    cursor: pointer; }\n\n::-moz-focus-inner {\n  padding: 0;\n  border-style: none; }\n\ntextarea {\n  resize: vertical; }\n\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0; }\n\nlegend {\n  float: left;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 0.5rem;\n  font-size: calc(1.275rem + 0.3vw);\n  line-height: inherit; }\n  @media (min-width: 1200px) {\n    legend {\n      font-size: 1.5rem; } }\n  legend + * {\n    clear: left; }\n\n::-webkit-datetime-edit-fields-wrapper,\n::-webkit-datetime-edit-text,\n::-webkit-datetime-edit-minute,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-year-field {\n  padding: 0; }\n\n::-webkit-inner-spin-button {\n  height: auto; }\n\n[type=\"search\"] {\n  outline-offset: -2px;\n  -webkit-appearance: textfield; }\n\n/* rtl:raw:\n[type=\"tel\"],\n[type=\"url\"],\n[type=\"email\"],\n[type=\"number\"] {\n  direction: ltr;\n}\n*/\n::-webkit-search-decoration {\n  -webkit-appearance: none; }\n\n::-webkit-color-swatch-wrapper {\n  padding: 0; }\n\n::file-selector-button {\n  font: inherit; }\n\n::-webkit-file-upload-button {\n  font: inherit;\n  -webkit-appearance: button; }\n\noutput {\n  display: inline-block; }\n\niframe {\n  border: 0; }\n\nsummary {\n  display: list-item;\n  cursor: pointer; }\n\nprogress {\n  vertical-align: baseline; }\n\n[hidden] {\n  display: none !important; }\n\n.lead {\n  font-size: 1.25rem;\n  font-weight: 300; }\n\n.display-1 {\n  font-size: calc(1.625rem + 4.5vw);\n  font-weight: 300;\n  line-height: 1.2; }\n  @media (min-width: 1200px) {\n    .display-1 {\n      font-size: 5rem; } }\n\n.display-2 {\n  font-size: calc(1.575rem + 3.9vw);\n  font-weight: 300;\n  line-height: 1.2; }\n  @media (min-width: 1200px) {\n    .display-2 {\n      font-size: 4.5rem; } }\n\n.display-3 {\n  font-size: calc(1.525rem + 3.3vw);\n  font-weight: 300;\n  line-height: 1.2; }\n  @media (min-width: 1200px) {\n    .display-3 {\n      font-size: 4rem; } }\n\n.display-4 {\n  font-size: calc(1.475rem + 2.7vw);\n  font-weight: 300;\n  line-height: 1.2; }\n  @media (min-width: 1200px) {\n    .display-4 {\n      font-size: 3.5rem; } }\n\n.display-5 {\n  font-size: calc(1.425rem + 2.1vw);\n  font-weight: 300;\n  line-height: 1.2; }\n  @media (min-width: 1200px) {\n    .display-5 {\n      font-size: 3rem; } }\n\n.display-6 {\n  font-size: calc(1.375rem + 1.5vw);\n  font-weight: 300;\n  line-height: 1.2; }\n  @media (min-width: 1200px) {\n    .display-6 {\n      font-size: 2.5rem; } }\n\n.list-unstyled {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline {\n  padding-left: 0;\n  list-style: none; }\n\n.list-inline-item {\n  display: inline-block; }\n  .list-inline-item:not(:last-child) {\n    margin-right: 0.5rem; }\n\n.initialism {\n  font-size: 0.875em;\n  text-transform: uppercase; }\n\n.blockquote {\n  margin-bottom: 1rem;\n  font-size: 1.25rem; }\n  .blockquote > :last-child {\n    margin-bottom: 0; }\n\n.blockquote-footer {\n  margin-top: -1rem;\n  margin-bottom: 1rem;\n  font-size: 0.875em;\n  color: #6c757d; }\n  .blockquote-footer::before {\n    content: \"\\2014\\00A0\"; }\n\n.img-fluid {\n  max-width: 100%;\n  height: auto; }\n\n.img-thumbnail {\n  padding: 0.25rem;\n  background-color: #fff;\n  border: 1px solid #dee2e6;\n  border-radius: 0.25rem;\n  max-width: 100%;\n  height: auto; }\n\n.figure {\n  display: inline-block; }\n\n.figure-img {\n  margin-bottom: 0.5rem;\n  line-height: 1; }\n\n.figure-caption {\n  font-size: 0.875em;\n  color: #6c757d; }\n\n.container,\n.container-fluid,\n.container-sm,\n.container-md,\n.container-lg,\n.container-xl,\n.container-xxl {\n  width: 100%;\n  padding-right: var(--bs-gutter-x, 0.75rem);\n  padding-left: var(--bs-gutter-x, 0.75rem);\n  margin-right: auto;\n  margin-left: auto; }\n\n@media (min-width: 576px) {\n  .container, .container-sm {\n    max-width: 540px; } }\n\n@media (min-width: 768px) {\n  .container, .container-sm, .container-md {\n    max-width: 720px; } }\n\n@media (min-width: 992px) {\n  .container, .container-sm, .container-md, .container-lg {\n    max-width: 960px; } }\n\n@media (min-width: 1200px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl {\n    max-width: 1140px; } }\n\n@media (min-width: 1400px) {\n  .container, .container-sm, .container-md, .container-lg, .container-xl, .container-xxl {\n    max-width: 1320px; } }\n\n.row {\n  --bs-gutter-x: 1.5rem;\n  --bs-gutter-y: 0;\n  display: flex;\n  flex-wrap: wrap;\n  margin-top: calc(-1 * var(--bs-gutter-y));\n  margin-right: calc(-.5 * var(--bs-gutter-x));\n  margin-left: calc(-.5 * var(--bs-gutter-x)); }\n  .row > * {\n    flex-shrink: 0;\n    width: 100%;\n    max-width: 100%;\n    padding-right: calc(var(--bs-gutter-x) * .5);\n    padding-left: calc(var(--bs-gutter-x) * .5);\n    margin-top: var(--bs-gutter-y); }\n\n.col {\n  flex: 1 0 0%; }\n\n.row-cols-auto > * {\n  flex: 0 0 auto;\n  width: auto; }\n\n.row-cols-1 > * {\n  flex: 0 0 auto;\n  width: 100%; }\n\n.row-cols-2 > * {\n  flex: 0 0 auto;\n  width: 50%; }\n\n.row-cols-3 > * {\n  flex: 0 0 auto;\n  width: 33.33333%; }\n\n.row-cols-4 > * {\n  flex: 0 0 auto;\n  width: 25%; }\n\n.row-cols-5 > * {\n  flex: 0 0 auto;\n  width: 20%; }\n\n.row-cols-6 > * {\n  flex: 0 0 auto;\n  width: 16.66667%; }\n\n.col-auto {\n  flex: 0 0 auto;\n  width: auto; }\n\n.col-1 {\n  flex: 0 0 auto;\n  width: 8.33333%; }\n\n.col-2 {\n  flex: 0 0 auto;\n  width: 16.66667%; }\n\n.col-3 {\n  flex: 0 0 auto;\n  width: 25%; }\n\n.col-4 {\n  flex: 0 0 auto;\n  width: 33.33333%; }\n\n.col-5 {\n  flex: 0 0 auto;\n  width: 41.66667%; }\n\n.col-6, .lightGallery .image-tile {\n  flex: 0 0 auto;\n  width: 50%; }\n\n.col-7 {\n  flex: 0 0 auto;\n  width: 58.33333%; }\n\n.col-8 {\n  flex: 0 0 auto;\n  width: 66.66667%; }\n\n.col-9 {\n  flex: 0 0 auto;\n  width: 75%; }\n\n.col-10 {\n  flex: 0 0 auto;\n  width: 83.33333%; }\n\n.col-11 {\n  flex: 0 0 auto;\n  width: 91.66667%; }\n\n.col-12 {\n  flex: 0 0 auto;\n  width: 100%; }\n\n.offset-1 {\n  margin-left: 8.33333%; }\n\n.offset-2 {\n  margin-left: 16.66667%; }\n\n.offset-3 {\n  margin-left: 25%; }\n\n.offset-4 {\n  margin-left: 33.33333%; }\n\n.offset-5 {\n  margin-left: 41.66667%; }\n\n.offset-6 {\n  margin-left: 50%; }\n\n.offset-7 {\n  margin-left: 58.33333%; }\n\n.offset-8 {\n  margin-left: 66.66667%; }\n\n.offset-9 {\n  margin-left: 75%; }\n\n.offset-10 {\n  margin-left: 83.33333%; }\n\n.offset-11 {\n  margin-left: 91.66667%; }\n\n.g-0,\n.gx-0 {\n  --bs-gutter-x: 0; }\n\n.g-0,\n.gy-0 {\n  --bs-gutter-y: 0; }\n\n.g-1,\n.gx-1 {\n  --bs-gutter-x: 0.25rem; }\n\n.g-1,\n.gy-1 {\n  --bs-gutter-y: 0.25rem; }\n\n.g-2,\n.gx-2 {\n  --bs-gutter-x: 0.5rem; }\n\n.g-2,\n.gy-2 {\n  --bs-gutter-y: 0.5rem; }\n\n.g-3,\n.gx-3 {\n  --bs-gutter-x: 1rem; }\n\n.g-3,\n.gy-3 {\n  --bs-gutter-y: 1rem; }\n\n.g-4,\n.gx-4 {\n  --bs-gutter-x: 1.5rem; }\n\n.g-4,\n.gy-4 {\n  --bs-gutter-y: 1.5rem; }\n\n.g-5,\n.gx-5 {\n  --bs-gutter-x: 3rem; }\n\n.g-5,\n.gy-5 {\n  --bs-gutter-y: 3rem; }\n\n@media (min-width: 576px) {\n  .col-sm {\n    flex: 1 0 0%; }\n  .row-cols-sm-auto > * {\n    flex: 0 0 auto;\n    width: auto; }\n  .row-cols-sm-1 > * {\n    flex: 0 0 auto;\n    width: 100%; }\n  .row-cols-sm-2 > * {\n    flex: 0 0 auto;\n    width: 50%; }\n  .row-cols-sm-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .row-cols-sm-4 > * {\n    flex: 0 0 auto;\n    width: 25%; }\n  .row-cols-sm-5 > * {\n    flex: 0 0 auto;\n    width: 20%; }\n  .row-cols-sm-6 > * {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-sm-auto {\n    flex: 0 0 auto;\n    width: auto; }\n  .col-sm-1 {\n    flex: 0 0 auto;\n    width: 8.33333%; }\n  .col-sm-2 {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-sm-3 {\n    flex: 0 0 auto;\n    width: 25%; }\n  .col-sm-4 {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .col-sm-5 {\n    flex: 0 0 auto;\n    width: 41.66667%; }\n  .col-sm-6 {\n    flex: 0 0 auto;\n    width: 50%; }\n  .col-sm-7 {\n    flex: 0 0 auto;\n    width: 58.33333%; }\n  .col-sm-8 {\n    flex: 0 0 auto;\n    width: 66.66667%; }\n  .col-sm-9 {\n    flex: 0 0 auto;\n    width: 75%; }\n  .col-sm-10 {\n    flex: 0 0 auto;\n    width: 83.33333%; }\n  .col-sm-11 {\n    flex: 0 0 auto;\n    width: 91.66667%; }\n  .col-sm-12 {\n    flex: 0 0 auto;\n    width: 100%; }\n  .offset-sm-0 {\n    margin-left: 0; }\n  .offset-sm-1 {\n    margin-left: 8.33333%; }\n  .offset-sm-2 {\n    margin-left: 16.66667%; }\n  .offset-sm-3 {\n    margin-left: 25%; }\n  .offset-sm-4 {\n    margin-left: 33.33333%; }\n  .offset-sm-5 {\n    margin-left: 41.66667%; }\n  .offset-sm-6 {\n    margin-left: 50%; }\n  .offset-sm-7 {\n    margin-left: 58.33333%; }\n  .offset-sm-8 {\n    margin-left: 66.66667%; }\n  .offset-sm-9 {\n    margin-left: 75%; }\n  .offset-sm-10 {\n    margin-left: 83.33333%; }\n  .offset-sm-11 {\n    margin-left: 91.66667%; }\n  .g-sm-0,\n  .gx-sm-0 {\n    --bs-gutter-x: 0; }\n  .g-sm-0,\n  .gy-sm-0 {\n    --bs-gutter-y: 0; }\n  .g-sm-1,\n  .gx-sm-1 {\n    --bs-gutter-x: 0.25rem; }\n  .g-sm-1,\n  .gy-sm-1 {\n    --bs-gutter-y: 0.25rem; }\n  .g-sm-2,\n  .gx-sm-2 {\n    --bs-gutter-x: 0.5rem; }\n  .g-sm-2,\n  .gy-sm-2 {\n    --bs-gutter-y: 0.5rem; }\n  .g-sm-3,\n  .gx-sm-3 {\n    --bs-gutter-x: 1rem; }\n  .g-sm-3,\n  .gy-sm-3 {\n    --bs-gutter-y: 1rem; }\n  .g-sm-4,\n  .gx-sm-4 {\n    --bs-gutter-x: 1.5rem; }\n  .g-sm-4,\n  .gy-sm-4 {\n    --bs-gutter-y: 1.5rem; }\n  .g-sm-5,\n  .gx-sm-5 {\n    --bs-gutter-x: 3rem; }\n  .g-sm-5,\n  .gy-sm-5 {\n    --bs-gutter-y: 3rem; } }\n\n@media (min-width: 768px) {\n  .col-md {\n    flex: 1 0 0%; }\n  .row-cols-md-auto > * {\n    flex: 0 0 auto;\n    width: auto; }\n  .row-cols-md-1 > * {\n    flex: 0 0 auto;\n    width: 100%; }\n  .row-cols-md-2 > * {\n    flex: 0 0 auto;\n    width: 50%; }\n  .row-cols-md-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .row-cols-md-4 > * {\n    flex: 0 0 auto;\n    width: 25%; }\n  .row-cols-md-5 > * {\n    flex: 0 0 auto;\n    width: 20%; }\n  .row-cols-md-6 > * {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-md-auto {\n    flex: 0 0 auto;\n    width: auto; }\n  .col-md-1 {\n    flex: 0 0 auto;\n    width: 8.33333%; }\n  .col-md-2 {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-md-3, .lightGallery .image-tile {\n    flex: 0 0 auto;\n    width: 25%; }\n  .col-md-4, .lightGallery .image-tile {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .col-md-5 {\n    flex: 0 0 auto;\n    width: 41.66667%; }\n  .col-md-6 {\n    flex: 0 0 auto;\n    width: 50%; }\n  .col-md-7 {\n    flex: 0 0 auto;\n    width: 58.33333%; }\n  .col-md-8 {\n    flex: 0 0 auto;\n    width: 66.66667%; }\n  .col-md-9 {\n    flex: 0 0 auto;\n    width: 75%; }\n  .col-md-10 {\n    flex: 0 0 auto;\n    width: 83.33333%; }\n  .col-md-11 {\n    flex: 0 0 auto;\n    width: 91.66667%; }\n  .col-md-12 {\n    flex: 0 0 auto;\n    width: 100%; }\n  .offset-md-0 {\n    margin-left: 0; }\n  .offset-md-1 {\n    margin-left: 8.33333%; }\n  .offset-md-2 {\n    margin-left: 16.66667%; }\n  .offset-md-3 {\n    margin-left: 25%; }\n  .offset-md-4 {\n    margin-left: 33.33333%; }\n  .offset-md-5 {\n    margin-left: 41.66667%; }\n  .offset-md-6 {\n    margin-left: 50%; }\n  .offset-md-7 {\n    margin-left: 58.33333%; }\n  .offset-md-8 {\n    margin-left: 66.66667%; }\n  .offset-md-9 {\n    margin-left: 75%; }\n  .offset-md-10 {\n    margin-left: 83.33333%; }\n  .offset-md-11 {\n    margin-left: 91.66667%; }\n  .g-md-0,\n  .gx-md-0 {\n    --bs-gutter-x: 0; }\n  .g-md-0,\n  .gy-md-0 {\n    --bs-gutter-y: 0; }\n  .g-md-1,\n  .gx-md-1 {\n    --bs-gutter-x: 0.25rem; }\n  .g-md-1,\n  .gy-md-1 {\n    --bs-gutter-y: 0.25rem; }\n  .g-md-2,\n  .gx-md-2 {\n    --bs-gutter-x: 0.5rem; }\n  .g-md-2,\n  .gy-md-2 {\n    --bs-gutter-y: 0.5rem; }\n  .g-md-3,\n  .gx-md-3 {\n    --bs-gutter-x: 1rem; }\n  .g-md-3,\n  .gy-md-3 {\n    --bs-gutter-y: 1rem; }\n  .g-md-4,\n  .gx-md-4 {\n    --bs-gutter-x: 1.5rem; }\n  .g-md-4,\n  .gy-md-4 {\n    --bs-gutter-y: 1.5rem; }\n  .g-md-5,\n  .gx-md-5 {\n    --bs-gutter-x: 3rem; }\n  .g-md-5,\n  .gy-md-5 {\n    --bs-gutter-y: 3rem; } }\n\n@media (min-width: 992px) {\n  .col-lg {\n    flex: 1 0 0%; }\n  .row-cols-lg-auto > * {\n    flex: 0 0 auto;\n    width: auto; }\n  .row-cols-lg-1 > * {\n    flex: 0 0 auto;\n    width: 100%; }\n  .row-cols-lg-2 > * {\n    flex: 0 0 auto;\n    width: 50%; }\n  .row-cols-lg-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .row-cols-lg-4 > * {\n    flex: 0 0 auto;\n    width: 25%; }\n  .row-cols-lg-5 > * {\n    flex: 0 0 auto;\n    width: 20%; }\n  .row-cols-lg-6 > * {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-lg-auto {\n    flex: 0 0 auto;\n    width: auto; }\n  .col-lg-1 {\n    flex: 0 0 auto;\n    width: 8.33333%; }\n  .col-lg-2 {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-lg-3, .lightGallery .image-tile {\n    flex: 0 0 auto;\n    width: 25%; }\n  .col-lg-4 {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .col-lg-5 {\n    flex: 0 0 auto;\n    width: 41.66667%; }\n  .col-lg-6 {\n    flex: 0 0 auto;\n    width: 50%; }\n  .col-lg-7 {\n    flex: 0 0 auto;\n    width: 58.33333%; }\n  .col-lg-8 {\n    flex: 0 0 auto;\n    width: 66.66667%; }\n  .col-lg-9 {\n    flex: 0 0 auto;\n    width: 75%; }\n  .col-lg-10 {\n    flex: 0 0 auto;\n    width: 83.33333%; }\n  .col-lg-11 {\n    flex: 0 0 auto;\n    width: 91.66667%; }\n  .col-lg-12 {\n    flex: 0 0 auto;\n    width: 100%; }\n  .offset-lg-0 {\n    margin-left: 0; }\n  .offset-lg-1 {\n    margin-left: 8.33333%; }\n  .offset-lg-2 {\n    margin-left: 16.66667%; }\n  .offset-lg-3 {\n    margin-left: 25%; }\n  .offset-lg-4 {\n    margin-left: 33.33333%; }\n  .offset-lg-5 {\n    margin-left: 41.66667%; }\n  .offset-lg-6 {\n    margin-left: 50%; }\n  .offset-lg-7 {\n    margin-left: 58.33333%; }\n  .offset-lg-8 {\n    margin-left: 66.66667%; }\n  .offset-lg-9 {\n    margin-left: 75%; }\n  .offset-lg-10 {\n    margin-left: 83.33333%; }\n  .offset-lg-11 {\n    margin-left: 91.66667%; }\n  .g-lg-0,\n  .gx-lg-0 {\n    --bs-gutter-x: 0; }\n  .g-lg-0,\n  .gy-lg-0 {\n    --bs-gutter-y: 0; }\n  .g-lg-1,\n  .gx-lg-1 {\n    --bs-gutter-x: 0.25rem; }\n  .g-lg-1,\n  .gy-lg-1 {\n    --bs-gutter-y: 0.25rem; }\n  .g-lg-2,\n  .gx-lg-2 {\n    --bs-gutter-x: 0.5rem; }\n  .g-lg-2,\n  .gy-lg-2 {\n    --bs-gutter-y: 0.5rem; }\n  .g-lg-3,\n  .gx-lg-3 {\n    --bs-gutter-x: 1rem; }\n  .g-lg-3,\n  .gy-lg-3 {\n    --bs-gutter-y: 1rem; }\n  .g-lg-4,\n  .gx-lg-4 {\n    --bs-gutter-x: 1.5rem; }\n  .g-lg-4,\n  .gy-lg-4 {\n    --bs-gutter-y: 1.5rem; }\n  .g-lg-5,\n  .gx-lg-5 {\n    --bs-gutter-x: 3rem; }\n  .g-lg-5,\n  .gy-lg-5 {\n    --bs-gutter-y: 3rem; } }\n\n@media (min-width: 1200px) {\n  .col-xl {\n    flex: 1 0 0%; }\n  .row-cols-xl-auto > * {\n    flex: 0 0 auto;\n    width: auto; }\n  .row-cols-xl-1 > * {\n    flex: 0 0 auto;\n    width: 100%; }\n  .row-cols-xl-2 > * {\n    flex: 0 0 auto;\n    width: 50%; }\n  .row-cols-xl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .row-cols-xl-4 > * {\n    flex: 0 0 auto;\n    width: 25%; }\n  .row-cols-xl-5 > * {\n    flex: 0 0 auto;\n    width: 20%; }\n  .row-cols-xl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-xl-auto {\n    flex: 0 0 auto;\n    width: auto; }\n  .col-xl-1 {\n    flex: 0 0 auto;\n    width: 8.33333%; }\n  .col-xl-2 {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-xl-3, .lightGallery .image-tile {\n    flex: 0 0 auto;\n    width: 25%; }\n  .col-xl-4 {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .col-xl-5 {\n    flex: 0 0 auto;\n    width: 41.66667%; }\n  .col-xl-6 {\n    flex: 0 0 auto;\n    width: 50%; }\n  .col-xl-7 {\n    flex: 0 0 auto;\n    width: 58.33333%; }\n  .col-xl-8 {\n    flex: 0 0 auto;\n    width: 66.66667%; }\n  .col-xl-9 {\n    flex: 0 0 auto;\n    width: 75%; }\n  .col-xl-10 {\n    flex: 0 0 auto;\n    width: 83.33333%; }\n  .col-xl-11 {\n    flex: 0 0 auto;\n    width: 91.66667%; }\n  .col-xl-12 {\n    flex: 0 0 auto;\n    width: 100%; }\n  .offset-xl-0 {\n    margin-left: 0; }\n  .offset-xl-1 {\n    margin-left: 8.33333%; }\n  .offset-xl-2 {\n    margin-left: 16.66667%; }\n  .offset-xl-3 {\n    margin-left: 25%; }\n  .offset-xl-4 {\n    margin-left: 33.33333%; }\n  .offset-xl-5 {\n    margin-left: 41.66667%; }\n  .offset-xl-6 {\n    margin-left: 50%; }\n  .offset-xl-7 {\n    margin-left: 58.33333%; }\n  .offset-xl-8 {\n    margin-left: 66.66667%; }\n  .offset-xl-9 {\n    margin-left: 75%; }\n  .offset-xl-10 {\n    margin-left: 83.33333%; }\n  .offset-xl-11 {\n    margin-left: 91.66667%; }\n  .g-xl-0,\n  .gx-xl-0 {\n    --bs-gutter-x: 0; }\n  .g-xl-0,\n  .gy-xl-0 {\n    --bs-gutter-y: 0; }\n  .g-xl-1,\n  .gx-xl-1 {\n    --bs-gutter-x: 0.25rem; }\n  .g-xl-1,\n  .gy-xl-1 {\n    --bs-gutter-y: 0.25rem; }\n  .g-xl-2,\n  .gx-xl-2 {\n    --bs-gutter-x: 0.5rem; }\n  .g-xl-2,\n  .gy-xl-2 {\n    --bs-gutter-y: 0.5rem; }\n  .g-xl-3,\n  .gx-xl-3 {\n    --bs-gutter-x: 1rem; }\n  .g-xl-3,\n  .gy-xl-3 {\n    --bs-gutter-y: 1rem; }\n  .g-xl-4,\n  .gx-xl-4 {\n    --bs-gutter-x: 1.5rem; }\n  .g-xl-4,\n  .gy-xl-4 {\n    --bs-gutter-y: 1.5rem; }\n  .g-xl-5,\n  .gx-xl-5 {\n    --bs-gutter-x: 3rem; }\n  .g-xl-5,\n  .gy-xl-5 {\n    --bs-gutter-y: 3rem; } }\n\n@media (min-width: 1400px) {\n  .col-xxl {\n    flex: 1 0 0%; }\n  .row-cols-xxl-auto > * {\n    flex: 0 0 auto;\n    width: auto; }\n  .row-cols-xxl-1 > * {\n    flex: 0 0 auto;\n    width: 100%; }\n  .row-cols-xxl-2 > * {\n    flex: 0 0 auto;\n    width: 50%; }\n  .row-cols-xxl-3 > * {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .row-cols-xxl-4 > * {\n    flex: 0 0 auto;\n    width: 25%; }\n  .row-cols-xxl-5 > * {\n    flex: 0 0 auto;\n    width: 20%; }\n  .row-cols-xxl-6 > * {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-xxl-auto {\n    flex: 0 0 auto;\n    width: auto; }\n  .col-xxl-1 {\n    flex: 0 0 auto;\n    width: 8.33333%; }\n  .col-xxl-2 {\n    flex: 0 0 auto;\n    width: 16.66667%; }\n  .col-xxl-3 {\n    flex: 0 0 auto;\n    width: 25%; }\n  .col-xxl-4 {\n    flex: 0 0 auto;\n    width: 33.33333%; }\n  .col-xxl-5 {\n    flex: 0 0 auto;\n    width: 41.66667%; }\n  .col-xxl-6 {\n    flex: 0 0 auto;\n    width: 50%; }\n  .col-xxl-7 {\n    flex: 0 0 auto;\n    width: 58.33333%; }\n  .col-xxl-8 {\n    flex: 0 0 auto;\n    width: 66.66667%; }\n  .col-xxl-9 {\n    flex: 0 0 auto;\n    width: 75%; }\n  .col-xxl-10 {\n    flex: 0 0 auto;\n    width: 83.33333%; }\n  .col-xxl-11 {\n    flex: 0 0 auto;\n    width: 91.66667%; }\n  .col-xxl-12 {\n    flex: 0 0 auto;\n    width: 100%; }\n  .offset-xxl-0 {\n    margin-left: 0; }\n  .offset-xxl-1 {\n    margin-left: 8.33333%; }\n  .offset-xxl-2 {\n    margin-left: 16.66667%; }\n  .offset-xxl-3 {\n    margin-left: 25%; }\n  .offset-xxl-4 {\n    margin-left: 33.33333%; }\n  .offset-xxl-5 {\n    margin-left: 41.66667%; }\n  .offset-xxl-6 {\n    margin-left: 50%; }\n  .offset-xxl-7 {\n    margin-left: 58.33333%; }\n  .offset-xxl-8 {\n    margin-left: 66.66667%; }\n  .offset-xxl-9 {\n    margin-left: 75%; }\n  .offset-xxl-10 {\n    margin-left: 83.33333%; }\n  .offset-xxl-11 {\n    margin-left: 91.66667%; }\n  .g-xxl-0,\n  .gx-xxl-0 {\n    --bs-gutter-x: 0; }\n  .g-xxl-0,\n  .gy-xxl-0 {\n    --bs-gutter-y: 0; }\n  .g-xxl-1,\n  .gx-xxl-1 {\n    --bs-gutter-x: 0.25rem; }\n  .g-xxl-1,\n  .gy-xxl-1 {\n    --bs-gutter-y: 0.25rem; }\n  .g-xxl-2,\n  .gx-xxl-2 {\n    --bs-gutter-x: 0.5rem; }\n  .g-xxl-2,\n  .gy-xxl-2 {\n    --bs-gutter-y: 0.5rem; }\n  .g-xxl-3,\n  .gx-xxl-3 {\n    --bs-gutter-x: 1rem; }\n  .g-xxl-3,\n  .gy-xxl-3 {\n    --bs-gutter-y: 1rem; }\n  .g-xxl-4,\n  .gx-xxl-4 {\n    --bs-gutter-x: 1.5rem; }\n  .g-xxl-4,\n  .gy-xxl-4 {\n    --bs-gutter-y: 1.5rem; }\n  .g-xxl-5,\n  .gx-xxl-5 {\n    --bs-gutter-x: 3rem; }\n  .g-xxl-5,\n  .gy-xxl-5 {\n    --bs-gutter-y: 3rem; } }\n\n.table, .jsgrid .jsgrid-table {\n  --bs-table-bg: transparent;\n  --bs-table-accent-bg: transparent;\n  --bs-table-striped-color: #212529;\n  --bs-table-striped-bg: rgba(0, 0, 0, 0.05);\n  --bs-table-active-color: #212529;\n  --bs-table-active-bg: rgba(0, 0, 0, 0.1);\n  --bs-table-hover-color: #212529;\n  --bs-table-hover-bg: #000000;\n  width: 100%;\n  margin-bottom: 1rem;\n  color: #ffffff;\n  vertical-align: top;\n  border-color: #2c2e33; }\n  .table > :not(caption) > * > *, .jsgrid .jsgrid-table > :not(caption) > * > * {\n    padding: 0.5rem 0.5rem;\n    background-color: var(--bs-table-bg);\n    border-bottom-width: 1px;\n    box-shadow: inset 0 0 0 9999px var(--bs-table-accent-bg); }\n  .table > tbody, .jsgrid .jsgrid-table > tbody {\n    vertical-align: inherit; }\n  .table > thead, .jsgrid .jsgrid-table > thead {\n    vertical-align: bottom; }\n  .table > :not(:first-child), .jsgrid .jsgrid-table > :not(:first-child) {\n    border-top: 2px solid currentColor; }\n\n.caption-top {\n  caption-side: top; }\n\n.table-sm > :not(caption) > * > * {\n  padding: 0.25rem 0.25rem; }\n\n.table-bordered > :not(caption) > * {\n  border-width: 1px 0; }\n  .table-bordered > :not(caption) > * > * {\n    border-width: 0 1px; }\n\n.table-borderless > :not(caption) > * > * {\n  border-bottom-width: 0; }\n\n.table-borderless > :not(:first-child) {\n  border-top-width: 0; }\n\n.table-striped > tbody > tr:nth-of-type(odd) > * {\n  --bs-table-accent-bg: var(--bs-table-striped-bg);\n  color: var(--bs-table-striped-color); }\n\n.table-active {\n  --bs-table-accent-bg: var(--bs-table-active-bg);\n  color: var(--bs-table-active-color); }\n\n.table-hover > tbody > tr:hover > * {\n  --bs-table-accent-bg: var(--bs-table-hover-bg);\n  color: var(--bs-table-hover-color); }\n\n.table-primary {\n  --bs-table-bg: #cfe2ff;\n  --bs-table-striped-bg: #c5d7f2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bacbe6;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfd1ec;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bacbe6; }\n\n.table-secondary {\n  --bs-table-bg: #e2e3e5;\n  --bs-table-striped-bg: #d7d8da;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #cbccce;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #d1d2d4;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #cbccce; }\n\n.table-success {\n  --bs-table-bg: #d1e7dd;\n  --bs-table-striped-bg: #c7dbd2;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #bcd0c7;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #c1d6cc;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #bcd0c7; }\n\n.table-info {\n  --bs-table-bg: #cff4fc;\n  --bs-table-striped-bg: #c5e8ef;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #badce3;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #bfe2e9;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #badce3; }\n\n.table-warning {\n  --bs-table-bg: #fff3cd;\n  --bs-table-striped-bg: #f2e7c3;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #e6dbb9;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #ece1be;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #e6dbb9; }\n\n.table-danger {\n  --bs-table-bg: #f8d7da;\n  --bs-table-striped-bg: #eccccf;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfc2c4;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5c7ca;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfc2c4; }\n\n.table-light {\n  --bs-table-bg: #f8f9fa;\n  --bs-table-striped-bg: #ecedee;\n  --bs-table-striped-color: #000;\n  --bs-table-active-bg: #dfe0e1;\n  --bs-table-active-color: #000;\n  --bs-table-hover-bg: #e5e6e7;\n  --bs-table-hover-color: #000;\n  color: #000;\n  border-color: #dfe0e1; }\n\n.table-dark {\n  --bs-table-bg: #212529;\n  --bs-table-striped-bg: #2c3034;\n  --bs-table-striped-color: #fff;\n  --bs-table-active-bg: #373b3e;\n  --bs-table-active-color: #fff;\n  --bs-table-hover-bg: #323539;\n  --bs-table-hover-color: #fff;\n  color: #fff;\n  border-color: #373b3e; }\n\n.table-responsive {\n  overflow-x: auto;\n  -webkit-overflow-scrolling: touch; }\n\n@media (max-width: 575.98px) {\n  .table-responsive-sm {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; } }\n\n@media (max-width: 767.98px) {\n  .table-responsive-md {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; } }\n\n@media (max-width: 991.98px) {\n  .table-responsive-lg {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; } }\n\n@media (max-width: 1199.98px) {\n  .table-responsive-xl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; } }\n\n@media (max-width: 1399.98px) {\n  .table-responsive-xxl {\n    overflow-x: auto;\n    -webkit-overflow-scrolling: touch; } }\n\n.form-label {\n  margin-bottom: 0.5rem; }\n\n.col-form-label {\n  padding-top: calc(0.56rem + 1px);\n  padding-bottom: calc(0.56rem + 1px);\n  margin-bottom: 0;\n  font-size: inherit;\n  line-height: 1; }\n\n.col-form-label-lg {\n  padding-top: calc(0.94rem + 1px);\n  padding-bottom: calc(0.94rem + 1px);\n  font-size: 1.25rem; }\n\n.col-form-label-sm {\n  padding-top: calc(0.5rem + 1px);\n  padding-bottom: calc(0.5rem + 1px);\n  font-size: 0.875rem; }\n\n.form-text {\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #6c757d; }\n\n.form-control, .asColorPicker-input, .dataTables_wrapper select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .select2-container--default .select2-selection--single, .select2-container--default .select2-selection--single .select2-search__field, .typeahead,\n.tt-query,\n.tt-hint {\n  display: block;\n  width: 100%;\n  padding: 0.56rem 0.75rem;\n  font-size: 0.875rem;\n  font-weight: 400;\n  line-height: 1;\n  color: #212529;\n  background-color: #2A3038;\n  background-clip: padding-box;\n  border: 1px solid #2c2e33;\n  appearance: none;\n  border-radius: 2px;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .form-control, .asColorPicker-input, .dataTables_wrapper select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text],\n    .jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .select2-container--default .select2-selection--single, .select2-container--default .select2-selection--single .select2-search__field, .typeahead,\n    .tt-query,\n    .tt-hint {\n      transition: none; } }\n  .form-control[type=\"file\"], .asColorPicker-input[type=\"file\"], .dataTables_wrapper select[type=\"file\"], .jsgrid .jsgrid-table .jsgrid-filter-row input[type=\"file\"][type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select[type=\"file\"], .jsgrid .jsgrid-table .jsgrid-filter-row input[type=\"file\"][type=number], .select2-container--default .select2-selection--single[type=\"file\"], .select2-container--default .select2-selection--single .select2-search__field[type=\"file\"], .typeahead[type=\"file\"],\n  .tt-query[type=\"file\"],\n  .tt-hint[type=\"file\"] {\n    overflow: hidden; }\n    .form-control[type=\"file\"]:not(:disabled):not([readonly]), .asColorPicker-input[type=\"file\"]:not(:disabled):not([readonly]), .dataTables_wrapper select[type=\"file\"]:not(:disabled):not([readonly]), .jsgrid .jsgrid-table .jsgrid-filter-row input[type=\"file\"]:not(:disabled):not([readonly])[type=text],\n    .jsgrid .jsgrid-table .jsgrid-filter-row select[type=\"file\"]:not(:disabled):not([readonly]), .jsgrid .jsgrid-table .jsgrid-filter-row input[type=\"file\"]:not(:disabled):not([readonly])[type=number], .select2-container--default .select2-selection--single[type=\"file\"]:not(:disabled):not([readonly]), .select2-container--default .select2-selection--single .select2-search__field[type=\"file\"]:not(:disabled):not([readonly]), .typeahead[type=\"file\"]:not(:disabled):not([readonly]),\n    .tt-query[type=\"file\"]:not(:disabled):not([readonly]),\n    .tt-hint[type=\"file\"]:not(:disabled):not([readonly]) {\n      cursor: pointer; }\n  .form-control:focus, .asColorPicker-input:focus, .dataTables_wrapper select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .select2-container--default .select2-selection--single:focus, .select2-container--default .select2-selection--single .select2-search__field:focus, .typeahead:focus,\n  .tt-query:focus,\n  .tt-hint:focus {\n    color: #212529;\n    background-color: #fff;\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n  .form-control::-webkit-date-and-time-value, .asColorPicker-input::-webkit-date-and-time-value, .dataTables_wrapper select::-webkit-date-and-time-value, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::-webkit-date-and-time-value,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select::-webkit-date-and-time-value, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::-webkit-date-and-time-value, .select2-container--default .select2-selection--single::-webkit-date-and-time-value, .select2-container--default .select2-selection--single .select2-search__field::-webkit-date-and-time-value, .typeahead::-webkit-date-and-time-value,\n  .tt-query::-webkit-date-and-time-value,\n  .tt-hint::-webkit-date-and-time-value {\n    height: 1em; }\n  .form-control::placeholder, .asColorPicker-input::placeholder, .dataTables_wrapper select::placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::placeholder,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select::placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::placeholder, .select2-container--default .select2-selection--single::placeholder, .select2-container--default .select2-selection--single .select2-search__field::placeholder, .typeahead::placeholder,\n  .tt-query::placeholder,\n  .tt-hint::placeholder {\n    color: #4b5564;\n    opacity: 1; }\n  .form-control:disabled, .asColorPicker-input:disabled, .dataTables_wrapper select:disabled, .jsgrid .jsgrid-table .jsgrid-filter-row input:disabled[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select:disabled, .jsgrid .jsgrid-table .jsgrid-filter-row input:disabled[type=number], .select2-container--default .select2-selection--single:disabled, .select2-container--default .select2-selection--single .select2-search__field:disabled, .typeahead:disabled,\n  .tt-query:disabled,\n  .tt-hint:disabled, .form-control[readonly], .asColorPicker-input[readonly], .dataTables_wrapper select[readonly], .jsgrid .jsgrid-table .jsgrid-filter-row input[readonly][type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select[readonly], .jsgrid .jsgrid-table .jsgrid-filter-row input[readonly][type=number], .select2-container--default .select2-selection--single[readonly], .select2-container--default .select2-selection--single .select2-search__field[readonly], .typeahead[readonly],\n  .tt-query[readonly],\n  .tt-hint[readonly] {\n    background-color: #e9ecef;\n    opacity: 1; }\n  .form-control::file-selector-button, .asColorPicker-input::file-selector-button, .dataTables_wrapper select::file-selector-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::file-selector-button,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select::file-selector-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::file-selector-button, .select2-container--default .select2-selection--single::file-selector-button, .select2-container--default .select2-selection--single .select2-search__field::file-selector-button, .typeahead::file-selector-button,\n  .tt-query::file-selector-button,\n  .tt-hint::file-selector-button {\n    padding: 0.56rem 0.75rem;\n    margin: -0.56rem -0.75rem;\n    margin-inline-end: 0.75rem;\n    color: #212529;\n    background-color: #e9ecef;\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: 1px;\n    border-radius: 0;\n    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n    @media (prefers-reduced-motion: reduce) {\n      .form-control::file-selector-button, .asColorPicker-input::file-selector-button, .dataTables_wrapper select::file-selector-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::file-selector-button,\n      .jsgrid .jsgrid-table .jsgrid-filter-row select::file-selector-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::file-selector-button, .select2-container--default .select2-selection--single::file-selector-button, .select2-container--default .select2-selection--single .select2-search__field::file-selector-button, .typeahead::file-selector-button,\n      .tt-query::file-selector-button,\n      .tt-hint::file-selector-button {\n        transition: none; } }\n  .form-control:hover:not(:disabled):not([readonly])::file-selector-button, .asColorPicker-input:hover:not(:disabled):not([readonly])::file-selector-button, .dataTables_wrapper select:hover:not(:disabled):not([readonly])::file-selector-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]:hover:not(:disabled):not([readonly])::file-selector-button,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select:hover:not(:disabled):not([readonly])::file-selector-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]:hover:not(:disabled):not([readonly])::file-selector-button, .select2-container--default .select2-selection--single:hover:not(:disabled):not([readonly])::file-selector-button, .select2-container--default .select2-selection--single .select2-search__field:hover:not(:disabled):not([readonly])::file-selector-button, .typeahead:hover:not(:disabled):not([readonly])::file-selector-button,\n  .tt-query:hover:not(:disabled):not([readonly])::file-selector-button,\n  .tt-hint:hover:not(:disabled):not([readonly])::file-selector-button {\n    background-color: #dde0e3; }\n  .form-control::-webkit-file-upload-button, .asColorPicker-input::-webkit-file-upload-button, .dataTables_wrapper select::-webkit-file-upload-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::-webkit-file-upload-button,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select::-webkit-file-upload-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::-webkit-file-upload-button, .select2-container--default .select2-selection--single::-webkit-file-upload-button, .select2-container--default .select2-selection--single .select2-search__field::-webkit-file-upload-button, .typeahead::-webkit-file-upload-button,\n  .tt-query::-webkit-file-upload-button,\n  .tt-hint::-webkit-file-upload-button {\n    padding: 0.56rem 0.75rem;\n    margin: -0.56rem -0.75rem;\n    margin-inline-end: 0.75rem;\n    color: #212529;\n    background-color: #e9ecef;\n    pointer-events: none;\n    border-color: inherit;\n    border-style: solid;\n    border-width: 0;\n    border-inline-end-width: 1px;\n    border-radius: 0;\n    transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n    @media (prefers-reduced-motion: reduce) {\n      .form-control::-webkit-file-upload-button, .asColorPicker-input::-webkit-file-upload-button, .dataTables_wrapper select::-webkit-file-upload-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::-webkit-file-upload-button,\n      .jsgrid .jsgrid-table .jsgrid-filter-row select::-webkit-file-upload-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::-webkit-file-upload-button, .select2-container--default .select2-selection--single::-webkit-file-upload-button, .select2-container--default .select2-selection--single .select2-search__field::-webkit-file-upload-button, .typeahead::-webkit-file-upload-button,\n      .tt-query::-webkit-file-upload-button,\n      .tt-hint::-webkit-file-upload-button {\n        transition: none; } }\n  .form-control:hover:not(:disabled):not([readonly])::-webkit-file-upload-button, .asColorPicker-input:hover:not(:disabled):not([readonly])::-webkit-file-upload-button, .dataTables_wrapper select:hover:not(:disabled):not([readonly])::-webkit-file-upload-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select:hover:not(:disabled):not([readonly])::-webkit-file-upload-button, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]:hover:not(:disabled):not([readonly])::-webkit-file-upload-button, .select2-container--default .select2-selection--single:hover:not(:disabled):not([readonly])::-webkit-file-upload-button, .select2-container--default .select2-selection--single .select2-search__field:hover:not(:disabled):not([readonly])::-webkit-file-upload-button, .typeahead:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,\n  .tt-query:hover:not(:disabled):not([readonly])::-webkit-file-upload-button,\n  .tt-hint:hover:not(:disabled):not([readonly])::-webkit-file-upload-button {\n    background-color: #dde0e3; }\n\n.form-control-plaintext {\n  display: block;\n  width: 100%;\n  padding: 0.56rem 0;\n  margin-bottom: 0;\n  line-height: 1;\n  color: #212529;\n  background-color: transparent;\n  border: solid transparent;\n  border-width: 1px 0; }\n  .form-control-plaintext.form-control-sm, .form-control-plaintext.form-control-lg {\n    padding-right: 0;\n    padding-left: 0; }\n\n.form-control-sm {\n  min-height: 2.575rem;\n  padding: 0.5rem 0.81rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem; }\n  .form-control-sm::file-selector-button {\n    padding: 0.5rem 0.81rem;\n    margin: -0.5rem -0.81rem;\n    margin-inline-end: 0.81rem; }\n  .form-control-sm::-webkit-file-upload-button {\n    padding: 0.5rem 0.81rem;\n    margin: -0.5rem -0.81rem;\n    margin-inline-end: 0.81rem; }\n\n.form-control-lg {\n  min-height: 3.175rem;\n  padding: 0.94rem 1.94rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem; }\n  .form-control-lg::file-selector-button {\n    padding: 0.94rem 1.94rem;\n    margin: -0.94rem -1.94rem;\n    margin-inline-end: 1.94rem; }\n  .form-control-lg::-webkit-file-upload-button {\n    padding: 0.94rem 1.94rem;\n    margin: -0.94rem -1.94rem;\n    margin-inline-end: 1.94rem; }\n\ntextarea.form-control, textarea.asColorPicker-input, .select2-container--default textarea.select2-selection--single, .select2-container--default .select2-selection--single textarea.select2-search__field, textarea.typeahead,\ntextarea.tt-query,\ntextarea.tt-hint {\n  min-height: 2.875rem; }\n\ntextarea.form-control-sm {\n  min-height: 2.575rem; }\n\ntextarea.form-control-lg {\n  min-height: 3.175rem; }\n\n.form-control-color {\n  width: 3rem;\n  height: auto;\n  padding: 0.56rem; }\n  .form-control-color:not(:disabled):not([readonly]) {\n    cursor: pointer; }\n  .form-control-color::-moz-color-swatch {\n    height: 1em;\n    border-radius: 2px; }\n  .form-control-color::-webkit-color-swatch {\n    height: 1em;\n    border-radius: 2px; }\n\n.form-select {\n  display: block;\n  width: 100%;\n  padding: 0.375rem 2.25rem 0.375rem 0.75rem;\n  -moz-padding-start: calc(0.75rem - 3px);\n  font-size: 1rem;\n  font-weight: 400;\n  line-height: 1.5;\n  color: #212529;\n  background-color: #fff;\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right 0.75rem center;\n  background-size: 16px 12px;\n  border: 1px solid #ced4da;\n  border-radius: 0.25rem;\n  transition: border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n  appearance: none; }\n  @media (prefers-reduced-motion: reduce) {\n    .form-select {\n      transition: none; } }\n  .form-select:focus {\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n  .form-select[multiple], .form-select[size]:not([size=\"1\"]) {\n    padding-right: 0.75rem;\n    background-image: none; }\n  .form-select:disabled {\n    background-color: #e9ecef; }\n  .form-select:-moz-focusring {\n    color: transparent;\n    text-shadow: 0 0 0 #212529; }\n\n.form-select-sm {\n  padding-top: 0.25rem;\n  padding-bottom: 0.25rem;\n  padding-left: 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem; }\n\n.form-select-lg {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem;\n  padding-left: 1rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem; }\n\n.form-check {\n  display: block;\n  min-height: 1.5rem;\n  padding-left: 1.5em;\n  margin-bottom: 0.125rem; }\n  .form-check .form-check-input {\n    float: left;\n    margin-left: -1.5em; }\n\n.form-check-input {\n  width: 1em;\n  height: 1em;\n  margin-top: 0.25em;\n  vertical-align: top;\n  background-color: #fff;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: contain;\n  border: 1px solid rgba(0, 0, 0, 0.25);\n  appearance: none;\n  color-adjust: exact; }\n  .form-check-input[type=\"checkbox\"] {\n    border-radius: 0.25em; }\n  .form-check-input[type=\"radio\"] {\n    border-radius: 50%; }\n  .form-check-input:active {\n    filter: brightness(90%); }\n  .form-check-input:focus {\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n  .form-check-input:checked {\n    background-color: #0d6efd;\n    border-color: #0d6efd; }\n    .form-check-input:checked[type=\"checkbox\"] {\n      background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10l3 3l6-6'/%3e%3c/svg%3e\"); }\n    .form-check-input:checked[type=\"radio\"] {\n      background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e\"); }\n  .form-check-input[type=\"checkbox\"]:indeterminate {\n    background-color: #0d6efd;\n    border-color: #0d6efd;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e\"); }\n  .form-check-input:disabled {\n    pointer-events: none;\n    filter: none;\n    opacity: 0.5; }\n  .form-check-input[disabled] ~ .form-check-label, .form-check-input:disabled ~ .form-check-label {\n    opacity: 0.5; }\n\n.form-switch {\n  padding-left: 2.5em; }\n  .form-switch .form-check-input {\n    width: 2em;\n    margin-left: -2.5em;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280, 0, 0, 0.25%29'/%3e%3c/svg%3e\");\n    background-position: left center;\n    border-radius: 2em;\n    transition: background-position 0.15s ease-in-out; }\n    @media (prefers-reduced-motion: reduce) {\n      .form-switch .form-check-input {\n        transition: none; } }\n    .form-switch .form-check-input:focus {\n      background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e\"); }\n    .form-switch .form-check-input:checked {\n      background-position: right center;\n      background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e\"); }\n\n.form-check-inline {\n  display: inline-block;\n  margin-right: 1rem; }\n\n.btn-check {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none; }\n  .btn-check[disabled] + .btn, .fc .btn-check[disabled] + button, .ajax-upload-dragdrop .btn-check[disabled] + .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-check[disabled] + .swal2-styled, .btn-check:disabled + .btn, .fc .btn-check:disabled + button, .ajax-upload-dragdrop .btn-check:disabled + .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-check:disabled + .swal2-styled {\n    pointer-events: none;\n    filter: none;\n    opacity: 0.65; }\n\n.form-range {\n  width: 100%;\n  height: 1.5rem;\n  padding: 0;\n  background-color: transparent;\n  appearance: none; }\n  .form-range:focus {\n    outline: 0; }\n    .form-range:focus::-webkit-slider-thumb {\n      box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n    .form-range:focus::-moz-range-thumb {\n      box-shadow: 0 0 0 1px #fff, 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n  .form-range::-moz-focus-outer {\n    border: 0; }\n  .form-range::-webkit-slider-thumb {\n    width: 1rem;\n    height: 1rem;\n    margin-top: -0.25rem;\n    background-color: #0d6efd;\n    border: 0;\n    border-radius: 1rem;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    appearance: none; }\n    @media (prefers-reduced-motion: reduce) {\n      .form-range::-webkit-slider-thumb {\n        transition: none; } }\n    .form-range::-webkit-slider-thumb:active {\n      background-color: #b6d4fe; }\n  .form-range::-webkit-slider-runnable-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dee2e6;\n    border-color: transparent;\n    border-radius: 1rem; }\n  .form-range::-moz-range-thumb {\n    width: 1rem;\n    height: 1rem;\n    background-color: #0d6efd;\n    border: 0;\n    border-radius: 1rem;\n    transition: background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out;\n    appearance: none; }\n    @media (prefers-reduced-motion: reduce) {\n      .form-range::-moz-range-thumb {\n        transition: none; } }\n    .form-range::-moz-range-thumb:active {\n      background-color: #b6d4fe; }\n  .form-range::-moz-range-track {\n    width: 100%;\n    height: 0.5rem;\n    color: transparent;\n    cursor: pointer;\n    background-color: #dee2e6;\n    border-color: transparent;\n    border-radius: 1rem; }\n  .form-range:disabled {\n    pointer-events: none; }\n    .form-range:disabled::-webkit-slider-thumb {\n      background-color: #adb5bd; }\n    .form-range:disabled::-moz-range-thumb {\n      background-color: #adb5bd; }\n\n.form-floating {\n  position: relative; }\n  .form-floating > .form-control, .form-floating > .asColorPicker-input, .dataTables_wrapper .form-floating > select, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input[type=number], .select2-container--default .form-floating > .select2-selection--single, .select2-container--default .select2-selection--single .form-floating > .select2-search__field, .form-floating > .typeahead,\n  .form-floating > .tt-query,\n  .form-floating > .tt-hint,\n  .form-floating > .form-select {\n    height: calc(3.5rem + 2px);\n    line-height: 1.25; }\n  .form-floating > label {\n    position: absolute;\n    top: 0;\n    left: 0;\n    height: 100%;\n    padding: 1rem 0.75rem;\n    pointer-events: none;\n    border: 1px solid transparent;\n    transform-origin: 0 0;\n    transition: opacity 0.1s ease-in-out, transform 0.1s ease-in-out; }\n    @media (prefers-reduced-motion: reduce) {\n      .form-floating > label {\n        transition: none; } }\n  .form-floating > .form-control, .form-floating > .asColorPicker-input, .dataTables_wrapper .form-floating > select, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input[type=number], .select2-container--default .form-floating > .select2-selection--single, .select2-container--default .select2-selection--single .form-floating > .select2-search__field, .form-floating > .typeahead,\n  .form-floating > .tt-query,\n  .form-floating > .tt-hint {\n    padding: 1rem 0.75rem; }\n    .form-floating > .form-control::placeholder, .form-floating > .asColorPicker-input::placeholder, .dataTables_wrapper .form-floating > select::placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input[type=text]::placeholder,\n    .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select::placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input[type=number]::placeholder, .select2-container--default .form-floating > .select2-selection--single::placeholder, .select2-container--default .select2-selection--single .form-floating > .select2-search__field::placeholder, .form-floating > .typeahead::placeholder,\n    .form-floating > .tt-query::placeholder,\n    .form-floating > .tt-hint::placeholder {\n      color: transparent; }\n    .form-floating > .form-control:focus, .form-floating > .asColorPicker-input:focus, .dataTables_wrapper .form-floating > select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:focus[type=text],\n    .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:focus[type=number], .select2-container--default .form-floating > .select2-selection--single:focus, .select2-container--default .select2-selection--single .form-floating > .select2-search__field:focus, .form-floating > .typeahead:focus,\n    .form-floating > .tt-query:focus,\n    .form-floating > .tt-hint:focus, .form-floating > .form-control:not(:placeholder-shown), .form-floating > .asColorPicker-input:not(:placeholder-shown), .dataTables_wrapper .form-floating > select:not(:placeholder-shown), .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:not(:placeholder-shown)[type=text],\n    .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select:not(:placeholder-shown), .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:not(:placeholder-shown)[type=number], .select2-container--default .form-floating > .select2-selection--single:not(:placeholder-shown), .select2-container--default .select2-selection--single .form-floating > .select2-search__field:not(:placeholder-shown), .form-floating > .typeahead:not(:placeholder-shown),\n    .form-floating > .tt-query:not(:placeholder-shown),\n    .form-floating > .tt-hint:not(:placeholder-shown) {\n      padding-top: 1.625rem;\n      padding-bottom: 0.625rem; }\n    .form-floating > .form-control:-webkit-autofill, .form-floating > .asColorPicker-input:-webkit-autofill, .dataTables_wrapper .form-floating > select:-webkit-autofill, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:-webkit-autofill[type=text],\n    .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select:-webkit-autofill, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:-webkit-autofill[type=number], .select2-container--default .form-floating > .select2-selection--single:-webkit-autofill, .select2-container--default .select2-selection--single .form-floating > .select2-search__field:-webkit-autofill, .form-floating > .typeahead:-webkit-autofill,\n    .form-floating > .tt-query:-webkit-autofill,\n    .form-floating > .tt-hint:-webkit-autofill {\n      padding-top: 1.625rem;\n      padding-bottom: 0.625rem; }\n  .form-floating > .form-select {\n    padding-top: 1.625rem;\n    padding-bottom: 0.625rem; }\n  .form-floating > .form-control:focus ~ label, .form-floating > .asColorPicker-input:focus ~ label, .dataTables_wrapper .form-floating > select:focus ~ label, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:focus[type=text] ~ label, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select:focus ~ label, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:focus[type=number] ~ label, .select2-container--default .form-floating > .select2-selection--single:focus ~ label, .select2-container--default .select2-selection--single .form-floating > .select2-search__field:focus ~ label, .form-floating > .typeahead:focus ~ label, .form-floating > .tt-query:focus ~ label, .form-floating > .tt-hint:focus ~ label,\n  .form-floating > .form-control:not(:placeholder-shown) ~ label,\n  .form-floating > .asColorPicker-input:not(:placeholder-shown) ~ label,\n  .dataTables_wrapper .form-floating > select:not(:placeholder-shown) ~ label,\n  .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:not(:placeholder-shown)[type=text] ~ label,\n  .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select:not(:placeholder-shown) ~ label,\n  .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:not(:placeholder-shown)[type=number] ~ label,\n  .select2-container--default .form-floating > .select2-selection--single:not(:placeholder-shown) ~ label,\n  .select2-container--default .select2-selection--single .form-floating > .select2-search__field:not(:placeholder-shown) ~ label,\n  .form-floating > .typeahead:not(:placeholder-shown) ~ label,\n  .form-floating > .tt-query:not(:placeholder-shown) ~ label,\n  .form-floating > .tt-hint:not(:placeholder-shown) ~ label,\n  .form-floating > .form-select ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); }\n  .form-floating > .form-control:-webkit-autofill ~ label, .form-floating > .asColorPicker-input:-webkit-autofill ~ label, .dataTables_wrapper .form-floating > select:-webkit-autofill ~ label, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:-webkit-autofill[type=text] ~ label, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > select:-webkit-autofill ~ label, .jsgrid .jsgrid-table .jsgrid-filter-row .form-floating > input:-webkit-autofill[type=number] ~ label, .select2-container--default .form-floating > .select2-selection--single:-webkit-autofill ~ label, .select2-container--default .select2-selection--single .form-floating > .select2-search__field:-webkit-autofill ~ label, .form-floating > .typeahead:-webkit-autofill ~ label, .form-floating > .tt-query:-webkit-autofill ~ label, .form-floating > .tt-hint:-webkit-autofill ~ label {\n    opacity: 0.65;\n    transform: scale(0.85) translateY(-0.5rem) translateX(0.15rem); }\n\n.input-group, .asColorPicker-wrap {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: stretch;\n  width: 100%; }\n  .input-group > .form-control, .asColorPicker-wrap > .form-control, .input-group > .asColorPicker-input, .asColorPicker-wrap > .asColorPicker-input, .dataTables_wrapper .input-group > select, .dataTables_wrapper .asColorPicker-wrap > select, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group > input[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap > input[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row .input-group > select,\n  .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap > select, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group > input[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap > input[type=number], .select2-container--default .input-group > .select2-selection--single, .select2-container--default .asColorPicker-wrap > .select2-selection--single, .select2-container--default .select2-selection--single .input-group > .select2-search__field, .select2-container--default .select2-selection--single .asColorPicker-wrap > .select2-search__field, .input-group > .typeahead, .asColorPicker-wrap > .typeahead,\n  .input-group > .tt-query,\n  .asColorPicker-wrap > .tt-query,\n  .input-group > .tt-hint,\n  .asColorPicker-wrap > .tt-hint,\n  .input-group > .form-select,\n  .asColorPicker-wrap > .form-select {\n    position: relative;\n    flex: 1 1 auto;\n    width: 1%;\n    min-width: 0; }\n  .input-group > .form-control:focus, .asColorPicker-wrap > .form-control:focus, .input-group > .asColorPicker-input:focus, .asColorPicker-wrap > .asColorPicker-input:focus, .dataTables_wrapper .input-group > select:focus, .dataTables_wrapper .asColorPicker-wrap > select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group > input:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap > input:focus[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row .input-group > select:focus,\n  .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap > select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group > input:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap > input:focus[type=number], .select2-container--default .input-group > .select2-selection--single:focus, .select2-container--default .asColorPicker-wrap > .select2-selection--single:focus, .select2-container--default .select2-selection--single .input-group > .select2-search__field:focus, .select2-container--default .select2-selection--single .asColorPicker-wrap > .select2-search__field:focus, .input-group > .typeahead:focus, .asColorPicker-wrap > .typeahead:focus,\n  .input-group > .tt-query:focus,\n  .asColorPicker-wrap > .tt-query:focus,\n  .input-group > .tt-hint:focus,\n  .asColorPicker-wrap > .tt-hint:focus,\n  .input-group > .form-select:focus,\n  .asColorPicker-wrap > .form-select:focus {\n    z-index: 3; }\n  .input-group .btn, .asColorPicker-wrap .btn, .input-group .fc button, .fc .input-group button, .asColorPicker-wrap .fc button, .fc .asColorPicker-wrap button, .input-group .ajax-upload-dragdrop .ajax-file-upload, .ajax-upload-dragdrop .input-group .ajax-file-upload, .asColorPicker-wrap .ajax-upload-dragdrop .ajax-file-upload, .ajax-upload-dragdrop .asColorPicker-wrap .ajax-file-upload, .input-group .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .input-group .swal2-styled, .asColorPicker-wrap .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .asColorPicker-wrap .swal2-styled {\n    position: relative;\n    z-index: 2; }\n    .input-group .btn:focus, .asColorPicker-wrap .btn:focus, .input-group .fc button:focus, .fc .input-group button:focus, .asColorPicker-wrap .fc button:focus, .fc .asColorPicker-wrap button:focus, .input-group .ajax-upload-dragdrop .ajax-file-upload:focus, .ajax-upload-dragdrop .input-group .ajax-file-upload:focus, .asColorPicker-wrap .ajax-upload-dragdrop .ajax-file-upload:focus, .ajax-upload-dragdrop .asColorPicker-wrap .ajax-file-upload:focus, .input-group .swal2-modal .swal2-buttonswrapper .swal2-styled:focus, .swal2-modal .swal2-buttonswrapper .input-group .swal2-styled:focus, .asColorPicker-wrap .swal2-modal .swal2-buttonswrapper .swal2-styled:focus, .swal2-modal .swal2-buttonswrapper .asColorPicker-wrap .swal2-styled:focus {\n      z-index: 3; }\n\n.input-group-text {\n  display: flex;\n  align-items: center;\n  padding: 0.375rem 0.75rem;\n  font-size: 0.875rem;\n  font-weight: 400;\n  line-height: 1;\n  color: #212529;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #e9ecef;\n  border: 1px solid #ced4da;\n  border-radius: 2px; }\n\n.input-group-lg > .form-control, .input-group-lg > .asColorPicker-input, .dataTables_wrapper .input-group-lg > select, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group-lg > input[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row .input-group-lg > select, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group-lg > input[type=number], .select2-container--default .input-group-lg > .select2-selection--single, .select2-container--default .select2-selection--single .input-group-lg > .select2-search__field, .input-group-lg > .typeahead,\n.input-group-lg > .tt-query,\n.input-group-lg > .tt-hint,\n.input-group-lg > .form-select,\n.input-group-lg > .input-group-text,\n.input-group-lg > .btn,\n.fc .input-group-lg > button,\n.ajax-upload-dragdrop .input-group-lg > .ajax-file-upload,\n.swal2-modal .swal2-buttonswrapper .input-group-lg > .swal2-styled {\n  padding: 0.94rem 1.94rem;\n  font-size: 1.25rem;\n  border-radius: 0.3rem; }\n\n.input-group-sm > .form-control, .input-group-sm > .asColorPicker-input, .dataTables_wrapper .input-group-sm > select, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group-sm > input[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row .input-group-sm > select, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group-sm > input[type=number], .select2-container--default .input-group-sm > .select2-selection--single, .select2-container--default .select2-selection--single .input-group-sm > .select2-search__field, .input-group-sm > .typeahead,\n.input-group-sm > .tt-query,\n.input-group-sm > .tt-hint,\n.input-group-sm > .form-select,\n.input-group-sm > .input-group-text,\n.input-group-sm > .btn,\n.fc .input-group-sm > button,\n.ajax-upload-dragdrop .input-group-sm > .ajax-file-upload,\n.swal2-modal .swal2-buttonswrapper .input-group-sm > .swal2-styled {\n  padding: 0.5rem 0.81rem;\n  font-size: 0.875rem;\n  border-radius: 0.2rem; }\n\n.input-group-lg > .form-select,\n.input-group-sm > .form-select {\n  padding-right: 3rem; }\n\n.input-group:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu), .asColorPicker-wrap:not(.has-validation) > :not(:last-child):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3),\n.asColorPicker-wrap:not(.has-validation) > .dropdown-toggle:nth-last-child(n + 3) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.input-group.has-validation > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu), .has-validation.asColorPicker-wrap > :nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu),\n.input-group.has-validation > .dropdown-toggle:nth-last-child(n + 4),\n.has-validation.asColorPicker-wrap > .dropdown-toggle:nth-last-child(n + 4) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.input-group > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback), .asColorPicker-wrap > :not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback) {\n  margin-left: -1px;\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.valid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #198754; }\n\n.valid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(25, 135, 84, 0.9);\n  border-radius: 0.25rem; }\n\n.was-validated :valid ~ .valid-feedback,\n.was-validated :valid ~ .valid-tooltip,\n.is-valid ~ .valid-feedback,\n.is-valid ~ .valid-tooltip {\n  display: block; }\n\n.was-validated .form-control:valid, .was-validated .asColorPicker-input:valid, .was-validated .dataTables_wrapper select:valid, .dataTables_wrapper .was-validated select:valid, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:valid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:valid[type=text],\n.was-validated .jsgrid .jsgrid-table .jsgrid-filter-row select:valid, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated select:valid, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:valid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:valid[type=number], .was-validated .select2-container--default .select2-selection--single:valid, .select2-container--default .was-validated .select2-selection--single:valid, .was-validated .select2-container--default .select2-selection--single .select2-search__field:valid, .select2-container--default .select2-selection--single .was-validated .select2-search__field:valid, .was-validated .typeahead:valid,\n.was-validated .tt-query:valid,\n.was-validated .tt-hint:valid, .form-control.is-valid, .is-valid.asColorPicker-input, .dataTables_wrapper select.is-valid, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select.is-valid, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid[type=number], .select2-container--default .is-valid.select2-selection--single, .select2-container--default .select2-selection--single .is-valid.select2-search__field, .is-valid.typeahead,\n.is-valid.tt-query,\n.is-valid.tt-hint {\n  border-color: #198754;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }\n  .was-validated .form-control:valid:focus, .was-validated .asColorPicker-input:valid:focus, .was-validated .dataTables_wrapper select:valid:focus, .dataTables_wrapper .was-validated select:valid:focus, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:valid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:valid:focus[type=text],\n  .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row select:valid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated select:valid:focus, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:valid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:valid:focus[type=number], .was-validated .select2-container--default .select2-selection--single:valid:focus, .select2-container--default .was-validated .select2-selection--single:valid:focus, .was-validated .select2-container--default .select2-selection--single .select2-search__field:valid:focus, .select2-container--default .select2-selection--single .was-validated .select2-search__field:valid:focus, .was-validated .typeahead:valid:focus,\n  .was-validated .tt-query:valid:focus,\n  .was-validated .tt-hint:valid:focus, .form-control.is-valid:focus, .is-valid.asColorPicker-input:focus, .dataTables_wrapper select.is-valid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid:focus[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.is-valid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid:focus[type=number], .select2-container--default .is-valid.select2-selection--single:focus, .select2-container--default .select2-selection--single .is-valid.select2-search__field:focus, .is-valid.typeahead:focus,\n  .is-valid.tt-query:focus,\n  .is-valid.tt-hint:focus {\n    border-color: #198754;\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); }\n\n.was-validated textarea.form-control:valid, .was-validated textarea.asColorPicker-input:valid, .was-validated .select2-container--default textarea.select2-selection--single:valid, .select2-container--default .was-validated textarea.select2-selection--single:valid, .was-validated .select2-container--default .select2-selection--single textarea.select2-search__field:valid, .select2-container--default .select2-selection--single .was-validated textarea.select2-search__field:valid, .was-validated textarea.typeahead:valid,\n.was-validated textarea.tt-query:valid,\n.was-validated textarea.tt-hint:valid, textarea.form-control.is-valid, textarea.is-valid.asColorPicker-input, .select2-container--default textarea.is-valid.select2-selection--single, .select2-container--default .select2-selection--single textarea.is-valid.select2-search__field, textarea.is-valid.typeahead,\ntextarea.is-valid.tt-query,\ntextarea.is-valid.tt-hint {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }\n\n.was-validated .form-select:valid, .form-select.is-valid {\n  border-color: #198754; }\n  .was-validated .form-select:valid:not([multiple]):not([size]), .was-validated .form-select:valid:not([multiple])[size=\"1\"], .form-select.is-valid:not([multiple]):not([size]), .form-select.is-valid:not([multiple])[size=\"1\"] {\n    padding-right: 4.125rem;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73L.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e\");\n    background-position: right 0.75rem center, center right 2.25rem;\n    background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }\n  .was-validated .form-select:valid:focus, .form-select.is-valid:focus {\n    border-color: #198754;\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); }\n\n.was-validated .form-check-input:valid, .form-check-input.is-valid {\n  border-color: #198754; }\n  .was-validated .form-check-input:valid:checked, .form-check-input.is-valid:checked {\n    background-color: #198754; }\n  .was-validated .form-check-input:valid:focus, .form-check-input.is-valid:focus {\n    box-shadow: 0 0 0 0.25rem rgba(25, 135, 84, 0.25); }\n  .was-validated .form-check-input:valid ~ .form-check-label, .form-check-input.is-valid ~ .form-check-label {\n    color: #198754; }\n\n.form-check-inline .form-check-input ~ .valid-feedback {\n  margin-left: .5em; }\n\n.was-validated .input-group .form-control:valid, .was-validated .asColorPicker-wrap .form-control:valid, .was-validated .input-group .asColorPicker-input:valid, .was-validated .asColorPicker-wrap .asColorPicker-input:valid, .was-validated .input-group .dataTables_wrapper select:valid, .dataTables_wrapper .was-validated .input-group select:valid, .was-validated .asColorPicker-wrap .dataTables_wrapper select:valid, .dataTables_wrapper .was-validated .asColorPicker-wrap select:valid, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:valid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:valid[type=text], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:valid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:valid[type=text],\n.was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select:valid, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group select:valid,\n.was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select:valid, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap select:valid, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:valid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:valid[type=number], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:valid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:valid[type=number], .was-validated .input-group .select2-container--default .select2-selection--single:valid, .select2-container--default .was-validated .input-group .select2-selection--single:valid, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single:valid, .select2-container--default .was-validated .asColorPicker-wrap .select2-selection--single:valid, .was-validated .input-group .select2-container--default .select2-selection--single .select2-search__field:valid, .select2-container--default .select2-selection--single .was-validated .input-group .select2-search__field:valid, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single .select2-search__field:valid, .select2-container--default .select2-selection--single .was-validated .asColorPicker-wrap .select2-search__field:valid, .was-validated .input-group .typeahead:valid, .was-validated .asColorPicker-wrap .typeahead:valid,\n.was-validated .input-group .tt-query:valid,\n.was-validated .asColorPicker-wrap .tt-query:valid,\n.was-validated .input-group .tt-hint:valid,\n.was-validated .asColorPicker-wrap .tt-hint:valid, .input-group .form-control.is-valid, .asColorPicker-wrap .form-control.is-valid, .input-group .is-valid.asColorPicker-input, .asColorPicker-wrap .is-valid.asColorPicker-input, .input-group .dataTables_wrapper select.is-valid, .dataTables_wrapper .input-group select.is-valid, .asColorPicker-wrap .dataTables_wrapper select.is-valid, .dataTables_wrapper .asColorPicker-wrap select.is-valid, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-valid[type=text], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-valid[type=text],\n.input-group .jsgrid .jsgrid-table .jsgrid-filter-row select.is-valid, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group select.is-valid,\n.asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select.is-valid, .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap select.is-valid, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-valid[type=number], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-valid[type=number], .input-group .select2-container--default .is-valid.select2-selection--single, .select2-container--default .input-group .is-valid.select2-selection--single, .asColorPicker-wrap .select2-container--default .is-valid.select2-selection--single, .select2-container--default .asColorPicker-wrap .is-valid.select2-selection--single, .input-group .select2-container--default .select2-selection--single .is-valid.select2-search__field, .select2-container--default .select2-selection--single .input-group .is-valid.select2-search__field, .asColorPicker-wrap .select2-container--default .select2-selection--single .is-valid.select2-search__field, .select2-container--default .select2-selection--single .asColorPicker-wrap .is-valid.select2-search__field, .input-group .is-valid.typeahead, .asColorPicker-wrap .is-valid.typeahead,\n.input-group .is-valid.tt-query,\n.asColorPicker-wrap .is-valid.tt-query,\n.input-group .is-valid.tt-hint,\n.asColorPicker-wrap .is-valid.tt-hint, .was-validated .input-group .form-select:valid, .was-validated .asColorPicker-wrap .form-select:valid,\n.input-group .form-select.is-valid,\n.asColorPicker-wrap .form-select.is-valid {\n  z-index: 1; }\n  .was-validated .input-group .form-control:valid:focus, .was-validated .asColorPicker-wrap .form-control:valid:focus, .was-validated .input-group .asColorPicker-input:valid:focus, .was-validated .asColorPicker-wrap .asColorPicker-input:valid:focus, .was-validated .input-group .dataTables_wrapper select:valid:focus, .dataTables_wrapper .was-validated .input-group select:valid:focus, .was-validated .asColorPicker-wrap .dataTables_wrapper select:valid:focus, .dataTables_wrapper .was-validated .asColorPicker-wrap select:valid:focus, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:valid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:valid:focus[type=text], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:valid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:valid:focus[type=text],\n  .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select:valid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group select:valid:focus,\n  .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select:valid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap select:valid:focus, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:valid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:valid:focus[type=number], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:valid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:valid:focus[type=number], .was-validated .input-group .select2-container--default .select2-selection--single:valid:focus, .select2-container--default .was-validated .input-group .select2-selection--single:valid:focus, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single:valid:focus, .select2-container--default .was-validated .asColorPicker-wrap .select2-selection--single:valid:focus, .was-validated .input-group .select2-container--default .select2-selection--single .select2-search__field:valid:focus, .select2-container--default .select2-selection--single .was-validated .input-group .select2-search__field:valid:focus, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single .select2-search__field:valid:focus, .select2-container--default .select2-selection--single .was-validated .asColorPicker-wrap .select2-search__field:valid:focus, .was-validated .input-group .typeahead:valid:focus, .was-validated .asColorPicker-wrap .typeahead:valid:focus,\n  .was-validated .input-group .tt-query:valid:focus,\n  .was-validated .asColorPicker-wrap .tt-query:valid:focus,\n  .was-validated .input-group .tt-hint:valid:focus,\n  .was-validated .asColorPicker-wrap .tt-hint:valid:focus, .input-group .form-control.is-valid:focus, .asColorPicker-wrap .form-control.is-valid:focus, .input-group .is-valid.asColorPicker-input:focus, .asColorPicker-wrap .is-valid.asColorPicker-input:focus, .input-group .dataTables_wrapper select.is-valid:focus, .dataTables_wrapper .input-group select.is-valid:focus, .asColorPicker-wrap .dataTables_wrapper select.is-valid:focus, .dataTables_wrapper .asColorPicker-wrap select.is-valid:focus, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-valid:focus[type=text], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-valid:focus[type=text],\n  .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select.is-valid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group select.is-valid:focus,\n  .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select.is-valid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap select.is-valid:focus, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-valid:focus[type=number], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-valid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-valid:focus[type=number], .input-group .select2-container--default .is-valid.select2-selection--single:focus, .select2-container--default .input-group .is-valid.select2-selection--single:focus, .asColorPicker-wrap .select2-container--default .is-valid.select2-selection--single:focus, .select2-container--default .asColorPicker-wrap .is-valid.select2-selection--single:focus, .input-group .select2-container--default .select2-selection--single .is-valid.select2-search__field:focus, .select2-container--default .select2-selection--single .input-group .is-valid.select2-search__field:focus, .asColorPicker-wrap .select2-container--default .select2-selection--single .is-valid.select2-search__field:focus, .select2-container--default .select2-selection--single .asColorPicker-wrap .is-valid.select2-search__field:focus, .input-group .is-valid.typeahead:focus, .asColorPicker-wrap .is-valid.typeahead:focus,\n  .input-group .is-valid.tt-query:focus,\n  .asColorPicker-wrap .is-valid.tt-query:focus,\n  .input-group .is-valid.tt-hint:focus,\n  .asColorPicker-wrap .is-valid.tt-hint:focus, .was-validated .input-group .form-select:valid:focus, .was-validated .asColorPicker-wrap .form-select:valid:focus,\n  .input-group .form-select.is-valid:focus,\n  .asColorPicker-wrap .form-select.is-valid:focus {\n    z-index: 3; }\n\n.invalid-feedback {\n  display: none;\n  width: 100%;\n  margin-top: 0.25rem;\n  font-size: 0.875em;\n  color: #dc3545; }\n\n.invalid-tooltip {\n  position: absolute;\n  top: 100%;\n  z-index: 5;\n  display: none;\n  max-width: 100%;\n  padding: 0.25rem 0.5rem;\n  margin-top: .1rem;\n  font-size: 0.875rem;\n  color: #fff;\n  background-color: rgba(220, 53, 69, 0.9);\n  border-radius: 0.25rem; }\n\n.was-validated :invalid ~ .invalid-feedback,\n.was-validated :invalid ~ .invalid-tooltip,\n.is-invalid ~ .invalid-feedback,\n.is-invalid ~ .invalid-tooltip {\n  display: block; }\n\n.was-validated .form-control:invalid, .was-validated .asColorPicker-input:invalid, .was-validated .dataTables_wrapper select:invalid, .dataTables_wrapper .was-validated select:invalid, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:invalid[type=text],\n.was-validated .jsgrid .jsgrid-table .jsgrid-filter-row select:invalid, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated select:invalid, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:invalid[type=number], .was-validated .select2-container--default .select2-selection--single:invalid, .select2-container--default .was-validated .select2-selection--single:invalid, .was-validated .select2-container--default .select2-selection--single .select2-search__field:invalid, .select2-container--default .select2-selection--single .was-validated .select2-search__field:invalid, .was-validated .typeahead:invalid,\n.was-validated .tt-query:invalid,\n.was-validated .tt-hint:invalid, .form-control.is-invalid, .is-invalid.asColorPicker-input, .dataTables_wrapper select.is-invalid, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select.is-invalid, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid[type=number], .select2-container--default .is-invalid.select2-selection--single, .select2-container--default .select2-selection--single .is-invalid.select2-search__field, .is-invalid.typeahead,\n.is-invalid.tt-query,\n.is-invalid.tt-hint {\n  border-color: #dc3545;\n  padding-right: calc(1.5em + 0.75rem);\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n  background-repeat: no-repeat;\n  background-position: right calc(0.375em + 0.1875rem) center;\n  background-size: calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }\n  .was-validated .form-control:invalid:focus, .was-validated .asColorPicker-input:invalid:focus, .was-validated .dataTables_wrapper select:invalid:focus, .dataTables_wrapper .was-validated select:invalid:focus, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:invalid:focus[type=text],\n  .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row select:invalid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated select:invalid:focus, .was-validated .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated input:invalid:focus[type=number], .was-validated .select2-container--default .select2-selection--single:invalid:focus, .select2-container--default .was-validated .select2-selection--single:invalid:focus, .was-validated .select2-container--default .select2-selection--single .select2-search__field:invalid:focus, .select2-container--default .select2-selection--single .was-validated .select2-search__field:invalid:focus, .was-validated .typeahead:invalid:focus,\n  .was-validated .tt-query:invalid:focus,\n  .was-validated .tt-hint:invalid:focus, .form-control.is-invalid:focus, .is-invalid.asColorPicker-input:focus, .dataTables_wrapper select.is-invalid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid:focus[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.is-invalid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid:focus[type=number], .select2-container--default .is-invalid.select2-selection--single:focus, .select2-container--default .select2-selection--single .is-invalid.select2-search__field:focus, .is-invalid.typeahead:focus,\n  .is-invalid.tt-query:focus,\n  .is-invalid.tt-hint:focus {\n    border-color: #dc3545;\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); }\n\n.was-validated textarea.form-control:invalid, .was-validated textarea.asColorPicker-input:invalid, .was-validated .select2-container--default textarea.select2-selection--single:invalid, .select2-container--default .was-validated textarea.select2-selection--single:invalid, .was-validated .select2-container--default .select2-selection--single textarea.select2-search__field:invalid, .select2-container--default .select2-selection--single .was-validated textarea.select2-search__field:invalid, .was-validated textarea.typeahead:invalid,\n.was-validated textarea.tt-query:invalid,\n.was-validated textarea.tt-hint:invalid, textarea.form-control.is-invalid, textarea.is-invalid.asColorPicker-input, .select2-container--default textarea.is-invalid.select2-selection--single, .select2-container--default .select2-selection--single textarea.is-invalid.select2-search__field, textarea.is-invalid.typeahead,\ntextarea.is-invalid.tt-query,\ntextarea.is-invalid.tt-hint {\n  padding-right: calc(1.5em + 0.75rem);\n  background-position: top calc(0.375em + 0.1875rem) right calc(0.375em + 0.1875rem); }\n\n.was-validated .form-select:invalid, .form-select.is-invalid {\n  border-color: #dc3545; }\n  .was-validated .form-select:invalid:not([multiple]):not([size]), .was-validated .form-select:invalid:not([multiple])[size=\"1\"], .form-select.is-invalid:not([multiple]):not([size]), .form-select.is-invalid:not([multiple])[size=\"1\"] {\n    padding-right: 4.125rem;\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M2 5l6 6 6-6'/%3e%3c/svg%3e\"), url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e\");\n    background-position: right 0.75rem center, center right 2.25rem;\n    background-size: 16px 12px, calc(0.75em + 0.375rem) calc(0.75em + 0.375rem); }\n  .was-validated .form-select:invalid:focus, .form-select.is-invalid:focus {\n    border-color: #dc3545;\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); }\n\n.was-validated .form-check-input:invalid, .form-check-input.is-invalid {\n  border-color: #dc3545; }\n  .was-validated .form-check-input:invalid:checked, .form-check-input.is-invalid:checked {\n    background-color: #dc3545; }\n  .was-validated .form-check-input:invalid:focus, .form-check-input.is-invalid:focus {\n    box-shadow: 0 0 0 0.25rem rgba(220, 53, 69, 0.25); }\n  .was-validated .form-check-input:invalid ~ .form-check-label, .form-check-input.is-invalid ~ .form-check-label {\n    color: #dc3545; }\n\n.form-check-inline .form-check-input ~ .invalid-feedback {\n  margin-left: .5em; }\n\n.was-validated .input-group .form-control:invalid, .was-validated .asColorPicker-wrap .form-control:invalid, .was-validated .input-group .asColorPicker-input:invalid, .was-validated .asColorPicker-wrap .asColorPicker-input:invalid, .was-validated .input-group .dataTables_wrapper select:invalid, .dataTables_wrapper .was-validated .input-group select:invalid, .was-validated .asColorPicker-wrap .dataTables_wrapper select:invalid, .dataTables_wrapper .was-validated .asColorPicker-wrap select:invalid, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:invalid[type=text], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:invalid[type=text],\n.was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select:invalid, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group select:invalid,\n.was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select:invalid, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap select:invalid, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:invalid[type=number], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:invalid[type=number], .was-validated .input-group .select2-container--default .select2-selection--single:invalid, .select2-container--default .was-validated .input-group .select2-selection--single:invalid, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single:invalid, .select2-container--default .was-validated .asColorPicker-wrap .select2-selection--single:invalid, .was-validated .input-group .select2-container--default .select2-selection--single .select2-search__field:invalid, .select2-container--default .select2-selection--single .was-validated .input-group .select2-search__field:invalid, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single .select2-search__field:invalid, .select2-container--default .select2-selection--single .was-validated .asColorPicker-wrap .select2-search__field:invalid, .was-validated .input-group .typeahead:invalid, .was-validated .asColorPicker-wrap .typeahead:invalid,\n.was-validated .input-group .tt-query:invalid,\n.was-validated .asColorPicker-wrap .tt-query:invalid,\n.was-validated .input-group .tt-hint:invalid,\n.was-validated .asColorPicker-wrap .tt-hint:invalid, .input-group .form-control.is-invalid, .asColorPicker-wrap .form-control.is-invalid, .input-group .is-invalid.asColorPicker-input, .asColorPicker-wrap .is-invalid.asColorPicker-input, .input-group .dataTables_wrapper select.is-invalid, .dataTables_wrapper .input-group select.is-invalid, .asColorPicker-wrap .dataTables_wrapper select.is-invalid, .dataTables_wrapper .asColorPicker-wrap select.is-invalid, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-invalid[type=text], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-invalid[type=text],\n.input-group .jsgrid .jsgrid-table .jsgrid-filter-row select.is-invalid, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group select.is-invalid,\n.asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select.is-invalid, .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap select.is-invalid, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-invalid[type=number], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-invalid[type=number], .input-group .select2-container--default .is-invalid.select2-selection--single, .select2-container--default .input-group .is-invalid.select2-selection--single, .asColorPicker-wrap .select2-container--default .is-invalid.select2-selection--single, .select2-container--default .asColorPicker-wrap .is-invalid.select2-selection--single, .input-group .select2-container--default .select2-selection--single .is-invalid.select2-search__field, .select2-container--default .select2-selection--single .input-group .is-invalid.select2-search__field, .asColorPicker-wrap .select2-container--default .select2-selection--single .is-invalid.select2-search__field, .select2-container--default .select2-selection--single .asColorPicker-wrap .is-invalid.select2-search__field, .input-group .is-invalid.typeahead, .asColorPicker-wrap .is-invalid.typeahead,\n.input-group .is-invalid.tt-query,\n.asColorPicker-wrap .is-invalid.tt-query,\n.input-group .is-invalid.tt-hint,\n.asColorPicker-wrap .is-invalid.tt-hint, .was-validated .input-group .form-select:invalid, .was-validated .asColorPicker-wrap .form-select:invalid,\n.input-group .form-select.is-invalid,\n.asColorPicker-wrap .form-select.is-invalid {\n  z-index: 2; }\n  .was-validated .input-group .form-control:invalid:focus, .was-validated .asColorPicker-wrap .form-control:invalid:focus, .was-validated .input-group .asColorPicker-input:invalid:focus, .was-validated .asColorPicker-wrap .asColorPicker-input:invalid:focus, .was-validated .input-group .dataTables_wrapper select:invalid:focus, .dataTables_wrapper .was-validated .input-group select:invalid:focus, .was-validated .asColorPicker-wrap .dataTables_wrapper select:invalid:focus, .dataTables_wrapper .was-validated .asColorPicker-wrap select:invalid:focus, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:invalid:focus[type=text], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:invalid:focus[type=text],\n  .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select:invalid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group select:invalid:focus,\n  .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select:invalid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap select:invalid:focus, .was-validated .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .input-group input:invalid:focus[type=number], .was-validated .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:invalid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .was-validated .asColorPicker-wrap input:invalid:focus[type=number], .was-validated .input-group .select2-container--default .select2-selection--single:invalid:focus, .select2-container--default .was-validated .input-group .select2-selection--single:invalid:focus, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single:invalid:focus, .select2-container--default .was-validated .asColorPicker-wrap .select2-selection--single:invalid:focus, .was-validated .input-group .select2-container--default .select2-selection--single .select2-search__field:invalid:focus, .select2-container--default .select2-selection--single .was-validated .input-group .select2-search__field:invalid:focus, .was-validated .asColorPicker-wrap .select2-container--default .select2-selection--single .select2-search__field:invalid:focus, .select2-container--default .select2-selection--single .was-validated .asColorPicker-wrap .select2-search__field:invalid:focus, .was-validated .input-group .typeahead:invalid:focus, .was-validated .asColorPicker-wrap .typeahead:invalid:focus,\n  .was-validated .input-group .tt-query:invalid:focus,\n  .was-validated .asColorPicker-wrap .tt-query:invalid:focus,\n  .was-validated .input-group .tt-hint:invalid:focus,\n  .was-validated .asColorPicker-wrap .tt-hint:invalid:focus, .input-group .form-control.is-invalid:focus, .asColorPicker-wrap .form-control.is-invalid:focus, .input-group .is-invalid.asColorPicker-input:focus, .asColorPicker-wrap .is-invalid.asColorPicker-input:focus, .input-group .dataTables_wrapper select.is-invalid:focus, .dataTables_wrapper .input-group select.is-invalid:focus, .asColorPicker-wrap .dataTables_wrapper select.is-invalid:focus, .dataTables_wrapper .asColorPicker-wrap select.is-invalid:focus, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-invalid:focus[type=text], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-invalid:focus[type=text],\n  .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select.is-invalid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .input-group select.is-invalid:focus,\n  .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select.is-invalid:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap select.is-invalid:focus, .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .input-group input.is-invalid:focus[type=number], .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input.is-invalid:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .asColorPicker-wrap input.is-invalid:focus[type=number], .input-group .select2-container--default .is-invalid.select2-selection--single:focus, .select2-container--default .input-group .is-invalid.select2-selection--single:focus, .asColorPicker-wrap .select2-container--default .is-invalid.select2-selection--single:focus, .select2-container--default .asColorPicker-wrap .is-invalid.select2-selection--single:focus, .input-group .select2-container--default .select2-selection--single .is-invalid.select2-search__field:focus, .select2-container--default .select2-selection--single .input-group .is-invalid.select2-search__field:focus, .asColorPicker-wrap .select2-container--default .select2-selection--single .is-invalid.select2-search__field:focus, .select2-container--default .select2-selection--single .asColorPicker-wrap .is-invalid.select2-search__field:focus, .input-group .is-invalid.typeahead:focus, .asColorPicker-wrap .is-invalid.typeahead:focus,\n  .input-group .is-invalid.tt-query:focus,\n  .asColorPicker-wrap .is-invalid.tt-query:focus,\n  .input-group .is-invalid.tt-hint:focus,\n  .asColorPicker-wrap .is-invalid.tt-hint:focus, .was-validated .input-group .form-select:invalid:focus, .was-validated .asColorPicker-wrap .form-select:invalid:focus,\n  .input-group .form-select.is-invalid:focus,\n  .asColorPicker-wrap .form-select.is-invalid:focus {\n    z-index: 3; }\n\n.btn, .fc button, .ajax-upload-dragdrop .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-cancel {\n  display: inline-block;\n  font-weight: 400;\n  line-height: 1;\n  color: #ffffff;\n  text-align: center;\n  text-decoration: none;\n  vertical-align: middle;\n  cursor: pointer;\n  user-select: none;\n  background-color: transparent;\n  border: 1px solid transparent;\n  padding: 0.375rem 0.75rem;\n  font-size: 0.9375rem;\n  border-radius: 0.1875rem;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .btn, .fc button, .ajax-upload-dragdrop .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-cancel {\n      transition: none; } }\n  .btn:hover, .fc button:hover, .ajax-upload-dragdrop .ajax-file-upload:hover, .swal2-modal .swal2-buttonswrapper .swal2-styled:hover {\n    color: #ffffff; }\n  .btn-check:focus + .btn, .fc .btn-check:focus + button, .ajax-upload-dragdrop .btn-check:focus + .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-check:focus + .swal2-styled, .btn:focus, .fc button:focus, .ajax-upload-dragdrop .ajax-file-upload:focus, .swal2-modal .swal2-buttonswrapper .swal2-styled:focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n  .btn:disabled, .fc button:disabled, .ajax-upload-dragdrop .ajax-file-upload:disabled, .swal2-modal .swal2-buttonswrapper .swal2-styled:disabled, .btn.disabled, .fc button.disabled, .ajax-upload-dragdrop .disabled.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .disabled.swal2-styled,\n  fieldset:disabled .btn,\n  fieldset:disabled .fc button,\n  .fc fieldset:disabled button,\n  fieldset:disabled .ajax-upload-dragdrop .ajax-file-upload,\n  .ajax-upload-dragdrop fieldset:disabled .ajax-file-upload,\n  fieldset:disabled .swal2-modal .swal2-buttonswrapper .swal2-styled,\n  .swal2-modal .swal2-buttonswrapper fieldset:disabled .swal2-styled {\n    pointer-events: none;\n    opacity: 0.65; }\n\n.btn-primary {\n  color: #000;\n  background-color: #0090e7;\n  border-color: #0090e7; }\n  .btn-primary:hover {\n    color: #000;\n    background-color: #26a1eb;\n    border-color: #1a9be9; }\n  .btn-check:focus + .btn-primary, .btn-primary:focus {\n    color: #000;\n    background-color: #26a1eb;\n    border-color: #1a9be9;\n    box-shadow: 0 0 0 0.25rem rgba(0, 122, 196, 0.5); }\n  .btn-check:checked + .btn-primary,\n  .btn-check:active + .btn-primary, .btn-primary:active, .btn-primary.active,\n  .show > .btn-primary.dropdown-toggle {\n    color: #000;\n    background-color: #33a6ec;\n    border-color: #1a9be9; }\n    .btn-check:checked + .btn-primary:focus,\n    .btn-check:active + .btn-primary:focus, .btn-primary:active:focus, .btn-primary.active:focus,\n    .show > .btn-primary.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(0, 122, 196, 0.5); }\n  .btn-primary:disabled, .btn-primary.disabled {\n    color: #000;\n    background-color: #0090e7;\n    border-color: #0090e7; }\n\n.btn-secondary {\n  color: #000;\n  background-color: #e4eaec;\n  border-color: #e4eaec; }\n  .btn-secondary:hover {\n    color: #000;\n    background-color: #e8edef;\n    border-color: #e7ecee; }\n  .btn-check:focus + .btn-secondary, .btn-secondary:focus {\n    color: #000;\n    background-color: #e8edef;\n    border-color: #e7ecee;\n    box-shadow: 0 0 0 0.25rem rgba(194, 199, 201, 0.5); }\n  .btn-check:checked + .btn-secondary,\n  .btn-check:active + .btn-secondary, .btn-secondary:active, .btn-secondary.active,\n  .show > .btn-secondary.dropdown-toggle {\n    color: #000;\n    background-color: #e9eef0;\n    border-color: #e7ecee; }\n    .btn-check:checked + .btn-secondary:focus,\n    .btn-check:active + .btn-secondary:focus, .btn-secondary:active:focus, .btn-secondary.active:focus,\n    .show > .btn-secondary.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(194, 199, 201, 0.5); }\n  .btn-secondary:disabled, .btn-secondary.disabled {\n    color: #000;\n    background-color: #e4eaec;\n    border-color: #e4eaec; }\n\n.btn-success {\n  color: #000;\n  background-color: #00d25b;\n  border-color: #00d25b; }\n  .btn-success:hover {\n    color: #000;\n    background-color: #26d974;\n    border-color: #1ad76b; }\n  .btn-check:focus + .btn-success, .btn-success:focus {\n    color: #000;\n    background-color: #26d974;\n    border-color: #1ad76b;\n    box-shadow: 0 0 0 0.25rem rgba(0, 179, 77, 0.5); }\n  .btn-check:checked + .btn-success,\n  .btn-check:active + .btn-success, .btn-success:active, .btn-success.active,\n  .show > .btn-success.dropdown-toggle {\n    color: #000;\n    background-color: #33db7c;\n    border-color: #1ad76b; }\n    .btn-check:checked + .btn-success:focus,\n    .btn-check:active + .btn-success:focus, .btn-success:active:focus, .btn-success.active:focus,\n    .show > .btn-success.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(0, 179, 77, 0.5); }\n  .btn-success:disabled, .btn-success.disabled {\n    color: #000;\n    background-color: #00d25b;\n    border-color: #00d25b; }\n\n.btn-info {\n  color: #000;\n  background-color: #8f5fe8;\n  border-color: #8f5fe8; }\n  .btn-info:hover {\n    color: #000;\n    background-color: #a077eb;\n    border-color: #9a6fea; }\n  .btn-check:focus + .btn-info, .btn-info:focus {\n    color: #000;\n    background-color: #a077eb;\n    border-color: #9a6fea;\n    box-shadow: 0 0 0 0.25rem rgba(122, 81, 197, 0.5); }\n  .btn-check:checked + .btn-info,\n  .btn-check:active + .btn-info, .btn-info:active, .btn-info.active,\n  .show > .btn-info.dropdown-toggle {\n    color: #000;\n    background-color: #a57fed;\n    border-color: #9a6fea; }\n    .btn-check:checked + .btn-info:focus,\n    .btn-check:active + .btn-info:focus, .btn-info:active:focus, .btn-info.active:focus,\n    .show > .btn-info.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(122, 81, 197, 0.5); }\n  .btn-info:disabled, .btn-info.disabled {\n    color: #000;\n    background-color: #8f5fe8;\n    border-color: #8f5fe8; }\n\n.btn-warning {\n  color: #000;\n  background-color: #ffab00;\n  border-color: #ffab00; }\n  .btn-warning:hover {\n    color: #000;\n    background-color: #ffb826;\n    border-color: #ffb31a; }\n  .btn-check:focus + .btn-warning, .btn-warning:focus {\n    color: #000;\n    background-color: #ffb826;\n    border-color: #ffb31a;\n    box-shadow: 0 0 0 0.25rem rgba(217, 145, 0, 0.5); }\n  .btn-check:checked + .btn-warning,\n  .btn-check:active + .btn-warning, .btn-warning:active, .btn-warning.active,\n  .show > .btn-warning.dropdown-toggle {\n    color: #000;\n    background-color: #ffbc33;\n    border-color: #ffb31a; }\n    .btn-check:checked + .btn-warning:focus,\n    .btn-check:active + .btn-warning:focus, .btn-warning:active:focus, .btn-warning.active:focus,\n    .show > .btn-warning.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(217, 145, 0, 0.5); }\n  .btn-warning:disabled, .btn-warning.disabled {\n    color: #000;\n    background-color: #ffab00;\n    border-color: #ffab00; }\n\n.btn-danger {\n  color: #000;\n  background-color: #fc424a;\n  border-color: #fc424a; }\n  .btn-danger:hover {\n    color: #000;\n    background-color: #fc5e65;\n    border-color: #fc555c; }\n  .btn-check:focus + .btn-danger, .btn-danger:focus {\n    color: #000;\n    background-color: #fc5e65;\n    border-color: #fc555c;\n    box-shadow: 0 0 0 0.25rem rgba(214, 56, 63, 0.5); }\n  .btn-check:checked + .btn-danger,\n  .btn-check:active + .btn-danger, .btn-danger:active, .btn-danger.active,\n  .show > .btn-danger.dropdown-toggle {\n    color: #000;\n    background-color: #fd686e;\n    border-color: #fc555c; }\n    .btn-check:checked + .btn-danger:focus,\n    .btn-check:active + .btn-danger:focus, .btn-danger:active:focus, .btn-danger.active:focus,\n    .show > .btn-danger.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(214, 56, 63, 0.5); }\n  .btn-danger:disabled, .btn-danger.disabled {\n    color: #000;\n    background-color: #fc424a;\n    border-color: #fc424a; }\n\n.btn-light {\n  color: #000;\n  background-color: #ffffff;\n  border-color: #ffffff; }\n  .btn-light:hover {\n    color: #000;\n    background-color: white;\n    border-color: white; }\n  .btn-check:focus + .btn-light, .btn-light:focus {\n    color: #000;\n    background-color: white;\n    border-color: white;\n    box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5); }\n  .btn-check:checked + .btn-light,\n  .btn-check:active + .btn-light, .btn-light:active, .btn-light.active,\n  .show > .btn-light.dropdown-toggle {\n    color: #000;\n    background-color: white;\n    border-color: white; }\n    .btn-check:checked + .btn-light:focus,\n    .btn-check:active + .btn-light:focus, .btn-light:active:focus, .btn-light.active:focus,\n    .show > .btn-light.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(217, 217, 217, 0.5); }\n  .btn-light:disabled, .btn-light.disabled {\n    color: #000;\n    background-color: #ffffff;\n    border-color: #ffffff; }\n\n.btn-dark {\n  color: #fff;\n  background-color: #0d0d0d;\n  border-color: #0d0d0d; }\n  .btn-dark:hover {\n    color: #fff;\n    background-color: #0b0b0b;\n    border-color: #0a0a0a; }\n  .btn-check:focus + .btn-dark, .btn-dark:focus {\n    color: #fff;\n    background-color: #0b0b0b;\n    border-color: #0a0a0a;\n    box-shadow: 0 0 0 0.25rem rgba(49, 49, 49, 0.5); }\n  .btn-check:checked + .btn-dark,\n  .btn-check:active + .btn-dark, .btn-dark:active, .btn-dark.active,\n  .show > .btn-dark.dropdown-toggle {\n    color: #fff;\n    background-color: #0a0a0a;\n    border-color: #0a0a0a; }\n    .btn-check:checked + .btn-dark:focus,\n    .btn-check:active + .btn-dark:focus, .btn-dark:active:focus, .btn-dark.active:focus,\n    .show > .btn-dark.dropdown-toggle:focus {\n      box-shadow: 0 0 0 0.25rem rgba(49, 49, 49, 0.5); }\n  .btn-dark:disabled, .btn-dark.disabled {\n    color: #fff;\n    background-color: #0d0d0d;\n    border-color: #0d0d0d; }\n\n.btn-outline-primary {\n  color: #0090e7;\n  border-color: #0090e7; }\n  .btn-outline-primary:hover {\n    color: #000;\n    background-color: #0090e7;\n    border-color: #0090e7; }\n  .btn-check:focus + .btn-outline-primary, .btn-outline-primary:focus {\n    box-shadow: 0 0 0 0.25rem rgba(0, 144, 231, 0.5); }\n  .btn-check:checked + .btn-outline-primary,\n  .btn-check:active + .btn-outline-primary, .btn-outline-primary:active, .btn-outline-primary.active, .btn-outline-primary.dropdown-toggle.show {\n    color: #000;\n    background-color: #0090e7;\n    border-color: #0090e7; }\n    .btn-check:checked + .btn-outline-primary:focus,\n    .btn-check:active + .btn-outline-primary:focus, .btn-outline-primary:active:focus, .btn-outline-primary.active:focus, .btn-outline-primary.dropdown-toggle.show:focus {\n      box-shadow: 0 0 0 0.25rem rgba(0, 144, 231, 0.5); }\n  .btn-outline-primary:disabled, .btn-outline-primary.disabled {\n    color: #0090e7;\n    background-color: transparent; }\n\n.btn-outline-secondary, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel {\n  color: #e4eaec;\n  border-color: #e4eaec; }\n  .btn-outline-secondary:hover, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel:hover {\n    color: #000;\n    background-color: #e4eaec;\n    border-color: #e4eaec; }\n  .btn-check:focus + .btn-outline-secondary, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:focus + .editable-cancel, .btn-outline-secondary:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel:focus {\n    box-shadow: 0 0 0 0.25rem rgba(228, 234, 236, 0.5); }\n  .btn-check:checked + .btn-outline-secondary, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:checked + .editable-cancel,\n  .btn-check:active + .btn-outline-secondary,\n  .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:active + .editable-cancel, .btn-outline-secondary:active, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel:active, .btn-outline-secondary.active, .editable-container.editable-inline .editableform .control-group .editable-buttons .active.editable-cancel, .btn-outline-secondary.dropdown-toggle.show, .editable-container.editable-inline .editableform .control-group .editable-buttons .dropdown-toggle.show.editable-cancel {\n    color: #000;\n    background-color: #e4eaec;\n    border-color: #e4eaec; }\n    .btn-check:checked + .btn-outline-secondary:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:checked + .editable-cancel:focus,\n    .btn-check:active + .btn-outline-secondary:focus,\n    .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:active + .editable-cancel:focus, .btn-outline-secondary:active:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel:active:focus, .btn-outline-secondary.active:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .active.editable-cancel:focus, .btn-outline-secondary.dropdown-toggle.show:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .dropdown-toggle.show.editable-cancel:focus {\n      box-shadow: 0 0 0 0.25rem rgba(228, 234, 236, 0.5); }\n  .btn-outline-secondary:disabled, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel:disabled, .btn-outline-secondary.disabled, .editable-container.editable-inline .editableform .control-group .editable-buttons .disabled.editable-cancel {\n    color: #e4eaec;\n    background-color: transparent; }\n\n.btn-outline-success, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-submit {\n  color: #00d25b;\n  border-color: #00d25b; }\n  .btn-outline-success:hover, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-submit:hover {\n    color: #000;\n    background-color: #00d25b;\n    border-color: #00d25b; }\n  .btn-check:focus + .btn-outline-success, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:focus + .editable-submit, .btn-outline-success:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-submit:focus {\n    box-shadow: 0 0 0 0.25rem rgba(0, 210, 91, 0.5); }\n  .btn-check:checked + .btn-outline-success, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:checked + .editable-submit,\n  .btn-check:active + .btn-outline-success,\n  .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:active + .editable-submit, .btn-outline-success:active, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-submit:active, .btn-outline-success.active, .editable-container.editable-inline .editableform .control-group .editable-buttons .active.editable-submit, .btn-outline-success.dropdown-toggle.show, .editable-container.editable-inline .editableform .control-group .editable-buttons .dropdown-toggle.show.editable-submit {\n    color: #000;\n    background-color: #00d25b;\n    border-color: #00d25b; }\n    .btn-check:checked + .btn-outline-success:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:checked + .editable-submit:focus,\n    .btn-check:active + .btn-outline-success:focus,\n    .editable-container.editable-inline .editableform .control-group .editable-buttons .btn-check:active + .editable-submit:focus, .btn-outline-success:active:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-submit:active:focus, .btn-outline-success.active:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .active.editable-submit:focus, .btn-outline-success.dropdown-toggle.show:focus, .editable-container.editable-inline .editableform .control-group .editable-buttons .dropdown-toggle.show.editable-submit:focus {\n      box-shadow: 0 0 0 0.25rem rgba(0, 210, 91, 0.5); }\n  .btn-outline-success:disabled, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-submit:disabled, .btn-outline-success.disabled, .editable-container.editable-inline .editableform .control-group .editable-buttons .disabled.editable-submit {\n    color: #00d25b;\n    background-color: transparent; }\n\n.btn-outline-info {\n  color: #8f5fe8;\n  border-color: #8f5fe8; }\n  .btn-outline-info:hover {\n    color: #000;\n    background-color: #8f5fe8;\n    border-color: #8f5fe8; }\n  .btn-check:focus + .btn-outline-info, .btn-outline-info:focus {\n    box-shadow: 0 0 0 0.25rem rgba(143, 95, 232, 0.5); }\n  .btn-check:checked + .btn-outline-info,\n  .btn-check:active + .btn-outline-info, .btn-outline-info:active, .btn-outline-info.active, .btn-outline-info.dropdown-toggle.show {\n    color: #000;\n    background-color: #8f5fe8;\n    border-color: #8f5fe8; }\n    .btn-check:checked + .btn-outline-info:focus,\n    .btn-check:active + .btn-outline-info:focus, .btn-outline-info:active:focus, .btn-outline-info.active:focus, .btn-outline-info.dropdown-toggle.show:focus {\n      box-shadow: 0 0 0 0.25rem rgba(143, 95, 232, 0.5); }\n  .btn-outline-info:disabled, .btn-outline-info.disabled {\n    color: #8f5fe8;\n    background-color: transparent; }\n\n.btn-outline-warning {\n  color: #ffab00;\n  border-color: #ffab00; }\n  .btn-outline-warning:hover {\n    color: #000;\n    background-color: #ffab00;\n    border-color: #ffab00; }\n  .btn-check:focus + .btn-outline-warning, .btn-outline-warning:focus {\n    box-shadow: 0 0 0 0.25rem rgba(255, 171, 0, 0.5); }\n  .btn-check:checked + .btn-outline-warning,\n  .btn-check:active + .btn-outline-warning, .btn-outline-warning:active, .btn-outline-warning.active, .btn-outline-warning.dropdown-toggle.show {\n    color: #000;\n    background-color: #ffab00;\n    border-color: #ffab00; }\n    .btn-check:checked + .btn-outline-warning:focus,\n    .btn-check:active + .btn-outline-warning:focus, .btn-outline-warning:active:focus, .btn-outline-warning.active:focus, .btn-outline-warning.dropdown-toggle.show:focus {\n      box-shadow: 0 0 0 0.25rem rgba(255, 171, 0, 0.5); }\n  .btn-outline-warning:disabled, .btn-outline-warning.disabled {\n    color: #ffab00;\n    background-color: transparent; }\n\n.btn-outline-danger {\n  color: #fc424a;\n  border-color: #fc424a; }\n  .btn-outline-danger:hover {\n    color: #000;\n    background-color: #fc424a;\n    border-color: #fc424a; }\n  .btn-check:focus + .btn-outline-danger, .btn-outline-danger:focus {\n    box-shadow: 0 0 0 0.25rem rgba(252, 66, 74, 0.5); }\n  .btn-check:checked + .btn-outline-danger,\n  .btn-check:active + .btn-outline-danger, .btn-outline-danger:active, .btn-outline-danger.active, .btn-outline-danger.dropdown-toggle.show {\n    color: #000;\n    background-color: #fc424a;\n    border-color: #fc424a; }\n    .btn-check:checked + .btn-outline-danger:focus,\n    .btn-check:active + .btn-outline-danger:focus, .btn-outline-danger:active:focus, .btn-outline-danger.active:focus, .btn-outline-danger.dropdown-toggle.show:focus {\n      box-shadow: 0 0 0 0.25rem rgba(252, 66, 74, 0.5); }\n  .btn-outline-danger:disabled, .btn-outline-danger.disabled {\n    color: #fc424a;\n    background-color: transparent; }\n\n.btn-outline-light {\n  color: #ffffff;\n  border-color: #ffffff; }\n  .btn-outline-light:hover {\n    color: #000;\n    background-color: #ffffff;\n    border-color: #ffffff; }\n  .btn-check:focus + .btn-outline-light, .btn-outline-light:focus {\n    box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5); }\n  .btn-check:checked + .btn-outline-light,\n  .btn-check:active + .btn-outline-light, .btn-outline-light:active, .btn-outline-light.active, .btn-outline-light.dropdown-toggle.show {\n    color: #000;\n    background-color: #ffffff;\n    border-color: #ffffff; }\n    .btn-check:checked + .btn-outline-light:focus,\n    .btn-check:active + .btn-outline-light:focus, .btn-outline-light:active:focus, .btn-outline-light.active:focus, .btn-outline-light.dropdown-toggle.show:focus {\n      box-shadow: 0 0 0 0.25rem rgba(255, 255, 255, 0.5); }\n  .btn-outline-light:disabled, .btn-outline-light.disabled {\n    color: #ffffff;\n    background-color: transparent; }\n\n.btn-outline-dark {\n  color: #0d0d0d;\n  border-color: #0d0d0d; }\n  .btn-outline-dark:hover {\n    color: #fff;\n    background-color: #0d0d0d;\n    border-color: #0d0d0d; }\n  .btn-check:focus + .btn-outline-dark, .btn-outline-dark:focus {\n    box-shadow: 0 0 0 0.25rem rgba(13, 13, 13, 0.5); }\n  .btn-check:checked + .btn-outline-dark,\n  .btn-check:active + .btn-outline-dark, .btn-outline-dark:active, .btn-outline-dark.active, .btn-outline-dark.dropdown-toggle.show {\n    color: #fff;\n    background-color: #0d0d0d;\n    border-color: #0d0d0d; }\n    .btn-check:checked + .btn-outline-dark:focus,\n    .btn-check:active + .btn-outline-dark:focus, .btn-outline-dark:active:focus, .btn-outline-dark.active:focus, .btn-outline-dark.dropdown-toggle.show:focus {\n      box-shadow: 0 0 0 0.25rem rgba(13, 13, 13, 0.5); }\n  .btn-outline-dark:disabled, .btn-outline-dark.disabled {\n    color: #0d0d0d;\n    background-color: transparent; }\n\n.btn-link {\n  font-weight: 400;\n  color: #0d6efd;\n  text-decoration: underline; }\n  .btn-link:hover {\n    color: #0a58ca; }\n  .btn-link:disabled, .btn-link.disabled {\n    color: #6c757d; }\n\n.btn-lg, .btn-group-lg > .btn, .fc .btn-group-lg > button, .ajax-upload-dragdrop .btn-group-lg > .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group-lg > .swal2-styled {\n  padding: 1rem 3rem;\n  font-size: 0.875rem;\n  border-radius: 0.1875rem; }\n\n.btn-sm, .btn-group-sm > .btn, .fc .btn-group-sm > button, .ajax-upload-dragdrop .btn-group-sm > .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group-sm > .swal2-styled, .fc button {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem;\n  border-radius: 0.1875rem; }\n\n.fade {\n  transition: opacity 0.15s linear; }\n  @media (prefers-reduced-motion: reduce) {\n    .fade {\n      transition: none; } }\n  .fade:not(.show) {\n    opacity: 0; }\n\n.collapse:not(.show) {\n  display: none; }\n\n.collapsing {\n  height: 0;\n  overflow: hidden;\n  transition: height 0.35s ease; }\n  @media (prefers-reduced-motion: reduce) {\n    .collapsing {\n      transition: none; } }\n  .collapsing.collapse-horizontal {\n    width: 0;\n    height: auto;\n    transition: width 0.35s ease; }\n    @media (prefers-reduced-motion: reduce) {\n      .collapsing.collapse-horizontal {\n        transition: none; } }\n\n.dropup,\n.dropend,\n.dropdown,\n.dropstart {\n  position: relative; }\n\n.dropdown-toggle {\n  white-space: nowrap; }\n  .dropdown-toggle::after {\n    display: inline-block;\n    margin-left: 0.255em;\n    vertical-align: 0.255em;\n    content: \"\";\n    border-top: 0.3em solid;\n    border-right: 0.3em solid transparent;\n    border-bottom: 0;\n    border-left: 0.3em solid transparent; }\n  .dropdown-toggle:empty::after {\n    margin-left: 0; }\n\n.dropdown-menu {\n  position: absolute;\n  z-index: 1000;\n  display: none;\n  min-width: 10rem;\n  padding: 0.5rem 0;\n  margin: 0;\n  font-size: 1rem;\n  color: #ffffff;\n  text-align: left;\n  list-style: none;\n  background-color: #191c24;\n  background-clip: padding-box;\n  border: 1px solid #2c2e33;\n  border-radius: 0.25rem; }\n  .dropdown-menu[data-bs-popper] {\n    top: 100%;\n    left: 0;\n    margin-top: 0.125rem; }\n\n.dropdown-menu-start {\n  --bs-position: start; }\n  .dropdown-menu-start[data-bs-popper] {\n    right: auto;\n    left: 0; }\n\n.dropdown-menu-end {\n  --bs-position: end; }\n  .dropdown-menu-end[data-bs-popper] {\n    right: 0;\n    left: auto; }\n\n@media (min-width: 576px) {\n  .dropdown-menu-sm-start {\n    --bs-position: start; }\n    .dropdown-menu-sm-start[data-bs-popper] {\n      right: auto;\n      left: 0; }\n  .dropdown-menu-sm-end {\n    --bs-position: end; }\n    .dropdown-menu-sm-end[data-bs-popper] {\n      right: 0;\n      left: auto; } }\n\n@media (min-width: 768px) {\n  .dropdown-menu-md-start {\n    --bs-position: start; }\n    .dropdown-menu-md-start[data-bs-popper] {\n      right: auto;\n      left: 0; }\n  .dropdown-menu-md-end {\n    --bs-position: end; }\n    .dropdown-menu-md-end[data-bs-popper] {\n      right: 0;\n      left: auto; } }\n\n@media (min-width: 992px) {\n  .dropdown-menu-lg-start {\n    --bs-position: start; }\n    .dropdown-menu-lg-start[data-bs-popper] {\n      right: auto;\n      left: 0; }\n  .dropdown-menu-lg-end {\n    --bs-position: end; }\n    .dropdown-menu-lg-end[data-bs-popper] {\n      right: 0;\n      left: auto; } }\n\n@media (min-width: 1200px) {\n  .dropdown-menu-xl-start {\n    --bs-position: start; }\n    .dropdown-menu-xl-start[data-bs-popper] {\n      right: auto;\n      left: 0; }\n  .dropdown-menu-xl-end {\n    --bs-position: end; }\n    .dropdown-menu-xl-end[data-bs-popper] {\n      right: 0;\n      left: auto; } }\n\n@media (min-width: 1400px) {\n  .dropdown-menu-xxl-start {\n    --bs-position: start; }\n    .dropdown-menu-xxl-start[data-bs-popper] {\n      right: auto;\n      left: 0; }\n  .dropdown-menu-xxl-end {\n    --bs-position: end; }\n    .dropdown-menu-xxl-end[data-bs-popper] {\n      right: 0;\n      left: auto; } }\n\n.dropup .dropdown-menu[data-bs-popper] {\n  top: auto;\n  bottom: 100%;\n  margin-top: 0;\n  margin-bottom: 0.125rem; }\n\n.dropup .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0;\n  border-right: 0.3em solid transparent;\n  border-bottom: 0.3em solid;\n  border-left: 0.3em solid transparent; }\n\n.dropup .dropdown-toggle:empty::after {\n  margin-left: 0; }\n\n.dropend .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: auto;\n  left: 100%;\n  margin-top: 0;\n  margin-left: 0.125rem; }\n\n.dropend .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0;\n  border-bottom: 0.3em solid transparent;\n  border-left: 0.3em solid; }\n\n.dropend .dropdown-toggle:empty::after {\n  margin-left: 0; }\n\n.dropend .dropdown-toggle::after {\n  vertical-align: 0; }\n\n.dropstart .dropdown-menu[data-bs-popper] {\n  top: 0;\n  right: 100%;\n  left: auto;\n  margin-top: 0;\n  margin-right: 0.125rem; }\n\n.dropstart .dropdown-toggle::after {\n  display: inline-block;\n  margin-left: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\"; }\n\n.dropstart .dropdown-toggle::after {\n  display: none; }\n\n.dropstart .dropdown-toggle::before {\n  display: inline-block;\n  margin-right: 0.255em;\n  vertical-align: 0.255em;\n  content: \"\";\n  border-top: 0.3em solid transparent;\n  border-right: 0.3em solid;\n  border-bottom: 0.3em solid transparent; }\n\n.dropstart .dropdown-toggle:empty::after {\n  margin-left: 0; }\n\n.dropstart .dropdown-toggle::before {\n  vertical-align: 0; }\n\n.dropdown-divider {\n  height: 0;\n  margin: 0.5rem 0;\n  overflow: hidden;\n  border-top: 1px solid #2c2e33; }\n\n.dropdown-item {\n  display: block;\n  width: 100%;\n  padding: 0.25rem 1rem;\n  clear: both;\n  font-weight: 400;\n  color: #ffffff;\n  text-align: inherit;\n  text-decoration: none;\n  white-space: nowrap;\n  background-color: transparent;\n  border: 0; }\n  .dropdown-item:hover, .dropdown-item:focus {\n    color: #1e2125;\n    background-color: #13151b; }\n  .dropdown-item.active, .dropdown-item:active {\n    color: #fff;\n    text-decoration: none;\n    background-color: #0d6efd; }\n  .dropdown-item.disabled, .dropdown-item:disabled {\n    color: #adb5bd;\n    pointer-events: none;\n    background-color: transparent; }\n\n.dropdown-menu.show {\n  display: block; }\n\n.dropdown-header {\n  display: block;\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 0.875rem;\n  color: #ffffff;\n  white-space: nowrap; }\n\n.dropdown-item-text {\n  display: block;\n  padding: 0.25rem 1rem;\n  color: #ffffff; }\n\n.dropdown-menu-dark {\n  color: #dee2e6;\n  background-color: #343a40;\n  border-color: rgba(0, 0, 0, 0.15); }\n  .dropdown-menu-dark .dropdown-item {\n    color: #dee2e6; }\n    .dropdown-menu-dark .dropdown-item:hover, .dropdown-menu-dark .dropdown-item:focus {\n      color: #fff;\n      background-color: rgba(255, 255, 255, 0.15); }\n    .dropdown-menu-dark .dropdown-item.active, .dropdown-menu-dark .dropdown-item:active {\n      color: #fff;\n      background-color: #0d6efd; }\n    .dropdown-menu-dark .dropdown-item.disabled, .dropdown-menu-dark .dropdown-item:disabled {\n      color: #adb5bd; }\n  .dropdown-menu-dark .dropdown-divider {\n    border-color: rgba(0, 0, 0, 0.15); }\n  .dropdown-menu-dark .dropdown-item-text {\n    color: #dee2e6; }\n  .dropdown-menu-dark .dropdown-header {\n    color: #adb5bd; }\n\n.btn-group, .fc .fc-button-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-flex;\n  vertical-align: middle; }\n  .btn-group > .btn, .fc .fc-button-group > .btn, .fc .btn-group > button, .fc .fc-button-group > button, .ajax-upload-dragdrop .btn-group > .ajax-file-upload, .fc .ajax-upload-dragdrop .fc-button-group > .ajax-file-upload, .ajax-upload-dragdrop .fc .fc-button-group > .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group > .swal2-styled, .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .swal2-styled,\n  .btn-group-vertical > .btn,\n  .fc .btn-group-vertical > button,\n  .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled {\n    position: relative;\n    flex: 1 1 auto; }\n  .btn-group > .btn-check:checked + .btn, .fc .fc-button-group > .btn-check:checked + .btn, .fc .btn-group > .btn-check:checked + button, .fc .fc-button-group > .btn-check:checked + button, .ajax-upload-dragdrop .btn-group > .btn-check:checked + .ajax-file-upload, .fc .ajax-upload-dragdrop .fc-button-group > .btn-check:checked + .ajax-file-upload, .ajax-upload-dragdrop .fc .fc-button-group > .btn-check:checked + .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group > .btn-check:checked + .swal2-styled, .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .btn-check:checked + .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .btn-check:checked + .swal2-styled,\n  .btn-group > .btn-check:focus + .btn,\n  .fc .fc-button-group > .btn-check:focus + .btn,\n  .fc .btn-group > .btn-check:focus + button,\n  .fc .fc-button-group > .btn-check:focus + button,\n  .ajax-upload-dragdrop .btn-group > .btn-check:focus + .ajax-file-upload,\n  .fc .ajax-upload-dragdrop .fc-button-group > .btn-check:focus + .ajax-file-upload,\n  .ajax-upload-dragdrop .fc .fc-button-group > .btn-check:focus + .ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group > .btn-check:focus + .swal2-styled,\n  .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .btn-check:focus + .swal2-styled,\n  .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .btn-check:focus + .swal2-styled,\n  .btn-group > .btn:hover,\n  .fc .fc-button-group > .btn:hover,\n  .fc .btn-group > button:hover,\n  .fc .fc-button-group > button:hover,\n  .ajax-upload-dragdrop .btn-group > .ajax-file-upload:hover,\n  .fc .ajax-upload-dragdrop .fc-button-group > .ajax-file-upload:hover,\n  .ajax-upload-dragdrop .fc .fc-button-group > .ajax-file-upload:hover,\n  .swal2-modal .swal2-buttonswrapper .btn-group > .swal2-styled:hover,\n  .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .swal2-styled:hover,\n  .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .swal2-styled:hover,\n  .btn-group > .btn:focus,\n  .fc .fc-button-group > .btn:focus,\n  .fc .btn-group > button:focus,\n  .fc .fc-button-group > button:focus,\n  .ajax-upload-dragdrop .btn-group > .ajax-file-upload:focus,\n  .fc .ajax-upload-dragdrop .fc-button-group > .ajax-file-upload:focus,\n  .ajax-upload-dragdrop .fc .fc-button-group > .ajax-file-upload:focus,\n  .swal2-modal .swal2-buttonswrapper .btn-group > .swal2-styled:focus,\n  .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .swal2-styled:focus,\n  .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .swal2-styled:focus,\n  .btn-group > .btn:active,\n  .fc .fc-button-group > .btn:active,\n  .fc .btn-group > button:active,\n  .fc .fc-button-group > button:active,\n  .ajax-upload-dragdrop .btn-group > .ajax-file-upload:active,\n  .fc .ajax-upload-dragdrop .fc-button-group > .ajax-file-upload:active,\n  .ajax-upload-dragdrop .fc .fc-button-group > .ajax-file-upload:active,\n  .swal2-modal .swal2-buttonswrapper .btn-group > .swal2-styled:active,\n  .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .swal2-styled:active,\n  .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .swal2-styled:active,\n  .btn-group > .btn.active,\n  .fc .fc-button-group > .btn.active,\n  .fc .btn-group > button.active,\n  .fc .fc-button-group > button.active,\n  .ajax-upload-dragdrop .btn-group > .active.ajax-file-upload,\n  .fc .ajax-upload-dragdrop .fc-button-group > .active.ajax-file-upload,\n  .ajax-upload-dragdrop .fc .fc-button-group > .active.ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group > .active.swal2-styled,\n  .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .active.swal2-styled,\n  .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .active.swal2-styled,\n  .btn-group-vertical > .btn-check:checked + .btn,\n  .fc .btn-group-vertical > .btn-check:checked + button,\n  .ajax-upload-dragdrop .btn-group-vertical > .btn-check:checked + .ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .btn-check:checked + .swal2-styled,\n  .btn-group-vertical > .btn-check:focus + .btn,\n  .fc .btn-group-vertical > .btn-check:focus + button,\n  .ajax-upload-dragdrop .btn-group-vertical > .btn-check:focus + .ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .btn-check:focus + .swal2-styled,\n  .btn-group-vertical > .btn:hover,\n  .fc .btn-group-vertical > button:hover,\n  .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload:hover,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled:hover,\n  .btn-group-vertical > .btn:focus,\n  .fc .btn-group-vertical > button:focus,\n  .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload:focus,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled:focus,\n  .btn-group-vertical > .btn:active,\n  .fc .btn-group-vertical > button:active,\n  .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload:active,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled:active,\n  .btn-group-vertical > .btn.active,\n  .fc .btn-group-vertical > button.active,\n  .ajax-upload-dragdrop .btn-group-vertical > .active.ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .active.swal2-styled {\n    z-index: 1; }\n\n.btn-toolbar {\n  display: flex;\n  flex-wrap: wrap;\n  justify-content: flex-start; }\n  .btn-toolbar .input-group, .btn-toolbar .asColorPicker-wrap {\n    width: auto; }\n\n.btn-group > .btn:not(:first-child), .fc .fc-button-group > .btn:not(:first-child), .fc .btn-group > button:not(:first-child), .fc .fc-button-group > button:not(:first-child), .ajax-upload-dragdrop .btn-group > .ajax-file-upload:not(:first-child), .fc .ajax-upload-dragdrop .fc-button-group > .ajax-file-upload:not(:first-child), .ajax-upload-dragdrop .fc .fc-button-group > .ajax-file-upload:not(:first-child), .swal2-modal .swal2-buttonswrapper .btn-group > .swal2-styled:not(:first-child), .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .swal2-styled:not(:first-child), .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .swal2-styled:not(:first-child),\n.btn-group > .btn-group:not(:first-child),\n.fc .fc-button-group > .btn-group:not(:first-child),\n.fc .btn-group > .fc-button-group:not(:first-child),\n.fc .fc-button-group > .fc-button-group:not(:first-child) {\n  margin-left: -1px; }\n\n.btn-group > .btn:not(:last-child):not(.dropdown-toggle), .fc .fc-button-group > .btn:not(:last-child):not(.dropdown-toggle), .fc .btn-group > button:not(:last-child):not(.dropdown-toggle), .fc .fc-button-group > button:not(:last-child):not(.dropdown-toggle), .ajax-upload-dragdrop .btn-group > .ajax-file-upload:not(:last-child):not(.dropdown-toggle), .fc .ajax-upload-dragdrop .fc-button-group > .ajax-file-upload:not(:last-child):not(.dropdown-toggle), .ajax-upload-dragdrop .fc .fc-button-group > .ajax-file-upload:not(:last-child):not(.dropdown-toggle), .swal2-modal .swal2-buttonswrapper .btn-group > .swal2-styled:not(:last-child):not(.dropdown-toggle), .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .swal2-styled:not(:last-child):not(.dropdown-toggle), .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .swal2-styled:not(:last-child):not(.dropdown-toggle),\n.btn-group > .btn-group:not(:last-child) > .btn,\n.fc .fc-button-group > .btn-group:not(:last-child) > .btn,\n.fc .btn-group > .fc-button-group:not(:last-child) > .btn,\n.fc .fc-button-group > .fc-button-group:not(:last-child) > .btn,\n.fc .btn-group > .btn-group:not(:last-child) > button,\n.fc .fc-button-group > .btn-group:not(:last-child) > button,\n.fc .btn-group > .fc-button-group:not(:last-child) > button,\n.fc .fc-button-group > .fc-button-group:not(:last-child) > button,\n.ajax-upload-dragdrop .btn-group > .btn-group:not(:last-child) > .ajax-file-upload,\n.fc .ajax-upload-dragdrop .fc-button-group > .btn-group:not(:last-child) > .ajax-file-upload,\n.ajax-upload-dragdrop .fc .fc-button-group > .btn-group:not(:last-child) > .ajax-file-upload,\n.fc .ajax-upload-dragdrop .btn-group > .fc-button-group:not(:last-child) > .ajax-file-upload,\n.ajax-upload-dragdrop .fc .btn-group > .fc-button-group:not(:last-child) > .ajax-file-upload,\n.fc .ajax-upload-dragdrop .fc-button-group > .fc-button-group:not(:last-child) > .ajax-file-upload,\n.ajax-upload-dragdrop .fc .fc-button-group > .fc-button-group:not(:last-child) > .ajax-file-upload,\n.swal2-modal .swal2-buttonswrapper .btn-group > .btn-group:not(:last-child) > .swal2-styled,\n.fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .btn-group:not(:last-child) > .swal2-styled,\n.swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .btn-group:not(:last-child) > .swal2-styled,\n.fc .swal2-modal .swal2-buttonswrapper .btn-group > .fc-button-group:not(:last-child) > .swal2-styled,\n.swal2-modal .swal2-buttonswrapper .fc .btn-group > .fc-button-group:not(:last-child) > .swal2-styled,\n.fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .fc-button-group:not(:last-child) > .swal2-styled,\n.swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .fc-button-group:not(:last-child) > .swal2-styled {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0; }\n\n.btn-group > .btn:nth-child(n + 3), .fc .fc-button-group > .btn:nth-child(n + 3), .fc .btn-group > button:nth-child(n + 3), .fc .fc-button-group > button:nth-child(n + 3), .ajax-upload-dragdrop .btn-group > .ajax-file-upload:nth-child(n + 3), .fc .ajax-upload-dragdrop .fc-button-group > .ajax-file-upload:nth-child(n + 3), .ajax-upload-dragdrop .fc .fc-button-group > .ajax-file-upload:nth-child(n + 3), .swal2-modal .swal2-buttonswrapper .btn-group > .swal2-styled:nth-child(n + 3), .fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .swal2-styled:nth-child(n + 3), .swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .swal2-styled:nth-child(n + 3),\n.btn-group > :not(.btn-check) + .btn,\n.fc .fc-button-group > :not(.btn-check) + .btn,\n.fc .btn-group > :not(.btn-check) + button,\n.fc .fc-button-group > :not(.btn-check) + button,\n.ajax-upload-dragdrop .btn-group > :not(.btn-check) + .ajax-file-upload,\n.fc .ajax-upload-dragdrop .fc-button-group > :not(.btn-check) + .ajax-file-upload,\n.ajax-upload-dragdrop .fc .fc-button-group > :not(.btn-check) + .ajax-file-upload,\n.swal2-modal .swal2-buttonswrapper .btn-group > :not(.btn-check) + .swal2-styled,\n.fc .swal2-modal .swal2-buttonswrapper .fc-button-group > :not(.btn-check) + .swal2-styled,\n.swal2-modal .swal2-buttonswrapper .fc .fc-button-group > :not(.btn-check) + .swal2-styled,\n.btn-group > .btn-group:not(:first-child) > .btn,\n.fc .fc-button-group > .btn-group:not(:first-child) > .btn,\n.fc .btn-group > .fc-button-group:not(:first-child) > .btn,\n.fc .fc-button-group > .fc-button-group:not(:first-child) > .btn,\n.fc .btn-group > .btn-group:not(:first-child) > button,\n.fc .fc-button-group > .btn-group:not(:first-child) > button,\n.fc .btn-group > .fc-button-group:not(:first-child) > button,\n.fc .fc-button-group > .fc-button-group:not(:first-child) > button,\n.ajax-upload-dragdrop .btn-group > .btn-group:not(:first-child) > .ajax-file-upload,\n.fc .ajax-upload-dragdrop .fc-button-group > .btn-group:not(:first-child) > .ajax-file-upload,\n.ajax-upload-dragdrop .fc .fc-button-group > .btn-group:not(:first-child) > .ajax-file-upload,\n.fc .ajax-upload-dragdrop .btn-group > .fc-button-group:not(:first-child) > .ajax-file-upload,\n.ajax-upload-dragdrop .fc .btn-group > .fc-button-group:not(:first-child) > .ajax-file-upload,\n.fc .ajax-upload-dragdrop .fc-button-group > .fc-button-group:not(:first-child) > .ajax-file-upload,\n.ajax-upload-dragdrop .fc .fc-button-group > .fc-button-group:not(:first-child) > .ajax-file-upload,\n.swal2-modal .swal2-buttonswrapper .btn-group > .btn-group:not(:first-child) > .swal2-styled,\n.fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .btn-group:not(:first-child) > .swal2-styled,\n.swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .btn-group:not(:first-child) > .swal2-styled,\n.fc .swal2-modal .swal2-buttonswrapper .btn-group > .fc-button-group:not(:first-child) > .swal2-styled,\n.swal2-modal .swal2-buttonswrapper .fc .btn-group > .fc-button-group:not(:first-child) > .swal2-styled,\n.fc .swal2-modal .swal2-buttonswrapper .fc-button-group > .fc-button-group:not(:first-child) > .swal2-styled,\n.swal2-modal .swal2-buttonswrapper .fc .fc-button-group > .fc-button-group:not(:first-child) > .swal2-styled {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0; }\n\n.dropdown-toggle-split {\n  padding-right: 0.5625rem;\n  padding-left: 0.5625rem; }\n  .dropdown-toggle-split::after,\n  .dropup .dropdown-toggle-split::after,\n  .dropend .dropdown-toggle-split::after {\n    margin-left: 0; }\n  .dropstart .dropdown-toggle-split::before {\n    margin-right: 0; }\n\n.btn-sm + .dropdown-toggle-split, .btn-group-sm > .btn + .dropdown-toggle-split, .fc .btn-group-sm > button + .dropdown-toggle-split, .ajax-upload-dragdrop .btn-group-sm > .ajax-file-upload + .dropdown-toggle-split, .swal2-modal .swal2-buttonswrapper .btn-group-sm > .swal2-styled + .dropdown-toggle-split, .fc button + .dropdown-toggle-split {\n  padding-right: 0.375rem;\n  padding-left: 0.375rem; }\n\n.btn-lg + .dropdown-toggle-split, .btn-group-lg > .btn + .dropdown-toggle-split, .fc .btn-group-lg > button + .dropdown-toggle-split, .ajax-upload-dragdrop .btn-group-lg > .ajax-file-upload + .dropdown-toggle-split, .swal2-modal .swal2-buttonswrapper .btn-group-lg > .swal2-styled + .dropdown-toggle-split {\n  padding-right: 2.25rem;\n  padding-left: 2.25rem; }\n\n.btn-group-vertical {\n  flex-direction: column;\n  align-items: flex-start;\n  justify-content: center; }\n  \n  .btn-group-vertical > .btn,\n  .fc .btn-group-vertical > button,\n  .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled,\n  .btn-group-vertical > .btn-group,\n  .fc .btn-group-vertical > .fc-button-group {\n    width: 100%; }\n  .btn-group-vertical > .btn:not(:first-child), .fc .btn-group-vertical > button:not(:first-child), .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload:not(:first-child), .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled:not(:first-child),\n  .btn-group-vertical > .btn-group:not(:first-child),\n  .fc .btn-group-vertical > .fc-button-group:not(:first-child) {\n    margin-top: -1px; }\n  .btn-group-vertical > .btn:not(:last-child):not(.dropdown-toggle), .fc .btn-group-vertical > button:not(:last-child):not(.dropdown-toggle), .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload:not(:last-child):not(.dropdown-toggle), .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled:not(:last-child):not(.dropdown-toggle),\n  .btn-group-vertical > .btn-group:not(:last-child) > .btn,\n  .fc .btn-group-vertical > .fc-button-group:not(:last-child) > .btn,\n  .fc .btn-group-vertical > .btn-group:not(:last-child) > button,\n  .fc .btn-group-vertical > .fc-button-group:not(:last-child) > button,\n  .ajax-upload-dragdrop .btn-group-vertical > .btn-group:not(:last-child) > .ajax-file-upload,\n  .fc .ajax-upload-dragdrop .btn-group-vertical > .fc-button-group:not(:last-child) > .ajax-file-upload,\n  .ajax-upload-dragdrop .fc .btn-group-vertical > .fc-button-group:not(:last-child) > .ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .btn-group:not(:last-child) > .swal2-styled,\n  .fc .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .fc-button-group:not(:last-child) > .swal2-styled,\n  .swal2-modal .swal2-buttonswrapper .fc .btn-group-vertical > .fc-button-group:not(:last-child) > .swal2-styled {\n    border-bottom-right-radius: 0;\n    border-bottom-left-radius: 0; }\n  .btn-group-vertical > .btn ~ .btn, .fc .btn-group-vertical > button ~ .btn, .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload ~ .btn, .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled ~ .btn, .fc .btn-group-vertical > .btn ~ button, .fc .btn-group-vertical > button ~ button, .ajax-upload-dragdrop .fc .btn-group-vertical > .ajax-file-upload ~ button, .fc .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload ~ button, .swal2-modal .swal2-buttonswrapper .fc .btn-group-vertical > .swal2-styled ~ button, .fc .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled ~ button, .ajax-upload-dragdrop .btn-group-vertical > .btn ~ .ajax-file-upload, .fc .ajax-upload-dragdrop .btn-group-vertical > button ~ .ajax-file-upload, .ajax-upload-dragdrop .fc .btn-group-vertical > button ~ .ajax-file-upload, .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload ~ .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .ajax-upload-dragdrop .btn-group-vertical > .swal2-styled ~ .ajax-file-upload, .ajax-upload-dragdrop .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled ~ .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .btn ~ .swal2-styled, .fc .swal2-modal .swal2-buttonswrapper .btn-group-vertical > button ~ .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .btn-group-vertical > button ~ .swal2-styled, .ajax-upload-dragdrop .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .ajax-file-upload ~ .swal2-styled, .swal2-modal .swal2-buttonswrapper .ajax-upload-dragdrop .btn-group-vertical > .ajax-file-upload ~ .swal2-styled, .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .swal2-styled ~ .swal2-styled,\n  .btn-group-vertical > .btn-group:not(:first-child) > .btn,\n  .fc .btn-group-vertical > .fc-button-group:not(:first-child) > .btn,\n  .fc .btn-group-vertical > .btn-group:not(:first-child) > button,\n  .fc .btn-group-vertical > .fc-button-group:not(:first-child) > button,\n  .ajax-upload-dragdrop .btn-group-vertical > .btn-group:not(:first-child) > .ajax-file-upload,\n  .fc .ajax-upload-dragdrop .btn-group-vertical > .fc-button-group:not(:first-child) > .ajax-file-upload,\n  .ajax-upload-dragdrop .fc .btn-group-vertical > .fc-button-group:not(:first-child) > .ajax-file-upload,\n  .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .btn-group:not(:first-child) > .swal2-styled,\n  .fc .swal2-modal .swal2-buttonswrapper .btn-group-vertical > .fc-button-group:not(:first-child) > .swal2-styled,\n  .swal2-modal .swal2-buttonswrapper .fc .btn-group-vertical > .fc-button-group:not(:first-child) > .swal2-styled {\n    border-top-left-radius: 0;\n    border-top-right-radius: 0; }\n\n.nav {\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none; }\n\n.nav-link {\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #0d6efd;\n  text-decoration: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .nav-link {\n      transition: none; } }\n  .nav-link:hover, .nav-link:focus {\n    color: #0a58ca; }\n  .nav-link.disabled {\n    color: #6c757d;\n    pointer-events: none;\n    cursor: default; }\n\n.nav-tabs {\n  border-bottom: 1px solid #2c2e33; }\n  .nav-tabs .nav-link {\n    margin-bottom: -1px;\n    background: none;\n    border: 1px solid transparent;\n    border-top-left-radius: 0.25rem;\n    border-top-right-radius: 0.25rem; }\n    .nav-tabs .nav-link:hover, .nav-tabs .nav-link:focus {\n      border-color: #2c2e33 #2c2e33 #2c2e33;\n      isolation: isolate; }\n    .nav-tabs .nav-link.disabled {\n      color: #6c757d;\n      background-color: transparent;\n      border-color: transparent; }\n  .nav-tabs .nav-link.active,\n  .nav-tabs .nav-item.show .nav-link {\n    color: #ffffff;\n    background-color: black;\n    border-color: #2c2e33 #2c2e33 black; }\n  .nav-tabs .dropdown-menu {\n    margin-top: -1px;\n    border-top-left-radius: 0;\n    border-top-right-radius: 0; }\n\n.nav-pills .nav-link {\n  background: none;\n  border: 0;\n  border-radius: 0.25rem; }\n\n.nav-pills .nav-link.active,\n.nav-pills .show > .nav-link {\n  color: #fff;\n  background-color: #0d6efd; }\n\n.nav-fill > .nav-link,\n.nav-fill .nav-item {\n  flex: 1 1 auto;\n  text-align: center; }\n\n.nav-justified > .nav-link,\n.nav-justified .nav-item {\n  flex-basis: 0;\n  flex-grow: 1;\n  text-align: center; }\n\n.nav-fill .nav-item .nav-link,\n.nav-justified .nav-item .nav-link {\n  width: 100%; }\n\n.tab-content > .tab-pane {\n  display: none; }\n\n.tab-content > .active {\n  display: block; }\n\n.navbar {\n  position: relative;\n  display: flex;\n  flex-wrap: wrap;\n  align-items: center;\n  justify-content: space-between;\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem; }\n  .navbar > .container,\n  .navbar > .container-fluid, .navbar > .container-sm, .navbar > .container-md, .navbar > .container-lg, .navbar > .container-xl, .navbar > .container-xxl {\n    display: flex;\n    flex-wrap: inherit;\n    align-items: center;\n    justify-content: space-between; }\n\n.navbar-brand {\n  padding-top: 0.3125rem;\n  padding-bottom: 0.3125rem;\n  margin-right: 1rem;\n  font-size: 1.25rem;\n  text-decoration: none;\n  white-space: nowrap; }\n\n.navbar-nav {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none; }\n  .navbar-nav .nav-link {\n    padding-right: 0;\n    padding-left: 0; }\n  .navbar-nav .dropdown-menu {\n    position: static; }\n\n.navbar-text {\n  padding-top: 0.5rem;\n  padding-bottom: 0.5rem; }\n\n.navbar-collapse {\n  flex-basis: 100%;\n  flex-grow: 1;\n  align-items: center; }\n\n.navbar-toggler {\n  padding: 0.25rem 0.75rem;\n  font-size: 1.25rem;\n  line-height: 1;\n  background-color: transparent;\n  border: 1px solid transparent;\n  border-radius: 0.25rem;\n  transition: box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .navbar-toggler {\n      transition: none; } }\n  .navbar-toggler:hover {\n    text-decoration: none; }\n  .navbar-toggler:focus {\n    text-decoration: none;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem; }\n\n.navbar-toggler-icon {\n  display: inline-block;\n  width: 1.5em;\n  height: 1.5em;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: center;\n  background-size: 100%; }\n\n.navbar-nav-scroll {\n  max-height: var(--bs-scroll-height, 75vh);\n  overflow-y: auto; }\n\n@media (min-width: 576px) {\n  .navbar-expand-sm {\n    flex-wrap: nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-sm .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-sm .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-sm .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-sm .navbar-nav-scroll {\n      overflow: visible; }\n    .navbar-expand-sm .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-sm .navbar-toggler {\n      display: none; }\n    .navbar-expand-sm .offcanvas-header {\n      display: none; }\n    .navbar-expand-sm .offcanvas {\n      position: inherit;\n      bottom: 0;\n      z-index: 1000;\n      flex-grow: 1;\n      visibility: visible !important;\n      background-color: transparent;\n      border-right: 0;\n      border-left: 0;\n      transition: none;\n      transform: none; }\n    .navbar-expand-sm .offcanvas-top,\n    .navbar-expand-sm .offcanvas-bottom {\n      height: auto;\n      border-top: 0;\n      border-bottom: 0; }\n    .navbar-expand-sm .offcanvas-body {\n      display: flex;\n      flex-grow: 0;\n      padding: 0;\n      overflow-y: visible; } }\n\n@media (min-width: 768px) {\n  .navbar-expand-md {\n    flex-wrap: nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-md .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-md .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-md .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-md .navbar-nav-scroll {\n      overflow: visible; }\n    .navbar-expand-md .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-md .navbar-toggler {\n      display: none; }\n    .navbar-expand-md .offcanvas-header {\n      display: none; }\n    .navbar-expand-md .offcanvas {\n      position: inherit;\n      bottom: 0;\n      z-index: 1000;\n      flex-grow: 1;\n      visibility: visible !important;\n      background-color: transparent;\n      border-right: 0;\n      border-left: 0;\n      transition: none;\n      transform: none; }\n    .navbar-expand-md .offcanvas-top,\n    .navbar-expand-md .offcanvas-bottom {\n      height: auto;\n      border-top: 0;\n      border-bottom: 0; }\n    .navbar-expand-md .offcanvas-body {\n      display: flex;\n      flex-grow: 0;\n      padding: 0;\n      overflow-y: visible; } }\n\n@media (min-width: 992px) {\n  .navbar-expand-lg {\n    flex-wrap: nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-lg .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-lg .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-lg .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-lg .navbar-nav-scroll {\n      overflow: visible; }\n    .navbar-expand-lg .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-lg .navbar-toggler {\n      display: none; }\n    .navbar-expand-lg .offcanvas-header {\n      display: none; }\n    .navbar-expand-lg .offcanvas {\n      position: inherit;\n      bottom: 0;\n      z-index: 1000;\n      flex-grow: 1;\n      visibility: visible !important;\n      background-color: transparent;\n      border-right: 0;\n      border-left: 0;\n      transition: none;\n      transform: none; }\n    .navbar-expand-lg .offcanvas-top,\n    .navbar-expand-lg .offcanvas-bottom {\n      height: auto;\n      border-top: 0;\n      border-bottom: 0; }\n    .navbar-expand-lg .offcanvas-body {\n      display: flex;\n      flex-grow: 0;\n      padding: 0;\n      overflow-y: visible; } }\n\n@media (min-width: 1200px) {\n  .navbar-expand-xl {\n    flex-wrap: nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-xl .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-xl .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-xl .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-xl .navbar-nav-scroll {\n      overflow: visible; }\n    .navbar-expand-xl .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-xl .navbar-toggler {\n      display: none; }\n    .navbar-expand-xl .offcanvas-header {\n      display: none; }\n    .navbar-expand-xl .offcanvas {\n      position: inherit;\n      bottom: 0;\n      z-index: 1000;\n      flex-grow: 1;\n      visibility: visible !important;\n      background-color: transparent;\n      border-right: 0;\n      border-left: 0;\n      transition: none;\n      transform: none; }\n    .navbar-expand-xl .offcanvas-top,\n    .navbar-expand-xl .offcanvas-bottom {\n      height: auto;\n      border-top: 0;\n      border-bottom: 0; }\n    .navbar-expand-xl .offcanvas-body {\n      display: flex;\n      flex-grow: 0;\n      padding: 0;\n      overflow-y: visible; } }\n\n@media (min-width: 1400px) {\n  .navbar-expand-xxl {\n    flex-wrap: nowrap;\n    justify-content: flex-start; }\n    .navbar-expand-xxl .navbar-nav {\n      flex-direction: row; }\n      .navbar-expand-xxl .navbar-nav .dropdown-menu {\n        position: absolute; }\n      .navbar-expand-xxl .navbar-nav .nav-link {\n        padding-right: 0.5rem;\n        padding-left: 0.5rem; }\n    .navbar-expand-xxl .navbar-nav-scroll {\n      overflow: visible; }\n    .navbar-expand-xxl .navbar-collapse {\n      display: flex !important;\n      flex-basis: auto; }\n    .navbar-expand-xxl .navbar-toggler {\n      display: none; }\n    .navbar-expand-xxl .offcanvas-header {\n      display: none; }\n    .navbar-expand-xxl .offcanvas {\n      position: inherit;\n      bottom: 0;\n      z-index: 1000;\n      flex-grow: 1;\n      visibility: visible !important;\n      background-color: transparent;\n      border-right: 0;\n      border-left: 0;\n      transition: none;\n      transform: none; }\n    .navbar-expand-xxl .offcanvas-top,\n    .navbar-expand-xxl .offcanvas-bottom {\n      height: auto;\n      border-top: 0;\n      border-bottom: 0; }\n    .navbar-expand-xxl .offcanvas-body {\n      display: flex;\n      flex-grow: 0;\n      padding: 0;\n      overflow-y: visible; } }\n\n.navbar-expand {\n  flex-wrap: nowrap;\n  justify-content: flex-start; }\n  .navbar-expand .navbar-nav {\n    flex-direction: row; }\n    .navbar-expand .navbar-nav .dropdown-menu {\n      position: absolute; }\n    .navbar-expand .navbar-nav .nav-link {\n      padding-right: 0.5rem;\n      padding-left: 0.5rem; }\n  .navbar-expand .navbar-nav-scroll {\n    overflow: visible; }\n  .navbar-expand .navbar-collapse {\n    display: flex !important;\n    flex-basis: auto; }\n  .navbar-expand .navbar-toggler {\n    display: none; }\n  .navbar-expand .offcanvas-header {\n    display: none; }\n  .navbar-expand .offcanvas {\n    position: inherit;\n    bottom: 0;\n    z-index: 1000;\n    flex-grow: 1;\n    visibility: visible !important;\n    background-color: transparent;\n    border-right: 0;\n    border-left: 0;\n    transition: none;\n    transform: none; }\n  .navbar-expand .offcanvas-top,\n  .navbar-expand .offcanvas-bottom {\n    height: auto;\n    border-top: 0;\n    border-bottom: 0; }\n  .navbar-expand .offcanvas-body {\n    display: flex;\n    flex-grow: 0;\n    padding: 0;\n    overflow-y: visible; }\n\n.navbar-light .navbar-brand {\n  color: rgba(0, 0, 0, 0.9); }\n  .navbar-light .navbar-brand:hover, .navbar-light .navbar-brand:focus {\n    color: rgba(0, 0, 0, 0.9); }\n\n.navbar-light .navbar-nav .nav-link {\n  color: rgba(0, 0, 0, 0.55); }\n  .navbar-light .navbar-nav .nav-link:hover, .navbar-light .navbar-nav .nav-link:focus {\n    color: rgba(0, 0, 0, 0.7); }\n  .navbar-light .navbar-nav .nav-link.disabled {\n    color: rgba(0, 0, 0, 0.3); }\n\n.navbar-light .navbar-nav .show > .nav-link,\n.navbar-light .navbar-nav .nav-link.active {\n  color: rgba(0, 0, 0, 0.9); }\n\n.navbar-light .navbar-toggler {\n  color: rgba(0, 0, 0, 0.55);\n  border-color: rgba(0, 0, 0, 0.1); }\n\n.navbar-light .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280, 0, 0, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"); }\n\n.navbar-light .navbar-text {\n  color: rgba(0, 0, 0, 0.55); }\n  .navbar-light .navbar-text a,\n  .navbar-light .navbar-text a:hover,\n  .navbar-light .navbar-text a:focus {\n    color: rgba(0, 0, 0, 0.9); }\n\n.navbar-dark .navbar-brand {\n  color: #fff; }\n  .navbar-dark .navbar-brand:hover, .navbar-dark .navbar-brand:focus {\n    color: #fff; }\n\n.navbar-dark .navbar-nav .nav-link {\n  color: rgba(255, 255, 255, 0.55); }\n  .navbar-dark .navbar-nav .nav-link:hover, .navbar-dark .navbar-nav .nav-link:focus {\n    color: rgba(255, 255, 255, 0.75); }\n  .navbar-dark .navbar-nav .nav-link.disabled {\n    color: rgba(255, 255, 255, 0.25); }\n\n.navbar-dark .navbar-nav .show > .nav-link,\n.navbar-dark .navbar-nav .nav-link.active {\n  color: #fff; }\n\n.navbar-dark .navbar-toggler {\n  color: rgba(255, 255, 255, 0.55);\n  border-color: rgba(255, 255, 255, 0.1); }\n\n.navbar-dark .navbar-toggler-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255, 255, 255, 0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\"); }\n\n.navbar-dark .navbar-text {\n  color: rgba(255, 255, 255, 0.55); }\n  .navbar-dark .navbar-text a,\n  .navbar-dark .navbar-text a:hover,\n  .navbar-dark .navbar-text a:focus {\n    color: #fff; }\n\n.card {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  min-width: 0;\n  word-wrap: break-word;\n  background-color: #191c24;\n  background-clip: border-box;\n  border: 1px solid rgba(0, 0, 0, 0.125);\n  border-radius: 0.25rem; }\n  .card > hr {\n    margin-right: 0;\n    margin-left: 0; }\n  .card > .list-group {\n    border-top: inherit;\n    border-bottom: inherit; }\n    .card > .list-group:first-child {\n      border-top-width: 0;\n      border-top-left-radius: calc(0.25rem - 1px);\n      border-top-right-radius: calc(0.25rem - 1px); }\n    .card > .list-group:last-child {\n      border-bottom-width: 0;\n      border-bottom-right-radius: calc(0.25rem - 1px);\n      border-bottom-left-radius: calc(0.25rem - 1px); }\n  .card > .card-header + .list-group,\n  .card > .list-group + .card-footer {\n    border-top: 0; }\n\n.card-body {\n  flex: 1 1 auto;\n  padding: 1rem 1rem; }\n\n.card-title {\n  margin-bottom: 0.5rem; }\n\n.card-subtitle {\n  margin-top: -0.25rem;\n  margin-bottom: 0; }\n\n.card-text:last-child {\n  margin-bottom: 0; }\n\n.card-link + .card-link {\n  margin-left: 1rem; }\n\n.card-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-bottom: 1px solid rgba(0, 0, 0, 0.125); }\n  .card-header:first-child {\n    border-radius: calc(0.25rem - 1px) calc(0.25rem - 1px) 0 0; }\n\n.card-footer {\n  padding: 0.5rem 1rem;\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(0, 0, 0, 0.125); }\n  .card-footer:last-child {\n    border-radius: 0 0 calc(0.25rem - 1px) calc(0.25rem - 1px); }\n\n.card-header-tabs {\n  margin-right: -0.5rem;\n  margin-bottom: -0.5rem;\n  margin-left: -0.5rem;\n  border-bottom: 0; }\n  .card-header-tabs .nav-link.active {\n    background-color: #191c24;\n    border-bottom-color: #191c24; }\n\n.card-header-pills {\n  margin-right: -0.5rem;\n  margin-left: -0.5rem; }\n\n.card-img-overlay {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  padding: 1rem;\n  border-radius: calc(0.25rem - 1px); }\n\n.card-img,\n.card-img-top,\n.card-img-bottom {\n  width: 100%; }\n\n.card-img,\n.card-img-top {\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px); }\n\n.card-img,\n.card-img-bottom {\n  border-bottom-right-radius: calc(0.25rem - 1px);\n  border-bottom-left-radius: calc(0.25rem - 1px); }\n\n.card-group > .card {\n  margin-bottom: 0.75rem; }\n\n@media (min-width: 576px) {\n  .card-group {\n    display: flex;\n    flex-flow: row wrap; }\n    .card-group > .card {\n      flex: 1 0 0%;\n      margin-bottom: 0; }\n      .card-group > .card + .card {\n        margin-left: 0;\n        border-left: 0; }\n      .card-group > .card:not(:last-child) {\n        border-top-right-radius: 0;\n        border-bottom-right-radius: 0; }\n        .card-group > .card:not(:last-child) .card-img-top,\n        .card-group > .card:not(:last-child) .card-header {\n          border-top-right-radius: 0; }\n        .card-group > .card:not(:last-child) .card-img-bottom,\n        .card-group > .card:not(:last-child) .card-footer {\n          border-bottom-right-radius: 0; }\n      .card-group > .card:not(:first-child) {\n        border-top-left-radius: 0;\n        border-bottom-left-radius: 0; }\n        .card-group > .card:not(:first-child) .card-img-top,\n        .card-group > .card:not(:first-child) .card-header {\n          border-top-left-radius: 0; }\n        .card-group > .card:not(:first-child) .card-img-bottom,\n        .card-group > .card:not(:first-child) .card-footer {\n          border-bottom-left-radius: 0; } }\n\n.accordion-button {\n  position: relative;\n  display: flex;\n  align-items: center;\n  width: 100%;\n  padding: 1rem 1.25rem;\n  font-size: 1rem;\n  color: #212529;\n  text-align: left;\n  background-color: #fff;\n  border: 0;\n  border-radius: 0;\n  overflow-anchor: none;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out, border-radius 0.15s ease; }\n  @media (prefers-reduced-motion: reduce) {\n    .accordion-button {\n      transition: none; } }\n  .accordion-button:not(.collapsed) {\n    color: #0c63e4;\n    background-color: #e7f1ff;\n    box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.125); }\n    .accordion-button:not(.collapsed)::after {\n      background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n      transform: rotate(-180deg); }\n  .accordion-button::after {\n    flex-shrink: 0;\n    width: 1.25rem;\n    height: 1.25rem;\n    margin-left: auto;\n    content: \"\";\n    background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\");\n    background-repeat: no-repeat;\n    background-size: 1.25rem;\n    transition: transform 0.2s ease-in-out; }\n    @media (prefers-reduced-motion: reduce) {\n      .accordion-button::after {\n        transition: none; } }\n  .accordion-button:hover {\n    z-index: 2; }\n  .accordion-button:focus {\n    z-index: 3;\n    border-color: #86b7fe;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n\n.accordion-header {\n  margin-bottom: 0; }\n\n.accordion-item {\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125); }\n  .accordion-item:first-of-type {\n    border-top-left-radius: 0.25rem;\n    border-top-right-radius: 0.25rem; }\n    .accordion-item:first-of-type .accordion-button {\n      border-top-left-radius: calc(0.25rem - 1px);\n      border-top-right-radius: calc(0.25rem - 1px); }\n  .accordion-item:not(:first-of-type) {\n    border-top: 0; }\n  .accordion-item:last-of-type {\n    border-bottom-right-radius: 0.25rem;\n    border-bottom-left-radius: 0.25rem; }\n    .accordion-item:last-of-type .accordion-button.collapsed {\n      border-bottom-right-radius: calc(0.25rem - 1px);\n      border-bottom-left-radius: calc(0.25rem - 1px); }\n    .accordion-item:last-of-type .accordion-collapse {\n      border-bottom-right-radius: 0.25rem;\n      border-bottom-left-radius: 0.25rem; }\n\n.accordion-body {\n  padding: 1rem 1.25rem; }\n\n.accordion-flush .accordion-collapse {\n  border-width: 0; }\n\n.accordion-flush .accordion-item {\n  border-right: 0;\n  border-left: 0;\n  border-radius: 0; }\n  .accordion-flush .accordion-item:first-child {\n    border-top: 0; }\n  .accordion-flush .accordion-item:last-child {\n    border-bottom: 0; }\n  .accordion-flush .accordion-item .accordion-button {\n    border-radius: 0; }\n\n.breadcrumb {\n  display: flex;\n  flex-wrap: wrap;\n  padding: 0.56rem 1.13rem;\n  margin-bottom: 1rem;\n  font-size: 0.875rem;\n  list-style: none;\n  background-color: transparent; }\n\n.breadcrumb-item + .breadcrumb-item {\n  padding-left: 0.5rem; }\n  .breadcrumb-item + .breadcrumb-item::before {\n    float: left;\n    padding-right: 0.5rem;\n    color: #6c757d;\n    content: var(--bs-breadcrumb-divider, \"/\") /* rtl: var(--bs-breadcrumb-divider, \"/\") */; }\n\n.breadcrumb-item.active {\n  color: #495057; }\n\n.pagination, .jsgrid .jsgrid-pager {\n  display: flex;\n  padding-left: 0;\n  list-style: none; }\n\n.page-link, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a,\n.jsgrid .jsgrid-pager .jsgrid-pager-page a {\n  position: relative;\n  display: block;\n  color: #0d6efd;\n  text-decoration: none;\n  background-color: #000000;\n  border: 1px solid #dee2e6;\n  transition: color 0.15s ease-in-out, background-color 0.15s ease-in-out, border-color 0.15s ease-in-out, box-shadow 0.15s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .page-link, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a,\n    .jsgrid .jsgrid-pager .jsgrid-pager-page a {\n      transition: none; } }\n  .page-link:hover, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a:hover,\n  .jsgrid .jsgrid-pager .jsgrid-pager-page a:hover {\n    z-index: 2;\n    color: #0a58ca;\n    background-color: #e9ecef;\n    border-color: #dee2e6; }\n  .page-link:focus, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a:focus,\n  .jsgrid .jsgrid-pager .jsgrid-pager-page a:focus {\n    z-index: 3;\n    color: #0a58ca;\n    background-color: #e9ecef;\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25); }\n\n.page-item:not(:first-child) .page-link, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:not(:first-child) .page-link, .jsgrid .jsgrid-pager .jsgrid-pager-page:not(:first-child) .page-link, .page-item:not(:first-child) .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .page-item:not(:first-child) a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:not(:first-child) a,\n.page-item:not(:first-child) .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .page-item:not(:first-child) a,\n.jsgrid .jsgrid-pager .jsgrid-pager-page:not(:first-child) a {\n  margin-left: -1px; }\n\n.page-item.active .page-link, .jsgrid .jsgrid-pager .active.jsgrid-pager-nav-button .page-link, .jsgrid .jsgrid-pager .active.jsgrid-pager-page .page-link, .page-item.active .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .page-item.active a, .jsgrid .jsgrid-pager .active.jsgrid-pager-nav-button a,\n.page-item.active .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .page-item.active a,\n.jsgrid .jsgrid-pager .active.jsgrid-pager-page a {\n  z-index: 3;\n  color: #fff;\n  background-color: #0d6efd;\n  border-color: #0d6efd; }\n\n.page-item.disabled .page-link, .jsgrid .jsgrid-pager .disabled.jsgrid-pager-nav-button .page-link, .jsgrid .jsgrid-pager .disabled.jsgrid-pager-page .page-link, .page-item.disabled .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .page-item.disabled a, .jsgrid .jsgrid-pager .disabled.jsgrid-pager-nav-button a,\n.page-item.disabled .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .page-item.disabled a,\n.jsgrid .jsgrid-pager .disabled.jsgrid-pager-page a {\n  color: #6c757d;\n  pointer-events: none;\n  background-color: #fff;\n  border-color: #dee2e6; }\n\n.page-link, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a,\n.jsgrid .jsgrid-pager .jsgrid-pager-page a {\n  padding: 0.375rem 0.75rem; }\n\n.page-item:first-child .page-link, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:first-child .page-link, .jsgrid .jsgrid-pager .jsgrid-pager-page:first-child .page-link, .page-item:first-child .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .page-item:first-child a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:first-child a,\n.page-item:first-child .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .page-item:first-child a,\n.jsgrid .jsgrid-pager .jsgrid-pager-page:first-child a {\n  border-top-left-radius: 0.25rem;\n  border-bottom-left-radius: 0.25rem; }\n\n.page-item:last-child .page-link, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:last-child .page-link, .jsgrid .jsgrid-pager .jsgrid-pager-page:last-child .page-link, .page-item:last-child .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .page-item:last-child a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:last-child a,\n.page-item:last-child .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .page-item:last-child a,\n.jsgrid .jsgrid-pager .jsgrid-pager-page:last-child a {\n  border-top-right-radius: 0.25rem;\n  border-bottom-right-radius: 0.25rem; }\n\n.pagination-lg .page-link, .pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .pagination-lg a,\n.pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .pagination-lg a {\n  padding: 0.75rem 1.5rem;\n  font-size: 1.25rem; }\n\n.pagination-lg .page-item:first-child .page-link, .pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:first-child .page-link, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-nav-button:first-child .page-link, .pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-page:first-child .page-link, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-page:first-child .page-link, .pagination-lg .page-item:first-child .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .pagination-lg .page-item:first-child a, .pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:first-child a, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-nav-button:first-child a,\n.pagination-lg .page-item:first-child .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .pagination-lg .page-item:first-child a,\n.pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-page:first-child a, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-page:first-child a {\n  border-top-left-radius: 0.3rem;\n  border-bottom-left-radius: 0.3rem; }\n\n.pagination-lg .page-item:last-child .page-link, .pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:last-child .page-link, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-nav-button:last-child .page-link, .pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-page:last-child .page-link, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-page:last-child .page-link, .pagination-lg .page-item:last-child .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .pagination-lg .page-item:last-child a, .pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:last-child a, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-nav-button:last-child a,\n.pagination-lg .page-item:last-child .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .pagination-lg .page-item:last-child a,\n.pagination-lg .jsgrid .jsgrid-pager .jsgrid-pager-page:last-child a, .jsgrid .jsgrid-pager .pagination-lg .jsgrid-pager-page:last-child a {\n  border-top-right-radius: 0.3rem;\n  border-bottom-right-radius: 0.3rem; }\n\n.pagination-sm .page-link, .pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .pagination-sm a,\n.pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .pagination-sm a {\n  padding: 0.25rem 0.5rem;\n  font-size: 0.875rem; }\n\n.pagination-sm .page-item:first-child .page-link, .pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:first-child .page-link, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-nav-button:first-child .page-link, .pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-page:first-child .page-link, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-page:first-child .page-link, .pagination-sm .page-item:first-child .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .pagination-sm .page-item:first-child a, .pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:first-child a, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-nav-button:first-child a,\n.pagination-sm .page-item:first-child .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .pagination-sm .page-item:first-child a,\n.pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-page:first-child a, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-page:first-child a {\n  border-top-left-radius: 0.2rem;\n  border-bottom-left-radius: 0.2rem; }\n\n.pagination-sm .page-item:last-child .page-link, .pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:last-child .page-link, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-nav-button:last-child .page-link, .pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-page:last-child .page-link, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-page:last-child .page-link, .pagination-sm .page-item:last-child .jsgrid .jsgrid-pager .jsgrid-pager-nav-button a, .jsgrid .jsgrid-pager .jsgrid-pager-nav-button .pagination-sm .page-item:last-child a, .pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-nav-button:last-child a, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-nav-button:last-child a,\n.pagination-sm .page-item:last-child .jsgrid .jsgrid-pager .jsgrid-pager-page a, .jsgrid .jsgrid-pager .jsgrid-pager-page .pagination-sm .page-item:last-child a,\n.pagination-sm .jsgrid .jsgrid-pager .jsgrid-pager-page:last-child a, .jsgrid .jsgrid-pager .pagination-sm .jsgrid-pager-page:last-child a {\n  border-top-right-radius: 0.2rem;\n  border-bottom-right-radius: 0.2rem; }\n\n.badge {\n  display: inline-block;\n  padding: 0.35em 0.65em;\n  font-size: 0.75em;\n  font-weight: 700;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: 0.25rem; }\n  .badge:empty {\n    display: none; }\n\n.btn .badge, .fc button .badge, .ajax-upload-dragdrop .ajax-file-upload .badge, .swal2-modal .swal2-buttonswrapper .swal2-styled .badge {\n  position: relative;\n  top: -1px; }\n\n.alert {\n  position: relative;\n  padding: 1rem 1rem;\n  margin-bottom: 1rem;\n  border: 1px solid transparent;\n  border-radius: 0.25rem; }\n\n.alert-heading {\n  color: inherit; }\n\n.alert-link {\n  font-weight: 700; }\n\n.alert-dismissible {\n  padding-right: 3rem; }\n  .alert-dismissible .btn-close {\n    position: absolute;\n    top: 0;\n    right: 0;\n    z-index: 2;\n    padding: 1.25rem 1rem; }\n\n.alert-primary {\n  color: #00568b;\n  background-color: #cce9fa;\n  border-color: #b3def8; }\n  .alert-primary .alert-link {\n    color: #00456f; }\n\n.alert-secondary {\n  color: #5b5e5e;\n  background-color: #fafbfb;\n  border-color: #f7f9f9; }\n  .alert-secondary .alert-link {\n    color: #494b4b; }\n\n.alert-success {\n  color: #005424;\n  background-color: #ccf6de;\n  border-color: #b3f2ce; }\n  .alert-success .alert-link {\n    color: #00431d; }\n\n.alert-info {\n  color: #56398b;\n  background-color: #e9dffa;\n  border-color: #ddcff8; }\n  .alert-info .alert-link {\n    color: #452e6f; }\n\n.alert-warning {\n  color: #664400;\n  background-color: #ffeecc;\n  border-color: #ffe6b3; }\n  .alert-warning .alert-link {\n    color: #523600; }\n\n.alert-danger {\n  color: #97282c;\n  background-color: #fed9db;\n  border-color: #fec6c9; }\n  .alert-danger .alert-link {\n    color: #792023; }\n\n.alert-light {\n  color: #666666;\n  background-color: white;\n  border-color: white; }\n  .alert-light .alert-link {\n    color: #525252; }\n\n.alert-dark {\n  color: #080808;\n  background-color: #cfcfcf;\n  border-color: #b6b6b6; }\n  .alert-dark .alert-link {\n    color: #060606; }\n\n@keyframes progress-bar-stripes {\n  0% {\n    background-position-x: 1rem; } }\n\n.progress {\n  display: flex;\n  height: 1rem;\n  overflow: hidden;\n  font-size: 0.75rem;\n  background-color: #000000;\n  border-radius: 0.25rem; }\n\n.progress-bar {\n  display: flex;\n  flex-direction: column;\n  justify-content: center;\n  overflow: hidden;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  background-color: #0d6efd;\n  transition: width 0.6s ease; }\n  @media (prefers-reduced-motion: reduce) {\n    .progress-bar {\n      transition: none; } }\n\n.progress-bar-striped {\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-size: 1rem 1rem; }\n\n.progress-bar-animated {\n  animation: 1s linear infinite progress-bar-stripes; }\n  @media (prefers-reduced-motion: reduce) {\n    .progress-bar-animated {\n      animation: none; } }\n\n.list-group {\n  display: flex;\n  flex-direction: column;\n  padding-left: 0;\n  margin-bottom: 0;\n  border-radius: 0.25rem; }\n\n.list-group-numbered {\n  list-style-type: none;\n  counter-reset: section; }\n  .list-group-numbered > li::before {\n    content: counters(section, \".\") \". \";\n    counter-increment: section; }\n\n.list-group-item-action {\n  width: 100%;\n  color: #495057;\n  text-align: inherit; }\n  .list-group-item-action:hover, .list-group-item-action:focus {\n    z-index: 1;\n    color: #495057;\n    text-decoration: none;\n    background-color: #f8f9fa; }\n  .list-group-item-action:active {\n    color: #212529;\n    background-color: #e9ecef; }\n\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 0.5rem 1rem;\n  color: #212529;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid rgba(0, 0, 0, 0.125); }\n  .list-group-item:first-child {\n    border-top-left-radius: inherit;\n    border-top-right-radius: inherit; }\n  .list-group-item:last-child {\n    border-bottom-right-radius: inherit;\n    border-bottom-left-radius: inherit; }\n  .list-group-item.disabled, .list-group-item:disabled {\n    color: #6c757d;\n    pointer-events: none;\n    background-color: #fff; }\n  .list-group-item.active {\n    z-index: 2;\n    color: #fff;\n    background-color: #0d6efd;\n    border-color: #0d6efd; }\n  .list-group-item + .list-group-item {\n    border-top-width: 0; }\n    .list-group-item + .list-group-item.active {\n      margin-top: -1px;\n      border-top-width: 1px; }\n\n.list-group-horizontal {\n  flex-direction: row; }\n  .list-group-horizontal > .list-group-item:first-child {\n    border-bottom-left-radius: 0.25rem;\n    border-top-right-radius: 0; }\n  .list-group-horizontal > .list-group-item:last-child {\n    border-top-right-radius: 0.25rem;\n    border-bottom-left-radius: 0; }\n  .list-group-horizontal > .list-group-item.active {\n    margin-top: 0; }\n  .list-group-horizontal > .list-group-item + .list-group-item {\n    border-top-width: 1px;\n    border-left-width: 0; }\n    .list-group-horizontal > .list-group-item + .list-group-item.active {\n      margin-left: -1px;\n      border-left-width: 1px; }\n\n@media (min-width: 576px) {\n  .list-group-horizontal-sm {\n    flex-direction: row; }\n    .list-group-horizontal-sm > .list-group-item:first-child {\n      border-bottom-left-radius: 0.25rem;\n      border-top-right-radius: 0; }\n    .list-group-horizontal-sm > .list-group-item:last-child {\n      border-top-right-radius: 0.25rem;\n      border-bottom-left-radius: 0; }\n    .list-group-horizontal-sm > .list-group-item.active {\n      margin-top: 0; }\n    .list-group-horizontal-sm > .list-group-item + .list-group-item {\n      border-top-width: 1px;\n      border-left-width: 0; }\n      .list-group-horizontal-sm > .list-group-item + .list-group-item.active {\n        margin-left: -1px;\n        border-left-width: 1px; } }\n\n@media (min-width: 768px) {\n  .list-group-horizontal-md {\n    flex-direction: row; }\n    .list-group-horizontal-md > .list-group-item:first-child {\n      border-bottom-left-radius: 0.25rem;\n      border-top-right-radius: 0; }\n    .list-group-horizontal-md > .list-group-item:last-child {\n      border-top-right-radius: 0.25rem;\n      border-bottom-left-radius: 0; }\n    .list-group-horizontal-md > .list-group-item.active {\n      margin-top: 0; }\n    .list-group-horizontal-md > .list-group-item + .list-group-item {\n      border-top-width: 1px;\n      border-left-width: 0; }\n      .list-group-horizontal-md > .list-group-item + .list-group-item.active {\n        margin-left: -1px;\n        border-left-width: 1px; } }\n\n@media (min-width: 992px) {\n  .list-group-horizontal-lg {\n    flex-direction: row; }\n    .list-group-horizontal-lg > .list-group-item:first-child {\n      border-bottom-left-radius: 0.25rem;\n      border-top-right-radius: 0; }\n    .list-group-horizontal-lg > .list-group-item:last-child {\n      border-top-right-radius: 0.25rem;\n      border-bottom-left-radius: 0; }\n    .list-group-horizontal-lg > .list-group-item.active {\n      margin-top: 0; }\n    .list-group-horizontal-lg > .list-group-item + .list-group-item {\n      border-top-width: 1px;\n      border-left-width: 0; }\n      .list-group-horizontal-lg > .list-group-item + .list-group-item.active {\n        margin-left: -1px;\n        border-left-width: 1px; } }\n\n@media (min-width: 1200px) {\n  .list-group-horizontal-xl {\n    flex-direction: row; }\n    .list-group-horizontal-xl > .list-group-item:first-child {\n      border-bottom-left-radius: 0.25rem;\n      border-top-right-radius: 0; }\n    .list-group-horizontal-xl > .list-group-item:last-child {\n      border-top-right-radius: 0.25rem;\n      border-bottom-left-radius: 0; }\n    .list-group-horizontal-xl > .list-group-item.active {\n      margin-top: 0; }\n    .list-group-horizontal-xl > .list-group-item + .list-group-item {\n      border-top-width: 1px;\n      border-left-width: 0; }\n      .list-group-horizontal-xl > .list-group-item + .list-group-item.active {\n        margin-left: -1px;\n        border-left-width: 1px; } }\n\n@media (min-width: 1400px) {\n  .list-group-horizontal-xxl {\n    flex-direction: row; }\n    .list-group-horizontal-xxl > .list-group-item:first-child {\n      border-bottom-left-radius: 0.25rem;\n      border-top-right-radius: 0; }\n    .list-group-horizontal-xxl > .list-group-item:last-child {\n      border-top-right-radius: 0.25rem;\n      border-bottom-left-radius: 0; }\n    .list-group-horizontal-xxl > .list-group-item.active {\n      margin-top: 0; }\n    .list-group-horizontal-xxl > .list-group-item + .list-group-item {\n      border-top-width: 1px;\n      border-left-width: 0; }\n      .list-group-horizontal-xxl > .list-group-item + .list-group-item.active {\n        margin-left: -1px;\n        border-left-width: 1px; } }\n\n.list-group-flush {\n  border-radius: 0; }\n  .list-group-flush > .list-group-item {\n    border-width: 0 0 1px; }\n    .list-group-flush > .list-group-item:last-child {\n      border-bottom-width: 0; }\n\n.list-group-item-primary {\n  color: #00568b;\n  background-color: #cce9fa; }\n  .list-group-item-primary.list-group-item-action:hover, .list-group-item-primary.list-group-item-action:focus {\n    color: #00568b;\n    background-color: #b8d2e1; }\n  .list-group-item-primary.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #00568b;\n    border-color: #00568b; }\n\n.list-group-item-secondary {\n  color: #5b5e5e;\n  background-color: #fafbfb; }\n  .list-group-item-secondary.list-group-item-action:hover, .list-group-item-secondary.list-group-item-action:focus {\n    color: #5b5e5e;\n    background-color: #e1e2e2; }\n  .list-group-item-secondary.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #5b5e5e;\n    border-color: #5b5e5e; }\n\n.list-group-item-success {\n  color: #005424;\n  background-color: #ccf6de; }\n  .list-group-item-success.list-group-item-action:hover, .list-group-item-success.list-group-item-action:focus {\n    color: #005424;\n    background-color: #b8ddc8; }\n  .list-group-item-success.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #005424;\n    border-color: #005424; }\n\n.list-group-item-info {\n  color: #56398b;\n  background-color: #e9dffa; }\n  .list-group-item-info.list-group-item-action:hover, .list-group-item-info.list-group-item-action:focus {\n    color: #56398b;\n    background-color: #d2c9e1; }\n  .list-group-item-info.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #56398b;\n    border-color: #56398b; }\n\n.list-group-item-warning {\n  color: #664400;\n  background-color: #ffeecc; }\n  .list-group-item-warning.list-group-item-action:hover, .list-group-item-warning.list-group-item-action:focus {\n    color: #664400;\n    background-color: #e6d6b8; }\n  .list-group-item-warning.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #664400;\n    border-color: #664400; }\n\n.list-group-item-danger {\n  color: #97282c;\n  background-color: #fed9db; }\n  .list-group-item-danger.list-group-item-action:hover, .list-group-item-danger.list-group-item-action:focus {\n    color: #97282c;\n    background-color: #e5c3c5; }\n  .list-group-item-danger.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #97282c;\n    border-color: #97282c; }\n\n.list-group-item-light {\n  color: #666666;\n  background-color: white; }\n  .list-group-item-light.list-group-item-action:hover, .list-group-item-light.list-group-item-action:focus {\n    color: #666666;\n    background-color: #e6e6e6; }\n  .list-group-item-light.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #666666;\n    border-color: #666666; }\n\n.list-group-item-dark {\n  color: #080808;\n  background-color: #cfcfcf; }\n  .list-group-item-dark.list-group-item-action:hover, .list-group-item-dark.list-group-item-action:focus {\n    color: #080808;\n    background-color: #bababa; }\n  .list-group-item-dark.list-group-item-action.active {\n    color: #ffffff;\n    background-color: #080808;\n    border-color: #080808; }\n\n.btn-close {\n  box-sizing: content-box;\n  width: 1em;\n  height: 1em;\n  padding: 0.25em 0.25em;\n  color: #000;\n  background: transparent url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 011.414 0L8 6.586 14.293.293a1 1 0 111.414 1.414L9.414 8l6.293 6.293a1 1 0 01-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 01-1.414-1.414L6.586 8 .293 1.707a1 1 0 010-1.414z'/%3e%3c/svg%3e\") center/1em auto no-repeat;\n  border: 0;\n  border-radius: 0.25rem;\n  opacity: 0.5; }\n  .btn-close:hover {\n    color: #000;\n    text-decoration: none;\n    opacity: 0.75; }\n  .btn-close:focus {\n    outline: 0;\n    box-shadow: 0 0 0 0.25rem rgba(13, 110, 253, 0.25);\n    opacity: 1; }\n  .btn-close:disabled, .btn-close.disabled {\n    pointer-events: none;\n    user-select: none;\n    opacity: 0.25; }\n\n.btn-close-white {\n  filter: invert(1) grayscale(100%) brightness(200%); }\n\n.toast {\n  width: 350px;\n  max-width: 100%;\n  font-size: 0.875rem;\n  pointer-events: auto;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15);\n  border-radius: 0.25rem; }\n  .toast.showing {\n    opacity: 0; }\n  .toast:not(.show) {\n    display: none; }\n\n.toast-container {\n  width: max-content;\n  max-width: 100%;\n  pointer-events: none; }\n  .toast-container > :not(:last-child) {\n    margin-bottom: 0.75rem; }\n\n.toast-header {\n  display: flex;\n  align-items: center;\n  padding: 0.5rem 0.75rem;\n  color: #6c757d;\n  background-color: rgba(255, 255, 255, 0.85);\n  background-clip: padding-box;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n  border-top-left-radius: calc(0.25rem - 1px);\n  border-top-right-radius: calc(0.25rem - 1px); }\n  .toast-header .btn-close {\n    margin-right: -0.375rem;\n    margin-left: 0.75rem; }\n\n.toast-body {\n  padding: 0.75rem;\n  word-wrap: break-word; }\n\n.modal {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1055;\n  display: none;\n  width: 100%;\n  height: 100%;\n  overflow-x: hidden;\n  overflow-y: auto;\n  outline: 0; }\n\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n  pointer-events: none; }\n  .modal.fade .modal-dialog {\n    transition: transform 0.4s ease;\n    transform: translate(0, -50px); }\n    @media (prefers-reduced-motion: reduce) {\n      .modal.fade .modal-dialog {\n        transition: none; } }\n  .modal.show .modal-dialog {\n    transform: none; }\n  .modal.modal-static .modal-dialog {\n    transform: scale(1.02); }\n\n.modal-dialog-scrollable {\n  height: calc(100% - 20px); }\n  .modal-dialog-scrollable .modal-content {\n    max-height: 100%;\n    overflow: hidden; }\n  .modal-dialog-scrollable .modal-body {\n    overflow-y: auto; }\n\n.modal-dialog-centered {\n  display: flex;\n  align-items: center;\n  min-height: calc(100% - 20px); }\n\n.modal-content {\n  position: relative;\n  display: flex;\n  flex-direction: column;\n  width: 100%;\n  pointer-events: auto;\n  background-color: #000000;\n  background-clip: padding-box;\n  border: 1px solid #2c2e33;\n  border-radius: 0.3rem;\n  outline: 0; }\n\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1050;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000000; }\n  .modal-backdrop.fade {\n    opacity: 0; }\n  .modal-backdrop.show {\n    opacity: 0.5; }\n\n.modal-header {\n  display: flex;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem;\n  border-bottom: 1px solid #2c2e33;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px); }\n  .modal-header .btn-close {\n    padding: 12.5px 13px;\n    margin: -12.5px -13px -12.5px auto; }\n\n.modal-title {\n  margin-bottom: 0;\n  line-height: 1.5; }\n\n.modal-body {\n  position: relative;\n  flex: 1 1 auto;\n  padding: 0.9375rem; }\n\n.modal-footer {\n  display: flex;\n  flex-wrap: wrap;\n  flex-shrink: 0;\n  align-items: center;\n  justify-content: flex-end;\n  padding: 0.6875rem;\n  border-top: 1px solid #2c2e33;\n  border-bottom-right-radius: calc(0.3rem - 1px);\n  border-bottom-left-radius: calc(0.3rem - 1px); }\n  .modal-footer > * {\n    margin: 0.25rem; }\n\n@media (min-width: 576px) {\n  .modal-dialog {\n    max-width: 500px;\n    margin: 30px auto; }\n  .modal-dialog-scrollable {\n    height: calc(100% - 60px); }\n  .modal-dialog-centered {\n    min-height: calc(100% - 60px); }\n  .modal-sm {\n    max-width: 300px; } }\n\n@media (min-width: 992px) {\n  .modal-lg,\n  .modal-xl {\n    max-width: 90%; } }\n\n@media (min-width: 1200px) {\n  .modal-xl {\n    max-width: 1140px; } }\n\n.modal-fullscreen {\n  width: 100vw;\n  max-width: none;\n  height: 100%;\n  margin: 0; }\n  .modal-fullscreen .modal-content {\n    height: 100%;\n    border: 0;\n    border-radius: 0; }\n  .modal-fullscreen .modal-header {\n    border-radius: 0; }\n  .modal-fullscreen .modal-body {\n    overflow-y: auto; }\n  .modal-fullscreen .modal-footer {\n    border-radius: 0; }\n\n@media (max-width: 575.98px) {\n  .modal-fullscreen-sm-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0; }\n    .modal-fullscreen-sm-down .modal-content {\n      height: 100%;\n      border: 0;\n      border-radius: 0; }\n    .modal-fullscreen-sm-down .modal-header {\n      border-radius: 0; }\n    .modal-fullscreen-sm-down .modal-body {\n      overflow-y: auto; }\n    .modal-fullscreen-sm-down .modal-footer {\n      border-radius: 0; } }\n\n@media (max-width: 767.98px) {\n  .modal-fullscreen-md-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0; }\n    .modal-fullscreen-md-down .modal-content {\n      height: 100%;\n      border: 0;\n      border-radius: 0; }\n    .modal-fullscreen-md-down .modal-header {\n      border-radius: 0; }\n    .modal-fullscreen-md-down .modal-body {\n      overflow-y: auto; }\n    .modal-fullscreen-md-down .modal-footer {\n      border-radius: 0; } }\n\n@media (max-width: 991.98px) {\n  .modal-fullscreen-lg-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0; }\n    .modal-fullscreen-lg-down .modal-content {\n      height: 100%;\n      border: 0;\n      border-radius: 0; }\n    .modal-fullscreen-lg-down .modal-header {\n      border-radius: 0; }\n    .modal-fullscreen-lg-down .modal-body {\n      overflow-y: auto; }\n    .modal-fullscreen-lg-down .modal-footer {\n      border-radius: 0; } }\n\n@media (max-width: 1199.98px) {\n  .modal-fullscreen-xl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0; }\n    .modal-fullscreen-xl-down .modal-content {\n      height: 100%;\n      border: 0;\n      border-radius: 0; }\n    .modal-fullscreen-xl-down .modal-header {\n      border-radius: 0; }\n    .modal-fullscreen-xl-down .modal-body {\n      overflow-y: auto; }\n    .modal-fullscreen-xl-down .modal-footer {\n      border-radius: 0; } }\n\n@media (max-width: 1399.98px) {\n  .modal-fullscreen-xxl-down {\n    width: 100vw;\n    max-width: none;\n    height: 100%;\n    margin: 0; }\n    .modal-fullscreen-xxl-down .modal-content {\n      height: 100%;\n      border: 0;\n      border-radius: 0; }\n    .modal-fullscreen-xxl-down .modal-header {\n      border-radius: 0; }\n    .modal-fullscreen-xxl-down .modal-body {\n      overflow-y: auto; }\n    .modal-fullscreen-xxl-down .modal-footer {\n      border-radius: 0; } }\n\n.tooltip {\n  position: absolute;\n  z-index: 1080;\n  display: block;\n  margin: 0;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.75rem;\n  word-wrap: break-word;\n  opacity: 0; }\n  .tooltip.show {\n    opacity: 0.9; }\n  .tooltip .tooltip-arrow {\n    position: absolute;\n    display: block;\n    width: 0.8rem;\n    height: 0.4rem; }\n    .tooltip .tooltip-arrow::before {\n      position: absolute;\n      content: \"\";\n      border-color: transparent;\n      border-style: solid; }\n\n.bs-tooltip-top, .bs-tooltip-auto[data-popper-placement^=\"top\"] {\n  padding: 0.4rem 0; }\n  .bs-tooltip-top .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow {\n    bottom: 0; }\n    .bs-tooltip-top .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"top\"] .tooltip-arrow::before {\n      top: -1px;\n      border-width: 0.4rem 0.4rem 0;\n      border-top-color: #000; }\n\n.bs-tooltip-end, .bs-tooltip-auto[data-popper-placement^=\"right\"] {\n  padding: 0 0.4rem; }\n  .bs-tooltip-end .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow {\n    left: 0;\n    width: 0.4rem;\n    height: 0.8rem; }\n    .bs-tooltip-end .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"right\"] .tooltip-arrow::before {\n      right: -1px;\n      border-width: 0.4rem 0.4rem 0.4rem 0;\n      border-right-color: #000; }\n\n.bs-tooltip-bottom, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] {\n  padding: 0.4rem 0; }\n  .bs-tooltip-bottom .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow {\n    top: 0; }\n    .bs-tooltip-bottom .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"bottom\"] .tooltip-arrow::before {\n      bottom: -1px;\n      border-width: 0 0.4rem 0.4rem;\n      border-bottom-color: #000; }\n\n.bs-tooltip-start, .bs-tooltip-auto[data-popper-placement^=\"left\"] {\n  padding: 0 0.4rem; }\n  .bs-tooltip-start .tooltip-arrow, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow {\n    right: 0;\n    width: 0.4rem;\n    height: 0.8rem; }\n    .bs-tooltip-start .tooltip-arrow::before, .bs-tooltip-auto[data-popper-placement^=\"left\"] .tooltip-arrow::before {\n      left: -1px;\n      border-width: 0.4rem 0 0.4rem 0.4rem;\n      border-left-color: #000; }\n\n.tooltip-inner {\n  max-width: 200px;\n  padding: 0.4rem 0.75rem;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 0.375rem; }\n\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0 /* rtl:ignore */;\n  z-index: 1070;\n  display: block;\n  max-width: 276px;\n  font-family: var(--bs-font-sans-serif);\n  font-style: normal;\n  font-weight: 400;\n  line-height: 1.5;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  white-space: normal;\n  line-break: auto;\n  font-size: 0.875rem;\n  word-wrap: break-word;\n  background-color: #0d0d0d;\n  background-clip: padding-box;\n  border: 1px solid #2c2e33;\n  border-radius: 0.3rem; }\n  .popover .popover-arrow {\n    position: absolute;\n    display: block;\n    width: 1rem;\n    height: 0.5rem; }\n    .popover .popover-arrow::before, .popover .popover-arrow::after {\n      position: absolute;\n      display: block;\n      content: \"\";\n      border-color: transparent;\n      border-style: solid; }\n\n.bs-popover-top > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow {\n  bottom: calc(-0.5rem - 1px); }\n  .bs-popover-top > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::before {\n    bottom: 0;\n    border-width: 0.5rem 0.5rem 0;\n    border-top-color: #2c2e33; }\n  .bs-popover-top > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"top\"] > .popover-arrow::after {\n    bottom: 1px;\n    border-width: 0.5rem 0.5rem 0;\n    border-top-color: #0d0d0d; }\n\n.bs-popover-end > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow {\n  left: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem; }\n  .bs-popover-end > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::before {\n    left: 0;\n    border-width: 0.5rem 0.5rem 0.5rem 0;\n    border-right-color: #2c2e33; }\n  .bs-popover-end > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"right\"] > .popover-arrow::after {\n    left: 1px;\n    border-width: 0.5rem 0.5rem 0.5rem 0;\n    border-right-color: #0d0d0d; }\n\n.bs-popover-bottom > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow {\n  top: calc(-0.5rem - 1px); }\n  .bs-popover-bottom > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::before {\n    top: 0;\n    border-width: 0 0.5rem 0.5rem 0.5rem;\n    border-bottom-color: #2c2e33; }\n  .bs-popover-bottom > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"bottom\"] > .popover-arrow::after {\n    top: 1px;\n    border-width: 0 0.5rem 0.5rem 0.5rem;\n    border-bottom-color: #0d0d0d; }\n\n.bs-popover-bottom .popover-header::before, .bs-popover-auto[data-popper-placement^=\"bottom\"] .popover-header::before {\n  position: absolute;\n  top: 0;\n  left: 50%;\n  display: block;\n  width: 1rem;\n  margin-left: -0.5rem;\n  content: \"\";\n  border-bottom: 1px solid #0d0d0d; }\n\n.bs-popover-start > .popover-arrow, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow {\n  right: calc(-0.5rem - 1px);\n  width: 0.5rem;\n  height: 1rem; }\n  .bs-popover-start > .popover-arrow::before, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::before {\n    right: 0;\n    border-width: 0.5rem 0 0.5rem 0.5rem;\n    border-left-color: #2c2e33; }\n  .bs-popover-start > .popover-arrow::after, .bs-popover-auto[data-popper-placement^=\"left\"] > .popover-arrow::after {\n    right: 1px;\n    border-width: 0.5rem 0 0.5rem 0.5rem;\n    border-left-color: #0d0d0d; }\n\n.popover-header {\n  padding: 0.5rem 1rem;\n  margin-bottom: 0;\n  font-size: 1rem;\n  background-color: #0d0d0d;\n  border-bottom: 1px solid #2c2e33;\n  border-top-left-radius: calc(0.3rem - 1px);\n  border-top-right-radius: calc(0.3rem - 1px); }\n  .popover-header:empty {\n    display: none; }\n\n.popover-body {\n  padding: 1rem 1rem;\n  color: #212529; }\n\n.carousel {\n  position: relative; }\n\n.carousel.pointer-event {\n  touch-action: pan-y; }\n\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden; }\n  .carousel-inner::after {\n    display: block;\n    clear: both;\n    content: \"\"; }\n\n.carousel-item {\n  position: relative;\n  display: none;\n  float: left;\n  width: 100%;\n  margin-right: -100%;\n  backface-visibility: hidden;\n  transition: transform 0.6s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .carousel-item {\n      transition: none; } }\n\n.carousel-item.active,\n.carousel-item-next,\n.carousel-item-prev {\n  display: block; }\n\n/* rtl:begin:ignore */\n.carousel-item-next:not(.carousel-item-start),\n.active.carousel-item-end {\n  transform: translateX(100%); }\n\n.carousel-item-prev:not(.carousel-item-end),\n.active.carousel-item-start {\n  transform: translateX(-100%); }\n\n/* rtl:end:ignore */\n.carousel-fade .carousel-item {\n  opacity: 0;\n  transition-property: opacity;\n  transform: none; }\n\n.carousel-fade .carousel-item.active,\n.carousel-fade .carousel-item-next.carousel-item-start,\n.carousel-fade .carousel-item-prev.carousel-item-end {\n  z-index: 1;\n  opacity: 1; }\n\n.carousel-fade .active.carousel-item-start,\n.carousel-fade .active.carousel-item-end {\n  z-index: 0;\n  opacity: 0;\n  transition: opacity 0s 0.6s; }\n  @media (prefers-reduced-motion: reduce) {\n    .carousel-fade .active.carousel-item-start,\n    .carousel-fade .active.carousel-item-end {\n      transition: none; } }\n\n.carousel-control-prev,\n.carousel-control-next {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  z-index: 1;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  width: 15%;\n  padding: 0;\n  color: #fff;\n  text-align: center;\n  background: none;\n  border: 0;\n  opacity: 0.5;\n  transition: opacity 0.15s ease; }\n  @media (prefers-reduced-motion: reduce) {\n    .carousel-control-prev,\n    .carousel-control-next {\n      transition: none; } }\n  .carousel-control-prev:hover, .carousel-control-prev:focus,\n  .carousel-control-next:hover,\n  .carousel-control-next:focus {\n    color: #fff;\n    text-decoration: none;\n    outline: 0;\n    opacity: 0.9; }\n\n.carousel-control-prev {\n  left: 0; }\n\n.carousel-control-next {\n  right: 0; }\n\n.carousel-control-prev-icon,\n.carousel-control-next-icon {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  background-repeat: no-repeat;\n  background-position: 50%;\n  background-size: 100% 100%; }\n\n/* rtl:options: {\n  \"autoRename\": true,\n  \"stringMap\":[ {\n    \"name\"    : \"prev-next\",\n    \"search\"  : \"prev\",\n    \"replace\" : \"next\"\n  } ]\n} */\n.carousel-control-prev-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e\"); }\n\n.carousel-control-next-icon {\n  background-image: url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e\"); }\n\n.carousel-indicators {\n  position: absolute;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 2;\n  display: flex;\n  justify-content: center;\n  padding: 0;\n  margin-right: 15%;\n  margin-bottom: 1rem;\n  margin-left: 15%;\n  list-style: none; }\n  .carousel-indicators [data-bs-target] {\n    box-sizing: content-box;\n    flex: 0 1 auto;\n    width: 30px;\n    height: 3px;\n    padding: 0;\n    margin-right: 3px;\n    margin-left: 3px;\n    text-indent: -999px;\n    cursor: pointer;\n    background-color: #fff;\n    background-clip: padding-box;\n    border: 0;\n    border-top: 10px solid transparent;\n    border-bottom: 10px solid transparent;\n    opacity: 0.5;\n    transition: opacity 0.6s ease; }\n    @media (prefers-reduced-motion: reduce) {\n      .carousel-indicators [data-bs-target] {\n        transition: none; } }\n  .carousel-indicators .active {\n    opacity: 1; }\n\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 1.25rem;\n  left: 15%;\n  padding-top: 1.25rem;\n  padding-bottom: 1.25rem;\n  color: #fff;\n  text-align: center; }\n\n.carousel-dark .carousel-control-prev-icon,\n.carousel-dark .carousel-control-next-icon {\n  filter: invert(1) grayscale(100); }\n\n.carousel-dark .carousel-indicators [data-bs-target] {\n  background-color: #000; }\n\n.carousel-dark .carousel-caption {\n  color: #000; }\n\n@keyframes spinner-border {\n  to {\n    transform: rotate(360deg) /* rtl:ignore */; } }\n\n.spinner-border {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  border: 0.25em solid currentColor;\n  border-right-color: transparent;\n  border-radius: 50%;\n  animation: 0.75s linear infinite spinner-border; }\n\n.spinner-border-sm {\n  width: 1rem;\n  height: 1rem;\n  border-width: 0.2em; }\n\n@keyframes spinner-grow {\n  0% {\n    transform: scale(0); }\n  50% {\n    opacity: 1;\n    transform: none; } }\n\n.spinner-grow {\n  display: inline-block;\n  width: 2rem;\n  height: 2rem;\n  vertical-align: -0.125em;\n  background-color: currentColor;\n  border-radius: 50%;\n  opacity: 0;\n  animation: 0.75s linear infinite spinner-grow; }\n\n.spinner-grow-sm {\n  width: 1rem;\n  height: 1rem; }\n\n@media (prefers-reduced-motion: reduce) {\n  .spinner-border,\n  .spinner-grow {\n    animation-duration: 1.5s; } }\n\n.offcanvas {\n  position: fixed;\n  bottom: 0;\n  z-index: 1045;\n  display: flex;\n  flex-direction: column;\n  max-width: 100%;\n  visibility: hidden;\n  background-color: #fff;\n  background-clip: padding-box;\n  outline: 0;\n  transition: transform 0.3s ease-in-out; }\n  @media (prefers-reduced-motion: reduce) {\n    .offcanvas {\n      transition: none; } }\n\n.offcanvas-backdrop {\n  position: fixed;\n  top: 0;\n  left: 0;\n  z-index: 1040;\n  width: 100vw;\n  height: 100vh;\n  background-color: #000; }\n  .offcanvas-backdrop.fade {\n    opacity: 0; }\n  .offcanvas-backdrop.show {\n    opacity: 0.5; }\n\n.offcanvas-header {\n  display: flex;\n  align-items: center;\n  justify-content: space-between;\n  padding: 1rem 1rem; }\n  .offcanvas-header .btn-close {\n    padding: 0.5rem 0.5rem;\n    margin-top: -0.5rem;\n    margin-right: -0.5rem;\n    margin-bottom: -0.5rem; }\n\n.offcanvas-title {\n  margin-bottom: 0;\n  line-height: 1.5; }\n\n.offcanvas-body {\n  flex-grow: 1;\n  padding: 1rem 1rem;\n  overflow-y: auto; }\n\n.offcanvas-start {\n  top: 0;\n  left: 0;\n  width: 400px;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateX(-100%); }\n\n.offcanvas-end {\n  top: 0;\n  right: 0;\n  width: 400px;\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateX(100%); }\n\n.offcanvas-top {\n  top: 0;\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateY(-100%); }\n\n.offcanvas-bottom {\n  right: 0;\n  left: 0;\n  height: 30vh;\n  max-height: 100%;\n  border-top: 1px solid rgba(0, 0, 0, 0.2);\n  transform: translateY(100%); }\n\n.offcanvas.show {\n  transform: none; }\n\n.placeholder {\n  display: inline-block;\n  min-height: 1em;\n  vertical-align: middle;\n  cursor: wait;\n  background-color: currentColor;\n  opacity: 0.5; }\n  .placeholder.btn::before, .fc button.placeholder::before, .ajax-upload-dragdrop .placeholder.ajax-file-upload::before, .swal2-modal .swal2-buttonswrapper .placeholder.swal2-styled::before {\n    display: inline-block;\n    content: \"\"; }\n\n.placeholder-xs {\n  min-height: .6em; }\n\n.placeholder-sm {\n  min-height: .8em; }\n\n.placeholder-lg {\n  min-height: 1.2em; }\n\n.placeholder-glow .placeholder {\n  animation: placeholder-glow 2s ease-in-out infinite; }\n\n@keyframes placeholder-glow {\n  50% {\n    opacity: 0.2; } }\n\n.placeholder-wave {\n  mask-image: linear-gradient(130deg, #000000 55%, rgba(0, 0, 0, 0.8) 75%, #000000 95%);\n  mask-size: 200% 100%;\n  animation: placeholder-wave 2s linear infinite; }\n\n@keyframes placeholder-wave {\n  100% {\n    mask-position: -200% 0%; } }\n\n.clearfix::after {\n  display: block;\n  clear: both;\n  content: \"\"; }\n\n.link-primary {\n  color: #0090e7; }\n  .link-primary:hover, .link-primary:focus {\n    color: #33a6ec; }\n\n.link-secondary {\n  color: #e4eaec; }\n  .link-secondary:hover, .link-secondary:focus {\n    color: #e9eef0; }\n\n.link-success {\n  color: #00d25b; }\n  .link-success:hover, .link-success:focus {\n    color: #33db7c; }\n\n.link-info {\n  color: #8f5fe8; }\n  .link-info:hover, .link-info:focus {\n    color: #a57fed; }\n\n.link-warning {\n  color: #ffab00; }\n  .link-warning:hover, .link-warning:focus {\n    color: #ffbc33; }\n\n.link-danger {\n  color: #fc424a; }\n  .link-danger:hover, .link-danger:focus {\n    color: #fd686e; }\n\n.link-light {\n  color: #ffffff; }\n  .link-light:hover, .link-light:focus {\n    color: white; }\n\n.link-dark {\n  color: #0d0d0d; }\n  .link-dark:hover, .link-dark:focus {\n    color: #0a0a0a; }\n\n.ratio {\n  position: relative;\n  width: 100%; }\n  .ratio::before {\n    display: block;\n    padding-top: var(--bs-aspect-ratio);\n    content: \"\"; }\n  .ratio > * {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%; }\n\n.ratio-1x1 {\n  --bs-aspect-ratio: 100%; }\n\n.ratio-4x3 {\n  --bs-aspect-ratio: calc(3 / 4 * 100%); }\n\n.ratio-16x9 {\n  --bs-aspect-ratio: calc(9 / 16 * 100%); }\n\n.ratio-21x9 {\n  --bs-aspect-ratio: calc(9 / 21 * 100%); }\n\n.fixed-top {\n  position: fixed;\n  top: 0;\n  right: 0;\n  left: 0;\n  z-index: 1030; }\n\n.fixed-bottom {\n  position: fixed;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1030; }\n\n.sticky-top {\n  position: sticky;\n  top: 0;\n  z-index: 1020; }\n\n@media (min-width: 576px) {\n  .sticky-sm-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020; } }\n\n@media (min-width: 768px) {\n  .sticky-md-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020; } }\n\n@media (min-width: 992px) {\n  .sticky-lg-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020; } }\n\n@media (min-width: 1200px) {\n  .sticky-xl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020; } }\n\n@media (min-width: 1400px) {\n  .sticky-xxl-top {\n    position: sticky;\n    top: 0;\n    z-index: 1020; } }\n\n.hstack {\n  display: flex;\n  flex-direction: row;\n  align-items: center;\n  align-self: stretch; }\n\n.vstack {\n  display: flex;\n  flex: 1 1 auto;\n  flex-direction: column;\n  align-self: stretch; }\n\n.visually-hidden,\n.visually-hidden-focusable:not(:focus):not(:focus-within) {\n  position: absolute !important;\n  width: 1px !important;\n  height: 1px !important;\n  padding: 0 !important;\n  margin: -1px !important;\n  overflow: hidden !important;\n  clip: rect(0, 0, 0, 0) !important;\n  white-space: nowrap !important;\n  border: 0 !important; }\n\n.stretched-link::after {\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1;\n  content: \"\"; }\n\n.text-truncate {\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap; }\n\n.vr {\n  display: inline-block;\n  align-self: stretch;\n  width: 1px;\n  min-height: 1em;\n  background-color: currentColor;\n  opacity: 0.25; }\n\n.align-baseline {\n  vertical-align: baseline !important; }\n\n.align-top {\n  vertical-align: top !important; }\n\n.align-middle {\n  vertical-align: middle !important; }\n\n.align-bottom {\n  vertical-align: bottom !important; }\n\n.align-text-bottom {\n  vertical-align: text-bottom !important; }\n\n.align-text-top {\n  vertical-align: text-top !important; }\n\n.float-start {\n  float: left !important; }\n\n.float-end {\n  float: right !important; }\n\n.float-none {\n  float: none !important; }\n\n.opacity-0 {\n  opacity: 0 !important; }\n\n.opacity-25 {\n  opacity: 0.25 !important; }\n\n.opacity-50 {\n  opacity: 0.5 !important; }\n\n.opacity-75 {\n  opacity: 0.75 !important; }\n\n.opacity-100 {\n  opacity: 1 !important; }\n\n.overflow-auto {\n  overflow: auto !important; }\n\n.overflow-hidden {\n  overflow: hidden !important; }\n\n.overflow-visible {\n  overflow: visible !important; }\n\n.overflow-scroll {\n  overflow: scroll !important; }\n\n.d-inline {\n  display: inline !important; }\n\n.d-inline-block {\n  display: inline-block !important; }\n\n.d-block {\n  display: block !important; }\n\n.d-grid {\n  display: grid !important; }\n\n.d-table {\n  display: table !important; }\n\n.d-table-row {\n  display: table-row !important; }\n\n.d-table-cell {\n  display: table-cell !important; }\n\n.d-flex, .page-header, .loader-demo-box, .list-wrapper ul li, .lightGallery .image-tile .demo-gallery-poster, .swal2-modal, .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item, .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link {\n  display: flex !important; }\n\n.d-inline-flex {\n  display: inline-flex !important; }\n\n.d-none {\n  display: none !important; }\n\n.shadow {\n  box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.15) !important; }\n\n.shadow-sm {\n  box-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075) !important; }\n\n.shadow-lg {\n  box-shadow: 0 1rem 3rem rgba(0, 0, 0, 0.175) !important; }\n\n.shadow-none {\n  box-shadow: none !important; }\n\n.position-static {\n  position: static !important; }\n\n.position-relative {\n  position: relative !important; }\n\n.position-absolute {\n  position: absolute !important; }\n\n.position-fixed {\n  position: fixed !important; }\n\n.position-sticky {\n  position: sticky !important; }\n\n.top-0 {\n  top: 0 !important; }\n\n.top-50 {\n  top: 50% !important; }\n\n.top-100 {\n  top: 100% !important; }\n\n.bottom-0 {\n  bottom: 0 !important; }\n\n.bottom-50 {\n  bottom: 50% !important; }\n\n.bottom-100 {\n  bottom: 100% !important; }\n\n.start-0 {\n  left: 0 !important; }\n\n.start-50 {\n  left: 50% !important; }\n\n.start-100 {\n  left: 100% !important; }\n\n.end-0 {\n  right: 0 !important; }\n\n.end-50 {\n  right: 50% !important; }\n\n.end-100 {\n  right: 100% !important; }\n\n.translate-middle {\n  transform: translate(-50%, -50%) !important; }\n\n.translate-middle-x {\n  transform: translateX(-50%) !important; }\n\n.translate-middle-y {\n  transform: translateY(-50%) !important; }\n\n.border, .loader-demo-box {\n  border: 1px solid #2c2e33 !important; }\n\n.border-0 {\n  border: 0 !important; }\n\n.border-top {\n  border-top: 1px solid #2c2e33 !important; }\n\n.border-top-0 {\n  border-top: 0 !important; }\n\n.border-end {\n  border-right: 1px solid #2c2e33 !important; }\n\n.border-end-0 {\n  border-right: 0 !important; }\n\n.border-bottom {\n  border-bottom: 1px solid #2c2e33 !important; }\n\n.border-bottom-0 {\n  border-bottom: 0 !important; }\n\n.border-start {\n  border-left: 1px solid #2c2e33 !important; }\n\n.border-start-0 {\n  border-left: 0 !important; }\n\n.border-primary {\n  border-color: #0090e7 !important; }\n\n.border-secondary, .loader-demo-box {\n  border-color: #e4eaec !important; }\n\n.border-success, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm {\n  border-color: #00d25b !important; }\n\n.border-info {\n  border-color: #8f5fe8 !important; }\n\n.border-warning {\n  border-color: #ffab00 !important; }\n\n.border-danger {\n  border-color: #fc424a !important; }\n\n.border-light {\n  border-color: #ffffff !important; }\n\n.border-dark {\n  border-color: #0d0d0d !important; }\n\n.border-white {\n  border-color: #ffffff !important; }\n\n.border-1 {\n  border-width: 1px !important; }\n\n.border-2 {\n  border-width: 2px !important; }\n\n.border-3 {\n  border-width: 3px !important; }\n\n.border-4 {\n  border-width: 4px !important; }\n\n.border-5 {\n  border-width: 5px !important; }\n\n.w-25 {\n  width: 25% !important; }\n\n.w-50 {\n  width: 50% !important; }\n\n.w-75 {\n  width: 75% !important; }\n\n.w-100 {\n  width: 100% !important; }\n\n.w-auto {\n  width: auto !important; }\n\n.mw-100 {\n  max-width: 100% !important; }\n\n.vw-100 {\n  width: 100vw !important; }\n\n.min-vw-100 {\n  min-width: 100vw !important; }\n\n.h-25 {\n  height: 25% !important; }\n\n.h-50 {\n  height: 50% !important; }\n\n.h-75 {\n  height: 75% !important; }\n\n.h-100 {\n  height: 100% !important; }\n\n.h-auto {\n  height: auto !important; }\n\n.mh-100 {\n  max-height: 100% !important; }\n\n.vh-100 {\n  height: 100vh !important; }\n\n.min-vh-100 {\n  min-height: 100vh !important; }\n\n.flex-fill {\n  flex: 1 1 auto !important; }\n\n.flex-row {\n  flex-direction: row !important; }\n\n.flex-column, .nav-tabs.nav-tabs-vertical, .nav-tabs.nav-tabs-vertical-custom, .nav-pills.nav-pills-vertical {\n  flex-direction: column !important; }\n\n.flex-row-reverse {\n  flex-direction: row-reverse !important; }\n\n.flex-column-reverse {\n  flex-direction: column-reverse !important; }\n\n.flex-grow-0 {\n  flex-grow: 0 !important; }\n\n.flex-grow-1 {\n  flex-grow: 1 !important; }\n\n.flex-shrink-0 {\n  flex-shrink: 0 !important; }\n\n.flex-shrink-1 {\n  flex-shrink: 1 !important; }\n\n.flex-wrap {\n  flex-wrap: wrap !important; }\n\n.flex-nowrap {\n  flex-wrap: nowrap !important; }\n\n.flex-wrap-reverse {\n  flex-wrap: wrap-reverse !important; }\n\n.gap-0 {\n  gap: 0 !important; }\n\n.gap-1 {\n  gap: 0.25rem !important; }\n\n.gap-2 {\n  gap: 0.5rem !important; }\n\n.gap-3 {\n  gap: 1rem !important; }\n\n.gap-4 {\n  gap: 1.5rem !important; }\n\n.gap-5 {\n  gap: 3rem !important; }\n\n.justify-content-start, .list-wrapper ul li {\n  justify-content: flex-start !important; }\n\n.justify-content-end {\n  justify-content: flex-end !important; }\n\n.justify-content-center {\n  justify-content: center !important; }\n\n.justify-content-between, .page-header {\n  justify-content: space-between !important; }\n\n.justify-content-around {\n  justify-content: space-around !important; }\n\n.justify-content-evenly {\n  justify-content: space-evenly !important; }\n\n.align-items-start {\n  align-items: flex-start !important; }\n\n.align-items-end {\n  align-items: flex-end !important; }\n\n.align-items-center, .page-header, .loader-demo-box, .list-wrapper ul li, .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item {\n  align-items: center !important; }\n\n.align-items-baseline {\n  align-items: baseline !important; }\n\n.align-items-stretch {\n  align-items: stretch !important; }\n\n.align-content-start {\n  align-content: flex-start !important; }\n\n.align-content-end {\n  align-content: flex-end !important; }\n\n.align-content-center {\n  align-content: center !important; }\n\n.align-content-between {\n  align-content: space-between !important; }\n\n.align-content-around {\n  align-content: space-around !important; }\n\n.align-content-stretch {\n  align-content: stretch !important; }\n\n.align-self-auto {\n  align-self: auto !important; }\n\n.align-self-start {\n  align-self: flex-start !important; }\n\n.align-self-end {\n  align-self: flex-end !important; }\n\n.align-self-center {\n  align-self: center !important; }\n\n.align-self-baseline {\n  align-self: baseline !important; }\n\n.align-self-stretch {\n  align-self: stretch !important; }\n\n.order-first {\n  order: -1 !important; }\n\n.order-0 {\n  order: 0 !important; }\n\n.order-1 {\n  order: 1 !important; }\n\n.order-2 {\n  order: 2 !important; }\n\n.order-3 {\n  order: 3 !important; }\n\n.order-4 {\n  order: 4 !important; }\n\n.order-5 {\n  order: 5 !important; }\n\n.order-last {\n  order: 6 !important; }\n\n.m-0 {\n  margin: 0 !important; }\n\n.m-1 {\n  margin: 0.25rem !important; }\n\n.m-2 {\n  margin: 0.5rem !important; }\n\n.m-3 {\n  margin: 1rem !important; }\n\n.m-4 {\n  margin: 1.5rem !important; }\n\n.m-5 {\n  margin: 3rem !important; }\n\n.m-auto {\n  margin: auto !important; }\n\n.mx-0 {\n  margin-right: 0 !important;\n  margin-left: 0 !important; }\n\n.mx-1 {\n  margin-right: 0.25rem !important;\n  margin-left: 0.25rem !important; }\n\n.mx-2 {\n  margin-right: 0.5rem !important;\n  margin-left: 0.5rem !important; }\n\n.mx-3 {\n  margin-right: 1rem !important;\n  margin-left: 1rem !important; }\n\n.mx-4 {\n  margin-right: 1.5rem !important;\n  margin-left: 1.5rem !important; }\n\n.mx-5 {\n  margin-right: 3rem !important;\n  margin-left: 3rem !important; }\n\n.mx-auto {\n  margin-right: auto !important;\n  margin-left: auto !important; }\n\n.my-0 {\n  margin-top: 0 !important;\n  margin-bottom: 0 !important; }\n\n.my-1 {\n  margin-top: 0.25rem !important;\n  margin-bottom: 0.25rem !important; }\n\n.my-2 {\n  margin-top: 0.5rem !important;\n  margin-bottom: 0.5rem !important; }\n\n.my-3 {\n  margin-top: 1rem !important;\n  margin-bottom: 1rem !important; }\n\n.my-4 {\n  margin-top: 1.5rem !important;\n  margin-bottom: 1.5rem !important; }\n\n.my-5 {\n  margin-top: 3rem !important;\n  margin-bottom: 3rem !important; }\n\n.my-auto {\n  margin-top: auto !important;\n  margin-bottom: auto !important; }\n\n.mt-0, .demo-modal .modal-dialog {\n  margin-top: 0 !important; }\n\n.mt-1, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-submit, .editable-container.editable-inline .editableform .control-group .editable-buttons .editable-cancel {\n  margin-top: 0.25rem !important; }\n\n.mt-2, .template-demo > .btn-group, .fc .template-demo > .fc-button-group,\n.template-demo > .btn-group-vertical, .template-demo .circle-progress {\n  margin-top: 0.5rem !important; }\n\n.mt-3, .template-demo > .btn, .fc .template-demo > button, .ajax-upload-dragdrop .template-demo > .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .template-demo > .swal2-styled, .template-demo > .btn-toolbar {\n  margin-top: 1rem !important; }\n\n.mt-4 {\n  margin-top: 1.5rem !important; }\n\n.mt-5 {\n  margin-top: 3rem !important; }\n\n.mt-auto {\n  margin-top: auto !important; }\n\n.me-0, .rtl .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item i {\n  margin-right: 0 !important; }\n\n.me-1 {\n  margin-right: 0.25rem !important; }\n\n.me-2, .template-demo > .btn-group, .fc .template-demo > .fc-button-group,\n.template-demo > .btn-group-vertical, .template-demo > .dropdown {\n  margin-right: 0.5rem !important; }\n\n.me-3, .template-demo > .btn, .fc .template-demo > button, .ajax-upload-dragdrop .template-demo > .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .template-demo > .swal2-styled, .template-demo > .btn-toolbar {\n  margin-right: 1rem !important; }\n\n.me-4, .rtl .navbar .navbar-menu-wrapper .search-field {\n  margin-right: 1.5rem !important; }\n\n.me-5 {\n  margin-right: 3rem !important; }\n\n.me-auto, .rtl .list-wrapper .remove {\n  margin-right: auto !important; }\n\n.mb-0 {\n  margin-bottom: 0 !important; }\n\n.mb-1 {\n  margin-bottom: 0.25rem !important; }\n\n.mb-2 {\n  margin-bottom: 0.5rem !important; }\n\n.mb-3, .template-demo .circle-progress-block {\n  margin-bottom: 1rem !important; }\n\n.mb-4 {\n  margin-bottom: 1.5rem !important; }\n\n.mb-5 {\n  margin-bottom: 3rem !important; }\n\n.mb-auto {\n  margin-bottom: auto !important; }\n\n.ms-0, .rtl .preview-list .preview-item .preview-thumbnail img i, .rtl .preview-list .preview-item .preview-thumbnail .preview-icon i, .rtl .list-wrapper .remove, .rtl .navbar .navbar-menu-wrapper .search-field {\n  margin-left: 0 !important; }\n\n.ms-1 {\n  margin-left: 0.25rem !important; }\n\n.ms-2, .btn-toolbar .btn-group + .btn-group, .btn-toolbar .fc .fc-button-group + .btn-group, .fc .btn-toolbar .fc-button-group + .btn-group, .btn-toolbar .fc .btn-group + .fc-button-group, .fc .btn-toolbar .btn-group + .fc-button-group, .btn-toolbar .fc .fc-button-group + .fc-button-group, .fc .btn-toolbar .fc-button-group + .fc-button-group {\n  margin-left: 0.5rem !important; }\n\n.ms-3 {\n  margin-left: 1rem !important; }\n\n.ms-4 {\n  margin-left: 1.5rem !important; }\n\n.ms-5 {\n  margin-left: 3rem !important; }\n\n.ms-auto, .list-wrapper .remove {\n  margin-left: auto !important; }\n\n.p-0 {\n  padding: 0 !important; }\n\n.p-1 {\n  padding: 0.25rem !important; }\n\n.p-2 {\n  padding: 0.5rem !important; }\n\n.p-3 {\n  padding: 1rem !important; }\n\n.p-4 {\n  padding: 1.5rem !important; }\n\n.p-5 {\n  padding: 3rem !important; }\n\n.px-0 {\n  padding-right: 0 !important;\n  padding-left: 0 !important; }\n\n.px-1 {\n  padding-right: 0.25rem !important;\n  padding-left: 0.25rem !important; }\n\n.px-2, .template-demo .circle-progress-block {\n  padding-right: 0.5rem !important;\n  padding-left: 0.5rem !important; }\n\n.px-3 {\n  padding-right: 1rem !important;\n  padding-left: 1rem !important; }\n\n.px-4 {\n  padding-right: 1.5rem !important;\n  padding-left: 1.5rem !important; }\n\n.px-5 {\n  padding-right: 3rem !important;\n  padding-left: 3rem !important; }\n\n.py-0 {\n  padding-top: 0 !important;\n  padding-bottom: 0 !important; }\n\n.py-1 {\n  padding-top: 0.25rem !important;\n  padding-bottom: 0.25rem !important; }\n\n.py-2 {\n  padding-top: 0.5rem !important;\n  padding-bottom: 0.5rem !important; }\n\n.py-3 {\n  padding-top: 1rem !important;\n  padding-bottom: 1rem !important; }\n\n.py-4 {\n  padding-top: 1.5rem !important;\n  padding-bottom: 1.5rem !important; }\n\n.py-5 {\n  padding-top: 3rem !important;\n  padding-bottom: 3rem !important; }\n\n.pt-0 {\n  padding-top: 0 !important; }\n\n.pt-1 {\n  padding-top: 0.25rem !important; }\n\n.pt-2 {\n  padding-top: 0.5rem !important; }\n\n.pt-3 {\n  padding-top: 1rem !important; }\n\n.pt-4 {\n  padding-top: 1.5rem !important; }\n\n.pt-5 {\n  padding-top: 3rem !important; }\n\n.pe-0 {\n  padding-right: 0 !important; }\n\n.pe-1 {\n  padding-right: 0.25rem !important; }\n\n.pe-2 {\n  padding-right: 0.5rem !important; }\n\n.pe-3 {\n  padding-right: 1rem !important; }\n\n.pe-4 {\n  padding-right: 1.5rem !important; }\n\n.pe-5 {\n  padding-right: 3rem !important; }\n\n.pb-0 {\n  padding-bottom: 0 !important; }\n\n.pb-1 {\n  padding-bottom: 0.25rem !important; }\n\n.pb-2 {\n  padding-bottom: 0.5rem !important; }\n\n.pb-3 {\n  padding-bottom: 1rem !important; }\n\n.pb-4 {\n  padding-bottom: 1.5rem !important; }\n\n.pb-5 {\n  padding-bottom: 3rem !important; }\n\n.ps-0 {\n  padding-left: 0 !important; }\n\n.ps-1 {\n  padding-left: 0.25rem !important; }\n\n.ps-2 {\n  padding-left: 0.5rem !important; }\n\n.ps-3 {\n  padding-left: 1rem !important; }\n\n.ps-4 {\n  padding-left: 1.5rem !important; }\n\n.ps-5 {\n  padding-left: 3rem !important; }\n\n.font-monospace {\n  font-family: var(--bs-font-monospace) !important; }\n\n.fs-1 {\n  font-size: calc(1.375rem + 1.5vw) !important; }\n\n.fs-2 {\n  font-size: calc(1.325rem + 0.9vw) !important; }\n\n.fs-3 {\n  font-size: calc(1.3rem + 0.6vw) !important; }\n\n.fs-4 {\n  font-size: calc(1.275rem + 0.3vw) !important; }\n\n.fs-5 {\n  font-size: 1.25rem !important; }\n\n.fs-6 {\n  font-size: 1rem !important; }\n\n.fst-italic {\n  font-style: italic !important; }\n\n.fst-normal {\n  font-style: normal !important; }\n\n.fw-light {\n  font-weight: 300 !important; }\n\n.fw-lighter {\n  font-weight: lighter !important; }\n\n.fw-normal {\n  font-weight: 400 !important; }\n\n.fw-bold {\n  font-weight: 700 !important; }\n\n.fw-bolder {\n  font-weight: bolder !important; }\n\n.lh-1 {\n  line-height: 1 !important; }\n\n.lh-sm {\n  line-height: 1.25 !important; }\n\n.lh-base {\n  line-height: 1.5 !important; }\n\n.lh-lg {\n  line-height: 2 !important; }\n\n.text-start {\n  text-align: left !important; }\n\n.text-end {\n  text-align: right !important; }\n\n.text-center {\n  text-align: center !important; }\n\n.text-decoration-none {\n  text-decoration: none !important; }\n\n.text-decoration-underline {\n  text-decoration: underline !important; }\n\n.text-decoration-line-through {\n  text-decoration: line-through !important; }\n\n.text-lowercase {\n  text-transform: lowercase !important; }\n\n.text-uppercase {\n  text-transform: uppercase !important; }\n\n.text-capitalize {\n  text-transform: capitalize !important; }\n\n.text-wrap {\n  white-space: normal !important; }\n\n.text-nowrap {\n  white-space: nowrap !important; }\n\n/* rtl:begin:remove */\n.text-break {\n  word-wrap: break-word !important;\n  word-break: break-word !important; }\n\n/* rtl:end:remove */\n.text-primary, .list-wrapper .completed .remove {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important; }\n\n.text-secondary, .list-wrapper .remove {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important; }\n\n.text-success {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important; }\n\n.text-info {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important; }\n\n.text-warning {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important; }\n\n.text-danger {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important; }\n\n.text-light {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important; }\n\n.text-dark {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important; }\n\n.text-black {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important; }\n\n.text-white {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important; }\n\n.text-body {\n  --bs-text-opacity: 1;\n  color: rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important; }\n\n.text-muted, .preview-list .preview-item .preview-item-content p .content-category {\n  --bs-text-opacity: 1;\n  color: #6c7293 !important; }\n\n.text-black-50 {\n  --bs-text-opacity: 1;\n  color: rgba(0, 0, 0, 0.5) !important; }\n\n.text-white-50 {\n  --bs-text-opacity: 1;\n  color: rgba(255, 255, 255, 0.5) !important; }\n\n.text-reset {\n  --bs-text-opacity: 1;\n  color: inherit !important; }\n\n.text-opacity-25 {\n  --bs-text-opacity: 0.25; }\n\n.text-opacity-50 {\n  --bs-text-opacity: 0.5; }\n\n.text-opacity-75 {\n  --bs-text-opacity: 0.75; }\n\n.text-opacity-100 {\n  --bs-text-opacity: 1; }\n\n.bg-primary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-secondary {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-success, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-info {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-warning {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-danger {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-light {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-dark {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-black {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-white {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-body {\n  --bs-bg-opacity: 1;\n  background-color: rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important; }\n\n.bg-transparent {\n  --bs-bg-opacity: 1;\n  background-color: transparent !important; }\n\n.bg-opacity-10 {\n  --bs-bg-opacity: 0.1; }\n\n.bg-opacity-25 {\n  --bs-bg-opacity: 0.25; }\n\n.bg-opacity-50 {\n  --bs-bg-opacity: 0.5; }\n\n.bg-opacity-75 {\n  --bs-bg-opacity: 0.75; }\n\n.bg-opacity-100 {\n  --bs-bg-opacity: 1; }\n\n.bg-gradient {\n  background-image: var(--bs-gradient) !important; }\n\n.user-select-all {\n  user-select: all !important; }\n\n.user-select-auto {\n  user-select: auto !important; }\n\n.user-select-none {\n  user-select: none !important; }\n\n.pe-none {\n  pointer-events: none !important; }\n\n.pe-auto {\n  pointer-events: auto !important; }\n\n.rounded, .loader-demo-box {\n  border-radius: 0.25rem !important; }\n\n.rounded-0 {\n  border-radius: 0 !important; }\n\n.rounded-1 {\n  border-radius: 0.2rem !important; }\n\n.rounded-2 {\n  border-radius: 0.25rem !important; }\n\n.rounded-3 {\n  border-radius: 0.3rem !important; }\n\n.rounded-circle {\n  border-radius: 50% !important; }\n\n.rounded-pill {\n  border-radius: 50rem !important; }\n\n.rounded-top {\n  border-top-left-radius: 0.25rem !important;\n  border-top-right-radius: 0.25rem !important; }\n\n.rounded-end {\n  border-top-right-radius: 0.25rem !important;\n  border-bottom-right-radius: 0.25rem !important; }\n\n.rounded-bottom {\n  border-bottom-right-radius: 0.25rem !important;\n  border-bottom-left-radius: 0.25rem !important; }\n\n.rounded-start {\n  border-bottom-left-radius: 0.25rem !important;\n  border-top-left-radius: 0.25rem !important; }\n\n.visible {\n  visibility: visible !important; }\n\n.invisible {\n  visibility: hidden !important; }\n\n@media (min-width: 576px) {\n  .float-sm-start {\n    float: left !important; }\n  .float-sm-end {\n    float: right !important; }\n  .float-sm-none {\n    float: none !important; }\n  .d-sm-inline {\n    display: inline !important; }\n  .d-sm-inline-block {\n    display: inline-block !important; }\n  .d-sm-block {\n    display: block !important; }\n  .d-sm-grid {\n    display: grid !important; }\n  .d-sm-table {\n    display: table !important; }\n  .d-sm-table-row {\n    display: table-row !important; }\n  .d-sm-table-cell {\n    display: table-cell !important; }\n  .d-sm-flex {\n    display: flex !important; }\n  .d-sm-inline-flex {\n    display: inline-flex !important; }\n  .d-sm-none {\n    display: none !important; }\n  .flex-sm-fill {\n    flex: 1 1 auto !important; }\n  .flex-sm-row {\n    flex-direction: row !important; }\n  .flex-sm-column {\n    flex-direction: column !important; }\n  .flex-sm-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-sm-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-sm-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-sm-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-sm-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-sm-shrink-1 {\n    flex-shrink: 1 !important; }\n  .flex-sm-wrap {\n    flex-wrap: wrap !important; }\n  .flex-sm-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-sm-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .gap-sm-0 {\n    gap: 0 !important; }\n  .gap-sm-1 {\n    gap: 0.25rem !important; }\n  .gap-sm-2 {\n    gap: 0.5rem !important; }\n  .gap-sm-3 {\n    gap: 1rem !important; }\n  .gap-sm-4 {\n    gap: 1.5rem !important; }\n  .gap-sm-5 {\n    gap: 3rem !important; }\n  .justify-content-sm-start {\n    justify-content: flex-start !important; }\n  .justify-content-sm-end {\n    justify-content: flex-end !important; }\n  .justify-content-sm-center {\n    justify-content: center !important; }\n  .justify-content-sm-between {\n    justify-content: space-between !important; }\n  .justify-content-sm-around {\n    justify-content: space-around !important; }\n  .justify-content-sm-evenly {\n    justify-content: space-evenly !important; }\n  .align-items-sm-start {\n    align-items: flex-start !important; }\n  .align-items-sm-end {\n    align-items: flex-end !important; }\n  .align-items-sm-center {\n    align-items: center !important; }\n  .align-items-sm-baseline {\n    align-items: baseline !important; }\n  .align-items-sm-stretch {\n    align-items: stretch !important; }\n  .align-content-sm-start {\n    align-content: flex-start !important; }\n  .align-content-sm-end {\n    align-content: flex-end !important; }\n  .align-content-sm-center {\n    align-content: center !important; }\n  .align-content-sm-between {\n    align-content: space-between !important; }\n  .align-content-sm-around {\n    align-content: space-around !important; }\n  .align-content-sm-stretch {\n    align-content: stretch !important; }\n  .align-self-sm-auto {\n    align-self: auto !important; }\n  .align-self-sm-start {\n    align-self: flex-start !important; }\n  .align-self-sm-end {\n    align-self: flex-end !important; }\n  .align-self-sm-center {\n    align-self: center !important; }\n  .align-self-sm-baseline {\n    align-self: baseline !important; }\n  .align-self-sm-stretch {\n    align-self: stretch !important; }\n  .order-sm-first {\n    order: -1 !important; }\n  .order-sm-0 {\n    order: 0 !important; }\n  .order-sm-1 {\n    order: 1 !important; }\n  .order-sm-2 {\n    order: 2 !important; }\n  .order-sm-3 {\n    order: 3 !important; }\n  .order-sm-4 {\n    order: 4 !important; }\n  .order-sm-5 {\n    order: 5 !important; }\n  .order-sm-last {\n    order: 6 !important; }\n  .m-sm-0 {\n    margin: 0 !important; }\n  .m-sm-1 {\n    margin: 0.25rem !important; }\n  .m-sm-2 {\n    margin: 0.5rem !important; }\n  .m-sm-3 {\n    margin: 1rem !important; }\n  .m-sm-4 {\n    margin: 1.5rem !important; }\n  .m-sm-5 {\n    margin: 3rem !important; }\n  .m-sm-auto {\n    margin: auto !important; }\n  .mx-sm-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important; }\n  .mx-sm-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important; }\n  .mx-sm-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important; }\n  .mx-sm-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important; }\n  .mx-sm-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important; }\n  .mx-sm-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important; }\n  .mx-sm-auto {\n    margin-right: auto !important;\n    margin-left: auto !important; }\n  .my-sm-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; }\n  .my-sm-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important; }\n  .my-sm-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important; }\n  .my-sm-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important; }\n  .my-sm-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important; }\n  .my-sm-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important; }\n  .my-sm-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important; }\n  .mt-sm-0 {\n    margin-top: 0 !important; }\n  .mt-sm-1 {\n    margin-top: 0.25rem !important; }\n  .mt-sm-2 {\n    margin-top: 0.5rem !important; }\n  .mt-sm-3 {\n    margin-top: 1rem !important; }\n  .mt-sm-4 {\n    margin-top: 1.5rem !important; }\n  .mt-sm-5 {\n    margin-top: 3rem !important; }\n  .mt-sm-auto {\n    margin-top: auto !important; }\n  .me-sm-0 {\n    margin-right: 0 !important; }\n  .me-sm-1 {\n    margin-right: 0.25rem !important; }\n  .me-sm-2 {\n    margin-right: 0.5rem !important; }\n  .me-sm-3 {\n    margin-right: 1rem !important; }\n  .me-sm-4 {\n    margin-right: 1.5rem !important; }\n  .me-sm-5 {\n    margin-right: 3rem !important; }\n  .me-sm-auto {\n    margin-right: auto !important; }\n  .mb-sm-0 {\n    margin-bottom: 0 !important; }\n  .mb-sm-1 {\n    margin-bottom: 0.25rem !important; }\n  .mb-sm-2 {\n    margin-bottom: 0.5rem !important; }\n  .mb-sm-3 {\n    margin-bottom: 1rem !important; }\n  .mb-sm-4 {\n    margin-bottom: 1.5rem !important; }\n  .mb-sm-5 {\n    margin-bottom: 3rem !important; }\n  .mb-sm-auto {\n    margin-bottom: auto !important; }\n  .ms-sm-0 {\n    margin-left: 0 !important; }\n  .ms-sm-1 {\n    margin-left: 0.25rem !important; }\n  .ms-sm-2 {\n    margin-left: 0.5rem !important; }\n  .ms-sm-3 {\n    margin-left: 1rem !important; }\n  .ms-sm-4 {\n    margin-left: 1.5rem !important; }\n  .ms-sm-5 {\n    margin-left: 3rem !important; }\n  .ms-sm-auto {\n    margin-left: auto !important; }\n  .p-sm-0 {\n    padding: 0 !important; }\n  .p-sm-1 {\n    padding: 0.25rem !important; }\n  .p-sm-2 {\n    padding: 0.5rem !important; }\n  .p-sm-3 {\n    padding: 1rem !important; }\n  .p-sm-4 {\n    padding: 1.5rem !important; }\n  .p-sm-5 {\n    padding: 3rem !important; }\n  .px-sm-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important; }\n  .px-sm-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important; }\n  .px-sm-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important; }\n  .px-sm-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important; }\n  .px-sm-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important; }\n  .px-sm-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important; }\n  .py-sm-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; }\n  .py-sm-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important; }\n  .py-sm-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important; }\n  .py-sm-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important; }\n  .py-sm-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important; }\n  .py-sm-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important; }\n  .pt-sm-0 {\n    padding-top: 0 !important; }\n  .pt-sm-1 {\n    padding-top: 0.25rem !important; }\n  .pt-sm-2 {\n    padding-top: 0.5rem !important; }\n  .pt-sm-3 {\n    padding-top: 1rem !important; }\n  .pt-sm-4 {\n    padding-top: 1.5rem !important; }\n  .pt-sm-5 {\n    padding-top: 3rem !important; }\n  .pe-sm-0 {\n    padding-right: 0 !important; }\n  .pe-sm-1 {\n    padding-right: 0.25rem !important; }\n  .pe-sm-2 {\n    padding-right: 0.5rem !important; }\n  .pe-sm-3 {\n    padding-right: 1rem !important; }\n  .pe-sm-4 {\n    padding-right: 1.5rem !important; }\n  .pe-sm-5 {\n    padding-right: 3rem !important; }\n  .pb-sm-0 {\n    padding-bottom: 0 !important; }\n  .pb-sm-1 {\n    padding-bottom: 0.25rem !important; }\n  .pb-sm-2 {\n    padding-bottom: 0.5rem !important; }\n  .pb-sm-3 {\n    padding-bottom: 1rem !important; }\n  .pb-sm-4 {\n    padding-bottom: 1.5rem !important; }\n  .pb-sm-5 {\n    padding-bottom: 3rem !important; }\n  .ps-sm-0 {\n    padding-left: 0 !important; }\n  .ps-sm-1 {\n    padding-left: 0.25rem !important; }\n  .ps-sm-2 {\n    padding-left: 0.5rem !important; }\n  .ps-sm-3 {\n    padding-left: 1rem !important; }\n  .ps-sm-4 {\n    padding-left: 1.5rem !important; }\n  .ps-sm-5 {\n    padding-left: 3rem !important; }\n  .text-sm-start {\n    text-align: left !important; }\n  .text-sm-end {\n    text-align: right !important; }\n  .text-sm-center {\n    text-align: center !important; } }\n\n@media (min-width: 768px) {\n  .float-md-start {\n    float: left !important; }\n  .float-md-end {\n    float: right !important; }\n  .float-md-none {\n    float: none !important; }\n  .d-md-inline {\n    display: inline !important; }\n  .d-md-inline-block {\n    display: inline-block !important; }\n  .d-md-block {\n    display: block !important; }\n  .d-md-grid {\n    display: grid !important; }\n  .d-md-table {\n    display: table !important; }\n  .d-md-table-row {\n    display: table-row !important; }\n  .d-md-table-cell {\n    display: table-cell !important; }\n  .d-md-flex {\n    display: flex !important; }\n  .d-md-inline-flex {\n    display: inline-flex !important; }\n  .d-md-none {\n    display: none !important; }\n  .flex-md-fill {\n    flex: 1 1 auto !important; }\n  .flex-md-row {\n    flex-direction: row !important; }\n  .flex-md-column {\n    flex-direction: column !important; }\n  .flex-md-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-md-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-md-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-md-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-md-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-md-shrink-1 {\n    flex-shrink: 1 !important; }\n  .flex-md-wrap {\n    flex-wrap: wrap !important; }\n  .flex-md-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-md-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .gap-md-0 {\n    gap: 0 !important; }\n  .gap-md-1 {\n    gap: 0.25rem !important; }\n  .gap-md-2 {\n    gap: 0.5rem !important; }\n  .gap-md-3 {\n    gap: 1rem !important; }\n  .gap-md-4 {\n    gap: 1.5rem !important; }\n  .gap-md-5 {\n    gap: 3rem !important; }\n  .justify-content-md-start {\n    justify-content: flex-start !important; }\n  .justify-content-md-end {\n    justify-content: flex-end !important; }\n  .justify-content-md-center {\n    justify-content: center !important; }\n  .justify-content-md-between {\n    justify-content: space-between !important; }\n  .justify-content-md-around {\n    justify-content: space-around !important; }\n  .justify-content-md-evenly {\n    justify-content: space-evenly !important; }\n  .align-items-md-start {\n    align-items: flex-start !important; }\n  .align-items-md-end {\n    align-items: flex-end !important; }\n  .align-items-md-center {\n    align-items: center !important; }\n  .align-items-md-baseline {\n    align-items: baseline !important; }\n  .align-items-md-stretch {\n    align-items: stretch !important; }\n  .align-content-md-start {\n    align-content: flex-start !important; }\n  .align-content-md-end {\n    align-content: flex-end !important; }\n  .align-content-md-center {\n    align-content: center !important; }\n  .align-content-md-between {\n    align-content: space-between !important; }\n  .align-content-md-around {\n    align-content: space-around !important; }\n  .align-content-md-stretch {\n    align-content: stretch !important; }\n  .align-self-md-auto {\n    align-self: auto !important; }\n  .align-self-md-start {\n    align-self: flex-start !important; }\n  .align-self-md-end {\n    align-self: flex-end !important; }\n  .align-self-md-center {\n    align-self: center !important; }\n  .align-self-md-baseline {\n    align-self: baseline !important; }\n  .align-self-md-stretch {\n    align-self: stretch !important; }\n  .order-md-first {\n    order: -1 !important; }\n  .order-md-0 {\n    order: 0 !important; }\n  .order-md-1 {\n    order: 1 !important; }\n  .order-md-2 {\n    order: 2 !important; }\n  .order-md-3 {\n    order: 3 !important; }\n  .order-md-4 {\n    order: 4 !important; }\n  .order-md-5 {\n    order: 5 !important; }\n  .order-md-last {\n    order: 6 !important; }\n  .m-md-0 {\n    margin: 0 !important; }\n  .m-md-1 {\n    margin: 0.25rem !important; }\n  .m-md-2 {\n    margin: 0.5rem !important; }\n  .m-md-3 {\n    margin: 1rem !important; }\n  .m-md-4 {\n    margin: 1.5rem !important; }\n  .m-md-5 {\n    margin: 3rem !important; }\n  .m-md-auto {\n    margin: auto !important; }\n  .mx-md-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important; }\n  .mx-md-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important; }\n  .mx-md-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important; }\n  .mx-md-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important; }\n  .mx-md-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important; }\n  .mx-md-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important; }\n  .mx-md-auto {\n    margin-right: auto !important;\n    margin-left: auto !important; }\n  .my-md-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; }\n  .my-md-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important; }\n  .my-md-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important; }\n  .my-md-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important; }\n  .my-md-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important; }\n  .my-md-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important; }\n  .my-md-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important; }\n  .mt-md-0 {\n    margin-top: 0 !important; }\n  .mt-md-1 {\n    margin-top: 0.25rem !important; }\n  .mt-md-2 {\n    margin-top: 0.5rem !important; }\n  .mt-md-3 {\n    margin-top: 1rem !important; }\n  .mt-md-4 {\n    margin-top: 1.5rem !important; }\n  .mt-md-5 {\n    margin-top: 3rem !important; }\n  .mt-md-auto {\n    margin-top: auto !important; }\n  .me-md-0 {\n    margin-right: 0 !important; }\n  .me-md-1 {\n    margin-right: 0.25rem !important; }\n  .me-md-2 {\n    margin-right: 0.5rem !important; }\n  .me-md-3 {\n    margin-right: 1rem !important; }\n  .me-md-4 {\n    margin-right: 1.5rem !important; }\n  .me-md-5 {\n    margin-right: 3rem !important; }\n  .me-md-auto {\n    margin-right: auto !important; }\n  .mb-md-0 {\n    margin-bottom: 0 !important; }\n  .mb-md-1 {\n    margin-bottom: 0.25rem !important; }\n  .mb-md-2 {\n    margin-bottom: 0.5rem !important; }\n  .mb-md-3 {\n    margin-bottom: 1rem !important; }\n  .mb-md-4 {\n    margin-bottom: 1.5rem !important; }\n  .mb-md-5 {\n    margin-bottom: 3rem !important; }\n  .mb-md-auto {\n    margin-bottom: auto !important; }\n  .ms-md-0 {\n    margin-left: 0 !important; }\n  .ms-md-1 {\n    margin-left: 0.25rem !important; }\n  .ms-md-2 {\n    margin-left: 0.5rem !important; }\n  .ms-md-3 {\n    margin-left: 1rem !important; }\n  .ms-md-4 {\n    margin-left: 1.5rem !important; }\n  .ms-md-5 {\n    margin-left: 3rem !important; }\n  .ms-md-auto {\n    margin-left: auto !important; }\n  .p-md-0 {\n    padding: 0 !important; }\n  .p-md-1 {\n    padding: 0.25rem !important; }\n  .p-md-2 {\n    padding: 0.5rem !important; }\n  .p-md-3 {\n    padding: 1rem !important; }\n  .p-md-4 {\n    padding: 1.5rem !important; }\n  .p-md-5 {\n    padding: 3rem !important; }\n  .px-md-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important; }\n  .px-md-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important; }\n  .px-md-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important; }\n  .px-md-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important; }\n  .px-md-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important; }\n  .px-md-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important; }\n  .py-md-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; }\n  .py-md-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important; }\n  .py-md-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important; }\n  .py-md-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important; }\n  .py-md-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important; }\n  .py-md-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important; }\n  .pt-md-0 {\n    padding-top: 0 !important; }\n  .pt-md-1 {\n    padding-top: 0.25rem !important; }\n  .pt-md-2 {\n    padding-top: 0.5rem !important; }\n  .pt-md-3 {\n    padding-top: 1rem !important; }\n  .pt-md-4 {\n    padding-top: 1.5rem !important; }\n  .pt-md-5 {\n    padding-top: 3rem !important; }\n  .pe-md-0 {\n    padding-right: 0 !important; }\n  .pe-md-1 {\n    padding-right: 0.25rem !important; }\n  .pe-md-2 {\n    padding-right: 0.5rem !important; }\n  .pe-md-3 {\n    padding-right: 1rem !important; }\n  .pe-md-4 {\n    padding-right: 1.5rem !important; }\n  .pe-md-5 {\n    padding-right: 3rem !important; }\n  .pb-md-0 {\n    padding-bottom: 0 !important; }\n  .pb-md-1 {\n    padding-bottom: 0.25rem !important; }\n  .pb-md-2 {\n    padding-bottom: 0.5rem !important; }\n  .pb-md-3 {\n    padding-bottom: 1rem !important; }\n  .pb-md-4 {\n    padding-bottom: 1.5rem !important; }\n  .pb-md-5 {\n    padding-bottom: 3rem !important; }\n  .ps-md-0 {\n    padding-left: 0 !important; }\n  .ps-md-1 {\n    padding-left: 0.25rem !important; }\n  .ps-md-2 {\n    padding-left: 0.5rem !important; }\n  .ps-md-3 {\n    padding-left: 1rem !important; }\n  .ps-md-4 {\n    padding-left: 1.5rem !important; }\n  .ps-md-5 {\n    padding-left: 3rem !important; }\n  .text-md-start {\n    text-align: left !important; }\n  .text-md-end {\n    text-align: right !important; }\n  .text-md-center {\n    text-align: center !important; } }\n\n@media (min-width: 992px) {\n  .float-lg-start {\n    float: left !important; }\n  .float-lg-end {\n    float: right !important; }\n  .float-lg-none {\n    float: none !important; }\n  .d-lg-inline {\n    display: inline !important; }\n  .d-lg-inline-block {\n    display: inline-block !important; }\n  .d-lg-block {\n    display: block !important; }\n  .d-lg-grid {\n    display: grid !important; }\n  .d-lg-table {\n    display: table !important; }\n  .d-lg-table-row {\n    display: table-row !important; }\n  .d-lg-table-cell {\n    display: table-cell !important; }\n  .d-lg-flex {\n    display: flex !important; }\n  .d-lg-inline-flex {\n    display: inline-flex !important; }\n  .d-lg-none {\n    display: none !important; }\n  .flex-lg-fill {\n    flex: 1 1 auto !important; }\n  .flex-lg-row {\n    flex-direction: row !important; }\n  .flex-lg-column {\n    flex-direction: column !important; }\n  .flex-lg-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-lg-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-lg-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-lg-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-lg-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-lg-shrink-1 {\n    flex-shrink: 1 !important; }\n  .flex-lg-wrap {\n    flex-wrap: wrap !important; }\n  .flex-lg-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-lg-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .gap-lg-0 {\n    gap: 0 !important; }\n  .gap-lg-1 {\n    gap: 0.25rem !important; }\n  .gap-lg-2 {\n    gap: 0.5rem !important; }\n  .gap-lg-3 {\n    gap: 1rem !important; }\n  .gap-lg-4 {\n    gap: 1.5rem !important; }\n  .gap-lg-5 {\n    gap: 3rem !important; }\n  .justify-content-lg-start {\n    justify-content: flex-start !important; }\n  .justify-content-lg-end {\n    justify-content: flex-end !important; }\n  .justify-content-lg-center {\n    justify-content: center !important; }\n  .justify-content-lg-between {\n    justify-content: space-between !important; }\n  .justify-content-lg-around {\n    justify-content: space-around !important; }\n  .justify-content-lg-evenly {\n    justify-content: space-evenly !important; }\n  .align-items-lg-start {\n    align-items: flex-start !important; }\n  .align-items-lg-end {\n    align-items: flex-end !important; }\n  .align-items-lg-center {\n    align-items: center !important; }\n  .align-items-lg-baseline {\n    align-items: baseline !important; }\n  .align-items-lg-stretch {\n    align-items: stretch !important; }\n  .align-content-lg-start {\n    align-content: flex-start !important; }\n  .align-content-lg-end {\n    align-content: flex-end !important; }\n  .align-content-lg-center {\n    align-content: center !important; }\n  .align-content-lg-between {\n    align-content: space-between !important; }\n  .align-content-lg-around {\n    align-content: space-around !important; }\n  .align-content-lg-stretch {\n    align-content: stretch !important; }\n  .align-self-lg-auto {\n    align-self: auto !important; }\n  .align-self-lg-start {\n    align-self: flex-start !important; }\n  .align-self-lg-end {\n    align-self: flex-end !important; }\n  .align-self-lg-center {\n    align-self: center !important; }\n  .align-self-lg-baseline {\n    align-self: baseline !important; }\n  .align-self-lg-stretch {\n    align-self: stretch !important; }\n  .order-lg-first {\n    order: -1 !important; }\n  .order-lg-0 {\n    order: 0 !important; }\n  .order-lg-1 {\n    order: 1 !important; }\n  .order-lg-2 {\n    order: 2 !important; }\n  .order-lg-3 {\n    order: 3 !important; }\n  .order-lg-4 {\n    order: 4 !important; }\n  .order-lg-5 {\n    order: 5 !important; }\n  .order-lg-last {\n    order: 6 !important; }\n  .m-lg-0 {\n    margin: 0 !important; }\n  .m-lg-1 {\n    margin: 0.25rem !important; }\n  .m-lg-2 {\n    margin: 0.5rem !important; }\n  .m-lg-3 {\n    margin: 1rem !important; }\n  .m-lg-4 {\n    margin: 1.5rem !important; }\n  .m-lg-5 {\n    margin: 3rem !important; }\n  .m-lg-auto {\n    margin: auto !important; }\n  .mx-lg-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important; }\n  .mx-lg-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important; }\n  .mx-lg-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important; }\n  .mx-lg-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important; }\n  .mx-lg-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important; }\n  .mx-lg-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important; }\n  .mx-lg-auto {\n    margin-right: auto !important;\n    margin-left: auto !important; }\n  .my-lg-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; }\n  .my-lg-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important; }\n  .my-lg-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important; }\n  .my-lg-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important; }\n  .my-lg-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important; }\n  .my-lg-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important; }\n  .my-lg-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important; }\n  .mt-lg-0 {\n    margin-top: 0 !important; }\n  .mt-lg-1 {\n    margin-top: 0.25rem !important; }\n  .mt-lg-2 {\n    margin-top: 0.5rem !important; }\n  .mt-lg-3 {\n    margin-top: 1rem !important; }\n  .mt-lg-4 {\n    margin-top: 1.5rem !important; }\n  .mt-lg-5 {\n    margin-top: 3rem !important; }\n  .mt-lg-auto {\n    margin-top: auto !important; }\n  .me-lg-0 {\n    margin-right: 0 !important; }\n  .me-lg-1 {\n    margin-right: 0.25rem !important; }\n  .me-lg-2 {\n    margin-right: 0.5rem !important; }\n  .me-lg-3 {\n    margin-right: 1rem !important; }\n  .me-lg-4 {\n    margin-right: 1.5rem !important; }\n  .me-lg-5 {\n    margin-right: 3rem !important; }\n  .me-lg-auto {\n    margin-right: auto !important; }\n  .mb-lg-0 {\n    margin-bottom: 0 !important; }\n  .mb-lg-1 {\n    margin-bottom: 0.25rem !important; }\n  .mb-lg-2 {\n    margin-bottom: 0.5rem !important; }\n  .mb-lg-3 {\n    margin-bottom: 1rem !important; }\n  .mb-lg-4 {\n    margin-bottom: 1.5rem !important; }\n  .mb-lg-5 {\n    margin-bottom: 3rem !important; }\n  .mb-lg-auto {\n    margin-bottom: auto !important; }\n  .ms-lg-0 {\n    margin-left: 0 !important; }\n  .ms-lg-1 {\n    margin-left: 0.25rem !important; }\n  .ms-lg-2 {\n    margin-left: 0.5rem !important; }\n  .ms-lg-3 {\n    margin-left: 1rem !important; }\n  .ms-lg-4 {\n    margin-left: 1.5rem !important; }\n  .ms-lg-5 {\n    margin-left: 3rem !important; }\n  .ms-lg-auto {\n    margin-left: auto !important; }\n  .p-lg-0 {\n    padding: 0 !important; }\n  .p-lg-1 {\n    padding: 0.25rem !important; }\n  .p-lg-2 {\n    padding: 0.5rem !important; }\n  .p-lg-3 {\n    padding: 1rem !important; }\n  .p-lg-4 {\n    padding: 1.5rem !important; }\n  .p-lg-5 {\n    padding: 3rem !important; }\n  .px-lg-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important; }\n  .px-lg-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important; }\n  .px-lg-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important; }\n  .px-lg-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important; }\n  .px-lg-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important; }\n  .px-lg-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important; }\n  .py-lg-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; }\n  .py-lg-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important; }\n  .py-lg-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important; }\n  .py-lg-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important; }\n  .py-lg-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important; }\n  .py-lg-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important; }\n  .pt-lg-0 {\n    padding-top: 0 !important; }\n  .pt-lg-1 {\n    padding-top: 0.25rem !important; }\n  .pt-lg-2 {\n    padding-top: 0.5rem !important; }\n  .pt-lg-3 {\n    padding-top: 1rem !important; }\n  .pt-lg-4 {\n    padding-top: 1.5rem !important; }\n  .pt-lg-5 {\n    padding-top: 3rem !important; }\n  .pe-lg-0 {\n    padding-right: 0 !important; }\n  .pe-lg-1 {\n    padding-right: 0.25rem !important; }\n  .pe-lg-2 {\n    padding-right: 0.5rem !important; }\n  .pe-lg-3 {\n    padding-right: 1rem !important; }\n  .pe-lg-4 {\n    padding-right: 1.5rem !important; }\n  .pe-lg-5 {\n    padding-right: 3rem !important; }\n  .pb-lg-0 {\n    padding-bottom: 0 !important; }\n  .pb-lg-1 {\n    padding-bottom: 0.25rem !important; }\n  .pb-lg-2 {\n    padding-bottom: 0.5rem !important; }\n  .pb-lg-3 {\n    padding-bottom: 1rem !important; }\n  .pb-lg-4 {\n    padding-bottom: 1.5rem !important; }\n  .pb-lg-5 {\n    padding-bottom: 3rem !important; }\n  .ps-lg-0 {\n    padding-left: 0 !important; }\n  .ps-lg-1 {\n    padding-left: 0.25rem !important; }\n  .ps-lg-2 {\n    padding-left: 0.5rem !important; }\n  .ps-lg-3 {\n    padding-left: 1rem !important; }\n  .ps-lg-4 {\n    padding-left: 1.5rem !important; }\n  .ps-lg-5 {\n    padding-left: 3rem !important; }\n  .text-lg-start {\n    text-align: left !important; }\n  .text-lg-end {\n    text-align: right !important; }\n  .text-lg-center {\n    text-align: center !important; } }\n\n@media (min-width: 1200px) {\n  .float-xl-start {\n    float: left !important; }\n  .float-xl-end {\n    float: right !important; }\n  .float-xl-none {\n    float: none !important; }\n  .d-xl-inline {\n    display: inline !important; }\n  .d-xl-inline-block {\n    display: inline-block !important; }\n  .d-xl-block {\n    display: block !important; }\n  .d-xl-grid {\n    display: grid !important; }\n  .d-xl-table {\n    display: table !important; }\n  .d-xl-table-row {\n    display: table-row !important; }\n  .d-xl-table-cell {\n    display: table-cell !important; }\n  .d-xl-flex {\n    display: flex !important; }\n  .d-xl-inline-flex {\n    display: inline-flex !important; }\n  .d-xl-none {\n    display: none !important; }\n  .flex-xl-fill {\n    flex: 1 1 auto !important; }\n  .flex-xl-row {\n    flex-direction: row !important; }\n  .flex-xl-column {\n    flex-direction: column !important; }\n  .flex-xl-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-xl-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-xl-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-xl-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-xl-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-xl-shrink-1 {\n    flex-shrink: 1 !important; }\n  .flex-xl-wrap {\n    flex-wrap: wrap !important; }\n  .flex-xl-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-xl-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .gap-xl-0 {\n    gap: 0 !important; }\n  .gap-xl-1 {\n    gap: 0.25rem !important; }\n  .gap-xl-2 {\n    gap: 0.5rem !important; }\n  .gap-xl-3 {\n    gap: 1rem !important; }\n  .gap-xl-4 {\n    gap: 1.5rem !important; }\n  .gap-xl-5 {\n    gap: 3rem !important; }\n  .justify-content-xl-start {\n    justify-content: flex-start !important; }\n  .justify-content-xl-end {\n    justify-content: flex-end !important; }\n  .justify-content-xl-center {\n    justify-content: center !important; }\n  .justify-content-xl-between {\n    justify-content: space-between !important; }\n  .justify-content-xl-around {\n    justify-content: space-around !important; }\n  .justify-content-xl-evenly {\n    justify-content: space-evenly !important; }\n  .align-items-xl-start {\n    align-items: flex-start !important; }\n  .align-items-xl-end {\n    align-items: flex-end !important; }\n  .align-items-xl-center {\n    align-items: center !important; }\n  .align-items-xl-baseline {\n    align-items: baseline !important; }\n  .align-items-xl-stretch {\n    align-items: stretch !important; }\n  .align-content-xl-start {\n    align-content: flex-start !important; }\n  .align-content-xl-end {\n    align-content: flex-end !important; }\n  .align-content-xl-center {\n    align-content: center !important; }\n  .align-content-xl-between {\n    align-content: space-between !important; }\n  .align-content-xl-around {\n    align-content: space-around !important; }\n  .align-content-xl-stretch {\n    align-content: stretch !important; }\n  .align-self-xl-auto {\n    align-self: auto !important; }\n  .align-self-xl-start {\n    align-self: flex-start !important; }\n  .align-self-xl-end {\n    align-self: flex-end !important; }\n  .align-self-xl-center {\n    align-self: center !important; }\n  .align-self-xl-baseline {\n    align-self: baseline !important; }\n  .align-self-xl-stretch {\n    align-self: stretch !important; }\n  .order-xl-first {\n    order: -1 !important; }\n  .order-xl-0 {\n    order: 0 !important; }\n  .order-xl-1 {\n    order: 1 !important; }\n  .order-xl-2 {\n    order: 2 !important; }\n  .order-xl-3 {\n    order: 3 !important; }\n  .order-xl-4 {\n    order: 4 !important; }\n  .order-xl-5 {\n    order: 5 !important; }\n  .order-xl-last {\n    order: 6 !important; }\n  .m-xl-0 {\n    margin: 0 !important; }\n  .m-xl-1 {\n    margin: 0.25rem !important; }\n  .m-xl-2 {\n    margin: 0.5rem !important; }\n  .m-xl-3 {\n    margin: 1rem !important; }\n  .m-xl-4 {\n    margin: 1.5rem !important; }\n  .m-xl-5 {\n    margin: 3rem !important; }\n  .m-xl-auto {\n    margin: auto !important; }\n  .mx-xl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important; }\n  .mx-xl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important; }\n  .mx-xl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important; }\n  .mx-xl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important; }\n  .mx-xl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important; }\n  .mx-xl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important; }\n  .mx-xl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important; }\n  .my-xl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; }\n  .my-xl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important; }\n  .my-xl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important; }\n  .my-xl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important; }\n  .my-xl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important; }\n  .my-xl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important; }\n  .my-xl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important; }\n  .mt-xl-0 {\n    margin-top: 0 !important; }\n  .mt-xl-1 {\n    margin-top: 0.25rem !important; }\n  .mt-xl-2 {\n    margin-top: 0.5rem !important; }\n  .mt-xl-3 {\n    margin-top: 1rem !important; }\n  .mt-xl-4 {\n    margin-top: 1.5rem !important; }\n  .mt-xl-5 {\n    margin-top: 3rem !important; }\n  .mt-xl-auto {\n    margin-top: auto !important; }\n  .me-xl-0 {\n    margin-right: 0 !important; }\n  .me-xl-1 {\n    margin-right: 0.25rem !important; }\n  .me-xl-2 {\n    margin-right: 0.5rem !important; }\n  .me-xl-3 {\n    margin-right: 1rem !important; }\n  .me-xl-4 {\n    margin-right: 1.5rem !important; }\n  .me-xl-5 {\n    margin-right: 3rem !important; }\n  .me-xl-auto {\n    margin-right: auto !important; }\n  .mb-xl-0 {\n    margin-bottom: 0 !important; }\n  .mb-xl-1 {\n    margin-bottom: 0.25rem !important; }\n  .mb-xl-2 {\n    margin-bottom: 0.5rem !important; }\n  .mb-xl-3 {\n    margin-bottom: 1rem !important; }\n  .mb-xl-4 {\n    margin-bottom: 1.5rem !important; }\n  .mb-xl-5 {\n    margin-bottom: 3rem !important; }\n  .mb-xl-auto {\n    margin-bottom: auto !important; }\n  .ms-xl-0 {\n    margin-left: 0 !important; }\n  .ms-xl-1 {\n    margin-left: 0.25rem !important; }\n  .ms-xl-2 {\n    margin-left: 0.5rem !important; }\n  .ms-xl-3 {\n    margin-left: 1rem !important; }\n  .ms-xl-4 {\n    margin-left: 1.5rem !important; }\n  .ms-xl-5 {\n    margin-left: 3rem !important; }\n  .ms-xl-auto {\n    margin-left: auto !important; }\n  .p-xl-0 {\n    padding: 0 !important; }\n  .p-xl-1 {\n    padding: 0.25rem !important; }\n  .p-xl-2 {\n    padding: 0.5rem !important; }\n  .p-xl-3 {\n    padding: 1rem !important; }\n  .p-xl-4 {\n    padding: 1.5rem !important; }\n  .p-xl-5 {\n    padding: 3rem !important; }\n  .px-xl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important; }\n  .px-xl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important; }\n  .px-xl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important; }\n  .px-xl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important; }\n  .px-xl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important; }\n  .px-xl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important; }\n  .py-xl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; }\n  .py-xl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important; }\n  .py-xl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important; }\n  .py-xl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important; }\n  .py-xl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important; }\n  .py-xl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important; }\n  .pt-xl-0 {\n    padding-top: 0 !important; }\n  .pt-xl-1 {\n    padding-top: 0.25rem !important; }\n  .pt-xl-2 {\n    padding-top: 0.5rem !important; }\n  .pt-xl-3 {\n    padding-top: 1rem !important; }\n  .pt-xl-4 {\n    padding-top: 1.5rem !important; }\n  .pt-xl-5 {\n    padding-top: 3rem !important; }\n  .pe-xl-0 {\n    padding-right: 0 !important; }\n  .pe-xl-1 {\n    padding-right: 0.25rem !important; }\n  .pe-xl-2 {\n    padding-right: 0.5rem !important; }\n  .pe-xl-3 {\n    padding-right: 1rem !important; }\n  .pe-xl-4 {\n    padding-right: 1.5rem !important; }\n  .pe-xl-5 {\n    padding-right: 3rem !important; }\n  .pb-xl-0 {\n    padding-bottom: 0 !important; }\n  .pb-xl-1 {\n    padding-bottom: 0.25rem !important; }\n  .pb-xl-2 {\n    padding-bottom: 0.5rem !important; }\n  .pb-xl-3 {\n    padding-bottom: 1rem !important; }\n  .pb-xl-4 {\n    padding-bottom: 1.5rem !important; }\n  .pb-xl-5 {\n    padding-bottom: 3rem !important; }\n  .ps-xl-0 {\n    padding-left: 0 !important; }\n  .ps-xl-1 {\n    padding-left: 0.25rem !important; }\n  .ps-xl-2 {\n    padding-left: 0.5rem !important; }\n  .ps-xl-3 {\n    padding-left: 1rem !important; }\n  .ps-xl-4 {\n    padding-left: 1.5rem !important; }\n  .ps-xl-5 {\n    padding-left: 3rem !important; }\n  .text-xl-start {\n    text-align: left !important; }\n  .text-xl-end {\n    text-align: right !important; }\n  .text-xl-center {\n    text-align: center !important; } }\n\n@media (min-width: 1400px) {\n  .float-xxl-start {\n    float: left !important; }\n  .float-xxl-end {\n    float: right !important; }\n  .float-xxl-none {\n    float: none !important; }\n  .d-xxl-inline {\n    display: inline !important; }\n  .d-xxl-inline-block {\n    display: inline-block !important; }\n  .d-xxl-block {\n    display: block !important; }\n  .d-xxl-grid {\n    display: grid !important; }\n  .d-xxl-table {\n    display: table !important; }\n  .d-xxl-table-row {\n    display: table-row !important; }\n  .d-xxl-table-cell {\n    display: table-cell !important; }\n  .d-xxl-flex {\n    display: flex !important; }\n  .d-xxl-inline-flex {\n    display: inline-flex !important; }\n  .d-xxl-none {\n    display: none !important; }\n  .flex-xxl-fill {\n    flex: 1 1 auto !important; }\n  .flex-xxl-row {\n    flex-direction: row !important; }\n  .flex-xxl-column {\n    flex-direction: column !important; }\n  .flex-xxl-row-reverse {\n    flex-direction: row-reverse !important; }\n  .flex-xxl-column-reverse {\n    flex-direction: column-reverse !important; }\n  .flex-xxl-grow-0 {\n    flex-grow: 0 !important; }\n  .flex-xxl-grow-1 {\n    flex-grow: 1 !important; }\n  .flex-xxl-shrink-0 {\n    flex-shrink: 0 !important; }\n  .flex-xxl-shrink-1 {\n    flex-shrink: 1 !important; }\n  .flex-xxl-wrap {\n    flex-wrap: wrap !important; }\n  .flex-xxl-nowrap {\n    flex-wrap: nowrap !important; }\n  .flex-xxl-wrap-reverse {\n    flex-wrap: wrap-reverse !important; }\n  .gap-xxl-0 {\n    gap: 0 !important; }\n  .gap-xxl-1 {\n    gap: 0.25rem !important; }\n  .gap-xxl-2 {\n    gap: 0.5rem !important; }\n  .gap-xxl-3 {\n    gap: 1rem !important; }\n  .gap-xxl-4 {\n    gap: 1.5rem !important; }\n  .gap-xxl-5 {\n    gap: 3rem !important; }\n  .justify-content-xxl-start {\n    justify-content: flex-start !important; }\n  .justify-content-xxl-end {\n    justify-content: flex-end !important; }\n  .justify-content-xxl-center {\n    justify-content: center !important; }\n  .justify-content-xxl-between {\n    justify-content: space-between !important; }\n  .justify-content-xxl-around {\n    justify-content: space-around !important; }\n  .justify-content-xxl-evenly {\n    justify-content: space-evenly !important; }\n  .align-items-xxl-start {\n    align-items: flex-start !important; }\n  .align-items-xxl-end {\n    align-items: flex-end !important; }\n  .align-items-xxl-center {\n    align-items: center !important; }\n  .align-items-xxl-baseline {\n    align-items: baseline !important; }\n  .align-items-xxl-stretch {\n    align-items: stretch !important; }\n  .align-content-xxl-start {\n    align-content: flex-start !important; }\n  .align-content-xxl-end {\n    align-content: flex-end !important; }\n  .align-content-xxl-center {\n    align-content: center !important; }\n  .align-content-xxl-between {\n    align-content: space-between !important; }\n  .align-content-xxl-around {\n    align-content: space-around !important; }\n  .align-content-xxl-stretch {\n    align-content: stretch !important; }\n  .align-self-xxl-auto {\n    align-self: auto !important; }\n  .align-self-xxl-start {\n    align-self: flex-start !important; }\n  .align-self-xxl-end {\n    align-self: flex-end !important; }\n  .align-self-xxl-center {\n    align-self: center !important; }\n  .align-self-xxl-baseline {\n    align-self: baseline !important; }\n  .align-self-xxl-stretch {\n    align-self: stretch !important; }\n  .order-xxl-first {\n    order: -1 !important; }\n  .order-xxl-0 {\n    order: 0 !important; }\n  .order-xxl-1 {\n    order: 1 !important; }\n  .order-xxl-2 {\n    order: 2 !important; }\n  .order-xxl-3 {\n    order: 3 !important; }\n  .order-xxl-4 {\n    order: 4 !important; }\n  .order-xxl-5 {\n    order: 5 !important; }\n  .order-xxl-last {\n    order: 6 !important; }\n  .m-xxl-0 {\n    margin: 0 !important; }\n  .m-xxl-1 {\n    margin: 0.25rem !important; }\n  .m-xxl-2 {\n    margin: 0.5rem !important; }\n  .m-xxl-3 {\n    margin: 1rem !important; }\n  .m-xxl-4 {\n    margin: 1.5rem !important; }\n  .m-xxl-5 {\n    margin: 3rem !important; }\n  .m-xxl-auto {\n    margin: auto !important; }\n  .mx-xxl-0 {\n    margin-right: 0 !important;\n    margin-left: 0 !important; }\n  .mx-xxl-1 {\n    margin-right: 0.25rem !important;\n    margin-left: 0.25rem !important; }\n  .mx-xxl-2 {\n    margin-right: 0.5rem !important;\n    margin-left: 0.5rem !important; }\n  .mx-xxl-3 {\n    margin-right: 1rem !important;\n    margin-left: 1rem !important; }\n  .mx-xxl-4 {\n    margin-right: 1.5rem !important;\n    margin-left: 1.5rem !important; }\n  .mx-xxl-5 {\n    margin-right: 3rem !important;\n    margin-left: 3rem !important; }\n  .mx-xxl-auto {\n    margin-right: auto !important;\n    margin-left: auto !important; }\n  .my-xxl-0 {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important; }\n  .my-xxl-1 {\n    margin-top: 0.25rem !important;\n    margin-bottom: 0.25rem !important; }\n  .my-xxl-2 {\n    margin-top: 0.5rem !important;\n    margin-bottom: 0.5rem !important; }\n  .my-xxl-3 {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important; }\n  .my-xxl-4 {\n    margin-top: 1.5rem !important;\n    margin-bottom: 1.5rem !important; }\n  .my-xxl-5 {\n    margin-top: 3rem !important;\n    margin-bottom: 3rem !important; }\n  .my-xxl-auto {\n    margin-top: auto !important;\n    margin-bottom: auto !important; }\n  .mt-xxl-0 {\n    margin-top: 0 !important; }\n  .mt-xxl-1 {\n    margin-top: 0.25rem !important; }\n  .mt-xxl-2 {\n    margin-top: 0.5rem !important; }\n  .mt-xxl-3 {\n    margin-top: 1rem !important; }\n  .mt-xxl-4 {\n    margin-top: 1.5rem !important; }\n  .mt-xxl-5 {\n    margin-top: 3rem !important; }\n  .mt-xxl-auto {\n    margin-top: auto !important; }\n  .me-xxl-0 {\n    margin-right: 0 !important; }\n  .me-xxl-1 {\n    margin-right: 0.25rem !important; }\n  .me-xxl-2 {\n    margin-right: 0.5rem !important; }\n  .me-xxl-3 {\n    margin-right: 1rem !important; }\n  .me-xxl-4 {\n    margin-right: 1.5rem !important; }\n  .me-xxl-5 {\n    margin-right: 3rem !important; }\n  .me-xxl-auto {\n    margin-right: auto !important; }\n  .mb-xxl-0 {\n    margin-bottom: 0 !important; }\n  .mb-xxl-1 {\n    margin-bottom: 0.25rem !important; }\n  .mb-xxl-2 {\n    margin-bottom: 0.5rem !important; }\n  .mb-xxl-3 {\n    margin-bottom: 1rem !important; }\n  .mb-xxl-4 {\n    margin-bottom: 1.5rem !important; }\n  .mb-xxl-5 {\n    margin-bottom: 3rem !important; }\n  .mb-xxl-auto {\n    margin-bottom: auto !important; }\n  .ms-xxl-0 {\n    margin-left: 0 !important; }\n  .ms-xxl-1 {\n    margin-left: 0.25rem !important; }\n  .ms-xxl-2 {\n    margin-left: 0.5rem !important; }\n  .ms-xxl-3 {\n    margin-left: 1rem !important; }\n  .ms-xxl-4 {\n    margin-left: 1.5rem !important; }\n  .ms-xxl-5 {\n    margin-left: 3rem !important; }\n  .ms-xxl-auto {\n    margin-left: auto !important; }\n  .p-xxl-0 {\n    padding: 0 !important; }\n  .p-xxl-1 {\n    padding: 0.25rem !important; }\n  .p-xxl-2 {\n    padding: 0.5rem !important; }\n  .p-xxl-3 {\n    padding: 1rem !important; }\n  .p-xxl-4 {\n    padding: 1.5rem !important; }\n  .p-xxl-5 {\n    padding: 3rem !important; }\n  .px-xxl-0 {\n    padding-right: 0 !important;\n    padding-left: 0 !important; }\n  .px-xxl-1 {\n    padding-right: 0.25rem !important;\n    padding-left: 0.25rem !important; }\n  .px-xxl-2 {\n    padding-right: 0.5rem !important;\n    padding-left: 0.5rem !important; }\n  .px-xxl-3 {\n    padding-right: 1rem !important;\n    padding-left: 1rem !important; }\n  .px-xxl-4 {\n    padding-right: 1.5rem !important;\n    padding-left: 1.5rem !important; }\n  .px-xxl-5 {\n    padding-right: 3rem !important;\n    padding-left: 3rem !important; }\n  .py-xxl-0 {\n    padding-top: 0 !important;\n    padding-bottom: 0 !important; }\n  .py-xxl-1 {\n    padding-top: 0.25rem !important;\n    padding-bottom: 0.25rem !important; }\n  .py-xxl-2 {\n    padding-top: 0.5rem !important;\n    padding-bottom: 0.5rem !important; }\n  .py-xxl-3 {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important; }\n  .py-xxl-4 {\n    padding-top: 1.5rem !important;\n    padding-bottom: 1.5rem !important; }\n  .py-xxl-5 {\n    padding-top: 3rem !important;\n    padding-bottom: 3rem !important; }\n  .pt-xxl-0 {\n    padding-top: 0 !important; }\n  .pt-xxl-1 {\n    padding-top: 0.25rem !important; }\n  .pt-xxl-2 {\n    padding-top: 0.5rem !important; }\n  .pt-xxl-3 {\n    padding-top: 1rem !important; }\n  .pt-xxl-4 {\n    padding-top: 1.5rem !important; }\n  .pt-xxl-5 {\n    padding-top: 3rem !important; }\n  .pe-xxl-0 {\n    padding-right: 0 !important; }\n  .pe-xxl-1 {\n    padding-right: 0.25rem !important; }\n  .pe-xxl-2 {\n    padding-right: 0.5rem !important; }\n  .pe-xxl-3 {\n    padding-right: 1rem !important; }\n  .pe-xxl-4 {\n    padding-right: 1.5rem !important; }\n  .pe-xxl-5 {\n    padding-right: 3rem !important; }\n  .pb-xxl-0 {\n    padding-bottom: 0 !important; }\n  .pb-xxl-1 {\n    padding-bottom: 0.25rem !important; }\n  .pb-xxl-2 {\n    padding-bottom: 0.5rem !important; }\n  .pb-xxl-3 {\n    padding-bottom: 1rem !important; }\n  .pb-xxl-4 {\n    padding-bottom: 1.5rem !important; }\n  .pb-xxl-5 {\n    padding-bottom: 3rem !important; }\n  .ps-xxl-0 {\n    padding-left: 0 !important; }\n  .ps-xxl-1 {\n    padding-left: 0.25rem !important; }\n  .ps-xxl-2 {\n    padding-left: 0.5rem !important; }\n  .ps-xxl-3 {\n    padding-left: 1rem !important; }\n  .ps-xxl-4 {\n    padding-left: 1.5rem !important; }\n  .ps-xxl-5 {\n    padding-left: 3rem !important; }\n  .text-xxl-start {\n    text-align: left !important; }\n  .text-xxl-end {\n    text-align: right !important; }\n  .text-xxl-center {\n    text-align: center !important; } }\n\n@media (min-width: 1200px) {\n  .fs-1 {\n    font-size: 2.5rem !important; }\n  .fs-2 {\n    font-size: 2rem !important; }\n  .fs-3 {\n    font-size: 1.75rem !important; }\n  .fs-4 {\n    font-size: 1.5rem !important; } }\n\n@media print {\n  .d-print-inline {\n    display: inline !important; }\n  .d-print-inline-block {\n    display: inline-block !important; }\n  .d-print-block {\n    display: block !important; }\n  .d-print-grid {\n    display: grid !important; }\n  .d-print-table {\n    display: table !important; }\n  .d-print-table-row {\n    display: table-row !important; }\n  .d-print-table-cell {\n    display: table-cell !important; }\n  .d-print-flex {\n    display: flex !important; }\n  .d-print-inline-flex {\n    display: inline-flex !important; }\n  .d-print-none {\n    display: none !important; } }\n\n/*-------------------------------------------------------------------*/\n/* === Template mixins === */\n/* Miscellaneous Mixins */\n.list-wrapper ul li .form-check, .list-wrapper ul li .form-check .form-check-label {\n  text-overflow: ellipsis;\n  overflow: hidden;\n  max-width: 100%;\n  white-space: nowrap; }\n\n/* Animation Mixins */\n@keyframes dropdownAnimation {\n  from {\n    opacity: 0;\n    transform: translate3d(0, -30px, 0); }\n  to {\n    opacity: 1;\n    transform: none;\n    transform: translate3d(0, 0px, 0); } }\n\n.dropdownAnimation, .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu {\n  animation-name: dropdownAnimation;\n  -webkit-animation-duration: 0.25s;\n  -moz-animation-duration: 0.25s;\n  -ms-animation-duration: 0.25s;\n  -o-animation-duration: 0.25s;\n  animation-duration: 0.25s;\n  -webkit-animation-fill-mode: both;\n  -moz-animation-fill-mode: both;\n  -ms-animation-fill-mode: both;\n  -o-animation-fill-mode: both;\n  animation-fill-mode: both; }\n\n@keyframes fadeOut {\n  from {\n    opacity: 1; }\n  to {\n    opacity: 0; } }\n\n.fadeOut {\n  animation-name: fadeOut; }\n\n.infinite-spin {\n  animation-name: spin;\n  animation-duration: 3s;\n  animation-iteration-count: infinite;\n  animation-timing-function: linear; }\n\n@keyframes spin {\n  from {\n    transform: rotate(0deg); }\n  to {\n    transform: rotate(360deg); } }\n\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translate3d(0, 100%, 0); }\n  to {\n    opacity: 1;\n    transform: none; } }\n\n.fadeInUp {\n  animation-name: fadeInUp; }\n\n/*-------------------------------------------------------------------*/\n/* === Core Styles === */\n/* Reset Styles */\nbody {\n  padding: 0;\n  margin: 0;\n  overflow-x: hidden; }\n\n.form-control, .asColorPicker-input, .dataTables_wrapper select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .select2-container--default .select2-selection--single, .select2-container--default .select2-selection--single .select2-search__field, .typeahead,\n.tt-query,\n.tt-hint, .form-control:focus, .asColorPicker-input:focus, .dataTables_wrapper select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .select2-container--default .select2-selection--single:focus, .select2-container--default .select2-selection--single .select2-search__field:focus, .typeahead:focus,\n.tt-query:focus,\n.tt-hint:focus {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none; }\n\n.form-control, .asColorPicker-input, .dataTables_wrapper select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .select2-container--default .select2-selection--single, .select2-container--default .select2-selection--single .select2-search__field, .typeahead,\n.tt-query,\n.tt-hint {\n  box-shadow: none; }\n\n.form-control:focus, .asColorPicker-input:focus, .dataTables_wrapper select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .select2-container--default .select2-selection--single:focus, .select2-container--default .select2-selection--single .select2-search__field:focus, .typeahead:focus,\n.tt-query:focus,\n.tt-hint:focus {\n  outline: 0;\n  box-shadow: none;\n  background: #191c20;\n  border: none; }\n\na,\ndiv, h1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5,\np,\nspan {\n  text-shadow: none; }\n\n[type=button]:focus,\na:active,\na:focus,\na:visited,\nbutton::-moz-focus-inner,\ninput[type=reset]::-moz-focus-inner,\ninput[type=button]::-moz-focus-inner,\ninput[type=submit]::-moz-focus-inner,\ninput[type=file] > input[type=button]::-moz-focus-inner,\nselect::-moz-focus-inner {\n  outline: 0; }\n\ninput, .form-control:focus, .asColorPicker-input:focus, .dataTables_wrapper select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .select2-container--default .select2-selection--single:focus, .select2-container--default .select2-selection--single .select2-search__field:focus, .typeahead:focus,\n.tt-query:focus,\n.tt-hint:focus,\ninput:focus,\nselect:focus,\ntextarea:focus,\nbutton:focus {\n  outline: none;\n  outline-width: 0;\n  outline-color: transparent;\n  box-shadow: none;\n  outline-style: none; }\n\ntextarea {\n  resize: none;\n  overflow-x: hidden; }\n\n.btn, .fc button, .ajax-upload-dragdrop .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-cancel,\n.btn-group.open .dropdown-toggle,\n.fc .open.fc-button-group .dropdown-toggle,\n.btn:active,\n.fc button:active,\n.ajax-upload-dragdrop .ajax-file-upload:active,\n.swal2-modal .swal2-buttonswrapper .swal2-styled:active, .btn:focus, .fc button:focus, .ajax-upload-dragdrop .ajax-file-upload:focus, .swal2-modal .swal2-buttonswrapper .swal2-styled:focus, .btn:hover, .fc button:hover, .ajax-upload-dragdrop .ajax-file-upload:hover, .swal2-modal .swal2-buttonswrapper .swal2-styled:hover,\n.btn:visited,\n.fc button:visited,\n.ajax-upload-dragdrop .ajax-file-upload:visited,\n.swal2-modal .swal2-buttonswrapper .swal2-styled:visited,\na,\na:active,\na:checked,\na:focus,\na:hover,\na:visited,\nbody,\nbutton,\nbutton:active,\nbutton:hover,\nbutton:visited,\ndiv,\ninput,\ninput:active,\ninput:focus,\ninput:hover,\ninput:visited,\nselect,\nselect:active,\nselect:focus,\nselect:visited,\ntextarea,\ntextarea:active,\ntextarea:focus,\ntextarea:hover,\ntextarea:visited {\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none; }\n\n.btn.active.focus, .fc button.active.focus, .ajax-upload-dragdrop .active.focus.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .active.focus.swal2-styled,\n.btn.active:focus,\n.fc button.active:focus,\n.ajax-upload-dragdrop .active.ajax-file-upload:focus,\n.swal2-modal .swal2-buttonswrapper .active.swal2-styled:focus,\n.btn.focus,\n.fc button.focus,\n.ajax-upload-dragdrop .focus.ajax-file-upload,\n.swal2-modal .swal2-buttonswrapper .focus.swal2-styled,\n.btn:active.focus,\n.fc button:active.focus,\n.ajax-upload-dragdrop .ajax-file-upload:active.focus,\n.swal2-modal .swal2-buttonswrapper .swal2-styled:active.focus,\n.btn:active:focus,\n.fc button:active:focus,\n.ajax-upload-dragdrop .ajax-file-upload:active:focus,\n.swal2-modal .swal2-buttonswrapper .swal2-styled:active:focus, .btn:focus, .fc button:focus, .ajax-upload-dragdrop .ajax-file-upload:focus, .swal2-modal .swal2-buttonswrapper .swal2-styled:focus,\nbutton,\nbutton:active,\nbutton:checked,\nbutton:focus,\nbutton:hover,\nbutton:visited {\n  outline: 0;\n  outline-offset: 0; }\n\n.bootstrap-select .dropdown-toggle:focus {\n  outline: 0;\n  outline-offset: 0; }\n\n.dropdown-menu > li > a:active,\n.dropdown-menu > li > a:focus,\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:visited {\n  outline: 0; }\n\na:focus,\ninput:focus {\n  border-color: transparent;\n  outline: none; }\n\n/* Fonts */\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 300;\n  src: url(\"../fonts/Rubik/Rubik-Light.ttf\");\n  /* IE9 Compat Modes */ }\n\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 400;\n  src: url(\"../fonts/Rubik/Rubik-Regular.ttf\");\n  /* IE9 Compat Modes */ }\n\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 500;\n  src: url(\"../fonts/Rubik/Rubik-Medium.ttf\");\n  /* IE9 Compat Modes */ }\n\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 700;\n  src: url(\"../fonts/Rubik/Rubik-Bold.ttf\");\n  /* IE9 Compat Modes */ }\n\n/* Backgrounds  */\n.bg-gradient-primary {\n  background: theme-color(primary); }\n\n.bg-gradient-secondary {\n  background: theme-color(secondary); }\n\n.bg-gradient-success {\n  background: theme-color(success); }\n\n.bg-gradient-info {\n  background: theme-color(info); }\n\n.bg-gradient-warning {\n  background: theme-color(warning); }\n\n.bg-gradient-danger {\n  background: theme-color(danger); }\n\n.bg-gradient-light {\n  background: theme-color(light); }\n\n.bg-gradient-dark {\n  background: theme-color(dark); }\n\n.sidebar-grdient-dark {\n  background: #6a008a;\n  background: -moz-linear-gradient(top, #6a008a 0%, #6a008a 20%, #fa0053 100%);\n  background: -webkit-gradient(left top, left bottom, color-stop(0%, #6a008a), color-stop(20%, #6a008a), color-stop(100%, #fa0053));\n  background: -webkit-linear-gradient(top, #6a008a 0%, #6a008a 20%, #fa0053 100%);\n  background: -o-linear-gradient(top, #6a008a 0%, #6a008a 20%, #fa0053 100%);\n  background: -ms-linear-gradient(top, #6a008a 0%, #6a008a 20%, #fa0053 100%);\n  background: linear-gradient(to bottom, #6a008a 0%, #6a008a 20%, #fa0053 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6a008a', endColorstr='#fa0053', GradientType=0 );\n  color: #ffffff; }\n\n/* Typography */\nbody {\n  font-size: 1rem;\n  font-weight: normal;\n  font-weight: initial;\n  line-height: 1.5;\n  font-family: \"Rubik\", sans-serif;\n  -webkit-font-smoothing: antialiased; }\n\nh1, .h1, h2, .h2, h3, .h3, h4, .h4, h5, .h5, h6, .h6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-weight: 500; }\n\np {\n  font-size: 0.875rem; }\n\nh1, .h1,\n.h1 {\n  font-size: 2.19rem; }\n\nh2, .h2,\n.h2 {\n  font-size: 1.875rem; }\n\nh3, .h3,\n.h3 {\n  font-size: 1.5rem; }\n\nh4, .h4,\n.h4 {\n  font-size: 1.125rem; }\n\nh5, .h5,\n.h5 {\n  font-size: 1rem; }\n\nh6, .h6,\n.h6 {\n  font-size: 0.9375rem; }\n\np {\n  font-size: 0.875rem; }\n\n.display-1 {\n  font-size: 3.75rem; }\n  @media (max-width: 991px) {\n    .display-1 {\n      font-size: 3rem; } }\n\n.display-2 {\n  font-size: 3.125rem; }\n  @media (max-width: 991px) {\n    .display-2 {\n      font-size: 2.5rem; } }\n\n.display-3 {\n  font-size: 2.5rem; }\n  @media (max-width: 991px) {\n    .display-3 {\n      font-size: 2rem; } }\n\n.display-4 {\n  font-size: 1.875rem; }\n  @media (max-width: 991px) {\n    .display-4 {\n      font-size: 1.5rem; } }\n\n.display-5 {\n  font-size: 1.25rem; }\n  @media (max-width: 991px) {\n    .display-5 {\n      font-size: 1rem; } }\n\n.blockquote {\n  padding: 1.25rem;\n  border: 1px solid #2c2e33; }\n\naddress p {\n  margin-bottom: 0; }\n\n.blockquote-primary {\n  border-color: #0090e7; }\n  .blockquote-primary .blockquote-footer {\n    color: #0090e7; }\n\n.blockquote-secondary {\n  border-color: #e4eaec; }\n  .blockquote-secondary .blockquote-footer {\n    color: #e4eaec; }\n\n.blockquote-success {\n  border-color: #00d25b; }\n  .blockquote-success .blockquote-footer {\n    color: #00d25b; }\n\n.blockquote-info {\n  border-color: #8f5fe8; }\n  .blockquote-info .blockquote-footer {\n    color: #8f5fe8; }\n\n.blockquote-warning {\n  border-color: #ffab00; }\n  .blockquote-warning .blockquote-footer {\n    color: #ffab00; }\n\n.blockquote-danger {\n  border-color: #fc424a; }\n  .blockquote-danger .blockquote-footer {\n    color: #fc424a; }\n\n.blockquote-light {\n  border-color: #ffffff; }\n  .blockquote-light .blockquote-footer {\n    color: #ffffff; }\n\n.blockquote-dark {\n  border-color: #0d0d0d; }\n  .blockquote-dark .blockquote-footer {\n    color: #0d0d0d; }\n\n.error-page h1, .error-page .h1 {\n  font-size: 12rem; }\n  @media (max-width: 991px) {\n    .error-page h1, .error-page .h1 {\n      font-size: 8rem; } }\n\n.icon-lg {\n  font-size: 3.75rem; }\n\n.icon-md {\n  font-size: 1.875rem; }\n\n.icon-sm {\n  font-size: 1rem; }\n\n/* Miscellanoeous */\nbody,\nhtml {\n  overflow-x: hidden;\n  padding-right: 0 !important;\n  background-color: #191c24; }\n\n*:-moz-full-screen,\n*:-webkit-full-screen,\n*:fullscreen *:-ms-fullscreen {\n  overflow: auto; }\n\n.container-scroller {\n  overflow: hidden; }\n\npre {\n  background: color(gray-lighter);\n  padding: 15px;\n  font-size: 14px; }\n\ncode {\n  padding: 5px;\n  color: #fc424a;\n  font-weight: 300;\n  font-size: 0.875rem;\n  border-radius: 4px; }\n\n.page-header {\n  margin: 0 0 1.5rem 0; }\n  .page-header .breadcrumb {\n    border: 0;\n    margin-bottom: 0; }\n\n.page-title {\n  color: #ffffff;\n  font-size: 1.125rem;\n  margin-bottom: 0; }\n  .page-title .page-title-icon {\n    display: inline-block;\n    width: 36px;\n    height: 36px;\n    border-radius: 4px;\n    text-align: center;\n    box-shadow: 0px 3px 8.3px 0.7px rgba(163, 93, 255, 0.35); }\n    .page-title .page-title-icon i {\n      font-size: .9375rem;\n      line-height: 36px; }\n\n/* Footer */\n.footer {\n  background: #000000;\n  color: color(dark);\n  padding: 20px 1rem;\n  transition: all 0.25s ease;\n  -moz-transition: all 0.25s ease;\n  -webkit-transition: all 0.25s ease;\n  -ms-transition: all 0.25s ease;\n  font-size: calc(0.875rem - 0.05rem);\n  font-weight: 300; }\n  .footer a {\n    color: #00d25b;\n    font-size: inherit; }\n  @media (max-width: 991px) {\n    .footer {\n      margin-left: 0;\n      width: 100%; } }\n\n/* Utilities */\n.grid-margin {\n  margin-bottom: 1.5rem; }\n\n@media (min-width: 576px) {\n  .grid-margin-sm-0 {\n    margin-bottom: 0; } }\n\n@media (min-width: 768px) {\n  .grid-margin-md-0 {\n    margin-bottom: 0; } }\n\n@media (min-width: 992px) {\n  .grid-margin-lg-0 {\n    margin-bottom: 0; } }\n\n@media (min-width: 1200px) {\n  .grid-margin-xl-0 {\n    margin-bottom: 0; } }\n\n.img-lg {\n  width: 92px;\n  height: 92px; }\n\n.img-sm {\n  width: 43px;\n  height: 43px; }\n\n.img-xs {\n  width: 35px;\n  height: 35px; }\n\n.img-ss {\n  width: 26px;\n  height: 26px; }\n\n.stretch-card {\n  display: -webkit-flex;\n  display: flex;\n  -webkit-align-items: stretch;\n  align-items: stretch;\n  -webkit-justify-content: stretch;\n  justify-content: stretch; }\n  .stretch-card > .card {\n    width: 100%;\n    min-width: 100%; }\n\n@media (min-width: 576px) {\n  .border-right-sm {\n    border-right: 1px solid #2c2e33; } }\n\n@media (min-width: 768px) {\n  .border-right-md {\n    border-right: 1px solid #2c2e33; } }\n\n@media (min-width: 992px) {\n  .border-right-lg {\n    border-right: 1px solid #2c2e33; } }\n\n@media (min-width: 576px) {\n  .border-left-sm {\n    border-left: 1px solid #2c2e33; } }\n\n@media (min-width: 768px) {\n  .border-left-md {\n    border-left: 1px solid #2c2e33; } }\n\n@media (min-width: 992px) {\n  .border-left-lg {\n    border-left: 1px solid #2c2e33; } }\n\n.text-gray, .card .card-subtitle {\n  color: #8c8c8c; }\n\n.text-black {\n  color: #000000; }\n\n.text-small {\n  font-size: 12px; }\n\n.flex-grow {\n  flex-grow: 1; }\n\n.font-weight-light {\n  font-weight: 300; }\n\n.font-weight-medium {\n  font-weight: 500; }\n\n.font-weight-bold {\n  font-weight: 700; }\n\n.font-weight-normal {\n  font-weight: normal; }\n\n.bg-gray-dark {\n  background: color(gray-dark); }\n\n.text-twitter {\n  color: #2caae1; }\n\n.text-facebook {\n  color: #3b579d; }\n\n.text-google {\n  color: #dc4a38; }\n\n.text-linkedin {\n  color: #0177b5; }\n\n.text-pinterest {\n  color: #cc2127; }\n\n.text-youtube {\n  color: #e52d27; }\n\n.text-github {\n  color: #333333; }\n\n.text-behance {\n  color: #1769ff; }\n\n.text-dribbble {\n  color: #ea4c89; }\n\n.text-reddit {\n  color: #ff4500; }\n\n/* Demo Styles */\n.template-demo .slider-wrap {\n  height: 100px; }\n\n.template-demo .progress {\n  margin-top: 1.5rem; }\n\n.template-demo > h2, .template-demo > .h2,\n.template-demo > h3,\n.template-demo > .h3,\n.template-demo > h4,\n.template-demo > .h4,\n.template-demo > h5,\n.template-demo > .h5,\n.template-demo > h6,\n.template-demo > .h6,\n.template-demo > h1,\n.template-demo > .h1 {\n  border-top: 1px solid #2c2e33;\n  padding: 0.5rem 0 0; }\n\n.template-demo .ul-slider.noUi-horizontal {\n  margin-top: 2rem; }\n\n.template-demo .ul-slider.noUi-vertical {\n  margin-right: 2rem; }\n\n.template-demo > .dropdown {\n  display: inline-block;\n  margin-bottom: 0.5rem; }\n\n.template-demo nav .breadcrumb {\n  margin-bottom: 1.375rem; }\n\n.template-demo nav:last-child .breadcrumb {\n  margin-bottom: 0; }\n\n.template-demo .editable-form > .form-group {\n  border-bottom: 1px solid #2c2e33;\n  padding-bottom: 0.8rem;\n  margin-bottom: 0.8rem; }\n\n.template-demo .circle-progress {\n  padding: 15px; }\n\n.demo-modal {\n  position: static;\n  display: block; }\n  .demo-modal .modal-dialog.modal-lg {\n    max-width: 100%; }\n\n.loader-demo-box {\n  width: 100%;\n  height: 200px; }\n\n.dropdown-menu-static-demo {\n  height: 250px;\n  margin-bottom: 20px; }\n\n.rounded-legend ul li {\n  list-style-type: none;\n  color: #6c7293;\n  font-size: .75rem; }\n  .rounded-legend ul li .legend-dots {\n    width: 1rem;\n    height: 1rem;\n    border-radius: 100%;\n    display: inline-block;\n    vertical-align: text-bottom;\n    margin-right: .5rem; }\n    .rtl .rounded-legend ul li .legend-dots {\n      margin-left: .5rem; }\n\n.rounded-legend.legend-horizontal {\n  display: -webkit-flex;\n  display: flex; }\n  .rounded-legend.legend-horizontal ul li {\n    display: inline-block;\n    margin-right: 1.5rem; }\n    .rtl .rounded-legend.legend-horizontal ul li {\n      margin-right: auto;\n      margin-left: 1.5rem; }\n\n.rounded-legend.legend-top-right ul {\n  float: right; }\n  .rtl .rounded-legend.legend-top-right ul {\n    float: left; }\n\n.rounded-legend.legend-vertical ul li {\n  margin-top: 1rem; }\n\n#proBanner {\n  position: fixed;\n  left: 0;\n  top: 0;\n  width: 100%;\n  z-index: 9999;\n  background: #000; }\n  #proBanner .card-body-padding {\n    padding-top: .55rem;\n    padding-bottom: .55rem;\n    padding-left: 2rem;\n    padding-right: 2rem; }\n    @media (max-width: 766px) {\n      #proBanner .card-body-padding {\n        padding-left: 1rem;\n        padding-right: 1rem; } }\n  #proBanner .buy-now-text {\n    color: #ffffff; }\n    @media (max-width: 766px) {\n      #proBanner .buy-now-text {\n        font-size: 10px;\n        line-height: 1.5; } }\n  #proBanner .btn.buy-now-btn, #proBanner .fc button.buy-now-btn, .fc #proBanner button.buy-now-btn, #proBanner .ajax-upload-dragdrop .buy-now-btn.ajax-file-upload, .ajax-upload-dragdrop #proBanner .buy-now-btn.ajax-file-upload, #proBanner .swal2-modal .swal2-buttonswrapper .buy-now-btn.swal2-styled, .swal2-modal .swal2-buttonswrapper #proBanner .buy-now-btn.swal2-styled {\n    background: transparent;\n    color: #88b6ff;\n    border-radius: 10px;\n    padding: 1rem 0;\n    border-radius: 4px;\n    font-weight: bold;\n    font-size: 1rem; }\n    @media (max-width: 766px) {\n      #proBanner .btn.buy-now-btn, #proBanner .fc button.buy-now-btn, .fc #proBanner button.buy-now-btn, #proBanner .ajax-upload-dragdrop .buy-now-btn.ajax-file-upload, .ajax-upload-dragdrop #proBanner .buy-now-btn.ajax-file-upload, #proBanner .swal2-modal .swal2-buttonswrapper .buy-now-btn.swal2-styled, .swal2-modal .swal2-buttonswrapper #proBanner .buy-now-btn.swal2-styled {\n        min-width: 80px;\n        padding: 1rem .5rem;\n        font-size: 12px; } }\n  #proBanner .btn#bannerClose i, #proBanner .fc button#bannerClose i, .fc #proBanner button#bannerClose i, #proBanner .ajax-upload-dragdrop #bannerClose.ajax-file-upload i, .ajax-upload-dragdrop #proBanner #bannerClose.ajax-file-upload i, #proBanner .swal2-modal .swal2-buttonswrapper #bannerClose.swal2-styled i, .swal2-modal .swal2-buttonswrapper #proBanner #bannerClose.swal2-styled i {\n    margin-right: 1rem;\n    font-size: 1.25rem; }\n    @media (max-width: 766px) {\n      #proBanner .btn#bannerClose i, #proBanner .fc button#bannerClose i, .fc #proBanner button#bannerClose i, #proBanner .ajax-upload-dragdrop #bannerClose.ajax-file-upload i, .ajax-upload-dragdrop #proBanner #bannerClose.ajax-file-upload i, #proBanner .swal2-modal .swal2-buttonswrapper #bannerClose.swal2-styled i, .swal2-modal .swal2-buttonswrapper #proBanner #bannerClose.swal2-styled i {\n        font-size: 1rem;\n        margin-right: 0; } }\n  #proBanner a {\n    text-decoration: none; }\n    #proBanner a i {\n      font-size: 1.25rem; }\n      @media (max-width: 766px) {\n        #proBanner a i {\n          font-size: 1rem; } }\n\n.proBanner-padding-top {\n  padding-top: 60px !important; }\n\n/*-------------------------------------------------------------------*/\n/* === Components === */\n/* Badges */\n.badge {\n  border-radius: 0.25rem;\n  font-size: 0.75rem;\n  font-weight: initial;\n  line-height: 1;\n  padding: 0.5rem 0.7rem;\n  font-weight: 500; }\n  .badge.badge-pill {\n    border-radius: 10rem; }\n\n/*Badge variations*/\n.badge-primary {\n  background: #0090e7;\n  color: #ffffff; }\n\n.badge-secondary {\n  background: #e4eaec;\n  color: #ffffff; }\n\n.badge-success, .preview-list .preview-item .preview-thumbnail .badge.badge-online {\n  background: #00d25b;\n  color: #ffffff; }\n\n.badge-info, .preview-list .preview-item .preview-thumbnail .badge.badge-offline {\n  background: #8f5fe8;\n  color: #ffffff; }\n\n.badge-warning, .preview-list .preview-item .preview-thumbnail .badge.badge-busy {\n  background: #ffab00;\n  color: #ffffff; }\n\n.badge-danger {\n  background: #fc424a;\n  color: #ffffff; }\n\n.badge-light {\n  background: #ffffff;\n  color: #ffffff; }\n\n.badge-dark {\n  background: #0d0d0d;\n  color: #ffffff; }\n\n/*Badge outlined variations*/\n.badge-outline-primary {\n  color: #0090e7;\n  border: 1px solid #0090e7; }\n\n.badge-outline-secondary {\n  color: #e4eaec;\n  border: 1px solid #e4eaec; }\n\n.badge-outline-success {\n  color: #00d25b;\n  border: 1px solid #00d25b; }\n\n.badge-outline-info {\n  color: #8f5fe8;\n  border: 1px solid #8f5fe8; }\n\n.badge-outline-warning {\n  color: #ffab00;\n  border: 1px solid #ffab00; }\n\n.badge-outline-danger {\n  color: #fc424a;\n  border: 1px solid #fc424a; }\n\n.badge-outline-light {\n  color: #ffffff;\n  border: 1px solid #ffffff; }\n\n.badge-outline-dark {\n  color: #0d0d0d;\n  border: 1px solid #0d0d0d; }\n\n/* Buttons */\n.btn, .fc button, .ajax-upload-dragdrop .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-cancel {\n  font-size: 0.9375rem;\n  line-height: 1;\n  font-weight: normal;\n  /* Buttons with only icons */\n  /* Buttons with icon and text */ }\n  .btn i, .fc button i, .ajax-upload-dragdrop .ajax-file-upload i, .swal2-modal .swal2-buttonswrapper .swal2-styled i, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm i, .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-cancel i {\n    margin-right: .3125rem; }\n  .btn.btn-rounded, .fc button.btn-rounded, .ajax-upload-dragdrop .btn-rounded.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-rounded.swal2-styled {\n    border-radius: 50px; }\n  .btn.btn-fw, .fc button.btn-fw, .ajax-upload-dragdrop .btn-fw.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-fw.swal2-styled {\n    min-width: 150px; }\n  .btn.btn-sm, .btn-group-sm > .btn, .fc .btn-group-sm > button, .ajax-upload-dragdrop .btn-group-sm > .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group-sm > .swal2-styled, .fc button, .ajax-upload-dragdrop .btn-sm.ajax-file-upload, .ajax-upload-dragdrop .fc button.ajax-file-upload, .fc .ajax-upload-dragdrop button.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-sm.swal2-styled, .swal2-modal .swal2-buttonswrapper .fc button.swal2-styled, .fc .swal2-modal .swal2-buttonswrapper button.swal2-styled {\n    font-size: 0.875rem; }\n  .btn.btn-lg, .btn-group-lg > .btn, .fc .btn-group-lg > button, .ajax-upload-dragdrop .btn-group-lg > .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group-lg > .swal2-styled, .fc button.btn-lg, .ajax-upload-dragdrop .btn-lg.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-lg.swal2-styled {\n    font-size: 0.875rem; }\n  .btn.btn-xs, .fc button.btn-xs, .fc .editable-container.editable-inline .editableform .control-group .editable-buttons button.editable-submit, .editable-container.editable-inline .editableform .control-group .editable-buttons .fc button.editable-submit, .fc .editable-container.editable-inline .editableform .control-group .editable-buttons button.editable-cancel, .editable-container.editable-inline .editableform .control-group .editable-buttons .fc button.editable-cancel, .ajax-upload-dragdrop .btn-xs.ajax-file-upload, .ajax-upload-dragdrop .editable-container.editable-inline .editableform .control-group .editable-buttons .ajax-file-upload.editable-submit, .editable-container.editable-inline .editableform .control-group .editable-buttons .ajax-upload-dragdrop .ajax-file-upload.editable-submit, .ajax-upload-dragdrop .editable-container.editable-inline .editableform .control-group .editable-buttons .ajax-file-upload.editable-cancel, .editable-container.editable-inline .editableform .control-group .editable-buttons .ajax-upload-dragdrop .ajax-file-upload.editable-cancel, .swal2-modal .swal2-buttonswrapper .btn-xs.swal2-styled, .swal2-modal .swal2-buttonswrapper .editable-container.editable-inline .editableform .control-group .editable-buttons .swal2-styled.editable-submit, .editable-container.editable-inline .editableform .control-group .editable-buttons .swal2-modal .swal2-buttonswrapper .swal2-styled.editable-submit, .swal2-modal .swal2-buttonswrapper .editable-container.editable-inline .editableform .control-group .editable-buttons .swal2-styled.editable-cancel, .editable-container.editable-inline .editableform .control-group .editable-buttons .swal2-modal .swal2-buttonswrapper .swal2-styled.editable-cancel, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn.editable-submit, .editable-container.editable-inline .editableform .control-group .editable-buttons .btn.editable-cancel {\n    padding: 0.5rem 0.75rem;\n    font-size: 0.625rem; }\n  .btn.btn-icon, .fc button.btn-icon, .ajax-upload-dragdrop .btn-icon.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-icon.swal2-styled {\n    width: 42px;\n    height: 42px;\n    padding: 0; }\n  .btn.btn-icon-text .btn-icon-prepend, .fc button.btn-icon-text .btn-icon-prepend, .ajax-upload-dragdrop .btn-icon-text.ajax-file-upload .btn-icon-prepend, .swal2-modal .swal2-buttonswrapper .btn-icon-text.swal2-styled .btn-icon-prepend {\n    margin-right: .5rem; }\n  .btn.btn-icon-text .btn-icon-append, .fc button.btn-icon-text .btn-icon-append, .ajax-upload-dragdrop .btn-icon-text.ajax-file-upload .btn-icon-append, .swal2-modal .swal2-buttonswrapper .btn-icon-text.swal2-styled .btn-icon-append {\n    margin-left: .5rem; }\n  .btn.btn-social-icon, .fc button.btn-social-icon, .ajax-upload-dragdrop .btn-social-icon.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-social-icon.swal2-styled {\n    width: 50px;\n    height: 50px;\n    padding: 0; }\n  .btn.get-started-btn, .fc button.get-started-btn, .ajax-upload-dragdrop .get-started-btn.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .get-started-btn.swal2-styled {\n    font-size: 0.75rem;\n    border: 1px solid rgba(255, 255, 255, 0.3);\n    font-weight: 500;\n    padding: 0.9375rem 1.0625rem; }\n    @media (max-width: 576px) {\n      .btn.get-started-btn, .fc button.get-started-btn, .ajax-upload-dragdrop .get-started-btn.ajax-file-upload, .swal2-modal .swal2-buttonswrapper .get-started-btn.swal2-styled {\n        font-size: 0.6rem;\n        padding: 0.4375rem 0.6625rem; } }\n\n.btn-group .btn + .btn, .fc .fc-button-group .btn + .btn, .btn-group .fc button + .btn, .fc .btn-group button + .btn, .fc .fc-button-group button + .btn, .btn-group .ajax-upload-dragdrop .ajax-file-upload + .btn, .ajax-upload-dragdrop .btn-group .ajax-file-upload + .btn, .fc .fc-button-group .ajax-upload-dragdrop .ajax-file-upload + .btn, .ajax-upload-dragdrop .fc .fc-button-group .ajax-file-upload + .btn, .btn-group .swal2-modal .swal2-buttonswrapper .swal2-styled + .btn, .swal2-modal .swal2-buttonswrapper .btn-group .swal2-styled + .btn, .fc .fc-button-group .swal2-modal .swal2-buttonswrapper .swal2-styled + .btn, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group .swal2-styled + .btn, .btn-group .fc .btn + button, .fc .btn-group .btn + button, .fc .fc-button-group .btn + button, .btn-group .fc button + button, .fc .btn-group button + button, .fc .fc-button-group button + button, .btn-group .ajax-upload-dragdrop .fc .ajax-file-upload + button, .fc .btn-group .ajax-upload-dragdrop .ajax-file-upload + button, .ajax-upload-dragdrop .btn-group .fc .ajax-file-upload + button, .fc .ajax-upload-dragdrop .btn-group .ajax-file-upload + button, .fc .fc-button-group .ajax-upload-dragdrop .ajax-file-upload + button, .ajax-upload-dragdrop .fc .fc-button-group .ajax-file-upload + button, .btn-group .swal2-modal .swal2-buttonswrapper .fc .swal2-styled + button, .fc .btn-group .swal2-modal .swal2-buttonswrapper .swal2-styled + button, .swal2-modal .swal2-buttonswrapper .btn-group .fc .swal2-styled + button, .fc .swal2-modal .swal2-buttonswrapper .btn-group .swal2-styled + button, .fc .fc-button-group .swal2-modal .swal2-buttonswrapper .swal2-styled + button, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group .swal2-styled + button, .btn-group .ajax-upload-dragdrop .btn + .ajax-file-upload, .ajax-upload-dragdrop .btn-group .btn + .ajax-file-upload, .fc .fc-button-group .ajax-upload-dragdrop .btn + .ajax-file-upload, .ajax-upload-dragdrop .fc .fc-button-group .btn + .ajax-file-upload, .btn-group .fc .ajax-upload-dragdrop button + .ajax-file-upload, .ajax-upload-dragdrop .btn-group .fc button + .ajax-file-upload, .fc .btn-group .ajax-upload-dragdrop button + .ajax-file-upload, .ajax-upload-dragdrop .fc .btn-group button + .ajax-file-upload, .fc .fc-button-group .ajax-upload-dragdrop button + .ajax-file-upload, .ajax-upload-dragdrop .fc .fc-button-group button + .ajax-file-upload, .btn-group .ajax-upload-dragdrop .ajax-file-upload + .ajax-file-upload, .ajax-upload-dragdrop .btn-group .ajax-file-upload + .ajax-file-upload, .fc .fc-button-group .ajax-upload-dragdrop .ajax-file-upload + .ajax-file-upload, .ajax-upload-dragdrop .fc .fc-button-group .ajax-file-upload + .ajax-file-upload, .btn-group .swal2-modal .swal2-buttonswrapper .ajax-upload-dragdrop .swal2-styled + .ajax-file-upload, .ajax-upload-dragdrop .btn-group .swal2-modal .swal2-buttonswrapper .swal2-styled + .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .btn-group .ajax-upload-dragdrop .swal2-styled + .ajax-file-upload, .ajax-upload-dragdrop .swal2-modal .swal2-buttonswrapper .btn-group .swal2-styled + .ajax-file-upload, .fc .fc-button-group .swal2-modal .swal2-buttonswrapper .ajax-upload-dragdrop .swal2-styled + .ajax-file-upload, .ajax-upload-dragdrop .fc .fc-button-group .swal2-modal .swal2-buttonswrapper .swal2-styled + .ajax-file-upload, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group .ajax-upload-dragdrop .swal2-styled + .ajax-file-upload, .ajax-upload-dragdrop .swal2-modal .swal2-buttonswrapper .fc .fc-button-group .swal2-styled + .ajax-file-upload, .btn-group .swal2-modal .swal2-buttonswrapper .btn + .swal2-styled, .swal2-modal .swal2-buttonswrapper .btn-group .btn + .swal2-styled, .fc .fc-button-group .swal2-modal .swal2-buttonswrapper .btn + .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group .btn + .swal2-styled, .btn-group .fc .swal2-modal .swal2-buttonswrapper button + .swal2-styled, .swal2-modal .swal2-buttonswrapper .btn-group .fc button + .swal2-styled, .fc .btn-group .swal2-modal .swal2-buttonswrapper button + .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .btn-group button + .swal2-styled, .fc .fc-button-group .swal2-modal .swal2-buttonswrapper button + .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group button + .swal2-styled, .btn-group .ajax-upload-dragdrop .swal2-modal .swal2-buttonswrapper .ajax-file-upload + .swal2-styled, .swal2-modal .swal2-buttonswrapper .btn-group .ajax-upload-dragdrop .ajax-file-upload + .swal2-styled, .ajax-upload-dragdrop .btn-group .swal2-modal .swal2-buttonswrapper .ajax-file-upload + .swal2-styled, .swal2-modal .swal2-buttonswrapper .ajax-upload-dragdrop .btn-group .ajax-file-upload + .swal2-styled, .fc .fc-button-group .ajax-upload-dragdrop .swal2-modal .swal2-buttonswrapper .ajax-file-upload + .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group .ajax-upload-dragdrop .ajax-file-upload + .swal2-styled, .ajax-upload-dragdrop .fc .fc-button-group .swal2-modal .swal2-buttonswrapper .ajax-file-upload + .swal2-styled, .swal2-modal .swal2-buttonswrapper .ajax-upload-dragdrop .fc .fc-button-group .ajax-file-upload + .swal2-styled, .btn-group .swal2-modal .swal2-buttonswrapper .swal2-styled + .swal2-styled, .swal2-modal .swal2-buttonswrapper .btn-group .swal2-styled + .swal2-styled, .fc .fc-button-group .swal2-modal .swal2-buttonswrapper .swal2-styled + .swal2-styled, .swal2-modal .swal2-buttonswrapper .fc .fc-button-group .swal2-styled + .swal2-styled {\n  border-left: 0; }\n\n/*social buttons*/\n.btn-twitter {\n  background: #2caae1;\n  color: #ffffff; }\n  .btn-twitter:hover, .btn-twitter:focus {\n    background: #1b8dbf;\n    color: #ffffff; }\n  .btn-twitter.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #59bce7; }\n    .btn-twitter.btn-social-icon-text i {\n      background: #2caae1;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-twitter {\n  border: 1px solid #2caae1;\n  color: #2caae1; }\n  .btn-outline-twitter:hover {\n    background: #2caae1;\n    color: #ffffff; }\n\n.btn-facebook {\n  background: #3b579d;\n  color: #ffffff; }\n  .btn-facebook:hover, .btn-facebook:focus {\n    background: #2d4278;\n    color: #ffffff; }\n  .btn-facebook.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #4e6ebd; }\n    .btn-facebook.btn-social-icon-text i {\n      background: #3b579d;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-facebook {\n  border: 1px solid #3b579d;\n  color: #3b579d; }\n  .btn-outline-facebook:hover {\n    background: #3b579d;\n    color: #ffffff; }\n\n.btn-google {\n  background: #dc4a38;\n  color: #ffffff; }\n  .btn-google:hover, .btn-google:focus {\n    background: #bf3322;\n    color: #ffffff; }\n  .btn-google.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #e47163; }\n    .btn-google.btn-social-icon-text i {\n      background: #dc4a38;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-google {\n  border: 1px solid #dc4a38;\n  color: #dc4a38; }\n  .btn-outline-google:hover {\n    background: #dc4a38;\n    color: #ffffff; }\n\n.btn-linkedin {\n  background: #0177b5;\n  color: #ffffff; }\n  .btn-linkedin:hover, .btn-linkedin:focus {\n    background: #015682;\n    color: #ffffff; }\n  .btn-linkedin.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #0198e8; }\n    .btn-linkedin.btn-social-icon-text i {\n      background: #0177b5;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-linkedin {\n  border: 1px solid #0177b5;\n  color: #0177b5; }\n  .btn-outline-linkedin:hover {\n    background: #0177b5;\n    color: #ffffff; }\n\n.btn-pinterest {\n  background: #cc2127;\n  color: #ffffff; }\n  .btn-pinterest:hover, .btn-pinterest:focus {\n    background: #a01a1f;\n    color: #ffffff; }\n  .btn-pinterest.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #e04046; }\n    .btn-pinterest.btn-social-icon-text i {\n      background: #cc2127;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-pinterest {\n  border: 1px solid #cc2127;\n  color: #cc2127; }\n  .btn-outline-pinterest:hover {\n    background: #cc2127;\n    color: #ffffff; }\n\n.btn-youtube {\n  background: #e52d27;\n  color: #ffffff; }\n  .btn-youtube:hover, .btn-youtube:focus {\n    background: #c21d17;\n    color: #ffffff; }\n  .btn-youtube.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #ea5955; }\n    .btn-youtube.btn-social-icon-text i {\n      background: #e52d27;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-youtube {\n  border: 1px solid #e52d27;\n  color: #e52d27; }\n  .btn-outline-youtube:hover {\n    background: #e52d27;\n    color: #ffffff; }\n\n.btn-github {\n  background: #333333;\n  color: #ffffff; }\n  .btn-github:hover, .btn-github:focus {\n    background: #1a1a1a;\n    color: #ffffff; }\n  .btn-github.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #4d4d4d; }\n    .btn-github.btn-social-icon-text i {\n      background: #333333;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-github {\n  border: 1px solid #333333;\n  color: #333333; }\n  .btn-outline-github:hover {\n    background: #333333;\n    color: #ffffff; }\n\n.btn-behance {\n  background: #1769ff;\n  color: #ffffff; }\n  .btn-behance:hover, .btn-behance:focus {\n    background: #0050e3;\n    color: #ffffff; }\n  .btn-behance.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #4a8aff; }\n    .btn-behance.btn-social-icon-text i {\n      background: #1769ff;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-behance {\n  border: 1px solid #1769ff;\n  color: #1769ff; }\n  .btn-outline-behance:hover {\n    background: #1769ff;\n    color: #ffffff; }\n\n.btn-dribbble {\n  background: #ea4c89;\n  color: #ffffff; }\n  .btn-dribbble:hover, .btn-dribbble:focus {\n    background: #e51e6b;\n    color: #ffffff; }\n  .btn-dribbble.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #ef7aa7; }\n    .btn-dribbble.btn-social-icon-text i {\n      background: #ea4c89;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-dribbble {\n  border: 1px solid #ea4c89;\n  color: #ea4c89; }\n  .btn-outline-dribbble:hover {\n    background: #ea4c89;\n    color: #ffffff; }\n\n.btn-reddit {\n  background: #ff4500;\n  color: #ffffff; }\n  .btn-reddit:hover, .btn-reddit:focus {\n    background: #cc3700;\n    color: #ffffff; }\n  .btn-reddit.btn-social-icon-text {\n    padding: 0 1.5rem 0 0;\n    background: #ff6a33; }\n    .btn-reddit.btn-social-icon-text i {\n      background: #ff4500;\n      padding: .75rem;\n      display: inline-block;\n      margin-right: 1.5rem; }\n\n.btn-outline-reddit {\n  border: 1px solid #ff4500;\n  color: #ff4500; }\n  .btn-outline-reddit:hover {\n    background: #ff4500;\n    color: #ffffff; }\n\n/* inverse buttons */\n.btn-inverse-primary {\n  background-color: rgba(0, 144, 231, 0.2);\n  background-image: none;\n  border-color: rgba(0, 144, 231, 0); }\n  .btn-inverse-primary:not(.btn-inverse-light) {\n    color: #0090e7; }\n  .btn-inverse-primary:hover {\n    color: #ffffff;\n    background-color: #0090e7;\n    border-color: #0090e7; }\n  .btn-inverse-primary.focus, .btn-inverse-primary:focus {\n    box-shadow: 0 0 0 3px rgba(0, 144, 231, 0.5); }\n  .btn-inverse-primary.disabled, .btn-inverse-primary:disabled {\n    color: #0090e7;\n    background-color: transparent; }\n  .btn-inverse-primary.active, .btn-inverse-primary:active,\n  .show > .btn-inverse-primary.dropdown-toggle {\n    color: #ffffff;\n    background-color: #0090e7;\n    border-color: #0090e7; }\n\n.btn-primary:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-primary:not(.btn-light):not(.btn-secondary):hover, .btn-primary:not(.btn-light):not(.btn-secondary):focus, .btn-primary:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-primary:not(.btn-light):not(.btn-secondary):focus, .btn-primary:not(.btn-light):not(.btn-secondary):active {\n    background: #0090e7;\n    border-color: #0090e7; }\n\n.btn-inverse-secondary {\n  background-color: rgba(228, 234, 236, 0.2);\n  background-image: none;\n  border-color: rgba(228, 234, 236, 0); }\n  .btn-inverse-secondary:not(.btn-inverse-light) {\n    color: #e4eaec; }\n  .btn-inverse-secondary:hover {\n    color: #ffffff;\n    background-color: #e4eaec;\n    border-color: #e4eaec; }\n  .btn-inverse-secondary.focus, .btn-inverse-secondary:focus {\n    box-shadow: 0 0 0 3px rgba(228, 234, 236, 0.5); }\n  .btn-inverse-secondary.disabled, .btn-inverse-secondary:disabled {\n    color: #e4eaec;\n    background-color: transparent; }\n  .btn-inverse-secondary.active, .btn-inverse-secondary:active,\n  .show > .btn-inverse-secondary.dropdown-toggle {\n    color: #ffffff;\n    background-color: #e4eaec;\n    border-color: #e4eaec; }\n\n.btn-secondary:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-secondary:not(.btn-light):not(.btn-secondary):hover, .btn-secondary:not(.btn-light):not(.btn-secondary):focus, .btn-secondary:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-secondary:not(.btn-light):not(.btn-secondary):focus, .btn-secondary:not(.btn-light):not(.btn-secondary):active {\n    background: #e4eaec;\n    border-color: #e4eaec; }\n\n.btn-inverse-success {\n  background-color: rgba(0, 210, 91, 0.2);\n  background-image: none;\n  border-color: rgba(0, 210, 91, 0); }\n  .btn-inverse-success:not(.btn-inverse-light) {\n    color: #00d25b; }\n  .btn-inverse-success:hover {\n    color: #ffffff;\n    background-color: #00d25b;\n    border-color: #00d25b; }\n  .btn-inverse-success.focus, .btn-inverse-success:focus {\n    box-shadow: 0 0 0 3px rgba(0, 210, 91, 0.5); }\n  .btn-inverse-success.disabled, .btn-inverse-success:disabled {\n    color: #00d25b;\n    background-color: transparent; }\n  .btn-inverse-success.active, .btn-inverse-success:active,\n  .show > .btn-inverse-success.dropdown-toggle {\n    color: #ffffff;\n    background-color: #00d25b;\n    border-color: #00d25b; }\n\n.btn-success:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-success:not(.btn-light):not(.btn-secondary):hover, .btn-success:not(.btn-light):not(.btn-secondary):focus, .btn-success:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-success:not(.btn-light):not(.btn-secondary):focus, .btn-success:not(.btn-light):not(.btn-secondary):active {\n    background: #00d25b;\n    border-color: #00d25b; }\n\n.btn-inverse-info {\n  background-color: rgba(143, 95, 232, 0.2);\n  background-image: none;\n  border-color: rgba(143, 95, 232, 0); }\n  .btn-inverse-info:not(.btn-inverse-light) {\n    color: #8f5fe8; }\n  .btn-inverse-info:hover {\n    color: #ffffff;\n    background-color: #8f5fe8;\n    border-color: #8f5fe8; }\n  .btn-inverse-info.focus, .btn-inverse-info:focus {\n    box-shadow: 0 0 0 3px rgba(143, 95, 232, 0.5); }\n  .btn-inverse-info.disabled, .btn-inverse-info:disabled {\n    color: #8f5fe8;\n    background-color: transparent; }\n  .btn-inverse-info.active, .btn-inverse-info:active,\n  .show > .btn-inverse-info.dropdown-toggle {\n    color: #ffffff;\n    background-color: #8f5fe8;\n    border-color: #8f5fe8; }\n\n.btn-info:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-info:not(.btn-light):not(.btn-secondary):hover, .btn-info:not(.btn-light):not(.btn-secondary):focus, .btn-info:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-info:not(.btn-light):not(.btn-secondary):focus, .btn-info:not(.btn-light):not(.btn-secondary):active {\n    background: #8f5fe8;\n    border-color: #8f5fe8; }\n\n.btn-inverse-warning {\n  background-color: rgba(255, 171, 0, 0.2);\n  background-image: none;\n  border-color: rgba(255, 171, 0, 0); }\n  .btn-inverse-warning:not(.btn-inverse-light) {\n    color: #ffab00; }\n  .btn-inverse-warning:hover {\n    color: #ffffff;\n    background-color: #ffab00;\n    border-color: #ffab00; }\n  .btn-inverse-warning.focus, .btn-inverse-warning:focus {\n    box-shadow: 0 0 0 3px rgba(255, 171, 0, 0.5); }\n  .btn-inverse-warning.disabled, .btn-inverse-warning:disabled {\n    color: #ffab00;\n    background-color: transparent; }\n  .btn-inverse-warning.active, .btn-inverse-warning:active,\n  .show > .btn-inverse-warning.dropdown-toggle {\n    color: #ffffff;\n    background-color: #ffab00;\n    border-color: #ffab00; }\n\n.btn-warning:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-warning:not(.btn-light):not(.btn-secondary):hover, .btn-warning:not(.btn-light):not(.btn-secondary):focus, .btn-warning:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-warning:not(.btn-light):not(.btn-secondary):focus, .btn-warning:not(.btn-light):not(.btn-secondary):active {\n    background: #ffab00;\n    border-color: #ffab00; }\n\n.btn-inverse-danger {\n  background-color: rgba(252, 66, 74, 0.2);\n  background-image: none;\n  border-color: rgba(252, 66, 74, 0); }\n  .btn-inverse-danger:not(.btn-inverse-light) {\n    color: #fc424a; }\n  .btn-inverse-danger:hover {\n    color: #ffffff;\n    background-color: #fc424a;\n    border-color: #fc424a; }\n  .btn-inverse-danger.focus, .btn-inverse-danger:focus {\n    box-shadow: 0 0 0 3px rgba(252, 66, 74, 0.5); }\n  .btn-inverse-danger.disabled, .btn-inverse-danger:disabled {\n    color: #fc424a;\n    background-color: transparent; }\n  .btn-inverse-danger.active, .btn-inverse-danger:active,\n  .show > .btn-inverse-danger.dropdown-toggle {\n    color: #ffffff;\n    background-color: #fc424a;\n    border-color: #fc424a; }\n\n.btn-danger:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-danger:not(.btn-light):not(.btn-secondary):hover, .btn-danger:not(.btn-light):not(.btn-secondary):focus, .btn-danger:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-danger:not(.btn-light):not(.btn-secondary):focus, .btn-danger:not(.btn-light):not(.btn-secondary):active {\n    background: #fc424a;\n    border-color: #fc424a; }\n\n.btn-inverse-light {\n  background-color: rgba(255, 255, 255, 0.2);\n  background-image: none;\n  border-color: rgba(255, 255, 255, 0); }\n  .btn-inverse-light:not(.btn-inverse-light) {\n    color: #ffffff; }\n  .btn-inverse-light:hover {\n    color: #ffffff;\n    background-color: #ffffff;\n    border-color: #ffffff; }\n  .btn-inverse-light.focus, .btn-inverse-light:focus {\n    box-shadow: 0 0 0 3px rgba(255, 255, 255, 0.5); }\n  .btn-inverse-light.disabled, .btn-inverse-light:disabled {\n    color: #ffffff;\n    background-color: transparent; }\n  .btn-inverse-light.active, .btn-inverse-light:active,\n  .show > .btn-inverse-light.dropdown-toggle {\n    color: #ffffff;\n    background-color: #ffffff;\n    border-color: #ffffff; }\n\n.btn-light:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-light:not(.btn-light):not(.btn-secondary):hover, .btn-light:not(.btn-light):not(.btn-secondary):focus, .btn-light:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-light:not(.btn-light):not(.btn-secondary):focus, .btn-light:not(.btn-light):not(.btn-secondary):active {\n    background: #ffffff;\n    border-color: #ffffff; }\n\n.btn-inverse-dark {\n  background-color: rgba(13, 13, 13, 0.2);\n  background-image: none;\n  border-color: rgba(13, 13, 13, 0); }\n  .btn-inverse-dark:not(.btn-inverse-light) {\n    color: #0d0d0d; }\n  .btn-inverse-dark:hover {\n    color: #ffffff;\n    background-color: #0d0d0d;\n    border-color: #0d0d0d; }\n  .btn-inverse-dark.focus, .btn-inverse-dark:focus {\n    box-shadow: 0 0 0 3px rgba(13, 13, 13, 0.5); }\n  .btn-inverse-dark.disabled, .btn-inverse-dark:disabled {\n    color: #0d0d0d;\n    background-color: transparent; }\n  .btn-inverse-dark.active, .btn-inverse-dark:active,\n  .show > .btn-inverse-dark.dropdown-toggle {\n    color: #ffffff;\n    background-color: #0d0d0d;\n    border-color: #0d0d0d; }\n\n.btn-dark:not(.btn-light):not(.btn-secondary) {\n  color: #ffffff; }\n  .btn-dark:not(.btn-light):not(.btn-secondary):hover, .btn-dark:not(.btn-light):not(.btn-secondary):focus, .btn-dark:not(.btn-light):not(.btn-secondary):active {\n    color: #ffffff; }\n  .btn-dark:not(.btn-light):not(.btn-secondary):focus, .btn-dark:not(.btn-light):not(.btn-secondary):active {\n    background: #0d0d0d;\n    border-color: #0d0d0d; }\n\n/* Cards */\n.card {\n  border-radius: 0.25rem; }\n  .card .card-body {\n    padding: 1.75rem 1.5625rem; }\n    .card .card-body + .card-body {\n      padding-top: 1rem; }\n  .card .card-title {\n    color: #ffffff;\n    margin-bottom: 1.125rem;\n    text-transform: capitalize; }\n  .card .card-subtitle {\n    font-weight: normal;\n    margin-top: 0.625rem;\n    margin-bottom: 0.625rem; }\n  .card .card-description {\n    color: #bfbfbf;\n    font-weight: 300; }\n  .card.card-outline-success {\n    border: 1px solid #00d25b; }\n  .card.card-outline-primary {\n    border: 1px solid #0090e7; }\n  .card.card-outline-warning {\n    border: 1px solid #ffab00; }\n  .card.card-outline-danger {\n    border: 1px solid #fc424a; }\n  .card.card-rounded {\n    border-radius: 5px; }\n  .card.card-faded {\n    background: #b5b0b2;\n    border-color: #b5b0b2; }\n  .card.card-circle-progress {\n    color: #ffffff;\n    text-align: center; }\n  .card.card-img-holder {\n    position: relative; }\n    .card.card-img-holder .card-img-absolute {\n      position: absolute;\n      top: 0;\n      right: 0;\n      height: 100%; }\n  .card.corona-gradient-card {\n    background-image: linear-gradient(to left, #d41459, #911a6c);\n    border-radius: 6px; }\n    .card.corona-gradient-card .gradient-corona-img {\n      height: 85px; }\n      @media (max-width: 576px) {\n        .card.corona-gradient-card .gradient-corona-img {\n          height: auto;\n          min-height: 50px;\n          max-height: 85px; } }\n    @media (max-width: 576px) {\n      .card.corona-gradient-card h4, .card.corona-gradient-card .h4 {\n        font-size: 0.75rem; } }\n\n@media (min-width: 576px) {\n  .card-columns {\n    column-count: 3;\n    column-gap: 1.25rem;\n    orphans: 1;\n    widows: 1; }\n    .card-columns .card {\n      display: inline-block;\n      width: 100%;\n      margin-bottom: 0.75rem; } }\n\n.card-inverse-primary {\n  background: rgba(0, 144, 231, 0.2);\n  border: 1px solid theme-color-level(#0090e7, 1);\n  color: theme-color-level(#0090e7, 3); }\n\n.card-inverse-secondary {\n  background: rgba(228, 234, 236, 0.2);\n  border: 1px solid theme-color-level(#e4eaec, 1);\n  color: theme-color-level(#e4eaec, 3); }\n\n.card-inverse-success {\n  background: rgba(0, 210, 91, 0.2);\n  border: 1px solid theme-color-level(#00d25b, 1);\n  color: theme-color-level(#00d25b, 3); }\n\n.card-inverse-info {\n  background: rgba(143, 95, 232, 0.2);\n  border: 1px solid theme-color-level(#8f5fe8, 1);\n  color: theme-color-level(#8f5fe8, 3); }\n\n.card-inverse-warning {\n  background: rgba(255, 171, 0, 0.2);\n  border: 1px solid theme-color-level(#ffab00, 1);\n  color: theme-color-level(#ffab00, 3); }\n\n.card-inverse-danger {\n  background: rgba(252, 66, 74, 0.2);\n  border: 1px solid theme-color-level(#fc424a, 1);\n  color: theme-color-level(#fc424a, 3); }\n\n.card-inverse-light {\n  background: rgba(255, 255, 255, 0.2);\n  border: 1px solid theme-color-level(#ffffff, 1);\n  color: theme-color-level(#ffffff, 3); }\n\n.card-inverse-dark {\n  background: rgba(13, 13, 13, 0.2);\n  border: 1px solid theme-color-level(#0d0d0d, 1);\n  color: theme-color-level(#0d0d0d, 3); }\n\n/* Checkboxes and Radios */\n.form-check {\n  position: relative;\n  display: block;\n  margin-top: 15px;\n  margin-bottom: 10px;\n  padding-left: 0; }\n  .form-check .form-check-label {\n    display: block;\n    padding-left: 0.625rem;\n    font-size: 0.875rem;\n    line-height: 1.5;\n    color: #6c7293; }\n    .rtl .form-check .form-check-label {\n      padding-left: 0;\n      padding-right: 1.875rem; }\n    .form-check .form-check-label input {\n      position: absolute;\n      top: 0;\n      left: 0;\n      margin-left: 0;\n      margin-top: 0;\n      z-index: 1;\n      cursor: pointer;\n      opacity: 0;\n      filter: alpha(opacity=0); }\n      .rtl .form-check .form-check-label input {\n        left: auto;\n        right: 0; }\n    .form-check .form-check-label input[type=\"checkbox\"] + .input-helper:before, .form-check .form-check-label input[type=\"checkbox\"] + .input-helper:after {\n      position: absolute;\n      top: 0;\n      left: 0; }\n      .rtl .form-check .form-check-label input[type=\"checkbox\"] + .input-helper:before, .rtl .form-check .form-check-label input[type=\"checkbox\"] + .input-helper:after {\n        left: auto;\n        right: 0; }\n    .form-check .form-check-label input[type=\"checkbox\"] + .input-helper:before {\n      content: \"\";\n      width: 16px;\n      height: 16px;\n      border-radius: 2px;\n      border: solid #0090e7;\n      border-width: 2px;\n      -webkit-transition: all;\n      -moz-transition: all;\n      -ms-transition: all;\n      -o-transition: all;\n      transition: all;\n      transition-duration: 0s;\n      -webkit-transition-duration: 250ms;\n      transition-duration: 250ms;\n      position: absolute;\n      top: 2px;\n      left: 0; }\n    .form-check .form-check-label input[type=\"checkbox\"] + .input-helper:after {\n      -webkit-transition: all;\n      -moz-transition: all;\n      -ms-transition: all;\n      -o-transition: all;\n      transition: all;\n      transition-duration: 0s;\n      -webkit-transition-duration: 250ms;\n      transition-duration: 250ms;\n      font-family: Material Design Icons;\n      opacity: 0;\n      filter: alpha(opacity=0);\n      -webkit-transform: scale(0);\n      -ms-transform: scale(0);\n      -o-transform: scale(0);\n      transform: scale(0);\n      content: '\\F12C';\n      font-size: 0.875rem;\n      font-weight: bold;\n      color: #ffffff;\n      top: 1px; }\n    .form-check .form-check-label input[type=\"checkbox\"]:checked + .input-helper:before {\n      background: #0090e7;\n      border-width: 0; }\n    .form-check .form-check-label input[type=\"checkbox\"]:checked + .input-helper:after {\n      width: 18px;\n      opacity: 1;\n      line-height: 18px;\n      filter: alpha(opacity=100);\n      -webkit-transform: scale(1);\n      -ms-transform: scale(1);\n      -o-transform: scale(1);\n      transform: scale(1);\n      color: black; }\n    .form-check .form-check-label input[type=\"checkbox\"]:disabled + .input-helper:before {\n      border-color: #2c2e33; }\n    .form-check .form-check-label input[type=\"checkbox\"]:disabled:checked + .input-helper:after {\n      background: #2c2e33;\n      color: #ffffff; }\n    .form-check .form-check-label input[type=\"radio\"] + .input-helper:before {\n      position: absolute;\n      content: \"\";\n      top: 0;\n      left: 0;\n      border: solid #0090e7;\n      border-width: 2px;\n      width: 20px;\n      height: 20px;\n      border-radius: 50%;\n      -webkit-transition: all;\n      -moz-transition: all;\n      -ms-transition: all;\n      -o-transition: all;\n      transition: all;\n      transition-duration: 0s;\n      -webkit-transition-duration: 250ms;\n      transition-duration: 250ms; }\n      .rtl .form-check .form-check-label input[type=\"radio\"] + .input-helper:before {\n        left: auto;\n        right: 0; }\n    .form-check .form-check-label input[type=\"radio\"] + .input-helper:after {\n      content: \"\";\n      width: 8px;\n      height: 8px;\n      background: #ffffff;\n      border-radius: 50%;\n      top: 6px;\n      left: 6px;\n      -webkit-transition: all;\n      -o-transition: all;\n      transition: all;\n      transition-duration: 0s;\n      -webkit-transition-duration: 250ms;\n      transition-duration: 250ms;\n      opacity: 0;\n      filter: alpha(opacity=0);\n      -webkit-transform: scale(0);\n      -ms-transform: scale(0);\n      -o-transform: scale(0);\n      transform: scale(0);\n      position: absolute; }\n      .rtl .form-check .form-check-label input[type=\"radio\"] + .input-helper:after {\n        left: auto;\n        right: 6px; }\n    .form-check .form-check-label input[type=\"radio\"]:checked + .input-helper:before {\n      background: #0090e7;\n      border-width: 0; }\n    .form-check .form-check-label input[type=\"radio\"]:checked + .input-helper:after {\n      opacity: 1;\n      line-height: 1.5;\n      filter: alpha(opacity=100);\n      -webkit-transform: scale(1);\n      -ms-transform: scale(1);\n      -o-transform: scale(1);\n      transform: scale(1); }\n    .form-check .form-check-label input[type=\"radio\"]:disabled + .input-helper:before {\n      border-color: #2c2e33; }\n    .form-check .form-check-label input[type=\"radio\"]:disabled:checked + .input-helper:before {\n      background: #2c2e33; }\n    .form-check .form-check-label input[type=\"radio\"]:disabled:checked + .input-helper:after {\n      background: #ffffff; }\n\n.form-check-primary.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-primary.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(primary); }\n\n.form-check-primary.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-primary.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #0090e7; }\n\n.form-check-secondary.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-secondary.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(secondary); }\n\n.form-check-secondary.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-secondary.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #e4eaec; }\n\n.form-check-success.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-success.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(success); }\n\n.form-check-success.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-success.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #00d25b; }\n\n.form-check-info.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-info.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(info); }\n\n.form-check-info.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-info.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #8f5fe8; }\n\n.form-check-warning.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-warning.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(warning); }\n\n.form-check-warning.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-warning.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #ffab00; }\n\n.form-check-danger.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-danger.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(danger); }\n\n.form-check-danger.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-danger.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #fc424a; }\n\n.form-check-light.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-light.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(light); }\n\n.form-check-light.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-light.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #ffffff; }\n\n.form-check-dark.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-dark.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: theme-color(dark); }\n\n.form-check-dark.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-dark.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #0d0d0d; }\n\n.form-check-muted.form-check label input[type=\"checkbox\"] + .input-helper:before,\n.form-check-muted.form-check label input[type=\"radio\"] + .input-helper:before {\n  border-color: #6c7293; }\n\n.form-check-muted.form-check label input[type=\"checkbox\"]:checked + .input-helper:before,\n.form-check-muted.form-check label input[type=\"radio\"]:checked + .input-helper:before {\n  background: #6c7293; }\n\n/* Dropdowns */\n.dropdown .dropdown-menu {\n  margin-top: .75rem;\n  font-size: 0.875rem;\n  box-shadow: none; }\n  .dropdown .dropdown-menu .dropdown-item {\n    font-size: 1rem;\n    padding: .25rem 1.5rem; }\n    .dropdown .dropdown-menu .dropdown-item:active {\n      background: initial; }\n\n/* Forms */\n.form-group {\n  margin-bottom: 1rem; }\n\n.input-group-append,\n.input-group-prepend {\n  color: #4b5564;\n  width: auto;\n  border: none; }\n  .input-group-append .input-group-text,\n  .input-group-prepend .input-group-text {\n    border-color: #2c2e33;\n    padding: 0.56rem 0.75rem;\n    color: #4b5564;\n    background: none; }\n\n.form-control, .asColorPicker-input, .dataTables_wrapper select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text],\n.jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .select2-container--default .select2-selection--single, .select2-container--default .select2-selection--single .select2-search__field, .typeahead,\n.tt-query,\n.tt-hint {\n  border: 1px solid #2c2e33;\n  height: calc(2.25rem + 2px);\n  font-weight: normal;\n  font-size: 0.875rem;\n  padding: 0.625rem 0.6875rem;\n  background-color: #2A3038;\n  border-radius: 2px;\n  color: #ffffff; }\n  .form-control:focus, .asColorPicker-input:focus, .dataTables_wrapper select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .select2-container--default .select2-selection--single:focus, .select2-container--default .select2-selection--single .select2-search__field:focus, .typeahead:focus,\n  .tt-query:focus,\n  .tt-hint:focus {\n    border: 1px solid rgba(71, 164, 71, 0.5);\n    background-color: #2A3038; }\n  .form-control.form-control-lg, .form-control-lg.asColorPicker-input, .dataTables_wrapper select.form-control-lg, .jsgrid .jsgrid-table .jsgrid-filter-row input.form-control-lg[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.form-control-lg, .jsgrid .jsgrid-table .jsgrid-filter-row input.form-control-lg[type=number], .select2-container--default .form-control-lg.select2-selection--single, .select2-container--default .select2-selection--single .form-control-lg.select2-search__field, .form-control-lg.typeahead,\n  .form-control-lg.tt-query,\n  .form-control-lg.tt-hint {\n    padding: 0.94rem .75rem;\n    height: calc(2.875rem + 2px); }\n  .form-control.form-control-sm, .form-control-sm.asColorPicker-input, .dataTables_wrapper select.form-control-sm, .jsgrid .jsgrid-table .jsgrid-filter-row input.form-control-sm[type=text],\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.form-control-sm, .jsgrid .jsgrid-table .jsgrid-filter-row input.form-control-sm[type=number], .select2-container--default .form-control-sm.select2-selection--single, .select2-container--default .select2-selection--single .form-control-sm.select2-search__field, .form-control-sm.typeahead,\n  .form-control-sm.tt-query,\n  .form-control-sm.tt-hint {\n    padding: 0.5rem .75rem;\n    height: calc(1.8125rem + 2px); }\n  .form-control::placeholder, .asColorPicker-input::placeholder, .dataTables_wrapper select::placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::placeholder,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select::placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::placeholder, .select2-container--default .select2-selection--single::placeholder, .select2-container--default .select2-selection--single .select2-search__field::placeholder, .typeahead::placeholder,\n  .tt-query::placeholder,\n  .tt-hint::placeholder {\n    color: #6c7293;\n    font-size: 0.875rem; }\n\n.navbar .form-control, .navbar .asColorPicker-input, .navbar .dataTables_wrapper select, .dataTables_wrapper .navbar select, .navbar .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .navbar input[type=text],\n.navbar .jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row .navbar select, .navbar .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .navbar input[type=number], .navbar .select2-container--default .select2-selection--single, .select2-container--default .navbar .select2-selection--single, .navbar .select2-container--default .select2-selection--single .select2-search__field, .select2-container--default .select2-selection--single .navbar .select2-search__field, .navbar .typeahead,\n.navbar .tt-query,\n.navbar .tt-hint {\n  width: 75%;\n  border-radius: 6px; }\n  .navbar .form-control:focus, .navbar .asColorPicker-input:focus, .navbar .dataTables_wrapper select:focus, .dataTables_wrapper .navbar select:focus, .navbar .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .navbar input:focus[type=text],\n  .navbar .jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .navbar select:focus, .navbar .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .navbar input:focus[type=number], .navbar .select2-container--default .select2-selection--single:focus, .select2-container--default .navbar .select2-selection--single:focus, .navbar .select2-container--default .select2-selection--single .select2-search__field:focus, .select2-container--default .select2-selection--single .navbar .select2-search__field:focus, .navbar .typeahead:focus,\n  .navbar .tt-query:focus,\n  .navbar .tt-hint:focus {\n    border: none; }\n\nselect.form-control, select.asColorPicker-input, .dataTables_wrapper select,\n.jsgrid .jsgrid-table .jsgrid-filter-row select, .select2-container--default select.select2-selection--single, .select2-container--default .select2-selection--single select.select2-search__field, select.typeahead,\nselect.tt-query,\nselect.tt-hint {\n  padding: .4375rem .75rem;\n  border: 0;\n  color: #4b5564; }\n  select.form-control:focus, select.asColorPicker-input:focus, .dataTables_wrapper select:focus,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .select2-container--default select.select2-selection--single:focus, .select2-container--default .select2-selection--single select.select2-search__field:focus, select.typeahead:focus,\n  select.tt-query:focus,\n  select.tt-hint:focus {\n    outline: 1px solid #2c2e33; }\n  select.form-control.border-primary, select.border-primary.asColorPicker-input, .dataTables_wrapper select.border-primary,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-primary, .select2-container--default select.border-primary.select2-selection--single, .select2-container--default .select2-selection--single select.border-primary.select2-search__field, select.border-primary.typeahead,\n  select.border-primary.tt-query,\n  select.border-primary.tt-hint {\n    outline: 1px solid #0090e7; }\n    select.form-control.border-primary:focus, select.border-primary.asColorPicker-input:focus, .dataTables_wrapper select.border-primary:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-primary:focus, .select2-container--default select.border-primary.select2-selection--single:focus, .select2-container--default .select2-selection--single select.border-primary.select2-search__field:focus, select.border-primary.typeahead:focus,\n    select.border-primary.tt-query:focus,\n    select.border-primary.tt-hint:focus {\n      outline: 1px solid #0090e7; }\n  select.form-control.border-secondary, select.form-control.loader-demo-box, select.loader-demo-box.asColorPicker-input, .dataTables_wrapper select.loader-demo-box,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.loader-demo-box, .select2-container--default select.loader-demo-box.select2-selection--single, .select2-container--default .select2-selection--single select.loader-demo-box.select2-search__field, select.loader-demo-box.typeahead,\n  select.loader-demo-box.tt-query,\n  select.loader-demo-box.tt-hint, select.border-secondary.asColorPicker-input, .dataTables_wrapper select.border-secondary,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-secondary, .select2-container--default select.border-secondary.select2-selection--single, .select2-container--default .select2-selection--single select.border-secondary.select2-search__field, select.border-secondary.typeahead,\n  select.border-secondary.tt-query,\n  select.border-secondary.tt-hint {\n    outline: 1px solid #e4eaec; }\n    select.form-control.border-secondary:focus, select.form-control.loader-demo-box:focus, select.loader-demo-box.asColorPicker-input:focus, .dataTables_wrapper select.loader-demo-box:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.loader-demo-box:focus, .select2-container--default select.loader-demo-box.select2-selection--single:focus, .select2-container--default .select2-selection--single select.loader-demo-box.select2-search__field:focus, select.loader-demo-box.typeahead:focus,\n    select.loader-demo-box.tt-query:focus,\n    select.loader-demo-box.tt-hint:focus, select.border-secondary.asColorPicker-input:focus, .dataTables_wrapper select.border-secondary:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-secondary:focus, .select2-container--default select.border-secondary.select2-selection--single:focus, .select2-container--default .select2-selection--single select.border-secondary.select2-search__field:focus, select.border-secondary.typeahead:focus,\n    select.border-secondary.tt-query:focus,\n    select.border-secondary.tt-hint:focus {\n      outline: 1px solid #e4eaec; }\n  select.form-control.border-success, select.border-success.asColorPicker-input, .swal2-modal .swal2-buttonswrapper select.asColorPicker-input.swal2-styled.swal2-confirm, .dataTables_wrapper select.border-success, .dataTables_wrapper .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .dataTables_wrapper select.swal2-styled.swal2-confirm,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-success, .jsgrid .jsgrid-table .jsgrid-filter-row .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .jsgrid .jsgrid-table .jsgrid-filter-row select.swal2-styled.swal2-confirm, .select2-container--default select.border-success.select2-selection--single, .select2-container--default .swal2-modal .swal2-buttonswrapper select.select2-selection--single.swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .select2-container--default select.select2-selection--single.swal2-styled.swal2-confirm, .select2-container--default .select2-selection--single select.border-success.select2-search__field, .select2-container--default .select2-selection--single .swal2-modal .swal2-buttonswrapper select.select2-search__field.swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper .select2-container--default .select2-selection--single select.select2-search__field.swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper select.form-control.swal2-styled.swal2-confirm, .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm.typeahead,\n  .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm.tt-query,\n  .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm.tt-hint, select.border-success.typeahead,\n  select.border-success.tt-query,\n  select.border-success.tt-hint {\n    outline: 1px solid #00d25b; }\n    select.form-control.border-success:focus, select.border-success.asColorPicker-input:focus, .swal2-modal .swal2-buttonswrapper select.asColorPicker-input.swal2-styled.swal2-confirm:focus, .dataTables_wrapper select.border-success:focus, .dataTables_wrapper .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm:focus, .swal2-modal .swal2-buttonswrapper .dataTables_wrapper select.swal2-styled.swal2-confirm:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-success:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm:focus, .swal2-modal .swal2-buttonswrapper .jsgrid .jsgrid-table .jsgrid-filter-row select.swal2-styled.swal2-confirm:focus, .select2-container--default select.border-success.select2-selection--single:focus, .select2-container--default .swal2-modal .swal2-buttonswrapper select.select2-selection--single.swal2-styled.swal2-confirm:focus, .swal2-modal .swal2-buttonswrapper .select2-container--default select.select2-selection--single.swal2-styled.swal2-confirm:focus, .select2-container--default .select2-selection--single select.border-success.select2-search__field:focus, .select2-container--default .select2-selection--single .swal2-modal .swal2-buttonswrapper select.select2-search__field.swal2-styled.swal2-confirm:focus, .swal2-modal .swal2-buttonswrapper .select2-container--default .select2-selection--single select.select2-search__field.swal2-styled.swal2-confirm:focus, .swal2-modal .swal2-buttonswrapper select.form-control.swal2-styled.swal2-confirm:focus, .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm.typeahead:focus,\n    .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm.tt-query:focus,\n    .swal2-modal .swal2-buttonswrapper select.swal2-styled.swal2-confirm.tt-hint:focus, select.border-success.typeahead:focus,\n    select.border-success.tt-query:focus,\n    select.border-success.tt-hint:focus {\n      outline: 1px solid #00d25b; }\n  select.form-control.border-info, select.border-info.asColorPicker-input, .dataTables_wrapper select.border-info,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-info, .select2-container--default select.border-info.select2-selection--single, .select2-container--default .select2-selection--single select.border-info.select2-search__field, select.border-info.typeahead,\n  select.border-info.tt-query,\n  select.border-info.tt-hint {\n    outline: 1px solid #8f5fe8; }\n    select.form-control.border-info:focus, select.border-info.asColorPicker-input:focus, .dataTables_wrapper select.border-info:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-info:focus, .select2-container--default select.border-info.select2-selection--single:focus, .select2-container--default .select2-selection--single select.border-info.select2-search__field:focus, select.border-info.typeahead:focus,\n    select.border-info.tt-query:focus,\n    select.border-info.tt-hint:focus {\n      outline: 1px solid #8f5fe8; }\n  select.form-control.border-warning, select.border-warning.asColorPicker-input, .dataTables_wrapper select.border-warning,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-warning, .select2-container--default select.border-warning.select2-selection--single, .select2-container--default .select2-selection--single select.border-warning.select2-search__field, select.border-warning.typeahead,\n  select.border-warning.tt-query,\n  select.border-warning.tt-hint {\n    outline: 1px solid #ffab00; }\n    select.form-control.border-warning:focus, select.border-warning.asColorPicker-input:focus, .dataTables_wrapper select.border-warning:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-warning:focus, .select2-container--default select.border-warning.select2-selection--single:focus, .select2-container--default .select2-selection--single select.border-warning.select2-search__field:focus, select.border-warning.typeahead:focus,\n    select.border-warning.tt-query:focus,\n    select.border-warning.tt-hint:focus {\n      outline: 1px solid #ffab00; }\n  select.form-control.border-danger, select.border-danger.asColorPicker-input, .dataTables_wrapper select.border-danger,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-danger, .select2-container--default select.border-danger.select2-selection--single, .select2-container--default .select2-selection--single select.border-danger.select2-search__field, select.border-danger.typeahead,\n  select.border-danger.tt-query,\n  select.border-danger.tt-hint {\n    outline: 1px solid #fc424a; }\n    select.form-control.border-danger:focus, select.border-danger.asColorPicker-input:focus, .dataTables_wrapper select.border-danger:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-danger:focus, .select2-container--default select.border-danger.select2-selection--single:focus, .select2-container--default .select2-selection--single select.border-danger.select2-search__field:focus, select.border-danger.typeahead:focus,\n    select.border-danger.tt-query:focus,\n    select.border-danger.tt-hint:focus {\n      outline: 1px solid #fc424a; }\n  select.form-control.border-light, select.border-light.asColorPicker-input, .dataTables_wrapper select.border-light,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-light, .select2-container--default select.border-light.select2-selection--single, .select2-container--default .select2-selection--single select.border-light.select2-search__field, select.border-light.typeahead,\n  select.border-light.tt-query,\n  select.border-light.tt-hint {\n    outline: 1px solid #ffffff; }\n    select.form-control.border-light:focus, select.border-light.asColorPicker-input:focus, .dataTables_wrapper select.border-light:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-light:focus, .select2-container--default select.border-light.select2-selection--single:focus, .select2-container--default .select2-selection--single select.border-light.select2-search__field:focus, select.border-light.typeahead:focus,\n    select.border-light.tt-query:focus,\n    select.border-light.tt-hint:focus {\n      outline: 1px solid #ffffff; }\n  select.form-control.border-dark, select.border-dark.asColorPicker-input, .dataTables_wrapper select.border-dark,\n  .jsgrid .jsgrid-table .jsgrid-filter-row select.border-dark, .select2-container--default select.border-dark.select2-selection--single, .select2-container--default .select2-selection--single select.border-dark.select2-search__field, select.border-dark.typeahead,\n  select.border-dark.tt-query,\n  select.border-dark.tt-hint {\n    outline: 1px solid #0d0d0d; }\n    select.form-control.border-dark:focus, select.border-dark.asColorPicker-input:focus, .dataTables_wrapper select.border-dark:focus,\n    .jsgrid .jsgrid-table .jsgrid-filter-row select.border-dark:focus, .select2-container--default select.border-dark.select2-selection--single:focus, .select2-container--default .select2-selection--single select.border-dark.select2-search__field:focus, select.border-dark.typeahead:focus,\n    select.border-dark.tt-query:focus,\n    select.border-dark.tt-hint:focus {\n      outline: 1px solid #0d0d0d; }\n\n.form-group label {\n  font-size: 0.875rem;\n  line-height: 1;\n  vertical-align: top; }\n\n.form-group.has-danger .form-control, .form-group.has-danger .asColorPicker-input, .form-group.has-danger .dataTables_wrapper select, .dataTables_wrapper .form-group.has-danger select, .form-group.has-danger .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .form-group.has-danger input[type=text],\n.form-group.has-danger .jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row .form-group.has-danger select, .form-group.has-danger .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .form-group.has-danger input[type=number], .form-group.has-danger .select2-container--default .select2-selection--single, .select2-container--default .form-group.has-danger .select2-selection--single, .form-group.has-danger .select2-container--default .select2-selection--single .select2-search__field, .select2-container--default .select2-selection--single .form-group.has-danger .select2-search__field, .form-group.has-danger .typeahead,\n.form-group.has-danger .tt-query,\n.form-group.has-danger .tt-hint {\n  border-color: #fc424a; }\n\n.form-group .file-upload-default {\n  visibility: hidden;\n  position: absolute; }\n\n.form-group .file-upload-info {\n  background: transparent; }\n\n.form-check {\n  min-height: 18px;\n  padding-left: 1.25rem; }\n\ndiv.tagsinput {\n  background: transparent; }\n\n/* Icons */\n.icons-list {\n  border-left: 1px solid #2c2e33;\n  border-top: 1px solid #2c2e33; }\n  .icons-list > div {\n    border-bottom: 1px solid #2c2e33;\n    border-right: 1px solid #2c2e33;\n    display: -webkit-flex;\n    display: flex;\n    -webkit-align-items: center;\n    align-items: center;\n    padding: 15px 15px;\n    font-weight: normal;\n    font-size: 0.875rem; }\n    .icons-list > div i {\n      display: inline-block;\n      font-size: 20px;\n      width: 40px;\n      text-align: left;\n      color: #0090e7; }\n\n/* Loaders */\n#pgloading {\n  position: static; }\n  #pgloading .bokeh {\n    font-size: 100px;\n    width: 1em;\n    height: 1em;\n    position: relative;\n    margin: 0 auto;\n    border-radius: 50%;\n    border: 0.01em solid #2c2e33;\n    list-style: none;\n    padding: 0; }\n    #pgloading .bokeh li {\n      position: absolute;\n      width: .2em;\n      height: .2em;\n      border-radius: 50%; }\n      #pgloading .bokeh li:nth-child(1) {\n        left: 50%;\n        top: 0;\n        margin: 0 0 0 -.1em;\n        background: #00d25b;\n        -webkit-transform-origin: 50% 250%;\n        transform-origin: 50% 250%;\n        -webkit-animation: rota 1.13s linear infinite, opa 3.67s ease-in-out infinite alternate;\n        animation: rota 1.13s linear infinite, opa 3.67s ease-in-out infinite alternate; }\n      #pgloading .bokeh li:nth-child(2) {\n        top: 50%;\n        right: 0;\n        margin: -.1em 0 0 0;\n        background: #fc424a;\n        -webkit-transform-origin: -150% 50%;\n        transform-origin: -150% 50%;\n        -webkit-animation: rota 1.86s linear infinite, opa 4.29s ease-in-out infinite alternate;\n        animation: rota 1.86s linear infinite, opa 4.29s ease-in-out infinite alternate; }\n      #pgloading .bokeh li:nth-child(3) {\n        left: 50%;\n        bottom: 0;\n        margin: 0 0 0 -.1em;\n        background: #ffab00;\n        -webkit-transform-origin: 50% -150%;\n        transform-origin: 50% -150%;\n        -webkit-animation: rota 1.45s linear infinite, opa 5.12s ease-in-out infinite alternate;\n        animation: rota 1.45s linear infinite, opa 5.12s ease-in-out infinite alternate; }\n      #pgloading .bokeh li:nth-child(4) {\n        top: 50%;\n        left: 0;\n        margin: -.1em 0 0 0;\n        background: #0090e7;\n        -webkit-transform-origin: 250% 50%;\n        transform-origin: 250% 50%;\n        -webkit-animation: rota 1.72s linear infinite, opa 5.25s ease-in-out infinite alternate;\n        animation: rota 1.72s linear infinite, opa 5.25s ease-in-out infinite alternate; }\n\n@-webkit-keyframes rota {\n  from { }\n  to {\n    -webkit-transform: rotate(360deg); } }\n\n@keyframes rota {\n  from { }\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n@-webkit-keyframes opa {\n  0% { }\n  12.0% {\n    opacity: 0.80; }\n  19.5% {\n    opacity: 0.88; }\n  37.2% {\n    opacity: 0.64; }\n  40.5% {\n    opacity: 0.52; }\n  52.7% {\n    opacity: 0.69; }\n  60.2% {\n    opacity: 0.60; }\n  66.6% {\n    opacity: 0.52; }\n  70.0% {\n    opacity: 0.63; }\n  79.9% {\n    opacity: 0.60; }\n  84.2% {\n    opacity: 0.75; }\n  91.0% {\n    opacity: 0.87; } }\n\n@keyframes opa {\n  0% { }\n  12.0% {\n    opacity: 0.80; }\n  19.5% {\n    opacity: 0.88; }\n  37.2% {\n    opacity: 0.64; }\n  40.5% {\n    opacity: 0.52; }\n  52.7% {\n    opacity: 0.69; }\n  60.2% {\n    opacity: 0.60; }\n  66.6% {\n    opacity: 0.52; }\n  70.0% {\n    opacity: 0.63; }\n  79.9% {\n    opacity: 0.60; }\n  84.2% {\n    opacity: 0.75; }\n  91.0% {\n    opacity: 0.87; } }\n\n.glowing-loader {\n  position: relative; }\n\n.s2 {\n  position: absolute;\n  height: 70px;\n  width: 70px;\n  top: 50px;\n  background-color: transparent;\n  left: 50%;\n  transform: translate(-50%, -50%); }\n\n.s1 {\n  position: absolute;\n  height: 70px;\n  width: 70px;\n  left: 50%;\n  top: 50px;\n  transform-origin: center;\n  transform: translate(-50%, -50%) rotate(45deg);\n  background-color: transparent; }\n\n.bigcon {\n  position: absolute;\n  height: 75px;\n  width: 75px;\n  left: 50%;\n  top: 50px;\n  transform-origin: center;\n  transform: translate(-50%, -50%) rotate(-45deg);\n  background-color: transparent;\n  animation: bigcon 2s infinite linear;\n  animation-delay: 0.25s; }\n\n.b {\n  border-radius: 50%;\n  position: absolute; }\n\n.s {\n  width: 15px;\n  height: 15px;\n  animation: small 2s infinite ease;\n  box-shadow: 0px 2px rgba(0, 0, 0, 0.3);\n  background-color: #0090e7; }\n\n.s:nth-child(1) {\n  top: 0%;\n  left: 0%; }\n\n.s:nth-child(2) {\n  top: 0%;\n  right: 0%; }\n\n.s:nth-child(3) {\n  right: 0%;\n  bottom: 0%; }\n\n.s:nth-child(4) {\n  bottom: 0%;\n  left: 0%; }\n\n.big {\n  width: 15px;\n  height: 15px;\n  border-radius: 15px;\n  box-shadow: 0px 0px 10px theme-color(primary), 0px 0px 20px theme-color(primary), 0px 0px 30px theme-color(primary), 0px 0px 50px theme-color(primary), 0px 0px 60px theme-color(primary);\n  z-index: 1;\n  background-color: #0090e7;\n  animation: bigball 1s infinite linear; }\n\n.sb1 {\n  animation-delay: -1.75s; }\n\n.sb6 {\n  animation-delay: -1.5s; }\n\n.sb2 {\n  animation-delay: -1.25s; }\n\n.sb7 {\n  animation-delay: -1s; }\n\n.sb3 {\n  animation-delay: -0.75s; }\n\n.sb8 {\n  animation-delay: -0.5s; }\n\n.sb4 {\n  animation-delay: -0.25s; }\n\n.sb5 {\n  animation-delay: -0s; }\n\n@keyframes bigcon {\n  0% {\n    transform-origin: center;\n    transform: translate(-50%, -50%) rotate(45deg); }\n  100% {\n    transform-origin: center;\n    transform: translate(-50%, -50%) rotate(405deg); } }\n\n@keyframes small {\n  0% {\n    transform: scale(1);\n    background-color: #4ebcff; }\n  10% {\n    transform: scale(1.3);\n    background-color: #0090e7; }\n  15% {\n    transform: scale(1); }\n  25% {\n    transform: scale(1);\n    background-color: #0090e7; }\n  100% {\n    transform: scale(1);\n    background-color: #0090e7; } }\n\n/* Pixel loader */\n.pixel-loader {\n  width: 10px;\n  height: 10px;\n  background: #ffab00;\n  color: #ffab00;\n  margin: 80px auto;\n  box-shadow: 15px 15px  0 0, -15px -15px  0 0, 15px -15px  0 0, -15px 15px  0 0, 0 15px  0 0, 15px 0  0 0, -15px 0  0 0, 0 -15px 0 0;\n  animation: anim 2s linear infinite; }\n\n@keyframes anim {\n  0% {\n    -webkit-filter: hue-rotate(0deg); }\n  50% {\n    box-shadow: 20px 20px  0 0, -20px -20px  0 0, 20px -20px  0 0, -20px 20px  0 0, 0 10px  0 0, 10px 0  0 0, -10px 0  0 0, 0 -10px 0 0; }\n  75% {\n    box-shadow: 20px 20px  0 0, -20px -20px  0 0, 20px -20px  0 0, -20px 20px  0 0, 0 10px  0 0, 10px 0  0 0, -10px 0  0 0, 0 -10px 0 0; }\n  100% {\n    transform: rotate(360deg);\n    -webkit-filter: hue-rotate(360deg); } }\n\n/* Square box loader */\n@keyframes dyinglight {\n  15% {\n    transform: scale(1.6); }\n  50% {\n    transform: rotate(-89deg); }\n  100% {\n    transform: rotate(-90deg); } }\n\n.square-box-loader {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  display: inline-block; }\n\n.square-box-loader-square {\n  display: block;\n  width: 30px;\n  height: 30px;\n  background: #0090e7; }\n\n.square-box-loader-container {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  transform-origin: 50% 50% 0;\n  animation: dyinglight 1s ease infinite;\n  backface-visibility: hidden; }\n\n.square-box-loader-corner-top:before,\n.square-box-loader-corner-top:after,\n.square-box-loader-corner-bottom:before,\n.square-box-loader-corner-bottom:after {\n  position: absolute;\n  width: 10px;\n  height: 10px;\n  color: #0090e7;\n  content: ''; }\n\n.square-box-loader-corner-top:before {\n  border-left: 1px solid;\n  border-top: 1px solid;\n  top: -4px;\n  left: -4px; }\n\n.square-box-loader-corner-top:after {\n  border-right: 1px solid;\n  border-top: 1px solid;\n  top: -4px;\n  right: -4px; }\n\n.square-box-loader-corner-bottom:before {\n  border-left: 1px solid;\n  border-bottom: 1px solid;\n  bottom: -4px;\n  left: -4px; }\n\n.square-box-loader-corner-bottom:after {\n  border-right: 1px solid;\n  border-bottom: 1px solid;\n  bottom: -4px;\n  right: -4px; }\n\n/* Circle loader */\n.circle-loader {\n  width: 70px;\n  height: 70px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto; }\n\n.circle-loader:before, .circle-loader:after {\n  content: \"\";\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border-radius: 100%;\n  border: 10px solid transparent;\n  border-top-color: #ffab00; }\n\n.circle-loader:before {\n  z-index: 100;\n  animation: spin 1s infinite; }\n\n.circle-loader:after {\n  border: 10px solid #e4eaec; }\n\n@keyframes spin {\n  0% {\n    -webkit-transform: rotate(0deg);\n    -ms-transform: rotate(0deg);\n    -o-transform: rotate(0deg);\n    transform: rotate(0deg); }\n  100% {\n    -webkit-transform: rotate(360deg);\n    -ms-transform: rotate(360deg);\n    -o-transform: rotate(360deg);\n    transform: rotate(360deg); } }\n\n/* Jumping dots loader */\n.jumping-dots-loader {\n  width: 100px;\n  height: 100px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto; }\n\n.jumping-dots-loader span {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  border-radius: 100%;\n  background-color: rgba(252, 66, 74, 0.8);\n  margin: 35px 5px; }\n\n.jumping-dots-loader span:nth-child(1) {\n  animation: bounce 1s ease-in-out infinite; }\n\n.jumping-dots-loader span:nth-child(2) {\n  animation: bounce 1s ease-in-out 0.33s infinite; }\n\n.jumping-dots-loader span:nth-child(3) {\n  animation: bounce 1s ease-in-out 0.66s infinite; }\n\n@keyframes bounce {\n  0%, 75%, 100% {\n    -webkit-transform: translateY(0);\n    -ms-transform: translateY(0);\n    -o-transform: translateY(0);\n    transform: translateY(0); }\n  25% {\n    -webkit-transform: translateY(-20px);\n    -ms-transform: translateY(-20px);\n    -o-transform: translateY(-20px);\n    transform: translateY(-20px); } }\n\n/* Bar loader */\n.bar-loader {\n  width: 50px;\n  height: 50px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto; }\n\n.bar-loader span {\n  display: inline-block;\n  width: 5px;\n  height: 30px;\n  background-color: rgba(252, 66, 74, 0.7); }\n\n.bar-loader span:nth-child(1) {\n  animation: grow 1s ease-in-out infinite; }\n\n.bar-loader span:nth-child(2) {\n  animation: grow 1s ease-in-out 0.15s infinite; }\n\n.bar-loader span:nth-child(3) {\n  animation: grow 1s ease-in-out 0.30s infinite; }\n\n.bar-loader span:nth-child(4) {\n  animation: grow 1s ease-in-out 0.45s infinite; }\n\n@keyframes grow {\n  0%, 100% {\n    -webkit-transform: scaleY(1);\n    -ms-transform: scaleY(1);\n    -o-transform: scaleY(1);\n    transform: scaleY(1); }\n  50% {\n    -webkit-transform: scaleY(1.8);\n    -ms-transform: scaleY(1.8);\n    -o-transform: scaleY(1.8);\n    transform: scaleY(1.8); } }\n\n/* Square path loader */\n.square-path-loader {\n  width: 100px;\n  height: 100px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto; }\n\n.square-path-loader:before, .square-path-loader:after {\n  content: \"\";\n  width: 15px;\n  height: 15px;\n  position: absolute;\n  top: 0;\n  left: calc(50% - 10px);\n  background-color: rgba(0, 210, 91, 0.7);\n  animation: squaremove 1s ease-in-out infinite; }\n\n.square-path-loader:after {\n  bottom: 0;\n  animation-delay: 0.5s; }\n\n@keyframes squaremove {\n  0%, 100% {\n    -webkit-transform: translate(0, 0) rotate(0);\n    -ms-transform: translate(0, 0) rotate(0);\n    -o-transform: translate(0, 0) rotate(0);\n    transform: translate(0, 0) rotate(0); }\n  25% {\n    -webkit-transform: translate(40px, 40px) rotate(45deg);\n    -ms-transform: translate(40px, 40px) rotate(45deg);\n    -o-transform: translate(40px, 40px) rotate(45deg);\n    transform: translate(40px, 40px) rotate(45deg); }\n  50% {\n    -webkit-transform: translate(0px, 80px) rotate(0deg);\n    -ms-transform: translate(0px, 80px) rotate(0deg);\n    -o-transform: translate(0px, 80px) rotate(0deg);\n    transform: translate(0px, 80px) rotate(0deg); }\n  75% {\n    -webkit-transform: translate(-40px, 40px) rotate(45deg);\n    -ms-transform: translate(-40px, 40px) rotate(45deg);\n    -o-transform: translate(-40px, 40px) rotate(45deg);\n    transform: translate(-40px, 40px) rotate(45deg); } }\n\n/* Dot opacity loader */\n.dot-opacity-loader {\n  width: 100px;\n  height: 100px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto; }\n\n.dot-opacity-loader span {\n  display: inline-block;\n  width: 20px;\n  height: 20px;\n  border-radius: 100%;\n  background-color: #0090e7;\n  margin: 35px 5px;\n  opacity: 0; }\n\n.dot-opacity-loader span:nth-child(1) {\n  animation: opacitychange 1s ease-in-out infinite; }\n\n.dot-opacity-loader span:nth-child(2) {\n  animation: opacitychange 1s ease-in-out 0.33s infinite; }\n\n.dot-opacity-loader span:nth-child(3) {\n  animation: opacitychange 1s ease-in-out 0.66s infinite; }\n\n@keyframes opacitychange {\n  0%, 100% {\n    opacity: 0; }\n  60% {\n    opacity: 1; } }\n\n/* Flip square */\n.flip-square-loader {\n  -webkit-perspective: 120px;\n  -moz-perspective: 120px;\n  -ms-perspective: 120px;\n  perspective: 120px;\n  width: 100px;\n  height: 100px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto; }\n\n.flip-square-loader:before {\n  content: \"\";\n  position: absolute;\n  left: 25px;\n  top: 25px;\n  width: 50px;\n  height: 50px;\n  background-color: rgba(0, 210, 91, 0.7);\n  animation: flip 1s infinite; }\n\n@keyframes flip {\n  0% {\n    transform: rotate(0); }\n  50% {\n    transform: rotateY(180deg); }\n  100% {\n    transform: rotateY(180deg) rotateX(180deg); } }\n\n/* Moving square loader */\n.moving-square-loader {\n  width: 100px;\n  height: 100px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto; }\n\n.moving-square-loader:before {\n  content: \"\";\n  position: absolute;\n  width: 10px;\n  height: 10px;\n  top: calc(50% - 10px);\n  left: 0px;\n  background-color: rgba(252, 66, 74, 0.7);\n  animation: rotatemove 1s infinite; }\n\n@keyframes rotatemove {\n  0% {\n    -webkit-transform: scale(1) translateX(0px);\n    -ms-transform: scale(1) translateX(0px);\n    -o-transform: scale(1) translateX(0px);\n    transform: scale(1) translateX(0px); }\n  100% {\n    -webkit-transform: scale(2) translateX(45px);\n    -ms-transform: scale(2) translateX(45px);\n    -o-transform: scale(2) translateX(45px);\n    transform: scale(2) translateX(45px); } }\n\n/* Preview */\n.preview-list .preview-item {\n  display: -webkit-flex;\n  display: flex;\n  -webkit-flex-direction: row;\n  flex-direction: row;\n  -webkit-align-items: flex-start;\n  align-items: flex-start;\n  padding: 1rem 0rem;\n  font-size: .875rem; }\n  .preview-list .preview-item:last-child {\n    border-bottom: 0; }\n  .preview-list .preview-item .form-check {\n    margin-top: 8px;\n    margin-right: 1rem; }\n  .preview-list .preview-item .preview-thumbnail {\n    color: color(white);\n    position: relative; }\n    .preview-list .preview-item .preview-thumbnail img,\n    .preview-list .preview-item .preview-thumbnail .preview-icon {\n      width: 40px;\n      height: 40px;\n      text-align: center;\n      display: -webkit-flex;\n      display: flex;\n      -webkit-align-items: center;\n      align-items: center;\n      -webkit-justify-content: center;\n      justify-content: center; }\n      .preview-list .preview-item .preview-thumbnail img i,\n      .preview-list .preview-item .preview-thumbnail .preview-icon i {\n        font-size: 1.125rem;\n        margin: 0; }\n    .preview-list .preview-item .preview-thumbnail .badge {\n      border: 2px solid color(white);\n      border-radius: 100%;\n      bottom: 5px;\n      display: block;\n      height: 14px;\n      left: -5px;\n      padding: 0;\n      position: absolute;\n      width: 14px; }\n  .preview-list .preview-item .preview-item-content {\n    line-height: 1;\n    padding-left: 15px; }\n    .preview-list .preview-item .preview-item-content:first-child {\n      padding-left: 0; }\n    .preview-list .preview-item .preview-item-content p {\n      margin-bottom: 10px;\n      line-height: 1; }\n      .preview-list .preview-item .preview-item-content p .content-category {\n        font-family: 'source-sans-pro-semibold', sans-serif;\n        padding-right: 15px;\n        border-right: 1px solid #2c2e33; }\n    .rtl .preview-list .preview-item .preview-item-content {\n      padding-left: 0;\n      padding-right: 1rem;\n      margin-right: 0;\n      margin-left: auto; }\n  .preview-list .preview-item .preview-actions {\n    display: -webkit-flex;\n    display: flex;\n    -webkit-flex-direction: row;\n    flex-direction: row; }\n    .preview-list .preview-item .preview-actions i {\n      width: 29px;\n      color: color(gray-lightest);\n      height: 29px;\n      border: 2px solid color(gray-lightest);\n      border-radius: 100%;\n      padding: 3px 6px;\n      display: inline-block; }\n      .preview-list .preview-item .preview-actions i:first-child {\n        margin-right: 10px; }\n\n.preview-list.comment-preview .preview-item {\n  padding: .87rem 0; }\n  .preview-list.comment-preview .preview-item:first-child {\n    padding-top: 0; }\n  .preview-list.comment-preview .preview-item p {\n    line-height: 27px; }\n\n.preview-list.bordered .preview-item {\n  border-bottom: 1px solid #2c2e33; }\n  .preview-list.bordered .preview-item:last-child {\n    border-bottom: 0; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-primary {\n    width: 40px;\n    height: 37px;\n    background: rgba(0, 144, 231, 0.11);\n    border-radius: 7px;\n    color: #0090e7; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-secondary {\n    width: 40px;\n    height: 37px;\n    background: rgba(228, 234, 236, 0.11);\n    border-radius: 7px;\n    color: #e4eaec; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-success {\n    width: 40px;\n    height: 37px;\n    background: rgba(0, 210, 91, 0.11);\n    border-radius: 7px;\n    color: #00d25b; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-info {\n    width: 40px;\n    height: 37px;\n    background: rgba(143, 95, 232, 0.11);\n    border-radius: 7px;\n    color: #8f5fe8; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-warning {\n    width: 40px;\n    height: 37px;\n    background: rgba(255, 171, 0, 0.11);\n    border-radius: 7px;\n    color: #ffab00; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-danger {\n    width: 40px;\n    height: 37px;\n    background: rgba(252, 66, 74, 0.11);\n    border-radius: 7px;\n    color: #fc424a; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-light {\n    width: 40px;\n    height: 37px;\n    background: rgba(255, 255, 255, 0.11);\n    border-radius: 7px;\n    color: #ffffff; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n.icon {\n  display: flex;\n  align-items: center;\n  justify-content: center; }\n  .icon.icon-box-dark {\n    width: 40px;\n    height: 37px;\n    background: rgba(13, 13, 13, 0.11);\n    border-radius: 7px;\n    color: #0d0d0d; }\n  .icon .icon-item {\n    font-size: 20px; }\n\n/* Tables */\n.table, .jsgrid .jsgrid-table {\n  margin-bottom: 0;\n  color: #6c7293; }\n  .table thead th, .jsgrid .jsgrid-table thead th {\n    border-top: 0;\n    border-bottom-width: 1px;\n    font-weight: 500;\n    color: #6c7293; }\n    .table thead th i, .jsgrid .jsgrid-table thead th i {\n      margin-left: 0.325rem; }\n  .table th, .jsgrid .jsgrid-table th,\n  .table td,\n  .jsgrid .jsgrid-table td {\n    vertical-align: middle;\n    font-size: 0.875rem;\n    line-height: 1;\n    white-space: nowrap;\n    padding: 0.9375rem; }\n    .table th img, .jsgrid .jsgrid-table th img,\n    .table td img,\n    .jsgrid .jsgrid-table td img {\n      width: 30px;\n      height: 30px;\n      border-radius: 100%; }\n    .table th .badge, .jsgrid .jsgrid-table th .badge,\n    .table td .badge,\n    .jsgrid .jsgrid-table td .badge {\n      margin-bottom: 0; }\n  .table.table-borderless, .jsgrid .table-borderless.jsgrid-table {\n    border: none; }\n    .table.table-borderless tr, .jsgrid .table-borderless.jsgrid-table tr,\n    .table.table-borderless td,\n    .jsgrid .table-borderless.jsgrid-table td,\n    .table.table-borderless th,\n    .jsgrid .table-borderless.jsgrid-table th {\n      border: none; }\n  .table .table-dark, .jsgrid .jsgrid-table .table-dark {\n    background: #212529; }\n  .table.table-contextual, .jsgrid .table-contextual.jsgrid-table {\n    color: #ffffff; }\n\n.table > :not(:last-child) > :last-child > *, .jsgrid .jsgrid-table > :not(:last-child) > :last-child > *, .jsgrid .jsgrid-table > :not(:last-child) > :last-child > * {\n  border-bottom-color: #2c2e33; }\n\n.table > :not(:first-child), .jsgrid .jsgrid-table > :not(:first-child), .jsgrid .jsgrid-table > :not(:first-child) {\n  border-top: none; }\n\n.nav-tabs .nav-link {\n  background: #000000;\n  color: #ffffff;\n  border-radius: 0;\n  border: 1px solid #2c2e33;\n  padding: .75rem 1.5rem; }\n  @media (max-width: 576px) {\n    .nav-tabs .nav-link {\n      padding: 0.3rem 0.5rem; } }\n\n.nav-tabs .nav-item:first-child .nav-link {\n  border-radius: 4px 0 0 0; }\n\n.nav-tabs .nav-item:last-child .nav-link {\n  border-radius: 0 4px 0 0; }\n\n.nav-tabs.nav-tabs-vertical, .nav-tabs.nav-tabs-vertical-custom {\n  border-bottom: 0; }\n  .nav-tabs.nav-tabs-vertical .nav-link.active, .nav-tabs.nav-tabs-vertical-custom .nav-link.active {\n    border-bottom-color: #2c2e33; }\n  .nav-tabs.nav-tabs-vertical .nav-item:first-child .nav-link, .nav-tabs.nav-tabs-vertical-custom .nav-item:first-child .nav-link {\n    border-radius: 4px 4px 0 0; }\n  .nav-tabs.nav-tabs-vertical .nav-item:last-child .nav-link, .nav-tabs.nav-tabs-vertical-custom .nav-item:last-child .nav-link {\n    border-radius: 0 0 4px 4px; }\n\n.nav-tabs.nav-tabs-vertical-custom {\n  background: #0090e7;\n  border-radius: 4px; }\n  .nav-tabs.nav-tabs-vertical-custom .nav-link {\n    background: transparent;\n    border-color: rgba(255, 255, 255, 0.2);\n    color: #00314e;\n    font-weight: 700;\n    padding: 1.75rem; }\n    .nav-tabs.nav-tabs-vertical-custom .nav-link.active {\n      color: #ffffff;\n      border-color: rgba(255, 255, 255, 0.2); }\n\n.nav-pills {\n  border-bottom: 1px solid #2c2e33;\n  padding-bottom: 1rem; }\n  .nav-pills .nav-link {\n    border: 1px solid #2c2e33;\n    padding: .5rem 1.5rem; }\n    @media (max-width: 576px) {\n      .nav-pills .nav-link {\n        padding: 0.3rem 0.5rem; } }\n  .nav-pills .nav-item {\n    margin-right: 1rem; }\n    @media (max-width: 576px) {\n      .nav-pills .nav-item {\n        margin-right: 0.5rem;\n        font-size: 0.675; } }\n  .nav-pills.nav-pills-vertical {\n    border-bottom: 0; }\n    .nav-pills.nav-pills-vertical .nav-item {\n      margin-right: 0;\n      margin-bottom: 1rem; }\n  .nav-pills.nav-pills-custom {\n    border-bottom: 0; }\n    .nav-pills.nav-pills-custom .nav-link {\n      border-radius: 20px;\n      padding: .5rem 2.5rem;\n      background: #8489ab;\n      color: #000000; }\n      @media (max-width: 576px) {\n        .nav-pills.nav-pills-custom .nav-link {\n          padding: .3rem .5rem; } }\n      .nav-pills.nav-pills-custom .nav-link.active {\n        background: #fc424a;\n        color: #ffffff; }\n\n/* gradient pills */\n.nav-pills-primary .nav-link {\n  color: #0090e7; }\n  .nav-pills-primary .nav-link.active {\n    background: theme-color(primary); }\n\n.nav-pills-secondary .nav-link {\n  color: #e4eaec; }\n  .nav-pills-secondary .nav-link.active {\n    background: theme-color(secondary); }\n\n.nav-pills-success .nav-link {\n  color: #00d25b; }\n  .nav-pills-success .nav-link.active {\n    background: theme-color(success); }\n\n.nav-pills-info .nav-link {\n  color: #8f5fe8; }\n  .nav-pills-info .nav-link.active {\n    background: theme-color(info); }\n\n.nav-pills-warning .nav-link {\n  color: #ffab00; }\n  .nav-pills-warning .nav-link.active {\n    background: theme-color(warning); }\n\n.nav-pills-danger .nav-link {\n  color: #fc424a; }\n  .nav-pills-danger .nav-link.active {\n    background: theme-color(danger); }\n\n.nav-pills-light .nav-link {\n  color: #ffffff; }\n  .nav-pills-light .nav-link.active {\n    background: theme-color(light); }\n\n.nav-pills-dark .nav-link {\n  color: #0d0d0d; }\n  .nav-pills-dark .nav-link.active {\n    background: theme-color(dark); }\n\n.tab-content {\n  border: 1px solid #2c2e33;\n  border-top: 0;\n  padding: 2rem 1rem;\n  text-align: justify; }\n  .tab-content.tab-content-vertical {\n    border-top: 1px solid #2c2e33; }\n  .tab-content.tab-content-vertical-custom {\n    border: 0;\n    padding-top: 0; }\n  .tab-content.tab-content-custom-pill {\n    border: 0;\n    padding-left: 0; }\n\n/* Tabs */\n.add-items {\n  margin-bottom: 1.5rem;\n  overflow: hidden; }\n  .add-items input[type=\"text\"] {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n    width: 100%;\n    background: transparent; }\n  .add-items .btn, .add-items .fc button, .fc .add-items button, .add-items .ajax-upload-dragdrop .ajax-file-upload, .ajax-upload-dragdrop .add-items .ajax-file-upload, .add-items .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .add-items .swal2-styled {\n    margin-left: .5rem; }\n    .rtl .add-items .btn, .rtl .add-items .fc button, .fc .rtl .add-items button, .rtl .add-items .ajax-upload-dragdrop .ajax-file-upload, .ajax-upload-dragdrop .rtl .add-items .ajax-file-upload, .rtl .add-items .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .rtl .add-items .swal2-styled {\n      margin-left: auto;\n      margin-right: .5rem; }\n\n.list-wrapper {\n  height: 100%;\n  max-height: 100%; }\n  .list-wrapper ul {\n    padding: 0;\n    text-align: left;\n    list-style: none;\n    margin-bottom: 0; }\n    .list-wrapper ul li {\n      font-size: .9375rem;\n      padding: .8rem 0;\n      border-bottom: 1px solid #2c2e33; }\n      .list-wrapper ul li:first-child {\n        border-bottom: none; }\n      .list-wrapper ul li .form-check {\n        max-width: 90%;\n        margin-top: .25rem;\n        margin-bottom: .25rem; }\n  .list-wrapper input[type=\"checkbox\"] {\n    margin-right: 15px; }\n  .list-wrapper .remove {\n    cursor: pointer;\n    font-size: 1.125rem;\n    font-weight: 600;\n    width: 1.25rem;\n    height: 1.25rem;\n    line-height: 20px;\n    text-align: center; }\n  .list-wrapper .completed {\n    text-decoration: line-through;\n    text-decoration-color: #0090e7; }\n\n/*-------------------------------------------------------------------*/\n/* === Email === */\n/*-------------------------------------------------------------------*/\n/* === Plugin overrides === */\n/* Ace Editor */\n.ace_editor {\n  margin: auto;\n  height: 300px;\n  width: 100%;\n  font: 14px/normal SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace; }\n  .ace_editor .ace_content {\n    font-size: 0.875rem; }\n\n/* Avgrund Popup */\n.avgrund-popin {\n  position: absolute;\n  background: #fff;\n  padding: 37px 33px;\n  overflow: hidden;\n  visibility: hidden;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  top: 50%;\n  left: 50%;\n  z-index: 1000;\n  font-size: 0.875rem;\n  font-weight: normal;\n  font-weight: initial;\n  line-height: 1.85;\n  border-radius: 10px;\n  -webkit-transform: scale(0.8);\n  -moz-transform: scale(0.8);\n  -ms-transform: scale(0.8);\n  -o-transform: scale(0.8);\n  transform: scale(0.8); }\n  .avgrund-popin p {\n    font-size: 0.875rem;\n    font-weight: normal;\n    font-weight: initial; }\n\n.avgrund-overlay {\n  background: #000000;\n  width: 100%;\n  position: fixed;\n  top: 0px;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 101;\n  visibility: hidden;\n  opacity: 0;\n  filter: alpha(opacity=0); }\n\nbody.avgrund-ready,\n.avgrund-ready .avgrund-popin,\n.avgrund-ready .avgrund-overlay {\n  -webkit-transform-origin: 50% 50%;\n  -moz-transform-origin: 50% 50%;\n  -ms-transform-origin: 50% 50%;\n  -o-transform-origin: 50% 50%;\n  transform-origin: 50% 50%;\n  -webkit-transition: 0.3s all ease-out;\n  -moz-transition: 0.3s all ease-out;\n  -ms-transition: 0.3s all ease-out;\n  -o-transition: 0.3s all ease-out;\n  transition: 0.3s all ease-out; }\n\nbody.avgrund-active {\n  overflow: hidden; }\n\n.avgrund-active .avgrund-popin {\n  visibility: visible;\n  opacity: 1;\n  filter: alpha(opacity=100);\n  -webkit-transform: scale(1.1);\n  -moz-transform: scale(1.1);\n  -ms-transform: scale(1.1);\n  -o-transform: scale(1.1);\n  transform: scale(1.1); }\n\n.avgrund-active .avgrund-overlay {\n  visibility: visible;\n  opacity: .5;\n  filter: alpha(opacity=50);\n  height: 20000px; }\n\n.avgrund-popin.stack {\n  -webkit-transform: scale(1.5);\n  -moz-transform: scale(1.5);\n  -ms-transform: scale(1.5);\n  -o-transform: scale(1.5);\n  transform: scale(1.5); }\n\n.avgrund-active .avgrund-popin.stack {\n  -webkit-transform: scale(1.1);\n  -moz-transform: scale(1.1);\n  -ms-transform: scale(1.1);\n  -o-transform: scale(1.1);\n  transform: scale(1.1); }\n\n/* Optional close button styles */\n.avgrund-close {\n  display: block;\n  color: #fff;\n  background: #ffffff;\n  font-size: 10px;\n  text-decoration: none;\n  text-transform: uppercase;\n  position: absolute;\n  top: 10px;\n  right: 10px;\n  height: 17px;\n  width: 17px;\n  text-align: center;\n  line-height: 16px;\n  border-radius: 50px; }\n  .avgrund-close:hover {\n    color: #fff;\n    text-decoration: none; }\n\n/* Chartist */\n.ct-series-a .ct-line {\n  stroke: #a29afc;\n  stroke-width: 3px;\n  stroke-dasharray: 10px 20px; }\n\n.ct-series-a .ct-point {\n  stroke: #6355f9;\n  stroke-width: 10px;\n  stroke-linecap: round; }\n\n.ct-series-b .ct-line {\n  stroke: #80d691;\n  stroke-width: 3px;\n  stroke-dasharray: 10px 20px; }\n\n.ct-series-b .ct-point {\n  stroke: #4ac462;\n  stroke-width: 10px;\n  stroke-linecap: round; }\n\n.ct-series-c .ct-line {\n  stroke: #f7cb9b;\n  stroke-width: 3px;\n  stroke-dasharray: 10px 20px; }\n\n.ct-series-c .ct-point {\n  stroke: #f2a859;\n  stroke-width: 10px;\n  stroke-linecap: round; }\n\n.ct-series-a .ct-bar {\n  stroke: #a29afc;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n.ct-series-b .ct-bar {\n  stroke: #80d691;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n.ct-series-c .ct-bar {\n  stroke: #f7cb9b;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n.ct-series-d .ct-bar {\n  stroke: #fcb2b2;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n.ct-series-a .ct-slice-pie {\n  fill: #a29afc;\n  stroke-width: 4px; }\n\n.ct-series-b .ct-slice-pie {\n  fill: #80d691;\n  stroke-width: 4px; }\n\n.ct-series-c .ct-slice-pie {\n  fill: #fcb2b2;\n  stroke-width: 4px; }\n\n.ct-series-d .ct-slice-pie {\n  fill: #f7cb9b;\n  stroke-width: 4px; }\n\n.ct-series-a .ct-slice-donut-solid {\n  fill: #a29afc; }\n\n.ct-series-b .ct-slice-donut-solid {\n  fill: #80d691; }\n\n.ct-series-c .ct-slice-donut-solid {\n  fill: #fcb2b2; }\n\n.ct-series-a .ct-slice-donut-solid {\n  fill: #f7cb9b; }\n\n#ct-chart-dash-barChart .ct-series-a .ct-bar {\n  stroke: #fb9999;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n#ct-chart-dash-barChart .ct-series-b .ct-bar {\n  stroke: #8b81fb;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n#ct-chart-dash-barChart .ct-series-c .ct-bar {\n  stroke: #a29afc;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n#ct-chart-dash-barChart .ct-series-d .ct-bar {\n  stroke: #b9b3fc;\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre; }\n\n.ct-grid {\n  stroke: rgba(255, 255, 255, 0.2); }\n\n.ct-labels span {\n  color: #d9e9ff; }\n\n.c3-axis,\n.c3-legend-item {\n  fill: rgba(255, 255, 255, 0.7); }\n\n.c3 path,\n.c3 line {\n  stroke: #2e2f32; }\n\n.c3-chart-arcs-title {\n  fill: rgba(255, 255, 255, 0.7); }\n\n/* CodeMirror */\n.CodeMirror {\n  font-size: 0.875rem;\n  font-weight: normal;\n  height: auto;\n  text-align: left;\n  min-height: auto; }\n\n.CodeMirror-scroll {\n  min-height: auto; }\n\n/* Colorpicker */\n.asColorPicker-dropdown {\n  max-width: initial; }\n\n.asColorPicker-trigger {\n  height: auto;\n  border: 0; }\n  .asColorPicker-trigger span {\n    border-radius: 2px;\n    width: 35px; }\n\n/* Context Menu */\n.context-menu-icon:before {\n  color: #000000;\n  font: normal normal normal 15px/1 \"Material Design Icons\"; }\n\n.context-menu-icon.context-menu-icon-cut:before {\n  content: '\\F190'; }\n\n.context-menu-icon.context-menu-icon-edit:before {\n  content: '\\F3EF'; }\n\n.context-menu-icon.context-menu-icon-copy:before {\n  content: '\\F18F'; }\n\n.context-menu-icon.context-menu-icon-paste:before {\n  content: '\\F613'; }\n\n.context-menu-icon.context-menu-icon-delete:before {\n  content: '\\F6CB'; }\n\n.context-menu-icon.context-menu-icon-quit:before {\n  content: '\\F156'; }\n\n.context-menu-list {\n  box-shadow: none;\n  border: 1px solid #2c2e33; }\n  .context-menu-list .context-menu-item span {\n    color: #000000;\n    font-size: .75rem;\n    font-weight: 700; }\n  .context-menu-list .context-menu-item.context-menu-hover {\n    background: #000000; }\n    .context-menu-list .context-menu-item.context-menu-hover span {\n      color: #ffffff; }\n\n/* Data Tables */\n.dataTables_wrapper {\n  padding-left: 0;\n  padding-right: 0; }\n  .dataTables_wrapper label {\n    font-size: .8125rem; }\n  .dataTables_wrapper select {\n    padding: .4rem; }\n  .dataTables_wrapper .dataTables_length select {\n    min-width: 65px;\n    margin-left: .25rem;\n    margin-right: .25rem; }\n  .dataTables_wrapper .dataTable .btn, .dataTables_wrapper .dataTable .fc button, .fc .dataTables_wrapper .dataTable button, .dataTables_wrapper .dataTable .ajax-upload-dragdrop .ajax-file-upload, .ajax-upload-dragdrop .dataTables_wrapper .dataTable .ajax-file-upload, .dataTables_wrapper .dataTable .swal2-modal .swal2-buttonswrapper .swal2-styled, .swal2-modal .swal2-buttonswrapper .dataTables_wrapper .dataTable .swal2-styled {\n    padding: 0.1rem 1rem;\n    vertical-align: top; }\n  .dataTables_wrapper .dataTable thead th {\n    border-bottom-width: 0; }\n  .dataTables_wrapper .dataTable thead .sorting:before, .dataTables_wrapper .dataTable thead .sorting:after,\n  .dataTables_wrapper .dataTable thead .sorting_asc:before,\n  .dataTables_wrapper .dataTable thead .sorting_asc:after,\n  .dataTables_wrapper .dataTable thead .sorting_desc:before,\n  .dataTables_wrapper .dataTable thead .sorting_desc:after,\n  .dataTables_wrapper .dataTable thead .sorting_asc_disabled:before,\n  .dataTables_wrapper .dataTable thead .sorting_asc_disabled:after,\n  .dataTables_wrapper .dataTable thead .sorting_desc_disabled:before,\n  .dataTables_wrapper .dataTable thead .sorting_desc_disabled:after {\n    line-height: 2.5;\n    font-family: Material Design Icons;\n    font-size: .65rem; }\n  .dataTables_wrapper .dataTable thead .sorting:before,\n  .dataTables_wrapper .dataTable thead .sorting_asc:before,\n  .dataTables_wrapper .dataTable thead .sorting_desc:before,\n  .dataTables_wrapper .dataTable thead .sorting_asc_disabled:before,\n  .dataTables_wrapper .dataTable thead .sorting_desc_disabled:before {\n    content: \"\\F05D\";\n    right: 1.2em; }\n  .dataTables_wrapper .dataTable thead .sorting:after,\n  .dataTables_wrapper .dataTable thead .sorting_asc:after,\n  .dataTables_wrapper .dataTable thead .sorting_desc:after,\n  .dataTables_wrapper .dataTable thead .sorting_asc_disabled:after,\n  .dataTables_wrapper .dataTable thead .sorting_desc_disabled:after {\n    content: \"\\F045\";\n    right: 0.2em; }\n  .dataTables_wrapper .dataTables_paginate {\n    margin-top: 20px; }\n  .dataTables_wrapper .dataTables_info {\n    font-size: 0.875rem; }\n\n/* Dropify */\n.dropify-wrapper {\n  border: 2px dashed #2c2e33;\n  background: transparent;\n  border-radius: 7px; }\n  .dropify-wrapper:hover {\n    background-size: 30px 30px;\n    background-image: -webkit-linear-gradient(135deg, #2e2f32 25%, transparent 25%, transparent 50%, #2e2f32 50%, #2e2f32 75%, transparent 75%, transparent);\n    background-image: linear-gradient(135deg, #2e2f32 25%, transparent 25%, transparent 50%, #2e2f32 50%, #2e2f32 75%, transparent 75%, transparent);\n    -webkit-animation: stripes 2s linear infinite;\n    animation: stripes 2s linear infinite; }\n  .dropify-wrapper .dropify-message span.file-icon:before {\n    display: inline-block;\n    font: normal normal normal 24px/1 \"Material Design Icons\";\n    font-size: inherit;\n    text-rendering: auto;\n    line-height: inherit;\n    -webkit-font-smoothing: antialiased;\n    content: '\\F552';\n    color: #ffffff;\n    font-size: 1.25rem; }\n  .dropify-wrapper .dropify-message p {\n    font-size: .8125rem;\n    color: #ffffff; }\n  .dropify-wrapper .dropify-preview .dropify-infos {\n    background: rgba(255, 255, 255, 0.9); }\n    .dropify-wrapper .dropify-preview .dropify-infos .dropify-infos-inner .dropify-filename {\n      color: #0090e7;\n      font-size: 20px;\n      font-weight: 400; }\n    .dropify-wrapper .dropify-preview .dropify-infos .dropify-infos-inner .dropify-infos-message {\n      color: #333;\n      font-weight: 500; }\n  .dropify-wrapper .dropify-preview .dropify-render img {\n    opacity: 0.7; }\n  .dropify-wrapper .dropify-clear {\n    background: #fff;\n    border: none;\n    font-weight: 700;\n    color: color(gray); }\n\n/* Dropzone */\n.dropzone {\n  border: 1px solid #2c2e33;\n  min-height: 200px;\n  background: transparent; }\n  .dropzone .dz-message {\n    text-align: center;\n    width: 100%; }\n    .dropzone .dz-message span {\n      font-size: .8125rem;\n      color: #ffffff; }\n  .dropzone .dz-preview {\n    margin: 5px; }\n    .dropzone .dz-preview .dz-image {\n      width: 63px;\n      height: 63px;\n      border-radius: 6px; }\n    .dropzone .dz-preview .dz-error-message {\n      top: 80px;\n      left: -35px; }\n    .dropzone .dz-preview .dz-success-mark,\n    .dropzone .dz-preview .dz-error-mark {\n      margin-left: -17px; }\n      .dropzone .dz-preview .dz-success-mark svg,\n      .dropzone .dz-preview .dz-error-mark svg {\n        width: 35px;\n        height: 35px; }\n\n/* Flot chart */\n.flot-chart-container {\n  box-sizing: border-box;\n  width: 100%;\n  height: 100%;\n  min-height: 300px;\n  max-height: 100%; }\n\n.flot-chart {\n  width: 100%;\n  position: relative;\n  max-width: none;\n  height: 400px; }\n  .flot-chart canvas {\n    position: absolute;\n    top: 0;\n    bottom: 0; }\n\n/* Full Calendar */\n.fc button {\n  height: auto;\n  background-image: none;\n  text-shadow: none;\n  font-weight: normal;\n  background-color: #ffffff;\n  border-color: #2c2e33;\n  text-transform: capitalize;\n  color: #a8b2b9; }\n  .fc button .fc-icon-right-single-arrow:after,\n  .fc button .fc-icon-left-single-arrow:after {\n    color: #a8b2b9;\n    font: normal normal normal 20px/1 \"Material Design Icons\"; }\n  .fc button .fc-icon-right-single-arrow:after {\n    content: \"\\F142\"; }\n  .fc button .fc-icon-left-single-arrow:after {\n    content: \"\\F141\"; }\n\n.fc .fc-button-group .fc-button {\n  background-color: #ffffff;\n  margin: 0; }\n  .fc .fc-button-group .fc-button.fc-state-active {\n    color: #fc424a; }\n\n.fc .fc-header-toolbar {\n  margin-top: 2rem; }\n  .fc .fc-header-toolbar .fc-center h2, .fc .fc-header-toolbar .fc-center .h2 {\n    font-size: 1rem; }\n\n.fc .fc-widget-header {\n  border: 0; }\n  .fc .fc-widget-header table tr th {\n    border-width: 0 0 1px 0;\n    text-align: right;\n    padding: 1rem; }\n    .fc .fc-widget-header table tr th span {\n      font-size: 10px;\n      text-transform: uppercase;\n      color: #a8b2b9;\n      letter-spacing: 1px; }\n\n.fc .fc-content-skeleton table tr td {\n  padding: .5rem;\n  font-size: .875rem; }\n\n.fc .fc-event {\n  border: 0;\n  color: #ffffff;\n  padding: .5rem; }\n  .fc .fc-event.fc-start {\n    background: #0090e7;\n    border-radius: 4px;\n    border-left: 4px solid #0090e7; }\n  .fc .fc-event.fc-not-start, .fc .fc-event.fc-not-end {\n    background: #fc424a;\n    border-left: 4px solid #fc424a;\n    padding-left: .5rem; }\n  .fc .fc-event.fc-not-end {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0; }\n  .fc .fc-event .fc-title,\n  .fc .fc-event .fc-time {\n    color: #ffffff; }\n\n.fc-external-events .fc-event {\n  background: #191c24;\n  color: #ffffff;\n  border-width: 0 0 0 4px;\n  padding: 16px;\n  border-radius: 0;\n  margin-bottom: 10px; }\n  .fc-external-events .fc-event:nth-child(1) {\n    border-color: #0090e7; }\n  .fc-external-events .fc-event:nth-child(2) {\n    border-color: #fc424a; }\n  .fc-external-events .fc-event:nth-child(3) {\n    border-color: #00d25b; }\n  .fc-external-events .fc-event:nth-child(4) {\n    border-color: #8f5fe8; }\n  .fc-external-events .fc-event:nth-child(4) {\n    border-color: #ffab00; }\n\n.fc-unthemed tbody td {\n  border-color: #2c2e33; }\n\n/* Google Charts */\n.google-chart-container .google-charts {\n  width: 100%;\n  height: 280px;\n  min-height: 280px;\n  min-width: 100%; }\n\n/* Icheck */\n.icheck,\n.icheck-flat,\n.icheck-square,\n.icheck-line {\n  margin-bottom: .5rem; }\n  .icheck label,\n  .icheck-flat label,\n  .icheck-square label,\n  .icheck-line label {\n    font-size: .8125rem;\n    line-height: 1.5;\n    margin-left: 5px;\n    margin-bottom: 0; }\n\n/* Jquery File Upload */\n.ajax-upload-dragdrop {\n  border-color: #2c2e33;\n  border-style: dotted;\n  max-width: 100%; }\n  .ajax-upload-dragdrop span b {\n    font-size: .8125rem;\n    color: #ffffff;\n    font-weight: initial; }\n  .ajax-upload-dragdrop .ajax-file-upload {\n    background: #8f5fe8;\n    box-shadow: none;\n    height: auto; }\n\n.ajax-file-upload-container {\n  min-height: 100px; }\n  .ajax-file-upload-container .ajax-file-upload-statusbar {\n    max-width: 100%; }\n\n/* Js-grid */\n.jsgrid .jsgrid-button {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAFgEAYAAADx4WWjAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAZjElEQVR42u2deVyU1f7HzzyzDzCA7MgihCsY7uYOiZIamebVFl/Wy8zSxLTQuld/lmIuCGIu9cruLa9lXlNTUQsVUgQRNBbZF5F9lWEbZpj9/P74doQZ87LMDHjvPe9/vj7MPOf5fp6zjc/3e86D0H8rNTVRUd988/rrxpZTV3f48PHjixb1m+N5eVOmvP76hQtXryKEEMYVFWFhERG7dvW2nIKC4OBVq/71L1JOWdk774SHb9tmcoc1mpaWtjYLi6Ki+fPff/+f/7x2DS6YlobQpEkYJyQgxOViXFGxYUNExN693ZVXWDh//urV339/8yZCQiGUM3EixqTcqqq//e3gwQ8+MJkAnU6tVqvZbKk0KSkj47nnfv/d2nrcOInk1i2EHBw6HSBCyss3btyz53Eh4PiJEwkJCAkEGKenIzRlCsaJiQhZW2OcmentHRhYUCCX5+Tcv+/nZ/KaIKjVlZUSibPz3bu2tv7+jY1JSQjZ22P8++8ITZiA8c2bCIlEGNfU7Njx9dcbN5aXv/fe55/v2kXueFfHrawwzsjw8po1Kz9fp5PJVCoOx9T+sp4spLq6qcnJKTPTzy8wMDtbpWpurqlxcBAIEPL2RkihQKi8HCEWCyEOByGBACEPD4RkMoSysxGyshoxYtKkvLxnn83IiI3192cYoZDL1WjMduefhEbT2Njebm2dnT1x4sKFt26lpCDk7Q01Mm5cp719GyEPD4zz8+fNe/PNixcx1moxZhhz+9ftBTgce3tLy9ZWodDT08enqEirRUguh89YrE6r1SLU3o6QWDx27HPP3bjBYrHZLJZO1+933JDCwnnzVq8+eZJ0xvR0hKZNwzg5GSF3d4xJjXRt+2IxxpWVYWFRUX/964A5npc3e/aKFT/+aNg5k5IQsrPDOC9v/PjXX09Nzcpyc3vhhbKy5GSEXFygSY0fD6MWj4dxRcWmTZGRW7b0m+P5+dOnr1jx00+Gw+HNmwhZWmKcmTliRFBQdjb5vlrd1NTSYm2dmsrnDx0qlycnI+TsrC9EIMC4ouKDDyIitm41ucNqtUTS3GxlVVQ0f/66dZ0TWUYGQjNmQJPo6rhOp1RqtWy2YTkKRUFBVdXQoampPN7QoR0dt26BkPR0hCZPxpjMyDCRbdxoMgE6nUqlVnO5UmlSUmbmtGl374rFY8c2NcXFwQXv3RsxIigoKwtjpVKr7X5UUSgKCiorfXxSU0Wi4cOl0vh4KCcz08srMPD+fbk8O7u4+NlnTV4ThI6OrKzS0qFDc3JCQpYuPX1ap+vo0Ggev+PdIZPduVNY6O+flRUUFBLyyy9arVSqUAiFZnPcEI2mrq611cbG2HJUqrKyhgZX135znEKhUCgUCoVCoVAoFAqFQvlP4FGIyd//wIGYGPL0eOFCsOSRooWF/jHG3RT7R7kkwNHeDpY8W7106d69DRteesn4p9UGQbdZs8BOmAD26FGwajVYS8veFd/RAZbExtatA6tUgjW5gFdfBXv4MFhnZ7hTpEZ6D9TsiRNwFBsL9u23jXWc8FiUEi5IwqFlZWBLSkAIqaGeOn7uHBzNnAl2yBAoRyo1lYDHnvfDBUiV+/qCfeYZcOjs2Z45/s03cBQQAHbUKFM7TmB19wVwyNMTjlJSwCYlgW1tBUtqjM8HGxwMdsYMcDw319SOE7qNuIAD5eVwtGwZ2CVLwFpbgyU1RvrQypXmdrzHAvQhTaCoCOzy5eDoqlVwnJEBtqnJ3I73UQAJEQkEYG1t9T8nf++/UJKRqQBsNvSR3sfQBkiASPTHaX+cV1sLTUirhWNWt4PCAAuorQU7aBDYpUv1P5fJwJo+rcZoAfqjyvvvgz18GJpQXh4cjxkD1vTjvdEC9IUcOwZHZDglwyyEtREqLu4vARQKhUKhUCgUCoVCoVAoFMp/JL1+GAuLe0isbM8esCScum/fhAkIpaWdP9/vAsCxyEg4mjsX7MOHYA2XEE6ZAtbKSv/vJBx786b+eVwuWEdHsHFxINT4xUAGT5G9vMA6O4NtbgZrbw+WPJVOTARLHrMTS+LC48aBbWsD29gI1sFB/zrGYyCAhIpIXJgE927fBktCSCtXgv31V/07v3gx2DVrwA4dCjYwEOzp02DPnDGTAJJSQCLq48eDhdVlCB05Apa0fdKESFxg506wOTlgSVDwtdfAkiaZkAC2vt5YAQaP10kA4949/b8/KcWARGQMAxrk76TJEFJTwVZWGuv4YwKgU5FQEYn/EkjwjrRxQwyTP8ioRM4j1NTAdQzLN4EAfVpa9I9JDSgUYEmb77ogtyvkcxL4Jpg+cvMEASTiQiBtndQQEWIogNQE+Zz0KYLp48dPEFBSon9MhlUS/yXDIhk+iQDSxFQqsGKxfjkkQG52AWT8N1yRTZYmks8N5wHSREjc2MlJ/3zTdd5uBJBF54Zt1s4OLJmgyJ0nAkjNkBwKMgOTpkfOM7sAMkoYdmYyqvzZqvquDhKhBJJy9qRRzIQCYJgjna2qSv9TMk+QpkCakkSi/33iMIFMWGQiMx3dRNQNL0gi825uYEeNAks6rYsL2Dfe0D+PjP9kxu43Afn5YOfNAxsSApYMk6SzkiZE/u7tDZb8GjWc2SkUCoVCoVAoFAqFQqFQKBTjMNuiHViaMmQIHJFNgqOjYQVIRcVTKwAcJ2swydJFEuEhi0sDAvRXCPYdk20pC46TQAiJIxgG/0iN/PILfN/DY8AF6C8WTU8Hu3YtWPIQ2HBNJXko/MMPxl6/z+u9wHGSOhATA5Y8nSZbnhcWgiXLch88AEtibl9/bayAXvcBcHzwYDgiKQfdpQ6Q9cW//AKWy4U+QCL3/SAAHCc5EyRyTxa+9RQfH3DcMIjYd7ptQvqdjaQIkM7YHSQ2tmSJqR3vVgA4TqKMpI331HHCokXg+MWLpnb8iQL0R5UbN/rm+MKF5nacYLAxBgkVVVeDJaNKT1m8GBwnuxmYH7b+cEi21ScB7qlT//3ppI2TO06aWv/xx0Tm7g72wgWwZCOLjz7689NITgS545cu9bfjBI6+Q6TTkt8wpEZIqtknn4B95ZWBuuOG/FEDZC8VAo8HliRnkJ8IU6eC46SmBp4/aoC0ebKnyq1bYElKQWEhOE5+GlAoFAqFQqFQKBQKhUKhUCgDi8nCrKdOFRffuTN+/LJlMTEREdevIyQUkuAqPPPu6JBKEbp6ddmy7dtDQubOdXPz9SUBk75jsk0dWSwWi8Xi8xFiGDbbygpsVwFwzGIhxGIZLpB7CgQAGg1CGMOjYmIJXY/JmhvjMfu7U80NFTDQUAEEnc6w0/6HCfDyEovt7auru442+oJ0Oq0WITc3CwtbW7Kk0Xg4P/10//6dO7D4n8Uiq097/mJkPp/N5nC02t9+q6rKzx89GiGBgIzyMP6zWGB5PKEQoZMni4tTUwMCLl4sLc3MFAg6OrRatbrn2z5DTTMMl8swDKNUshCKilqyBOPOiae3TYE4yGZDdpBAALkoGOvfBhYLFu12dMCaV6iR3l+PnMflCgQdHRyY8lUqEMDj9b5A8m0ixNDxzu/B36EmOq/T272qQQCbzeUKhUolB4oATX3b9rr3Z5Gm1Sm99+fDOVotB35kCYXGNyFyvlBImhD5BrnT0IRUKlhtbFwT0mi0Wo1m0CDWtWuVlbm5s2aBI2TRf8/fJ8/lMgybrVbn5zc319b6+a1Zc/36t98ePtzZJ4jjSqVcjlBExKxZK1Zs3jxpkqOjl9edO2q1TqfVksGjezDGGGMOh81msRhGJuPMmePuboqftZmZjY3l5QUFCKlUCsXhw11HI7jDarVKhVBIiKenv39MzMiRtrYuLsbHnU02D+TmNjXV1np6du2c+m2bYRgGoaoqmay5meRmGI/JBEBT+jPHzQv9LTTQUAEDjcn+Tww/srjczgmKWDJrwjHGCGFM8pGeIgHw61Au5/G4XIGgoYFhuFyBoPPXjk6n0ajVLBZMQP33hggKhUKhUCgUCoVCoVAoFAoFIYTQhx8mJHz//dq1CO3b9/LLLS0IRUQsXNjSsm3b7ds//fThh/3tT6+fzEFekK0t/Ivsbkw+M9ws2Pz04eEuxhgrlX+eF0S2rH2qBTxd9FrAk5I6GKZ/Q0uEXvcBFxdLSxuburquj9ExRsjBgc+3sGho6HcBH32UkHD8eGgoxHOFQmjThlkOGNvYCARCYXt7XFx1dUHBCy8gJBTC1vBQH2fPlpZmZISE7NiRknLmDIvV2qpSKRQWFlBeZ91AnJdhWCyGYRiZLCpq5szly8mbJXoPC6F9+xYuxBghFotE6v8810Gng78LBJBOKRLpj0FyOWx4rlBAJB7Cqo9DymcYCG+HhZ092/fGx3k8v+dJof/HR50/vyxxsOt9//flGANn27bp05cv37wZxnUSWyepBp0vRrCzEwgsLEgTCgq6eLGkJC1twQIiPDjY03PMmCtX5s718Bg16sqVtjalsqNDJAInSV3AkU7H4bBYLBab3d6+fTtCP/9svJAeExWVlnbx4vLlCO3Z8+KLGCO0e/eCBRgfOZKRERv77rv96ArUQG9PKC9va5NInJ07kzmgKdTXKxRSKdmfov/o9TzA4zFM/72F3gwCIEw60G530ut7CeO4QNB1tOkcVQzfO/MUCmCzGYbNbmyEcby1lQhgGIZhsfp/JqZQKBQKhUKhUCgUCoVCofxv0uPAQmNjW1tbm5NTfX1ra3Pzyy9LJFKpVDp9Oiy/cnXV6XQ6na69ncfj8bjcjAw7O0tLK6vz5729nZ1dXDIzzSWg2ydzKSlFRfn5lpbNzTKZVLpwYUtLe3t7+xtvqFQajUYzdqxWi5BOZ2mJMUTN1GqdTqcjb0cXiUpL6+vr6trbvbycnJyd79/vtxqorJRIHj4cOTI7u7y8rOz0aY1Gq9VqfX0h0I0Ql8tmczgPH8Kz0oICCIU4OkIUc/hwEIgQj8fhcDgajY+Pi4uLyzvvDBvm6urmduyYqQQ89nS6rq6lpalpzJi8vMrKioq4OHDI11ck4vEEghs3LCz4fIFgzhxwzNNz3rxx4yZMmDmTx+NyudyRIwUCHo/HGz5cLBaJRKIjR0AuhwM34rvvSkrq6mprN240Ww1cuZKenpaWmalUajQajb+/lZVQKBB8+WVg4OjR/v7vv9/bC1y/np19797LL0ON/PxzR4darVKxWFOnDh8+cuS0aY6O1tY2NsnJfa4BuVyhUCjc3cvLGxrq69evl8tVKqXS318k4vN5vOvX++o4Ac4/fx5q7IMPSHShpKS2trZ23z5ja4ApL29sbGgIDq6qamqSSF56ic2G8CjYnTuNvYC+kEOHBAIul8stK2tr6+iQy6dOLStraKir6+17DLoIaG6WyWSyoCCFQq1Wq6dO5XI5HA6npgbu0+3bphLw6IIMwzDMtWtk1WtDQ0tLS8vEiX0uD9anOzoyDEKdK7rJjt+mzz6BUaywkAReVSqtVqcj7+TogwCtVqfT6eRyksQBw6GDA3xsrnCevb3+XghqdZ8FQGdNT+dwGIZh8vNBkK8vCOnt+we6B2bsqVPBImRjIxKJRH2f4BgvLwcHJ6cLF5ydbW1tbGJjVSqtVqMhaTVhYaZyPD4+MzM9fc4cjQZjjGfOtLQUi8XikhJfXw+PIUN+/bXPAmxtraysrNLS7O3FYmvrL7+EO9/erlSq1Wp1aOj16zk5WVmQUtA3x+/dy8iwsdHptFqtNjqax3N0dHREaNiwIUO8vDZvNvbGPJqJ7eysrMTi+/dHjHBzc3ffvFmhUKlUKoRUKrVarT53Diakdevi47OyMjO73wsF7viMGRhrtVptQoKFxZgxY8b4+ra0XLp0+TJCpaV790ZEGN/Hnvhb6MGDurra2vXrc3MrKysqoqNJ0gaPx2az2ZWVMBxevgyjSlkZhFutraHpzZ4N6SKTJgkEDg4ODghJJBcvXryIUEXFRx9t2oSQTCaXy+UIBQVFRkZGrls3bVpYWFhY7/OGuv05XVvb1NTUNHFicXFtbU3NoUMKhVqtUk2eDD/iyLDY+X2MoXNaWg4aZGf34IG7u6urq2tYWE7O6tXvvhsQcPfusWPHjq1fb23t7e3tjZBUWl1dXY3QvHmHDh06tGHDhAmrV69e/cUXJhNgSFWVRNLY6OtbXS2RSCQTJqjVsEUI5GApldbWIpFIVFDg6enu7uGRlGRpyWKxWJ27msXFbdmyZcvBgykpUVFRUaGhYrG7u7s7Qm1tICQ4ODIyMnLTpokT165duzYyss9ty9xcv/7ZZ599duDAzp1CoVCIcVSUm5ubG8bkOCkpIiIiYseOgfazWxISwsPDw6Ojw8N5PB4P46iowYMHD8Z4506RSCTCODFx9+7du033m8xsgKO7du3cKRAIBBgfPOjj4+PTKeTKlbCwsLC9ewfaz25JSTl06NCh8PDwcD6fz8d49247Ozs7jD/5hM1mszHOyzt79uzZ0FC5vKGhoWHIkKcuc/e550JDQ0P/7/+Cg/fv379/yxadDuYjS0sLCwsLhLhcoVAolEoRYrPZbKVyoP19IgpFa2trq739jz+GhISEnDhx8uTixYsXHz/e0dHc3NxsazvQ/lEoFAqFQqFQKBQKhUKhUChG0U2ERiBob1cqFYp9+ySStjapdP58iGa2tdnbW1uLxTt3jhzp5ubhcfbsUyMgL6+qqqIiKKisrKGhvv7YMUg5GDwY4jFlZbDlu7W1VouxTicUWltbWFhYXL7s7m5nZ2+/dKmHh4ODo2PP319gLI8e7hYV1dRUVQUGlpc3NDQ0XLum1ep0GJeWwtLDCRMglDRsGJvNZjPM4MEcDofD4Xz4YX19S0tz8yuv1NQ0NUkksbH9XgUymULR0WFvD2k29fUxMXfupKQkJvb0/Bs3cnKysvz8zp9PTU1OxhjygvovIMEUF9fV1dZu3QrRRUdHCws+n8/v+crsgAA/v2efzcnhcjkcLvf0aYlEKm1tXbPm/v3a2urqnu9q32cBLS3t7TLZsmWwGrW8fPZsf/+xY/PyelsQZLlcuaLVarUYI1Rd3dTU3Gz+Fd4MQgixWCT3zdLyt9+yszMze79NAkTibW2hHB5PKOTxeDzymngzCvDxcXZ2cgoP1+lg7wKVSqPRalev7m1BGHO5XO6qVba2Hh7u7ikpkyYNHTpsWHOzuQU84s6d4uKCgpiY06eTkxMTMYbOOWpUd+fFxxcW5udv356QUF9fW4txeXlZWWlp3zOwesujplJd3dTU2CgQlJXV1zc0nD/f1NTeLpUGB8OmL6dPw7B57RpE4p2ctFoej8t99VWRaNAgOztf39zc5ctXrECIzy8vLy8/dWrSpC1btmxZvtzff+XKlSt7/kqM3vJoHhg8eNAge3uFYtq0kSNHjXrhBVdXW1s7ux07RCI+n8+fOBEmtM8/hy3KQ0OHDHnmGR+fqioXl4cPJZIXX9Tp0tLS0lJSiopKSkpKli0rKrp69erVc+dyck6dOnWq/9faP0ZiYl5ebq6bW2pqQUF+/uM7OV27tm5daKit7YkTISEhIUlJkEiD8fHjwcHBwcnJKSkHDx482PfUsn7jzp2vvvrqKzu7b78NCAgIyMjYtIkImT179uz4+Nu3o6Ojo21sBtrPbklOjoyMjLS0PH48KCgoKC5u/XoQcvTojBkzZmRkyGR1dXV1gwcbex2z7dExdWpYWFhYe3tVVWpqaurChTKZVCqVPniAsUaj0bi58flisVjc92Q/swsguLlNnjx5skx26dKqVatW/eMfarVGo9HodAzD5/P5Eom5r0+hUCgUCoVCoVAoFAqFQqH8b3PsWHFxauqLLx49mp+fmLho0UD702Nyc1ta6urc3RHas2fBAowR2rkzOBjjTz+9e/fCBeO3ZzDbKiaZTKNRqRgmIOD06e3bb95EiMuFMIdGo1Ih9N13hYXJyatWPbUCnn/+3Lndu2NjHz5sbKyoGDKEOO7q6uHh51dRkZPzl7989tnkyU+dgDfeiI//+9+/+CI1tbDw1q05cxDi80UihBiGz7ew0Gji4195ZevW558Xi/l8oRD2yX8q2LUrMzM29r33EAoPDwrCGKEvvnjtNYwR2rVrwQKMY2OrqwsKnn/ebA6MHn3y5JYtiYlTppw6tW1bz9e4x8RUVOTkzJpFNpFH6MABcBw6a3R0Ts5vv61dazbH58y5dGn//h9+QGjr1mnTOi88evQPP3z88Y0bdXUKhUz2eJQxL6+lpa7OzQ2h6OhXX1WpEIqOXroUY4R27JgzB+OVKxMSjh//6iuzOf4HzPTpzs5Dh2ZmImRt7eSEEEIikViMUHZ2dXVBwaxZfn7ffbd+fV7egwetrQ0NnUsAAwLOnAkPv3ULIY1GqeRyEZLL29oQmjnTzy8wMD7+229nzVqxYs0acwt4FOi+cqWqKi8vIGDRonPndu+OiZHLOzqkUisr8ioKe3t7e0/PsjIPDyurQYNKS9PTy8uzsgIDEVKrlUqEXF3t7T08KisfPHjrrQMHvLwEAjabwyFv6e4HAYQHD6RSicTNbc6cM2d27IiLKympqSksHD4cISsre3uEEMIY3IL9JxBiGDZbpyspefvtI0e8vJ55xsrKzq6iwtyOEx4bRr29razs7KqqcnLefHP//tGj584dOXLmzMuXEWptra8HAbDDgVqtUCD0669Llnz66dy5/e14r3nrrbi4o0ePHkXo44/HjcN4796srGvXNmwYaL96TVxcZWVu7owZA+3Hfw3/D73/bnBl1mLvAAAAAElFTkSuQmCC); }\n\n.jsgrid .jsgrid-grid-header {\n  border: none;\n  border-top: 0; }\n\n.jsgrid .jsgrid-grid-body {\n  border-color: rgba(255, 255, 255, 0.1); }\n\n.jsgrid .jsgrid-table th {\n  font-weight: initial;\n  font-weight: 700; }\n\n.jsgrid .jsgrid-table th,\n.jsgrid .jsgrid-table td {\n  background-color: #0d0d0d; }\n\n.jsgrid .jsgrid-table .jsgrid-filter-row input[type=number] {\n  padding: .56rem 0; }\n\n.jsgrid .jsgrid-header-sort:before {\n  margin-top: 10px;\n  float: right; }\n\n.jsgrid .jsgrid-header-sort-asc:before {\n  border-color: transparent transparent #ffffff; }\n\n.jsgrid .jsgrid-header-sort-desc:before {\n  border-color: #ffffff transparent transparent; }\n\n.jsgrid .jsgrid-pager {\n  line-height: 2; }\n\n.jsgrid .jsgrid-pager-current-page {\n  padding: 0.5rem 0.75rem;\n  font-weight: initial;\n  line-height: 1.25; }\n\n.jsgrid .jsgrid-cell,\n.jsgrid .jsgrid-header-cell {\n  border: 1px solid rgba(255, 255, 255, 0.1); }\n\n/* Jvectormap */\n.jvectormap-container {\n  background: #ffffff; }\n\n.vector-map {\n  width: 100%;\n  height: 300px; }\n\n.gauge text {\n  fill: #6c7293; }\n\n/* Light Gallery */\n.lightGallery {\n  width: 100%;\n  margin: 0; }\n  .lightGallery .image-tile {\n    position: relative;\n    margin-bottom: 30px; }\n    .lightGallery .image-tile .demo-gallery-poster {\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0; }\n      .lightGallery .image-tile .demo-gallery-poster img {\n        display: block;\n        margin: auto;\n        width: 40%;\n        max-width: 60px;\n        min-width: 20px; }\n    .lightGallery .image-tile img {\n      max-width: 100%;\n      width: 100%; }\n\n/* Listify */\n.listify-list input {\n  border: 1px solid #f2f7f8;\n  color: color(gray-light);\n  background: #fff; }\n\n.listify-list ul.list {\n  list-style: none;\n  padding-left: 0; }\n  .listify-list ul.list li {\n    display: block;\n    border-bottom: 1px solid #2c2e33;\n    padding: 15px 10px; }\n    .listify-list ul.list li h5, .listify-list ul.list li .h5 {\n      color: #0090e7; }\n    .listify-list ul.list li p {\n      color: color(gray-light);\n      margin: 0; }\n\n.morris-chart text {\n  fill: #6c7293; }\n\n/* No-ui-slider */\n.noUi-target {\n  border: none;\n  box-shadow: none;\n  border-radius: 0px; }\n  .noUi-target .noUi-handle {\n    width: 20px;\n    height: 20px;\n    border-radius: 100%;\n    box-shadow: none;\n    background: #000000; }\n    .noUi-target .noUi-handle:before {\n      display: none; }\n    .noUi-target .noUi-handle:after {\n      content: \"\";\n      width: 10px;\n      height: 10px;\n      border-radius: 100%;\n      left: 4px;\n      top: 4px; }\n  .noUi-target.noUi-horizontal {\n    height: 0.25rem; }\n    .noUi-target.noUi-horizontal .noUi-handle {\n      top: -8px; }\n  .noUi-target.noUi-vertical {\n    width: 0.25rem;\n    height: 156px;\n    display: inline-block; }\n    .noUi-target.noUi-vertical .noUi-handle {\n      left: -7px; }\n  .noUi-target .noUi-base {\n    box-shadow: none;\n    border: none; }\n    .noUi-target .noUi-base .noUi-connect {\n      background: #0090e7;\n      box-shadow: none; }\n    .noUi-target .noUi-base .noUi-origin {\n      background: #00d25b; }\n  .noUi-target .noUi-pips .noUi-marker-horizontal,\n  .noUi-target .noUi-pips .noUi-marker-vertical {\n    background: #2c2e33; }\n  .noUi-target .noUi-pips .noUi-marker-horizontal {\n    height: 9px;\n    width: 1px; }\n  .noUi-target .noUi-pips .noUi-marker-vertical {\n    height: 1px;\n    width: 9px; }\n  .noUi-target .noUi-pips .noUi-value {\n    color: #ffffff;\n    font-size: 0.94rem;\n    font-weight: 700; }\n\n/* Slider Color variations */\n.slider-primary .noUi-base .noUi-connect {\n  background: #0090e7; }\n\n.slider-primary .noUi-base .noUi-origin {\n  background: #0090e7; }\n  .slider-primary .noUi-base .noUi-origin .noUi-handle:after {\n    background: #0090e7; }\n  .slider-primary .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #0090e7;\n    color: #ffffff; }\n\n.slider-secondary .noUi-base .noUi-connect {\n  background: #e4eaec; }\n\n.slider-secondary .noUi-base .noUi-origin {\n  background: #e4eaec; }\n  .slider-secondary .noUi-base .noUi-origin .noUi-handle:after {\n    background: #e4eaec; }\n  .slider-secondary .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #e4eaec;\n    color: #ffffff; }\n\n.slider-success .noUi-base .noUi-connect {\n  background: #00d25b; }\n\n.slider-success .noUi-base .noUi-origin {\n  background: #00d25b; }\n  .slider-success .noUi-base .noUi-origin .noUi-handle:after {\n    background: #00d25b; }\n  .slider-success .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #00d25b;\n    color: #ffffff; }\n\n.slider-info .noUi-base .noUi-connect {\n  background: #8f5fe8; }\n\n.slider-info .noUi-base .noUi-origin {\n  background: #8f5fe8; }\n  .slider-info .noUi-base .noUi-origin .noUi-handle:after {\n    background: #8f5fe8; }\n  .slider-info .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #8f5fe8;\n    color: #ffffff; }\n\n.slider-warning .noUi-base .noUi-connect {\n  background: #ffab00; }\n\n.slider-warning .noUi-base .noUi-origin {\n  background: #ffab00; }\n  .slider-warning .noUi-base .noUi-origin .noUi-handle:after {\n    background: #ffab00; }\n  .slider-warning .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #ffab00;\n    color: #ffffff; }\n\n.slider-danger .noUi-base .noUi-connect {\n  background: #fc424a; }\n\n.slider-danger .noUi-base .noUi-origin {\n  background: #fc424a; }\n  .slider-danger .noUi-base .noUi-origin .noUi-handle:after {\n    background: #fc424a; }\n  .slider-danger .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #fc424a;\n    color: #ffffff; }\n\n.slider-light .noUi-base .noUi-connect {\n  background: #ffffff; }\n\n.slider-light .noUi-base .noUi-origin {\n  background: #ffffff; }\n  .slider-light .noUi-base .noUi-origin .noUi-handle:after {\n    background: #ffffff; }\n  .slider-light .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #ffffff;\n    color: #ffffff; }\n\n.slider-dark .noUi-base .noUi-connect {\n  background: #0d0d0d; }\n\n.slider-dark .noUi-base .noUi-origin {\n  background: #0d0d0d; }\n  .slider-dark .noUi-base .noUi-origin .noUi-handle:after {\n    background: #0d0d0d; }\n  .slider-dark .noUi-base .noUi-origin .noUi-handle .noUi-tooltip {\n    background: #0d0d0d;\n    color: #ffffff; }\n\n/* Owl-carousel */\n.owl-carousel img {\n  border-radius: 4px; }\n\n.owl-carousel.full-width .owl-nav {\n  position: absolute;\n  top: 30%;\n  width: 100%;\n  margin-top: 0; }\n  .owl-carousel.full-width .owl-nav .owl-prev,\n  .owl-carousel.full-width .owl-nav .owl-next {\n    background: transparent;\n    color: #ffffff; }\n    .owl-carousel.full-width .owl-nav .owl-prev i:before,\n    .owl-carousel.full-width .owl-nav .owl-next i:before {\n      width: 60px;\n      height: 60px;\n      background: rgba(0, 0, 0, 0.5);\n      border-radius: 100%;\n      font-size: 1.875rem;\n      font-weight: bold;\n      line-height: 2; }\n  .owl-carousel.full-width .owl-nav .owl-prev {\n    float: left; }\n  .owl-carousel.full-width .owl-nav .owl-next {\n    float: right; }\n\n.owl-carousel.full-width .owl-dots {\n  margin-top: 1rem; }\n\n.owl-carousel .item-video {\n  width: 200px;\n  height: 200px; }\n\n.owl-carousel.portfolio-carousel.full-width .owl-nav {\n  top: auto;\n  bottom: 100%;\n  text-align: right; }\n  .rtl .owl-carousel.portfolio-carousel.full-width .owl-nav {\n    text-align: left; }\n  .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-prev,\n  .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-next {\n    color: #a7afb7;\n    margin: 0;\n    padding: 0px 2px 14px 2px !important; }\n    @media (min-width: 768px) and (max-width: 1200px) {\n      .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-prev,\n      .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-next {\n        padding: 0px 2px 19px 0px; } }\n    .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-prev i,\n    .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-next i {\n      text-align: center; }\n      .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-prev i:before,\n      .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-next i:before {\n        width: 32px;\n        height: 32px;\n        font-size: 1.25rem;\n        font-weight: normal;\n        line-height: 32px; }\n        @media (min-width: 768px) and (max-width: 1200px) {\n          .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-prev i:before,\n          .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-next i:before {\n            width: 20px;\n            height: 20px;\n            font-size: .75rem;\n            line-height: 20px; } }\n  .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-prev {\n    float: none; }\n  .owl-carousel.portfolio-carousel.full-width .owl-nav .owl-next {\n    float: none; }\n\n.owl-carousel.portfolio-carousel.full-width .owl-dots {\n  margin-top: 1rem; }\n\n/* Progressbar-js */\n.progress-bar-js-line {\n  height: 6px; }\n\n.progressbar-js-circle {\n  width: 100%;\n  position: relative; }\n\n.demo-progress-circle {\n  -webkit-transform: rotate(-90deg);\n  transform: rotate(-90deg); }\n\n.progress {\n  background-color: #2f323a;\n  border-radius: 0px; }\n  .progress .progress-bar {\n    border-radius: 0px; }\n\n/* Pws-tabs */\n.pws_tabs_container ul.pws_tabs_controll {\n  border-bottom: 1px solid #0090e7; }\n  .pws_tabs_container ul.pws_tabs_controll li:first-child a {\n    border-radius: 5px 0px 0px 0px; }\n  .pws_tabs_container ul.pws_tabs_controll li:last-child a {\n    border-right: 1px solid #0090e7;\n    border-radius: 0px 5px 0px 0px; }\n  .pws_tabs_container ul.pws_tabs_controll li a {\n    border: 1px solid #0090e7;\n    border-bottom: none;\n    border-right: none;\n    background: #fff;\n    color: #0090e7;\n    padding: 0.6em 1.3em;\n    margin-right: 0; }\n    .pws_tabs_container ul.pws_tabs_controll li a:hover {\n      background: #fff;\n      color: #0090e7; }\n    .pws_tabs_container ul.pws_tabs_controll li a.pws_tab_active {\n      background: #0090e7;\n      color: #fff; }\n\n.pws_tabs_container .demo-tabs {\n  border: 1px solid #0090e7;\n  border-radius: 0px 5px 5px 5px;\n  overflow: hidden;\n  background: color(white-smoke);\n  margin-bottom: 45px;\n  padding-top: 3.5rem; }\n  .pws_tabs_container .demo-tabs .CodeMirror {\n    margin-bottom: 20px; }\n\n.pws_tabs_container.pws_tabs_vertical .pws_tabs_controll {\n  border-right: none;\n  border-bottom: none; }\n  .pws_tabs_container.pws_tabs_vertical .pws_tabs_controll li:first-child a {\n    border-radius: 5px 0px 0px 0px; }\n  .pws_tabs_container.pws_tabs_vertical .pws_tabs_controll li:last-child a {\n    border-bottom: 1px solid #0090e7;\n    border-radius: 0px 0px 0px 5px;\n    border-right: 0px; }\n  .pws_tabs_container.pws_tabs_vertical .pws_tabs_controll li a {\n    border-radius: 0px;\n    border: 1px solid #0090e7;\n    border-right: none;\n    border-bottom: none;\n    margin-bottom: 0; }\n\n.pws_tabs_container.pws_tabs_horizontal_bottom .pws_tabs_list {\n  margin-bottom: 0; }\n\n.pws_tabs_container.pws_tabs_horizontal_bottom .pws_tabs_controll {\n  border-top: 1px solid #0090e7;\n  border-right: none;\n  border-bottom: none; }\n  .pws_tabs_container.pws_tabs_horizontal_bottom .pws_tabs_controll li:first-child a {\n    border-radius: 0px 0px 0px 5px; }\n  .pws_tabs_container.pws_tabs_horizontal_bottom .pws_tabs_controll li:last-child a {\n    border-radius: 0px 0px 5px 0px;\n    border-right: 1px solid #0090e7; }\n  .pws_tabs_container.pws_tabs_horizontal_bottom .pws_tabs_controll li a {\n    border-radius: 0px;\n    border: 1px solid #0090e7;\n    border-top: none;\n    border-right: none;\n    margin-right: 0;\n    margin-bottom: 0; }\n\n.pws_tabs_container.pws_tabs_rtl .pws_tabs_controll li:first-child a {\n  border-radius: 0px 5px 0px 0px;\n  border-right: 1px solid #0090e7; }\n\n.pws_tabs_container.pws_tabs_rtl .pws_tabs_controll li:last-child a {\n  border-right: none;\n  border-radius: 5px 0px 0px 0px; }\n\n.pws_tabs_container.pws_tabs_rtl .pws_tabs_controll li a {\n  border: 1px solid #0090e7;\n  border-bottom: none;\n  border-right: none;\n  margin-right: 0;\n  margin-left: 0; }\n\n/* Quill Editor */\n.quill-container {\n  height: 300px; }\n\n.ql-toolbar.ql-snow,\n.quill-container.ql-snow {\n  border-color: #2c2e33; }\n\n/* Rating */\n.br-theme-fontawesome-stars .br-widget a,\n.br-theme-css-stars .br-widget a {\n  font-size: 20px; }\n  .br-theme-fontawesome-stars .br-widget a:after,\n  .br-theme-css-stars .br-widget a:after {\n    color: #4d4d4d; }\n  .br-theme-fontawesome-stars .br-widget a.br-selected:after, .br-theme-fontawesome-stars .br-widget a.br-active:after,\n  .br-theme-css-stars .br-widget a.br-selected:after,\n  .br-theme-css-stars .br-widget a.br-active:after {\n    color: #ffab00; }\n\n.br-theme-bars-1to10 .br-widget a,\n.br-theme-bars-movie .br-widget a,\n.br-theme-bars-pill .br-widget a,\n.br-theme-bars-reversed .br-widget a,\n.br-theme-bars-horizontal .br-widget a {\n  background-color: #4d4d4d;\n  color: #ffab00; }\n  .br-theme-bars-1to10 .br-widget a.br-selected, .br-theme-bars-1to10 .br-widget a.br-active,\n  .br-theme-bars-movie .br-widget a.br-selected,\n  .br-theme-bars-movie .br-widget a.br-active,\n  .br-theme-bars-pill .br-widget a.br-selected,\n  .br-theme-bars-pill .br-widget a.br-active,\n  .br-theme-bars-reversed .br-widget a.br-selected,\n  .br-theme-bars-reversed .br-widget a.br-active,\n  .br-theme-bars-horizontal .br-widget a.br-selected,\n  .br-theme-bars-horizontal .br-widget a.br-active {\n    background-color: #ffab00; }\n\n.br-theme-bars-square .br-widget a {\n  border-color: #4d4d4d;\n  color: #6c7293;\n  background: transparent; }\n  .br-theme-bars-square .br-widget a.br-selected, .br-theme-bars-square .br-widget a.br-active {\n    color: #ffab00;\n    border-color: #ffab00; }\n\n.br-theme-bars-movie .br-widget .br-current-rating,\n.br-theme-bars-reversed .br-widget .br-current-rating,\n.br-theme-bars-1to10 .br-widget .br-current-rating,\n.br-theme-bars-horizontal .br-widget .br-current-rating {\n  color: #ffffff;\n  font-size: 0.875rem;\n  font-weight: initial; }\n\n.br-theme-bars-1to10 {\n  height: 26px; }\n  .br-theme-bars-1to10 .br-widget {\n    height: 24px; }\n    .br-theme-bars-1to10 .br-widget .br-current-rating {\n      line-height: 1; }\n\n.br-theme-bars-pill .br-widget a {\n  line-height: 2.5;\n  color: #6c7293; }\n\n/* Select2 */\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background: #0090e7; }\n\n.select2-container--default .select2-selection--single,\n.select2-container--default .select2-dropdown,\n.select2-container--default .select2-selection--multiple {\n  border-color: #2c2e33;\n  background: #000000; }\n  .select2-container--default .select2-selection--single .select2-search__field,\n  .select2-container--default .select2-dropdown .select2-search__field,\n  .select2-container--default .select2-selection--multiple .select2-search__field {\n    border-color: #2c2e33; }\n\n.select2-container--default .select2-selection--single {\n  height: auto; }\n  .select2-container--default .select2-selection--single .select2-selection__rendered {\n    color: #ffffff;\n    line-height: 14px; }\n\n.select2-container--default .select2-dropdown {\n  font-size: .8125rem; }\n\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #2c2e33; }\n\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  color: color(white);\n  border: 0;\n  border-radius: 3px;\n  padding: 6px;\n  font-size: .625rem;\n  font-family: inherit;\n  line-height: 1; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice .select2-selection__choice__remove {\n    color: color(white); }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice:nth-child(5n+1) {\n    background: #0090e7; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice:nth-child(5n+2) {\n    background: #00d25b; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice:nth-child(5n+3) {\n    background: #8f5fe8; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice:nth-child(5n+4) {\n    background: #fc424a; }\n  .select2-container--default .select2-selection--multiple .select2-selection__choice:nth-child(5n+5) {\n    background: #ffab00; }\n\n/* Summernote Editor */\n.note-editor.note-frame {\n  border: 1px solid #2c2e33; }\n\n.note-popover {\n  border: 1px solid #2c2e33; }\n\n/* SweetAlert */\n.swal2-container {\n  z-index: 1500; }\n\n.swal2-modal {\n  min-height: 315px;\n  -webkit-align-items: center;\n  align-items: center;\n  -webkit-justify-content: center;\n  justify-content: center;\n  -webkit-flex-direction: column;\n  flex-direction: column;\n  border-radius: 10px; }\n  .swal2-modal .swal2-title {\n    font-size: 25px;\n    line-height: 1;\n    font-weight: 500;\n    color: #ffffff;\n    font-weight: initial;\n    margin-bottom: 0; }\n  .swal2-modal .swal2-icon,\n  .swal2-modal .swal2-success-ring {\n    margin-top: 0;\n    margin-bottom: 42px; }\n  .swal2-modal .swal2-buttonswrapper {\n    margin-top: 0;\n    padding: 0; }\n    .swal2-modal .swal2-buttonswrapper .swal2-styled {\n      margin-top: 0;\n      font-weight: initial; }\n      .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-confirm {\n        font-weight: initial;\n        margin-top: 32px; }\n      .swal2-modal .swal2-buttonswrapper .swal2-styled.swal2-cancel {\n        margin-top: 32px;\n        border: 1px solid #2c2e33;\n        color: #ffffff;\n        font-weight: initial; }\n  .swal2-modal .swal2-content {\n    font-size: 0.875rem;\n    font-weight: 500;\n    color: #ffffff;\n    font-weight: initial;\n    margin-top: 11px; }\n  .swal2-modal .swal2-close {\n    font-size: 20px; }\n  .swal2-modal .swal2-success-ring {\n    left: -30px; }\n\n/* Switchery */\n.switchery {\n  width: 35px;\n  height: 21px;\n  border-radius: 11px; }\n  .switchery > small, .switchery > .small {\n    width: 20px;\n    height: 20px; }\n\n.switchery-small {\n  width: 25px;\n  height: 13px; }\n  .switchery-small > small, .switchery-small > .small {\n    width: 13px;\n    height: 13px; }\n\n.switchery-large {\n  width: 50px;\n  height: 28px;\n  border-radius: 14px; }\n  .switchery-large > small, .switchery-large > .small {\n    width: 27px;\n    height: 27px; }\n\n/* Tags */\ndiv.tagsinput {\n  padding: 15px 15px 10px;\n  border-color: #2c2e33; }\n  div.tagsinput span.tag {\n    background: #0090e7;\n    border: 0;\n    color: color(white);\n    padding: 6px 14px;\n    font-size: .8125rem;\n    font-family: inherit;\n    line-height: 1; }\n    div.tagsinput span.tag a {\n      color: color(white); }\n\n/* TinyMCE Editor */\n.mce-tinymce.mce-panel,\n.mce-tinymce .mce-panel {\n  border-color: #2c2e33; }\n\n/* Toast */\n.jq-toast-wrap .jq-icon-success {\n  background-color: #00d25b; }\n\n.jq-toast-wrap .jq-icon-info {\n  background-color: #8f5fe8; }\n\n.jq-toast-wrap .jq-icon-warning {\n  background-color: #ffab00; }\n\n.jq-toast-wrap .jq-icon-error {\n  background-color: #fc424a; }\n\n/* Typeahead */\n.tt-menu,\n.gist {\n  text-align: left; }\n\n.twitter-typeahead {\n  max-width: 100%; }\n\n.typeahead {\n  background-color: #2A3038; }\n  .typeahead:focus {\n    border-color: #2c2e33; }\n\n.tt-query {\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); }\n\n.tt-hint {\n  color: color(gray); }\n\n.tt-menu {\n  width: 100%;\n  margin: 12px 0;\n  padding: 8px 0;\n  background-color: #000000;\n  border: 1px solid #2c2e33;\n  -webkit-border-radius: 8px;\n  -moz-border-radius: 8px;\n  border-radius: 8px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); }\n\n.tt-suggestion {\n  padding: 3px 20px;\n  font-size: inherit; }\n  .tt-suggestion:hover {\n    cursor: pointer;\n    color: color(white);\n    background-color: #0090e7; }\n  .tt-suggestion .tt-cursor {\n    color: color(white);\n    background-color: #0090e7; }\n  .tt-suggestion p {\n    margin: 0; }\n\n/* Wysi Editor */\n.wysi-editor #toolbar [data-wysihtml-action] {\n  float: right; }\n\n.wysi-editor #toolbar,\n.wysi-editor textarea {\n  width: 920px;\n  padding: 5px;\n  -webkit-box-sizing: border-box;\n  -ms-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box; }\n\n.wysi-editor textarea {\n  height: 280px;\n  border: 1px solid #2c2e33;\n  font-family: inherit;\n  font-size: 1rem; }\n\n.wysi-editor textarea:focus {\n  color: black;\n  border: 1px solid #2c2e33; }\n\n.wysi-editor .wysihtml-action-active,\n.wysi-editor .wysihtml-command-active {\n  font-weight: bold; }\n\n.wysi-editor [data-wysihtml-dialog] {\n  margin: 5px 0 0;\n  padding: 5px;\n  border: 1px solid #666; }\n\n.wysi-editor a[data-wysihtml-command-value=\"red\"] {\n  color: #fc424a; }\n\n.wysi-editor a[data-wysihtml-command-value=\"green\"] {\n  color: #00d25b; }\n\n.wysi-editor a[data-wysihtml-command-value=\"blue\"] {\n  color: #8f5fe8; }\n\n.wysi-editor .wysihtml-editor,\n.wysi-editor .wysihtml-editor table td {\n  outline: 1px dotted #2c2e33; }\n\n.wysi-editor code {\n  background: #ddd;\n  padding: 10px;\n  white-space: pre;\n  display: block;\n  margin: 1em 0; }\n\n.wysi-editor .toolbar {\n  display: block;\n  border-radius: 3px;\n  border: 1px solid #fff;\n  margin-bottom: 9px;\n  line-height: 1em; }\n\n.wysi-editor .toolbar a {\n  display: inline-block;\n  height: 1.5em;\n  border-radius: 3px;\n  font-size: 1rem;\n  line-height: 1.5em;\n  text-decoration: none;\n  background: color(white);\n  border: 1px solid #2c2e33;\n  padding: 0 0.2em;\n  margin: 1px 0;\n  color: #0090e7; }\n\n.wysi-editor .toolbar .wysihtml-action-active,\n.wysi-editor .toolbar a.wysihtml-command-active {\n  background: #222;\n  color: white; }\n\n.wysi-editor .toolbar .block {\n  padding: 1px;\n  display: inline-block;\n  background: #eee;\n  border-radius: 3px;\n  margin: 0 1px 1px 0; }\n\n.wysi-editor div[data-wysihtml-dialog=\"createTable\"] {\n  position: absolute;\n  background: white; }\n\n.wysi-editor div[data-wysihtml-dialog=\"createTable\"] td {\n  width: 10px;\n  height: 5px;\n  border: 1px solid #2c2e33; }\n\n.wysi-editor .wysihtml-editor table td.wysiwyg-tmp-selected-cell {\n  outline: 2px solid #00d25b; }\n\n.wysi-editor .editor-container-tag {\n  padding: 5px 10px;\n  position: absolute;\n  color: white;\n  background: rgba(0, 0, 0, 0.8);\n  width: 100px;\n  margin-left: -50px;\n  -webkit-transition: 0.1s left, 0.1s top; }\n\n.wysi-editor .wrap {\n  max-width: 700px;\n  margin: 40px; }\n\n.wysi-editor .editable .wysihtml-uneditable-container {\n  outline: 1px dotted #2c2e33;\n  position: relative; }\n\n.wysi-editor .editable .wysihtml-uneditable-container-right {\n  float: right;\n  width: 50%;\n  margin-left: 2em;\n  margin-bottom: 1em; }\n\n.wysi-editor .editable .wysihtml-uneditable-container-left {\n  float: left;\n  width: 50%;\n  margin-right: 2em;\n  margin-bottom: 1em; }\n\n/* X-editable */\n.editable-form .editable {\n  color: #ffffff;\n  font-size: .8125rem; }\n\n.editable-form .editable-click {\n  border-color: #ffffff; }\n\n.editable-container.editable-inline {\n  max-width: 100%; }\n  .editable-container.editable-inline .editableform {\n    max-width: 100%; }\n    .editable-container.editable-inline .editableform .control-group {\n      max-width: 100%;\n      white-space: initial; }\n      .editable-container.editable-inline .editableform .control-group > div {\n        max-width: 100%; }\n      .editable-container.editable-inline .editableform .control-group .editable-input input,\n      .editable-container.editable-inline .editableform .control-group .editable-input textarea {\n        max-width: 100%; }\n      .editable-container.editable-inline .editableform .control-group .editable-input .combodate .form-control, .editable-container.editable-inline .editableform .control-group .editable-input .combodate .asColorPicker-input, .editable-container.editable-inline .editableform .control-group .editable-input .combodate .dataTables_wrapper select, .dataTables_wrapper .editable-container.editable-inline .editableform .control-group .editable-input .combodate select, .editable-container.editable-inline .editableform .control-group .editable-input .combodate .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .editable-container.editable-inline .editableform .control-group .editable-input .combodate input[type=text],\n      .editable-container.editable-inline .editableform .control-group .editable-input .combodate .jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row .editable-container.editable-inline .editableform .control-group .editable-input .combodate select, .editable-container.editable-inline .editableform .control-group .editable-input .combodate .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .editable-container.editable-inline .editableform .control-group .editable-input .combodate input[type=number], .editable-container.editable-inline .editableform .control-group .editable-input .combodate .select2-container--default .select2-selection--single, .select2-container--default .editable-container.editable-inline .editableform .control-group .editable-input .combodate .select2-selection--single, .editable-container.editable-inline .editableform .control-group .editable-input .combodate .select2-container--default .select2-selection--single .select2-search__field, .select2-container--default .select2-selection--single .editable-container.editable-inline .editableform .control-group .editable-input .combodate .select2-search__field, .editable-container.editable-inline .editableform .control-group .editable-input .combodate .typeahead,\n      .editable-container.editable-inline .editableform .control-group .editable-input .combodate .tt-query,\n      .editable-container.editable-inline .editableform .control-group .editable-input .combodate .tt-hint {\n        padding-left: 0;\n        padding-right: 0; }\n      @media (max-width: 991px) {\n        .editable-container.editable-inline .editableform .control-group .editable-buttons {\n          display: block;\n          margin-top: 10px; } }\n\n/*-------------------------------------------------------------------*/\n/* === Landing screens === */\n/* Auth */\n.auth.login-bg {\n  background: url(\"../images/auth/god.png\");\n  background-size: cover; }\n\n.auth .login-half-bg {\n  background: url(\"../images/auth/login-bg.jpg\");\n  background-size: cover; }\n\n.auth.register-half-bg {\n  background: url(\"../images/auth/Login_bg2.jpg\");\n  background-size: cover; }\n\n.auth.lock-full-bg {\n  background: url(\"../images/auth/lockscreen-bg.jpg\");\n  background-size: cover; }\n\n.auth .lock-profile-img {\n  width: 90px;\n  height: 90px;\n  border-radius: 100%; }\n\n.auth .auth-form-dark {\n  background: rgba(0, 0, 0, 0.6);\n  color: #ffffff; }\n  .auth .auth-form-dark .form-control, .auth .auth-form-dark .asColorPicker-input, .auth .auth-form-dark .dataTables_wrapper select, .dataTables_wrapper .auth .auth-form-dark select, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input[type=text],\n  .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark select, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input[type=number], .auth .auth-form-dark .select2-container--default .select2-selection--single, .select2-container--default .auth .auth-form-dark .select2-selection--single, .auth .auth-form-dark .select2-container--default .select2-selection--single .select2-search__field, .select2-container--default .select2-selection--single .auth .auth-form-dark .select2-search__field, .auth .auth-form-dark .typeahead,\n  .auth .auth-form-dark .tt-query,\n  .auth .auth-form-dark .tt-hint {\n    border-color: rgba(255, 255, 255, 0.2);\n    color: #ffffff; }\n    .auth .auth-form-dark .form-control:-ms-input-placeholder, .auth .auth-form-dark .asColorPicker-input:-ms-input-placeholder, .auth .auth-form-dark .dataTables_wrapper select:-ms-input-placeholder, .dataTables_wrapper .auth .auth-form-dark select:-ms-input-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input:-ms-input-placeholder[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input:-ms-input-placeholder[type=text],\n    .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row select:-ms-input-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark select:-ms-input-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input:-ms-input-placeholder[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input:-ms-input-placeholder[type=number], .auth .auth-form-dark .select2-container--default .select2-selection--single:-ms-input-placeholder, .select2-container--default .auth .auth-form-dark .select2-selection--single:-ms-input-placeholder, .auth .auth-form-dark .select2-container--default .select2-selection--single .select2-search__field:-ms-input-placeholder, .select2-container--default .select2-selection--single .auth .auth-form-dark .select2-search__field:-ms-input-placeholder, .auth .auth-form-dark .typeahead:-ms-input-placeholder,\n    .auth .auth-form-dark .tt-query:-ms-input-placeholder,\n    .auth .auth-form-dark .tt-hint:-ms-input-placeholder {\n      color: #ffffff; }\n    .auth .auth-form-dark .form-control:-moz-placeholder, .auth .auth-form-dark .asColorPicker-input:-moz-placeholder, .auth .auth-form-dark .dataTables_wrapper select:-moz-placeholder, .dataTables_wrapper .auth .auth-form-dark select:-moz-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input:-moz-placeholder[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input:-moz-placeholder[type=text],\n    .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row select:-moz-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark select:-moz-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input:-moz-placeholder[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input:-moz-placeholder[type=number], .auth .auth-form-dark .select2-container--default .select2-selection--single:-moz-placeholder, .select2-container--default .auth .auth-form-dark .select2-selection--single:-moz-placeholder, .auth .auth-form-dark .select2-container--default .select2-selection--single .select2-search__field:-moz-placeholder, .select2-container--default .select2-selection--single .auth .auth-form-dark .select2-search__field:-moz-placeholder, .auth .auth-form-dark .typeahead:-moz-placeholder,\n    .auth .auth-form-dark .tt-query:-moz-placeholder,\n    .auth .auth-form-dark .tt-hint:-moz-placeholder {\n      color: #ffffff; }\n    .auth .auth-form-dark .form-control::-moz-placeholder, .auth .auth-form-dark .asColorPicker-input::-moz-placeholder, .auth .auth-form-dark .dataTables_wrapper select::-moz-placeholder, .dataTables_wrapper .auth .auth-form-dark select::-moz-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::-moz-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input[type=text]::-moz-placeholder,\n    .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row select::-moz-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark select::-moz-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::-moz-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input[type=number]::-moz-placeholder, .auth .auth-form-dark .select2-container--default .select2-selection--single::-moz-placeholder, .select2-container--default .auth .auth-form-dark .select2-selection--single::-moz-placeholder, .auth .auth-form-dark .select2-container--default .select2-selection--single .select2-search__field::-moz-placeholder, .select2-container--default .select2-selection--single .auth .auth-form-dark .select2-search__field::-moz-placeholder, .auth .auth-form-dark .typeahead::-moz-placeholder,\n    .auth .auth-form-dark .tt-query::-moz-placeholder,\n    .auth .auth-form-dark .tt-hint::-moz-placeholder {\n      color: #ffffff; }\n    .auth .auth-form-dark .form-control::-webkit-input-placeholder, .auth .auth-form-dark .asColorPicker-input::-webkit-input-placeholder, .auth .auth-form-dark .dataTables_wrapper select::-webkit-input-placeholder, .dataTables_wrapper .auth .auth-form-dark select::-webkit-input-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text]::-webkit-input-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input[type=text]::-webkit-input-placeholder,\n    .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row select::-webkit-input-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark select::-webkit-input-placeholder, .auth .auth-form-dark .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number]::-webkit-input-placeholder, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-dark input[type=number]::-webkit-input-placeholder, .auth .auth-form-dark .select2-container--default .select2-selection--single::-webkit-input-placeholder, .select2-container--default .auth .auth-form-dark .select2-selection--single::-webkit-input-placeholder, .auth .auth-form-dark .select2-container--default .select2-selection--single .select2-search__field::-webkit-input-placeholder, .select2-container--default .select2-selection--single .auth .auth-form-dark .select2-search__field::-webkit-input-placeholder, .auth .auth-form-dark .typeahead::-webkit-input-placeholder,\n    .auth .auth-form-dark .tt-query::-webkit-input-placeholder,\n    .auth .auth-form-dark .tt-hint::-webkit-input-placeholder {\n      color: #ffffff; }\n\n.auth .auth-form-light {\n  background: #ffffff; }\n  .auth .auth-form-light select {\n    color: #4b5564; }\n  .auth .auth-form-light .input-group .form-control:focus, .auth .auth-form-light .asColorPicker-wrap .form-control:focus, .auth .auth-form-light .input-group .asColorPicker-input:focus, .auth .auth-form-light .asColorPicker-wrap .asColorPicker-input:focus, .auth .auth-form-light .input-group .dataTables_wrapper select:focus, .dataTables_wrapper .auth .auth-form-light .input-group select:focus, .auth .auth-form-light .asColorPicker-wrap .dataTables_wrapper select:focus, .dataTables_wrapper .auth .auth-form-light .asColorPicker-wrap select:focus, .auth .auth-form-light .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .input-group input:focus[type=text], .auth .auth-form-light .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .asColorPicker-wrap input:focus[type=text],\n  .auth .auth-form-light .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .input-group select:focus,\n  .auth .auth-form-light .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .asColorPicker-wrap select:focus, .auth .auth-form-light .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .input-group input:focus[type=number], .auth .auth-form-light .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .asColorPicker-wrap input:focus[type=number], .auth .auth-form-light .input-group .select2-container--default .select2-selection--single:focus, .select2-container--default .auth .auth-form-light .input-group .select2-selection--single:focus, .auth .auth-form-light .asColorPicker-wrap .select2-container--default .select2-selection--single:focus, .select2-container--default .auth .auth-form-light .asColorPicker-wrap .select2-selection--single:focus, .auth .auth-form-light .input-group .select2-container--default .select2-selection--single .select2-search__field:focus, .select2-container--default .select2-selection--single .auth .auth-form-light .input-group .select2-search__field:focus, .auth .auth-form-light .asColorPicker-wrap .select2-container--default .select2-selection--single .select2-search__field:focus, .select2-container--default .select2-selection--single .auth .auth-form-light .asColorPicker-wrap .select2-search__field:focus, .auth .auth-form-light .input-group .typeahead:focus, .auth .auth-form-light .asColorPicker-wrap .typeahead:focus,\n  .auth .auth-form-light .input-group .tt-query:focus,\n  .auth .auth-form-light .asColorPicker-wrap .tt-query:focus,\n  .auth .auth-form-light .input-group .tt-hint:focus,\n  .auth .auth-form-light .asColorPicker-wrap .tt-hint:focus, .auth .auth-form-light .input-group .form-control:active, .auth .auth-form-light .asColorPicker-wrap .form-control:active, .auth .auth-form-light .input-group .asColorPicker-input:active, .auth .auth-form-light .asColorPicker-wrap .asColorPicker-input:active, .auth .auth-form-light .input-group .dataTables_wrapper select:active, .dataTables_wrapper .auth .auth-form-light .input-group select:active, .auth .auth-form-light .asColorPicker-wrap .dataTables_wrapper select:active, .dataTables_wrapper .auth .auth-form-light .asColorPicker-wrap select:active, .auth .auth-form-light .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:active[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .input-group input:active[type=text], .auth .auth-form-light .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:active[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .asColorPicker-wrap input:active[type=text],\n  .auth .auth-form-light .input-group .jsgrid .jsgrid-table .jsgrid-filter-row select:active, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .input-group select:active,\n  .auth .auth-form-light .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row select:active, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .asColorPicker-wrap select:active, .auth .auth-form-light .input-group .jsgrid .jsgrid-table .jsgrid-filter-row input:active[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .input-group input:active[type=number], .auth .auth-form-light .asColorPicker-wrap .jsgrid .jsgrid-table .jsgrid-filter-row input:active[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-light .asColorPicker-wrap input:active[type=number], .auth .auth-form-light .input-group .select2-container--default .select2-selection--single:active, .select2-container--default .auth .auth-form-light .input-group .select2-selection--single:active, .auth .auth-form-light .asColorPicker-wrap .select2-container--default .select2-selection--single:active, .select2-container--default .auth .auth-form-light .asColorPicker-wrap .select2-selection--single:active, .auth .auth-form-light .input-group .select2-container--default .select2-selection--single .select2-search__field:active, .select2-container--default .select2-selection--single .auth .auth-form-light .input-group .select2-search__field:active, .auth .auth-form-light .asColorPicker-wrap .select2-container--default .select2-selection--single .select2-search__field:active, .select2-container--default .select2-selection--single .auth .auth-form-light .asColorPicker-wrap .select2-search__field:active, .auth .auth-form-light .input-group .typeahead:active, .auth .auth-form-light .asColorPicker-wrap .typeahead:active,\n  .auth .auth-form-light .input-group .tt-query:active,\n  .auth .auth-form-light .asColorPicker-wrap .tt-query:active,\n  .auth .auth-form-light .input-group .tt-hint:active,\n  .auth .auth-form-light .asColorPicker-wrap .tt-hint:active {\n    border-color: #2c2e33; }\n\n.auth .auth-form-transparent {\n  background: transparent; }\n  .auth .auth-form-transparent .form-control, .auth .auth-form-transparent .asColorPicker-input, .auth .auth-form-transparent .dataTables_wrapper select, .dataTables_wrapper .auth .auth-form-transparent select, .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row input[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent input[type=text],\n  .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row select, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent select, .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row input[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent input[type=number], .auth .auth-form-transparent .select2-container--default .select2-selection--single, .select2-container--default .auth .auth-form-transparent .select2-selection--single, .auth .auth-form-transparent .select2-container--default .select2-selection--single .select2-search__field, .select2-container--default .select2-selection--single .auth .auth-form-transparent .select2-search__field, .auth .auth-form-transparent .typeahead,\n  .auth .auth-form-transparent .tt-query,\n  .auth .auth-form-transparent .tt-hint,\n  .auth .auth-form-transparent .input-group-text {\n    border-color: #e4eaec; }\n    .auth .auth-form-transparent .form-control:focus, .auth .auth-form-transparent .asColorPicker-input:focus, .auth .auth-form-transparent .dataTables_wrapper select:focus, .dataTables_wrapper .auth .auth-form-transparent select:focus, .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent input:focus[type=text],\n    .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row select:focus, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent select:focus, .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row input:focus[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent input:focus[type=number], .auth .auth-form-transparent .select2-container--default .select2-selection--single:focus, .select2-container--default .auth .auth-form-transparent .select2-selection--single:focus, .auth .auth-form-transparent .select2-container--default .select2-selection--single .select2-search__field:focus, .select2-container--default .select2-selection--single .auth .auth-form-transparent .select2-search__field:focus, .auth .auth-form-transparent .typeahead:focus,\n    .auth .auth-form-transparent .tt-query:focus,\n    .auth .auth-form-transparent .tt-hint:focus, .auth .auth-form-transparent .form-control:active, .auth .auth-form-transparent .asColorPicker-input:active, .auth .auth-form-transparent .dataTables_wrapper select:active, .dataTables_wrapper .auth .auth-form-transparent select:active, .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row input:active[type=text], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent input:active[type=text],\n    .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row select:active, .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent select:active, .auth .auth-form-transparent .jsgrid .jsgrid-table .jsgrid-filter-row input:active[type=number], .jsgrid .jsgrid-table .jsgrid-filter-row .auth .auth-form-transparent input:active[type=number], .auth .auth-form-transparent .select2-container--default .select2-selection--single:active, .select2-container--default .auth .auth-form-transparent .select2-selection--single:active, .auth .auth-form-transparent .select2-container--default .select2-selection--single .select2-search__field:active, .select2-container--default .select2-selection--single .auth .auth-form-transparent .select2-search__field:active, .auth .auth-form-transparent .typeahead:active,\n    .auth .auth-form-transparent .tt-query:active,\n    .auth .auth-form-transparent .tt-hint:active,\n    .auth .auth-form-transparent .input-group-text:focus,\n    .auth .auth-form-transparent .input-group-text:active {\n      border-color: #e4eaec; }\n  .auth .auth-form-transparent select {\n    outline-color: #e4eaec; }\n\n.auth.auth-img-bg {\n  padding: 0; }\n  @media (min-width: 768px) {\n    .auth.auth-img-bg .auth-form-transparent {\n      width: 55%;\n      margin: auto; } }\n\n.auth .brand-logo {\n  margin-bottom: 2rem; }\n  .auth .brand-logo img {\n    width: 150px; }\n\n.auth form .auth-form-btn {\n  height: 50px;\n  line-height: 1.5; }\n\n.auth form .auth-link {\n  font-size: 0.875rem; }\n  .auth form .auth-link:hover {\n    color: initial; }\n\n.auth button {\n  font-size: 0.875rem; }\n  .auth button.enter-btn {\n    height: 45px;\n    margin-bottom: 28px; }\n\n.auth .forgot-pass {\n  font-size: 0.875rem;\n  text-align: right; }\n\n.auth .sign-up {\n  font-size: 0.875rem;\n  text-align: center;\n  margin-top: 30px;\n  margin-bottom: 0; }\n  .auth .sign-up a {\n    color: #0090e7; }\n\n.auth.login-2, .auth.option-2 {\n  padding: 0; }\n  .auth.login-2 .card, .auth.option-2 .card {\n    height: 100vh; }\n\n.auth .terms {\n  font-size: 0.875rem;\n  text-align: center;\n  margin-top: 23px;\n  margin-bottom: 0; }\n  .auth .terms a {\n    text-decoration: underline; }\n\n/* Navbar */\n.navbar {\n  font-weight: normal;\n  background: #191c24;\n  left: 244px;\n  transition: left 0.25s ease;\n  -webkit-transition: left 0.25s ease;\n  -moz-transition: left 0.25s ease;\n  -ms-transition: left 0.25s ease; }\n  @media (max-width: 992px) {\n    .navbar {\n      left: 0; } }\n  .navbar .navbar-brand-wrapper {\n    transition: width 0.25s ease, background 0.25s ease;\n    -webkit-transition: width 0.25s ease, background 0.25s ease;\n    -moz-transition: width 0.25s ease, background 0.25s ease;\n    -ms-transition: width 0.25s ease, background 0.25s ease;\n    background: #191c24;\n    width: 244px;\n    height: 70px; }\n    @media (max-width: 991px) {\n      .navbar .navbar-brand-wrapper {\n        width: 55px; } }\n    .navbar .navbar-brand-wrapper .navbar-brand {\n      color: #38425e;\n      font-size: 1.5rem;\n      line-height: 48px;\n      margin-right: 0;\n      padding: 0rem 0rem 0rem 1.3rem;\n      width: 100%; }\n      .navbar .navbar-brand-wrapper .navbar-brand:active, .navbar .navbar-brand-wrapper .navbar-brand:focus, .navbar .navbar-brand-wrapper .navbar-brand:hover {\n        color: #252b3e; }\n      .navbar .navbar-brand-wrapper .navbar-brand img {\n        width: calc(244px - 120px);\n        max-width: 100%;\n        height: 28px;\n        margin: auto;\n        vertical-align: middle; }\n      .navbar .navbar-brand-wrapper .navbar-brand.brand-logo-mini {\n        display: none; }\n        .navbar .navbar-brand-wrapper .navbar-brand.brand-logo-mini img {\n          width: calc(70px - 50px);\n          max-width: 100%;\n          height: 28px;\n          margin: auto; }\n  .navbar .navbar-menu-wrapper {\n    transition: width 0.25s ease;\n    -webkit-transition: width 0.25s ease;\n    -moz-transition: width 0.25s ease;\n    -ms-transition: width 0.25s ease;\n    box-shadow: 20px 19px 34px -15px rgba(0, 0, 0, 0.5);\n    -webkit-box-shadow: 20px 19px 34px -15px rgba(0, 0, 0, 0.5);\n    -moz-box-shadow: 20px 19px 34px -15px rgba(0, 0, 0, 0.5);\n    color: #ffffff;\n    padding-left: 15px;\n    padding-right: 15px;\n    width: 100%;\n    height: 70px; }\n    .rtl .navbar .navbar-menu-wrapper {\n      box-shadow: -34px 19px 34px -15px #000000;\n      -webkit-box-shadow: -34px 19px 34px -15px #000000;\n      -moz-box-shadow: -34px 19px 34px -15px #000000; }\n    @media (max-width: 991px) {\n      .navbar .navbar-menu-wrapper {\n        width: auto;\n        padding-left: 15px;\n        padding-right: 15px; } }\n    .navbar .navbar-menu-wrapper .navbar-toggler {\n      border: 0;\n      color: #6c7293;\n      height: 70px;\n      border-radius: 0px; }\n      .navbar .navbar-menu-wrapper .navbar-toggler:focus {\n        box-shadow: none; }\n      .navbar .navbar-menu-wrapper .navbar-toggler:not(.navbar-toggler-right) {\n        font-size: 0.875rem; }\n        @media (max-width: 991px) {\n          .navbar .navbar-menu-wrapper .navbar-toggler:not(.navbar-toggler-right) {\n            display: none; } }\n      @media (max-width: 991px) {\n        .navbar .navbar-menu-wrapper .navbar-toggler.navbar-toggler-right {\n          padding-left: 15px;\n          padding-right: 11px;\n          border-right: none; } }\n    .navbar .navbar-menu-wrapper .search-field .input-group input, .navbar .navbar-menu-wrapper .search-field .asColorPicker-wrap input {\n      font-size: 0.875rem;\n      padding: .5rem; }\n      .navbar .navbar-menu-wrapper .search-field .input-group input:-ms-input-placeholder, .navbar .navbar-menu-wrapper .search-field .asColorPicker-wrap input:-ms-input-placeholder {\n        font-size: 0.9375rem;\n        color: #ffffff;\n        font-weight: 300; }\n      .navbar .navbar-menu-wrapper .search-field .input-group input:-moz-placeholder, .navbar .navbar-menu-wrapper .search-field .asColorPicker-wrap input:-moz-placeholder {\n        font-size: 0.9375rem;\n        color: #ffffff;\n        font-weight: 300; }\n      .navbar .navbar-menu-wrapper .search-field .input-group input::-moz-placeholder, .navbar .navbar-menu-wrapper .search-field .asColorPicker-wrap input::-moz-placeholder {\n        font-size: 0.9375rem;\n        color: #ffffff;\n        font-weight: 300; }\n      .navbar .navbar-menu-wrapper .search-field .input-group input::-webkit-input-placeholder, .navbar .navbar-menu-wrapper .search-field .asColorPicker-wrap input::-webkit-input-placeholder {\n        font-size: 0.9375rem;\n        color: #ffffff;\n        font-weight: 300; }\n    .navbar .navbar-menu-wrapper .search-field .input-group i, .navbar .navbar-menu-wrapper .search-field .asColorPicker-wrap i {\n      font-size: 17px;\n      margin-right: 0;\n      color: #ffffff; }\n    .navbar .navbar-menu-wrapper .search-field .input-group .input-group-text, .navbar .navbar-menu-wrapper .search-field .asColorPicker-wrap .input-group-text {\n      background: transparent; }\n    .navbar .navbar-menu-wrapper .count-indicator {\n      position: relative; }\n      .navbar .navbar-menu-wrapper .count-indicator .count-symbol,\n      .navbar .navbar-menu-wrapper .count-indicator .count-number {\n        position: absolute;\n        border-radius: 100%;\n        border: 2px solid #191c24; }\n      .navbar .navbar-menu-wrapper .count-indicator .count-symbol {\n        top: 17px;\n        right: -3px;\n        width: 10px;\n        height: 10px; }\n      .navbar .navbar-menu-wrapper .count-indicator .count-number {\n        min-width: 14px;\n        height: 14px;\n        font-size: .5rem;\n        color: #ffffff;\n        bottom: 16px;\n        right: -5px;\n        line-height: 1;\n        text-align: center; }\n      .navbar .navbar-menu-wrapper .count-indicator:after {\n        display: none; }\n      .navbar .navbar-menu-wrapper .count-indicator .count {\n        position: absolute;\n        left: 66%;\n        width: 7px;\n        height: 7px;\n        color: #ffffff;\n        border-radius: 100%;\n        text-align: center;\n        font-size: .625rem;\n        line-height: 1.5;\n        top: 7px; }\n    .navbar .navbar-menu-wrapper .navbar-nav {\n      flex-direction: row;\n      align-items: center; }\n      .navbar .navbar-menu-wrapper .navbar-nav .nav-item .nav-link {\n        color: inherit;\n        font-size: 0.9375rem;\n        margin-left: 1rem;\n        margin-right: 1rem;\n        white-space: nowrap; }\n        @media (max-width: 767px) {\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item .nav-link {\n            margin-left: .8rem;\n            margin-right: .8rem; } }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item .nav-link i {\n          font-size: 1.125rem; }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item .nav-link .navbar-profile {\n          display: flex;\n          font-weight: normal;\n          align-items: center; }\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item .nav-link .navbar-profile .navbar-profile-name {\n            white-space: nowrap;\n            margin-left: 1rem; }\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item .nav-link .navbar-profile i {\n            color: #a7afb7; }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item .nav-link.create-new-button {\n          padding: 0.375rem 0.75rem; }\n      .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown {\n        line-height: 1rem; }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-toggle:after {\n          color: #0090e7;\n          font-size: 1rem; }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu {\n          border: none;\n          border-radius: 4px; }\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown {\n            position: absolute;\n            font-size: 0.9rem;\n            margin-top: 0;\n            top: 48px;\n            right: 0;\n            left: auto;\n            -webkit-box-shadow: 0px 0px 35px -3px black;\n            -moz-box-shadow: 0px 0px 35px -3px black;\n            box-shadow: 0px 0px 35px -3px black;\n            padding: 0; }\n            .rtl .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown {\n              right: auto;\n              left: 0; }\n            .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item {\n              margin-bottom: 0;\n              padding: 11px 13px;\n              cursor: pointer; }\n              .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item:hover {\n                color: #fff; }\n              .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item i {\n                font-size: 17px; }\n              .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item .ellipsis {\n                max-width: 200px;\n                overflow: hidden;\n                text-overflow: ellipsis; }\n              .rtl .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-item i {\n                margin-left: 10px; }\n            .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .dropdown-menu.navbar-dropdown .dropdown-divider {\n              margin: 0; }\n        @media (max-width: 991px) {\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown {\n            position: static; }\n            .navbar .navbar-menu-wrapper .navbar-nav .nav-item.dropdown .navbar-dropdown {\n              left: 20px;\n              right: 20px;\n              top: 70px;\n              width: calc(100% - 40px); } }\n      .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-img {\n        position: relative;\n        width: 32px;\n        height: 32px; }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-img img {\n          width: 32px;\n          height: 32px;\n          border-radius: 100%; }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-img .availability-status {\n          position: absolute;\n          width: 10px;\n          height: 10px;\n          border-radius: 100%;\n          border: 2px solid #ffffff;\n          bottom: 5px;\n          right: -5px; }\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-img .availability-status.online {\n            background: #00d25b; }\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-img .availability-status.offline {\n            background: #fc424a; }\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-img .availability-status.busy {\n            background: #ffab00; }\n      .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-text {\n        margin-left: 1.25rem; }\n        .rtl .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-text {\n          margin-left: 0;\n          margin-right: 1.25rem; }\n        .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-text p {\n          line-height: 1; }\n        @media (max-width: 767px) {\n          .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link .nav-profile-text {\n            display: none; } }\n      .navbar .navbar-menu-wrapper .navbar-nav .nav-item.nav-profile .nav-link.dropdown-toggle:after {\n        line-height: 2; }\n      @media (min-width: 992px) {\n        .navbar .navbar-menu-wrapper .navbar-nav.navbar-nav-right {\n          margin-left: auto; }\n          .rtl .navbar .navbar-menu-wrapper .navbar-nav.navbar-nav-right {\n            margin-left: 0;\n            margin-right: auto; } }\n    .navbar .navbar-menu-wrapper .search input {\n      background: #191c24;\n      padding: 13px 20px 11px 20px;\n      border: 1px solid #2c2e33; }\n      .navbar .navbar-menu-wrapper .search input::placeholder {\n        color: #6c7293;\n        font-size: 0.875rem; }\n\n@media (max-width: 991px) {\n  .navbar {\n    flex-direction: row; }\n    .navbar .navbar-brand-wrapper {\n      width: 75px; }\n      .navbar .navbar-brand-wrapper .navbar-brand.brand-logo {\n        display: none; }\n      .navbar .navbar-brand-wrapper .navbar-brand.brand-logo-mini {\n        display: inline-block; }\n  .navbar-collapse {\n    display: flex;\n    margin-top: 0.5rem; } }\n\n@media (max-width: 480px) {\n  .navbar .navbar-brand-wrapper {\n    width: 55px; }\n    .navbar .navbar-brand-wrapper .brand-logo-mini {\n      padding-top: 0px; } }\n\n.sidebar-tinted .navbar .navbar-brand-wrapper {\n  background: #fa424a; }\n\n/* Sidebar */\n.sidebar {\n  min-height: calc(100vh - 70px);\n  background: #191c24;\n  font-weight: normal;\n  padding: 0;\n  width: 244px;\n  z-index: 11;\n  transition: width 0.25s ease, background 0.25s ease;\n  -webkit-transition: width 0.25s ease, background 0.25s ease;\n  -moz-transition: width 0.25s ease, background 0.25s ease;\n  -ms-transition: width 0.25s ease, background 0.25s ease; }\n  .sidebar .sidebar-brand-wrapper {\n    transition: width 0.25s ease, background 0.25s ease;\n    -webkit-transition: width 0.25s ease, background 0.25s ease;\n    -moz-transition: width 0.25s ease, background 0.25s ease;\n    -ms-transition: width 0.25s ease, background 0.25s ease;\n    background: #191c24;\n    width: 244px;\n    height: 70px; }\n    @media (max-width: 991px) {\n      .sidebar .sidebar-brand-wrapper {\n        width: 55px; } }\n    .sidebar .sidebar-brand-wrapper .sidebar-brand {\n      color: #38425e;\n      font-size: 1.5rem;\n      line-height: 48px;\n      margin-right: 0;\n      padding: 0rem 0rem 0rem 1.3rem;\n      width: 100%; }\n      .sidebar .sidebar-brand-wrapper .sidebar-brand:active, .sidebar .sidebar-brand-wrapper .sidebar-brand:focus, .sidebar .sidebar-brand-wrapper .sidebar-brand:hover {\n        color: #252b3e; }\n      .sidebar .sidebar-brand-wrapper .sidebar-brand img {\n        width: calc(244px - 120px);\n        max-width: 100%;\n        height: 28px;\n        margin: auto;\n        vertical-align: middle; }\n      .sidebar .sidebar-brand-wrapper .sidebar-brand.brand-logo-mini {\n        display: none; }\n        .sidebar .sidebar-brand-wrapper .sidebar-brand.brand-logo-mini img {\n          width: calc(70px - 50px);\n          max-width: 100%;\n          height: 28px;\n          margin: auto; }\n  .sidebar .nav {\n    overflow: hidden;\n    flex-wrap: nowrap;\n    flex-direction: column;\n    margin-bottom: 60px;\n    padding-top: 70px; }\n    @media (max-width: 992px) {\n      .sidebar .nav {\n        padding-top: 0; } }\n    .sidebar .nav .nav-item {\n      -webkit-transition-duration: 0.25s;\n      -moz-transition-duration: 0.25s;\n      -o-transition-duration: 0.25s;\n      transition-duration: 0.25s;\n      transition-property: background;\n      -webkit-transition-property: background;\n      padding-right: 20px; }\n      .sidebar .nav .nav-item .collapse {\n        z-index: 999; }\n      .sidebar .nav .nav-item .nav-link {\n        display: -webkit-flex;\n        display: flex;\n        -webkit-align-items: center;\n        align-items: center;\n        white-space: nowrap;\n        padding: 0.8rem 10px 0.8rem 1.188rem;\n        color: #6c7293;\n        -webkit-transition-duration: 0.45s;\n        -moz-transition-duration: 0.45s;\n        -o-transition-duration: 0.45s;\n        transition-duration: 0.45s;\n        transition-property: color;\n        -webkit-transition-property: color;\n        height: 46px;\n        border-radius: 0px 100px 100px 0px; }\n        .sidebar .nav .nav-item .nav-link i {\n          color: inherit; }\n          .sidebar .nav .nav-item .nav-link i.menu-icon {\n            font-size: 1rem;\n            line-height: 1;\n            margin-left: auto;\n            color: #bba8bff5; }\n            .rtl .sidebar .nav .nav-item .nav-link i.menu-icon {\n              margin-left: 0;\n              margin-right: auto; }\n            .sidebar .nav .nav-item .nav-link i.menu-icon:before {\n              vertical-align: middle; }\n          .sidebar .nav .nav-item .nav-link i.menu-arrow {\n            font: normal normal normal 24px/1 \"Material Design Icons\";\n            line-height: 1;\n            font-size: 1rem;\n            margin-left: auto;\n            color: rgba(108, 114, 147, 0.36); }\n            .rtl .sidebar .nav .nav-item .nav-link i.menu-arrow {\n              margin-left: 0;\n              margin-right: auto; }\n            .sidebar .nav .nav-item .nav-link i.menu-arrow:before {\n              content: \"\\f140\";\n              font-size: inherit;\n              color: inherit; }\n        .sidebar .nav .nav-item .nav-link .menu-title {\n          color: inherit;\n          display: inline-block;\n          font-size: 0.9375rem;\n          line-height: 1;\n          vertical-align: middle; }\n        .sidebar .nav .nav-item .nav-link .badge {\n          margin-right: auto;\n          margin-left: 1rem; }\n      .sidebar .nav .nav-item.active > .nav-link {\n        background: #0f1015;\n        position: relative; }\n        .sidebar .nav .nav-item.active > .nav-link:before {\n          content: \"\";\n          width: 3px;\n          height: 100%;\n          background: #0090e7;\n          display: inline-block;\n          position: absolute;\n          left: 0;\n          top: 0; }\n        .sidebar .nav .nav-item.active > .nav-link .menu-title {\n          color: #ffffff; }\n        .sidebar .nav .nav-item.active > .nav-link i {\n          color: #ffffff; }\n      .sidebar .nav .nav-item.nav-profile .nav-link {\n        height: auto;\n        line-height: 1;\n        border-top: 0;\n        padding: 1.25rem 0; }\n        .sidebar .nav .nav-item.nav-profile .nav-link .nav-profile-image {\n          width: 44px;\n          height: 44px; }\n          .sidebar .nav .nav-item.nav-profile .nav-link .nav-profile-image img {\n            width: 44px;\n            height: 44px;\n            border-radius: 100%; }\n        .sidebar .nav .nav-item.nav-profile .nav-link .nav-profile-text {\n          margin-left: 1rem; }\n          .rtl .sidebar .nav .nav-item.nav-profile .nav-link .nav-profile-text {\n            margin-left: auto;\n            margin-right: 1rem; }\n        .sidebar .nav .nav-item.nav-profile .nav-link .nav-profile-badge {\n          font-size: 1.125rem;\n          margin-left: auto; }\n          .rtl .sidebar .nav .nav-item.nav-profile .nav-link .nav-profile-badge {\n            margin-left: 0;\n            margin-right: auto; }\n      .sidebar .nav .nav-item.sidebar-actions {\n        margin-top: 1rem; }\n        .sidebar .nav .nav-item.sidebar-actions .nav-link {\n          border-top: 0;\n          display: block;\n          height: auto; }\n        .sidebar .nav .nav-item.sidebar-actions:hover {\n          background: initial; }\n          .sidebar .nav .nav-item.sidebar-actions:hover .nav-link {\n            color: initial; }\n      .sidebar .nav .nav-item.profile {\n        padding-right: 0px; }\n        .rtl .sidebar .nav .nav-item.profile {\n          padding-right: 10px; }\n        .sidebar .nav .nav-item.profile .profile-desc {\n          display: flex;\n          flex-direction: row;\n          align-items: center;\n          justify-content: space-between;\n          padding: 0.6rem 1.17rem;\n          line-height: 1.25; }\n          .sidebar .nav .nav-item.profile .profile-desc .profile-name {\n            margin-left: 1rem; }\n            .rtl .sidebar .nav .nav-item.profile .profile-desc .profile-name {\n              margin-left: 0;\n              margin-right: 1rem; }\n            .sidebar .nav .nav-item.profile .profile-desc .profile-name span {\n              font-size: 12px;\n              color: #6c7293;\n              white-space: nowrap; }\n            .sidebar .nav .nav-item.profile .profile-desc .profile-name h5, .sidebar .nav .nav-item.profile .profile-desc .profile-name .h5 {\n              white-space: nowrap; }\n          .sidebar .nav .nav-item.profile .profile-desc .profile-pic {\n            display: flex;\n            align-items: center; }\n            .sidebar .nav .nav-item.profile .profile-desc .profile-pic .count-indicator {\n              position: relative; }\n              .sidebar .nav .nav-item.profile .profile-desc .profile-pic .count-indicator .count-symbol,\n              .sidebar .nav .nav-item.profile .profile-desc .profile-pic .count-indicator .count-number {\n                position: absolute;\n                border-radius: 100%;\n                border: 2px solid #191c24; }\n              .sidebar .nav .nav-item.profile .profile-desc .profile-pic .count-indicator .count-symbol {\n                top: 17px;\n                right: -3px;\n                width: 10px;\n                height: 10px; }\n              .sidebar .nav .nav-item.profile .profile-desc .profile-pic .count-indicator .count-number {\n                min-width: 14px;\n                height: 14px;\n                font-size: .5rem;\n                color: #ffffff;\n                bottom: 16px;\n                right: -5px;\n                line-height: 1;\n                text-align: center; }\n              .sidebar .nav .nav-item.profile .profile-desc .profile-pic .count-indicator:after {\n                display: none; }\n              .sidebar .nav .nav-item.profile .profile-desc .profile-pic .count-indicator .count {\n                position: absolute;\n                left: 66%;\n                width: 10px;\n                height: 10px;\n                color: #ffffff;\n                border-radius: 100%;\n                text-align: center;\n                font-size: .625rem;\n                line-height: 1.5;\n                top: 26px;\n                border: 2px solid #2c2e33; }\n          .sidebar .nav .nav-item.profile .profile-desc .mdi-dots-vertical {\n            font-size: 20px;\n            color: #6c7293; }\n          .sidebar .nav .nav-item.profile .profile-desc .dropdown-menu {\n            padding: 0;\n            margin-top: 1.25rem; }\n            .sidebar .nav .nav-item.profile .profile-desc .dropdown-menu .dropdown-item {\n              padding: 11px 13px; }\n              .sidebar .nav .nav-item.profile .profile-desc .dropdown-menu .dropdown-item.preview-item {\n                align-items: center; }\n                .sidebar .nav .nav-item.profile .profile-desc .dropdown-menu .dropdown-item.preview-item .preview-thumbnail .preview-icon {\n                  width: 30px;\n                  height: 30px; }\n                  .sidebar .nav .nav-item.profile .profile-desc .dropdown-menu .dropdown-item.preview-item .preview-thumbnail .preview-icon i {\n                    font-size: 0.875rem; }\n              .sidebar .nav .nav-item.profile .profile-desc .dropdown-menu .dropdown-item:hover {\n                color: inherit; }\n            .sidebar .nav .nav-item.profile .profile-desc .dropdown-menu .dropdown-divider {\n              margin: 0; }\n      .sidebar .nav .nav-item.nav-category {\n        padding: 0.5rem 1.188rem;\n        line-height: 1; }\n        .sidebar .nav .nav-item.nav-category .nav-link {\n          color: #6c7293;\n          font-weight: 500;\n          font-size: 14px;\n          font-weight: 500;\n          height: auto;\n          padding-left: 0; }\n      .sidebar .nav .nav-item .menu-icon {\n        margin-right: 0.5rem;\n        font-size: 0.8125rem;\n        line-height: 1;\n        background: rgba(108, 114, 147, 0.2);\n        width: 31px;\n        height: 31px;\n        border-radius: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        color: #ffffff; }\n        .sidebar .nav .nav-item .menu-icon i {\n          font-size: 0.875rem; }\n    .sidebar .nav.sub-menu {\n      margin-bottom: 0;\n      margin-top: 0;\n      padding: 0 0 0 3.25rem;\n      list-style: none; }\n      .sidebar .nav.sub-menu .nav-item {\n        padding: 0; }\n        .sidebar .nav.sub-menu .nav-item .nav-link {\n          color: #6c7293;\n          padding: 0.5rem 0.35rem;\n          position: relative;\n          font-size: 0.855rem;\n          line-height: 1;\n          height: auto;\n          border-top: 0; }\n          .sidebar .nav.sub-menu .nav-item .nav-link.active {\n            color: #ffffff;\n            background: transparent; }\n          .sidebar .nav.sub-menu .nav-item .nav-link:hover {\n            color: #ffffff; }\n        .sidebar .nav.sub-menu .nav-item:hover {\n          background: transparent; }\n    .sidebar .nav:not(.sub-menu) > .nav-item:hover:not(.nav-category):not(.account-dropdown) > .nav-link {\n      background: #0f1015;\n      color: color(white); }\n    .sidebar .nav .menu-items:nth-child(5n+1) .nav-link .menu-icon i {\n      color: #0090e7; }\n    .sidebar .nav .menu-items:nth-child(5n+2) .nav-link .menu-icon i {\n      color: #00d25b; }\n    .sidebar .nav .menu-items:nth-child(5n+3) .nav-link .menu-icon i {\n      color: #8f5fe8; }\n    .sidebar .nav .menu-items:nth-child(5n+4) .nav-link .menu-icon i {\n      color: #ffab00; }\n    .sidebar .nav .menu-items:nth-child(5n+5) .nav-link .menu-icon i {\n      color: #fc424a; }\n\n/* style for off-canvas menu*/\n@media screen and (max-width: 991px) {\n  .sidebar-offcanvas {\n    position: fixed;\n    max-height: calc(100vh - 70px);\n    top: 70px;\n    bottom: 0;\n    overflow: auto;\n    right: -244px;\n    -webkit-transition: all 0.25s ease-out;\n    -o-transition: all 0.25s ease-out;\n    transition: all 0.25s ease-out; }\n    .sidebar-offcanvas.active {\n      right: 0; } }\n\n.sidebar-tinted .sidebar {\n  background: #fa424a; }\n  .sidebar-tinted .sidebar .sidebar-brand-wrapper {\n    background: #fa424a; }\n  .sidebar-tinted .sidebar .nav .nav-item .nav-link {\n    color: #ffffff; }\n    .sidebar-tinted .sidebar .nav .nav-item .nav-link .menu-icon i {\n      color: white; }\n    .sidebar-tinted .sidebar .nav .nav-item .nav-link i.menu-arrow {\n      color: rgba(255, 255, 255, 0.36); }\n  .sidebar-tinted .sidebar .nav .nav-item.active > .nav-link {\n    background: rgba(12, 14, 14, 0.1); }\n  .sidebar-tinted .sidebar .nav .nav-item.active:before {\n    background: #ffffff; }\n  .sidebar-tinted .sidebar .nav .nav-item.profile .profile-desc .profile-name span {\n    color: #ffffff; }\n  .sidebar-tinted .sidebar .nav .nav-item.profile .profile-desc .mdi-dots-vertical {\n    color: #ffffff; }\n  .sidebar-tinted .sidebar .nav .nav-item.profile .profile-pic .count-indicator .count {\n    border: 2px solid #fa424a; }\n  .sidebar-tinted .sidebar .nav.sub-menu .nav-item .nav-link:hover {\n    font-weight: 500; }\n  .sidebar-tinted .sidebar .nav:not(.sub-menu) > .nav-item:hover:not(.nav-category):not(.account-dropdown) > .nav-link {\n    background: rgba(12, 14, 14, 0.1); }\n\n/* Layouts */\n.navbar.fixed-top + .page-body-wrapper {\n  padding-top: 70px; }\n\n@media (min-width: 992px) {\n  .sidebar-icon-only .navbar {\n    left: 70px; }\n    .sidebar-icon-only .navbar .navbar-menu-wrapper {\n      width: 100%; }\n  .sidebar-icon-only .sidebar {\n    width: 70px; }\n    .sidebar-icon-only .sidebar .sidebar-brand-wrapper {\n      width: 70px; }\n      .sidebar-icon-only .sidebar .sidebar-brand-wrapper .brand-logo {\n        display: none; }\n      .sidebar-icon-only .sidebar .sidebar-brand-wrapper .brand-logo-mini {\n        display: inline-block; }\n    .sidebar-icon-only .sidebar .nav {\n      overflow: visible; }\n      .sidebar-icon-only .sidebar .nav .nav-item {\n        position: relative;\n        padding: 0; }\n        .sidebar-icon-only .sidebar .nav .nav-item .profile-name {\n          display: none; }\n        .sidebar-icon-only .sidebar .nav .nav-item .mdi-dots-vertical {\n          display: none; }\n        .sidebar-icon-only .sidebar .nav .nav-item.account-dropdown {\n          display: none; }\n        .sidebar-icon-only .sidebar .nav .nav-item .nav-link {\n          text-align: center; }\n          .sidebar-icon-only .sidebar .nav .nav-item .nav-link .menu-title,\n          .sidebar-icon-only .sidebar .nav .nav-item .nav-link .badge, .sidebar-icon-only .sidebar .nav .nav-item .nav-link .menu-sub-title {\n            display: none; }\n          .sidebar-icon-only .sidebar .nav .nav-item .nav-link .menu-title {\n            border-radius: 0 5px 5px 0px; }\n            .rtl.sidebar-icon-only .sidebar .nav .nav-item .nav-link .menu-title {\n              border-radius: 5px 0 0 5px; }\n          .sidebar-icon-only .sidebar .nav .nav-item .nav-link i.menu-icon {\n            margin-right: 0;\n            margin-left: 0; }\n          .sidebar-icon-only .sidebar .nav .nav-item .nav-link i.menu-arrow {\n            display: none; }\n          .sidebar-icon-only .sidebar .nav .nav-item .nav-link[aria-expanded] .menu-title {\n            border-radius: 0 5px 0 0px; }\n            .rtl.sidebar-icon-only .sidebar .nav .nav-item .nav-link[aria-expanded] .menu-title {\n              border-radius: 5px 0 0 0; }\n        .sidebar-icon-only .sidebar .nav .nav-item.nav-profile {\n          display: none; }\n        .sidebar-icon-only .sidebar .nav .nav-item.nav-category {\n          display: none; }\n        .sidebar-icon-only .sidebar .nav .nav-item.nav-doc {\n          margin: 0; }\n          .sidebar-icon-only .sidebar .nav .nav-item.nav-doc i {\n            display: block; }\n        .sidebar-icon-only .sidebar .nav .nav-item .collapse {\n          display: none; }\n        .sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title {\n          display: -webkit-flex;\n          display: flex;\n          -webkit-align-items: center;\n          align-items: center;\n          background: #0f1015;\n          padding: 0.5rem 1.4rem;\n          left: 70px;\n          position: absolute;\n          text-align: left;\n          top: 0;\n          bottom: 0;\n          width: 190px;\n          z-index: 1;\n          line-height: 1.8; }\n          .sidebar-dark.sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title {\n            background: #0f1015; }\n          .rtl.sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title {\n            left: auto;\n            right: 70px;\n            text-align: left; }\n          .sidebar-icon-only .sidebar .nav .nav-item.hover-open .nav-link .menu-title:after {\n            display: none; }\n        .sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapse,\n        .sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapsing {\n          display: block;\n          padding: .5rem 0;\n          background: #0f1015;\n          border-radius: 0 0 5px 0;\n          position: absolute;\n          left: 70px;\n          width: 190px; }\n          .sidebar-dark.sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapse, .sidebar-dark.sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapsing {\n            background: #191c24; }\n          .rtl.sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapse, .rtl.sidebar-icon-only .sidebar .nav .nav-item.hover-open .collapsing {\n            left: auto;\n            right: 70px;\n            border-radius: 0 0 0 5px; }\n      .sidebar-icon-only .sidebar .nav.sub-menu {\n        padding: 0 0 0 1.5rem; }\n        .sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link {\n          text-align: left;\n          padding-left: 20px; }\n          .sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link:before {\n            content: \"\";\n            display: inline-block;\n            width: 5px;\n            height: 5px;\n            border-radius: 50%;\n            background-color: #6c7293;\n            position: absolute;\n            left: 0; }\n          .sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link:hover:before {\n            background-color: white; }\n        .rtl.sidebar-icon-only .sidebar .nav.sub-menu .nav-item {\n          margin-left: 0; }\n          .rtl.sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link {\n            text-align: right; }\n            .rtl.sidebar-icon-only .sidebar .nav.sub-menu .nav-item .nav-link:before {\n              left: 0;\n              right: unset; }\n    .sidebar-icon-only .sidebar .sidebar-actions {\n      display: none; }\n  .sidebar-icon-only.rtl .sidebar .nav .nav-item.profile {\n    padding-right: 0; }\n  .sidebar-icon-only .page-body-wrapper {\n    width: calc(100% - 70px);\n    transition: all 0.25s ease;\n    -webkit-transition: all 0.25s ease;\n    -moz-transition: all 0.25s ease;\n    -ms-transition: all 0.25s ease; } }\n\n.page-body-wrapper {\n  min-height: 100vh;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-flex-direction: row;\n  flex-direction: row;\n  padding-left: 0;\n  padding-right: 0;\n  transition: all 0.25s ease;\n  width: calc(100% - 244px); }\n  .page-body-wrapper.full-page-wrapper {\n    width: 100%;\n    min-height: 100vh; }\n  @media (max-width: 992px) {\n    .page-body-wrapper {\n      width: 100%; } }\n\n.container-scroller {\n  display: flex;\n  position: relative; }\n\n.main-panel {\n  transition: width 0.25s ease, margin 0.25s ease;\n  width: 100%;\n  min-height: calc(100vh - 70px);\n  padding-top: 70px;\n  display: -webkit-flex;\n  display: flex;\n  -webkit-flex-direction: column;\n  flex-direction: column; }\n  @media (max-width: 991px) {\n    .main-panel {\n      margin-left: 0;\n      width: 100%; } }\n\n.content-wrapper {\n  background: #000000;\n  padding: 1.875rem 1.75rem;\n  width: 100%;\n  -webkit-flex-grow: 1;\n  flex-grow: 1; }\n\n/*# sourceMappingURL=maps/style.css.map */\n"
  },
  {
    "path": "BlackStone/assets/js/ace.js",
    "content": "(function($) {\n  'use strict';\n  var editor = ace.edit(\"aceExample\");\n  editor.setTheme(\"ace/theme/chaos\");\n  editor.getSession().setMode(\"ace/mode/javascript\");\n  document.getElementById('aceExample').style.fontSize = '1rem';\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/alerts.js",
    "content": "(function($) {\n  showSwal = function(type) {\n    'use strict';\n    if (type === 'basic') {\n      swal({\n        text: 'Any fool can use a computer',\n        button: {\n          text: \"OK\",\n          value: true,\n          visible: true,\n          className: \"btn btn-primary\"\n        }\n      })\n\n    } else if (type === 'title-and-text') {\n      swal({\n        title: 'Read the alert!',\n        text: 'Click OK to close this alert',\n        button: {\n          text: \"OK\",\n          value: true,\n          visible: true,\n          className: \"btn btn-primary\"\n        }\n      })\n\n    } else if (type === 'success-message') {\n      swal({\n        title: 'Congratulations!',\n        text: 'You entered the correct answer',\n        icon: 'success',\n        button: {\n          text: \"Continue\",\n          value: true,\n          visible: true,\n          className: \"btn btn-primary\"\n        }\n      })\n\n    } else if (type === 'auto-close') {\n      swal({\n        title: 'Auto close alert!',\n        text: 'I will close in 2 seconds.',\n        timer: 2000,\n        button: false\n      }).then(\n        function() {},\n        // handling the promise rejection\n        function(dismiss) {\n          if (dismiss === 'timer') {\n            console.log('I was closed by the timer')\n          }\n        }\n      )\n    } else if (type === 'warning-message-and-cancel') {\n      swal({\n        title: 'Are you sure?',\n        text: \"You won't be able to revert this!\",\n        icon: 'warning',\n        showCancelButton: true,\n        confirmButtonColor: '#3f51b5',\n        cancelButtonColor: '#ff4081',\n        confirmButtonText: 'Great ',\n        buttons: {\n          cancel: {\n            text: \"Cancel\",\n            value: null,\n            visible: true,\n            className: \"btn btn-danger\",\n            closeModal: true,\n          },\n          confirm: {\n            text: \"OK\",\n            value: true,\n            visible: true,\n            className: \"btn btn-primary\",\n            closeModal: true\n          }\n        }\n      })\n\n    } else if (type === 'custom-html') {\n      swal({\n        content: {\n          element: \"input\",\n          attributes: {\n            placeholder: \"Type your password\",\n            type: \"password\",\n            class: 'form-control'\n          },\n        },\n        button: {\n          text: \"OK\",\n          value: true,\n          visible: true,\n          className: \"btn btn-primary\"\n        }\n      })\n    }\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/avgrund.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $('#show').avgrund({\n      height: 500,\n      holderClass: 'custom',\n      showClose: true,\n      showCloseText: 'x',\n      onBlurContainer: '.container-scroller',\n      template: '<p>So implement your design and place content here! If you want to close modal, please hit \"Esc\", click somewhere on the screen or use special button.</p>' +\n        '<div>' +\n        '<a href=\"http://twitter.com/voronianski\" target=\"_blank\" class=\"twitter btn btn-twitter btn-block\">Twitter</a>' +\n        '<a href=\"http://dribbble.com/voronianski\" target=\"_blank\" class=\"dribble btn btn-dribbble btn-block\">Dribbble</a>' +\n        '</div>' +\n        '<div class=\"text-center mt-4\">' +\n        '<a href=\"#\" target=\"_blank\" class=\"btn btn-success me-2\">Great!</a>' +\n        '<a href=\"#\" target=\"_blank\" class=\"btn btn-light\">Cancel</a>' +\n        '</div>'\n    });\n  })\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/bootstrap-table.js",
    "content": "(function($) {\n  'use strict';\n\n  function monthSorter(a, b) {\n    if (a.month < b.month) return -1;\n    if (a.month > b.month) return 1;\n    return 0;\n  }\n\n  function buildTable($el, cells, rows) {\n    var i, j, row,\n      columns = [],\n      data = [];\n\n    for (i = 0; i < cells; i++) {\n      columns.push({\n        field: 'field' + i,\n        title: 'Cell' + i\n      });\n    }\n    for (i = 0; i < rows; i++) {\n      row = {};\n      for (j = 0; j < cells; j++) {\n        row['field' + j] = 'Row-' + i + '-' + j;\n      }\n      data.push(row);\n    }\n    $el.bootstrapTable('destroy').bootstrapTable({\n      columns: columns,\n      data: data\n    });\n  }\n\n  $(function() {\n    buildTable($('#table'), 50, 50);\n  });\n\n  function actionFormatter(value, row, index) {\n    return [\n      '<a class=\"like\" href=\"javascript:void(0)\" title=\"Like\">',\n      '<i class=\"glyphicon glyphicon-heart\"></i>',\n      '</a>',\n      '<a class=\"edit ml10\" href=\"javascript:void(0)\" title=\"Edit\">',\n      '<i class=\"glyphicon glyphicon-edit\"></i>',\n      '</a>',\n      '<a class=\"remove ml10\" href=\"javascript:void(0)\" title=\"Remove\">',\n      '<i class=\"glyphicon glyphicon-remove\"></i>',\n      '</a>'\n    ].join('');\n  }\n\n  window.actionEvents = {\n    'click .like': function(e, value, row, index) {\n      alert('You click like icon, row: ' + JSON.stringify(row));\n      console.log(value, row, index);\n    },\n    'click .edit': function(e, value, row, index) {\n      alert('You click edit icon, row: ' + JSON.stringify(row));\n      console.log(value, row, index);\n    },\n    'click .remove': function(e, value, row, index) {\n      alert('You click remove icon, row: ' + JSON.stringify(row));\n      console.log(value, row, index);\n    }\n  };\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/bt-maxLength.js",
    "content": "(function($) {\n  'use strict';\n  $('#defaultconfig').maxlength({\n    warningClass: \"badge mt-1 badge-success\",\n    limitReachedClass: \"badge mt-1 badge-danger\"\n  });\n\n  $('#defaultconfig-2').maxlength({\n    alwaysShow: true,\n    threshold: 20,\n    warningClass: \"badge mt-1 badge-success\",\n    limitReachedClass: \"badge mt-1 badge-danger\"\n  });\n\n  $('#defaultconfig-3').maxlength({\n    alwaysShow: true,\n    threshold: 10,\n    warningClass: \"badge mt-1 badge-success\",\n    limitReachedClass: \"badge mt-1 badge-danger\",\n    separator: ' of ',\n    preText: 'You have ',\n    postText: ' chars remaining.',\n    validate: true\n  });\n\n  $('#maxlength-textarea').maxlength({\n    alwaysShow: true,\n    warningClass: \"badge mt-1 badge-success\",\n    limitReachedClass: \"badge mt-1 badge-danger\"\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/c3.js",
    "content": "(function($) {\n  'use strict';\n  var c3LineChart = c3.generate({\n    bindto: '#c3-line-chart',\n    data: {\n      columns: [\n        ['data1', 30, 200, 100, 400, 150, 250],\n        ['data2', 50, 20, 10, 40, 15, 25]\n      ]\n    },\n    color: {\n      pattern: ['rgba(88,216,163,1)', 'rgba(237,28,36,0.6)', 'rgba(4,189,254,0.6)']\n    },\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 30,\n      left: 0,\n    }\n  });\n\n  setTimeout(function() {\n    c3LineChart.load({\n      columns: [\n        ['data1', 230, 190, 300, 500, 300, 400]\n      ]\n    });\n  }, 1000);\n\n  setTimeout(function() {\n    c3LineChart.load({\n      columns: [\n        ['data3', 130, 150, 200, 300, 200, 100]\n      ]\n    });\n  }, 1500);\n\n  setTimeout(function() {\n    c3LineChart.unload({\n      ids: 'data1'\n    });\n  }, 2000);\n\n  var c3SplineChart = c3.generate({\n    bindto: '#c3-spline-chart',\n    data: {\n      columns: [\n        ['data1', 30, 200, 100, 400, 150, 250],\n        ['data2', 130, 100, 140, 200, 150, 50]\n      ],\n      type: 'spline'\n    },\n    color: {\n      pattern: ['rgba(88,216,163,1)', 'rgba(237,28,36,0.6)', 'rgba(4,189,254,0.6)']\n    },\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 30,\n      left: 0,\n    }\n  });\n  var c3BarChart = c3.generate({\n    bindto: '#c3-bar-chart',\n    data: {\n      columns: [\n        ['data1', 30, 200, 100, 400, 150, 250],\n        ['data2', 130, 100, 140, 200, 150, 50]\n      ],\n      type: 'bar'\n    },\n    color: {\n      pattern: ['rgba(88,216,163,1)', 'rgba(4,189,254,0.6)', 'rgba(237,28,36,0.6)']\n    },\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 30,\n      left: 0,\n    },\n    bar: {\n      width: {\n        ratio: 0.7 // this makes bar width 50% of length between ticks\n      }\n    }\n  });\n\n  setTimeout(function() {\n    c3BarChart.load({\n      columns: [\n        ['data3', 130, -150, 200, 300, -200, 100]\n      ]\n    });\n  }, 1000);\n\n  var c3StepChart = c3.generate({\n    bindto: '#c3-step-chart',\n    data: {\n      columns: [\n        ['data1', 300, 350, 300, 0, 0, 100],\n        ['data2', 130, 100, 140, 200, 150, 50]\n      ],\n      types: {\n        data1: 'step',\n        data2: 'area-step'\n      }\n    },\n    color: {\n      pattern: ['rgba(88,216,163,1)', 'rgba(4,189,254,0.6)', 'rgba(237,28,36,0.6)']\n    },\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 30,\n      left: 0,\n    }\n  });\n  var c3PieChart = c3.generate({\n    bindto: '#c3-pie-chart',\n    data: {\n      // iris data from R\n      columns: [\n        ['data1', 30],\n        ['data2', 120],\n      ],\n      type: 'pie',\n      onclick: function(d, i) {\n        console.log(\"onclick\", d, i);\n      },\n      onmouseover: function(d, i) {\n        console.log(\"onmouseover\", d, i);\n      },\n      onmouseout: function(d, i) {\n        console.log(\"onmouseout\", d, i);\n      }\n    },\n    color: {\n      pattern: ['#6153F9', '#8E97FC', '#A7B3FD']\n    },\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 30,\n      left: 0,\n    }\n  });\n\n  setTimeout(function() {\n    c3PieChart.load({\n      columns: [\n        [\"Income\", 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2],\n        [\"Outcome\", 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3],\n        [\"Revenue\", 2.5, 1.9, 2.1, 1.8, 2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2.0, 1.9, 2.1, 2.0, 2.4, 2.3, 1.8, 2.2, 2.3, 1.5, 2.3, 2.0, 2.0, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6, 1.9, 2.0, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9, 2.3, 2.5, 2.3, 1.9, 2.0, 2.3, 1.8],\n      ]\n    });\n  }, 1500);\n\n  setTimeout(function() {\n    c3PieChart.unload({\n      ids: 'data1'\n    });\n    c3PieChart.unload({\n      ids: 'data2'\n    });\n  }, 2500);\n  var c3DonutChart = c3.generate({\n    bindto: '#c3-donut-chart',\n    data: {\n      columns: [\n        ['data1', 30],\n        ['data2', 120],\n      ],\n      type: 'donut',\n      onclick: function(d, i) {\n        console.log(\"onclick\", d, i);\n      },\n      onmouseover: function(d, i) {\n        console.log(\"onmouseover\", d, i);\n      },\n      onmouseout: function(d, i) {\n        console.log(\"onmouseout\", d, i);\n      }\n    },\n    color: {\n      pattern: ['rgba(88,216,163,1)', 'rgba(4,189,254,0.6)', 'rgba(237,28,36,0.6)']\n    },\n    padding: {\n      top: 0,\n      right: 0,\n      bottom: 30,\n      left: 0,\n    },\n    donut: {\n      title: \"Iris Petal Width\"\n    }\n  });\n\n  setTimeout(function() {\n    c3DonutChart.load({\n      columns: [\n        [\"setosa\", 0.2, 0.2, 0.2, 0.2, 0.2, 0.4, 0.3, 0.2, 0.2, 0.1, 0.2, 0.2, 0.1, 0.1, 0.2, 0.4, 0.4, 0.3, 0.3, 0.3, 0.2, 0.4, 0.2, 0.5, 0.2, 0.2, 0.4, 0.2, 0.2, 0.2, 0.2, 0.4, 0.1, 0.2, 0.2, 0.2, 0.2, 0.1, 0.2, 0.2, 0.3, 0.3, 0.2, 0.6, 0.4, 0.3, 0.2, 0.2, 0.2, 0.2],\n        [\"versicolor\", 1.4, 1.5, 1.5, 1.3, 1.5, 1.3, 1.6, 1.0, 1.3, 1.4, 1.0, 1.5, 1.0, 1.4, 1.3, 1.4, 1.5, 1.0, 1.5, 1.1, 1.8, 1.3, 1.5, 1.2, 1.3, 1.4, 1.4, 1.7, 1.5, 1.0, 1.1, 1.0, 1.2, 1.6, 1.5, 1.6, 1.5, 1.3, 1.3, 1.3, 1.2, 1.4, 1.2, 1.0, 1.3, 1.2, 1.3, 1.3, 1.1, 1.3],\n        [\"virginica\", 2.5, 1.9, 2.1, 1.8, 2.2, 2.1, 1.7, 1.8, 1.8, 2.5, 2.0, 1.9, 2.1, 2.0, 2.4, 2.3, 1.8, 2.2, 2.3, 1.5, 2.3, 2.0, 2.0, 1.8, 2.1, 1.8, 1.8, 1.8, 2.1, 1.6, 1.9, 2.0, 2.2, 1.5, 1.4, 2.3, 2.4, 1.8, 1.8, 2.1, 2.4, 2.3, 1.9, 2.3, 2.5, 2.3, 1.9, 2.0, 2.3, 1.8],\n      ]\n    });\n  }, 1500);\n\n  setTimeout(function() {\n    c3DonutChart.unload({\n      ids: 'data1'\n    });\n    c3DonutChart.unload({\n      ids: 'data2'\n    });\n  }, 2500);\n\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/calendar.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    if ($('#calendar').length) {\n      $('#calendar').fullCalendar({\n        header: {\n          left: 'prev,next today',\n          center: 'title',\n          right: 'month,basicWeek,basicDay'\n        },\n        defaultDate: '2017-07-12',\n        navLinks: true, // can click day/week names to navigate views\n        editable: true,\n        eventLimit: true, // allow \"more\" link when too many events\n        events: [{\n            title: 'All Day Event',\n            start: '2017-07-08'\n          },\n          {\n            title: 'Long Event',\n            start: '2017-07-01',\n            end: '2017-07-07'\n          },\n          {\n            id: 999,\n            title: 'Repeating Event',\n            start: '2017-07-09T16:00:00'\n          },\n          {\n            id: 999,\n            title: 'Repeating Event',\n            start: '2017-07-16T16:00:00'\n          },\n          {\n            title: 'Conference',\n            start: '2017-07-11',\n            end: '2017-07-13'\n          },\n          {\n            title: 'Meeting',\n            start: '2017-07-12T10:30:00',\n            end: '2017-07-12T12:30:00'\n          },\n          {\n            title: 'Lunch',\n            start: '2017-07-12T12:00:00'\n          },\n          {\n            title: 'Meeting',\n            start: '2017-07-12T14:30:00'\n          },\n          {\n            title: 'Happy Hour',\n            start: '2017-07-12T17:30:00'\n          },\n          {\n            title: 'Dinner',\n            start: '2017-07-12T20:00:00'\n          },\n          {\n            title: 'Birthday Party',\n            start: '2017-07-13T07:00:00'\n          },\n          {\n            title: 'Click for Google',\n            url: 'http://google.com/',\n            start: '2017-07-28'\n          }\n        ]\n      })\n    }\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/chart.js",
    "content": "$(function() {\n  /* ChartJS\n   * -------\n   * Data and config for chartjs\n   */\n  'use strict';\n  var data = {\n    labels: [\"2013\", \"2014\", \"2014\", \"2015\", \"2016\", \"2017\"],\n    datasets: [{\n      label: '# of Votes',\n      data: [10, 19, 3, 5, 2, 3],\n      backgroundColor: [\n        'rgba(255, 99, 132, 0.2)',\n        'rgba(54, 162, 235, 0.2)',\n        'rgba(255, 206, 86, 0.2)',\n        'rgba(75, 192, 192, 0.2)',\n        'rgba(153, 102, 255, 0.2)',\n        'rgba(255, 159, 64, 0.2)'\n      ],\n      borderColor: [\n        'rgba(255,99,132,1)',\n        'rgba(54, 162, 235, 1)',\n        'rgba(255, 206, 86, 1)',\n        'rgba(75, 192, 192, 1)',\n        'rgba(153, 102, 255, 1)',\n        'rgba(255, 159, 64, 1)'\n      ],\n      borderWidth: 1,\n      fill: false\n    }]\n  };\n  var multiLineData = {\n    labels: [\"Red\", \"Blue\", \"Yellow\", \"Green\", \"Purple\", \"Orange\"],\n    datasets: [{\n        label: 'Dataset 1',\n        data: [12, 19, 3, 5, 2, 3],\n        borderColor: [\n          '#587ce4'\n        ],\n        borderWidth: 2,\n        fill: false\n      },\n      {\n        label: 'Dataset 2',\n        data: [5, 23, 7, 12, 42, 23],\n        borderColor: [\n          '#ede190'\n        ],\n        borderWidth: 2,\n        fill: false\n      },\n      {\n        label: 'Dataset 3',\n        data: [15, 10, 21, 32, 12, 33],\n        borderColor: [\n          '#f44252'\n        ],\n        borderWidth: 2,\n        fill: false\n      }\n    ]\n  };\n  var options = {\n    scales: {\n      yAxes: [{\n        ticks: {\n          beginAtZero: true\n        },\n        gridLines: {\n          color: \"rgba(204, 204, 204,0.1)\"\n        }\n      }],\n      xAxes: [{\n        gridLines: {\n          color: \"rgba(204, 204, 204,0.1)\"\n        }\n      }]\n    },\n    legend: {\n      display: false\n    },\n    elements: {\n      point: {\n        radius: 0\n      }\n    }\n  };\n\n  \n  var doughnutPieData = {\n    datasets: [{\n      data: [30, 40, 30],\n      backgroundColor: [\n        'rgba(255, 99, 132, 0.5)',\n        'rgba(54, 162, 235, 0.5)',\n        'rgba(255, 206, 86, 0.5)',\n        'rgba(75, 192, 192, 0.5)',\n        'rgba(153, 102, 255, 0.5)',\n        'rgba(255, 159, 64, 0.5)'\n      ],\n      borderColor: [\n        'rgba(255,99,132,1)',\n        'rgba(54, 162, 235, 1)',\n        'rgba(255, 206, 86, 1)',\n        'rgba(75, 192, 192, 1)',\n        'rgba(153, 102, 255, 1)',\n        'rgba(255, 159, 64, 1)'\n      ],\n    }],\n\n    // These labels appear in the legend and in the tooltips when hovering different arcs\n    labels: [\n      'Pink',\n      'Blue',\n      'Yellow',\n    ]\n  };\n  var doughnutPieOptions = {\n    responsive: true,\n    animation: {\n      animateScale: true,\n      animateRotate: true\n    }\n  };\n  var areaData = {\n    labels: [\"2013\", \"2014\", \"2015\", \"2016\", \"2017\"],\n    datasets: [{\n      label: '# of Votes',\n      data: [12, 19, 3, 5, 2, 3],\n      backgroundColor: [\n        'rgba(255, 99, 132, 0.2)',\n        'rgba(54, 162, 235, 0.2)',\n        'rgba(255, 206, 86, 0.2)',\n        'rgba(75, 192, 192, 0.2)',\n        'rgba(153, 102, 255, 0.2)',\n        'rgba(255, 159, 64, 0.2)'\n      ],\n      borderColor: [\n        'rgba(255,99,132,1)',\n        'rgba(54, 162, 235, 1)',\n        'rgba(255, 206, 86, 1)',\n        'rgba(75, 192, 192, 1)',\n        'rgba(153, 102, 255, 1)',\n        'rgba(255, 159, 64, 1)'\n      ],\n      borderWidth: 1,\n      fill: true, // 3: no fill\n    }]\n  };\n\n  var areaOptions = {\n    plugins: {\n      filler: {\n        propagate: true\n      }\n    },\n    scales: {\n      yAxes: [{\n        gridLines: {\n          color: \"rgba(204, 204, 204,0.1)\"\n        }\n      }],\n      xAxes: [{\n        gridLines: {\n          color: \"rgba(204, 204, 204,0.1)\"\n        }\n      }]\n    }\n  }\n\n  var multiAreaData = {\n    labels: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"],\n    datasets: [{\n        label: 'Facebook',\n        data: [8, 11, 13, 15, 12, 13, 16, 15, 13, 19, 11, 14],\n        borderColor: ['rgba(255, 99, 132, 0.5)'],\n        backgroundColor: ['rgba(255, 99, 132, 0.5)'],\n        borderWidth: 1,\n        fill: true\n      },\n      {\n        label: 'Twitter',\n        data: [7, 17, 12, 16, 14, 18, 16, 12, 15, 11, 13, 9],\n        borderColor: ['rgba(54, 162, 235, 0.5)'],\n        backgroundColor: ['rgba(54, 162, 235, 0.5)'],\n        borderWidth: 1,\n        fill: true\n      },\n      {\n        label: 'Linkedin',\n        data: [6, 14, 16, 20, 12, 18, 15, 12, 17, 19, 15, 11],\n        borderColor: ['rgba(255, 206, 86, 0.5)'],\n        backgroundColor: ['rgba(255, 206, 86, 0.5)'],\n        borderWidth: 1,\n        fill: true\n      }\n    ]\n  };\n\n  var multiAreaOptions = {\n    plugins: {\n      filler: {\n        propagate: true\n      }\n    },\n    elements: {\n      point: {\n        radius: 0\n      }\n    },\n    scales: {\n      xAxes: [{\n        gridLines: {\n          display: false\n        }\n      }],\n      yAxes: [{\n        gridLines: {\n          display: false\n        }\n      }]\n    }\n  }\n\n  var scatterChartData = {\n    datasets: [{\n        label: 'First Dataset',\n        data: [{\n            x: -10,\n            y: 0\n          },\n          {\n            x: 0,\n            y: 3\n          },\n          {\n            x: -25,\n            y: 5\n          },\n          {\n            x: 40,\n            y: 5\n          }\n        ],\n        backgroundColor: [\n          'rgba(255, 99, 132, 0.2)'\n        ],\n        borderColor: [\n          'rgba(255,99,132,1)'\n        ],\n        borderWidth: 1\n      },\n      {\n        label: 'Second Dataset',\n        data: [{\n            x: 10,\n            y: 5\n          },\n          {\n            x: 20,\n            y: -30\n          },\n          {\n            x: -25,\n            y: 15\n          },\n          {\n            x: -10,\n            y: 5\n          }\n        ],\n        backgroundColor: [\n          'rgba(54, 162, 235, 0.2)',\n        ],\n        borderColor: [\n          'rgba(54, 162, 235, 1)',\n        ],\n        borderWidth: 1\n      }\n    ]\n  }\n\n  var scatterChartOptions = {\n    scales: {\n      xAxes: [{\n        type: 'linear',\n        position: 'bottom',\n        gridLines: {\n          color: \"rgba(204, 204, 204,0.1)\"\n        }\n      }],\n      yAxes: [{\n        gridLines: {\n          color: \"rgba(204, 204, 204,0.1)\"\n        }\n      }]\n    }\n  }\n  // Get context with jQuery - using jQuery's .get() method.\n  if ($(\"#barChart\").length) {\n    var barChartCanvas = $(\"#barChart\").get(0).getContext(\"2d\");\n    // This will get the first returned node in the jQuery collection.\n    var barChart = new Chart(barChartCanvas, {\n      type: 'bar',\n      data: data,\n      options: options\n    });\n  }\n\n  if ($(\"#lineChart\").length) {\n    var lineChartCanvas = $(\"#lineChart\").get(0).getContext(\"2d\");\n    var lineChart = new Chart(lineChartCanvas, {\n      type: 'line',\n      data: data,\n      options: options\n    });\n  }\n\n  if ($(\"#linechart-multi\").length) {\n    var multiLineCanvas = $(\"#linechart-multi\").get(0).getContext(\"2d\");\n    var lineChart = new Chart(multiLineCanvas, {\n      type: 'line',\n      data: multiLineData,\n      options: options\n    });\n  }\n\n  if ($(\"#areachart-multi\").length) {\n    var multiAreaCanvas = $(\"#areachart-multi\").get(0).getContext(\"2d\");\n    var multiAreaChart = new Chart(multiAreaCanvas, {\n      type: 'line',\n      data: multiAreaData,\n      options: multiAreaOptions\n    });\n  }\n\n  if ($(\"#doughnutChart\").length) {\n    var doughnutChartCanvas = $(\"#doughnutChart\").get(0).getContext(\"2d\");\n    var doughnutChart = new Chart(doughnutChartCanvas, {\n      type: 'doughnut',\n      data: doughnutPieData,\n      options: doughnutPieOptions\n    });\n  }\n\n  if ($(\"#pieChart\").length) {\n    var pieChartCanvas = $(\"#pieChart\").get(0).getContext(\"2d\");\n    var pieChart = new Chart(pieChartCanvas, {\n      type: 'pie',\n      data: doughnutPieData,\n      options: doughnutPieOptions\n    });\n  }\n\n  if ($(\"#areaChart\").length) {\n    var areaChartCanvas = $(\"#areaChart\").get(0).getContext(\"2d\");\n    var areaChart = new Chart(areaChartCanvas, {\n      type: 'line',\n      data: areaData,\n      options: areaOptions\n    });\n  }\n\n  if ($(\"#scatterChart\").length) {\n    var scatterChartCanvas = $(\"#scatterChart\").get(0).getContext(\"2d\");\n    var scatterChart = new Chart(scatterChartCanvas, {\n      type: 'scatter',\n      data: scatterChartData,\n      options: scatterChartOptions\n    });\n  }\n\n  if ($(\"#browserTrafficChart\").length) {\n    var doughnutChartCanvas = $(\"#browserTrafficChart\").get(0).getContext(\"2d\");\n    var doughnutChart = new Chart(doughnutChartCanvas, {\n      type: 'doughnut',\n      data: browserTrafficData,\n      options: doughnutPieOptions\n    });\n  }\n});"
  },
  {
    "path": "BlackStone/assets/js/chartist.js",
    "content": "(function($) {\n  //simple line\n  'use strict';\n  if ($('#ct-chart-line').length) {\n    new Chartist.Line('#ct-chart-line', {\n      labels: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'],\n      series: [\n        [12, 9, 7, 8, 5],\n        [2, 1, 3.5, 7, 3],\n        [1, 3, 4, 5, 6]\n      ]\n    }, {\n      fullWidth: true,\n      chartPadding: {\n        right: 40\n      }\n    });\n  }\n\n  //Line scatterer\n  var times = function(n) {\n    return Array.apply(null, new Array(n));\n  };\n\n  var data = times(52).map(Math.random).reduce(function(data, rnd, index) {\n    data.labels.push(index + 1);\n    for (var i = 0; i < data.series.length; i++) {\n      data.series[i].push(Math.random() * 100)\n    }\n    return data;\n  }, {\n    labels: [],\n    series: times(4).map(function() {\n      return new Array()\n    })\n  });\n\n  var options = {\n    showLine: false,\n    axisX: {\n      labelInterpolationFnc: function(value, index) {\n        return index % 13 === 0 ? 'W' + value : null;\n      }\n    }\n  };\n\n  var responsiveOptions = [\n    ['screen and (min-width: 640px)', {\n      axisX: {\n        labelInterpolationFnc: function(value, index) {\n          return index % 4 === 0 ? 'W' + value : null;\n        }\n      }\n    }]\n  ];\n\n  if ($('#ct-chart-line-scatterer').length) {\n    new Chartist.Line('#ct-chart-line-scatterer', data, options, responsiveOptions);\n  }\n\n  //Stacked bar Chart\n  if ($('#ct-chart-stacked-bar').length) {\n    new Chartist.Bar('#ct-chart-stacked-bar', {\n      labels: ['Q1', 'Q2', 'Q3', 'Q4'],\n      series: [\n        ['800000', '1200000', '1400000', '1300000'],\n        ['200000', '400000', '500000', '300000'],\n        ['100000', '200000', '400000', '600000'],\n        ['400000', '600000', '200000', '0000']\n      ]\n    }, {\n      stackBars: true,\n      axisY: {\n        labelInterpolationFnc: function(value) {\n          return (value / 1000) + 'k';\n        }\n      }\n    }).on('draw', function(data) {\n      if (data.type === 'bar') {\n        data.element.attr({\n          style: 'stroke-width: 30px'\n        });\n      }\n    });\n  }\n\n\n  //Horizontal bar chart\n  if ($('#ct-chart-horizontal-bar').length) {\n    new Chartist.Bar('#ct-chart-horizontal-bar', {\n      labels: ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'],\n      series: [\n        [5, 4, 3, 7, 5, 10, 3],\n        [3, 2, 9, 5, 4, 6, 4],\n        [2, 6, 7, 1, 3, 5, 9],\n        [2, 6, 7, 1, 3, 5, 19],\n      ]\n    }, {\n      seriesBarDistance: 10,\n      reverseData: true,\n      horizontalBars: true,\n      axisY: {\n        offset: 20\n      }\n    });\n  }\n\n  //Pie\n  if ($('#ct-chart-pie').length) {\n    var data = {\n      series: [5, 3, 4]\n    };\n\n    var sum = function(a, b) {\n      return a + b\n    };\n\n    new Chartist.Pie('#ct-chart-pie', data, {\n      labelInterpolationFnc: function(value) {\n        return Math.round(value / data.series.reduce(sum) * 100) + '%';\n      }\n    });\n  }\n\n  //Donut\n  var labels = ['safari', 'chrome', 'explorer', 'firefox'];\n  var data = {\n    series: [20, 40, 10, 30]\n  };\n\n  if ($('#ct-chart-donut').length) {\n    new Chartist.Pie('#ct-chart-donut', data, {\n      donut: true,\n      donutWidth: 60,\n      donutSolid: true,\n      startAngle: 270,\n      showLabel: true,\n      labelInterpolationFnc: function(value, index) {\n        var percentage = Math.round(value / data.series.reduce(sum) * 100) + '%';\n        return labels[index] + ' ' + percentage;\n      }\n    });\n  }\n\n\n\n  //Dashboard Tickets Chart\n  if ($('#ct-chart-dash-barChart').length) {\n    new Chartist.Bar('#ct-chart-dash-barChart', {\n      labels: ['Week 1', 'Week 2', 'Week 3', 'Week 4'],\n      series: [\n        [300, 140, 230, 140],\n        [323, 529, 644, 230],\n        [734, 539, 624, 334],\n      ]\n    }, {\n      stackBars: true,\n      axisY: {\n        labelInterpolationFnc: function(value) {\n          return (value / 100) + 'k';\n        }\n      }\n    }).on('draw', function(data) {\n      if (data.type === 'bar') {\n        data.element.attr({\n          style: 'stroke-width: 50px'\n        });\n      }\n    });\n  }\n\n  //dashboard staked bar chart\n  if ($('#ct-chart-vartical-stacked-bar').length) {\n    new Chartist.Bar('#ct-chart-vartical-stacked-bar', {\n      labels: ['J', 'F', 'M', 'A', 'M', 'J', 'A'],\n      series: [{\n          \"name\": \"Income\",\n          \"data\": [8, 4, 6, 3, 7, 3, 8]\n        },\n        {\n          \"name\": \"Outcome\",\n          \"data\": [2, 7, 4, 8, 4, 6, 1]\n        },\n        {\n          \"name\": \"Revenue\",\n          \"data\": [4, 3, 3, 6, 7, 2, 4]\n        }\n      ]\n    }, {\n      seriesBarDistance: 10,\n      reverseData: true,\n      horizontalBars: false,\n      height: '280px',\n      fullWidth: true,\n      chartPadding: {\n        top: 30,\n        left: 0,\n        right: 0,\n        bottom: 0\n      },\n      plugins: [\n        Chartist.plugins.legend()\n      ]\n    });\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/circle-progress.js",
    "content": "(function($) {\n  'use strict';\n  if ($(\".circle-progress-1\").length) {\n    $('.circle-progress-1').circleProgress({}).on('circle-animation-progress', function(event, progress, stepValue) {\n      $(this).find('.value').html(Math.round(100 * stepValue.toFixed(2).substr(1)) + '<i>%</i>');\n    });\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/clipboard.js",
    "content": "(function ($) {\n  'use strict';\n  new ClipboardJS('.btn-clipboard');\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/codeEditor.js",
    "content": "(function($) {\n  'use strict';\n  if ($('textarea[name=code-editable]').length) {\n    var editableCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-editable'), {\n      mode: \"javascript\",\n      theme: \"ambiance\",\n      lineNumbers: true\n    });\n  }\n  if ($('#code-readonly').length) {\n    var readOnlyCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-readonly'), {\n      mode: \"javascript\",\n      theme: \"ambiance\",\n      lineNumbers: true,\n      readOnly: \"nocursor\"\n    });\n  }\n  if ($('#cm-js-mode').length) {\n    var cm = CodeMirror(document.getElementById(\"cm-js-mode\"), {\n      mode: \"javascript\",\n      lineNumbers: true\n    });\n  }\n\n  //Use this method of there are multiple codes with same properties\n  if ($('.multiple-codes').length) {\n    var code_type = '';\n    var editorTextarea = $('.multiple-codes');\n    for (var i = 0; i < editorTextarea.length; i++) {\n      $(editorTextarea[i]).attr('id', 'code-' + i);\n      CodeMirror.fromTextArea(document.getElementById('code-' + i), {\n        mode: \"javascript\",\n        theme: \"ambiance\",\n        lineNumbers: true,\n        readOnly: true,\n        maxHighlightLength: 0,\n        workDelay: 0\n      });\n    }\n  }\n\n  //Use this method of there are multiple codes with same properties in shell mode\n  if ($('.shell-mode').length) {\n    var code_type = '';\n    var shellEditor = $('.shell-mode');\n    for (var i = 0; i < shellEditor.length; i++) {\n      $(shellEditor[i]).attr('id', 'code-' + i);\n      CodeMirror.fromTextArea(document.getElementById('code-' + i), {\n        mode: \"shell\",\n        theme: \"ambiance\",\n        readOnly: true,\n        maxHighlightLength: 0,\n        workDelay: 0\n      });\n    }\n  }\n  if ($('#ace_html').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_html\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/html\");\n      document.getElementById('ace_html');\n    });\n  }\n  if ($('#ace_javaScript').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_javaScript\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/javascript\");\n      document.getElementById('aceExample');\n    });\n  }\n  if ($('#ace_json').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_json\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/json\");\n      document.getElementById('ace_json');\n    });\n  }\n  if ($('#ace_css').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_css\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/css\");\n      document.getElementById('ace_css');\n    });\n  }\n  if ($('#ace_scss').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_scss\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/scss\");\n      document.getElementById('ace_scss');\n    });\n  }\n  if ($('#ace_php').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_php\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/php\");\n      document.getElementById('ace_php');\n    });\n  }\n  if ($('#ace_ruby').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_ruby\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/ruby\");\n      document.getElementById('ace_ruby');\n    });\n  }\n  if ($('#ace_coffee').length) {\n    $(function() {\n      var editor = ace.edit(\"ace_coffee\");\n      editor.setTheme(\"ace/theme/monokai\");\n      editor.getSession().setMode(\"ace/mode/coffee\");\n      document.getElementById('ace_coffee');\n    });\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/codemirror.js",
    "content": "(function($) {\n  'use strict';\n  if ($('textarea[name=code-editable]').length) {\n    var editableCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-editable'), {\n      mode: \"javascript\",\n      theme: \"ambiance\",\n      lineNumbers: true\n    });\n  }\n  if ($('#code-readonly').length) {\n    var readOnlyCodeMirror = CodeMirror.fromTextArea(document.getElementById('code-readonly'), {\n      mode: \"javascript\",\n      theme: \"ambiance\",\n      lineNumbers: true,\n      readOnly: \"nocursor\"\n    });\n  }\n\n  //Use this method of there are multiple codes with same properties\n  if ($('.multiple-codes').length) {\n    var code_type = '';\n    var editorTextarea = $('.multiple-codes');\n    for (var i = 0; i < editorTextarea.length; i++) {\n      $(editorTextarea[i]).attr('id', 'code-' + i);\n      CodeMirror.fromTextArea(document.getElementById('code-' + i), {\n        mode: \"javascript\",\n        theme: \"ambiance\",\n        lineNumbers: true,\n        readOnly: \"nocursor\",\n        maxHighlightLength: 0,\n        workDelay: 0\n      });\n    }\n  }\n\n  //Use this method of there are multiple codes with same properties in shell mode\n  if ($('.shell-mode').length) {\n    var code_type = '';\n    var shellEditor = $('.shell-mode');\n    for (var i = 0; i < shellEditor.length; i++) {\n      $(shellEditor[i]).attr('id', 'code-' + i);\n      CodeMirror.fromTextArea(document.getElementById('code-' + i), {\n        mode: \"shell\",\n        theme: \"ambiance\",\n        readOnly: \"nocursor\",\n        maxHighlightLength: 0,\n        workDelay: 0\n      });\n    }\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/context-menu.js",
    "content": "(function($) {\n  'use strict';\n  $.contextMenu({\n    selector: '#context-menu-simple',\n    callback: function(key, options) {},\n    items: {\n      \"edit\": {\n        name: \"Edit\",\n        icon: \"edit\"\n      },\n      \"cut\": {\n        name: \"Cut\",\n        icon: \"cut\"\n      },\n      copy: {\n        name: \"Copy\",\n        icon: \"copy\"\n      },\n      \"paste\": {\n        name: \"Paste\",\n        icon: \"paste\"\n      },\n      \"delete\": {\n        name: \"Delete\",\n        icon: \"delete\"\n      },\n      \"sep1\": \"---------\",\n      \"quit\": {\n        name: \"Quit\",\n        icon: function() {\n          return 'context-menu-icon context-menu-icon-quit';\n        }\n      }\n    }\n  });\n  $.contextMenu({\n    selector: '#context-menu-access',\n    callback: function(key, options) {\n      var m = \"clicked: \" + key;\n      window.console && console.log(m) || alert(m);\n    },\n    items: {\n      \"edit\": {\n        name: \"Edit\",\n        icon: \"edit\",\n        accesskey: \"e\"\n      },\n      \"cut\": {\n        name: \"Cut\",\n        icon: \"cut\",\n        accesskey: \"c\"\n      },\n      // first unused character is taken (here: o)\n      \"copy\": {\n        name: \"Copy\",\n        icon: \"copy\",\n        accesskey: \"c o p y\"\n      },\n      // words are truncated to their first letter (here: p)\n      \"paste\": {\n        name: \"Paste\",\n        icon: \"paste\",\n        accesskey: \"cool paste\"\n      },\n      \"delete\": {\n        name: \"Delete\",\n        icon: \"delete\"\n      },\n      \"sep1\": \"---------\",\n      \"quit\": {\n        name: \"Quit\",\n        icon: function($element, key, item) {\n          return 'context-menu-icon context-menu-icon-quit';\n        }\n      }\n    }\n  });\n  $.contextMenu({\n    selector: '#context-menu-open',\n    callback: function(key, options) {\n      var m = \"clicked: \" + key;\n      window.console && console.log(m) || alert(m);\n    },\n    items: {\n      \"edit\": {\n        name: \"Closing on Click\",\n        icon: \"edit\",\n        callback: function() {\n          return true;\n        }\n      },\n      \"cut\": {\n        name: \"Open after Click\",\n        icon: \"cut\",\n        callback: function() {\n          return false;\n        }\n      }\n    }\n  });\n  $.contextMenu({\n    selector: '#context-menu-multi',\n    callback: function(key, options) {\n      var m = \"clicked: \" + key;\n      window.console && console.log(m) || alert(m);\n    },\n    items: {\n      \"edit\": {\n        \"name\": \"Edit\",\n        \"icon\": \"edit\"\n      },\n      \"cut\": {\n        \"name\": \"Cut\",\n        \"icon\": \"cut\"\n      },\n      \"sep1\": \"---------\",\n      \"quit\": {\n        \"name\": \"Quit\",\n        \"icon\": \"quit\"\n      },\n      \"sep2\": \"---------\",\n      \"fold1\": {\n        \"name\": \"Sub group\",\n        \"items\": {\n          \"fold1-key1\": {\n            \"name\": \"Foo bar\"\n          },\n          \"fold2\": {\n            \"name\": \"Sub group 2\",\n            \"items\": {\n              \"fold2-key1\": {\n                \"name\": \"alpha\"\n              },\n              \"fold2-key2\": {\n                \"name\": \"bravo\"\n              },\n              \"fold2-key3\": {\n                \"name\": \"charlie\"\n              }\n            }\n          },\n          \"fold1-key3\": {\n            \"name\": \"delta\"\n          }\n        }\n      },\n      \"fold1a\": {\n        \"name\": \"Other group\",\n        \"items\": {\n          \"fold1a-key1\": {\n            \"name\": \"echo\"\n          },\n          \"fold1a-key2\": {\n            \"name\": \"foxtrot\"\n          },\n          \"fold1a-key3\": {\n            \"name\": \"golf\"\n          }\n        }\n      }\n    }\n  });\n  $.contextMenu({\n    selector: '#context-menu-hover',\n    trigger: 'hover',\n    delay: 500,\n    callback: function(key, options) {\n      var m = \"clicked: \" + key;\n      window.console && console.log(m) || alert(m);\n    },\n    items: {\n      \"edit\": {\n        name: \"Edit\",\n        icon: \"edit\"\n      },\n      \"cut\": {\n        name: \"Cut\",\n        icon: \"cut\"\n      },\n      \"copy\": {\n        name: \"Copy\",\n        icon: \"copy\"\n      },\n      \"paste\": {\n        name: \"Paste\",\n        icon: \"paste\"\n      },\n      \"delete\": {\n        name: \"Delete\",\n        icon: \"delete\"\n      },\n      \"sep1\": \"---------\",\n      \"quit\": {\n        name: \"Quit\",\n        icon: function($element, key, item) {\n          return 'context-menu-icon context-menu-icon-quit';\n        }\n      }\n    }\n  });\n  $.contextMenu({\n    selector: '#context-menu-hover-autohide',\n    trigger: 'hover',\n    delay: 500,\n    autoHide: true,\n    callback: function(key, options) {\n      var m = \"clicked: \" + key;\n      window.console && console.log(m) || alert(m);\n    },\n    items: {\n      \"edit\": {\n        name: \"Edit\",\n        icon: \"edit\"\n      },\n      \"cut\": {\n        name: \"Cut\",\n        icon: \"cut\"\n      },\n      \"copy\": {\n        name: \"Copy\",\n        icon: \"copy\"\n      },\n      \"paste\": {\n        name: \"Paste\",\n        icon: \"paste\"\n      },\n      \"delete\": {\n        name: \"Delete\",\n        icon: \"delete\"\n      },\n      \"sep1\": \"---------\",\n      \"quit\": {\n        name: \"Quit\",\n        icon: function($element, key, item) {\n          return 'context-menu-icon context-menu-icon-quit';\n        }\n      }\n    }\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/cropper.js",
    "content": "(function($) {\n  'use strict';\n  $('#cropperExample').cropper({\n    aspectRatio: 16 / 9\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/dashboard.js",
    "content": "(function($) {\n  'use strict';\n  $.fn.andSelf = function() {\n    return this.addBack.apply(this, arguments);\n  }\n  $(function() {\n    if ($(\"#currentBalanceCircle\").length) {\n      var bar = new ProgressBar.Circle(currentBalanceCircle, {\n        color: '#000',\n        // This has to be the same size as the maximum width to\n        // prevent clipping\n        strokeWidth: 12,\n        trailWidth: 12,\n        trailColor: '#0d0d0d',\n        easing: 'easeInOut',\n        duration: 1400,\n        text: {\n          autoStyleContainer: false\n        },\n        from: { color: '#d53f3a', width: 12 },\n        to: { color: '#d53f3a', width: 12 },\n        // Set default step function for all animate calls\n        step: function(state, circle) {\n          circle.path.setAttribute('stroke', state.color);\n          circle.path.setAttribute('stroke-width', state.width);\n      \n          var value = Math.round(circle.value() * 100);\n          circle.setText('');\n      \n        }\n      });\n\n      bar.text.style.fontSize = '1.5rem';\n      bar.animate(0.4);  // Number from 0.0 to 1.0\n    }\n    if($('#audience-map').length) {\n      $('#audience-map').vectorMap({\n        map: 'world_mill_en',\n        backgroundColor: 'transparent',\n        panOnDrag: true,\n        focusOn: {\n          x: 0.5,\n          y: 0.5,\n          scale: 1,\n          animate: true\n        },\n        series: {\n          regions: [{\n            scale: ['#3d3c3c', '#f2f2f2'],\n            normalizeFunction: 'polynomial',\n            values: {\n\n              \"BZ\": 75.00,\n              \"US\": 56.25,\n              \"AU\": 15.45,\n              \"GB\": 25.00,\n              \"RO\": 10.25,\n              \"GE\": 33.25\n            }\n          }]\n        }\n      });\n    }\n\n    /*\n    if ($(\"#transaction-history\").length) {\n      var areaData = {\n        labels: [\"Paypal\", \"Stripe\",\"Cash\"],\n        datasets: [{\n            data: [55, 25, 20],\n            backgroundColor: [\n              \"#111111\",\"#00d25b\",\"#ffab00\"\n            ]\n          }\n        ]\n      };\n      var areaOptions = {\n        responsive: true,\n        maintainAspectRatio: true,\n        segmentShowStroke: false,\n        cutoutPercentage: 70,\n        elements: {\n          arc: {\n              borderWidth: 0\n          }\n        },      \n        legend: {\n          display: false\n        },\n        tooltips: {\n          enabled: true\n        }\n      }\n      var transactionhistoryChartPlugins = {\n        beforeDraw: function(chart) {\n          var width = chart.chart.width,\n              height = chart.chart.height,\n              ctx = chart.chart.ctx;\n      \n          ctx.restore();\n          var fontSize = 1;\n          ctx.font = fontSize + \"rem sans-serif\";\n          ctx.textAlign = 'left';\n          ctx.textBaseline = \"middle\";\n          ctx.fillStyle = \"#ffffff\";\n      \n          var text = \"$1200\", \n              textX = Math.round((width - ctx.measureText(text).width) / 2),\n              textY = height / 2.4;\n      \n          ctx.fillText(text, textX, textY);\n\n          ctx.restore();\n          var fontSize = 0.75;\n          ctx.font = fontSize + \"rem sans-serif\";\n          ctx.textAlign = 'left';\n          ctx.textBaseline = \"middle\";\n          ctx.fillStyle = \"#6c7293\";\n\n          var texts = \"Total\", \n              textsX = Math.round((width - ctx.measureText(text).width) / 1.93),\n              textsY = height / 1.7;\n      \n          ctx.fillText(texts, textsX, textsY);\n          ctx.save();\n        }\n      }\n      var transactionhistoryChartCanvas = $(\"#transaction-history\").get(0).getContext(\"2d\");\n      var transactionhistoryChart = new Chart(transactionhistoryChartCanvas, {\n        type: 'doughnut',\n        data: areaData,\n        options: areaOptions,\n        plugins: transactionhistoryChartPlugins\n      });\n    }\n*/\n\n\n    if ($(\"#transaction-history-arabic\").length) {\n      var areaData = {\n        labels: [\"Paypal\", \"Stripe\",\"Cash\"],\n        datasets: [{\n            data: [55, 25, 20],\n            backgroundColor: [\n              \"#111111\",\"#00d25b\",\"#ffab00\"\n            ]\n          }\n        ]\n      };\n      var areaOptions = {\n        responsive: true,\n        maintainAspectRatio: true,\n        segmentShowStroke: false,\n        cutoutPercentage: 70,\n        elements: {\n          arc: {\n              borderWidth: 0\n          }\n        },      \n        legend: {\n          display: false\n        },\n        tooltips: {\n          enabled: true\n        }\n      }\n      var transactionhistoryChartPlugins = {\n        beforeDraw: function(chart) {\n          var width = chart.chart.width,\n              height = chart.chart.height,\n              ctx = chart.chart.ctx;\n      \n          ctx.restore();\n          var fontSize = 1;\n          ctx.font = fontSize + \"rem sans-serif\";\n          ctx.textAlign = 'left';\n          ctx.textBaseline = \"middle\";\n          ctx.fillStyle = \"#ffffff\";\n      \n          var text = \"$1200\", \n              textX = Math.round((width - ctx.measureText(text).width) / 2),\n              textY = height / 2.4;\n      \n          ctx.fillText(text, textX, textY);\n\n          ctx.restore();\n          var fontSize = 0.75;\n          ctx.font = fontSize + \"rem sans-serif\";\n          ctx.textAlign = 'left';\n          ctx.textBaseline = \"middle\";\n          ctx.fillStyle = \"#6c7293\";\n\n          var texts = \"مجموع\", \n              textsX = Math.round((width - ctx.measureText(text).width) / 1.93),\n              textsY = height / 1.7;\n      \n          ctx.fillText(texts, textsX, textsY);\n          ctx.save();\n        }\n      }\n      var transactionhistoryChartCanvas = $(\"#transaction-history-arabic\").get(0).getContext(\"2d\");\n      var transactionhistoryChart = new Chart(transactionhistoryChartCanvas, {\n        type: 'doughnut',\n        data: areaData,\n        options: areaOptions,\n        plugins: transactionhistoryChartPlugins\n      });\n    }\n    if ($('#owl-carousel-basic').length) {\n      $('#owl-carousel-basic').owlCarousel({\n        loop: true,\n        margin: 10,\n        dots: false,\n        nav: true,\n        autoplay: true,\n        autoplayTimeout: 4500,\n        navText: [\"<i class='mdi mdi-chevron-left'></i>\", \"<i class='mdi mdi-chevron-right'></i>\"],\n        responsive: {\n          0: {\n            items: 1\n          },\n          600: {\n            items: 1\n          },\n          1000: {\n            items: 1\n          }\n        }\n      });\n    }\n    var isrtl = $(\"body\").hasClass(\"rtl\");\n    if ($('#owl-carousel-rtl').length) {\n      $('#owl-carousel-rtl').owlCarousel({\n        loop: true,\n        margin: 10,\n        dots: false,\n        nav: true,\n        rtl: isrtl,\n        autoplay: true,\n        autoplayTimeout: 4500,\n        navText: [\"<i class='mdi mdi-chevron-right'></i>\", \"<i class='mdi mdi-chevron-left'></i>\"],\n        responsive: {\n          0: {\n            items: 1\n          },\n          600: {\n            items: 1\n          },\n          1000: {\n            items: 1\n          }\n        }\n      });\n    }\n    });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/data-table.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $('#order-listing').DataTable({\n      \"aLengthMenu\": [\n        [5, 10, 15, -1],\n        [5, 10, 15, \"All\"]\n      ],\n      \"iDisplayLength\": 10,\n      \"language\": {\n        search: \"\"\n      }\n    });\n    $('#order-listing').each(function() {\n      var datatable = $(this);\n      // SEARCH - Add the placeholder for Search and Turn this into in-line form control\n      var search_input = datatable.closest('.dataTables_wrapper').find('div[id$=_filter] input');\n      search_input.attr('placeholder', 'Search');\n      search_input.removeClass('form-control-sm');\n      // LENGTH - Inline-Form control\n      var length_sel = datatable.closest('.dataTables_wrapper').find('div[id$=_length] select');\n      length_sel.removeClass('form-control-sm');\n    });\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/db.js",
    "content": "(function($) {\n  (function() {\n\n    var db = {\n\n      loadData: function(filter) {\n        return $.grep(this.clients, function(client) {\n          return (!filter.Name || client.Name.indexOf(filter.Name) > -1) &&\n            (filter.Age === undefined || client.Age === filter.Age) &&\n            (!filter.Address || client.Address.indexOf(filter.Address) > -1) &&\n            (!filter.Country || client.Country === filter.Country) &&\n            (filter.Married === undefined || client.Married === filter.Married);\n        });\n      },\n\n      insertItem: function(insertingClient) {\n        this.clients.push(insertingClient);\n      },\n\n      updateItem: function(updatingClient) {},\n\n      deleteItem: function(deletingClient) {\n        var clientIndex = $.inArray(deletingClient, this.clients);\n        this.clients.splice(clientIndex, 1);\n      }\n\n    };\n\n    window.db = db;\n\n\n    db.countries = [{\n        Name: \"\",\n        Id: 0\n      },\n      {\n        Name: \"United States\",\n        Id: 1\n      },\n      {\n        Name: \"Canada\",\n        Id: 2\n      },\n      {\n        Name: \"United Kingdom\",\n        Id: 3\n      },\n      {\n        Name: \"France\",\n        Id: 4\n      },\n      {\n        Name: \"Brazil\",\n        Id: 5\n      },\n      {\n        Name: \"China\",\n        Id: 6\n      },\n      {\n        Name: \"Russia\",\n        Id: 7\n      }\n    ];\n\n    db.clients = [{\n        \"Name\": \"Otto Clay\",\n        \"Age\": 61,\n        \"Country\": 6,\n        \"Address\": \"Ap #897-1459 Quam Avenue\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Connor Johnston\",\n        \"Age\": 73,\n        \"Country\": 7,\n        \"Address\": \"Ap #370-4647 Dis Av.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Lacey Hess\",\n        \"Age\": 29,\n        \"Country\": 7,\n        \"Address\": \"Ap #365-8835 Integer St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Timothy Henson\",\n        \"Age\": 78,\n        \"Country\": 1,\n        \"Address\": \"911-5143 Luctus Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Ramona Benton\",\n        \"Age\": 43,\n        \"Country\": 5,\n        \"Address\": \"Ap #614-689 Vehicula Street\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Ezra Tillman\",\n        \"Age\": 51,\n        \"Country\": 1,\n        \"Address\": \"P.O. Box 738, 7583 Quisque St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Dante Carter\",\n        \"Age\": 59,\n        \"Country\": 1,\n        \"Address\": \"P.O. Box 976, 6316 Lorem, St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Christopher Mcclure\",\n        \"Age\": 58,\n        \"Country\": 1,\n        \"Address\": \"847-4303 Dictum Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Ruby Rocha\",\n        \"Age\": 62,\n        \"Country\": 2,\n        \"Address\": \"5212 Sagittis Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Imelda Hardin\",\n        \"Age\": 39,\n        \"Country\": 5,\n        \"Address\": \"719-7009 Auctor Av.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Jonah Johns\",\n        \"Age\": 28,\n        \"Country\": 5,\n        \"Address\": \"P.O. Box 939, 9310 A Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Herman Rosa\",\n        \"Age\": 49,\n        \"Country\": 7,\n        \"Address\": \"718-7162 Molestie Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Arthur Gay\",\n        \"Age\": 20,\n        \"Country\": 7,\n        \"Address\": \"5497 Neque Street\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Xena Wilkerson\",\n        \"Age\": 63,\n        \"Country\": 1,\n        \"Address\": \"Ap #303-6974 Proin Street\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Lilah Atkins\",\n        \"Age\": 33,\n        \"Country\": 5,\n        \"Address\": \"622-8602 Gravida Ave\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Malik Shepard\",\n        \"Age\": 59,\n        \"Country\": 1,\n        \"Address\": \"967-5176 Tincidunt Av.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Keely Silva\",\n        \"Age\": 24,\n        \"Country\": 1,\n        \"Address\": \"P.O. Box 153, 8995 Praesent Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Hunter Pate\",\n        \"Age\": 73,\n        \"Country\": 7,\n        \"Address\": \"P.O. Box 771, 7599 Ante, Road\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Mikayla Roach\",\n        \"Age\": 55,\n        \"Country\": 5,\n        \"Address\": \"Ap #438-9886 Donec Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Upton Joseph\",\n        \"Age\": 48,\n        \"Country\": 4,\n        \"Address\": \"Ap #896-7592 Habitant St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Jeanette Pate\",\n        \"Age\": 59,\n        \"Country\": 2,\n        \"Address\": \"P.O. Box 177, 7584 Amet, St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kaden Hernandez\",\n        \"Age\": 79,\n        \"Country\": 3,\n        \"Address\": \"366 Ut St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Kenyon Stevens\",\n        \"Age\": 20,\n        \"Country\": 3,\n        \"Address\": \"P.O. Box 704, 4580 Gravida Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Jerome Harper\",\n        \"Age\": 31,\n        \"Country\": 5,\n        \"Address\": \"2464 Porttitor Road\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Jelani Patel\",\n        \"Age\": 36,\n        \"Country\": 2,\n        \"Address\": \"P.O. Box 541, 5805 Nec Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Keaton Oconnor\",\n        \"Age\": 21,\n        \"Country\": 1,\n        \"Address\": \"Ap #657-1093 Nec, Street\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Bree Johnston\",\n        \"Age\": 31,\n        \"Country\": 2,\n        \"Address\": \"372-5942 Vulputate Avenue\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Maisie Hodges\",\n        \"Age\": 70,\n        \"Country\": 7,\n        \"Address\": \"P.O. Box 445, 3880 Odio, Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kuame Calhoun\",\n        \"Age\": 39,\n        \"Country\": 2,\n        \"Address\": \"P.O. Box 609, 4105 Rutrum St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Carlos Cameron\",\n        \"Age\": 38,\n        \"Country\": 5,\n        \"Address\": \"Ap #215-5386 A, Avenue\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Fulton Parsons\",\n        \"Age\": 25,\n        \"Country\": 7,\n        \"Address\": \"P.O. Box 523, 3705 Sed Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Wallace Christian\",\n        \"Age\": 43,\n        \"Country\": 3,\n        \"Address\": \"416-8816 Mauris Avenue\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Caryn Maldonado\",\n        \"Age\": 40,\n        \"Country\": 1,\n        \"Address\": \"108-282 Nonummy Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Whilemina Frank\",\n        \"Age\": 20,\n        \"Country\": 7,\n        \"Address\": \"P.O. Box 681, 3938 Egestas. Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Emery Moon\",\n        \"Age\": 41,\n        \"Country\": 4,\n        \"Address\": \"Ap #717-8556 Non Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Price Watkins\",\n        \"Age\": 35,\n        \"Country\": 4,\n        \"Address\": \"832-7810 Nunc Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Lydia Castillo\",\n        \"Age\": 59,\n        \"Country\": 7,\n        \"Address\": \"5280 Placerat, Ave\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Lawrence Conway\",\n        \"Age\": 53,\n        \"Country\": 1,\n        \"Address\": \"Ap #452-2808 Imperdiet St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kalia Nicholson\",\n        \"Age\": 67,\n        \"Country\": 5,\n        \"Address\": \"P.O. Box 871, 3023 Tellus Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Brielle Baxter\",\n        \"Age\": 45,\n        \"Country\": 3,\n        \"Address\": \"Ap #822-9526 Ut, Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Valentine Brady\",\n        \"Age\": 72,\n        \"Country\": 7,\n        \"Address\": \"8014 Enim. Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Rebecca Gardner\",\n        \"Age\": 57,\n        \"Country\": 4,\n        \"Address\": \"8655 Arcu. Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Vladimir Tate\",\n        \"Age\": 26,\n        \"Country\": 1,\n        \"Address\": \"130-1291 Non, Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Vernon Hays\",\n        \"Age\": 56,\n        \"Country\": 4,\n        \"Address\": \"964-5552 In Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Allegra Hull\",\n        \"Age\": 22,\n        \"Country\": 4,\n        \"Address\": \"245-8891 Donec St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Hu Hendrix\",\n        \"Age\": 65,\n        \"Country\": 7,\n        \"Address\": \"428-5404 Tempus Ave\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Kenyon Battle\",\n        \"Age\": 32,\n        \"Country\": 2,\n        \"Address\": \"921-6804 Lectus St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Gloria Nielsen\",\n        \"Age\": 24,\n        \"Country\": 4,\n        \"Address\": \"Ap #275-4345 Lorem, Street\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Illiana Kidd\",\n        \"Age\": 59,\n        \"Country\": 2,\n        \"Address\": \"7618 Lacus. Av.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Adria Todd\",\n        \"Age\": 68,\n        \"Country\": 6,\n        \"Address\": \"1889 Tincidunt Road\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kirsten Mayo\",\n        \"Age\": 71,\n        \"Country\": 1,\n        \"Address\": \"100-8640 Orci, Avenue\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Willa Hobbs\",\n        \"Age\": 60,\n        \"Country\": 6,\n        \"Address\": \"P.O. Box 323, 158 Tristique St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Alexis Clements\",\n        \"Age\": 69,\n        \"Country\": 5,\n        \"Address\": \"P.O. Box 176, 5107 Proin Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Akeem Conrad\",\n        \"Age\": 60,\n        \"Country\": 2,\n        \"Address\": \"282-495 Sed Ave\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Montana Silva\",\n        \"Age\": 79,\n        \"Country\": 6,\n        \"Address\": \"P.O. Box 120, 9766 Consectetuer St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kaseem Hensley\",\n        \"Age\": 77,\n        \"Country\": 6,\n        \"Address\": \"Ap #510-8903 Mauris. Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Christopher Morton\",\n        \"Age\": 35,\n        \"Country\": 5,\n        \"Address\": \"P.O. Box 234, 3651 Sodales Avenue\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Wade Fernandez\",\n        \"Age\": 49,\n        \"Country\": 6,\n        \"Address\": \"740-5059 Dolor. Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Illiana Kirby\",\n        \"Age\": 31,\n        \"Country\": 2,\n        \"Address\": \"527-3553 Mi Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kimberley Hurley\",\n        \"Age\": 65,\n        \"Country\": 5,\n        \"Address\": \"P.O. Box 637, 9915 Dictum St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Arthur Olsen\",\n        \"Age\": 74,\n        \"Country\": 5,\n        \"Address\": \"887-5080 Eget St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Brody Potts\",\n        \"Age\": 59,\n        \"Country\": 2,\n        \"Address\": \"Ap #577-7690 Sem Road\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Dillon Ford\",\n        \"Age\": 60,\n        \"Country\": 1,\n        \"Address\": \"Ap #885-9289 A, Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Hannah Juarez\",\n        \"Age\": 61,\n        \"Country\": 2,\n        \"Address\": \"4744 Sapien, Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Vincent Shaffer\",\n        \"Age\": 25,\n        \"Country\": 2,\n        \"Address\": \"9203 Nunc St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"George Holt\",\n        \"Age\": 27,\n        \"Country\": 6,\n        \"Address\": \"4162 Cras Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Tobias Bartlett\",\n        \"Age\": 74,\n        \"Country\": 4,\n        \"Address\": \"792-6145 Mauris St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Xavier Hooper\",\n        \"Age\": 35,\n        \"Country\": 1,\n        \"Address\": \"879-5026 Interdum. Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Declan Dorsey\",\n        \"Age\": 31,\n        \"Country\": 2,\n        \"Address\": \"Ap #926-4171 Aenean Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Clementine Tran\",\n        \"Age\": 43,\n        \"Country\": 4,\n        \"Address\": \"P.O. Box 176, 9865 Eu Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Pamela Moody\",\n        \"Age\": 55,\n        \"Country\": 6,\n        \"Address\": \"622-6233 Luctus Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Julie Leon\",\n        \"Age\": 43,\n        \"Country\": 6,\n        \"Address\": \"Ap #915-6782 Sem Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Shana Nolan\",\n        \"Age\": 79,\n        \"Country\": 5,\n        \"Address\": \"P.O. Box 603, 899 Eu St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Vaughan Moody\",\n        \"Age\": 37,\n        \"Country\": 5,\n        \"Address\": \"880 Erat Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Randall Reeves\",\n        \"Age\": 44,\n        \"Country\": 3,\n        \"Address\": \"1819 Non Street\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Dominic Raymond\",\n        \"Age\": 68,\n        \"Country\": 1,\n        \"Address\": \"Ap #689-4874 Nisi Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Lev Pugh\",\n        \"Age\": 69,\n        \"Country\": 5,\n        \"Address\": \"Ap #433-6844 Auctor Avenue\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Desiree Hughes\",\n        \"Age\": 80,\n        \"Country\": 4,\n        \"Address\": \"605-6645 Fermentum Avenue\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Idona Oneill\",\n        \"Age\": 23,\n        \"Country\": 7,\n        \"Address\": \"751-8148 Aliquam Avenue\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Lani Mayo\",\n        \"Age\": 76,\n        \"Country\": 1,\n        \"Address\": \"635-2704 Tristique St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Cathleen Bonner\",\n        \"Age\": 40,\n        \"Country\": 1,\n        \"Address\": \"916-2910 Dolor Av.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Sydney Murray\",\n        \"Age\": 44,\n        \"Country\": 5,\n        \"Address\": \"835-2330 Fringilla St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Brenna Rodriguez\",\n        \"Age\": 77,\n        \"Country\": 6,\n        \"Address\": \"3687 Imperdiet Av.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Alfreda Mcdaniel\",\n        \"Age\": 38,\n        \"Country\": 7,\n        \"Address\": \"745-8221 Aliquet Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Zachery Atkins\",\n        \"Age\": 30,\n        \"Country\": 1,\n        \"Address\": \"549-2208 Auctor. Road\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Amelia Rich\",\n        \"Age\": 56,\n        \"Country\": 4,\n        \"Address\": \"P.O. Box 734, 4717 Nunc Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kiayada Witt\",\n        \"Age\": 62,\n        \"Country\": 3,\n        \"Address\": \"Ap #735-3421 Malesuada Avenue\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Lysandra Pierce\",\n        \"Age\": 36,\n        \"Country\": 1,\n        \"Address\": \"Ap #146-2835 Curabitur St.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Cara Rios\",\n        \"Age\": 58,\n        \"Country\": 4,\n        \"Address\": \"Ap #562-7811 Quam. Ave\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Austin Andrews\",\n        \"Age\": 55,\n        \"Country\": 7,\n        \"Address\": \"P.O. Box 274, 5505 Sociis Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Lillian Peterson\",\n        \"Age\": 39,\n        \"Country\": 2,\n        \"Address\": \"6212 A Avenue\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Adria Beach\",\n        \"Age\": 29,\n        \"Country\": 2,\n        \"Address\": \"P.O. Box 183, 2717 Nunc Avenue\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Oleg Durham\",\n        \"Age\": 80,\n        \"Country\": 4,\n        \"Address\": \"931-3208 Nunc Rd.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Casey Reese\",\n        \"Age\": 60,\n        \"Country\": 4,\n        \"Address\": \"383-3675 Ultrices, St.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kane Burnett\",\n        \"Age\": 80,\n        \"Country\": 1,\n        \"Address\": \"759-8212 Dolor. Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Stewart Wilson\",\n        \"Age\": 46,\n        \"Country\": 7,\n        \"Address\": \"718-7845 Sagittis. Av.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Charity Holcomb\",\n        \"Age\": 31,\n        \"Country\": 6,\n        \"Address\": \"641-7892 Enim. Ave\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Kyra Cummings\",\n        \"Age\": 43,\n        \"Country\": 4,\n        \"Address\": \"P.O. Box 702, 6621 Mus. Av.\",\n        \"Married\": false\n      },\n      {\n        \"Name\": \"Stuart Wallace\",\n        \"Age\": 25,\n        \"Country\": 7,\n        \"Address\": \"648-4990 Sed Rd.\",\n        \"Married\": true\n      },\n      {\n        \"Name\": \"Carter Clarke\",\n        \"Age\": 59,\n        \"Country\": 6,\n        \"Address\": \"Ap #547-2921 A Street\",\n        \"Married\": false\n      }\n    ];\n\n    db.users = [{\n        \"ID\": \"x\",\n        \"Account\": \"A758A693-0302-03D1-AE53-EEFE22855556\",\n        \"Name\": \"Carson Kelley\",\n        \"RegisterDate\": \"2002-04-20T22:55:52-07:00\"\n      },\n      {\n        \"Account\": \"D89FF524-1233-0CE7-C9E1-56EFF017A321\",\n        \"Name\": \"Prescott Griffin\",\n        \"RegisterDate\": \"2011-02-22T05:59:55-08:00\"\n      },\n      {\n        \"Account\": \"06FAAD9A-5114-08F6-D60C-961B2528B4F0\",\n        \"Name\": \"Amir Saunders\",\n        \"RegisterDate\": \"2014-08-13T09:17:49-07:00\"\n      },\n      {\n        \"Account\": \"EED7653D-7DD9-A722-64A8-36A55ECDBE77\",\n        \"Name\": \"Derek Thornton\",\n        \"RegisterDate\": \"2012-02-27T01:31:07-08:00\"\n      },\n      {\n        \"Account\": \"2A2E6D40-FEBD-C643-A751-9AB4CAF1E2F6\",\n        \"Name\": \"Fletcher Romero\",\n        \"RegisterDate\": \"2010-06-25T15:49:54-07:00\"\n      },\n      {\n        \"Account\": \"3978F8FA-DFF0-DA0E-0A5D-EB9D281A3286\",\n        \"Name\": \"Thaddeus Stein\",\n        \"RegisterDate\": \"2013-11-10T07:29:41-08:00\"\n      },\n      {\n        \"Account\": \"658DBF5A-176E-569A-9273-74FB5F69FA42\",\n        \"Name\": \"Nash Knapp\",\n        \"RegisterDate\": \"2005-06-24T09:11:19-07:00\"\n      },\n      {\n        \"Account\": \"76D2EE4B-7A73-1212-F6F2-957EF8C1F907\",\n        \"Name\": \"Quamar Vega\",\n        \"RegisterDate\": \"2011-04-13T20:06:29-07:00\"\n      },\n      {\n        \"Account\": \"00E46809-A595-CE82-C5B4-D1CAEB7E3E58\",\n        \"Name\": \"Philip Galloway\",\n        \"RegisterDate\": \"2008-08-21T18:59:38-07:00\"\n      },\n      {\n        \"Account\": \"C196781C-DDCC-AF83-DDC2-CA3E851A47A0\",\n        \"Name\": \"Mason French\",\n        \"RegisterDate\": \"2000-11-15T00:38:37-08:00\"\n      },\n      {\n        \"Account\": \"5911F201-818A-B393-5888-13157CE0D63F\",\n        \"Name\": \"Ross Cortez\",\n        \"RegisterDate\": \"2010-05-27T17:35:32-07:00\"\n      },\n      {\n        \"Account\": \"B8BB78F9-E1A1-A956-086F-E12B6FE168B6\",\n        \"Name\": \"Logan King\",\n        \"RegisterDate\": \"2003-07-08T16:58:06-07:00\"\n      },\n      {\n        \"Account\": \"06F636C3-9599-1A2D-5FD5-86B24ADDE626\",\n        \"Name\": \"Cedric Leblanc\",\n        \"RegisterDate\": \"2011-06-30T14:30:10-07:00\"\n      },\n      {\n        \"Account\": \"FE880CDD-F6E7-75CB-743C-64C6DE192412\",\n        \"Name\": \"Simon Sullivan\",\n        \"RegisterDate\": \"2013-06-11T16:35:07-07:00\"\n      },\n      {\n        \"Account\": \"BBEDD673-E2C1-4872-A5D3-C4EBD4BE0A12\",\n        \"Name\": \"Jamal West\",\n        \"RegisterDate\": \"2001-03-16T20:18:29-08:00\"\n      },\n      {\n        \"Account\": \"19BC22FA-C52E-0CC6-9552-10365C755FAC\",\n        \"Name\": \"Hector Morales\",\n        \"RegisterDate\": \"2012-11-01T01:56:34-07:00\"\n      },\n      {\n        \"Account\": \"A8292214-2C13-5989-3419-6B83DD637D6C\",\n        \"Name\": \"Herrod Hart\",\n        \"RegisterDate\": \"2008-03-13T19:21:04-07:00\"\n      },\n      {\n        \"Account\": \"0285564B-F447-0E7F-EAA1-7FB8F9C453C8\",\n        \"Name\": \"Clark Maxwell\",\n        \"RegisterDate\": \"2004-08-05T08:22:24-07:00\"\n      },\n      {\n        \"Account\": \"EA78F076-4F6E-4228-268C-1F51272498AE\",\n        \"Name\": \"Reuben Walter\",\n        \"RegisterDate\": \"2011-01-23T01:55:59-08:00\"\n      },\n      {\n        \"Account\": \"6A88C194-EA21-426F-4FE2-F2AE33F51793\",\n        \"Name\": \"Ira Ingram\",\n        \"RegisterDate\": \"2008-08-15T05:57:46-07:00\"\n      },\n      {\n        \"Account\": \"4275E873-439C-AD26-56B3-8715E336508E\",\n        \"Name\": \"Damian Morrow\",\n        \"RegisterDate\": \"2015-09-13T01:50:55-07:00\"\n      },\n      {\n        \"Account\": \"A0D733C4-9070-B8D6-4387-D44F0BA515BE\",\n        \"Name\": \"Macon Farrell\",\n        \"RegisterDate\": \"2011-03-14T05:41:40-07:00\"\n      },\n      {\n        \"Account\": \"B3683DE8-C2FA-7CA0-A8A6-8FA7E954F90A\",\n        \"Name\": \"Joel Galloway\",\n        \"RegisterDate\": \"2003-02-03T04:19:01-08:00\"\n      },\n      {\n        \"Account\": \"01D95A8E-91BC-2050-F5D0-4437AAFFD11F\",\n        \"Name\": \"Rigel Horton\",\n        \"RegisterDate\": \"2015-06-20T11:53:11-07:00\"\n      },\n      {\n        \"Account\": \"F0D12CC0-31AC-A82E-FD73-EEEFDBD21A36\",\n        \"Name\": \"Sylvester Gaines\",\n        \"RegisterDate\": \"2004-03-12T09:57:13-08:00\"\n      },\n      {\n        \"Account\": \"874FCC49-9A61-71BC-2F4E-2CE88348AD7B\",\n        \"Name\": \"Abbot Mckay\",\n        \"RegisterDate\": \"2008-12-26T20:42:57-08:00\"\n      },\n      {\n        \"Account\": \"B8DA1912-20A0-FB6E-0031-5F88FD63EF90\",\n        \"Name\": \"Solomon Green\",\n        \"RegisterDate\": \"2013-09-04T01:44:47-07:00\"\n      }\n    ];\n\n  }());\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/desktop-notification.js",
    "content": "(function($) {\n  'use strict';\n  $.fn.easyNotify = function(options) {\n\n    var settings = $.extend({\n      title: \"Notification\",\n      options: {\n        body: \"\",\n        icon: \"\",\n        lang: 'pt-BR',\n        onClose: \"\",\n        onClick: \"\",\n        onError: \"\"\n      }\n    }, options);\n\n    this.init = function() {\n      var notify = this;\n      if (!(\"Notification\" in window)) {\n        alert(\"This browser does not support desktop notification\");\n      } else if (Notification.permission === \"granted\") {\n\n        var notification = new Notification(settings.title, settings.options);\n\n        notification.onclose = function() {\n          if (typeof settings.options.onClose === 'function') {\n            settings.options.onClose();\n          }\n        };\n\n        notification.onclick = function() {\n          if (typeof settings.options.onClick === 'function') {\n            settings.options.onClick();\n          }\n        };\n\n        notification.onerror = function() {\n          if (typeof settings.options.onError === 'function') {\n            settings.options.onError();\n          }\n        };\n\n      } else if (Notification.permission !== 'denied') {\n        Notification.requestPermission(function(permission) {\n          if (permission === \"granted\") {\n            notify.init();\n          }\n\n        });\n      }\n\n    };\n\n    this.init();\n    return this;\n  };\n\n\n  //Initialise notification\n  var myFunction = function() {\n    alert('Click function');\n  };\n  var myImg = \"https://unsplash.it/600/600?image=777\";\n\n  $(\"form\").submit(function(event) {\n    event.preventDefault();\n\n    var options = {\n      title: $(\"#title\").val(),\n      options: {\n        body: $(\"#message\").val(),\n        icon: myImg,\n        lang: 'en-US',\n        onClick: myFunction\n      }\n    };\n    console.log(options);\n    $(\"#easyNotify\").easyNotify(options);\n  });\n}(jQuery));"
  },
  {
    "path": "BlackStone/assets/js/dragula.js",
    "content": "(function($) {\n  'use strict';\n  var iconTochange;\n  dragula([document.getElementById(\"dragula-left\"), document.getElementById(\"dragula-right\")]);\n  dragula([document.getElementById(\"profile-list-left\"), document.getElementById(\"profile-list-right\")]);\n  dragula([document.getElementById(\"dragula-event-left\"), document.getElementById(\"dragula-event-right\")])\n    .on('drop', function(el) {\n      console.log($(el));\n      iconTochange = $(el).find('.mdi');\n      if (iconTochange.hasClass('mdi-check')) {\n        iconTochange.removeClass('mdi-check text-primary').addClass('mdi-check-all text-success');\n      } else if (iconTochange.hasClass('mdi-check-all')) {\n        iconTochange.removeClass('mdi-check-all text-success').addClass('mdi-check text-primary');\n      }\n    })\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/dropify.js",
    "content": "(function($) {\n  'use strict';\n  $('.dropify').dropify();\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/dropzone.js",
    "content": "(function($) {\n  'use strict';\n  $(\"my-awesome-dropzone\").dropzone({\n    url: \"bootstrapdash.com/\"\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/editorDemo.js",
    "content": "(function($) {\n  'use strict';\n  /*Quill editor*/\n  if ($(\"#quillExample1\").length) {\n    var quill = new Quill('#quillExample1', {\n      modules: {\n        toolbar: [\n          [{\n            header: [1, 2, false]\n          }],\n          ['bold', 'italic', 'underline'],\n          ['image', 'code-block']\n        ]\n      },\n      placeholder: 'Compose an epic...',\n      theme: 'snow' // or 'bubble'\n    });\n  }\n\n  /*simplemde editor*/\n  if ($(\"#simpleMde\").length) {\n    var simplemde = new SimpleMDE({\n      element: $(\"#simpleMde\")[0]\n    });\n  }\n\n  /*Tinymce editor*/\n  if ($(\"#tinyMceExample\").length) {\n    tinymce.init({\n      selector: '#tinyMceExample',\n      height: 500,\n      theme: 'silver',\n      plugins: [\n        'advlist autolink lists link image charmap print preview hr anchor pagebreak',\n        'searchreplace wordcount visualblocks visualchars code fullscreen',\n        'insertdatetime media nonbreaking save table contextmenu directionality',\n        'emoticons template paste textcolor colorpicker textpattern imagetools codesample toc help'\n      ],\n      toolbar1: 'undo redo | insert | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image',\n      toolbar2: 'print preview media | forecolor backcolor emoticons | codesample help',\n      image_advtab: true,\n      templates: [{\n          title: 'Test template 1',\n          content: 'Test 1'\n        },\n        {\n          title: 'Test template 2',\n          content: 'Test 2'\n        }\n      ],\n      content_css: []\n    });\n  }\n\n  /*Summernote editor*/\n  if ($(\"#summernoteExample\").length) {\n    $('#summernoteExample').summernote({\n      height: 300,\n      tabsize: 2\n    });\n  }\n\n  /*X-editable editor*/\n  if ($('#editable-form').length) {\n    $.fn.editable.defaults.mode = 'inline';\n    $.fn.editableform.buttons =\n      '<button type=\"submit\" class=\"btn btn-primary btn-sm editable-submit\">' +\n      '<i class=\"fa fa-fw fa-check\"></i>' +\n      '</button>' +\n      '<button type=\"button\" class=\"btn btn-default btn-sm editable-cancel\">' +\n      '<i class=\"fa fa-fw fa-times\"></i>' +\n      '</button>';\n    $('#username').editable({\n      type: 'text',\n      pk: 1,\n      name: 'username',\n      title: 'Enter username'\n    });\n\n    $('#firstname').editable({\n      validate: function(value) {\n        if ($.trim(value) === '') return 'This field is required';\n      }\n    });\n\n    $('#sex').editable({\n      source: [{\n          value: 1,\n          text: 'Male'\n        },\n        {\n          value: 2,\n          text: 'Female'\n        }\n      ]\n    });\n\n    $('#status').editable();\n\n    $('#group').editable({\n      showbuttons: false\n    });\n\n    $('#vacation').editable({\n      datepicker: {\n        todayBtn: 'linked'\n      }\n    });\n\n    $('#dob').editable();\n\n    $('#event').editable({\n      placement: 'right',\n      combodate: {\n        firstItem: 'name'\n      }\n    });\n\n    $('#meeting_start').editable({\n      format: 'yyyy-mm-dd hh:ii',\n      viewformat: 'dd/mm/yyyy hh:ii',\n      validate: function(v) {\n        if (v && v.getDate() === 10) return 'Day cant be 10!';\n      },\n      datetimepicker: {\n        todayBtn: 'linked',\n        weekStart: 1\n      }\n    });\n\n    $('#comments').editable({\n      showbuttons: 'bottom'\n    });\n\n    $('#note').editable();\n    $('#pencil').on(\"click\", function(e) {\n      e.stopPropagation();\n      e.preventDefault();\n      $('#note').editable('toggle');\n    });\n\n    $('#state').editable({\n      source: [\"Alabama\", \"Alaska\", \"Arizona\", \"Arkansas\", \"California\", \"Colorado\", \"Connecticut\", \"Delaware\", \"Florida\", \"Georgia\", \"Hawaii\", \"Idaho\", \"Illinois\", \"Indiana\", \"Iowa\", \"Kansas\", \"Kentucky\", \"Louisiana\", \"Maine\", \"Maryland\", \"Massachusetts\", \"Michigan\", \"Minnesota\", \"Mississippi\", \"Missouri\", \"Montana\", \"Nebraska\", \"Nevada\", \"New Hampshire\", \"New Jersey\", \"New Mexico\", \"New York\", \"North Dakota\", \"North Carolina\", \"Ohio\", \"Oklahoma\", \"Oregon\", \"Pennsylvania\", \"Rhode Island\", \"South Carolina\", \"South Dakota\", \"Tennessee\", \"Texas\", \"Utah\", \"Vermont\", \"Virginia\", \"Washington\", \"West Virginia\", \"Wisconsin\", \"Wyoming\"]\n    });\n\n    $('#state2').editable({\n      value: 'California',\n      typeahead: {\n        name: 'state',\n        local: [\"Alabama\", \"Alaska\", \"Arizona\", \"Arkansas\", \"California\", \"Colorado\", \"Connecticut\", \"Delaware\", \"Florida\", \"Georgia\", \"Hawaii\", \"Idaho\", \"Illinois\", \"Indiana\", \"Iowa\", \"Kansas\", \"Kentucky\", \"Louisiana\", \"Maine\", \"Maryland\", \"Massachusetts\", \"Michigan\", \"Minnesota\", \"Mississippi\", \"Missouri\", \"Montana\", \"Nebraska\", \"Nevada\", \"New Hampshire\", \"New Jersey\", \"New Mexico\", \"New York\", \"North Dakota\", \"North Carolina\", \"Ohio\", \"Oklahoma\", \"Oregon\", \"Pennsylvania\", \"Rhode Island\", \"South Carolina\", \"South Dakota\", \"Tennessee\", \"Texas\", \"Utah\", \"Vermont\", \"Virginia\", \"Washington\", \"West Virginia\", \"Wisconsin\", \"Wyoming\"]\n      }\n    });\n\n    $('#fruits').editable({\n      pk: 1,\n      limit: 3,\n      source: [{\n          value: 1,\n          text: 'banana'\n        },\n        {\n          value: 2,\n          text: 'peach'\n        },\n        {\n          value: 3,\n          text: 'apple'\n        },\n        {\n          value: 4,\n          text: 'watermelon'\n        },\n        {\n          value: 5,\n          text: 'orange'\n        }\n      ]\n    });\n\n    $('#tags').editable({\n      inputclass: 'input-large',\n      select2: {\n        tags: ['html', 'javascript', 'css', 'ajax'],\n        tokenSeparators: [\",\", \" \"]\n      }\n    });\n\n    $('#address').editable({\n      url: '/post',\n      value: {\n        city: \"Moscow\",\n        street: \"Lenina\",\n        building: \"12\"\n      },\n      validate: function(value) {\n        if (value.city === '') return 'city is required!';\n      },\n      display: function(value) {\n        if (!value) {\n          $(this).empty();\n          return;\n        }\n        var html = '<b>' + $('<div>').text(value.city).html() + '</b>, ' + $('<div>').text(value.street).html() + ' st., bld. ' + $('<div>').text(value.building).html();\n        $(this).html(html);\n      }\n    });\n\n    $('#user .editable').on('hidden', function(e, reason) {\n      if (reason === 'save' || reason === 'nochange') {\n        var $next = $(this).closest('tr').next().find('.editable');\n        if ($('#autoopen').is(':checked')) {\n          setTimeout(function() {\n            $next.editable('show');\n          }, 300);\n        } else {\n          $next.focus();\n        }\n      }\n    });\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/file-upload.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $('.file-upload-browse').on('click', function() {\n      var file = $(this).parent().parent().parent().find('.file-upload-default');\n      file.trigger('click');\n    });\n    $('.file-upload-default').on('change', function() {\n      $(this).parent().find('.form-control').val($(this).val().replace(/C:\\\\fakepath\\\\/i, ''));\n    });\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/flot-chart.js",
    "content": "(function($) {\n  'use strict';\n  var data = [{\n      data: 18000,\n      color: '#FABA66',\n      label: 'Linda'\n    },\n    {\n      data: 20000,\n      color: '#F36368',\n      label: 'John'\n    },\n    {\n      data: 13000,\n      color: '#76C1FA',\n      label: 'Margaret'\n    },\n    {\n      data: 15000,\n      color: '#63CF72',\n      label: 'Richard'\n    }\n  ];\n\n  if ($(\"#pie-chart\").length) {\n    $.plot(\"#pie-chart\", data, {\n      series: {\n        pie: {\n          show: true,\n          radius: 1,\n          label: {\n            show: true,\n            radius: 3 / 4,\n            formatter: labelFormatter,\n            background: {\n              opacity: 0.5\n            }\n          }\n        }\n      },\n      legend: {\n        show: false\n      }\n    });\n  }\n\n  function labelFormatter(label, series) {\n    return \"<div style='font-size:8pt; text-align:center; padding:2px; color:white;'>\" + label + \"<br/>\" + Math.round(series.percent) + \"%</div>\";\n  }\n\n\n  /*---------------------\n   ----- LINE CHART -----\n   ---------------------*/\n\n  var d1 = [\n    [0, 30],\n    [1, 35],\n    [2, 35],\n    [3, 30],\n    [4, 30]\n  ];\n  var d2 = [\n    [0, 50],\n    [1, 40],\n    [2, 45],\n    [3, 60],\n    [4, 50]\n  ];\n  var d3 = [\n    [0, 40],\n    [1, 50],\n    [2, 35],\n    [3, 25],\n    [4, 40]\n  ];\n\n  var stackedData = [{\n      data: d1,\n      color: \"#76C1FA\"\n    },\n    {\n      data: d2,\n      color: \"#63CF72\"\n    },\n    {\n      data: d3,\n      color: \"#F36368\"\n    }\n  ];\n  /*---------------------------------------------------\n      Make some random data for Recent Items chart\n  ---------------------------------------------------*/\n\n\n  var options = {\n    series: {\n      shadowSize: 0,\n      lines: {\n        show: true,\n      },\n    },\n    grid: {\n      borderWidth: 1,\n      labelMargin: 10,\n      mouseActiveRadius: 6,\n      borderColor: '#eee',\n      show: true,\n      hoverable: true,\n      clickable: true\n\n    },\n    xaxis: {\n      tickColor: '#eee',\n      tickDecimals: 0,\n      font: {\n        lineHeight: 15,\n        style: \"normal\",\n        color: \"rgb(84, 84, 84)\"\n      },\n      shadowSize: 0,\n      ticks: [\n        [0, \"Jan\"],\n        [1, \"Feb\"],\n        [2, \"Mar\"],\n        [3, \"Apr\"],\n        [4, \"May\"],\n        [5, \"Jun\"],\n        [6, \"Jul\"],\n        [7, \"Aug\"],\n        [8, \"Sep\"],\n        [9, \"Oct\"],\n        [10, \"Nov\"],\n        [11, \"Dec\"]\n      ]\n    },\n\n    yaxis: {\n      tickColor: '#eee',\n      tickDecimals: 0,\n      font: {\n        lineHeight: 15,\n        style: \"normal\",\n        color: \"rgb(84, 84, 84)\"\n      },\n      shadowSize: 0\n    },\n\n    legend: {\n      container: '.flc-line',\n      backgroundOpacity: 0.5,\n      noColumns: 0,\n      backgroundColor: \"white\",\n      lineWidth: 0\n    },\n    colors: [\"#F36368\", \"#63CF72\", \"#68B3C8\"]\n  };\n\n\n  if ($(\"#line-chart\").length) {\n    $.plot($(\"#line-chart\"), [{\n        data: d1,\n        lines: {\n          show: true\n        },\n        label: 'Product A',\n        stack: true,\n        color: '#F36368',\n      },\n      {\n        data: d2,\n        lines: {\n          show: true\n        },\n        label: 'Product B',\n        stack: true,\n        color: '#FABA66'\n      },\n      {\n        data: d3,\n        lines: {\n          show: true\n        },\n        label: 'Product C',\n        stack: true,\n        color: '#68B3C8'\n      }\n    ], options );\n  }\n\n\n\n\n  /*---------------------------------\n      Tooltips for Flot Charts\n  ---------------------------------*/\n  if ($(\".flot-chart-line\").length) {\n    $(\".flot-chart-line\").bind(\"plothover\", function(event, pos, item) {\n      if (item) {\n        var x = item.datapoint[0].toFixed(2),\n          y = item.datapoint[1].toFixed(2);\n        $(\".flot-tooltip\").html(item.series.label + \" Sales \" + \" : \" + y).css({\n          top: item.pageY + 5,\n          left: item.pageX + 5\n        }).show();\n      } else {\n        $(\".flot-tooltip\").hide();\n      }\n    });\n\n    $(\"<div class='flot-tooltip' class='chart-tooltip'></div>\").appendTo(\"body\");\n  }\n\n\n\n\n  /*---------------------\n   ----- AREA CHART -----\n   ---------------------*/\n\n\n  var d1 = [\n    [0, 0],\n    [1, 35],\n    [2, 35],\n    [3, 30],\n    [4, 30],\n    [5, 5],\n    [6, 32],\n    [7, 37],\n    [8, 30],\n    [9, 35],\n    [10, 30],\n    [11, 5]\n  ];\n\n\n  var options = {\n    series: {\n      shadowSize: 0,\n      curvedLines: { //This is a third party plugin to make curved lines\n        apply: true,\n        active: true,\n        monotonicFit: true\n      },\n      lines: {\n        show: false,\n        fill: 0.98,\n        lineWidth: 0,\n      },\n    },\n    grid: {\n      borderWidth: 0,\n      labelMargin: 10,\n      hoverable: true,\n      clickable: true,\n      mouseActiveRadius: 6,\n\n    },\n    xaxis: {\n      tickDecimals: 0,\n      tickLength: 0\n    },\n\n    yaxis: {\n      tickDecimals: 0,\n      tickLength: 0\n    },\n\n    legend: {\n      show: false\n    }\n  };\n\n  var curvedLineOptions = {\n    series: {\n      shadowSize: 0,\n      curvedLines: { //This is a third party plugin to make curved lines\n        apply: true,\n        active: true,\n        monotonicFit: true\n      },\n      lines: {\n        show: false,\n        lineWidth: 0,\n      },\n    },\n    grid: {\n      borderWidth: 0,\n      labelMargin: 10,\n      hoverable: true,\n      clickable: true,\n      mouseActiveRadius: 6,\n\n    },\n    xaxis: {\n      tickDecimals: 0,\n      ticks: false\n    },\n\n    yaxis: {\n      tickDecimals: 0,\n      ticks: false\n    },\n\n    legend: {\n      noColumns: 4,\n      container: $(\"#chartLegend\")\n    }\n  };\n\n  if ($(\"#area-chart\").length) {\n    $.plot($(\"#area-chart\"), [{\n      data: d1,\n      lines: {\n        show: true,\n        fill: 0.6\n      },\n      label: 'Product 1',\n      stack: true,\n      color: '#76C1FA'\n    }], options);\n  }\n\n\n\n\n  /*---------------------\n   ----- COLUMN CHART -----\n   ---------------------*/\n\n  $(function() {\n\n    var data = [\n      [\"January\", 10],\n      [\"February\", 8],\n      [\"March\", 4],\n      [\"April\", 13],\n      [\"May\", 17],\n      [\"June\", 9]\n    ];\n\n    if ($(\"#column-chart\").length) {\n      $.plot(\"#column-chart\", [data], {\n        series: {\n          bars: {\n            show: true,\n            barWidth: 0.6,\n            align: \"center\"\n          }\n        },\n        xaxis: {\n          mode: \"categories\",\n          tickLength: 0\n        },\n\n        grid: {\n          borderWidth: 0,\n          labelMargin: 10,\n          hoverable: true,\n          clickable: true,\n          mouseActiveRadius: 6,\n        }\n\n      });\n    }\n  });\n\n\n\n  /*--------------------------------\n   ----- STACKED CHART -----\n   --------------------------------*/\n\n  $(function() {\n\n    var d1 = [];\n    for (var i = 0; i <= 10; i += 1) {\n      d1.push([i, parseInt(Math.random() * 30)]);\n    }\n\n    var d2 = [];\n    for (var i = 0; i <= 10; i += 1) {\n      d2.push([i, parseInt(Math.random() * 30)]);\n    }\n\n    var d3 = [];\n    for (var i = 0; i <= 10; i += 1) {\n      d3.push([i, parseInt(Math.random() * 30)]);\n    }\n\n    if ($(\"#stacked-bar-chart\").length) {\n      $.plot(\"#stacked-bar-chart\", stackedData, {\n        series: {\n          stack: 0,\n          lines: {\n            show: false,\n            fill: true,\n            steps: false\n          },\n          bars: {\n            show: true,\n            fill: true,\n            barWidth: 0.6\n          },\n        },\n        grid: {\n          borderWidth: 0,\n          labelMargin: 10,\n          hoverable: true,\n          clickable: true,\n          mouseActiveRadius: 6,\n        }\n      });\n    }\n  });\n\n  /*--------------------------------\n   ----- REALTIME CHART -----\n   --------------------------------*/\n  $(function() {\n\n    // We use an inline data source in the example, usually data would\n    // be fetched from a server\n\n    var data = [],\n      totalPoints = 300;\n\n    function getRandomData() {\n\n      if (data.length > 0)\n        data = data.slice(1);\n\n      // Do a random walk\n\n      while (data.length < totalPoints) {\n\n        var prev = data.length > 0 ? data[data.length - 1] : 50,\n          y = prev + Math.random() * 10 - 5;\n\n        if (y < 0) {\n          y = 0;\n        } else if (y > 100) {\n          y = 100;\n        }\n\n        data.push(y);\n      }\n\n      // Zip the generated y values with the x values\n\n      var res = [];\n      for (var i = 0; i < data.length; ++i) {\n        res.push([i, data[i]])\n      }\n\n      return res;\n    }\n\n    // Set up the control widget\n\n    var updateInterval = 30;\n    if ($(\"#realtime-chart\").length) {\n      var plot = $.plot(\"#realtime-chart\", [getRandomData()], {\n        series: {\n          shadowSize: 0 // Drawing is faster without shadows\n        },\n        yaxis: {\n          min: 0,\n          max: 100\n        },\n        xaxis: {\n          show: false\n        },\n        grid: {\n          borderWidth: 0,\n          labelMargin: 10,\n          hoverable: true,\n          clickable: true,\n          mouseActiveRadius: 6,\n        }\n\n      });\n\n      function update() {\n\n        plot.setData([getRandomData()]);\n\n        // Since the axes don't change, we don't need to call plot.setupGrid()\n\n        plot.draw();\n        setTimeout(update, updateInterval);\n      }\n\n      update();\n    }\n\n  });\n  /*--------------------------------\n   ----- CURVED LINE CHART -----\n   --------------------------------*/\n\n  $(function() {\n\n    var d1 = [\n      [0, 6],\n      [1, 14],\n      [2, 10],\n      [3, 14],\n      [4, 5]\n    ];\n    var d2 = [\n      [0, 6],\n      [1, 7],\n      [2, 11],\n      [3, 8],\n      [4, 11]\n    ];\n    var d3 = [\n      [0, 6],\n      [1, 5],\n      [2, 6],\n      [3, 10],\n      [4, 5]\n    ];\n\n    if ($(\"#curved-line-chart\").length) {\n      $.plot($(\"#curved-line-chart\"), [{\n          data: d1,\n          lines: {\n            show: true,\n            fill: 0.98\n          },\n          label: 'Plans',\n          stack: true,\n          color: '#5E50F9'\n        },\n        {\n          data: d2,\n          lines: {\n            show: true,\n            fill: 0.98\n          },\n          label: 'Purchase',\n          stack: true,\n          color: '#8C95FC'\n        },\n        {\n          data: d3,\n          lines: {\n            show: true,\n            fill: 0.98\n          },\n          label: 'Services',\n          stack: true,\n          color: '#A8B4FD'\n        }\n      ], curvedLineOptions);\n    }\n\n  });\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/form-addons.js",
    "content": "(function($) {\n  'use strict';\n\n  // Jquery Tag Input Starts\n  $('#tags').tagsInput({\n    'width': '100%',\n    'height': '75%',\n    'interactive': true,\n    'defaultText': 'Add More',\n    'removeWithBackspace': true,\n    'minChars': 0,\n    'maxChars': 20, // if not provided there is no limit\n    'placeholderColor': '#666666'\n  });\n\n  // Jquery Tag Input Ends\n  // Jquery Bar Rating Starts\n\n  $(function() {\n    function ratingEnable() {\n      $('#example-1to10').barrating('show', {\n        theme: 'bars-1to10'\n      });\n\n      $('#example-movie').barrating('show', {\n        theme: 'bars-movie'\n      });\n\n      $('#example-movie').barrating('set', 'Mediocre');\n\n      $('#example-square').barrating('show', {\n        theme: 'bars-square',\n        showValues: true,\n        showSelectedRating: false\n      });\n\n      $('#example-pill').barrating('show', {\n        theme: 'bars-pill',\n        initialRating: 'A',\n        showValues: true,\n        showSelectedRating: false,\n        allowEmpty: true,\n        emptyValue: '-- no rating selected --',\n        onSelect: function(value, text) {\n          alert('Selected rating: ' + value);\n        }\n      });\n\n      $('#example-reversed').barrating('show', {\n        theme: 'bars-reversed',\n        showSelectedRating: true,\n        reverse: true\n      });\n\n      $('#example-horizontal').barrating('show', {\n        theme: 'bars-horizontal',\n        reverse: true,\n        hoverState: false\n      });\n\n      $('#example-fontawesome').barrating({\n        theme: 'fontawesome-stars',\n        showSelectedRating: false\n      });\n\n      $('#example-css').barrating({\n        theme: 'css-stars',\n        showSelectedRating: false\n      });\n\n      $('#example-bootstrap').barrating({\n        theme: 'bootstrap-stars',\n        showSelectedRating: false\n      });\n\n      var currentRating = $('#example-fontawesome-o').data('current-rating');\n\n      $('.stars-example-fontawesome-o .current-rating')\n        .find('span')\n        .html(currentRating);\n\n      $('.stars-example-fontawesome-o .clear-rating').on('click', function(event) {\n        event.preventDefault();\n\n        $('#example-fontawesome-o')\n          .barrating('clear');\n      });\n\n      $('#example-fontawesome-o').barrating({\n        theme: 'fontawesome-stars-o',\n        showSelectedRating: false,\n        initialRating: currentRating,\n        onSelect: function(value, text) {\n          if (!value) {\n            $('#example-fontawesome-o')\n              .barrating('clear');\n          } else {\n            $('.stars-example-fontawesome-o .current-rating')\n              .addClass('hidden');\n\n            $('.stars-example-fontawesome-o .your-rating')\n              .removeClass('hidden')\n              .find('span')\n              .html(value);\n          }\n        },\n        onClear: function(value, text) {\n          $('.stars-example-fontawesome-o')\n            .find('.current-rating')\n            .removeClass('hidden')\n            .end()\n            .find('.your-rating')\n            .addClass('hidden');\n        }\n      });\n    }\n\n    function ratingDisable() {\n      $('select').barrating('destroy');\n    }\n\n    $('.rating-enable').click(function(event) {\n      event.preventDefault();\n\n      ratingEnable();\n\n      $(this).addClass('deactivated');\n      $('.rating-disable').removeClass('deactivated');\n    });\n\n    $('.rating-disable').click(function(event) {\n      event.preventDefault();\n\n      ratingDisable();\n\n      $(this).addClass('deactivated');\n      $('.rating-enable').removeClass('deactivated');\n    });\n\n    ratingEnable();\n  });\n\n\n  // Jquery Bar Rating Ends\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/form-repeater.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $('.repeater').repeater({\n      // (Optional)\n      // \"defaultValues\" sets the values of added items.  The keys of\n      // defaultValues refer to the value of the input's name attribute.\n      // If a default value is not specified for an input, then it will\n      // have its value cleared.\n      defaultValues: {\n        'text-input': 'foo'\n      },\n      // (Optional)\n      // \"show\" is called just after an item is added.  The item is hidden\n      // at this point.  If a show callback is not given the item will\n      // have $(this).show() called on it.\n      show: function() {\n        $(this).slideDown();\n      },\n      // (Optional)\n      // \"hide\" is called when a user clicks on a data-repeater-delete\n      // element.  The item is still visible.  \"hide\" is passed a function\n      // as its first argument which will properly remove the item.\n      // \"hide\" allows for a confirmation step, to send a delete request\n      // to the server, etc.  If a hide callback is not given the item\n      // will be deleted.\n      hide: function(deleteElement) {\n        if (confirm('Are you sure you want to delete this element?')) {\n          $(this).slideUp(deleteElement);\n        }\n      },\n      // (Optional)\n      // Removes the delete button from the first list item,\n      // defaults to false.\n      isFirstItemUndeletable: true\n    })\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/form-validation.js",
    "content": "(function($) {\n  'use strict';\n  $.validator.setDefaults({\n    submitHandler: function() {\n      alert(\"submitted!\");\n    }\n  });\n  $(function() {\n    // validate the comment form when it is submitted\n    $(\"#commentForm\").validate({\n      errorPlacement: function(label, element) {\n        label.addClass('mt-2 text-danger');\n        label.insertAfter(element);\n      },\n      highlight: function(element, errorClass) {\n        $(element).parent().addClass('has-danger')\n        $(element).addClass('form-control-danger')\n      }\n    });\n    // validate signup form on keyup and submit\n    $(\"#signupForm\").validate({\n      rules: {\n        firstname: \"required\",\n        lastname: \"required\",\n        username: {\n          required: true,\n          minlength: 2\n        },\n        password: {\n          required: true,\n          minlength: 5\n        },\n        confirm_password: {\n          required: true,\n          minlength: 5,\n          equalTo: \"#password\"\n        },\n        email: {\n          required: true,\n          email: true\n        },\n        topic: {\n          required: \"#newsletter:checked\",\n          minlength: 2\n        },\n        agree: \"required\"\n      },\n      messages: {\n        firstname: \"Please enter your firstname\",\n        lastname: \"Please enter your lastname\",\n        username: {\n          required: \"Please enter a username\",\n          minlength: \"Your username must consist of at least 2 characters\"\n        },\n        password: {\n          required: \"Please provide a password\",\n          minlength: \"Your password must be at least 5 characters long\"\n        },\n        confirm_password: {\n          required: \"Please provide a password\",\n          minlength: \"Your password must be at least 5 characters long\",\n          equalTo: \"Please enter the same password as above\"\n        },\n        email: \"Please enter a valid email address\",\n        agree: \"Please accept our policy\",\n        topic: \"Please select at least 2 topics\"\n      },\n      errorPlacement: function(label, element) {\n        label.addClass('mt-2 text-danger');\n        label.insertAfter(element);\n      },\n      highlight: function(element, errorClass) {\n        $(element).parent().addClass('has-danger')\n        $(element).addClass('form-control-danger')\n      }\n    });\n    // propose username by combining first- and lastname\n    $(\"#username\").focus(function() {\n      var firstname = $(\"#firstname\").val();\n      var lastname = $(\"#lastname\").val();\n      if (firstname && lastname && !this.value) {\n        this.value = firstname + \".\" + lastname;\n      }\n    });\n    //code to hide topic selection, disable for demo\n    var newsletter = $(\"#newsletter\");\n    // newsletter topics are optional, hide at first\n    var inital = newsletter.is(\":checked\");\n    var topics = $(\"#newsletter_topics\")[inital ? \"removeClass\" : \"addClass\"](\"gray\");\n    var topicInputs = topics.find(\"input\").attr(\"disabled\", !inital);\n    // show when newsletter is checked\n    newsletter.on(\"click\", function() {\n      topics[this.checked ? \"removeClass\" : \"addClass\"](\"gray\");\n      topicInputs.attr(\"disabled\", !this.checked);\n    });\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/formpickers.js",
    "content": "(function($) {\n  'use strict';\n  if ($(\"#timepicker-example\").length) {\n    $('#timepicker-example').datetimepicker({\n      format: 'LT'\n    });\n  }\n  if ($(\".color-picker\").length) {\n    $('.color-picker').asColorPicker();\n  }\n  if ($(\"#datepicker-popup\").length) {\n    $('#datepicker-popup').datepicker({\n      enableOnReadonly: true,\n      todayHighlight: true,\n    });\n  }\n  if ($(\"#inline-datepicker\").length) {\n    $('#inline-datepicker').datepicker({\n      enableOnReadonly: true,\n      todayHighlight: true,\n    });\n  }\n  if ($(\".datepicker-autoclose\").length) {\n    $('.datepicker-autoclose').datepicker({\n      autoclose: true\n    });\n  }\n  if($('.input-daterange').length) {\n    $('.input-daterange input').each(function() {\n      $(this).datepicker('clearDates');\n    });\n    $('.input-daterange').datepicker({});\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/google-charts.js",
    "content": "// Region Charts Starts\n\ngoogle.charts.load('current', {\n  'packages': ['geochart'],\n  // Note: you will need to get a mapsApiKey for your project.\n  // See: https://developers.google.com/chart/interactive/docs/basic_load_libs#load-settings\n  'mapsApiKey': 'AIzaSyD-9tSrke72PouQMnMX-a7eZSW0jkFMBWY'\n});\ngoogle.charts.setOnLoadCallback(drawRegionsMap);\n\nfunction drawRegionsMap() {\n  var data = google.visualization.arrayToDataTable([\n    ['Country', 'Popularity'],\n    ['Germany', 200],\n    ['United States', 300],\n    ['Brazil', 400],\n    ['Canada', 500],\n    ['France', 600],\n    ['RU', 700]\n  ]);\n\n  var options = {\n    colorAxis: {\n      colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66']\n    }\n  };\n  var chart = new google.visualization.GeoChart(document.getElementById('regions-chart'));\n\n  chart.draw(data, options);\n}\n\n// Region Charts Ends\n\n\n// Bar Charts Starts\n\ngoogle.charts.load('current', {\n  'packages': ['bar']\n});\ngoogle.charts.setOnLoadCallback(drawStuff);\n\nfunction drawStuff() {\n  var data = new google.visualization.arrayToDataTable([\n    ['Opening Move', 'Percentage'],\n    [\"King's pawn (e4)\", 44],\n    [\"Queen's pawn (d4)\", 31],\n    [\"Knight to King 3 (Nf3)\", 12],\n    [\"Queen's bishop pawn (c4)\", 10],\n    ['Other', 3]\n  ]);\n\n  var options = {\n    title: 'Approximating Normal Distribution',\n    legend: {\n      position: 'none'\n    },\n    colors: ['#76C1FA'],\n\n    chartArea: {\n      width: 401\n    },\n    hAxis: {\n      ticks: [-1, -0.75, -0.5, -0.25, 0, 0.25, 0.5, 0.75, 1]\n    },\n    bar: {\n      gap: 0\n    },\n\n    histogram: {\n      bucketSize: 0.02,\n      maxNumBuckets: 200,\n      minValue: -1,\n      maxValue: 1\n    }\n  };\n\n  var chart = new google.charts.Bar(document.getElementById('Bar-chart'));\n  chart.draw(data, options);\n};\n\n\n// Bar Charts Ends\n\n\n// Histogram Charts Starts\n(function($) {\n\n  google.charts.load(\"current\", {\n    packages: [\"corechart\"]\n  });\n  google.charts.setOnLoadCallback(drawChart);\n\n  function drawChart() {\n    var data = google.visualization.arrayToDataTable([\n      ['Quarks', 'Leptons', 'Gauge Bosons', 'Scalar Bosons'],\n      [2 / 3, -1, 0, 0],\n      [2 / 3, -1, 0, null],\n      [2 / 3, -1, 0, null],\n      [-1 / 3, 0, 1, null],\n      [-1 / 3, 0, -1, null],\n      [-1 / 3, 0, null, null],\n      [-1 / 3, 0, null, null]\n    ]);\n\n    var options = {\n      title: 'Charges of subatomic particles',\n      legend: {\n        position: 'top',\n        maxLines: 2\n      },\n      colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'],\n      interpolateNulls: false,\n      chartArea: {\n        width: 401\n      },\n    };\n\n    var chart = new google.visualization.Histogram(document.getElementById('Histogram-chart'));\n    chart.draw(data, options);\n  }\n\n})(jQuery);\n\n// Histogram Charts Ends\n\n\n// Area Chart Starts\n(function($) {\n\n  google.charts.load('current', {\n    'packages': ['corechart']\n  });\n  google.charts.setOnLoadCallback(drawChart);\n\n  function drawChart() {\n    var data = google.visualization.arrayToDataTable([\n      ['Year', 'Sales', 'Expenses'],\n      ['2013', 1000, 400],\n      ['2014', 1170, 460],\n      ['2015', 660, 1120],\n      ['2016', 1030, 540]\n    ]);\n\n    var options = {\n      title: 'Company Performance',\n      hAxis: {\n        title: 'Year',\n        titleTextStyle: {\n          color: '#333'\n        }\n      },\n      colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'],\n      chartArea: {\n        width: 500\n      },\n      vAxis: {\n        minValue: 0\n      }\n    };\n\n    var AreaChart = new google.visualization.AreaChart(document.getElementById('area-chart'));\n    AreaChart.draw(data, options);\n  }\n\n})(jQuery);\n// Area Chart Ends\n\n\n\n// Donut Chart Starts\n\ngoogle.charts.load(\"current\", {\n  packages: [\"corechart\"]\n});\ngoogle.charts.setOnLoadCallback(drawChart);\n\nfunction drawChart() {\n  var data = google.visualization.arrayToDataTable([\n    ['Task', 'Hours per Day'],\n    ['Work', 11],\n    ['Eat', 2],\n    ['Commute', 2],\n    ['Watch TV', 2],\n    ['Sleep', 7]\n  ]);\n\n  var options = {\n    title: 'My Daily Activities',\n    pieHole: 0.4,\n    colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'],\n    chartArea: {\n      width: 500\n    },\n  };\n\n  var Donutchart = new google.visualization.PieChart(document.getElementById('Donut-chart'));\n  Donutchart.draw(data, options);\n}\n\n\n// Donut Chart Ends\n\n\n// Curve Chart Starts\n(function($) {\n\n  google.charts.load('current', {\n    'packages': ['corechart']\n  });\n  google.charts.setOnLoadCallback(drawChart);\n\n  function drawChart() {\n    var data = google.visualization.arrayToDataTable([\n      ['Year', 'Sales', 'Expenses'],\n      ['2004', 1000, 400],\n      ['2005', 1170, 460],\n      ['2006', 660, 1120],\n      ['2007', 1030, 540]\n    ]);\n\n    var options = {\n      title: 'Company Performance',\n      curveType: 'function',\n      legend: {\n        position: 'bottom'\n      },\n      colors: ['#76C1FA', '#63CF72', '#F36368', '#FABA66'],\n      chartArea: {\n        width: 500\n      },\n    };\n\n    var chart = new google.visualization.LineChart(document.getElementById('curve_chart'));\n\n    chart.draw(data, options);\n  }\n\n\n\n\n})(jQuery);\n// Curve Chart Ends"
  },
  {
    "path": "BlackStone/assets/js/google-maps.js",
    "content": "'use strict';\n\nfunction initMap() {\n  //Map location\n  var MapLocation = {\n    lat: 40.6971494,\n    lng: -74.2598719\n  };\n\n  // Map Zooming\n  var MapZoom = 14;\n\n\n  // Basic Map\n  var MapWithMarker = new google.maps.Map(document.getElementById('map-with-marker'), {\n    zoom: MapZoom,\n    center: MapLocation\n  });\n  var marker_1 = new google.maps.Marker({\n    position: MapLocation,\n    map: MapWithMarker\n  });\n\n  // Basic map with cutom marker\n  var CutomMarker = new google.maps.Map(document.getElementById('cutom-marker'), {\n    zoom: MapZoom,\n    center: MapLocation\n  });\n  var iconBase = '../../images/file-icons/';\n  var marker_2 = new google.maps.Marker({\n    position: MapLocation,\n    map: CutomMarker,\n    icon: iconBase + 'flag.png'\n  });\n\n  // Map without controls\n  var MinimalMap = new google.maps.Map(document.getElementById('map-minimal'), {\n    zoom: MapZoom,\n    center: MapLocation,\n    disableDefaultUI: true\n  });\n  var marker_3 = new google.maps.Marker({\n    position: MapLocation,\n    map: MinimalMap\n  });\n\n  // Night Mode\n  var NightModeMap = new google.maps.Map(document.getElementById('night-mode-map'), {\n    zoom: MapZoom,\n    center: MapLocation,\n    styles: [{\n      \"featureType\": \"all\",\n      \"elementType\": \"all\",\n      \"stylers\": [{\n          \"saturation\": -100\n        },\n        {\n          \"gamma\": 0.5\n        }\n      ]\n    }]\n  });\n\n  // Apple Theme\n  var AppletThemeMap = new google.maps.Map(document.getElementById('apple-map-theme'), {\n    zoom: MapZoom,\n    center: MapLocation,\n    styles: [{\n        \"featureType\": \"landscape.man_made\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#f7f1df\"\n        }]\n      },\n      {\n        \"featureType\": \"landscape.natural\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#d0e3b4\"\n        }]\n      },\n      {\n        \"featureType\": \"landscape.natural.terrain\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"poi.business\",\n        \"elementType\": \"all\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"poi.medical\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#fbd3da\"\n        }]\n      },\n      {\n        \"featureType\": \"poi.park\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#bde6ab\"\n        }]\n      },\n      {\n        \"featureType\": \"road\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"road\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n          \"color\": \"#ffe15f\"\n        }]\n      },\n      {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [{\n          \"color\": \"#efd151\"\n        }]\n      },\n      {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n          \"color\": \"#ffffff\"\n        }]\n      },\n      {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n          \"color\": \"black\"\n        }]\n      },\n      {\n        \"featureType\": \"transit.station.airport\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n          \"color\": \"#cfb2db\"\n        }]\n      },\n      {\n        \"featureType\": \"water\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#a2daf2\"\n        }]\n      }\n    ]\n  });\n\n  // Nature Theme\n  var NatureThemeMap = new google.maps.Map(document.getElementById('nature-map-theme'), {\n    zoom: MapZoom,\n    center: MapLocation,\n    styles: [{\n        \"featureType\": \"landscape\",\n        \"stylers\": [{\n            \"hue\": \"#FFA800\"\n          },\n          {\n            \"saturation\": 0\n          },\n          {\n            \"lightness\": 0\n          },\n          {\n            \"gamma\": 1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.highway\",\n        \"stylers\": [{\n            \"hue\": \"#53FF00\"\n          },\n          {\n            \"saturation\": -73\n          },\n          {\n            \"lightness\": 40\n          },\n          {\n            \"gamma\": 1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.arterial\",\n        \"stylers\": [{\n            \"hue\": \"#FBFF00\"\n          },\n          {\n            \"saturation\": 0\n          },\n          {\n            \"lightness\": 0\n          },\n          {\n            \"gamma\": 1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.local\",\n        \"stylers\": [{\n            \"hue\": \"#00FFFD\"\n          },\n          {\n            \"saturation\": 0\n          },\n          {\n            \"lightness\": 30\n          },\n          {\n            \"gamma\": 1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"water\",\n        \"stylers\": [{\n            \"hue\": \"#00BFFF\"\n          },\n          {\n            \"saturation\": 6\n          },\n          {\n            \"lightness\": 8\n          },\n          {\n            \"gamma\": 1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"stylers\": [{\n            \"hue\": \"#679714\"\n          },\n          {\n            \"saturation\": 33.4\n          },\n          {\n            \"lightness\": -25.4\n          },\n          {\n            \"gamma\": 1\n          }\n        ]\n      }\n    ]\n  });\n\n  // Captor Theme\n  var CaptorThemeMap = new google.maps.Map(document.getElementById('captor-map-theme'), {\n    zoom: MapZoom,\n    center: MapLocation,\n    styles: [{\n        \"featureType\": \"water\",\n        \"stylers\": [{\n          \"color\": \"#0e171d\"\n        }]\n      },\n      {\n        \"featureType\": \"landscape\",\n        \"stylers\": [{\n          \"color\": \"#1e303d\"\n        }]\n      },\n      {\n        \"featureType\": \"road\",\n        \"stylers\": [{\n          \"color\": \"#1e303d\"\n        }]\n      },\n      {\n        \"featureType\": \"poi.park\",\n        \"stylers\": [{\n          \"color\": \"#1e303d\"\n        }]\n      },\n      {\n        \"featureType\": \"transit\",\n        \"stylers\": [{\n            \"color\": \"#182731\"\n          },\n          {\n            \"visibility\": \"simplified\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"elementType\": \"labels.icon\",\n        \"stylers\": [{\n            \"color\": \"#f0c514\"\n          },\n          {\n            \"visibility\": \"off\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"elementType\": \"labels.text.stroke\",\n        \"stylers\": [{\n            \"color\": \"#1e303d\"\n          },\n          {\n            \"visibility\": \"off\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"transit\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [{\n            \"color\": \"#e77e24\"\n          },\n          {\n            \"visibility\": \"off\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [{\n          \"color\": \"#94a5a6\"\n        }]\n      },\n      {\n        \"featureType\": \"administrative\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n            \"visibility\": \"simplified\"\n          },\n          {\n            \"color\": \"#e84c3c\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"stylers\": [{\n            \"color\": \"#e84c3c\"\n          },\n          {\n            \"visibility\": \"off\"\n          }\n        ]\n      }\n    ]\n  });\n\n  // Avagardo Theme\n  var AvagardoThemeMap = new google.maps.Map(document.getElementById('avocado-map-theme'), {\n    zoom: MapZoom,\n    center: MapLocation,\n    styles: [{\n        \"featureType\": \"water\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n            \"visibility\": \"on\"\n          },\n          {\n            \"color\": \"#aee2e0\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"landscape\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n          \"color\": \"#abce83\"\n        }]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n          \"color\": \"#769E72\"\n        }]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [{\n          \"color\": \"#7B8758\"\n        }]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"elementType\": \"labels.text.stroke\",\n        \"stylers\": [{\n          \"color\": \"#EBF4A4\"\n        }]\n      },\n      {\n        \"featureType\": \"poi.park\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n            \"visibility\": \"simplified\"\n          },\n          {\n            \"color\": \"#8dab68\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n          \"visibility\": \"simplified\"\n        }]\n      },\n      {\n        \"featureType\": \"road\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [{\n          \"color\": \"#5B5B3F\"\n        }]\n      },\n      {\n        \"featureType\": \"road\",\n        \"elementType\": \"labels.text.stroke\",\n        \"stylers\": [{\n          \"color\": \"#ABCE83\"\n        }]\n      },\n      {\n        \"featureType\": \"road\",\n        \"elementType\": \"labels.icon\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#A4C67D\"\n        }]\n      },\n      {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#9BBF72\"\n        }]\n      },\n      {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n          \"color\": \"#EBF4A4\"\n        }]\n      },\n      {\n        \"featureType\": \"transit\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"administrative\",\n        \"elementType\": \"geometry.stroke\",\n        \"stylers\": [{\n            \"visibility\": \"on\"\n          },\n          {\n            \"color\": \"#87ae79\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"administrative\",\n        \"elementType\": \"geometry.fill\",\n        \"stylers\": [{\n            \"color\": \"#7f2200\"\n          },\n          {\n            \"visibility\": \"off\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"administrative\",\n        \"elementType\": \"labels.text.stroke\",\n        \"stylers\": [{\n            \"color\": \"#ffffff\"\n          },\n          {\n            \"visibility\": \"on\"\n          },\n          {\n            \"weight\": 4.1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"administrative\",\n        \"elementType\": \"labels.text.fill\",\n        \"stylers\": [{\n          \"color\": \"#495421\"\n        }]\n      },\n      {\n        \"featureType\": \"administrative.neighborhood\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      }\n    ]\n  });\n\n  // Propia Theme\n  var PropiaThemeMap = new google.maps.Map(document.getElementById('propia-map-theme'), {\n    zoom: MapZoom,\n    center: MapLocation,\n    styles: [{\n        \"featureType\": \"landscape\",\n        \"stylers\": [{\n            \"visibility\": \"simplified\"\n          },\n          {\n            \"color\": \"#2b3f57\"\n          },\n          {\n            \"weight\": 0.1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"administrative\",\n        \"stylers\": [{\n            \"visibility\": \"on\"\n          },\n          {\n            \"hue\": \"#ff0000\"\n          },\n          {\n            \"weight\": 0.4\n          },\n          {\n            \"color\": \"#ffffff\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"labels.text\",\n        \"stylers\": [{\n            \"weight\": 1.3\n          },\n          {\n            \"color\": \"#FFFFFF\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n            \"color\": \"#f55f77\"\n          },\n          {\n            \"weight\": 3\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n            \"color\": \"#f55f77\"\n          },\n          {\n            \"weight\": 1.1\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"geometry\",\n        \"stylers\": [{\n            \"color\": \"#f55f77\"\n          },\n          {\n            \"weight\": 0.4\n          }\n        ]\n      },\n      {},\n      {\n        \"featureType\": \"road.highway\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n            \"weight\": 0.8\n          },\n          {\n            \"color\": \"#ffffff\"\n          },\n          {\n            \"visibility\": \"on\"\n          }\n        ]\n      },\n      {\n        \"featureType\": \"road.local\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"road.arterial\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n            \"color\": \"#ffffff\"\n          },\n          {\n            \"weight\": 0.7\n          }\n        ]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"elementType\": \"labels\",\n        \"stylers\": [{\n          \"visibility\": \"off\"\n        }]\n      },\n      {\n        \"featureType\": \"poi\",\n        \"stylers\": [{\n          \"color\": \"#6c5b7b\"\n        }]\n      },\n      {\n        \"featureType\": \"water\",\n        \"stylers\": [{\n          \"color\": \"#f3b191\"\n        }]\n      },\n      {\n        \"featureType\": \"transit.line\",\n        \"stylers\": [{\n          \"visibility\": \"on\"\n        }]\n      }\n    ]\n  });\n}"
  },
  {
    "path": "BlackStone/assets/js/hoverable-collapse.js",
    "content": "(function($) {\n  'use strict';\n  //Open submenu on hover in compact sidebar mode and horizontal menu mode\n  $(document).on('mouseenter mouseleave', '.sidebar .nav-item', function(ev) {\n    var body = $('body');\n    var sidebarIconOnly = body.hasClass(\"sidebar-icon-only\");\n    var sidebarFixed = body.hasClass(\"sidebar-fixed\");\n    if (!('ontouchstart' in document.documentElement)) {\n      if (sidebarIconOnly) {\n        if (sidebarFixed) {\n          if (ev.type === 'mouseenter') {\n            body.removeClass('sidebar-icon-only');\n          }\n        } else {\n          var $menuItem = $(this);\n          if (ev.type === 'mouseenter') {\n            $menuItem.addClass('hover-open')\n          } else {\n            $menuItem.removeClass('hover-open')\n          }\n        }\n      }\n    }\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/iCheck.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $('.icheck input').iCheck({\n      checkboxClass: 'icheckbox_minimal-blue',\n      radioClass: 'iradio_minimal',\n      increaseArea: '20%'\n    });\n    $('.icheck-square input').iCheck({\n      checkboxClass: 'icheckbox_square-blue',\n      radioClass: 'iradio_square',\n      increaseArea: '20%'\n    });\n    $('.icheck-flat input').iCheck({\n      checkboxClass: 'icheckbox_flat-blue',\n      radioClass: 'iradio_flat',\n      increaseArea: '20%'\n    });\n    var icheckLineArray = $('.icheck-line input');\n    for (var i = 0; i < icheckLineArray.length; i++) {\n      var self = $(icheckLineArray[i]);\n      var label = self.next();\n      var label_text = label.text();\n\n      label.remove();\n      self.iCheck({\n        checkboxClass: 'icheckbox_line-blue',\n        radioClass: 'iradio_line',\n        insert: '<div class=\"icheck_line-icon\"></div>' + label_text\n      });\n    }\n    $('.icheck-polaris input').iCheck({\n      checkboxClass: 'icheckbox_polaris',\n      radioClass: 'iradio_polaris',\n      increaseArea: '20%'\n    });\n    $('.icheck-futurico input').iCheck({\n      checkboxClass: 'icheckbox_futurico',\n      radioClass: 'iradio_futurico',\n      increaseArea: '20%'\n    });\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/inputmask.js",
    "content": "(function($) {\n  'use strict';\n\n  // initializing inputmask\n  $(\":input\").inputmask();\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/ion-range-slider.js",
    "content": "(function($) {\n  'use strict';\n\n  if ($('#range_01').length) {\n    $(\"#range_01\").ionRangeSlider();\n  }\n\n  if ($(\"#range_02\").length) {\n    $(\"#range_02\").ionRangeSlider({\n      min: 100,\n      max: 1000,\n      from: 550\n    });\n  }\n\n  if ($(\"#range_03\").length) {\n    $(\"#range_03\").ionRangeSlider({\n      type: \"double\",\n      grid: true,\n      min: 0,\n      max: 1000,\n      from: 200,\n      to: 800,\n      prefix: \"$\"\n    });\n  }\n\n  if ($(\"#range_04\").length) {\n    $(\"#range_04\").ionRangeSlider({\n      type: \"double\",\n      min: 100,\n      max: 200,\n      from: 145,\n      to: 155,\n      prefix: \"Weight: \",\n      postfix: \" million pounds\",\n      decorate_both: true\n    });\n  }\n\n  if ($(\"#range_05\").length) {\n    $(\"#range_05\").ionRangeSlider({\n      type: \"double\",\n      min: 1000,\n      max: 2000,\n      from: 1200,\n      to: 1800,\n      hide_min_max: true,\n      hide_from_to: true,\n      grid: false\n    });\n  }\n\n  if ($(\"#range_06\").length) {\n    $(\"#range_06\").ionRangeSlider({\n      type: \"double\",\n      min: 1000,\n      max: 2000,\n      from: 1200,\n      to: 1800,\n      hide_min_max: true,\n      hide_from_to: true,\n      grid: true\n    });\n  }\n\n  if ($(\"#range_07\").length) {\n    $(\"#range_07\").ionRangeSlider({\n      type: \"double\",\n      grid: true,\n      min: 0,\n      max: 10000,\n      from: 1000,\n      prefix: \"$\"\n    });\n  }\n\n  if ($(\"#range_08\").length) {\n    $(\"#range_08\").ionRangeSlider({\n      type: \"single\",\n      grid: true,\n      min: -90,\n      max: 90,\n      from: 0,\n      postfix: \"Â°\"\n    });\n  }\n\n  if ($(\"#range_09\").length) {\n    $(\"#range_09\").ionRangeSlider({\n      type: \"double\",\n      min: 0,\n      max: 10000,\n      grid: true\n    });\n  }\n\n  if ($(\"#range_10\").length) {\n    $(\"#range_10\").ionRangeSlider({\n      type: \"double\",\n      min: 0,\n      max: 10000,\n      grid: true,\n      grid_num: 10\n    });\n  }\n\n  if ($(\"#range_11\").length) {\n    $(\"#range_11\").ionRangeSlider({\n      type: \"double\",\n      min: 0,\n      max: 10000,\n      step: 500,\n      grid: true,\n      grid_snap: true\n    });\n  }\n\n  if ($(\"#range_12\").length) {\n    $(\"#range_12\").ionRangeSlider({\n      type: \"single\",\n      min: 0,\n      max: 10,\n      step: 2.34,\n      grid: true,\n      grid_snap: true\n    });\n  }\n\n  if ($(\"#range_13\").length) {\n    $(\"#range_13\").ionRangeSlider({\n      type: \"double\",\n      min: 0,\n      max: 100,\n      from: 30,\n      to: 70,\n      from_fixed: true\n    });\n  }\n\n  if ($(\"#range_14\").length) {\n    $(\"#range_14\").ionRangeSlider({\n      min: 0,\n      max: 100,\n      from: 30,\n      from_min: 10,\n      from_max: 50\n    });\n  }\n\n  if ($(\"#range_15\").length) {\n    $(\"#range_15\").ionRangeSlider({\n      min: 0,\n      max: 100,\n      from: 30,\n      from_min: 10,\n      from_max: 50,\n      from_shadow: true\n    });\n  }\n\n  if ($(\"#range_16\").length) {\n    $(\"#range_16\").ionRangeSlider({\n      type: \"double\",\n      min: 0,\n      max: 100,\n      from: 20,\n      from_min: 10,\n      from_max: 30,\n      from_shadow: true,\n      to: 80,\n      to_min: 70,\n      to_max: 90,\n      to_shadow: true,\n      grid: true,\n      grid_num: 10\n    });\n  }\n\n  if ($(\"#range_17\").length) {\n    $(\"#range_17\").ionRangeSlider({\n      min: 0,\n      max: 100,\n      from: 30,\n      disable: true\n    });\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/jq.tablesort.js",
    "content": "/*\n * jq.TableSort -- jQuery Table sorter Plug-in.\n *\n * Version 1.0.0.\n *\n * Copyright (c) 2017 Dmitry Zavodnikov.\n *\n * Licensed under the MIT License.\n */\n(function($) {\n  'use strict';\n  var SORT = 'sort';\n  var ASC = 'asc';\n  var DESC = 'desc';\n  var UNSORT = 'unsort';\n\n  var config = {\n    defaultColumn: 0,\n    defaultOrder: 'asc',\n    styles: {\n      'sort': 'sortStyle',\n      'asc': 'ascStyle',\n      'desc': 'descStyle',\n      'unsort': 'unsortStyle'\n    },\n    selector: function(tableBody, column) {\n      var groups = [];\n\n      var tableRows = $(tableBody).find('tr');\n      for (var i = 0; i < tableRows.length; i++) {\n        var td = $(tableRows[i]).find('td')[column];\n\n        groups.push({\n          'values': [tableRows[i]],\n          'key': $(td).text()\n        });\n      }\n      return groups;\n    },\n    comparator: function(group1, group2) {\n      return group1.key.localeCompare(group2.key);\n    }\n  };\n\n  function getTableHeaders(table) {\n    return $(table).find('thead > tr > th');\n  }\n\n  function getSortableTableHeaders(table) {\n    return getTableHeaders(table).filter(function(index) {\n      return $(this).hasClass(config.styles[SORT]);\n    });\n  }\n\n  function changeOrder(table, column) {\n    var sortedHeader = getTableHeaders(table).filter(function(index) {\n      return $(this).hasClass(config.styles[ASC]) || $(this).hasClass(config.styles[DESC]);\n    });\n\n    var sordOrder = config.defaultOrder;\n    if (sortedHeader.hasClass(config.styles[ASC])) {\n      sordOrder = ASC;\n    }\n    if (sortedHeader.hasClass(config.styles[DESC])) {\n      sordOrder = DESC;\n    }\n\n    var th = getTableHeaders(table)[column];\n\n    if (th === sortedHeader[0]) {\n      if (sordOrder === ASC) {\n        sordOrder = DESC;\n      } else {\n        sordOrder = ASC;\n      }\n    }\n\n    var headers = getSortableTableHeaders(table);\n    headers.removeClass(config.styles[ASC]);\n    headers.removeClass(config.styles[DESC]);\n    headers.addClass(config.styles[UNSORT]);\n\n    $(th).removeClass(config.styles[UNSORT]);\n    $(th).addClass(config.styles[sordOrder]);\n\n    var tbody = $(table).find('tbody')[0];\n    var groups = config.selector(tbody, column);\n\n    // Sorting.\n    groups.sort(function(a, b) {\n      var res = config.comparator(a, b);\n      return sordOrder === ASC ? res : -1 * res;\n    });\n\n    for (var i = 0; i < groups.length; i++) {\n      var trList = groups[i];\n      var trListValues = trList.values;\n      for (var j = 0; j < trListValues.length; j++) {\n        tbody.append(trListValues[j]);\n      }\n    }\n  }\n\n  $.fn.tablesort = function(userConfig) {\n    // Create and save table sort configuration.\n    $.extend(config, userConfig);\n\n    // Process all selected tables.\n    var selectedTables = this;\n    for (var i = 0; i < selectedTables.length; i++) {\n      var table = selectedTables[i];\n      var tableHeader = getSortableTableHeaders(table);\n      for (var j = 0; j < tableHeader.length; j++) {\n        var th = tableHeader[j];\n        $(th).on(\"click\", function(event) {\n          var clickColumn = $.inArray(event.currentTarget, getTableHeaders(table));\n          changeOrder(table, clickColumn);\n        });\n      }\n    }\n    return this;\n  };\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/jquery-file-upload.js",
    "content": "(function($) {\n  'use strict';\n  if ($(\"#fileuploader\").length) {\n    $(\"#fileuploader\").uploadFile({\n      url: \"YOUR_FILE_UPLOAD_URL\",\n      fileName: \"myfile\"\n    });\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/jquery.cookie.js",
    "content": "/*!\n * jQuery Cookie Plugin v1.4.1\n * https://github.com/carhartl/jquery-cookie\n *\n * Copyright 2013 Klaus Hartl\n * Released under the MIT license\n */\n(function (factory) {\n\tif (typeof define === 'function' && define.amd) {\n\t\t// AMD\n\t\tdefine(['jquery'], factory);\n\t} else if (typeof exports === 'object') {\n\t\t// CommonJS\n\t\tfactory(require('jquery'));\n\t} else {\n\t\t// Browser globals\n\t\tfactory(jQuery);\n\t}\n}(function ($) {\n\n\tvar pluses = /\\+/g;\n\n\tfunction encode(s) {\n\t\treturn config.raw ? s : encodeURIComponent(s);\n\t}\n\n\tfunction decode(s) {\n\t\treturn config.raw ? s : decodeURIComponent(s);\n\t}\n\n\tfunction stringifyCookieValue(value) {\n\t\treturn encode(config.json ? JSON.stringify(value) : String(value));\n\t}\n\n\tfunction parseCookieValue(s) {\n\t\tif (s.indexOf('\"') === 0) {\n\t\t\t// This is a quoted cookie as according to RFC2068, unescape...\n\t\t\ts = s.slice(1, -1).replace(/\\\\\"/g, '\"').replace(/\\\\\\\\/g, '\\\\');\n\t\t}\n\n\t\ttry {\n\t\t\t// Replace server-side written pluses with spaces.\n\t\t\t// If we can't decode the cookie, ignore it, it's unusable.\n\t\t\t// If we can't parse the cookie, ignore it, it's unusable.\n\t\t\ts = decodeURIComponent(s.replace(pluses, ' '));\n\t\t\treturn config.json ? JSON.parse(s) : s;\n\t\t} catch(e) {}\n\t}\n\n\tfunction read(s, converter) {\n\t\tvar value = config.raw ? s : parseCookieValue(s);\n\t\treturn $.isFunction(converter) ? converter(value) : value;\n\t}\n\n\tvar config = $.cookie = function (key, value, options) {\n\n\t\t// Write\n\n\t\tif (value !== undefined && !$.isFunction(value)) {\n\t\t\toptions = $.extend({}, config.defaults, options);\n\n\t\t\tif (typeof options.expires === 'number') {\n\t\t\t\tvar days = options.expires, t = options.expires = new Date();\n\t\t\t\tt.setTime(+t + days * 864e+5);\n\t\t\t}\n\n\t\t\treturn (document.cookie = [\n\t\t\t\tencode(key), '=', stringifyCookieValue(value),\n\t\t\t\toptions.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE\n\t\t\t\toptions.path    ? '; path=' + options.path : '',\n\t\t\t\toptions.domain  ? '; domain=' + options.domain : '',\n\t\t\t\toptions.secure  ? '; secure' : ''\n\t\t\t].join(''));\n\t\t}\n\n\t\t// Read\n\n\t\tvar result = key ? undefined : {};\n\n\t\t// To prevent the for loop in the first place assign an empty array\n\t\t// in case there are no cookies at all. Also prevents odd result when\n\t\t// calling $.cookie().\n\t\tvar cookies = document.cookie ? document.cookie.split('; ') : [];\n\n\t\tfor (var i = 0, l = cookies.length; i < l; i++) {\n\t\t\tvar parts = cookies[i].split('=');\n\t\t\tvar name = decode(parts.shift());\n\t\t\tvar cookie = parts.join('=');\n\n\t\t\tif (key && key === name) {\n\t\t\t\t// If second argument (value) is a function it's a converter...\n\t\t\t\tresult = read(cookie, value);\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Prevent storing a cookie that we couldn't decode.\n\t\t\tif (!key && (cookie = read(cookie)) !== undefined) {\n\t\t\t\tresult[name] = cookie;\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t};\n\n\tconfig.defaults = {};\n\n\t$.removeCookie = function (key, options) {\n\t\tif ($.cookie(key) === undefined) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Must not alter options, thus extending a fresh object...\n\t\t$.cookie(key, '', $.extend({}, options, { expires: -1 }));\n\t\treturn !$.cookie(key);\n\t};\n\n}));\n"
  },
  {
    "path": "BlackStone/assets/js/js-grid.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n\n    //basic config\n    if ($(\"#js-grid\").length) {\n      $(\"#js-grid\").jsGrid({\n        height: \"500px\",\n        width: \"100%\",\n        filtering: true,\n        editing: true,\n        inserting: true,\n        sorting: true,\n        paging: true,\n        autoload: true,\n        pageSize: 15,\n        pageButtonCount: 5,\n        deleteConfirm: \"Do you really want to delete the client?\",\n        data: db.clients,\n        fields: [{\n            name: \"Name\",\n            type: \"text\",\n            width: 150\n          },\n          {\n            name: \"Age\",\n            type: \"number\",\n            width: 50\n          },\n          {\n            name: \"Address\",\n            type: \"text\",\n            width: 200\n          },\n          {\n            name: \"Country\",\n            type: \"select\",\n            items: db.countries,\n            valueField: \"Id\",\n            textField: \"Name\"\n          },\n          {\n            name: \"Married\",\n            title: \"Is Married\",\n            itemTemplate: function(value, item) {\n              return $(\"<div>\")\n                .addClass(\"form-check mt-0\")\n                .append(\n                  $(\"<label>\").addClass(\"form-check-label\")\n                  .append(\n                    $(\"<input>\").attr(\"type\", \"checkbox\")\n                    .addClass(\"form-check-input\")\n                    .attr(\"checked\", value || item.Checked)\n                    .on(\"change\", function() {\n                      item.Checked = $(this).is(\":checked\");\n                    })\n                  )\n                  .append('<i class=\"input-helper\"></i>')\n                );\n            }\n          },\n          {\n            type: \"control\"\n          }\n        ]\n      });\n    }\n\n\n    //Static\n    if ($(\"#js-grid-static\").length) {\n      $(\"#js-grid-static\").jsGrid({\n        height: \"500px\",\n        width: \"100%\",\n\n        sorting: true,\n        paging: true,\n\n        data: db.clients,\n\n        fields: [{\n            name: \"Name\",\n            type: \"text\",\n            width: 150\n          },\n          {\n            name: \"Age\",\n            type: \"number\",\n            width: 50\n          },\n          {\n            name: \"Address\",\n            type: \"text\",\n            width: 200\n          },\n          {\n            name: \"Country\",\n            type: \"select\",\n            items: db.countries,\n            valueField: \"Id\",\n            textField: \"Name\"\n          },\n          {\n            name: \"Married\",\n            title: \"Is Married\",\n            itemTemplate: function(value, item) {\n              return $(\"<div>\")\n                .addClass(\"form-check mt-0\")\n                .append(\n                  $(\"<label>\").addClass(\"form-check-label\")\n                  .append(\n                    $(\"<input>\").attr(\"type\", \"checkbox\")\n                    .addClass(\"form-check-input\")\n                    .attr(\"checked\", value || item.Checked)\n                    .on(\"change\", function() {\n                      item.Checked = $(this).is(\":checked\");\n                    })\n                  )\n                  .append('<i class=\"input-helper\"></i>')\n                );\n            }\n          }\n        ]\n      });\n    }\n\n    //sortable\n    if ($(\"#js-grid-sortable\").length) {\n      $(\"#js-grid-sortable\").jsGrid({\n        height: \"500px\",\n        width: \"100%\",\n\n        autoload: true,\n        selecting: false,\n\n        controller: db,\n\n        fields: [{\n            name: \"Name\",\n            type: \"text\",\n            width: 150\n          },\n          {\n            name: \"Age\",\n            type: \"number\",\n            width: 50\n          },\n          {\n            name: \"Address\",\n            type: \"text\",\n            width: 200\n          },\n          {\n            name: \"Country\",\n            type: \"select\",\n            items: db.countries,\n            valueField: \"Id\",\n            textField: \"Name\"\n          },\n          {\n            name: \"Married\",\n            title: \"Is Married\",\n            itemTemplate: function(value, item) {\n              return $(\"<div>\")\n                .addClass(\"form-check mt-0\")\n                .append(\n                  $(\"<label>\").addClass(\"form-check-label\")\n                  .append(\n                    $(\"<input>\").attr(\"type\", \"checkbox\")\n                    .addClass(\"form-check-input\")\n                    .attr(\"checked\", value || item.Checked)\n                    .on(\"change\", function() {\n                      item.Checked = $(this).is(\":checked\");\n                    })\n                  )\n                  .append('<i class=\"input-helper\"></i>')\n                );\n            }\n          }\n        ]\n      });\n    }\n\n    if ($(\"#sort\").length) {\n      $(\"#sort\").on(\"click\", function() {\n        var field = $(\"#sortingField\").val();\n        $(\"#js-grid-sortable\").jsGrid(\"sort\", field);\n      });\n    }\n\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/just-gage.js",
    "content": "var g1, g2, gg1, g7, g8, g9, g10;\n\nwindow.onload = function() {\n  var g1 = new JustGage({\n    id: \"g1\",\n    value: getRandomInt(0, 100),\n    min: 0,\n    max: 100,\n    title: \"Big Fella\",\n    label: \"pounds\"\n  });\n\n\n  setInterval(function() {\n    g1.refresh(getRandomInt(50, 100));\n  }, 2500);\n};\n\n\n\n\ndocument.addEventListener(\"DOMContentLoaded\", function(event) {\n  g2 = new JustGage({\n    id: \"g2\",\n    value: 72,\n    min: 0,\n    max: 100,\n    donut: true,\n    gaugeWidthScale: 0.6,\n    counter: true,\n    hideInnerShadow: true\n  });\n\n  document.getElementById('g2_refresh').addEventListener('click', function() {\n    g2.refresh(getRandomInt(0, 100));\n  });\n\n  var g3 = new JustGage({\n    id: 'g3',\n    value: 65,\n    min: 0,\n    max: 100,\n    symbol: '%',\n    pointer: true,\n    gaugeWidthScale: 0.6,\n    customSectors: [{\n      color: '#ff0000',\n      lo: 50,\n      hi: 100\n    }, {\n      color: '#00ff00',\n      lo: 0,\n      hi: 50\n    }],\n    counter: true\n  });\n\n  var g4 = new JustGage({\n    id: 'g4',\n    value: 45,\n    min: 0,\n    max: 100,\n    symbol: '%',\n    pointer: true,\n    pointerOptions: {\n      toplength: -15,\n      bottomlength: 10,\n      bottomwidth: 12,\n      color: '#8e8e93',\n      stroke: '#ffffff',\n      stroke_width: 3,\n      stroke_linecap: 'round'\n    },\n    gaugeWidthScale: 0.6,\n    counter: true\n  });\n\n  var g5 = new JustGage({\n    id: 'g5',\n    value: 40,\n    min: 0,\n    max: 100,\n    symbol: '%',\n    donut: true,\n    pointer: true,\n    gaugeWidthScale: 0.4,\n    pointerOptions: {\n      toplength: 10,\n      bottomlength: 10,\n      bottomwidth: 8,\n      color: '#000'\n    },\n    customSectors: [{\n      color: \"#ff0000\",\n      lo: 50,\n      hi: 100\n    }, {\n      color: \"#00ff00\",\n      lo: 0,\n      hi: 50\n    }],\n    counter: true\n  });\n\n  var g6 = new JustGage({\n    id: 'g6',\n    value: 70,\n    min: 0,\n    max: 100,\n    symbol: '%',\n    pointer: true,\n    pointerOptions: {\n      toplength: 8,\n      bottomlength: -20,\n      bottomwidth: 6,\n      color: '#8e8e93'\n    },\n    gaugeWidthScale: 0.1,\n    counter: true\n  });\n\n  var g7 = new JustGage({\n    id: 'g7',\n    value: 65,\n    min: 0,\n    max: 100,\n    reverse: true,\n    gaugeWidthScale: 0.6,\n    customSectors: [{\n      color: '#ff0000',\n      lo: 50,\n      hi: 100\n    }, {\n      color: '#00ff00',\n      lo: 0,\n      hi: 50\n    }],\n    counter: true\n  });\n\n  var g8 = new JustGage({\n    id: 'g8',\n    value: 45,\n    min: 0,\n    max: 500,\n    reverse: true,\n    gaugeWidthScale: 0.6,\n    counter: true\n  });\n\n  var g9 = new JustGage({\n    id: 'g9',\n    value: 25000,\n    min: 0,\n    max: 100000,\n    humanFriendly: true,\n    reverse: true,\n    gaugeWidthScale: 1.3,\n    customSectors: [{\n      color: \"#ff0000\",\n      lo: 50000,\n      hi: 100000\n    }, {\n      color: \"#00ff00\",\n      lo: 0,\n      hi: 50000\n    }],\n    counter: true\n  });\n\n  var g10 = new JustGage({\n    id: 'g10',\n    value: 90,\n    min: 0,\n    max: 100,\n    symbol: '%',\n    reverse: true,\n    gaugeWidthScale: 0.1,\n    counter: true\n  });\n\n  document.getElementById('gauge_refresh').addEventListener('click', function() {\n    g3.refresh(getRandomInt(0, 100));\n    g4.refresh(getRandomInt(0, 100));\n    g5.refresh(getRandomInt(0, 100));\n    g6.refresh(getRandomInt(0, 100));\n    g7.refresh(getRandomInt(0, 100));\n    g8.refresh(getRandomInt(0, 100));\n    g9.refresh(getRandomInt(0, 100));\n    g10.refresh(getRandomInt(0, 100));\n  });\n\n});"
  },
  {
    "path": "BlackStone/assets/js/light-gallery.js",
    "content": "(function($) {\n  'use strict';\n  if ($(\"#lightgallery\").length) {\n    $(\"#lightgallery\").lightGallery();\n  }\n\n  if ($(\"#lightgallery-without-thumb\").length) {\n    $(\"#lightgallery-without-thumb\").lightGallery({\n      thumbnail: true,\n      animateThumb: false,\n      showThumbByDefault: false\n    });\n  }\n\n  if ($(\"#video-gallery\").length) {\n    $(\"#video-gallery\").lightGallery();\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/listify.js",
    "content": "  (function($) {\n    'use strict';\n    var options = {\n      valueNames: ['name', 'born']\n    };\n\n    var userList = new List('users', options);\n  })(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/mapael.js",
    "content": "$(function() {\n  'use strict';\n  if ($(\".mapael-container\").length) {\n    $(\".mapael-container\").mapael({\n      map: {\n        name: \"world_countries\"\n      }\n    });\n  }\n});"
  },
  {
    "path": "BlackStone/assets/js/mapael_example_1.js",
    "content": "$(function() {\n  'use strict';\n  if ($(\".mapael-example-1\").length) {\n    $(\".mapael-example-1\").mapael({\n      map: {\n        name: \"france_departments\",\n        defaultArea: {\n          attrsHover: {\n            fill: \"#343434\",\n            stroke: \"#5d5d5d\",\n            \"stroke-width\": 1,\n            \"stroke-linejoin\": \"round\"\n          }\n        }\n      },\n      legend: {\n        plot: {\n          cssClass: 'myLegend',\n          mode: 'horizontal',\n          labelAttrs: {\n            fill: \"#4a4a4a\"\n          },\n          titleAttrs: {\n            fill: \"#4a4a4a\"\n          },\n          marginBottom: 20,\n          marginLeft: 10,\n          hideElemsOnClick: {\n            opacity: 0\n          },\n          title: \"French cities population\",\n          slices: [{\n            size: 5,\n            type: \"circle\",\n            max: 20000,\n            attrs: {\n              fill: \"#89ff72\"\n            },\n            label: \"200 +\"\n          }, {\n            size: 15,\n            type: \"circle\",\n            min: 20000,\n            max: 100000,\n            attrs: {\n              fill: \"#fffd72\"\n            },\n            label: \"200 - 100\"\n          }, {\n            size: 20,\n            type: \"circle\",\n            min: 100000,\n            max: 200000,\n            attrs: {\n              fill: \"#ffbd54\"\n            },\n            label: \"100 - 200\"\n          }, {\n            size: 25,\n            type: \"circle\",\n            min: 200000,\n            attrs: {\n              fill: \"#ff5454\"\n            },\n            label: \"200 +\"\n          }]\n        }\n      },\n      plots: {\n        \"town-75056\": {\n          value: \"2268265\",\n          latitude: 48.86,\n          longitude: 2.3444444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Paris (75056)</span><br />Population : 2268265\"\n          }\n        },\n        \"town-13055\": {\n          value: \"859368\",\n          latitude: 43.296666666667,\n          longitude: 5.3763888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marseille (13055)</span><br />Population : 859368\"\n          }\n        },\n        \"town-69123\": {\n          value: \"492578\",\n          latitude: 45.758888888889,\n          longitude: 4.8413888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lyon (69123)</span><br />Population : 492578\"\n          }\n        },\n        \"town-31555\": {\n          value: \"449328\",\n          latitude: 43.604444444444,\n          longitude: 1.4419444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Toulouse (31555)</span><br />Population : 449328\"\n          }\n        },\n        \"town-06088\": {\n          value: \"347105\",\n          latitude: 43.701944444444,\n          longitude: 7.2683333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nice (06088)</span><br />Population : 347105\"\n          }\n        },\n        \"town-44109\": {\n          value: \"293234\",\n          latitude: 47.217222222222,\n          longitude: -1.5538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nantes (44109)</span><br />Population : 293234\"\n          }\n        },\n        \"town-67482\": {\n          value: \"276401\",\n          latitude: 48.583611111111,\n          longitude: 7.7480555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Strasbourg (67482)</span><br />Population : 276401\"\n          }\n        },\n        \"town-34172\": {\n          value: \"260572\",\n          latitude: 43.611111111111,\n          longitude: 3.8766666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montpellier (34172)</span><br />Population : 260572\"\n          }\n        },\n        \"town-33063\": {\n          value: \"242945\",\n          latitude: 44.837777777778,\n          longitude: -0.57944444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bordeaux (33063)</span><br />Population : 242945\"\n          }\n        },\n        \"town-59350\": {\n          value: \"234058\",\n          latitude: 50.631944444444,\n          longitude: 3.0575,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lille (59350)</span><br />Population : 234058\"\n          }\n        },\n        \"town-35238\": {\n          value: \"212939\",\n          latitude: 48.114166666667,\n          longitude: -1.6808333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rennes (35238)</span><br />Population : 212939\"\n          }\n        },\n        \"town-51454\": {\n          value: \"184011\",\n          latitude: 49.265277777778,\n          longitude: 4.0286111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Reims (51454)</span><br />Population : 184011\"\n          }\n        },\n        \"town-76351\": {\n          value: \"178070\",\n          latitude: 49.498888888889,\n          longitude: 0.12111111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Havre (76351)</span><br />Population : 178070\"\n          }\n        },\n        \"town-42218\": {\n          value: \"174566\",\n          latitude: 45.433888888889,\n          longitude: 4.3897222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Ã‰tienne (42218)</span><br />Population : 174566\"\n          }\n        },\n        \"town-83137\": {\n          value: \"166851\",\n          latitude: 43.125,\n          longitude: 5.9305555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Toulon (83137)</span><br />Population : 166851\"\n          }\n        },\n        \"town-38185\": {\n          value: \"158249\",\n          latitude: 45.186944444444,\n          longitude: 5.7263888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Grenoble (38185)</span><br />Population : 158249\"\n          }\n        },\n        \"town-21231\": {\n          value: \"155233\",\n          latitude: 47.323055555556,\n          longitude: 5.0419444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dijon (21231)</span><br />Population : 155233\"\n          }\n        },\n        \"town-49007\": {\n          value: \"151957\",\n          latitude: 47.472777777778,\n          longitude: -0.55555555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Angers (49007)</span><br />Population : 151957\"\n          }\n        },\n        \"town-72181\": {\n          value: \"147108\",\n          latitude: 48.004166666667,\n          longitude: 0.19694444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Mans (72181)</span><br />Population : 147108\"\n          }\n        },\n        \"town-69266\": {\n          value: \"146729\",\n          latitude: 45.766111111111,\n          longitude: 4.8794444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeurbanne (69266)</span><br />Population : 146729\"\n          }\n        },\n        \"town-97411\": {\n          value: \"146489\",\n          latitude: -20.878888888889,\n          longitude: 55.448055555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Denis (97411)</span><br />Population : 146489\"\n          }\n        },\n        \"town-29019\": {\n          value: \"145561\",\n          latitude: 48.39,\n          longitude: -4.4869444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Brest (29019)</span><br />Population : 145561\"\n          }\n        },\n        \"town-30189\": {\n          value: \"145501\",\n          latitude: 43.836944444444,\n          longitude: 4.36,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">NÃ®mes (30189)</span><br />Population : 145501\"\n          }\n        },\n        \"town-13001\": {\n          value: \"144884\",\n          latitude: 43.527777777778,\n          longitude: 5.4455555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aix-en-Provence (13001)</span><br />Population : 144884\"\n          }\n        },\n        \"town-63113\": {\n          value: \"143669\",\n          latitude: 45.779722222222,\n          longitude: 3.0869444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Clermont-Ferrand (63113)</span><br />Population : 143669\"\n          }\n        },\n        \"town-87085\": {\n          value: \"141540\",\n          latitude: 45.834444444444,\n          longitude: 1.2616666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Limoges (87085)</span><br />Population : 141540\"\n          }\n        },\n        \"town-37261\": {\n          value: \"138268\",\n          latitude: 47.392777777778,\n          longitude: 0.68833333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tours (37261)</span><br />Population : 138268\"\n          }\n        },\n        \"town-80021\": {\n          value: \"136512\",\n          latitude: 49.891944444444,\n          longitude: 2.2977777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Amiens (80021)</span><br />Population : 136512\"\n          }\n        },\n        \"town-57463\": {\n          value: \"122928\",\n          latitude: 49.119722222222,\n          longitude: 6.1769444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Metz (57463)</span><br />Population : 122928\"\n          }\n        },\n        \"town-25056\": {\n          value: \"121038\",\n          latitude: 47.242222222222,\n          longitude: 6.0213888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BesanÃ§on (25056)</span><br />Population : 121038\"\n          }\n        },\n        \"town-66136\": {\n          value: \"119536\",\n          latitude: 42.6975,\n          longitude: 2.8947222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Perpignan (66136)</span><br />Population : 119536\"\n          }\n        },\n        \"town-45234\": {\n          value: \"117833\",\n          latitude: 47.902222222222,\n          longitude: 1.9041666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">OrlÃ©ans (45234)</span><br />Population : 117833\"\n          }\n        },\n        \"town-92012\": {\n          value: \"115264\",\n          latitude: 48.835277777778,\n          longitude: 2.2413888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Boulogne-Billancourt (92012)</span><br />Population : 115264\"\n          }\n        },\n        \"town-76540\": {\n          value: \"113461\",\n          latitude: 49.443055555556,\n          longitude: 1.1025,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rouen (76540)</span><br />Population : 113461\"\n          }\n        },\n        \"town-14118\": {\n          value: \"111949\",\n          latitude: 49.182222222222,\n          longitude: -0.37055555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Caen (14118)</span><br />Population : 111949\"\n          }\n        },\n        \"town-68224\": {\n          value: \"111273\",\n          latitude: 47.748611111111,\n          longitude: 7.3391666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mulhouse (68224)</span><br />Population : 111273\"\n          }\n        },\n        \"town-93066\": {\n          value: \"107959\",\n          latitude: 48.935555555556,\n          longitude: 2.3538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Denis (93066)</span><br />Population : 107959\"\n          }\n        },\n        \"town-93066\": {\n          value: \"107959\",\n          latitude: 48.935555555556,\n          longitude: 2.3538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Denis (93066)</span><br />Population : 107959\"\n          }\n        },\n        \"town-54395\": {\n          value: \"107710\",\n          latitude: 48.692777777778,\n          longitude: 6.1836111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nancy (54395)</span><br />Population : 107710\"\n          }\n        },\n        \"town-95018\": {\n          value: \"104843\",\n          latitude: 48.947777777778,\n          longitude: 2.2475,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Argenteuil (95018)</span><br />Population : 104843\"\n          }\n        },\n        \"town-97415\": {\n          value: \"104818\",\n          latitude: -21.009722222222,\n          longitude: 55.269722222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Paul (97415)</span><br />Population : 104818\"\n          }\n        },\n        \"town-93048\": {\n          value: \"103675\",\n          latitude: 48.860277777778,\n          longitude: 2.4430555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montreuil (93048)</span><br />Population : 103675\"\n          }\n        },\n        \"town-59512\": {\n          value: \"95506\",\n          latitude: 50.689166666667,\n          longitude: 3.1808333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Roubaix (59512)</span><br />Population : 95506\"\n          }\n        },\n        \"town-59183\": {\n          value: \"93489\",\n          latitude: 51.037777777778,\n          longitude: 2.3763888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dunkerque (59183)</span><br />Population : 93489\"\n          }\n        },\n        \"town-59599\": {\n          value: \"92620\",\n          latitude: 50.7225,\n          longitude: 3.1602777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tourcoing (59599)</span><br />Population : 92620\"\n          }\n        },\n        \"town-84007\": {\n          value: \"91657\",\n          latitude: 43.948611111111,\n          longitude: 4.8083333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Avignon (84007)</span><br />Population : 91657\"\n          }\n        },\n        \"town-92050\": {\n          value: \"91114\",\n          latitude: 48.890555555556,\n          longitude: 2.2036111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nanterre (92050)</span><br />Population : 91114\"\n          }\n        },\n        \"town-94028\": {\n          value: \"90779\",\n          latitude: 48.790555555556,\n          longitude: 2.4619444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CrÃ©teil (94028)</span><br />Population : 90779\"\n          }\n        },\n        \"town-86194\": {\n          value: \"90386\",\n          latitude: 46.581111111111,\n          longitude: 0.33527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Poitiers (86194)</span><br />Population : 90386\"\n          }\n        },\n        \"town-97209\": {\n          value: \"88623\",\n          latitude: 14.607222222222,\n          longitude: -61.069444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fort-de-France (97209)</span><br />Population : 88623\"\n          }\n        },\n        \"town-78646\": {\n          value: \"88253\",\n          latitude: 48.804722222222,\n          longitude: 2.1341666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Versailles (78646)</span><br />Population : 88253\"\n          }\n        },\n        \"town-92026\": {\n          value: \"88169\",\n          latitude: 48.897222222222,\n          longitude: 2.2522222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Courbevoie (92026)</span><br />Population : 88169\"\n          }\n        },\n        \"town-94081\": {\n          value: \"86210\",\n          latitude: 48.7875,\n          longitude: 2.3927777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vitry-sur-Seine (94081)</span><br />Population : 86210\"\n          }\n        },\n        \"town-92025\": {\n          value: \"86094\",\n          latitude: 48.923611111111,\n          longitude: 2.2522222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Colombes (92025)</span><br />Population : 86094\"\n          }\n        },\n        \"town-92004\": {\n          value: \"82998\",\n          latitude: 48.911111111111,\n          longitude: 2.2855555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AsniÃ¨res-sur-Seine (92004)</span><br />Population : 82998\"\n          }\n        },\n        \"town-93005\": {\n          value: \"82778\",\n          latitude: 48.936388888889,\n          longitude: 2.4930555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aulnay-sous-Bois (93005)</span><br />Population : 82778\"\n          }\n        },\n        \"town-64445\": {\n          value: \"82776\",\n          latitude: 43.300833333333,\n          longitude: -0.37,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pau (64445)</span><br />Population : 82776\"\n          }\n        },\n        \"town-92063\": {\n          value: \"80905\",\n          latitude: 48.877777777778,\n          longitude: 2.1883333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rueil-Malmaison (92063)</span><br />Population : 80905\"\n          }\n        },\n        \"town-97416\": {\n          value: \"80027\",\n          latitude: -21.341944444444,\n          longitude: 55.477777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Pierre (97416)</span><br />Population : 80027\"\n          }\n        },\n        \"town-17300\": {\n          value: \"77875\",\n          latitude: 46.159444444444,\n          longitude: -1.1513888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Rochelle (17300)</span><br />Population : 77875\"\n          }\n        },\n        \"town-93001\": {\n          value: \"76728\",\n          latitude: 48.911111111111,\n          longitude: 2.3825,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aubervilliers (93001)</span><br />Population : 76728\"\n          }\n        },\n        \"town-94017\": {\n          value: \"76235\",\n          latitude: 48.817222222222,\n          longitude: 2.5155555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Champigny-sur-Marne (94017)</span><br />Population : 76235\"\n          }\n        },\n        \"town-94068\": {\n          value: \"75772\",\n          latitude: 48.798611111111,\n          longitude: 2.4988888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Maur-des-FossÃ©s (94068)</span><br />Population : 75772\"\n          }\n        },\n        \"town-06004\": {\n          value: \"75174\",\n          latitude: 43.58,\n          longitude: 7.1230555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Antibes (06004)</span><br />Population : 75174\"\n          }\n        },\n        \"town-62193\": {\n          value: \"74573\",\n          latitude: 50.9475,\n          longitude: 1.8555555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Calais (62193)</span><br />Population : 74573\"\n          }\n        },\n        \"town-06029\": {\n          value: \"74273\",\n          latitude: 43.5525,\n          longitude: 7.0213888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cannes (06029)</span><br />Population : 74273\"\n          }\n        },\n        \"town-97422\": {\n          value: \"74174\",\n          latitude: -21.278055555556,\n          longitude: 55.515277777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Tampon (97422)</span><br />Population : 74174\"\n          }\n        },\n        \"town-34032\": {\n          value: \"72466\",\n          latitude: 43.343333333333,\n          longitude: 3.2161111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BÃ©ziers (34032)</span><br />Population : 72466\"\n          }\n        },\n        \"town-44184\": {\n          value: \"69724\",\n          latitude: 47.279444444444,\n          longitude: -2.21,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Nazaire (44184)</span><br />Population : 69724\"\n          }\n        },\n        \"town-68066\": {\n          value: \"69187\",\n          latitude: 48.081111111111,\n          longitude: 7.355,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Colmar (68066)</span><br />Population : 69187\"\n          }\n        },\n        \"town-18033\": {\n          value: \"68590\",\n          latitude: 47.083611111111,\n          longitude: 2.3955555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bourges (18033)</span><br />Population : 68590\"\n          }\n        },\n        \"town-93029\": {\n          value: \"67202\",\n          latitude: 48.923333333333,\n          longitude: 2.445,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Drancy (93029)</span><br />Population : 67202\"\n          }\n        },\n        \"town-33281\": {\n          value: \"67136\",\n          latitude: 44.8425,\n          longitude: -0.645,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MÃ©rignac (33281)</span><br />Population : 67136\"\n          }\n        },\n        \"town-29232\": {\n          value: \"67131\",\n          latitude: 47.995833333333,\n          longitude: -4.0977777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Quimper (29232)</span><br />Population : 67131\"\n          }\n        },\n        \"town-2A004\": {\n          value: \"66203\",\n          latitude: 41.925555555556,\n          longitude: 8.7363888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ajaccio (2A004)</span><br />Population : 66203\"\n          }\n        },\n        \"town-92040\": {\n          value: \"65178\",\n          latitude: 48.823055555556,\n          longitude: 2.2691666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Issy-les-Moulineaux (92040)</span><br />Population : 65178\"\n          }\n        },\n        \"town-26362\": {\n          value: \"65043\",\n          latitude: 44.9325,\n          longitude: 4.8908333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Valence (26362)</span><br />Population : 65043\"\n          }\n        },\n        \"town-92044\": {\n          value: \"64757\",\n          latitude: 48.893333333333,\n          longitude: 2.2877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Levallois-Perret (92044)</span><br />Population : 64757\"\n          }\n        },\n        \"town-59009\": {\n          value: \"64328\",\n          latitude: 50.622777777778,\n          longitude: 3.1441666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeneuve-d'Ascq (59009)</span><br />Population : 64328\"\n          }\n        },\n        \"town-93051\": {\n          value: \"63526\",\n          latitude: 48.843888888889,\n          longitude: 2.5580555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Noisy-le-Grand (93051)</span><br />Population : 63526\"\n          }\n        },\n        \"town-83126\": {\n          value: \"62883\",\n          latitude: 43.103055555556,\n          longitude: 5.8783333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Seyne-sur-Mer (83126)</span><br />Population : 62883\"\n          }\n        },\n        \"town-92002\": {\n          value: \"62644\",\n          latitude: 48.753333333333,\n          longitude: 2.2966666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Antony (92002)</span><br />Population : 62644\"\n          }\n        },\n        \"town-92051\": {\n          value: \"62565\",\n          latitude: 48.887222222222,\n          longitude: 2.2675,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Neuilly-sur-Seine (92051)</span><br />Population : 62565\"\n          }\n        },\n        \"town-10387\": {\n          value: \"61936\",\n          latitude: 48.298888888889,\n          longitude: 4.0780555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Troyes (10387)</span><br />Population : 61936\"\n          }\n        },\n        \"town-69259\": {\n          value: \"60448\",\n          latitude: 45.696944444444,\n          longitude: 4.8858333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VÃ©nissieux (69259)</span><br />Population : 60448\"\n          }\n        },\n        \"town-79191\": {\n          value: \"59504\",\n          latitude: 46.325,\n          longitude: -0.46222222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Niort (79191)</span><br />Population : 59504\"\n          }\n        },\n        \"town-97101\": {\n          value: \"59267\",\n          latitude: 16.270555555556,\n          longitude: -61.504722222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Abymes (97101)</span><br />Population : 59267\"\n          }\n        },\n        \"town-92024\": {\n          value: \"59228\",\n          latitude: 48.903611111111,\n          longitude: 2.3055555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Clichy (92024)</span><br />Population : 59228\"\n          }\n        },\n        \"town-95585\": {\n          value: \"59204\",\n          latitude: 48.997222222222,\n          longitude: 2.3780555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sarcelles (95585)</span><br />Population : 59204\"\n          }\n        },\n        \"town-73065\": {\n          value: \"59184\",\n          latitude: 45.566388888889,\n          longitude: 5.9208333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChambÃ©ry (73065)</span><br />Population : 59184\"\n          }\n        },\n        \"town-33318\": {\n          value: \"58977\",\n          latitude: 44.805833333333,\n          longitude: -0.63222222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pessac (33318)</span><br />Population : 58977\"\n          }\n        },\n        \"town-56121\": {\n          value: \"58831\",\n          latitude: 47.745833333333,\n          longitude: -3.3663888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lorient (56121)</span><br />Population : 58831\"\n          }\n        },\n        \"town-94041\": {\n          value: \"58189\",\n          latitude: 48.813888888889,\n          longitude: 2.3877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ivry-sur-Seine (94041)</span><br />Population : 58189\"\n          }\n        },\n        \"town-82121\": {\n          value: \"58014\",\n          latitude: 44.017222222222,\n          longitude: 1.355,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montauban (82121)</span><br />Population : 58014\"\n          }\n        },\n        \"town-95127\": {\n          value: \"57900\",\n          latitude: 49.035833333333,\n          longitude: 2.0625,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cergy (95127)</span><br />Population : 57900\"\n          }\n        },\n        \"town-02691\": {\n          value: \"57533\",\n          latitude: 49.847777777778,\n          longitude: 3.2855555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Quentin (02691)</span><br />Population : 57533\"\n          }\n        },\n        \"town-60057\": {\n          value: \"56181\",\n          latitude: 49.434166666667,\n          longitude: 2.0875,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Beauvais (60057)</span><br />Population : 56181\"\n          }\n        },\n        \"town-49099\": {\n          value: \"56137\",\n          latitude: 47.058888888889,\n          longitude: -0.87972222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cholet (49099)</span><br />Population : 56137\"\n          }\n        },\n        \"town-85191\": {\n          value: \"56101\",\n          latitude: 46.669722222222,\n          longitude: -1.4277777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Roche-sur-Yon (85191)</span><br />Population : 56101\"\n          }\n        },\n        \"town-97302\": {\n          value: \"56002\",\n          latitude: 4.9386111111111,\n          longitude: -52.335,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cayenne (97302)</span><br />Population : 56002\"\n          }\n        },\n        \"town-83069\": {\n          value: \"55906\",\n          latitude: 43.118888888889,\n          longitude: 6.1286111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">HyÃ¨res (83069)</span><br />Population : 55906\"\n          }\n        },\n        \"town-94076\": {\n          value: \"55879\",\n          latitude: 48.793888888889,\n          longitude: 2.3611111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villejuif (94076)</span><br />Population : 55879\"\n          }\n        },\n        \"town-56260\": {\n          value: \"55116\",\n          latitude: 47.655,\n          longitude: -2.7616666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vannes (56260)</span><br />Population : 55116\"\n          }\n        },\n        \"town-93031\": {\n          value: \"54775\",\n          latitude: 48.954722222222,\n          longitude: 2.3083333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰pinay-sur-Seine (93031)</span><br />Population : 54775\"\n          }\n        },\n        \"town-93055\": {\n          value: \"54464\",\n          latitude: 48.898055555556,\n          longitude: 2.4072222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pantin (93055)</span><br />Population : 54464\"\n          }\n        },\n        \"town-97409\": {\n          value: \"54311\",\n          latitude: -20.960555555556,\n          longitude: 55.650555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-AndrÃ© (97409)</span><br />Population : 54311\"\n          }\n        },\n        \"town-53130\": {\n          value: \"54100\",\n          latitude: 48.072777777778,\n          longitude: -0.77,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Laval (53130)</span><br />Population : 54100\"\n          }\n        },\n        \"town-93010\": {\n          value: \"53934\",\n          latitude: 48.902777777778,\n          longitude: 2.4836111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bondy (93010)</span><br />Population : 53934\"\n          }\n        },\n        \"town-13004\": {\n          value: \"53785\",\n          latitude: 43.676944444444,\n          longitude: 4.6286111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Arles (13004)</span><br />Population : 53785\"\n          }\n        },\n        \"town-94033\": {\n          value: \"53667\",\n          latitude: 48.851666666667,\n          longitude: 2.4772222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fontenay-sous-Bois (94033)</span><br />Population : 53667\"\n          }\n        },\n        \"town-94046\": {\n          value: \"53513\",\n          latitude: 48.805833333333,\n          longitude: 2.4377777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Maisons-Alfort (94046)</span><br />Population : 53513\"\n          }\n        },\n        \"town-27229\": {\n          value: \"53260\",\n          latitude: 49.023333333333,\n          longitude: 1.1525,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰vreux (27229)</span><br />Population : 53260\"\n          }\n        },\n        \"town-77108\": {\n          value: \"53238\",\n          latitude: 48.878611111111,\n          longitude: 2.5888888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chelles (77108)</span><br />Population : 53238\"\n          }\n        },\n        \"town-92023\": {\n          value: \"53113\",\n          latitude: 48.800833333333,\n          longitude: 2.2619444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Clamart (92023)</span><br />Population : 53113\"\n          }\n        },\n        \"town-91228\": {\n          value: \"53019\",\n          latitude: 48.633888888889,\n          longitude: 2.4441666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰vry (91228)</span><br />Population : 53019\"\n          }\n        },\n        \"town-83061\": {\n          value: \"52580\",\n          latitude: 43.433055555556,\n          longitude: 6.7355555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">FrÃ©jus (83061)</span><br />Population : 52580\"\n          }\n        },\n        \"town-77284\": {\n          value: \"52540\",\n          latitude: 48.959444444444,\n          longitude: 2.8877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Meaux (77284)</span><br />Population : 52540\"\n          }\n        },\n        \"town-97414\": {\n          value: \"52507\",\n          latitude: -21.286666666667,\n          longitude: 55.409166666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Louis (97414)</span><br />Population : 52507\"\n          }\n        },\n        \"town-11262\": {\n          value: \"52489\",\n          latitude: 43.184722222222,\n          longitude: 3.0036111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Narbonne (11262)</span><br />Population : 52489\"\n          }\n        },\n        \"town-74010\": {\n          value: \"52375\",\n          latitude: 45.899166666667,\n          longitude: 6.1294444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Annecy (74010)</span><br />Population : 52375\"\n          }\n        },\n        \"town-06069\": {\n          value: \"52185\",\n          latitude: 43.658055555556,\n          longitude: 6.9252777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Grasse (06069)</span><br />Population : 52185\"\n          }\n        },\n        \"town-93007\": {\n          value: \"51735\",\n          latitude: 48.938611111111,\n          longitude: 2.4611111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Blanc-Mesnil (93007)</span><br />Population : 51735\"\n          }\n        },\n        \"town-08105\": {\n          value: \"51647\",\n          latitude: 49.771388888889,\n          longitude: 4.7194444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Charleville-MÃ©ziÃ¨res (08105)</span><br />Population : 51647\"\n          }\n        },\n        \"town-78586\": {\n          value: \"51504\",\n          latitude: 48.945277777778,\n          longitude: 2.17,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sartrouville (78586)</span><br />Population : 51504\"\n          }\n        },\n        \"town-90010\": {\n          value: \"51233\",\n          latitude: 47.641111111111,\n          longitude: 6.8494444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Belfort (90010)</span><br />Population : 51233\"\n          }\n        },\n        \"town-81004\": {\n          value: \"51181\",\n          latitude: 43.928055555556,\n          longitude: 2.1458333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Albi (81004)</span><br />Population : 51181\"\n          }\n        },\n        \"town-19031\": {\n          value: \"50272\",\n          latitude: 45.158888888889,\n          longitude: 1.5330555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Brive-la-Gaillarde (19031)</span><br />Population : 50272\"\n          }\n        },\n        \"town-93071\": {\n          value: \"50225\",\n          latitude: 48.941388888889,\n          longitude: 2.5227777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sevran (93071)</span><br />Population : 50225\"\n          }\n        },\n        \"town-92049\": {\n          value: \"48983\",\n          latitude: 48.816388888889,\n          longitude: 2.3211111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montrouge (92049)</span><br />Population : 48983\"\n          }\n        },\n        \"town-94080\": {\n          value: \"48955\",\n          latitude: 48.847777777778,\n          longitude: 2.4391666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vincennes (94080)</span><br />Population : 48955\"\n          }\n        },\n        \"town-11069\": {\n          value: \"48893\",\n          latitude: 43.215833333333,\n          longitude: 2.3513888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Carcassonne (11069)</span><br />Population : 48893\"\n          }\n        },\n        \"town-41018\": {\n          value: \"48568\",\n          latitude: 47.593055555556,\n          longitude: 1.3272222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Blois (41018)</span><br />Population : 48568\"\n          }\n        },\n        \"town-13056\": {\n          value: \"48261\",\n          latitude: 43.405277777778,\n          longitude: 5.0475,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Martigues (13056)</span><br />Population : 48261\"\n          }\n        },\n        \"town-22278\": {\n          value: \"48246\",\n          latitude: 48.513611111111,\n          longitude: -2.7602777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Brieuc (22278)</span><br />Population : 48246\"\n          }\n        },\n        \"town-36044\": {\n          value: \"48187\",\n          latitude: 46.809722222222,\n          longitude: 1.6902777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teauroux (36044)</span><br />Population : 48187\"\n          }\n        },\n        \"town-35288\": {\n          value: \"48133\",\n          latitude: 48.647222222222,\n          longitude: -2.0088888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Malo (35288)</span><br />Population : 48133\"\n          }\n        },\n        \"town-93008\": {\n          value: \"47855\",\n          latitude: 48.909722222222,\n          longitude: 2.4386111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bobigny (93008)</span><br />Population : 47855\"\n          }\n        },\n        \"town-06027\": {\n          value: \"47711\",\n          latitude: 43.663611111111,\n          longitude: 7.1483333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cagnes-sur-Mer (06027)</span><br />Population : 47711\"\n          }\n        },\n        \"town-93070\": {\n          value: \"47604\",\n          latitude: 48.906944444444,\n          longitude: 2.3330555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Ouen (93070)</span><br />Population : 47604\"\n          }\n        },\n        \"town-92073\": {\n          value: \"47121\",\n          latitude: 48.871111111111,\n          longitude: 2.2269444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Suresnes (92073)</span><br />Population : 47121\"\n          }\n        },\n        \"town-13005\": {\n          value: \"46892\",\n          latitude: 43.290833333333,\n          longitude: 5.5708333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aubagne (13005)</span><br />Population : 46892\"\n          }\n        },\n        \"town-71076\": {\n          value: \"46791\",\n          latitude: 46.793611111111,\n          longitude: 4.8475,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chalon-sur-SaÃ´ne (71076)</span><br />Population : 46791\"\n          }\n        },\n        \"town-51108\": {\n          value: \"46668\",\n          latitude: 48.956666666667,\n          longitude: 4.3644444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢lons-en-Champagne (51108)</span><br />Population : 46668\"\n          }\n        },\n        \"town-64102\": {\n          value: \"46191\",\n          latitude: 43.4925,\n          longitude: -1.4763888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bayonne (64102)</span><br />Population : 46191\"\n          }\n        },\n        \"town-92048\": {\n          value: \"45834\",\n          latitude: 48.8075,\n          longitude: 2.2402777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Meudon (92048)</span><br />Population : 45834\"\n          }\n        },\n        \"town-92062\": {\n          value: \"45093\",\n          latitude: 48.884166666667,\n          longitude: 2.2380555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Puteaux (92062)</span><br />Population : 45093\"\n          }\n        },\n        \"town-65440\": {\n          value: \"44952\",\n          latitude: 43.232777777778,\n          longitude: 0.07444444444444399,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tarbes (65440)</span><br />Population : 44952\"\n          }\n        },\n        \"town-94002\": {\n          value: \"44439\",\n          latitude: 48.7975,\n          longitude: 2.4241666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Alfortville (94002)</span><br />Population : 44439\"\n          }\n        },\n        \"town-59606\": {\n          value: \"44362\",\n          latitude: 50.359166666667,\n          longitude: 3.525,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Valenciennes (59606)</span><br />Population : 44362\"\n          }\n        },\n        \"town-16015\": {\n          value: \"44219\",\n          latitude: 45.649444444444,\n          longitude: 0.15944444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AngoulÃªme (16015)</span><br />Population : 44219\"\n          }\n        },\n        \"town-44162\": {\n          value: \"44078\",\n          latitude: 47.211388888889,\n          longitude: -1.6511111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Herblain (44162)</span><br />Population : 44078\"\n          }\n        },\n        \"town-81065\": {\n          value: \"43995\",\n          latitude: 43.605833333333,\n          longitude: 2.24,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Castres (81065)</span><br />Population : 43995\"\n          }\n        },\n        \"town-13103\": {\n          value: \"43830\",\n          latitude: 43.640555555556,\n          longitude: 5.0972222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Salon-de-Provence (13103)</span><br />Population : 43830\"\n          }\n        },\n        \"town-62160\": {\n          value: \"43805\",\n          latitude: 50.725555555556,\n          longitude: 1.6138888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Boulogne-sur-Mer (62160)</span><br />Population : 43805\"\n          }\n        },\n        \"town-91174\": {\n          value: \"43747\",\n          latitude: 48.610277777778,\n          longitude: 2.4747222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Corbeil-Essonnes (91174)</span><br />Population : 43747\"\n          }\n        },\n        \"town-13047\": {\n          value: \"43651\",\n          latitude: 43.514166666667,\n          longitude: 4.9888888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Istres (13047)</span><br />Population : 43651\"\n          }\n        },\n        \"town-2B033\": {\n          value: \"43615\",\n          latitude: 42.7,\n          longitude: 9.449444444444399,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bastia (2B033)</span><br />Population : 43615\"\n          }\n        },\n        \"town-59178\": {\n          value: \"43530\",\n          latitude: 50.370833333333,\n          longitude: 3.0791666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Douai (59178)</span><br />Population : 43530\"\n          }\n        },\n        \"town-34301\": {\n          value: \"43436\",\n          latitude: 43.404444444444,\n          longitude: 3.6966666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">SÃ¨te (34301)</span><br />Population : 43436\"\n          }\n        },\n        \"town-62041\": {\n          value: \"43289\",\n          latitude: 50.289166666667,\n          longitude: 2.78,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Arras (62041)</span><br />Population : 43289\"\n          }\n        },\n        \"town-78361\": {\n          value: \"43268\",\n          latitude: 48.990555555556,\n          longitude: 1.7166666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mantes-la-Jolie (78361)</span><br />Population : 43268\"\n          }\n        },\n        \"town-91377\": {\n          value: \"43006\",\n          latitude: 48.730555555556,\n          longitude: 2.2763888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Massy (91377)</span><br />Population : 43006\"\n          }\n        },\n        \"town-06030\": {\n          value: \"42780\",\n          latitude: 43.576111111111,\n          longitude: 7.0186111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Cannet (06030)</span><br />Population : 42780\"\n          }\n        },\n        \"town-30007\": {\n          value: \"42697\",\n          latitude: 44.127222222222,\n          longitude: 4.0808333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AlÃ¨s (30007)</span><br />Population : 42697\"\n          }\n        },\n        \"town-69290\": {\n          value: \"42428\",\n          latitude: 45.696388888889,\n          longitude: 4.9438888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Priest (69290)</span><br />Population : 42428\"\n          }\n        },\n        \"town-60159\": {\n          value: \"42295\",\n          latitude: 49.414166666667,\n          longitude: 2.8222222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CompiÃ¨gne (60159)</span><br />Population : 42295\"\n          }\n        },\n        \"town-01053\": {\n          value: \"42184\",\n          latitude: 46.204722222222,\n          longitude: 5.2280555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bourg-en-Bresse (01053)</span><br />Population : 42184\"\n          }\n        },\n        \"town-93046\": {\n          value: \"42060\",\n          latitude: 48.918333333333,\n          longitude: 2.5352777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Livry-Gargan (93046)</span><br />Population : 42060\"\n          }\n        },\n        \"town-78551\": {\n          value: \"42009\",\n          latitude: 48.896388888889,\n          longitude: 2.0905555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Germain-en-Laye (78551)</span><br />Population : 42009\"\n          }\n        },\n        \"town-33522\": {\n          value: \"41971\",\n          latitude: 44.808333333333,\n          longitude: -0.5891666666666699,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Talence (33522)</span><br />Population : 41971\"\n          }\n        },\n        \"town-57672\": {\n          value: \"41971\",\n          latitude: 49.358055555556,\n          longitude: 6.1683333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Thionville (57672)</span><br />Population : 41971\"\n          }\n        },\n        \"town-69256\": {\n          value: \"41970\",\n          latitude: 45.786944444444,\n          longitude: 4.925,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vaulx-en-Velin (69256)</span><br />Population : 41970\"\n          }\n        },\n        \"town-69034\": {\n          value: \"41840\",\n          latitude: 45.794722222222,\n          longitude: 4.8463888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Caluire-et-Cuire (69034)</span><br />Population : 41840\"\n          }\n        },\n        \"town-59650\": {\n          value: \"41809\",\n          latitude: 50.701111111111,\n          longitude: 3.2133333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Wattrelos (59650)</span><br />Population : 41809\"\n          }\n        },\n        \"town-92036\": {\n          value: \"41676\",\n          latitude: 48.9325,\n          longitude: 2.3047222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gennevilliers (92036)</span><br />Population : 41676\"\n          }\n        },\n        \"town-05061\": {\n          value: \"41659\",\n          latitude: 44.558611111111,\n          longitude: 6.0777777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gap (05061)</span><br />Population : 41659\"\n          }\n        },\n        \"town-93064\": {\n          value: \"41431\",\n          latitude: 48.873055555556,\n          longitude: 2.4852777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rosny-sous-Bois (93064)</span><br />Population : 41431\"\n          }\n        },\n        \"town-94022\": {\n          value: \"41275\",\n          latitude: 48.766388888889,\n          longitude: 2.4077777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Choisy-le-Roi (94022)</span><br />Population : 41275\"\n          }\n        },\n        \"town-77288\": {\n          value: \"40609\",\n          latitude: 48.539722222222,\n          longitude: 2.6591666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Melun (77288)</span><br />Population : 40609\"\n          }\n        },\n        \"town-28085\": {\n          value: \"40420\",\n          latitude: 48.446666666667,\n          longitude: 1.4883333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chartres (28085)</span><br />Population : 40420\"\n          }\n        },\n        \"town-95268\": {\n          value: \"40274\",\n          latitude: 48.971944444444,\n          longitude: 2.4,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Garges-lÃ¨s-Gonesse (95268)</span><br />Population : 40274\"\n          }\n        },\n        \"town-97213\": {\n          value: \"39996\",\n          latitude: 14.615277777778,\n          longitude: -61.001944444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Lamentin (97213)</span><br />Population : 39996\"\n          }\n        },\n        \"town-93053\": {\n          value: \"39949\",\n          latitude: 48.890833333333,\n          longitude: 2.4536111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Noisy-le-Sec (93053)</span><br />Population : 39949\"\n          }\n        },\n        \"town-59378\": {\n          value: \"39782\",\n          latitude: 50.670277777778,\n          longitude: 3.0963888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marcq-en-BarÅ“ul (59378)</span><br />Population : 39782\"\n          }\n        },\n        \"town-50129\": {\n          value: \"39772\",\n          latitude: 49.638611111111,\n          longitude: -1.6158333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cherbourg-Octeville (50129)</span><br />Population : 39772\"\n          }\n        },\n        \"town-03185\": {\n          value: \"39712\",\n          latitude: 46.34,\n          longitude: 2.6025,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MontluÃ§on (03185)</span><br />Population : 39712\"\n          }\n        },\n        \"town-44143\": {\n          value: \"39683\",\n          latitude: 47.190555555556,\n          longitude: -1.5691666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">RezÃ© (44143)</span><br />Population : 39683\"\n          }\n        },\n        \"town-64024\": {\n          value: \"39432\",\n          latitude: 43.484166666667,\n          longitude: -1.5194444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Anglet (64024)</span><br />Population : 39432\"\n          }\n        },\n        \"town-93032\": {\n          value: \"39350\",\n          latitude: 48.881666666667,\n          longitude: 2.5388888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gagny (93032)</span><br />Population : 39350\"\n          }\n        },\n        \"town-69029\": {\n          value: \"39238\",\n          latitude: 45.738611111111,\n          longitude: 4.9130555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bron (69029)</span><br />Population : 39238\"\n          }\n        },\n        \"town-97407\": {\n          value: \"38668\",\n          latitude: -20.939444444444,\n          longitude: 55.287222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Port (97407)</span><br />Population : 38668\"\n          }\n        },\n        \"town-97311\": {\n          value: \"38657\",\n          latitude: 5.5038888888889,\n          longitude: -54.028888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Laurent-du-Maroni (97311)</span><br />Population : 38657\"\n          }\n        },\n        \"town-92007\": {\n          value: \"38384\",\n          latitude: 48.797777777778,\n          longitude: 2.3125,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bagneux (92007)</span><br />Population : 38384\"\n          }\n        },\n        \"town-93027\": {\n          value: \"38361\",\n          latitude: 48.931388888889,\n          longitude: 2.3958333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Courneuve (93027)</span><br />Population : 38361\"\n          }\n        },\n        \"town-58194\": {\n          value: \"38352\",\n          latitude: 46.9925,\n          longitude: 3.1566666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nevers (58194)</span><br />Population : 38352\"\n          }\n        },\n        \"town-89024\": {\n          value: \"38248\",\n          latitude: 47.7975,\n          longitude: 3.5669444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Auxerre (89024)</span><br />Population : 38248\"\n          }\n        },\n        \"town-42187\": {\n          value: \"38225\",\n          latitude: 46.036111111111,\n          longitude: 4.0680555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Roanne (42187)</span><br />Population : 38225\"\n          }\n        },\n        \"town-78498\": {\n          value: \"38049\",\n          latitude: 48.928888888889,\n          longitude: 2.0447222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Poissy (78498)</span><br />Population : 38049\"\n          }\n        },\n        \"town-83050\": {\n          value: \"37295\",\n          latitude: 43.539444444444,\n          longitude: 6.4661111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Draguignan (83050)</span><br />Population : 37295\"\n          }\n        },\n        \"town-91589\": {\n          value: \"37203\",\n          latitude: 48.673888888889,\n          longitude: 2.3525,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Savigny-sur-Orge (91589)</span><br />Population : 37203\"\n          }\n        },\n        \"town-26198\": {\n          value: \"36669\",\n          latitude: 44.558611111111,\n          longitude: 4.7508333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MontÃ©limar (26198)</span><br />Population : 36669\"\n          }\n        },\n        \"town-37122\": {\n          value: \"36525\",\n          latitude: 47.350555555556,\n          longitude: 0.66166666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">JouÃ©-lÃ¨s-Tours (37122)</span><br />Population : 36525\"\n          }\n        },\n        \"town-38421\": {\n          value: \"36504\",\n          latitude: 45.166388888889,\n          longitude: 5.7647222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Martin-d'HÃ¨res (38421)</span><br />Population : 36504\"\n          }\n        },\n        \"town-97412\": {\n          value: \"36459\",\n          latitude: -21.378611111111,\n          longitude: 55.619166666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Joseph (97412)</span><br />Population : 36459\"\n          }\n        },\n        \"town-42207\": {\n          value: \"36397\",\n          latitude: 45.476388888889,\n          longitude: 4.5147222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Chamond (42207)</span><br />Population : 36397\"\n          }\n        },\n        \"town-38151\": {\n          value: \"36054\",\n          latitude: 45.142777777778,\n          longitude: 5.7177777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰chirolles (38151)</span><br />Population : 36054\"\n          }\n        },\n        \"town-93078\": {\n          value: \"35931\",\n          latitude: 48.960555555556,\n          longitude: 2.5302777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villepinte (93078)</span><br />Population : 35931\"\n          }\n        },\n        \"town-69264\": {\n          value: \"35900\",\n          latitude: 45.989444444444,\n          longitude: 4.7197222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villefranche-sur-SaÃ´ne (69264)</span><br />Population : 35900\"\n          }\n        },\n        \"town-77373\": {\n          value: \"35873\",\n          latitude: 48.798333333333,\n          longitude: 2.6052777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pontault-Combault (77373)</span><br />Population : 35873\"\n          }\n        },\n        \"town-78172\": {\n          value: \"35840\",\n          latitude: 48.997222222222,\n          longitude: 2.0944444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Conflans-Sainte-Honorine (78172)</span><br />Population : 35840\"\n          }\n        },\n        \"town-62498\": {\n          value: \"35748\",\n          latitude: 50.431388888889,\n          longitude: 2.8325,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lens (62498)</span><br />Population : 35748\"\n          }\n        },\n        \"town-31149\": {\n          value: \"35480\",\n          latitude: 43.612777777778,\n          longitude: 1.3358333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Colomiers (31149)</span><br />Population : 35480\"\n          }\n        },\n        \"town-13117\": {\n          value: \"35459\",\n          latitude: 43.46,\n          longitude: 5.2486111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vitrolles (13117)</span><br />Population : 35459\"\n          }\n        },\n        \"town-83129\": {\n          value: \"35415\",\n          latitude: 43.093333333333,\n          longitude: 5.8394444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Six-Fours-les-Plages (83129)</span><br />Population : 35415\"\n          }\n        },\n        \"town-47001\": {\n          value: \"35293\",\n          latitude: 44.203055555556,\n          longitude: 0.61861111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Agen (47001)</span><br />Population : 35293\"\n          }\n        },\n        \"town-74281\": {\n          value: \"35257\",\n          latitude: 46.370555555556,\n          longitude: 6.4797222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Thonon-les-Bains (74281)</span><br />Population : 35257\"\n          }\n        },\n        \"town-97410\": {\n          value: \"35252\",\n          latitude: -21.033888888889,\n          longitude: 55.712777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-BenoÃ®t (97410)</span><br />Population : 35252\"\n          }\n        },\n        \"town-71270\": {\n          value: \"35118\",\n          latitude: 46.306666666667,\n          longitude: 4.8319444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MÃ¢con (71270)</span><br />Population : 35118\"\n          }\n        },\n        \"town-67180\": {\n          value: \"34913\",\n          latitude: 48.816666666667,\n          longitude: 7.7877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Haguenau (67180)</span><br />Population : 34913\"\n          }\n        },\n        \"town-13054\": {\n          value: \"34773\",\n          latitude: 43.416944444444,\n          longitude: 5.2147222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marignane (13054)</span><br />Population : 34773\"\n          }\n        },\n        \"town-93073\": {\n          value: \"34744\",\n          latitude: 48.956111111111,\n          longitude: 2.5763888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tremblay-en-France (93073)</span><br />Population : 34744\"\n          }\n        },\n        \"town-88160\": {\n          value: \"34575\",\n          latitude: 48.173611111111,\n          longitude: 6.4516666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰pinal (88160)</span><br />Population : 34575\"\n          }\n        },\n        \"town-91549\": {\n          value: \"34514\",\n          latitude: 48.637777777778,\n          longitude: 2.3322222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-GeneviÃ¨ve-des-Bois (91549)</span><br />Population : 34514\"\n          }\n        },\n        \"town-26281\": {\n          value: \"34321\",\n          latitude: 45.045555555556,\n          longitude: 5.0508333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Romans-sur-IsÃ¨re (26281)</span><br />Population : 34321\"\n          }\n        },\n        \"town-13028\": {\n          value: \"34258\",\n          latitude: 43.176111111111,\n          longitude: 5.6080555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Ciotat (13028)</span><br />Population : 34258\"\n          }\n        },\n        \"town-93006\": {\n          value: \"34232\",\n          latitude: 48.866944444444,\n          longitude: 2.4169444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bagnolet (93006)</span><br />Population : 34232\"\n          }\n        },\n        \"town-83118\": {\n          value: \"34220\",\n          latitude: 43.424722222222,\n          longitude: 6.7677777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-RaphaÃ«l (83118)</span><br />Population : 34220\"\n          }\n        },\n        \"town-83118\": {\n          value: \"34220\",\n          latitude: 43.424722222222,\n          longitude: 6.7677777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-RaphaÃ«l (83118)</span><br />Population : 34220\"\n          }\n        },\n        \"town-93072\": {\n          value: \"34048\",\n          latitude: 48.955277777778,\n          longitude: 2.3822222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Stains (93072)</span><br />Population : 34048\"\n          }\n        },\n        \"town-60175\": {\n          value: \"34001\",\n          latitude: 49.257777777778,\n          longitude: 2.4827777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Creil (60175)</span><br />Population : 34001\"\n          }\n        },\n        \"town-78423\": {\n          value: \"33899\",\n          latitude: 48.770555555556,\n          longitude: 2.0325,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montigny-le-Bretonneux (78423)</span><br />Population : 33899\"\n          }\n        },\n        \"town-93050\": {\n          value: \"33781\",\n          latitude: 48.857777777778,\n          longitude: 2.5311111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Neuilly-sur-Marne (93050)</span><br />Population : 33781\"\n          }\n        },\n        \"town-86066\": {\n          value: \"33420\",\n          latitude: 46.816944444444,\n          longitude: 0.54527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢tellerault (86066)</span><br />Population : 33420\"\n          }\n        },\n        \"town-59122\": {\n          value: \"33345\",\n          latitude: 50.175833333333,\n          longitude: 3.2347222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cambrai (59122)</span><br />Population : 33345\"\n          }\n        },\n        \"town-95252\": {\n          value: \"33324\",\n          latitude: 48.988055555556,\n          longitude: 2.2305555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Franconville (95252)</span><br />Population : 33324\"\n          }\n        },\n        \"town-40192\": {\n          value: \"33124\",\n          latitude: 43.890277777778,\n          longitude: -0.50055555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mont-de-Marsan (40192)</span><br />Population : 33124\"\n          }\n        },\n        \"town-76217\": {\n          value: \"32966\",\n          latitude: 49.921666666667,\n          longitude: 1.0777777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dieppe (76217)</span><br />Population : 32966\"\n          }\n        },\n        \"town-92020\": {\n          value: \"32947\",\n          latitude: 48.801111111111,\n          longitude: 2.2886111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢tillon (92020)</span><br />Population : 32947\"\n          }\n        },\n        \"town-94058\": {\n          value: \"32799\",\n          latitude: 48.842222222222,\n          longitude: 2.5036111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Perreux-sur-Marne (94058)</span><br />Population : 32799\"\n          }\n        },\n        \"town-74012\": {\n          value: \"32790\",\n          latitude: 46.195,\n          longitude: 6.2355555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Annemasse (74012)</span><br />Population : 32790\"\n          }\n        },\n        \"town-92019\": {\n          value: \"32573\",\n          latitude: 48.765277777778,\n          longitude: 2.2780555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢tenay-Malabry (92019)</span><br />Population : 32573\"\n          }\n        },\n        \"town-94078\": {\n          value: \"32506\",\n          latitude: 48.7325,\n          longitude: 2.4497222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeneuve-Saint-Georges (94078)</span><br />Population : 32506\"\n          }\n        },\n        \"town-91687\": {\n          value: \"32396\",\n          latitude: 48.669444444444,\n          longitude: 2.3758333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Viry-ChÃ¢tillon (91687)</span><br />Population : 32396\"\n          }\n        },\n        \"town-62510\": {\n          value: \"32328\",\n          latitude: 50.421944444444,\n          longitude: 2.7777777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">LiÃ©vin (62510)</span><br />Population : 32328\"\n          }\n        },\n        \"town-94052\": {\n          value: \"31975\",\n          latitude: 48.836666666667,\n          longitude: 2.4825,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nogent-sur-Marne (94052)</span><br />Population : 31975\"\n          }\n        },\n        \"town-78311\": {\n          value: \"31849\",\n          latitude: 48.925555555556,\n          longitude: 2.1883333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Houilles (78311)</span><br />Population : 31849\"\n          }\n        },\n        \"town-28134\": {\n          value: \"31610\",\n          latitude: 48.736388888889,\n          longitude: 1.3655555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dreux (28134)</span><br />Population : 31610\"\n          }\n        },\n        \"town-54547\": {\n          value: \"31464\",\n          latitude: 48.656111111111,\n          longitude: 6.1675,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VandÅ“uvre-lÃ¨s-Nancy (54547)</span><br />Population : 31464\"\n          }\n        },\n        \"town-59392\": {\n          value: \"31435\",\n          latitude: 50.276944444444,\n          longitude: 3.9725,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Maubeuge (59392)</span><br />Population : 31435\"\n          }\n        },\n        \"town-78490\": {\n          value: \"31360\",\n          latitude: 48.817777777778,\n          longitude: 1.9463888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Plaisir (78490)</span><br />Population : 31360\"\n          }\n        },\n        \"town-92046\": {\n          value: \"31325\",\n          latitude: 48.817222222222,\n          longitude: 2.2991666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Malakoff (92046)</span><br />Population : 31325\"\n          }\n        },\n        \"town-97413\": {\n          value: \"31298\",\n          latitude: -21.166388888889,\n          longitude: 55.286944444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Leu (97413)</span><br />Population : 31298\"\n          }\n        },\n        \"town-95280\": {\n          value: \"31237\",\n          latitude: 49.031666666667,\n          longitude: 2.4736111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Goussainville (95280)</span><br />Population : 31237\"\n          }\n        },\n        \"town-67447\": {\n          value: \"31218\",\n          latitude: 48.606944444444,\n          longitude: 7.7491666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Schiltigheim (67447)</span><br />Population : 31218\"\n          }\n        },\n        \"town-91477\": {\n          value: \"31175\",\n          latitude: 48.718333333333,\n          longitude: 2.2497222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Palaiseau (91477)</span><br />Population : 31175\"\n          }\n        },\n        \"town-78440\": {\n          value: \"31116\",\n          latitude: 48.993055555556,\n          longitude: 1.9083333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Mureaux (78440)</span><br />Population : 31116\"\n          }\n        },\n        \"town-95500\": {\n          value: \"31011\",\n          latitude: 49.050833333333,\n          longitude: 2.1008333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pontoise (95500)</span><br />Population : 31011\"\n          }\n        },\n        \"town-24322\": {\n          value: \"31000\",\n          latitude: 45.184166666667,\n          longitude: 0.71805555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">PÃ©rigueux (24322)</span><br />Population : 31000\"\n          }\n        },\n        \"town-91027\": {\n          value: \"30845\",\n          latitude: 48.708611111111,\n          longitude: 2.3891666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Athis-Mons (91027)</span><br />Population : 30845\"\n          }\n        },\n        \"town-97408\": {\n          value: \"30784\",\n          latitude: -20.926388888889,\n          longitude: 55.335833333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Possession (97408)</span><br />Population : 30784\"\n          }\n        },\n        \"town-97103\": {\n          value: \"30775\",\n          latitude: 16.2675,\n          longitude: -61.586944444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Baie-Mahault (97103)</span><br />Population : 30775\"\n          }\n        },\n        \"town-69282\": {\n          value: \"30672\",\n          latitude: 45.766388888889,\n          longitude: 5.0027777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Meyzieu (69282)</span><br />Population : 30672\"\n          }\n        },\n        \"town-78146\": {\n          value: \"30667\",\n          latitude: 48.890555555556,\n          longitude: 2.1569444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chatou (78146)</span><br />Population : 30667\"\n          }\n        },\n        \"town-94038\": {\n          value: \"30588\",\n          latitude: 48.779166666667,\n          longitude: 2.3372222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">L'HaÃ¿-les-Roses (94038)</span><br />Population : 30588\"\n          }\n        },\n        \"town-92064\": {\n          value: \"30416\",\n          latitude: 48.846388888889,\n          longitude: 2.2152777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Cloud (92064)</span><br />Population : 30416\"\n          }\n        },\n        \"town-69286\": {\n          value: \"30375\",\n          latitude: 45.820555555556,\n          longitude: 4.8975,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rillieux-la-Pape (69286)</span><br />Population : 30375\"\n          }\n        },\n        \"town-84031\": {\n          value: \"30360\",\n          latitude: 44.055,\n          longitude: 5.0480555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Carpentras (84031)</span><br />Population : 30360\"\n          }\n        },\n        \"town-97418\": {\n          value: \"30293\",\n          latitude: -20.896944444444,\n          longitude: 55.549166666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Marie (97418)</span><br />Population : 30293\"\n          }\n        },\n        \"town-06123\": {\n          value: \"30235\",\n          latitude: 43.673333333333,\n          longitude: 7.19,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Laurent-du-Var (06123)</span><br />Population : 30235\"\n          }\n        },\n        \"town-38544\": {\n          value: \"30169\",\n          latitude: 45.525555555556,\n          longitude: 4.8747222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vienne (38544)</span><br />Population : 30169\"\n          }\n        },\n        \"town-93014\": {\n          value: \"29998\",\n          latitude: 48.909166666667,\n          longitude: 2.5472222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Clichy-sous-Bois (93014)</span><br />Population : 29998\"\n          }\n        },\n        \"town-94073\": {\n          value: \"29949\",\n          latitude: 48.764444444444,\n          longitude: 2.3913888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Thiais (94073)</span><br />Population : 29949\"\n          }\n        },\n        \"town-02722\": {\n          value: \"29846\",\n          latitude: 49.381111111111,\n          longitude: 3.3225,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Soissons (02722)</span><br />Population : 29846\"\n          }\n        },\n        \"town-84087\": {\n          value: \"29791\",\n          latitude: 44.1375,\n          longitude: 4.8088888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Orange (84087)</span><br />Population : 29791\"\n          }\n        },\n        \"town-78621\": {\n          value: \"29705\",\n          latitude: 48.776666666667,\n          longitude: 2.0016666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Trappes (78621)</span><br />Population : 29705\"\n          }\n        },\n        \"town-78158\": {\n          value: \"29682\",\n          latitude: 48.820277777778,\n          longitude: 2.1302777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Chesnay (78158)</span><br />Population : 29682\"\n          }\n        },\n        \"town-15014\": {\n          value: \"29677\",\n          latitude: 44.925277777778,\n          longitude: 2.4397222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aurillac (15014)</span><br />Population : 29677\"\n          }\n        },\n        \"town-94018\": {\n          value: \"29664\",\n          latitude: 48.821388888889,\n          longitude: 2.4119444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Charenton-le-Pont (94018)</span><br />Population : 29664\"\n          }\n        },\n        \"town-92009\": {\n          value: \"29519\",\n          latitude: 48.9175,\n          longitude: 2.2683333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bois-Colombes (92009)</span><br />Population : 29519\"\n          }\n        },\n        \"town-76681\": {\n          value: \"29518\",\n          latitude: 49.408611111111,\n          longitude: 1.0891666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sotteville-lÃ¨s-Rouen (76681)</span><br />Population : 29518\"\n          }\n        },\n        \"town-91691\": {\n          value: \"29392\",\n          latitude: 48.716111111111,\n          longitude: 2.4908333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Yerres (91691)</span><br />Population : 29392\"\n          }\n        },\n        \"town-06083\": {\n          value: \"29389\",\n          latitude: 43.774722222222,\n          longitude: 7.4997222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Menton (06083)</span><br />Population : 29389\"\n          }\n        },\n        \"town-33550\": {\n          value: \"28905\",\n          latitude: 44.779444444444,\n          longitude: -0.56694444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villenave-d'Ornon (33550)</span><br />Population : 28905\"\n          }\n        },\n        \"town-59328\": {\n          value: \"28870\",\n          latitude: 50.649444444444,\n          longitude: 3.0241666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lambersart (59328)</span><br />Population : 28870\"\n          }\n        },\n        \"town-77445\": {\n          value: \"28838\",\n          latitude: 48.575833333333,\n          longitude: 2.5827777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Savigny-le-Temple (77445)</span><br />Population : 28838\"\n          }\n        },\n        \"town-91201\": {\n          value: \"28802\",\n          latitude: 48.686111111111,\n          longitude: 2.4094444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Draveil (91201)</span><br />Population : 28802\"\n          }\n        },\n        \"town-49328\": {\n          value: \"28772\",\n          latitude: 47.259166666667,\n          longitude: -0.078055555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saumur (49328)</span><br />Population : 28772\"\n          }\n        },\n        \"town-24037\": {\n          value: \"28691\",\n          latitude: 44.851111111111,\n          longitude: 0.48194444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bergerac (24037)</span><br />Population : 28691\"\n          }\n        },\n        \"town-76575\": {\n          value: \"28601\",\n          latitude: 49.377777777778,\n          longitude: 1.1041666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Ã‰tienne-du-Rouvray (76575)</span><br />Population : 28601\"\n          }\n        },\n        \"town-94016\": {\n          value: \"28550\",\n          latitude: 48.791944444444,\n          longitude: 2.3319444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cachan (94016)</span><br />Population : 28550\"\n          }\n        },\n        \"town-78297\": {\n          value: \"28518\",\n          latitude: 48.770555555556,\n          longitude: 2.0730555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Guyancourt (78297)</span><br />Population : 28518\"\n          }\n        },\n        \"town-06155\": {\n          value: \"28450\",\n          latitude: 43.579722222222,\n          longitude: 7.0533333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vallauris (06155)</span><br />Population : 28450\"\n          }\n        },\n        \"town-73008\": {\n          value: \"28439\",\n          latitude: 45.688611111111,\n          longitude: 5.915,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aix-les-Bains (73008)</span><br />Population : 28439\"\n          }\n        },\n        \"town-97307\": {\n          value: \"28407\",\n          latitude: 4.8505555555556,\n          longitude: -52.331111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Matoury (97307)</span><br />Population : 28407\"\n          }\n        },\n        \"town-33449\": {\n          value: \"28396\",\n          latitude: 44.895555555556,\n          longitude: -0.7175,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-MÃ©dard-en-Jalles (33449)</span><br />Population : 28396\"\n          }\n        },\n        \"town-95063\": {\n          value: \"28277\",\n          latitude: 48.925555555556,\n          longitude: 2.2169444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bezons (95063)</span><br />Population : 28277\"\n          }\n        },\n        \"town-93077\": {\n          value: \"28257\",\n          latitude: 48.890277777778,\n          longitude: 2.5111111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villemomble (93077)</span><br />Population : 28257\"\n          }\n        },\n        \"town-93059\": {\n          value: \"28076\",\n          latitude: 48.964722222222,\n          longitude: 2.3608333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pierrefitte-sur-Seine (93059)</span><br />Population : 28076\"\n          }\n        },\n        \"town-92060\": {\n          value: \"27931\",\n          latitude: 48.783333333333,\n          longitude: 2.2636111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Plessis-Robinson (92060)</span><br />Population : 27931\"\n          }\n        },\n        \"town-92035\": {\n          value: \"27923\",\n          latitude: 48.905,\n          longitude: 2.2436111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Garenne-Colombes (92035)</span><br />Population : 27923\"\n          }\n        },\n        \"town-61001\": {\n          value: \"27863\",\n          latitude: 48.429722222222,\n          longitude: 0.091944444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AlenÃ§on (61001)</span><br />Population : 27863\"\n          }\n        },\n        \"town-95219\": {\n          value: \"27713\",\n          latitude: 48.991388888889,\n          longitude: 2.2594444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ermont (95219)</span><br />Population : 27713\"\n          }\n        },\n        \"town-91521\": {\n          value: \"27689\",\n          latitude: 48.651111111111,\n          longitude: 2.4130555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ris-Orangis (91521)</span><br />Population : 27689\"\n          }\n        },\n        \"town-18279\": {\n          value: \"27675\",\n          latitude: 47.221944444444,\n          longitude: 2.0683333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vierzon (18279)</span><br />Population : 27675\"\n          }\n        },\n        \"town-94079\": {\n          value: \"27568\",\n          latitude: 48.8275,\n          longitude: 2.5447222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villiers-sur-Marne (94079)</span><br />Population : 27568\"\n          }\n        },\n        \"town-67218\": {\n          value: \"27556\",\n          latitude: 48.524722222222,\n          longitude: 7.7144444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Illkirch-Graffenstaden (67218)</span><br />Population : 27556\"\n          }\n        },\n        \"town-91657\": {\n          value: \"27546\",\n          latitude: 48.700277777778,\n          longitude: 2.4172222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vigneux-sur-Seine (91657)</span><br />Population : 27546\"\n          }\n        },\n        \"town-17415\": {\n          value: \"27430\",\n          latitude: 45.745277777778,\n          longitude: -0.63444444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saintes (17415)</span><br />Population : 27430\"\n          }\n        },\n        \"town-92075\": {\n          value: \"27314\",\n          latitude: 48.82,\n          longitude: 2.2888888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vanves (92075)</span><br />Population : 27314\"\n          }\n        },\n        \"town-78208\": {\n          value: \"27262\",\n          latitude: 48.783888888889,\n          longitude: 1.9580555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰lancourt (78208)</span><br />Population : 27262\"\n          }\n        },\n        \"town-95680\": {\n          value: \"27004\",\n          latitude: 49.008888888889,\n          longitude: 2.3902777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villiers-le-Bel (95680)</span><br />Population : 27004\"\n          }\n        },\n        \"town-78517\": {\n          value: \"27001\",\n          latitude: 48.643611111111,\n          longitude: 1.83,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rambouillet (78517)</span><br />Population : 27001\"\n          }\n        },\n        \"town-02408\": {\n          value: \"26991\",\n          latitude: 49.563333333333,\n          longitude: 3.6236111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Laon (02408)</span><br />Population : 26991\"\n          }\n        },\n        \"town-38053\": {\n          value: \"26841\",\n          latitude: 45.590833333333,\n          longitude: 5.2791666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bourgoin-Jallieu (38053)</span><br />Population : 26841\"\n          }\n        },\n        \"town-91286\": {\n          value: \"26796\",\n          latitude: 48.656666666667,\n          longitude: 2.3880555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Grigny (91286)</span><br />Population : 26796\"\n          }\n        },\n        \"town-97113\": {\n          value: \"26743\",\n          latitude: 16.205555555556,\n          longitude: -61.491944444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Gosier (97113)</span><br />Population : 26743\"\n          }\n        },\n        \"town-62427\": {\n          value: \"26728\",\n          latitude: 50.421111111111,\n          longitude: 2.95,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">HÃ©nin-Beaumont (62427)</span><br />Population : 26728\"\n          }\n        },\n        \"town-95582\": {\n          value: \"26659\",\n          latitude: 48.971666666667,\n          longitude: 2.2569444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sannois (95582)</span><br />Population : 26659\"\n          }\n        },\n        \"town-95277\": {\n          value: \"26627\",\n          latitude: 48.986666666667,\n          longitude: 2.4486111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gonesse (95277)</span><br />Population : 26627\"\n          }\n        },\n        \"town-52448\": {\n          value: \"26549\",\n          latitude: 48.637777777778,\n          longitude: 4.9488888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Dizier (52448)</span><br />Population : 26549\"\n          }\n        },\n        \"town-95306\": {\n          value: \"26533\",\n          latitude: 48.990277777778,\n          longitude: 2.1655555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Herblay (95306)</span><br />Population : 26533\"\n          }\n        },\n        \"town-62119\": {\n          value: \"26530\",\n          latitude: 50.529722222222,\n          longitude: 2.64,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BÃ©thune (62119)</span><br />Population : 26530\"\n          }\n        },\n        \"town-25388\": {\n          value: \"26501\",\n          latitude: 47.509722222222,\n          longitude: 6.7983333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MontbÃ©liard (25388)</span><br />Population : 26501\"\n          }\n        },\n        \"town-94034\": {\n          value: \"26446\",\n          latitude: 48.758888888889,\n          longitude: 2.3236111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fresnes (94034)</span><br />Population : 26446\"\n          }\n        },\n        \"town-95607\": {\n          value: \"26440\",\n          latitude: 49.025833333333,\n          longitude: 2.2266666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Taverny (95607)</span><br />Population : 26440\"\n          }\n        },\n        \"town-83062\": {\n          value: \"26321\",\n          latitude: 43.124722222222,\n          longitude: 6.0105555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Garde (83062)</span><br />Population : 26321\"\n          }\n        },\n        \"town-27681\": {\n          value: \"26306\",\n          latitude: 49.091666666667,\n          longitude: 1.485,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vernon (27681)</span><br />Population : 26306\"\n          }\n        },\n        \"town-94043\": {\n          value: \"26267\",\n          latitude: 48.81,\n          longitude: 2.3580555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Kremlin-BicÃªtre (94043)</span><br />Population : 26267\"\n          }\n        },\n        \"town-94071\": {\n          value: \"26150\",\n          latitude: 48.769722222222,\n          longitude: 2.5227777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sucy-en-Brie (94071)</span><br />Population : 26150\"\n          }\n        },\n        \"town-93063\": {\n          value: \"26025\",\n          latitude: 48.883611111111,\n          longitude: 2.4361111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Romainville (93063)</span><br />Population : 26025\"\n          }\n        },\n        \"town-64122\": {\n          value: \"25994\",\n          latitude: 43.480555555556,\n          longitude: -1.5572222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Biarritz (64122)</span><br />Population : 25994\"\n          }\n        },\n        \"town-69275\": {\n          value: \"25988\",\n          latitude: 45.768611111111,\n          longitude: 4.9588888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">DÃ©cines-Charpieu (69275)</span><br />Population : 25988\"\n          }\n        },\n        \"town-12202\": {\n          value: \"25974\",\n          latitude: 44.35,\n          longitude: 2.5741666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rodez (12202)</span><br />Population : 25974\"\n          }\n        },\n        \"town-17299\": {\n          value: \"25962\",\n          latitude: 45.941944444444,\n          longitude: -0.9669444444444401,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rochefort (17299)</span><br />Population : 25962\"\n          }\n        },\n        \"town-31557\": {\n          value: \"25854\",\n          latitude: 43.584444444444,\n          longitude: 1.3436111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tournefeuille (31557)</span><br />Population : 25854\"\n          }\n        },\n        \"town-44190\": {\n          value: \"25832\",\n          latitude: 47.207222222222,\n          longitude: -1.5025,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-SÃ©bastien-sur-Loire (44190)</span><br />Population : 25832\"\n          }\n        },\n        \"town-13063\": {\n          value: \"25823\",\n          latitude: 43.581388888889,\n          longitude: 5.0013888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Miramas (13063)</span><br />Population : 25823\"\n          }\n        },\n        \"town-59017\": {\n          value: \"25786\",\n          latitude: 50.687222222222,\n          longitude: 2.8802777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ArmentiÃ¨res (59017)</span><br />Population : 25786\"\n          }\n        },\n        \"town-91114\": {\n          value: \"25785\",\n          latitude: 48.698055555556,\n          longitude: 2.5033333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Brunoy (91114)</span><br />Population : 25785\"\n          }\n        },\n        \"town-39198\": {\n          value: \"25776\",\n          latitude: 47.092222222222,\n          longitude: 5.4897222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dole (39198)</span><br />Population : 25776\"\n          }\n        },\n        \"town-89387\": {\n          value: \"25676\",\n          latitude: 48.197222222222,\n          longitude: 3.2833333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sens (89387)</span><br />Population : 25676\"\n          }\n        },\n        \"town-34145\": {\n          value: \"25509\",\n          latitude: 43.676944444444,\n          longitude: 4.1352777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lunel (34145)</span><br />Population : 25509\"\n          }\n        },\n        \"town-93047\": {\n          value: \"25499\",\n          latitude: 48.898333333333,\n          longitude: 2.5647222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montfermeil (93047)</span><br />Population : 25499\"\n          }\n        },\n        \"town-84035\": {\n          value: \"25440\",\n          latitude: 43.836666666667,\n          longitude: 5.0372222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cavaillon (84035)</span><br />Population : 25440\"\n          }\n        },\n        \"town-69149\": {\n          value: \"25413\",\n          latitude: 45.714166666667,\n          longitude: 4.8075,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Oullins (69149)</span><br />Population : 25413\"\n          }\n        },\n        \"town-97304\": {\n          value: \"25404\",\n          latitude: 5.1583333333333,\n          longitude: -52.642777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Kourou (97304)</span><br />Population : 25404\"\n          }\n        },\n        \"town-92078\": {\n          value: \"25374\",\n          latitude: 48.937222222222,\n          longitude: 2.3277777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeneuve-la-Garenne (92078)</span><br />Population : 25374\"\n          }\n        },\n        \"town-03310\": {\n          value: \"25235\",\n          latitude: 46.126944444444,\n          longitude: 3.4258333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vichy (03310)</span><br />Population : 25235\"\n          }\n        },\n        \"town-44114\": {\n          value: \"25216\",\n          latitude: 47.270833333333,\n          longitude: -1.6236111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Orvault (44114)</span><br />Population : 25216\"\n          }\n        },\n        \"town-33039\": {\n          value: \"25205\",\n          latitude: 44.807777777778,\n          longitude: -0.54888888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BÃ¨gles (33039)</span><br />Population : 25205\"\n          }\n        },\n        \"town-76322\": {\n          value: \"25189\",\n          latitude: 49.406388888889,\n          longitude: 1.0522222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Grand-Quevilly (76322)</span><br />Population : 25189\"\n          }\n        },\n        \"town-91692\": {\n          value: \"25055\",\n          latitude: 48.682222222222,\n          longitude: 2.1675,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Ulis (91692)</span><br />Population : 25055\"\n          }\n        },\n        \"town-33529\": {\n          value: \"25018\",\n          latitude: 44.6325,\n          longitude: -1.145,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Teste-de-Buch (33529)</span><br />Population : 25018\"\n          }\n        },\n        \"town-34003\": {\n          value: \"24972\",\n          latitude: 43.31,\n          longitude: 3.4752777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Agde (34003)</span><br />Population : 24972\"\n          }\n        },\n        \"town-80001\": {\n          value: \"24953\",\n          latitude: 50.105277777778,\n          longitude: 1.8352777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Abbeville (80001)</span><br />Population : 24953\"\n          }\n        },\n        \"town-51230\": {\n          value: \"24733\",\n          latitude: 49.04,\n          longitude: 3.9591666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰pernay (51230)</span><br />Population : 24733\"\n          }\n        },\n        \"town-47323\": {\n          value: \"24700\",\n          latitude: 44.406944444444,\n          longitude: 0.70416666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeneuve-sur-Lot (47323)</span><br />Population : 24700\"\n          }\n        },\n        \"town-31395\": {\n          value: \"24653\",\n          latitude: 43.460277777778,\n          longitude: 1.3258333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Muret (31395)</span><br />Population : 24653\"\n          }\n        },\n        \"town-77083\": {\n          value: \"24636\",\n          latitude: 48.852777777778,\n          longitude: 2.6019444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Champs-sur-Marne (77083)</span><br />Population : 24636\"\n          }\n        },\n        \"town-97128\": {\n          value: \"24611\",\n          latitude: 16.225555555556,\n          longitude: -61.386111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Anne (97128)</span><br />Population : 24611\"\n          }\n        },\n        \"town-52121\": {\n          value: \"24500\",\n          latitude: 48.110833333333,\n          longitude: 5.1386111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chaumont (52121)</span><br />Population : 24500\"\n          }\n        },\n        \"town-95203\": {\n          value: \"24386\",\n          latitude: 48.991388888889,\n          longitude: 2.2797222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Eaubonne (95203)</span><br />Population : 24386\"\n          }\n        },\n        \"town-33243\": {\n          value: \"24302\",\n          latitude: 44.915277777778,\n          longitude: -0.24388888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Libourne (33243)</span><br />Population : 24302\"\n          }\n        },\n        \"town-77514\": {\n          value: \"24296\",\n          latitude: 48.942777777778,\n          longitude: 2.6063888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeparisis (77514)</span><br />Population : 24296\"\n          }\n        },\n        \"town-97222\": {\n          value: \"24095\",\n          latitude: 14.6775,\n          longitude: -60.939166666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Robert (97222)</span><br />Population : 24095\"\n          }\n        },\n        \"town-95572\": {\n          value: \"23889\",\n          latitude: 49.044166666667,\n          longitude: 2.1102777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Ouen-l'AumÃ´ne (95572)</span><br />Population : 23889\"\n          }\n        },\n        \"town-62178\": {\n          value: \"23869\",\n          latitude: 50.481111111111,\n          longitude: 2.5477777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bruay-la-BuissiÃ¨re (62178)</span><br />Population : 23869\"\n          }\n        },\n        \"town-91103\": {\n          value: \"23812\",\n          latitude: 48.609444444444,\n          longitude: 2.3077777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BrÃ©tigny-sur-Orge (91103)</span><br />Population : 23812\"\n          }\n        },\n        \"town-77058\": {\n          value: \"23663\",\n          latitude: 48.841666666667,\n          longitude: 2.6977777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bussy-Saint-Georges (77058)</span><br />Population : 23663\"\n          }\n        },\n        \"town-97118\": {\n          value: \"23606\",\n          latitude: 16.191388888889,\n          longitude: -61.590277777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Petit-Bourg (97118)</span><br />Population : 23606\"\n          }\n        },\n        \"town-92032\": {\n          value: \"23603\",\n          latitude: 48.789166666667,\n          longitude: 2.2855555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fontenay-aux-Roses (92032)</span><br />Population : 23603\"\n          }\n        },\n        \"town-91223\": {\n          value: \"23575\",\n          latitude: 48.435,\n          longitude: 2.1622222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰tampes (91223)</span><br />Population : 23575\"\n          }\n        },\n        \"town-33192\": {\n          value: \"23546\",\n          latitude: 44.771388888889,\n          longitude: -0.61694444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gradignan (33192)</span><br />Population : 23546\"\n          }\n        },\n        \"town-33069\": {\n          value: \"23539\",\n          latitude: 44.864722222222,\n          longitude: -0.59861111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Bouscat (33069)</span><br />Population : 23539\"\n          }\n        },\n        \"town-92072\": {\n          value: \"23412\",\n          latitude: 48.823055555556,\n          longitude: 2.2108333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">SÃ¨vres (92072)</span><br />Population : 23412\"\n          }\n        },\n        \"town-95176\": {\n          value: \"23318\",\n          latitude: 48.973055555556,\n          longitude: 2.2005555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cormeilles-en-Parisis (95176)</span><br />Population : 23318\"\n          }\n        },\n        \"town-01283\": {\n          value: \"23308\",\n          latitude: 46.255555555556,\n          longitude: 5.655,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Oyonnax (01283)</span><br />Population : 23308\"\n          }\n        },\n        \"town-78358\": {\n          value: \"23287\",\n          latitude: 48.946111111111,\n          longitude: 2.145,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Maisons-Laffitte (78358)</span><br />Population : 23287\"\n          }\n        },\n        \"town-71153\": {\n          value: \"23186\",\n          latitude: 46.800555555556,\n          longitude: 4.4402777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Creusot (71153)</span><br />Population : 23186\"\n          }\n        },\n        \"town-21054\": {\n          value: \"23135\",\n          latitude: 47.024166666667,\n          longitude: 4.8388888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Beaune (21054)</span><br />Population : 23135\"\n          }\n        },\n        \"town-91421\": {\n          value: \"23131\",\n          latitude: 48.7075,\n          longitude: 2.4552777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montgeron (91421)</span><br />Population : 23131\"\n          }\n        },\n        \"town-57480\": {\n          value: \"23049\",\n          latitude: 49.099722222222,\n          longitude: 6.1533333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montigny-lÃ¨s-Metz (57480)</span><br />Population : 23049\"\n          }\n        },\n        \"town-32013\": {\n          value: \"22931\",\n          latitude: 43.645277777778,\n          longitude: 0.58861111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Auch (32013)</span><br />Population : 22931\"\n          }\n        },\n        \"town-59155\": {\n          value: \"22918\",\n          latitude: 51.024722222222,\n          longitude: 2.3908333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Coudekerque-Branche (59155)</span><br />Population : 22918\"\n          }\n        },\n        \"town-04112\": {\n          value: \"22852\",\n          latitude: 43.833333333333,\n          longitude: 5.7830555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Manosque (04112)</span><br />Population : 22852\"\n          }\n        },\n        \"town-12145\": {\n          value: \"22775\",\n          latitude: 44.097777777778,\n          longitude: 3.0777777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Millau (12145)</span><br />Population : 22775\"\n          }\n        },\n        \"town-59368\": {\n          value: \"22758\",\n          latitude: 50.655277777778,\n          longitude: 3.0702777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Madeleine (59368)</span><br />Population : 22758\"\n          }\n        },\n        \"town-56098\": {\n          value: \"22744\",\n          latitude: 47.763333333333,\n          longitude: -3.3388888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lanester (56098)</span><br />Population : 22744\"\n          }\n        },\n        \"town-34108\": {\n          value: \"22743\",\n          latitude: 43.447222222222,\n          longitude: 3.7555555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Frontignan (34108)</span><br />Population : 22743\"\n          }\n        },\n        \"town-97117\": {\n          value: \"22716\",\n          latitude: 16.331111111111,\n          longitude: -61.343611111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Moule (97117)</span><br />Population : 22716\"\n          }\n        },\n        \"town-94067\": {\n          value: \"22666\",\n          latitude: 48.841388888889,\n          longitude: 2.4177777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-MandÃ© (94067)</span><br />Population : 22666\"\n          }\n        },\n        \"town-77468\": {\n          value: \"22639\",\n          latitude: 48.850277777778,\n          longitude: 2.6508333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Torcy (77468)</span><br />Population : 22639\"\n          }\n        },\n        \"town-97420\": {\n          value: \"22627\",\n          latitude: -20.905555555556,\n          longitude: 55.607222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Suzanne (97420)</span><br />Population : 22627\"\n          }\n        },\n        \"town-33119\": {\n          value: \"22588\",\n          latitude: 44.856944444444,\n          longitude: -0.53277777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cenon (33119)</span><br />Population : 22588\"\n          }\n        },\n        \"town-14366\": {\n          value: \"22547\",\n          latitude: 49.145555555556,\n          longitude: 0.22555555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lisieux (14366)</span><br />Population : 22547\"\n          }\n        },\n        \"town-77390\": {\n          value: \"22514\",\n          latitude: 48.791111111111,\n          longitude: 2.6513888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Roissy-en-Brie (77390)</span><br />Population : 22514\"\n          }\n        },\n        \"town-06079\": {\n          value: \"22498\",\n          latitude: 43.545555555556,\n          longitude: 6.9375,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mandelieu-la-Napoule (06079)</span><br />Population : 22498\"\n          }\n        },\n        \"town-38169\": {\n          value: \"22485\",\n          latitude: 45.193055555556,\n          longitude: 5.6847222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fontaine (38169)</span><br />Population : 22485\"\n          }\n        },\n        \"town-93045\": {\n          value: \"22410\",\n          latitude: 48.88,\n          longitude: 2.4169444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Lilas (93045)</span><br />Population : 22410\"\n          }\n        },\n        \"town-69202\": {\n          value: \"22229\",\n          latitude: 45.733611111111,\n          longitude: 4.8025,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Foy-lÃ¨s-Lyon (69202)</span><br />Population : 22229\"\n          }\n        },\n        \"town-88413\": {\n          value: \"22225\",\n          latitude: 48.284166666667,\n          longitude: 6.9491666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-DiÃ©-des-Vosges (88413)</span><br />Population : 22225\"\n          }\n        },\n        \"town-76498\": {\n          value: \"22215\",\n          latitude: 49.430555555556,\n          longitude: 1.0527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Petit-Quevilly (76498)</span><br />Population : 22215\"\n          }\n        },\n        \"town-31069\": {\n          value: \"22119\",\n          latitude: 43.635555555556,\n          longitude: 1.39,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Blagnac (31069)</span><br />Population : 22119\"\n          }\n        },\n        \"town-44215\": {\n          value: \"22117\",\n          latitude: 47.168055555556,\n          longitude: -1.4713888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vertou (44215)</span><br />Population : 22117\"\n          }\n        },\n        \"town-57631\": {\n          value: \"22094\",\n          latitude: 49.110555555556,\n          longitude: 7.0672222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sarreguemines (57631)</span><br />Population : 22094\"\n          }\n        },\n        \"town-59295\": {\n          value: \"22086\",\n          latitude: 50.724444444444,\n          longitude: 2.5383333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Hazebrouck (59295)</span><br />Population : 22086\"\n          }\n        },\n        \"town-59360\": {\n          value: \"22081\",\n          latitude: 50.612222222222,\n          longitude: 3.0136111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Loos (59360)</span><br />Population : 22081\"\n          }\n        },\n        \"town-59410\": {\n          value: \"22036\",\n          latitude: 50.641944444444,\n          longitude: 3.1077777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mons-en-BarÅ“ul (59410)</span><br />Population : 22036\"\n          }\n        },\n        \"town-93057\": {\n          value: \"21972\",\n          latitude: 48.905833333333,\n          longitude: 2.5105555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Pavillons-sous-Bois (93057)</span><br />Population : 21972\"\n          }\n        },\n        \"town-57227\": {\n          value: \"21920\",\n          latitude: 49.188055555556,\n          longitude: 6.9,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Forbach (57227)</span><br />Population : 21920\"\n          }\n        },\n        \"town-76108\": {\n          value: \"21876\",\n          latitude: 49.460555555556,\n          longitude: 1.1080555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bois-Guillaume (76108)</span><br />Population : 21876\"\n          }\n        },\n        \"town-76108\": {\n          value: \"21876\",\n          latitude: 49.460555555556,\n          longitude: 1.1080555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bois-Guillaume - Bihorel (76108)</span><br />Population : 21876\"\n          }\n        },\n        \"town-77122\": {\n          value: \"21845\",\n          latitude: 48.661944444444,\n          longitude: 2.5630555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Combs-la-Ville (77122)</span><br />Population : 21845\"\n          }\n        },\n        \"town-14327\": {\n          value: \"21829\",\n          latitude: 49.203611111111,\n          longitude: -0.32638888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">HÃ©rouville-Saint-Clair (14327)</span><br />Population : 21829\"\n          }\n        },\n        \"town-95197\": {\n          value: \"21741\",\n          latitude: 48.975,\n          longitude: 2.3286111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Deuil-la-Barre (95197)</span><br />Population : 21741\"\n          }\n        },\n        \"town-40088\": {\n          value: \"21702\",\n          latitude: 43.706944444444,\n          longitude: -1.0513888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dax (40088)</span><br />Population : 21702\"\n          }\n        },\n        \"town-94054\": {\n          value: \"21691\",\n          latitude: 48.743611111111,\n          longitude: 2.3927777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Orly (94054)</span><br />Population : 21691\"\n          }\n        },\n        \"town-91345\": {\n          value: \"21574\",\n          latitude: 48.696944444444,\n          longitude: 2.2955555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Longjumeau (91345)</span><br />Population : 21574\"\n          }\n        },\n        \"town-95428\": {\n          value: \"21475\",\n          latitude: 48.989722222222,\n          longitude: 2.3219444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montmorency (95428)</span><br />Population : 21475\"\n          }\n        },\n        \"town-45147\": {\n          value: \"21450\",\n          latitude: 47.931944444444,\n          longitude: 1.9211111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fleury-les-Aubrais (45147)</span><br />Population : 21450\"\n          }\n        },\n        \"town-78126\": {\n          value: \"21374\",\n          latitude: 48.85,\n          longitude: 2.145,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Celle-Saint-Cloud (78126)</span><br />Population : 21374\"\n          }\n        },\n        \"town-46042\": {\n          value: \"21333\",\n          latitude: 44.4475,\n          longitude: 1.4405555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cahors (46042)</span><br />Population : 21333\"\n          }\n        },\n        \"town-91272\": {\n          value: \"21259\",\n          latitude: 48.701388888889,\n          longitude: 2.1336111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gif-sur-Yvette (91272)</span><br />Population : 21259\"\n          }\n        },\n        \"town-59271\": {\n          value: \"21235\",\n          latitude: 51.013055555556,\n          longitude: 2.3022222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Grande-Synthe (59271)</span><br />Population : 21235\"\n          }\n        },\n        \"town-97229\": {\n          value: \"21209\",\n          latitude: 14.616111111111,\n          longitude: -61.101388888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">SchÅ“lcher (97229)</span><br />Population : 21209\"\n          }\n        },\n        \"town-91434\": {\n          value: \"21113\",\n          latitude: 48.663333333333,\n          longitude: 2.3513888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Morsang-sur-Orge (91434)</span><br />Population : 21113\"\n          }\n        },\n        \"town-83144\": {\n          value: \"21035\",\n          latitude: 43.137222222222,\n          longitude: 5.9825,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Valette-du-Var (83144)</span><br />Population : 21035\"\n          }\n        },\n        \"town-22113\": {\n          value: \"20983\",\n          latitude: 48.7325,\n          longitude: -3.4552777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lannion (22113)</span><br />Population : 20983\"\n          }\n        },\n        \"town-69204\": {\n          value: \"20982\",\n          latitude: 45.695277777778,\n          longitude: 4.7930555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Genis-Laval (69204)</span><br />Population : 20982\"\n          }\n        },\n        \"town-59163\": {\n          value: \"20962\",\n          latitude: 50.674722222222,\n          longitude: 3.1538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Croix (59163)</span><br />Population : 20962\"\n          }\n        },\n        \"town-77152\": {\n          value: \"20923\",\n          latitude: 48.515277777778,\n          longitude: 2.6344444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dammarie-les-Lys (77152)</span><br />Population : 20923\"\n          }\n        },\n        \"town-74011\": {\n          value: \"20881\",\n          latitude: 45.919166666667,\n          longitude: 6.1419444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Annecy-le-Vieux (74011)</span><br />Population : 20881\"\n          }\n        },\n        \"town-77285\": {\n          value: \"20830\",\n          latitude: 48.5375,\n          longitude: 2.6319444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le MÃ©e-sur-Seine (77285)</span><br />Population : 20830\"\n          }\n        },\n        \"town-13041\": {\n          value: \"20799\",\n          latitude: 43.454444444444,\n          longitude: 5.4761111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gardanne (13041)</span><br />Population : 20799\"\n          }\n        },\n        \"town-93049\": {\n          value: \"20683\",\n          latitude: 48.860833333333,\n          longitude: 2.5097222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Neuilly-Plaisance (93049)</span><br />Population : 20683\"\n          }\n        },\n        \"town-35115\": {\n          value: \"20637\",\n          latitude: 48.351666666667,\n          longitude: -1.2,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">FougÃ¨res (35115)</span><br />Population : 20637\"\n          }\n        },\n        \"town-77350\": {\n          value: \"20598\",\n          latitude: 48.769166666667,\n          longitude: 2.6791666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ozoir-la-FerriÃ¨re (77350)</span><br />Population : 20598\"\n          }\n        },\n        \"town-38563\": {\n          value: \"20573\",\n          latitude: 45.363333333333,\n          longitude: 5.59,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Voiron (38563)</span><br />Population : 20573\"\n          }\n        },\n        \"town-77243\": {\n          value: \"20538\",\n          latitude: 48.878055555556,\n          longitude: 2.7066666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lagny-sur-Marne (77243)</span><br />Population : 20538\"\n          }\n        },\n        \"town-59172\": {\n          value: \"20523\",\n          latitude: 50.328611111111,\n          longitude: 3.395,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Denain (59172)</span><br />Population : 20523\"\n          }\n        },\n        \"town-68297\": {\n          value: \"20481\",\n          latitude: 47.585277777778,\n          longitude: 7.565,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Louis (68297)</span><br />Population : 20481\"\n          }\n        },\n        \"town-97129\": {\n          value: \"20443\",\n          latitude: 16.333055555556,\n          longitude: -61.698055555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Rose (97129)</span><br />Population : 20443\"\n          }\n        },\n        \"town-59279\": {\n          value: \"20370\",\n          latitude: 50.782777777778,\n          longitude: 3.1247222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Halluin (59279)</span><br />Population : 20370\"\n          }\n        },\n        \"town-78640\": {\n          value: \"20348\",\n          latitude: 48.783333333333,\n          longitude: 2.1883333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VÃ©lizy-Villacoublay (78640)</span><br />Population : 20348\"\n          }\n        },\n        \"town-91570\": {\n          value: \"20345\",\n          latitude: 48.6325,\n          longitude: 2.3027777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Michel-sur-Orge (91570)</span><br />Population : 20345\"\n          }\n        },\n        \"town-95555\": {\n          value: \"20326\",\n          latitude: 48.971111111111,\n          longitude: 2.2819444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Gratien (95555)</span><br />Population : 20326\"\n          }\n        },\n        \"town-92014\": {\n          value: \"20303\",\n          latitude: 48.778055555556,\n          longitude: 2.3158333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bourg-la-Reine (92014)</span><br />Population : 20303\"\n          }\n        },\n        \"town-59646\": {\n          value: \"20293\",\n          latitude: 50.668611111111,\n          longitude: 3.13,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Wasquehal (59646)</span><br />Population : 20293\"\n          }\n        },\n        \"town-54329\": {\n          value: \"20286\",\n          latitude: 48.589444444444,\n          longitude: 6.5016666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">LunÃ©ville (54329)</span><br />Population : 20286\"\n          }\n        },\n        \"town-33249\": {\n          value: \"20271\",\n          latitude: 44.879166666667,\n          longitude: -0.5216666666666701,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lormont (33249)</span><br />Population : 20271\"\n          }\n        },\n        \"town-03190\": {\n          value: \"20229\",\n          latitude: 46.564722222222,\n          longitude: 3.3325,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Moulins (03190)</span><br />Population : 20229\"\n          }\n        },\n        \"town-45232\": {\n          value: \"20196\",\n          latitude: 47.863055555556,\n          longitude: 1.8997222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Olivet (45232)</span><br />Population : 20196\"\n          }\n        },\n        \"town-94044\": {\n          value: \"20112\",\n          latitude: 48.746388888889,\n          longitude: 2.4883333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Limeil-BrÃ©vannes (94044)</span><br />Population : 20112\"\n          }\n        },\n        \"town-33162\": {\n          value: \"19998\",\n          latitude: 44.884444444444,\n          longitude: -0.65138888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Eysines (33162)</span><br />Population : 19998\"\n          }\n        },\n        \"town-92071\": {\n          value: \"19986\",\n          latitude: 48.778611111111,\n          longitude: 2.2905555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sceaux (92071)</span><br />Population : 19986\"\n          }\n        },\n        \"town-94003\": {\n          value: \"19964\",\n          latitude: 48.806666666667,\n          longitude: 2.3352777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Arcueil (94003)</span><br />Population : 19964\"\n          }\n        },\n        \"town-50502\": {\n          value: \"19944\",\n          latitude: 49.114444444444,\n          longitude: -1.0916666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-LÃ´ (50502)</span><br />Population : 19944\"\n          }\n        },\n        \"town-69244\": {\n          value: \"19938\",\n          latitude: 45.763333333333,\n          longitude: 4.78,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tassin-la-Demi-Lune (69244)</span><br />Population : 19938\"\n          }\n        },\n        \"town-76451\": {\n          value: \"19880\",\n          latitude: 49.4625,\n          longitude: 1.0872222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mont-Saint-Aignan (76451)</span><br />Population : 19880\"\n          }\n        },\n        \"town-33199\": {\n          value: \"19877\",\n          latitude: 44.635277777778,\n          longitude: -1.0677777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gujan-Mestras (33199)</span><br />Population : 19877\"\n          }\n        },\n        \"town-71306\": {\n          value: \"19855\",\n          latitude: 46.666944444444,\n          longitude: 4.3688888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montceau-les-Mines (71306)</span><br />Population : 19855\"\n          }\n        },\n        \"town-13002\": {\n          value: \"19775\",\n          latitude: 43.336111111111,\n          longitude: 5.4822222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Allauch (13002)</span><br />Population : 19775\"\n          }\n        },\n        \"town-78005\": {\n          value: \"19754\",\n          latitude: 48.962222222222,\n          longitude: 2.0686111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AchÃ¨res (78005)</span><br />Population : 19754\"\n          }\n        },\n        \"town-55545\": {\n          value: \"19714\",\n          latitude: 49.159722222222,\n          longitude: 5.3827777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Verdun (55545)</span><br />Population : 19714\"\n          }\n        },\n        \"town-73011\": {\n          value: \"19713\",\n          latitude: 45.675833333333,\n          longitude: 6.3925,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Albertville (73011)</span><br />Population : 19713\"\n          }\n        },\n        \"town-63124\": {\n          value: \"19709\",\n          latitude: 45.741111111111,\n          longitude: 3.1963888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cournon-d'Auvergne (63124)</span><br />Population : 19709\"\n          }\n        },\n        \"town-13071\": {\n          value: \"19706\",\n          latitude: 43.41,\n          longitude: 5.3094444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Pennes-Mirabeau (13071)</span><br />Population : 19706\"\n          }\n        },\n        \"town-97309\": {\n          value: \"19691\",\n          latitude: 4.905,\n          longitude: -52.276388888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Remire-Montjoly (97309)</span><br />Population : 19691\"\n          }\n        },\n        \"town-29039\": {\n          value: \"19688\",\n          latitude: 47.875277777778,\n          longitude: -3.9188888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Concarneau (29039)</span><br />Population : 19688\"\n          }\n        },\n        \"town-79049\": {\n          value: \"19676\",\n          latitude: 46.84,\n          longitude: -0.48861111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bressuire (79049)</span><br />Population : 19676\"\n          }\n        },\n        \"town-43157\": {\n          value: \"19665\",\n          latitude: 45.043333333333,\n          longitude: 3.885,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Puy-en-Velay (43157)</span><br />Population : 19665\"\n          }\n        },\n        \"town-45284\": {\n          value: \"19623\",\n          latitude: 47.911944444444,\n          longitude: 1.9711111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Jean-de-Braye (45284)</span><br />Population : 19623\"\n          }\n        },\n        \"town-76259\": {\n          value: \"19581\",\n          latitude: 49.7575,\n          longitude: 0.37916666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">FÃ©camp (76259)</span><br />Population : 19581\"\n          }\n        },\n        \"town-67462\": {\n          value: \"19576\",\n          latitude: 48.259444444444,\n          longitude: 7.4541666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">SÃ©lestat (67462)</span><br />Population : 19576\"\n          }\n        },\n        \"town-97210\": {\n          value: \"19547\",\n          latitude: 14.615277777778,\n          longitude: -60.9025,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le FranÃ§ois (97210)</span><br />Population : 19547\"\n          }\n        },\n        \"town-97107\": {\n          value: \"19544\",\n          latitude: 16.0425,\n          longitude: -61.564722222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Capesterre-Belle-Eau (97107)</span><br />Population : 19544\"\n          }\n        },\n        \"town-84054\": {\n          value: \"19525\",\n          latitude: 43.919444444444,\n          longitude: 5.0513888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">L'Isle-sur-la-Sorgue (84054)</span><br />Population : 19525\"\n          }\n        },\n        \"town-74268\": {\n          value: \"19499\",\n          latitude: 45.888888888889,\n          longitude: 6.0961111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Seynod (74268)</span><br />Population : 19499\"\n          }\n        },\n        \"town-06157\": {\n          value: \"19489\",\n          latitude: 43.722777777778,\n          longitude: 7.1136111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vence (06157)</span><br />Population : 19489\"\n          }\n        },\n        \"town-78362\": {\n          value: \"19418\",\n          latitude: 48.974166666667,\n          longitude: 1.7108333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mantes-la-Ville (78362)</span><br />Population : 19418\"\n          }\n        },\n        \"town-85047\": {\n          value: \"19341\",\n          latitude: 46.845833333333,\n          longitude: -1.8791666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Challans (85047)</span><br />Population : 19341\"\n          }\n        },\n        \"town-16102\": {\n          value: \"19335\",\n          latitude: 45.695833333333,\n          longitude: -0.32916666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cognac (16102)</span><br />Population : 19335\"\n          }\n        },\n        \"town-94059\": {\n          value: \"19304\",\n          latitude: 48.811111111111,\n          longitude: 2.5716666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Plessis-TrÃ©vise (94059)</span><br />Population : 19304\"\n          }\n        },\n        \"town-95424\": {\n          value: \"19296\",\n          latitude: 48.993888888889,\n          longitude: 2.195,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montigny-lÃ¨s-Cormeilles (95424)</span><br />Population : 19296\"\n          }\n        },\n        \"town-06085\": {\n          value: \"19267\",\n          latitude: 43.6,\n          longitude: 6.9947222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mougins (06085)</span><br />Population : 19267\"\n          }\n        },\n        \"town-84089\": {\n          value: \"19265\",\n          latitude: 43.694166666667,\n          longitude: 5.5030555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pertuis (84089)</span><br />Population : 19265\"\n          }\n        },\n        \"town-69091\": {\n          value: \"19258\",\n          latitude: 45.590555555556,\n          longitude: 4.7688888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Givors (69091)</span><br />Population : 19258\"\n          }\n        },\n        \"town-25462\": {\n          value: \"19227\",\n          latitude: 46.906111111111,\n          longitude: 6.3547222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pontarlier (25462)</span><br />Population : 19227\"\n          }\n        },\n        \"town-60463\": {\n          value: \"19155\",\n          latitude: 49.274722222222,\n          longitude: 2.4675,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nogent-sur-Oise (60463)</span><br />Population : 19155\"\n          }\n        },\n        \"town-26058\": {\n          value: \"19133\",\n          latitude: 44.9475,\n          longitude: 4.8952777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bourg-lÃ¨s-Valence (26058)</span><br />Population : 19133\"\n          }\n        },\n        \"town-47157\": {\n          value: \"19113\",\n          latitude: 44.5,\n          longitude: 0.16527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marmande (47157)</span><br />Population : 19113\"\n          }\n        },\n        \"town-08409\": {\n          value: \"19099\",\n          latitude: 49.701944444444,\n          longitude: 4.9402777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sedan (08409)</span><br />Population : 19099\"\n          }\n        },\n        \"town-78383\": {\n          value: \"19014\",\n          latitude: 48.762777777778,\n          longitude: 1.9455555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Maurepas (78383)</span><br />Population : 19014\"\n          }\n        },\n        \"town-92022\": {\n          value: \"18887\",\n          latitude: 48.808611111111,\n          longitude: 2.1886111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chaville (92022)</span><br />Population : 18887\"\n          }\n        },\n        \"town-44047\": {\n          value: \"18861\",\n          latitude: 47.214722222222,\n          longitude: -1.7238888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CouÃ«ron (44047)</span><br />Population : 18861\"\n          }\n        },\n        \"town-44020\": {\n          value: \"18762\",\n          latitude: 47.179166666667,\n          longitude: -1.6247222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bouguenais (44020)</span><br />Population : 18762\"\n          }\n        },\n        \"town-30028\": {\n          value: \"18705\",\n          latitude: 44.1625,\n          longitude: 4.62,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bagnols-sur-CÃ¨ze (30028)</span><br />Population : 18705\"\n          }\n        },\n        \"town-38553\": {\n          value: \"18703\",\n          latitude: 45.613333333333,\n          longitude: 5.1486111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villefontaine (38553)</span><br />Population : 18703\"\n          }\n        },\n        \"town-63300\": {\n          value: \"18684\",\n          latitude: 45.893611111111,\n          longitude: 3.1125,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Riom (63300)</span><br />Population : 18684\"\n          }\n        },\n        \"town-17306\": {\n          value: \"18674\",\n          latitude: 45.627777777778,\n          longitude: -1.0255555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Royan (17306)</span><br />Population : 18674\"\n          }\n        },\n        \"town-77294\": {\n          value: \"18671\",\n          latitude: 48.983888888889,\n          longitude: 2.6163888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mitry-Mory (77294)</span><br />Population : 18671\"\n          }\n        },\n        \"town-91161\": {\n          value: \"18664\",\n          latitude: 48.705277777778,\n          longitude: 2.3161111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chilly-Mazarin (91161)</span><br />Population : 18664\"\n          }\n        },\n        \"town-94021\": {\n          value: \"18659\",\n          latitude: 48.766388888889,\n          longitude: 2.3533333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chevilly-Larue (94021)</span><br />Population : 18659\"\n          }\n        },\n        \"town-97228\": {\n          value: \"18622\",\n          latitude: 14.781388888889,\n          longitude: -60.993611111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Marie (97228)</span><br />Population : 18622\"\n          }\n        },\n        \"town-56162\": {\n          value: \"18591\",\n          latitude: 47.735833333333,\n          longitude: -3.4311111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ploemeur (56162)</span><br />Population : 18591\"\n          }\n        },\n        \"town-94077\": {\n          value: \"18568\",\n          latitude: 48.734444444444,\n          longitude: 2.4108333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeneuve-le-Roi (94077)</span><br />Population : 18568\"\n          }\n        },\n        \"town-39300\": {\n          value: \"18560\",\n          latitude: 46.674444444444,\n          longitude: 5.5538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lons-le-Saunier (39300)</span><br />Population : 18560\"\n          }\n        },\n        \"town-92033\": {\n          value: \"18469\",\n          latitude: 48.845555555556,\n          longitude: 2.1869444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Garches (92033)</span><br />Population : 18469\"\n          }\n        },\n        \"town-69081\": {\n          value: \"18413\",\n          latitude: 45.774444444444,\n          longitude: 4.7775,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰cully (69081)</span><br />Population : 18413\"\n          }\n        },\n        \"town-27375\": {\n          value: \"18332\",\n          latitude: 49.215277777778,\n          longitude: 1.1655555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Louviers (27375)</span><br />Population : 18332\"\n          }\n        },\n        \"town-44026\": {\n          value: \"18275\",\n          latitude: 47.296944444444,\n          longitude: -1.4927777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Carquefou (44026)</span><br />Population : 18275\"\n          }\n        },\n        \"town-59507\": {\n          value: \"18235\",\n          latitude: 50.604722222222,\n          longitude: 3.0877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ronchin (59507)</span><br />Population : 18235\"\n          }\n        },\n        \"town-94019\": {\n          value: \"18227\",\n          latitude: 48.798333333333,\n          longitude: 2.5338888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChenneviÃ¨res-sur-Marne (94019)</span><br />Population : 18227\"\n          }\n        },\n        \"town-84129\": {\n          value: \"18220\",\n          latitude: 44.008333333333,\n          longitude: 4.8725,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sorgues (84129)</span><br />Population : 18220\"\n          }\n        },\n        \"town-93061\": {\n          value: \"18171\",\n          latitude: 48.885,\n          longitude: 2.4038888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le PrÃ©-Saint-Gervais (93061)</span><br />Population : 18171\"\n          }\n        },\n        \"town-38229\": {\n          value: \"18065\",\n          latitude: 45.208611111111,\n          longitude: 5.7794444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Meylan (38229)</span><br />Population : 18065\"\n          }\n        },\n        \"town-67043\": {\n          value: \"18038\",\n          latitude: 48.613888888889,\n          longitude: 7.7519444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bischheim (67043)</span><br />Population : 18038\"\n          }\n        },\n        \"town-94042\": {\n          value: \"17990\",\n          latitude: 48.821388888889,\n          longitude: 2.4727777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Joinville-le-Pont (94042)</span><br />Population : 17990\"\n          }\n        },\n        \"town-78545\": {\n          value: \"17976\",\n          latitude: 48.800277777778,\n          longitude: 2.0625,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Cyr-l'Ã‰cole (78545)</span><br />Population : 17976\"\n          }\n        },\n        \"town-04070\": {\n          value: \"17969\",\n          latitude: 44.0925,\n          longitude: 6.2355555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Digne-les-Bains (04070)</span><br />Population : 17969\"\n          }\n        },\n        \"town-50173\": {\n          value: \"17942\",\n          latitude: 49.648333333333,\n          longitude: -1.6547222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰queurdreville-Hainneville (50173)</span><br />Population : 17942\"\n          }\n        },\n        \"town-74081\": {\n          value: \"17877\",\n          latitude: 46.060277777778,\n          longitude: 6.5786111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cluses (74081)</span><br />Population : 17877\"\n          }\n        },\n        \"town-44035\": {\n          value: \"17814\",\n          latitude: 47.298888888889,\n          longitude: -1.5527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Chapelle-sur-Erdre (44035)</span><br />Population : 17814\"\n          }\n        },\n        \"town-78165\": {\n          value: \"17773\",\n          latitude: 48.820555555556,\n          longitude: 1.9836111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Clayes-sous-Bois (78165)</span><br />Population : 17773\"\n          }\n        },\n        \"town-41194\": {\n          value: \"17758\",\n          latitude: 47.358333333333,\n          longitude: 1.7427777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Romorantin-Lanthenay (41194)</span><br />Population : 17758\"\n          }\n        },\n        \"town-41269\": {\n          value: \"17687\",\n          latitude: 47.792777777778,\n          longitude: 1.0655555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VendÃ´me (41269)</span><br />Population : 17687\"\n          }\n        },\n        \"town-63075\": {\n          value: \"17683\",\n          latitude: 45.773611111111,\n          longitude: 3.0669444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChamaliÃ¨res (63075)</span><br />Population : 17683\"\n          }\n        },\n        \"town-95598\": {\n          value: \"17670\",\n          latitude: 48.987777777778,\n          longitude: 2.2997222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Soisy-sous-Montmorency (95598)</span><br />Population : 17670\"\n          }\n        },\n        \"town-74093\": {\n          value: \"17605\",\n          latitude: 45.903611111111,\n          longitude: 6.1038888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cran-Gevrier (74093)</span><br />Population : 17605\"\n          }\n        },\n        \"town-59220\": {\n          value: \"17581\",\n          latitude: 50.598888888889,\n          longitude: 3.0736111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Faches-Thumesnil (59220)</span><br />Population : 17581\"\n          }\n        },\n        \"town-13077\": {\n          value: \"17546\",\n          latitude: 43.405,\n          longitude: 4.9886111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Port-de-Bouc (13077)</span><br />Population : 17546\"\n          }\n        },\n        \"town-59299\": {\n          value: \"17538\",\n          latitude: 50.655277777778,\n          longitude: 3.1877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Hem (59299)</span><br />Population : 17538\"\n          }\n        },\n        \"town-76231\": {\n          value: \"17452\",\n          latitude: 49.285833333333,\n          longitude: 1.0083333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Elbeuf (76231)</span><br />Population : 17452\"\n          }\n        },\n        \"town-62065\": {\n          value: \"17429\",\n          latitude: 50.409722222222,\n          longitude: 2.8327777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Avion (62065)</span><br />Population : 17429\"\n          }\n        },\n        \"town-77296\": {\n          value: \"17415\",\n          latitude: 48.626111111111,\n          longitude: 2.5922222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Moissy-Cramayel (77296)</span><br />Population : 17415\"\n          }\n        },\n        \"town-35360\": {\n          value: \"17393\",\n          latitude: 48.123333333333,\n          longitude: -1.2094444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VitrÃ© (35360)</span><br />Population : 17393\"\n          }\n        },\n        \"town-42095\": {\n          value: \"17380\",\n          latitude: 45.388055555556,\n          longitude: 4.2872222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Firminy (42095)</span><br />Population : 17380\"\n          }\n        },\n        \"town-07010\": {\n          value: \"17275\",\n          latitude: 45.24,\n          longitude: 4.6708333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Annonay (07010)</span><br />Population : 17275\"\n          }\n        },\n        \"town-62215\": {\n          value: \"17275\",\n          latitude: 50.493055555556,\n          longitude: 2.9580555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Carvin (62215)</span><br />Population : 17275\"\n          }\n        },\n        \"town-83047\": {\n          value: \"17225\",\n          latitude: 43.149722222222,\n          longitude: 6.0741666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Crau (83047)</span><br />Population : 17225\"\n          }\n        },\n        \"town-94037\": {\n          value: \"17222\",\n          latitude: 48.813333333333,\n          longitude: 2.3444444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gentilly (94037)</span><br />Population : 17222\"\n          }\n        },\n        \"town-97207\": {\n          value: \"17209\",\n          latitude: 14.575833333333,\n          longitude: -60.975833333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ducos (97207)</span><br />Population : 17209\"\n          }\n        },\n        \"town-95218\": {\n          value: \"17145\",\n          latitude: 49.017222222222,\n          longitude: 2.0913888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰ragny (95218)</span><br />Population : 17145\"\n          }\n        },\n        \"town-97224\": {\n          value: \"17057\",\n          latitude: 14.670833333333,\n          longitude: -61.038055555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Joseph (97224)</span><br />Population : 17057\"\n          }\n        },\n        \"town-78372\": {\n          value: \"17019\",\n          latitude: 48.866944444444,\n          longitude: 2.0941666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marly-le-Roi (78372)</span><br />Population : 17019\"\n          }\n        },\n        \"town-45285\": {\n          value: \"16951\",\n          latitude: 47.913055555556,\n          longitude: 1.8733333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Jean-de-la-Ruelle (45285)</span><br />Population : 16951\"\n          }\n        },\n        \"town-94004\": {\n          value: \"16945\",\n          latitude: 48.750277777778,\n          longitude: 2.5097222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Boissy-Saint-LÃ©ger (94004)</span><br />Population : 16945\"\n          }\n        },\n        \"town-70550\": {\n          value: \"16934\",\n          latitude: 47.622222222222,\n          longitude: 6.1552777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vesoul (70550)</span><br />Population : 16934\"\n          }\n        },\n        \"town-84092\": {\n          value: \"16930\",\n          latitude: 43.964166666667,\n          longitude: 4.86,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Pontet (84092)</span><br />Population : 16930\"\n          }\n        },\n        \"town-77305\": {\n          value: \"16926\",\n          latitude: 48.383055555556,\n          longitude: 2.9480555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montereau-Fault-Yonne (77305)</span><br />Population : 16926\"\n          }\n        },\n        \"town-97116\": {\n          value: \"16895\",\n          latitude: 16.331944444444,\n          longitude: -61.456944444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Morne-Ã -l'Eau (97116)</span><br />Population : 16895\"\n          }\n        },\n        \"town-59526\": {\n          value: \"16894\",\n          latitude: 50.448055555556,\n          longitude: 3.4269444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Amand-les-Eaux (59526)</span><br />Population : 16894\"\n          }\n        },\n        \"town-94011\": {\n          value: \"16888\",\n          latitude: 48.774166666667,\n          longitude: 2.4875,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bonneuil-sur-Marne (94011)</span><br />Population : 16888\"\n          }\n        },\n        \"town-35047\": {\n          value: \"16875\",\n          latitude: 48.024722222222,\n          longitude: -1.7458333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bruz (35047)</span><br />Population : 16875\"\n          }\n        },\n        \"town-60612\": {\n          value: \"16867\",\n          latitude: 49.207222222222,\n          longitude: 2.5866666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Senlis (60612)</span><br />Population : 16867\"\n          }\n        },\n        \"town-76447\": {\n          value: \"16852\",\n          latitude: 49.546111111111,\n          longitude: 0.18805555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montivilliers (76447)</span><br />Population : 16852\"\n          }\n        },\n        \"town-55029\": {\n          value: \"16830\",\n          latitude: 48.771666666667,\n          longitude: 5.1672222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bar-le-Duc (55029)</span><br />Population : 16830\"\n          }\n        },\n        \"town-78481\": {\n          value: \"16821\",\n          latitude: 48.896666666667,\n          longitude: 2.1061111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Pecq (78481)</span><br />Population : 16821\"\n          }\n        },\n        \"town-33122\": {\n          value: \"16802\",\n          latitude: 44.744444444444,\n          longitude: -0.68222222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cestas (33122)</span><br />Population : 16802\"\n          }\n        },\n        \"town-95323\": {\n          value: \"16796\",\n          latitude: 49.010833333333,\n          longitude: 2.0386111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Jouy-le-Moutier (95323)</span><br />Population : 16796\"\n          }\n        },\n        \"town-69199\": {\n          value: \"16787\",\n          latitude: 45.708611111111,\n          longitude: 4.8533333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Fons (69199)</span><br />Population : 16787\"\n          }\n        },\n        \"town-83023\": {\n          value: \"16757\",\n          latitude: 43.405833333333,\n          longitude: 6.0616666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Brignoles (83023)</span><br />Population : 16757\"\n          }\n        },\n        \"town-78650\": {\n          value: \"16753\",\n          latitude: 48.893888888889,\n          longitude: 2.1322222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le VÃ©sinet (78650)</span><br />Population : 16753\"\n          }\n        },\n        \"town-57606\": {\n          value: \"16723\",\n          latitude: 49.104166666667,\n          longitude: 6.7080555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Avold (57606)</span><br />Population : 16723\"\n          }\n        },\n        \"town-83123\": {\n          value: \"16643\",\n          latitude: 43.119166666667,\n          longitude: 5.8022222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sanary-sur-Mer (83123)</span><br />Population : 16643\"\n          }\n        },\n        \"town-67267\": {\n          value: \"16639\",\n          latitude: 48.5575,\n          longitude: 7.6830555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lingolsheim (67267)</span><br />Population : 16639\"\n          }\n        },\n        \"town-44055\": {\n          value: \"16623\",\n          latitude: 47.285833333333,\n          longitude: -2.3922222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Baule-Escoublac (44055)</span><br />Population : 16623\"\n          }\n        },\n        \"town-77053\": {\n          value: \"16604\",\n          latitude: 48.6925,\n          longitude: 2.6111111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Brie-Comte-Robert (77053)</span><br />Population : 16604\"\n          }\n        },\n        \"town-97120\": {\n          value: \"16550\",\n          latitude: 16.241111111111,\n          longitude: -61.533055555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pointe-Ã -Pitre (97120)</span><br />Population : 16550\"\n          }\n        },\n        \"town-29151\": {\n          value: \"16547\",\n          latitude: 48.5775,\n          longitude: -3.8277777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Morlaix (29151)</span><br />Population : 16547\"\n          }\n        },\n        \"town-95476\": {\n          value: \"16537\",\n          latitude: 49.059166666667,\n          longitude: 2.0625,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Osny (95476)</span><br />Population : 16537\"\n          }\n        },\n        \"town-78335\": {\n          value: \"16534\",\n          latitude: 48.993333333333,\n          longitude: 1.7358333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Limay (78335)</span><br />Population : 16534\"\n          }\n        },\n        \"town-34154\": {\n          value: \"16504\",\n          latitude: 43.616388888889,\n          longitude: 4.0075,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mauguio (34154)</span><br />Population : 16504\"\n          }\n        },\n        \"town-37214\": {\n          value: \"16503\",\n          latitude: 47.402777777778,\n          longitude: 0.67805555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Cyr-sur-Loire (37214)</span><br />Population : 16503\"\n          }\n        },\n        \"town-57757\": {\n          value: \"16475\",\n          latitude: 49.358888888889,\n          longitude: 6.1886111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Yutz (57757)</span><br />Population : 16475\"\n          }\n        },\n        \"town-33167\": {\n          value: \"16457\",\n          latitude: 44.836388888889,\n          longitude: -0.52583333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Floirac (33167)</span><br />Population : 16457\"\n          }\n        },\n        \"town-09225\": {\n          value: \"16450\",\n          latitude: 43.116388888889,\n          longitude: 1.6108333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pamiers (09225)</span><br />Population : 16450\"\n          }\n        },\n        \"town-95637\": {\n          value: \"16443\",\n          latitude: 49.034444444444,\n          longitude: 2.0319444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VaurÃ©al (95637)</span><br />Population : 16443\"\n          }\n        },\n        \"town-31424\": {\n          value: \"16442\",\n          latitude: 43.565555555556,\n          longitude: 1.2963888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Plaisance-du-Touch (31424)</span><br />Population : 16442\"\n          }\n        },\n        \"town-50602\": {\n          value: \"16377\",\n          latitude: 49.640833333333,\n          longitude: -1.5788888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tourlaville (50602)</span><br />Population : 16377\"\n          }\n        },\n        \"town-59569\": {\n          value: \"16363\",\n          latitude: 50.363055555556,\n          longitude: 3.1130555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sin-le-Noble (59569)</span><br />Population : 16363\"\n          }\n        },\n        \"town-38382\": {\n          value: \"16355\",\n          latitude: 45.231666666667,\n          longitude: 5.6830555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Ã‰grÃ¨ve (38382)</span><br />Population : 16355\"\n          }\n        },\n        \"town-44069\": {\n          value: \"16263\",\n          latitude: 47.328055555556,\n          longitude: -2.4291666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">GuÃ©rande (44069)</span><br />Population : 16263\"\n          }\n        },\n        \"town-28218\": {\n          value: \"16262\",\n          latitude: 48.438333333333,\n          longitude: 1.465,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">LucÃ© (28218)</span><br />Population : 16262\"\n          }\n        },\n        \"town-72154\": {\n          value: \"16249\",\n          latitude: 47.699722222222,\n          longitude: -0.076111111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La FlÃ¨che (72154)</span><br />Population : 16249\"\n          }\n        },\n        \"town-91471\": {\n          value: \"16231\",\n          latitude: 48.698055555556,\n          longitude: 2.1875,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Orsay (91471)</span><br />Population : 16231\"\n          }\n        },\n        \"town-78686\": {\n          value: \"16224\",\n          latitude: 48.8,\n          longitude: 2.1722222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Viroflay (78686)</span><br />Population : 16224\"\n          }\n        },\n        \"town-97115\": {\n          value: \"16191\",\n          latitude: 16.271666666667,\n          longitude: -61.632777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lamentin (97115)</span><br />Population : 16191\"\n          }\n        },\n        \"town-74256\": {\n          value: \"16184\",\n          latitude: 45.936388888889,\n          longitude: 6.6319444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sallanches (74256)</span><br />Population : 16184\"\n          }\n        },\n        \"town-30032\": {\n          value: \"16183\",\n          latitude: 43.807222222222,\n          longitude: 4.6433333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Beaucaire (30032)</span><br />Population : 16183\"\n          }\n        },\n        \"town-34129\": {\n          value: \"16166\",\n          latitude: 43.568888888889,\n          longitude: 3.9086111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lattes (34129)</span><br />Population : 16166\"\n          }\n        },\n        \"town-54528\": {\n          value: \"16080\",\n          latitude: 48.675,\n          longitude: 5.8916666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Toul (54528)</span><br />Population : 16080\"\n          }\n        },\n        \"town-31157\": {\n          value: \"16042\",\n          latitude: 43.537777777778,\n          longitude: 1.3436111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cugnaux (31157)</span><br />Population : 16042\"\n          }\n        },\n        \"town-38193\": {\n          value: \"15980\",\n          latitude: 45.619444444444,\n          longitude: 5.2330555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">L'Isle-d'Abeau (38193)</span><br />Population : 15980\"\n          }\n        },\n        \"town-35051\": {\n          value: \"15975\",\n          latitude: 48.120833333333,\n          longitude: -1.6036111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cesson-SÃ©vignÃ© (35051)</span><br />Population : 15975\"\n          }\n        },\n        \"town-29103\": {\n          value: \"15903\",\n          latitude: 48.450833333333,\n          longitude: -4.2494444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Landerneau (29103)</span><br />Population : 15903\"\n          }\n        },\n        \"town-42147\": {\n          value: \"15899\",\n          latitude: 45.6075,\n          longitude: 4.0652777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montbrison (42147)</span><br />Population : 15899\"\n          }\n        },\n        \"town-19272\": {\n          value: \"15838\",\n          latitude: 45.265833333333,\n          longitude: 1.7722222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tulle (19272)</span><br />Population : 15838\"\n          }\n        },\n        \"town-61169\": {\n          value: \"15837\",\n          latitude: 48.748333333333,\n          longitude: -0.56944444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Flers (61169)</span><br />Population : 15837\"\n          }\n        },\n        \"town-57306\": {\n          value: \"15835\",\n          latitude: 49.329722222222,\n          longitude: 6.0619444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Hayange (57306)</span><br />Population : 15835\"\n          }\n        },\n        \"town-91645\": {\n          value: \"15830\",\n          latitude: 48.7475,\n          longitude: 2.2627777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VerriÃ¨res-le-Buisson (91645)</span><br />Population : 15830\"\n          }\n        },\n        \"town-94015\": {\n          value: \"15825\",\n          latitude: 48.841111111111,\n          longitude: 2.5222222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bry-sur-Marne (94015)</span><br />Population : 15825\"\n          }\n        },\n        \"town-64260\": {\n          value: \"15802\",\n          latitude: 43.358611111111,\n          longitude: -1.7744444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Hendaye (64260)</span><br />Population : 15802\"\n          }\n        },\n        \"town-62108\": {\n          value: \"15783\",\n          latitude: 50.408333333333,\n          longitude: 1.5927777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Berck (62108)</span><br />Population : 15783\"\n          }\n        },\n        \"town-77337\": {\n          value: \"15782\",\n          latitude: 48.854722222222,\n          longitude: 2.6288888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Noisiel (77337)</span><br />Population : 15782\"\n          }\n        },\n        \"town-85109\": {\n          value: \"15727\",\n          latitude: 46.871111111111,\n          longitude: -1.0136111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Herbiers (85109)</span><br />Population : 15727\"\n          }\n        },\n        \"town-77186\": {\n          value: \"15665\",\n          latitude: 48.408888888889,\n          longitude: 2.7016666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fontainebleau (77186)</span><br />Population : 15665\"\n          }\n        },\n        \"town-13039\": {\n          value: \"15662\",\n          latitude: 43.436388888889,\n          longitude: 4.9452777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fos-sur-Mer (13039)</span><br />Population : 15662\"\n          }\n        },\n        \"town-37233\": {\n          value: \"15651\",\n          latitude: 47.390833333333,\n          longitude: 0.72805555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Pierre-des-Corps (37233)</span><br />Population : 15651\"\n          }\n        },\n        \"town-71014\": {\n          value: \"15630\",\n          latitude: 46.951111111111,\n          longitude: 4.2986111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Autun (71014)</span><br />Population : 15630\"\n          }\n        },\n        \"town-78124\": {\n          value: \"15614\",\n          latitude: 48.908055555556,\n          longitude: 2.1780555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CarriÃ¨res-sur-Seine (78124)</span><br />Population : 15614\"\n          }\n        },\n        \"town-45208\": {\n          value: \"15583\",\n          latitude: 47.996944444444,\n          longitude: 2.7325,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montargis (45208)</span><br />Population : 15583\"\n          }\n        },\n        \"town-78642\": {\n          value: \"15581\",\n          latitude: 48.979722222222,\n          longitude: 1.9738888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Verneuil-sur-Seine (78642)</span><br />Population : 15581\"\n          }\n        },\n        \"town-56083\": {\n          value: \"15545\",\n          latitude: 47.804166666667,\n          longitude: -3.2788888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Hennebont (56083)</span><br />Population : 15545\"\n          }\n        },\n        \"town-29046\": {\n          value: \"15540\",\n          latitude: 48.092222222222,\n          longitude: -4.3302777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Douarnenez (29046)</span><br />Population : 15540\"\n          }\n        },\n        \"town-33056\": {\n          value: \"15508\",\n          latitude: 44.910555555556,\n          longitude: -0.6375,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Blanquefort (33056)</span><br />Population : 15508\"\n          }\n        },\n        \"town-45302\": {\n          value: \"15423\",\n          latitude: 47.951388888889,\n          longitude: 1.8802777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saran (45302)</span><br />Population : 15423\"\n          }\n        },\n        \"town-78418\": {\n          value: \"15412\",\n          latitude: 48.908611111111,\n          longitude: 2.1494444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montesson (78418)</span><br />Population : 15412\"\n          }\n        },\n        \"town-78123\": {\n          value: \"15389\",\n          latitude: 48.947777777778,\n          longitude: 2.0386111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CarriÃ¨res-sous-Poissy (78123)</span><br />Population : 15389\"\n          }\n        },\n        \"town-34057\": {\n          value: \"15326\",\n          latitude: 43.636111111111,\n          longitude: 3.9013888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Castelnau-le-Lez (34057)</span><br />Population : 15326\"\n          }\n        },\n        \"town-76157\": {\n          value: \"15281\",\n          latitude: 49.440277777778,\n          longitude: 1.0252777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Canteleu (76157)</span><br />Population : 15281\"\n          }\n        },\n        \"town-06161\": {\n          value: \"15258\",\n          latitude: 43.658055555556,\n          longitude: 7.1213888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeneuve-Loubet (06161)</span><br />Population : 15258\"\n          }\n        },\n        \"town-45155\": {\n          value: \"15254\",\n          latitude: 47.688888888889,\n          longitude: 2.6294444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gien (45155)</span><br />Population : 15254\"\n          }\n        },\n        \"town-62765\": {\n          value: \"15231\",\n          latitude: 50.748333333333,\n          longitude: 2.2608333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Omer (62765)</span><br />Population : 15231\"\n          }\n        },\n        \"town-42186\": {\n          value: \"15153\",\n          latitude: 45.529444444444,\n          longitude: 4.6169444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rive-de-Gier (42186)</span><br />Population : 15153\"\n          }\n        },\n        \"town-54304\": {\n          value: \"15139\",\n          latitude: 48.685555555556,\n          longitude: 6.1522222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Laxou (54304)</span><br />Population : 15139\"\n          }\n        },\n        \"town-65286\": {\n          value: \"15102\",\n          latitude: 43.095,\n          longitude: -0.045277777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lourdes (65286)</span><br />Population : 15102\"\n          }\n        },\n        \"town-25031\": {\n          value: \"15094\",\n          latitude: 47.482777777778,\n          longitude: 6.8397222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Audincourt (25031)</span><br />Population : 15094\"\n          }\n        },\n        \"town-33075\": {\n          value: \"15082\",\n          latitude: 44.882777777778,\n          longitude: -0.6125,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bruges (33075)</span><br />Population : 15082\"\n          }\n        },\n        \"town-61006\": {\n          value: \"15082\",\n          latitude: 48.744444444444,\n          longitude: -0.020277777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Argentan (61006)</span><br />Population : 15082\"\n          }\n        },\n        \"town-13027\": {\n          value: \"15079\",\n          latitude: 43.8825,\n          longitude: 4.855,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teaurenard (13027)</span><br />Population : 15079\"\n          }\n        },\n        \"town-95199\": {\n          value: \"15075\",\n          latitude: 49.0275,\n          longitude: 2.3266666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Domont (95199)</span><br />Population : 15075\"\n          }\n        },\n        \"town-85092\": {\n          value: \"15043\",\n          latitude: 46.466944444444,\n          longitude: -0.80638888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fontenay-le-Comte (85092)</span><br />Population : 15043\"\n          }\n        },\n        \"town-02168\": {\n          value: \"15020\",\n          latitude: 49.046388888889,\n          longitude: 3.4030555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teau-Thierry (02168)</span><br />Population : 15020\"\n          }\n        },\n        \"town-97125\": {\n          value: \"14998\",\n          latitude: 16.251388888889,\n          longitude: -61.273888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-FranÃ§ois (97125)</span><br />Population : 14998\"\n          }\n        },\n        \"town-95563\": {\n          value: \"14962\",\n          latitude: 49.016944444444,\n          longitude: 2.2463888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Leu-la-ForÃªt (95563)</span><br />Population : 14962\"\n          }\n        },\n        \"town-93013\": {\n          value: \"14943\",\n          latitude: 48.934444444444,\n          longitude: 2.4244444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Bourget (93013)</span><br />Population : 14943\"\n          }\n        },\n        \"town-77131\": {\n          value: \"14920\",\n          latitude: 48.815555555556,\n          longitude: 3.0836111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Coulommiers (77131)</span><br />Population : 14920\"\n          }\n        },\n        \"town-83116\": {\n          value: \"14907\",\n          latitude: 43.453333333333,\n          longitude: 5.8619444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Maximin-la-Sainte-Baume (83116)</span><br />Population : 14907\"\n          }\n        },\n        \"town-68154\": {\n          value: \"14903\",\n          latitude: 47.782222222222,\n          longitude: 7.3480555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Illzach (68154)</span><br />Population : 14903\"\n          }\n        },\n        \"town-85194\": {\n          value: \"14888\",\n          latitude: 46.496388888889,\n          longitude: -1.7847222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Sables-d'Olonne (85194)</span><br />Population : 14888\"\n          }\n        },\n        \"town-56178\": {\n          value: \"14860\",\n          latitude: 48.068611111111,\n          longitude: -2.9627777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pontivy (56178)</span><br />Population : 14860\"\n          }\n        },\n        \"town-54431\": {\n          value: \"14832\",\n          latitude: 48.904444444444,\n          longitude: 6.0541666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pont-Ã -Mousson (54431)</span><br />Population : 14832\"\n          }\n        },\n        \"town-59043\": {\n          value: \"14772\",\n          latitude: 50.7375,\n          longitude: 2.7338888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bailleul (59043)</span><br />Population : 14772\"\n          }\n        },\n        \"town-91326\": {\n          value: \"14756\",\n          latitude: 48.688333333333,\n          longitude: 2.3775,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Juvisy-sur-Orge (91326)</span><br />Population : 14756\"\n          }\n        },\n        \"town-54578\": {\n          value: \"14753\",\n          latitude: 48.673055555556,\n          longitude: 6.1547222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villers-lÃ¨s-Nancy (54578)</span><br />Population : 14753\"\n          }\n        },\n        \"town-62643\": {\n          value: \"14717\",\n          latitude: 50.703888888889,\n          longitude: 1.5938888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Outreau (62643)</span><br />Population : 14717\"\n          }\n        },\n        \"town-54323\": {\n          value: \"14707\",\n          latitude: 49.519722222222,\n          longitude: 5.7605555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Longwy (54323)</span><br />Population : 14707\"\n          }\n        },\n        \"town-77258\": {\n          value: \"14697\",\n          latitude: 48.836111111111,\n          longitude: 2.6277777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lognes (77258)</span><br />Population : 14697\"\n          }\n        },\n        \"town-94069\": {\n          value: \"14647\",\n          latitude: 48.818333333333,\n          longitude: 2.4347222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Maurice (94069)</span><br />Population : 14647\"\n          }\n        },\n        \"town-59139\": {\n          value: \"14632\",\n          latitude: 50.125,\n          longitude: 3.4116666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Caudry (59139)</span><br />Population : 14632\"\n          }\n        },\n        \"town-23096\": {\n          value: \"14577\",\n          latitude: 46.170555555556,\n          longitude: 1.8683333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">GuÃ©ret (23096)</span><br />Population : 14577\"\n          }\n        },\n        \"town-59286\": {\n          value: \"14569\",\n          latitude: 50.609166666667,\n          longitude: 2.9869444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Haubourdin (59286)</span><br />Population : 14569\"\n          }\n        },\n        \"town-95539\": {\n          value: \"14487\",\n          latitude: 48.998611111111,\n          longitude: 2.3569444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Brice-sous-ForÃªt (95539)</span><br />Population : 14487\"\n          }\n        },\n        \"town-63178\": {\n          value: \"14475\",\n          latitude: 45.544166666667,\n          longitude: 3.2488888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Issoire (63178)</span><br />Population : 14475\"\n          }\n        },\n        \"town-44131\": {\n          value: \"14450\",\n          latitude: 47.115555555556,\n          longitude: -2.1033333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pornic (44131)</span><br />Population : 14450\"\n          }\n        },\n        \"town-42279\": {\n          value: \"14425\",\n          latitude: 45.499444444444,\n          longitude: 4.24,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Just-Saint-Rambert (42279)</span><br />Population : 14425\"\n          }\n        },\n        \"town-95427\": {\n          value: \"14423\",\n          latitude: 48.973611111111,\n          longitude: 2.3458333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montmagny (95427)</span><br />Population : 14423\"\n          }\n        },\n        \"town-68376\": {\n          value: \"14403\",\n          latitude: 47.8075,\n          longitude: 7.3369444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Wittenheim (68376)</span><br />Population : 14403\"\n          }\n        },\n        \"town-22187\": {\n          value: \"14393\",\n          latitude: 48.534444444444,\n          longitude: -2.7708333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">PlÃ©rin (22187)</span><br />Population : 14393\"\n          }\n        },\n        \"town-37208\": {\n          value: \"14375\",\n          latitude: 47.366666666667,\n          longitude: 0.72666666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Avertin (37208)</span><br />Population : 14375\"\n          }\n        },\n        \"town-60176\": {\n          value: \"14364\",\n          latitude: 49.234444444444,\n          longitude: 2.8875,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CrÃ©py-en-Valois (60176)</span><br />Population : 14364\"\n          }\n        },\n        \"town-59291\": {\n          value: \"14358\",\n          latitude: 50.248055555556,\n          longitude: 3.9244444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Hautmont (59291)</span><br />Population : 14358\"\n          }\n        },\n        \"town-02738\": {\n          value: \"14320\",\n          latitude: 49.655833333333,\n          longitude: 3.2872222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tergnier (02738)</span><br />Population : 14320\"\n          }\n        },\n        \"town-01004\": {\n          value: \"14316\",\n          latitude: 45.958055555556,\n          longitude: 5.3577777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AmbÃ©rieu-en-Bugey (01004)</span><br />Population : 14316\"\n          }\n        },\n        \"town-85166\": {\n          value: \"14316\",\n          latitude: 46.536111111111,\n          longitude: -1.7727777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Olonne-sur-Mer (85166)</span><br />Population : 14316\"\n          }\n        },\n        \"town-77014\": {\n          value: \"14287\",\n          latitude: 48.408888888889,\n          longitude: 2.725,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Avon (77014)</span><br />Population : 14287\"\n          }\n        },\n        \"town-53147\": {\n          value: \"14264\",\n          latitude: 48.303055555556,\n          longitude: -0.61361111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mayenne (53147)</span><br />Population : 14264\"\n          }\n        },\n        \"town-21166\": {\n          value: \"14233\",\n          latitude: 47.291111111111,\n          longitude: 5.0072222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChenÃ´ve (21166)</span><br />Population : 14233\"\n          }\n        },\n        \"town-93062\": {\n          value: \"14194\",\n          latitude: 48.899166666667,\n          longitude: 2.5230555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Raincy (93062)</span><br />Population : 14194\"\n          }\n        },\n        \"town-84019\": {\n          value: \"14092\",\n          latitude: 44.280277777778,\n          longitude: 4.7488888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BollÃ¨ne (84019)</span><br />Population : 14092\"\n          }\n        },\n        \"town-28088\": {\n          value: \"14035\",\n          latitude: 48.070833333333,\n          longitude: 1.3377777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teaudun (28088)</span><br />Population : 14035\"\n          }\n        },\n        \"town-13015\": {\n          value: \"14028\",\n          latitude: 43.454444444444,\n          longitude: 5.4144444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bouc-Bel-Air (13015)</span><br />Population : 14028\"\n          }\n        },\n        \"town-91182\": {\n          value: \"13968\",\n          latitude: 48.618055555556,\n          longitude: 2.4069444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Courcouronnes (91182)</span><br />Population : 13968\"\n          }\n        },\n        \"town-97230\": {\n          value: \"13965\",\n          latitude: 14.738611111111,\n          longitude: -60.963055555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La TrinitÃ© (97230)</span><br />Population : 13965\"\n          }\n        },\n        \"town-60471\": {\n          value: \"13907\",\n          latitude: 49.581111111111,\n          longitude: 2.9988888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Noyon (60471)</span><br />Population : 13907\"\n          }\n        },\n        \"town-74225\": {\n          value: \"13892\",\n          latitude: 45.866111111111,\n          longitude: 5.9444444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rumilly (74225)</span><br />Population : 13892\"\n          }\n        },\n        \"town-78073\": {\n          value: \"13880\",\n          latitude: 48.801388888889,\n          longitude: 2.0316666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bois-d'Arcy (78073)</span><br />Population : 13880\"\n          }\n        },\n        \"town-03095\": {\n          value: \"13873\",\n          latitude: 46.134444444444,\n          longitude: 3.4563888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cusset (03095)</span><br />Population : 13873\"\n          }\n        },\n        \"town-29075\": {\n          value: \"13845\",\n          latitude: 48.433611111111,\n          longitude: -4.4008333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Guipavas (29075)</span><br />Population : 13845\"\n          }\n        },\n        \"town-31044\": {\n          value: \"13832\",\n          latitude: 43.610277777778,\n          longitude: 1.4986111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Balma (31044)</span><br />Population : 13832\"\n          }\n        },\n        \"town-51649\": {\n          value: \"13826\",\n          latitude: 48.724722222222,\n          longitude: 4.5844444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vitry-le-FranÃ§ois (51649)</span><br />Population : 13826\"\n          }\n        },\n        \"town-85060\": {\n          value: \"13802\",\n          latitude: 46.504166666667,\n          longitude: -1.7372222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teau-d'Olonne (85060)</span><br />Population : 13802\"\n          }\n        },\n        \"town-10323\": {\n          value: \"13774\",\n          latitude: 48.515833333333,\n          longitude: 3.7266666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Romilly-sur-Seine (10323)</span><br />Population : 13774\"\n          }\n        },\n        \"town-57160\": {\n          value: \"13770\",\n          latitude: 49.205277777778,\n          longitude: 6.6958333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Creutzwald (57160)</span><br />Population : 13770\"\n          }\n        },\n        \"town-30258\": {\n          value: \"13767\",\n          latitude: 43.677777777778,\n          longitude: 4.4311111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Gilles (30258)</span><br />Population : 13767\"\n          }\n        },\n        \"town-59421\": {\n          value: \"13752\",\n          latitude: 50.703333333333,\n          longitude: 3.1405555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mouvaux (59421)</span><br />Population : 13752\"\n          }\n        },\n        \"town-50218\": {\n          value: \"13723\",\n          latitude: 48.838055555556,\n          longitude: -1.5869444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Granville (50218)</span><br />Population : 13723\"\n          }\n        },\n        \"town-91386\": {\n          value: \"13710\",\n          latitude: 48.565277777778,\n          longitude: 2.4361111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mennecy (91386)</span><br />Population : 13710\"\n          }\n        },\n        \"town-14047\": {\n          value: \"13702\",\n          latitude: 49.278611111111,\n          longitude: -0.70388888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bayeux (14047)</span><br />Population : 13702\"\n          }\n        },\n        \"town-13014\": {\n          value: \"13696\",\n          latitude: 43.475555555556,\n          longitude: 5.1680555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Berre-l'Ã‰tang (13014)</span><br />Population : 13696\"\n          }\n        },\n        \"town-27701\": {\n          value: \"13688\",\n          latitude: 49.274444444444,\n          longitude: 1.2102777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Val-de-Reuil (27701)</span><br />Population : 13688\"\n          }\n        },\n        \"town-06012\": {\n          value: \"13684\",\n          latitude: 43.741944444444,\n          longitude: 7.4236111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Beausoleil (06012)</span><br />Population : 13684\"\n          }\n        },\n        \"town-97404\": {\n          value: \"13659\",\n          latitude: -21.266111111111,\n          longitude: 55.366944444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">L'Ã‰tang-SalÃ© (97404)</span><br />Population : 13659\"\n          }\n        },\n        \"town-95019\": {\n          value: \"13656\",\n          latitude: 48.987222222222,\n          longitude: 2.4166666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Arnouville (95019)</span><br />Population : 13656\"\n          }\n        },\n        \"town-59014\": {\n          value: \"13639\",\n          latitude: 50.371388888889,\n          longitude: 3.5044444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Anzin (59014)</span><br />Population : 13639\"\n          }\n        },\n        \"town-29189\": {\n          value: \"13587\",\n          latitude: 48.3725,\n          longitude: -4.3705555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Plougastel-Daoulas (29189)</span><br />Population : 13587\"\n          }\n        },\n        \"town-81099\": {\n          value: \"13558\",\n          latitude: 43.900555555556,\n          longitude: 1.8983333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gaillac (81099)</span><br />Population : 13558\"\n          }\n        },\n        \"town-03321\": {\n          value: \"13545\",\n          latitude: 46.565833333333,\n          longitude: 3.3544444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Yzeure (03321)</span><br />Population : 13545\"\n          }\n        },\n        \"town-66037\": {\n          value: \"13528\",\n          latitude: 42.705555555556,\n          longitude: 3.0072222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Canet-en-Roussillon (66037)</span><br />Population : 13528\"\n          }\n        },\n        \"town-33003\": {\n          value: \"13511\",\n          latitude: 44.924722222222,\n          longitude: -0.48666666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AmbarÃ¨s-et-Lagrave (33003)</span><br />Population : 13511\"\n          }\n        },\n        \"town-57240\": {\n          value: \"13481\",\n          latitude: 49.141666666667,\n          longitude: 6.7988888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Freyming-Merlebach (57240)</span><br />Population : 13481\"\n          }\n        },\n        \"town-60395\": {\n          value: \"13473\",\n          latitude: 49.235833333333,\n          longitude: 2.135,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MÃ©ru (60395)</span><br />Population : 13473\"\n          }\n        },\n        \"town-36088\": {\n          value: \"13452\",\n          latitude: 46.948055555556,\n          longitude: 1.9933333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Issoudun (36088)</span><br />Population : 13452\"\n          }\n        },\n        \"town-64483\": {\n          value: \"13448\",\n          latitude: 43.390277777778,\n          longitude: -1.6597222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Jean-de-Luz (64483)</span><br />Population : 13448\"\n          }\n        },\n        \"town-64129\": {\n          value: \"13439\",\n          latitude: 43.3025,\n          longitude: -0.39722222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BillÃ¨re (64129)</span><br />Population : 13439\"\n          }\n        },\n        \"town-10081\": {\n          value: \"13436\",\n          latitude: 48.311944444444,\n          longitude: 4.0444444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Chapelle-Saint-Luc (10081)</span><br />Population : 13436\"\n          }\n        },\n        \"town-59648\": {\n          value: \"13427\",\n          latitude: 50.585,\n          longitude: 3.0430555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Wattignies (59648)</span><br />Population : 13427\"\n          }\n        },\n        \"town-13108\": {\n          value: \"13426\",\n          latitude: 43.805,\n          longitude: 4.6594444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tarascon (13108)</span><br />Population : 13426\"\n          }\n        },\n        \"town-45068\": {\n          value: \"13398\",\n          latitude: 48.011666666667,\n          longitude: 2.7358333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢lette-sur-Loing (45068)</span><br />Population : 13398\"\n          }\n        },\n        \"town-26235\": {\n          value: \"13337\",\n          latitude: 44.3775,\n          longitude: 4.6961111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pierrelatte (26235)</span><br />Population : 13337\"\n          }\n        },\n        \"town-97220\": {\n          value: \"13325\",\n          latitude: 14.486666666667,\n          longitude: -60.903333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">RiviÃ¨re-Pilote (97220)</span><br />Population : 13325\"\n          }\n        },\n        \"town-68278\": {\n          value: \"13251\",\n          latitude: 47.748611111111,\n          longitude: 7.4044444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rixheim (68278)</span><br />Population : 13251\"\n          }\n        },\n        \"town-82033\": {\n          value: \"13249\",\n          latitude: 44.04,\n          longitude: 1.1069444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Castelsarrasin (82033)</span><br />Population : 13249\"\n          }\n        },\n        \"town-37003\": {\n          value: \"13242\",\n          latitude: 47.411388888889,\n          longitude: 0.9825,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Amboise (37003)</span><br />Population : 13242\"\n          }\n        },\n        \"town-83115\": {\n          value: \"13220\",\n          latitude: 43.308888888889,\n          longitude: 6.6377777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Maxime (83115)</span><br />Population : 13220\"\n          }\n        },\n        \"town-48095\": {\n          value: \"13213\",\n          latitude: 44.518333333333,\n          longitude: 3.5005555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mende (48095)</span><br />Population : 13213\"\n          }\n        },\n        \"town-57751\": {\n          value: \"13203\",\n          latitude: 49.151111111111,\n          longitude: 6.1513888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Woippy (57751)</span><br />Population : 13203\"\n          }\n        },\n        \"town-69089\": {\n          value: \"13159\",\n          latitude: 45.736388888889,\n          longitude: 4.7636111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Francheville (69089)</span><br />Population : 13159\"\n          }\n        },\n        \"town-83107\": {\n          value: \"13125\",\n          latitude: 43.443333333333,\n          longitude: 6.6377777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Roquebrune-sur-Argens (83107)</span><br />Population : 13125\"\n          }\n        },\n        \"town-68166\": {\n          value: \"13068\",\n          latitude: 47.791388888889,\n          longitude: 7.3380555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Kingersheim (68166)</span><br />Population : 13068\"\n          }\n        },\n        \"town-59367\": {\n          value: \"13067\",\n          latitude: 50.671388888889,\n          longitude: 3.2144444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lys-lez-Lannoy (59367)</span><br />Population : 13067\"\n          }\n        },\n        \"town-97221\": {\n          value: \"13040\",\n          latitude: 14.528888888889,\n          longitude: -60.981388888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">RiviÃ¨re-SalÃ©e (97221)</span><br />Population : 13040\"\n          }\n        },\n        \"town-83090\": {\n          value: \"13037\",\n          latitude: 43.139444444444,\n          longitude: 5.8469444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ollioules (83090)</span><br />Population : 13037\"\n          }\n        },\n        \"town-42044\": {\n          value: \"13023\",\n          latitude: 45.396111111111,\n          longitude: 4.325,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Chambon-Feugerolles (42044)</span><br />Population : 13023\"\n          }\n        },\n        \"town-59508\": {\n          value: \"13016\",\n          latitude: 50.753611111111,\n          longitude: 3.1202777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Roncq (59508)</span><br />Population : 13016\"\n          }\n        },\n        \"town-72264\": {\n          value: \"12989\",\n          latitude: 47.84,\n          longitude: -0.33416666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">SablÃ©-sur-Sarthe (72264)</span><br />Population : 12989\"\n          }\n        },\n        \"town-49015\": {\n          value: \"12951\",\n          latitude: 47.506944444444,\n          longitude: -0.58888888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AvrillÃ© (49015)</span><br />Population : 12951\"\n          }\n        },\n        \"town-59249\": {\n          value: \"12941\",\n          latitude: 50.017222222222,\n          longitude: 4.0533333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fourmies (59249)</span><br />Population : 12941\"\n          }\n        },\n        \"town-77333\": {\n          value: \"12907\",\n          latitude: 48.268611111111,\n          longitude: 2.6936111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nemours (77333)</span><br />Population : 12907\"\n          }\n        },\n        \"town-40279\": {\n          value: \"12904\",\n          latitude: 43.725555555556,\n          longitude: -1.0527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Paul-lÃ¨s-Dax (40279)</span><br />Population : 12904\"\n          }\n        },\n        \"town-57630\": {\n          value: \"12886\",\n          latitude: 48.734722222222,\n          longitude: 7.0538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sarrebourg (57630)</span><br />Population : 12886\"\n          }\n        },\n        \"town-12300\": {\n          value: \"12881\",\n          latitude: 44.3525,\n          longitude: 2.0341666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villefranche-de-Rouergue (12300)</span><br />Population : 12881\"\n          }\n        },\n        \"town-30351\": {\n          value: \"12872\",\n          latitude: 43.966388888889,\n          longitude: 4.7958333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villeneuve-lÃ¨s-Avignon (30351)</span><br />Population : 12872\"\n          }\n        },\n        \"town-78242\": {\n          value: \"12865\",\n          latitude: 48.813611111111,\n          longitude: 2.0486111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fontenay-le-Fleury (78242)</span><br />Population : 12865\"\n          }\n        },\n        \"town-59491\": {\n          value: \"12860\",\n          latitude: 50.389166666667,\n          longitude: 3.4858333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Raismes (59491)</span><br />Population : 12860\"\n          }\n        },\n        \"town-57206\": {\n          value: \"12829\",\n          latitude: 49.299166666667,\n          longitude: 6.1097222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fameck (57206)</span><br />Population : 12829\"\n          }\n        },\n        \"town-06152\": {\n          value: \"12803\",\n          latitude: 43.641388888889,\n          longitude: 7.0088888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Valbonne (06152)</span><br />Population : 12803\"\n          }\n        },\n        \"town-67046\": {\n          value: \"12800\",\n          latitude: 48.766388888889,\n          longitude: 7.8569444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bischwiller (67046)</span><br />Population : 12800\"\n          }\n        },\n        \"town-06104\": {\n          value: \"12700\",\n          latitude: 43.757222222222,\n          longitude: 7.4741666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Roquebrune-Cap-Martin (06104)</span><br />Population : 12700\"\n          }\n        },\n        \"town-56007\": {\n          value: \"12695\",\n          latitude: 47.667777777778,\n          longitude: -2.9825,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Auray (56007)</span><br />Population : 12695\"\n          }\n        },\n        \"town-77379\": {\n          value: \"12684\",\n          latitude: 48.558888888889,\n          longitude: 3.2994444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Provins (77379)</span><br />Population : 12684\"\n          }\n        },\n        \"town-93079\": {\n          value: \"12662\",\n          latitude: 48.964444444444,\n          longitude: 2.3441666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villetaneuse (93079)</span><br />Population : 12662\"\n          }\n        },\n        \"town-60414\": {\n          value: \"12661\",\n          latitude: 49.255555555556,\n          longitude: 2.4383333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montataire (60414)</span><br />Population : 12661\"\n          }\n        },\n        \"town-68271\": {\n          value: \"12661\",\n          latitude: 47.748333333333,\n          longitude: 7.3669444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Riedisheim (68271)</span><br />Population : 12661\"\n          }\n        },\n        \"town-14762\": {\n          value: \"12638\",\n          latitude: 48.838611111111,\n          longitude: -0.88916666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vire (14762)</span><br />Population : 12638\"\n          }\n        },\n        \"town-44036\": {\n          value: \"12630\",\n          latitude: 47.716944444444,\n          longitude: -1.3761111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teaubriant (44036)</span><br />Population : 12630\"\n          }\n        },\n        \"town-82112\": {\n          value: \"12620\",\n          latitude: 44.104722222222,\n          longitude: 1.0852777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Moissac (82112)</span><br />Population : 12620\"\n          }\n        },\n        \"town-57660\": {\n          value: \"12609\",\n          latitude: 49.2,\n          longitude: 6.9291666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Stiring-Wendel (57660)</span><br />Population : 12609\"\n          }\n        },\n        \"town-59574\": {\n          value: \"12602\",\n          latitude: 50.3575,\n          longitude: 3.2802777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Somain (59574)</span><br />Population : 12602\"\n          }\n        },\n        \"town-77407\": {\n          value: \"12602\",\n          latitude: 48.532777777778,\n          longitude: 2.5447222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Fargeau-Ponthierry (77407)</span><br />Population : 12602\"\n          }\n        },\n        \"town-49353\": {\n          value: \"12571\",\n          latitude: 47.446111111111,\n          longitude: -0.46638888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">TrÃ©lazÃ© (49353)</span><br />Population : 12571\"\n          }\n        },\n        \"town-64348\": {\n          value: \"12564\",\n          latitude: 43.315,\n          longitude: -0.41083333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lons (64348)</span><br />Population : 12564\"\n          }\n        },\n        \"town-22093\": {\n          value: \"12539\",\n          latitude: 48.468611111111,\n          longitude: -2.5177777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lamballe (22093)</span><br />Population : 12539\"\n          }\n        },\n        \"town-44154\": {\n          value: \"12521\",\n          latitude: 47.246388888889,\n          longitude: -2.1669444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Brevin-les-Pins (44154)</span><br />Population : 12521\"\n          }\n        },\n        \"town-40046\": {\n          value: \"12492\",\n          latitude: 44.393055555556,\n          longitude: -1.1638888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Biscarrosse (40046)</span><br />Population : 12492\"\n          }\n        },\n        \"town-59152\": {\n          value: \"12469\",\n          latitude: 50.761111111111,\n          longitude: 3.0077777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Comines (59152)</span><br />Population : 12469\"\n          }\n        },\n        \"town-62186\": {\n          value: \"12469\",\n          latitude: 50.441944444444,\n          longitude: 2.7244444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bully-les-Mines (62186)</span><br />Population : 12469\"\n          }\n        },\n        \"town-77479\": {\n          value: \"12459\",\n          latitude: 48.874166666667,\n          longitude: 2.6380555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vaires-sur-Marne (77479)</span><br />Population : 12459\"\n          }\n        },\n        \"town-62413\": {\n          value: \"12451\",\n          latitude: 50.445,\n          longitude: 2.9058333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Harnes (62413)</span><br />Population : 12451\"\n          }\n        },\n        \"town-29233\": {\n          value: \"12443\",\n          latitude: 47.872777777778,\n          longitude: -3.5497222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">QuimperlÃ© (29233)</span><br />Population : 12443\"\n          }\n        },\n        \"town-59560\": {\n          value: \"12429\",\n          latitude: 50.548333333333,\n          longitude: 3.0294444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Seclin (59560)</span><br />Population : 12429\"\n          }\n        },\n        \"town-02173\": {\n          value: \"12420\",\n          latitude: 49.615555555556,\n          longitude: 3.2191666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chauny (02173)</span><br />Population : 12420\"\n          }\n        },\n        \"town-59112\": {\n          value: \"12413\",\n          latitude: 50.398333333333,\n          longitude: 3.5394444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bruay-sur-l'Escaut (59112)</span><br />Population : 12413\"\n          }\n        },\n        \"town-76057\": {\n          value: \"12371\",\n          latitude: 49.544444444444,\n          longitude: 0.95361111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Barentin (76057)</span><br />Population : 12371\"\n          }\n        },\n        \"town-67437\": {\n          value: \"12354\",\n          latitude: 48.741388888889,\n          longitude: 7.3619444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saverne (67437)</span><br />Population : 12354\"\n          }\n        },\n        \"town-69277\": {\n          value: \"12340\",\n          latitude: 45.731388888889,\n          longitude: 5.0022222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Genas (69277)</span><br />Population : 12340\"\n          }\n        },\n        \"town-76758\": {\n          value: \"12328\",\n          latitude: 49.616944444444,\n          longitude: 0.75305555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Yvetot (76758)</span><br />Population : 12328\"\n          }\n        },\n        \"town-31446\": {\n          value: \"12327\",\n          latitude: 43.546111111111,\n          longitude: 1.4755555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ramonville-Saint-Agne (31446)</span><br />Population : 12327\"\n          }\n        },\n        \"town-78015\": {\n          value: \"12327\",\n          latitude: 48.980833333333,\n          longitude: 2.0583333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AndrÃ©sy (78015)</span><br />Population : 12327\"\n          }\n        },\n        \"town-74042\": {\n          value: \"12321\",\n          latitude: 46.078888888889,\n          longitude: 6.4008333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bonneville (74042)</span><br />Population : 12321\"\n          }\n        },\n        \"town-62617\": {\n          value: \"12317\",\n          latitude: 50.479722222222,\n          longitude: 2.6647222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">NÅ“ux-les-Mines (62617)</span><br />Population : 12317\"\n          }\n        },\n        \"town-38485\": {\n          value: \"12293\",\n          latitude: 45.181388888889,\n          longitude: 5.6991666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Seyssinet-Pariset (38485)</span><br />Population : 12293\"\n          }\n        },\n        \"town-91432\": {\n          value: \"12248\",\n          latitude: 48.706388888889,\n          longitude: 2.3347222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Morangis (91432)</span><br />Population : 12248\"\n          }\n        },\n        \"town-91215\": {\n          value: \"12246\",\n          latitude: 48.693055555556,\n          longitude: 2.5158333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰pinay-sous-SÃ©nart (91215)</span><br />Population : 12246\"\n          }\n        },\n        \"town-49246\": {\n          value: \"12240\",\n          latitude: 47.424444444444,\n          longitude: -0.52527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Ponts-de-CÃ© (49246)</span><br />Population : 12240\"\n          }\n        },\n        \"town-45004\": {\n          value: \"12237\",\n          latitude: 47.973055555556,\n          longitude: 2.7702777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Amilly (45004)</span><br />Population : 12237\"\n          }\n        },\n        \"town-94074\": {\n          value: \"12228\",\n          latitude: 48.745,\n          longitude: 2.4672222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Valenton (94074)</span><br />Population : 12228\"\n          }\n        },\n        \"town-11076\": {\n          value: \"12220\",\n          latitude: 43.318055555556,\n          longitude: 1.9538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Castelnaudary (11076)</span><br />Population : 12220\"\n          }\n        },\n        \"town-07019\": {\n          value: \"12205\",\n          latitude: 44.619722222222,\n          longitude: 4.3902777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aubenas (07019)</span><br />Population : 12205\"\n          }\n        },\n        \"town-81105\": {\n          value: \"12200\",\n          latitude: 43.760833333333,\n          longitude: 1.9886111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Graulhet (81105)</span><br />Population : 12200\"\n          }\n        },\n        \"town-44172\": {\n          value: \"12187\",\n          latitude: 47.249444444444,\n          longitude: -1.4866666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Luce-sur-Loire (44172)</span><br />Population : 12187\"\n          }\n        },\n        \"town-01033\": {\n          value: \"12161\",\n          latitude: 46.1075,\n          longitude: 5.8258333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bellegarde-sur-Valserine (01033)</span><br />Population : 12161\"\n          }\n        },\n        \"town-97105\": {\n          value: \"12145\",\n          latitude: 15.996944444444,\n          longitude: -61.732777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Basse-Terre (97105)</span><br />Population : 12145\"\n          }\n        },\n        \"town-53062\": {\n          value: \"12143\",\n          latitude: 47.828611111111,\n          longitude: -0.7027777777777801,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teau-Gontier (53062)</span><br />Population : 12143\"\n          }\n        },\n        \"town-40312\": {\n          value: \"12141\",\n          latitude: 43.540555555556,\n          longitude: -1.4613888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tarnos (40312)</span><br />Population : 12141\"\n          }\n        },\n        \"town-74243\": {\n          value: \"12125\",\n          latitude: 46.144166666667,\n          longitude: 6.0841666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Julien-en-Genevois (74243)</span><br />Population : 12125\"\n          }\n        },\n        \"town-78688\": {\n          value: \"12122\",\n          latitude: 48.758333333333,\n          longitude: 2.0508333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Voisins-le-Bretonneux (78688)</span><br />Population : 12122\"\n          }\n        },\n        \"town-05023\": {\n          value: \"12094\",\n          latitude: 44.895833333333,\n          longitude: 6.635,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">BrianÃ§on (05023)</span><br />Population : 12094\"\n          }\n        },\n        \"town-31561\": {\n          value: \"12093\",\n          latitude: 43.656388888889,\n          longitude: 1.4844444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">L'Union (31561)</span><br />Population : 12093\"\n          }\n        },\n        \"town-78029\": {\n          value: \"12092\",\n          latitude: 48.958333333333,\n          longitude: 1.855,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aubergenville (78029)</span><br />Population : 12092\"\n          }\n        },\n        \"town-84003\": {\n          value: \"12064\",\n          latitude: 43.876111111111,\n          longitude: 5.3963888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Apt (84003)</span><br />Population : 12064\"\n          }\n        },\n        \"town-62570\": {\n          value: \"12057\",\n          latitude: 50.402222222222,\n          longitude: 2.8658333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MÃ©ricourt (62570)</span><br />Population : 12057\"\n          }\n        },\n        \"town-29212\": {\n          value: \"12012\",\n          latitude: 48.382222222222,\n          longitude: -4.6202777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">PlouzanÃ© (29212)</span><br />Population : 12012\"\n          }\n        },\n        \"town-95313\": {\n          value: \"11979\",\n          latitude: 49.111111111111,\n          longitude: 2.2227777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">L'Isle-Adam (95313)</span><br />Population : 11979\"\n          }\n        },\n        \"town-83112\": {\n          value: \"11972\",\n          latitude: 43.183611111111,\n          longitude: 5.7086111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Cyr-sur-Mer (83112)</span><br />Population : 11972\"\n          }\n        },\n        \"town-95210\": {\n          value: \"11959\",\n          latitude: 48.969722222222,\n          longitude: 2.3080555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Enghien-les-Bains (95210)</span><br />Population : 11959\"\n          }\n        },\n        \"town-59383\": {\n          value: \"11958\",\n          latitude: 50.348888888889,\n          longitude: 3.5441666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marly (59383)</span><br />Population : 11958\"\n          }\n        },\n        \"town-60509\": {\n          value: \"11948\",\n          latitude: 49.301111111111,\n          longitude: 2.6036111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pont-Sainte-Maxence (60509)</span><br />Population : 11948\"\n          }\n        },\n        \"town-76114\": {\n          value: \"11941\",\n          latitude: 49.572222222222,\n          longitude: 0.4725,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bolbec (76114)</span><br />Population : 11941\"\n          }\n        },\n        \"town-69283\": {\n          value: \"11931\",\n          latitude: 45.663055555556,\n          longitude: 4.9530555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mions (69283)</span><br />Population : 11931\"\n          }\n        },\n        \"town-13081\": {\n          value: \"11928\",\n          latitude: 43.487777777778,\n          longitude: 5.2322222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rognac (13081)</span><br />Population : 11928\"\n          }\n        },\n        \"town-74208\": {\n          value: \"11917\",\n          latitude: 45.923611111111,\n          longitude: 6.6863888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Passy (74208)</span><br />Population : 11917\"\n          }\n        },\n        \"town-74208\": {\n          value: \"11917\",\n          latitude: 45.923611111111,\n          longitude: 6.6863888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Passy (74208)</span><br />Population : 11917\"\n          }\n        },\n        \"town-28404\": {\n          value: \"11881\",\n          latitude: 48.720833333333,\n          longitude: 1.3605555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vernouillet (28404)</span><br />Population : 11881\"\n          }\n        },\n        \"town-13007\": {\n          value: \"11870\",\n          latitude: 43.369444444444,\n          longitude: 5.6313888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Auriol (13007)</span><br />Population : 11870\"\n          }\n        },\n        \"town-59273\": {\n          value: \"11868\",\n          latitude: 50.986388888889,\n          longitude: 2.1275,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gravelines (59273)</span><br />Population : 11868\"\n          }\n        },\n        \"town-27284\": {\n          value: \"11864\",\n          latitude: 49.280555555556,\n          longitude: 1.7763888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gisors (27284)</span><br />Population : 11864\"\n          }\n        },\n        \"town-97402\": {\n          value: \"11860\",\n          latitude: -20.995277777778,\n          longitude: 55.676111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bras-Panon (97402)</span><br />Population : 11860\"\n          }\n        },\n        \"town-87154\": {\n          value: \"11831\",\n          latitude: 45.887222222222,\n          longitude: 0.90111111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Junien (87154)</span><br />Population : 11831\"\n          }\n        },\n        \"town-83098\": {\n          value: \"11830\",\n          latitude: 43.105555555556,\n          longitude: 6.0233333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Pradet (83098)</span><br />Population : 11830\"\n          }\n        },\n        \"town-13026\": {\n          value: \"11796\",\n          latitude: 43.383055555556,\n          longitude: 5.1641666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ChÃ¢teauneuf-les-Martigues (13026)</span><br />Population : 11796\"\n          }\n        },\n        \"town-78624\": {\n          value: \"11777\",\n          latitude: 48.980833333333,\n          longitude: 2.0061111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Triel-sur-Seine (78624)</span><br />Population : 11777\"\n          }\n        },\n        \"town-68112\": {\n          value: \"11757\",\n          latitude: 47.9075,\n          longitude: 7.2102777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Guebwiller (68112)</span><br />Population : 11757\"\n          }\n        },\n        \"town-31483\": {\n          value: \"11753\",\n          latitude: 43.108055555556,\n          longitude: 0.7233333333333301,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Gaudens (31483)</span><br />Population : 11753\"\n          }\n        },\n        \"town-21617\": {\n          value: \"11743\",\n          latitude: 47.336388888889,\n          longitude: 5.0055555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Talant (21617)</span><br />Population : 11743\"\n          }\n        },\n        \"town-64430\": {\n          value: \"11674\",\n          latitude: 43.488055555556,\n          longitude: -0.77083333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Orthez (64430)</span><br />Population : 11674\"\n          }\n        },\n        \"town-97405\": {\n          value: \"11671\",\n          latitude: -21.355833333333,\n          longitude: 55.565833333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Petite-ÃŽle (97405)</span><br />Population : 11671\"\n          }\n        },\n        \"town-63430\": {\n          value: \"11645\",\n          latitude: 45.856388888889,\n          longitude: 3.5475,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Thiers (63430)</span><br />Population : 11645\"\n          }\n        },\n        \"town-06033\": {\n          value: \"11639\",\n          latitude: 43.7925,\n          longitude: 7.1877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Carros (06033)</span><br />Population : 11639\"\n          }\n        },\n        \"town-12176\": {\n          value: \"11639\",\n          latitude: 44.365555555556,\n          longitude: 2.5936111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Onet-le-ChÃ¢teau (12176)</span><br />Population : 11639\"\n          }\n        },\n        \"town-25580\": {\n          value: \"11633\",\n          latitude: 47.4625,\n          longitude: 6.8322222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Valentigney (25580)</span><br />Population : 11633\"\n          }\n        },\n        \"town-73179\": {\n          value: \"11620\",\n          latitude: 45.596666666667,\n          longitude: 5.8775,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Motte-Servolex (73179)</span><br />Population : 11620\"\n          }\n        },\n        \"town-76484\": {\n          value: \"11613\",\n          latitude: 49.341944444444,\n          longitude: 1.0913888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Oissel (76484)</span><br />Population : 11613\"\n          }\n        },\n        \"town-57221\": {\n          value: \"11580\",\n          latitude: 49.321388888889,\n          longitude: 6.1183333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Florange (57221)</span><br />Population : 11580\"\n          }\n        },\n        \"town-62525\": {\n          value: \"11576\",\n          latitude: 50.735555555556,\n          longitude: 2.2372222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Longuenesse (62525)</span><br />Population : 11576\"\n          }\n        },\n        \"town-10333\": {\n          value: \"11553\",\n          latitude: 48.279722222222,\n          longitude: 4.0538888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-AndrÃ©-les-Vergers (10333)</span><br />Population : 11553\"\n          }\n        },\n        \"town-22215\": {\n          value: \"11537\",\n          latitude: 48.489444444444,\n          longitude: -2.7958333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ploufragan (22215)</span><br />Population : 11537\"\n          }\n        },\n        \"town-68063\": {\n          value: \"11527\",\n          latitude: 47.806666666667,\n          longitude: 7.1758333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cernay (68063)</span><br />Population : 11527\"\n          }\n        },\n        \"town-69027\": {\n          value: \"11518\",\n          latitude: 45.673888888889,\n          longitude: 4.7541666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Brignais (69027)</span><br />Population : 11518\"\n          }\n        },\n        \"town-59527\": {\n          value: \"11505\",\n          latitude: 50.660277777778,\n          longitude: 3.0438888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-AndrÃ©-lez-Lille (59527)</span><br />Population : 11505\"\n          }\n        },\n        \"town-94060\": {\n          value: \"11494\",\n          latitude: 48.789444444444,\n          longitude: 2.5766666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Queue-en-Brie (94060)</span><br />Population : 11494\"\n          }\n        },\n        \"town-76410\": {\n          value: \"11486\",\n          latitude: 49.481944444444,\n          longitude: 1.0419444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Maromme (76410)</span><br />Population : 11486\"\n          }\n        },\n        \"town-39478\": {\n          value: \"11481\",\n          latitude: 46.387222222222,\n          longitude: 5.8633333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Claude (39478)</span><br />Population : 11481\"\n          }\n        },\n        \"town-62758\": {\n          value: \"11469\",\n          latitude: 50.725833333333,\n          longitude: 1.6322222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Martin-Boulogne (62758)</span><br />Population : 11469\"\n          }\n        },\n        \"town-64422\": {\n          value: \"11449\",\n          latitude: 43.194166666667,\n          longitude: -0.60666666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Oloron-Sainte-Marie (64422)</span><br />Population : 11449\"\n          }\n        },\n        \"town-62318\": {\n          value: \"11442\",\n          latitude: 50.517777777778,\n          longitude: 1.6405555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰taples (62318)</span><br />Population : 11442\"\n          }\n        },\n        \"town-28280\": {\n          value: \"11436\",\n          latitude: 48.321666666667,\n          longitude: 0.82166666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Nogent-le-Rotrou (28280)</span><br />Population : 11436\"\n          }\n        },\n        \"town-33005\": {\n          value: \"11415\",\n          latitude: 44.7425,\n          longitude: -1.0902777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Andernos-les-Bains (33005)</span><br />Population : 11415\"\n          }\n        },\n        \"town-67365\": {\n          value: \"11410\",\n          latitude: 48.541666666667,\n          longitude: 7.7094444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ostwald (67365)</span><br />Population : 11410\"\n          }\n        },\n        \"town-13097\": {\n          value: \"11396\",\n          latitude: 43.639722222222,\n          longitude: 4.8125,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Martin-de-Crau (13097)</span><br />Population : 11396\"\n          }\n        },\n        \"town-38317\": {\n          value: \"11386\",\n          latitude: 45.123055555556,\n          longitude: 5.6980555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Pont-de-Claix (38317)</span><br />Population : 11386\"\n          }\n        },\n        \"town-74133\": {\n          value: \"11345\",\n          latitude: 46.185,\n          longitude: 6.2075,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gaillard (74133)</span><br />Population : 11345\"\n          }\n        },\n        \"town-38474\": {\n          value: \"11317\",\n          latitude: 45.205,\n          longitude: 5.665,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sassenage (38474)</span><br />Population : 11317\"\n          }\n        },\n        \"town-2A247\": {\n          value: \"11308\",\n          latitude: 41.590833333333,\n          longitude: 9.279722222222199,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Porto-Vecchio (2A247)</span><br />Population : 11308\"\n          }\n        },\n        \"town-31187\": {\n          value: \"11301\",\n          latitude: 43.536111111111,\n          longitude: 1.2311111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fonsorbes (31187)</span><br />Population : 11301\"\n          }\n        },\n        \"town-83042\": {\n          value: \"11292\",\n          latitude: 43.2525,\n          longitude: 6.53,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cogolin (83042)</span><br />Population : 11292\"\n          }\n        },\n        \"town-07102\": {\n          value: \"11291\",\n          latitude: 44.934444444444,\n          longitude: 4.8747222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Guilherand-Granges (07102)</span><br />Population : 11291\"\n          }\n        },\n        \"town-07324\": {\n          value: \"11287\",\n          latitude: 45.067222222222,\n          longitude: 4.8327777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tournon-sur-RhÃ´ne (07324)</span><br />Population : 11287\"\n          }\n        },\n        \"town-31113\": {\n          value: \"11285\",\n          latitude: 43.515555555556,\n          longitude: 1.4980555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Castanet-Tolosan (31113)</span><br />Population : 11285\"\n          }\n        },\n        \"town-67348\": {\n          value: \"11284\",\n          latitude: 48.462222222222,\n          longitude: 7.4819444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Obernai (67348)</span><br />Population : 11284\"\n          }\n        },\n        \"town-22050\": {\n          value: \"11280\",\n          latitude: 48.455555555556,\n          longitude: -2.0502777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dinan (22050)</span><br />Population : 11280\"\n          }\n        },\n        \"town-33009\": {\n          value: \"11278\",\n          latitude: 44.658611111111,\n          longitude: -1.1688888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Arcachon (33009)</span><br />Population : 11278\"\n          }\n        },\n        \"town-13106\": {\n          value: \"11258\",\n          latitude: 43.398333333333,\n          longitude: 5.3658333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">SeptÃ¨mes-les-Vallons (13106)</span><br />Population : 11258\"\n          }\n        },\n        \"town-31506\": {\n          value: \"11244\",\n          latitude: 43.551388888889,\n          longitude: 1.5341666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Orens-de-Gameville (31506)</span><br />Population : 11244\"\n          }\n        },\n        \"town-63032\": {\n          value: \"11229\",\n          latitude: 45.751666666667,\n          longitude: 3.0830555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Beaumont (63032)</span><br />Population : 11229\"\n          }\n        },\n        \"town-30341\": {\n          value: \"11220\",\n          latitude: 43.693333333333,\n          longitude: 4.2761111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vauvert (30341)</span><br />Population : 11220\"\n          }\n        },\n        \"town-83130\": {\n          value: \"11214\",\n          latitude: 43.19,\n          longitude: 6.0411111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">SolliÃ¨s-Pont (83130)</span><br />Population : 11214\"\n          }\n        },\n        \"town-18197\": {\n          value: \"11204\",\n          latitude: 46.722777777778,\n          longitude: 2.505,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Amand-Montrond (18197)</span><br />Population : 11204\"\n          }\n        },\n        \"town-72003\": {\n          value: \"11202\",\n          latitude: 47.968611111111,\n          longitude: 0.16055555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Allonnes (72003)</span><br />Population : 11202\"\n          }\n        },\n        \"town-14341\": {\n          value: \"11192\",\n          latitude: 49.138333333333,\n          longitude: -0.35305555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ifs (14341)</span><br />Population : 11192\"\n          }\n        },\n        \"town-84080\": {\n          value: \"11191\",\n          latitude: 44.035555555556,\n          longitude: 4.9972222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Monteux (84080)</span><br />Population : 11191\"\n          }\n        },\n        \"town-77118\": {\n          value: \"11190\",\n          latitude: 48.945,\n          longitude: 2.6866666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Claye-Souilly (77118)</span><br />Population : 11190\"\n          }\n        },\n        \"town-35093\": {\n          value: \"11169\",\n          latitude: 48.6325,\n          longitude: -2.0616666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dinard (35093)</span><br />Population : 11169\"\n          }\n        },\n        \"town-59544\": {\n          value: \"11134\",\n          latitude: 50.369722222222,\n          longitude: 3.5547222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Saulve (59544)</span><br />Population : 11134\"\n          }\n        },\n        \"town-60141\": {\n          value: \"11132\",\n          latitude: 49.186944444444,\n          longitude: 2.4608333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chantilly (60141)</span><br />Population : 11132\"\n          }\n        },\n        \"town-62048\": {\n          value: \"11116\",\n          latitude: 50.508333333333,\n          longitude: 2.4736111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Auchel (62048)</span><br />Population : 11116\"\n          }\n        },\n        \"town-77487\": {\n          value: \"11078\",\n          latitude: 48.526388888889,\n          longitude: 2.6822222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vaux-le-PÃ©nil (77487)</span><br />Population : 11078\"\n          }\n        },\n        \"town-79202\": {\n          value: \"11066\",\n          latitude: 46.648611111111,\n          longitude: -0.24694444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Parthenay (79202)</span><br />Population : 11066\"\n          }\n        },\n        \"town-29235\": {\n          value: \"11041\",\n          latitude: 48.408611111111,\n          longitude: -4.3969444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Le Relecq-Kerhuon (29235)</span><br />Population : 11041\"\n          }\n        },\n        \"town-66172\": {\n          value: \"11033\",\n          latitude: 42.713333333333,\n          longitude: 2.8419444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-EstÃ¨ve (66172)</span><br />Population : 11033\"\n          }\n        },\n        \"town-58086\": {\n          value: \"11031\",\n          latitude: 47.411388888889,\n          longitude: 2.9266666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cosne-Cours-sur-Loire (58086)</span><br />Population : 11031\"\n          }\n        },\n        \"town-42184\": {\n          value: \"11022\",\n          latitude: 46.042777777778,\n          longitude: 4.0405555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Riorges (42184)</span><br />Population : 11022\"\n          }\n        },\n        \"town-92077\": {\n          value: \"11013\",\n          latitude: 48.826111111111,\n          longitude: 2.1933333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ville-d'Avray (92077)</span><br />Population : 11013\"\n          }\n        },\n        \"town-27056\": {\n          value: \"11000\",\n          latitude: 49.088611111111,\n          longitude: 0.5983333333333301,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bernay (27056)</span><br />Population : 11000\"\n          }\n        },\n        \"town-37050\": {\n          value: \"10986\",\n          latitude: 47.3375,\n          longitude: 0.71388888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chambray-lÃ¨s-Tours (37050)</span><br />Population : 10986\"\n          }\n        },\n        \"town-13075\": {\n          value: \"10982\",\n          latitude: 43.346944444444,\n          longitude: 5.4630555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Plan-de-Cuques (13075)</span><br />Population : 10982\"\n          }\n        },\n        \"town-67130\": {\n          value: \"10954\",\n          latitude: 48.421944444444,\n          longitude: 7.6611111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Erstein (67130)</span><br />Population : 10954\"\n          }\n        },\n        \"town-84141\": {\n          value: \"10905\",\n          latitude: 43.9775,\n          longitude: 4.9030555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">VedÃ¨ne (84141)</span><br />Population : 10905\"\n          }\n        },\n        \"town-63284\": {\n          value: \"10891\",\n          latitude: 45.798333333333,\n          longitude: 3.2483333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pont-du-ChÃ¢teau (63284)</span><br />Population : 10891\"\n          }\n        },\n        \"town-91312\": {\n          value: \"10878\",\n          latitude: 48.742222222222,\n          longitude: 2.2261111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Igny (91312)</span><br />Population : 10878\"\n          }\n        },\n        \"town-37109\": {\n          value: \"10843\",\n          latitude: 47.404166666667,\n          longitude: 0.59888888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Fondettes (37109)</span><br />Population : 10843\"\n          }\n        },\n        \"town-57433\": {\n          value: \"10842\",\n          latitude: 49.212222222222,\n          longitude: 6.1611111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MaiziÃ¨res-lÃ¨s-Metz (57433)</span><br />Population : 10842\"\n          }\n        },\n        \"town-37156\": {\n          value: \"10833\",\n          latitude: 47.388333333333,\n          longitude: 0.82722222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montlouis-sur-Loire (37156)</span><br />Population : 10833\"\n          }\n        },\n        \"town-13100\": {\n          value: \"10819\",\n          latitude: 43.789444444444,\n          longitude: 4.8316666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-RÃ©my-de-Provence (13100)</span><br />Population : 10819\"\n          }\n        },\n        \"town-74224\": {\n          value: \"10814\",\n          latitude: 46.066944444444,\n          longitude: 6.3119444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Roche-sur-Foron (74224)</span><br />Population : 10814\"\n          }\n        },\n        \"town-44132\": {\n          value: \"10796\",\n          latitude: 47.265833333333,\n          longitude: -2.34,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pornichet (44132)</span><br />Population : 10796\"\n          }\n        },\n        \"town-60157\": {\n          value: \"10762\",\n          latitude: 49.378888888889,\n          longitude: 2.4125,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Clermont (60157)</span><br />Population : 10762\"\n          }\n        },\n        \"town-19275\": {\n          value: \"10748\",\n          latitude: 45.548055555556,\n          longitude: 2.3091666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ussel (19275)</span><br />Population : 10748\"\n          }\n        },\n        \"town-56206\": {\n          value: \"10746\",\n          latitude: 47.686666666667,\n          longitude: -2.7344444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-AvÃ© (56206)</span><br />Population : 10746\"\n          }\n        },\n        \"town-11206\": {\n          value: \"10738\",\n          latitude: 43.056944444444,\n          longitude: 2.2186111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Limoux (11206)</span><br />Population : 10738\"\n          }\n        },\n        \"town-97212\": {\n          value: \"10737\",\n          latitude: 14.708055555556,\n          longitude: -61.0075,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gros-Morne (97212)</span><br />Population : 10737\"\n          }\n        },\n        \"town-93030\": {\n          value: \"10735\",\n          latitude: 48.953611111111,\n          longitude: 2.4163888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dugny (93030)</span><br />Population : 10735\"\n          }\n        },\n        \"town-97401\": {\n          value: \"10730\",\n          latitude: -21.241944444444,\n          longitude: 55.333333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Les Avirons (97401)</span><br />Population : 10730\"\n          }\n        },\n        \"town-56078\": {\n          value: \"10718\",\n          latitude: 47.790555555556,\n          longitude: -3.4886111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Guidel (56078)</span><br />Population : 10718\"\n          }\n        },\n        \"town-91021\": {\n          value: \"10712\",\n          latitude: 48.590277777778,\n          longitude: 2.2477777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Arpajon (91021)</span><br />Population : 10712\"\n          }\n        },\n        \"town-77251\": {\n          value: \"10711\",\n          latitude: 48.632222222222,\n          longitude: 2.5486111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lieusaint (77251)</span><br />Population : 10711\"\n          }\n        },\n        \"town-85226\": {\n          value: \"10697\",\n          latitude: 46.721111111111,\n          longitude: -1.9455555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Hilaire-de-Riez (85226)</span><br />Population : 10697\"\n          }\n        },\n        \"town-30202\": {\n          value: \"10696\",\n          latitude: 44.256388888889,\n          longitude: 4.6483333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pont-Saint-Esprit (30202)</span><br />Population : 10696\"\n          }\n        },\n        \"town-02810\": {\n          value: \"10691\",\n          latitude: 49.253055555556,\n          longitude: 3.0902777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villers-CotterÃªts (02810)</span><br />Population : 10691\"\n          }\n        },\n        \"town-11203\": {\n          value: \"10690\",\n          latitude: 43.200555555556,\n          longitude: 2.7577777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">LÃ©zignan-CorbiÃ¨res (11203)</span><br />Population : 10690\"\n          }\n        },\n        \"town-97124\": {\n          value: \"10688\",\n          latitude: 16.027222222222,\n          longitude: -61.698333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Claude (97124)</span><br />Population : 10688\"\n          }\n        },\n        \"town-89206\": {\n          value: \"10676\",\n          latitude: 47.982222222222,\n          longitude: 3.3972222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Joigny (89206)</span><br />Population : 10676\"\n          }\n        },\n        \"town-62250\": {\n          value: \"10673\",\n          latitude: 50.458055555556,\n          longitude: 2.9472222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CourriÃ¨res (62250)</span><br />Population : 10673\"\n          }\n        },\n        \"town-34157\": {\n          value: \"10668\",\n          latitude: 43.426666666667,\n          longitude: 3.6052777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">MÃ¨ze (34157)</span><br />Population : 10668\"\n          }\n        },\n        \"town-50147\": {\n          value: \"10660\",\n          latitude: 49.045277777778,\n          longitude: -1.4452777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Coutances (50147)</span><br />Population : 10660\"\n          }\n        },\n        \"town-84088\": {\n          value: \"10654\",\n          latitude: 43.997777777778,\n          longitude: 5.0591666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pernes-les-Fontaines (84088)</span><br />Population : 10654\"\n          }\n        },\n        \"town-81140\": {\n          value: \"10649\",\n          latitude: 43.698888888889,\n          longitude: 1.8188888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lavaur (81140)</span><br />Population : 10649\"\n          }\n        },\n        \"town-35281\": {\n          value: \"10647\",\n          latitude: 48.090277777778,\n          longitude: -1.6955555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Jacques-de-la-Lande (35281)</span><br />Population : 10647\"\n          }\n        },\n        \"town-70285\": {\n          value: \"10635\",\n          latitude: 47.5775,\n          longitude: 6.7616666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">HÃ©ricourt (70285)</span><br />Population : 10635\"\n          }\n        },\n        \"town-01173\": {\n          value: \"10634\",\n          latitude: 46.333333333333,\n          longitude: 6.0577777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gex (01173)</span><br />Population : 10634\"\n          }\n        },\n        \"town-66171\": {\n          value: \"10630\",\n          latitude: 42.618055555556,\n          longitude: 3.0063888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Cyprien (66171)</span><br />Population : 10630\"\n          }\n        },\n        \"town-87114\": {\n          value: \"10627\",\n          latitude: 45.838888888889,\n          longitude: 1.31,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Panazol (87114)</span><br />Population : 10627\"\n          }\n        },\n        \"town-67204\": {\n          value: \"10620\",\n          latitude: 48.624166666667,\n          longitude: 7.7547222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">HÅ“nheim (67204)</span><br />Population : 10620\"\n          }\n        },\n        \"town-28229\": {\n          value: \"10600\",\n          latitude: 48.453055555556,\n          longitude: 1.4619444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mainvilliers (28229)</span><br />Population : 10600\"\n          }\n        },\n        \"town-95487\": {\n          value: \"10592\",\n          latitude: 49.153333333333,\n          longitude: 2.2711111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Persan (95487)</span><br />Population : 10592\"\n          }\n        },\n        \"town-59616\": {\n          value: \"10590\",\n          latitude: 50.459444444444,\n          longitude: 3.5683333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vieux-CondÃ© (59616)</span><br />Population : 10590\"\n          }\n        },\n        \"town-10362\": {\n          value: \"10587\",\n          latitude: 48.294722222222,\n          longitude: 4.0488888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Savine (10362)</span><br />Population : 10587\"\n          }\n        },\n        \"town-46102\": {\n          value: \"10571\",\n          latitude: 44.608611111111,\n          longitude: 2.0316666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Figeac (46102)</span><br />Population : 10571\"\n          }\n        },\n        \"town-63164\": {\n          value: \"10524\",\n          latitude: 45.825833333333,\n          longitude: 3.1447222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gerzat (63164)</span><br />Population : 10524\"\n          }\n        },\n        \"town-69243\": {\n          value: \"10523\",\n          latitude: 45.896111111111,\n          longitude: 4.4330555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tarare (69243)</span><br />Population : 10523\"\n          }\n        },\n        \"town-42189\": {\n          value: \"10522\",\n          latitude: 45.433888888889,\n          longitude: 4.3236111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Roche-la-MoliÃ¨re (42189)</span><br />Population : 10522\"\n          }\n        },\n        \"town-64335\": {\n          value: \"10517\",\n          latitude: 43.3325,\n          longitude: -0.43583333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lescar (64335)</span><br />Population : 10517\"\n          }\n        },\n        \"town-51573\": {\n          value: \"10496\",\n          latitude: 49.25,\n          longitude: 3.9908333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Tinqueux (51573)</span><br />Population : 10496\"\n          }\n        },\n        \"town-59179\": {\n          value: \"10486\",\n          latitude: 50.301388888889,\n          longitude: 3.3933333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Douchy-les-Mines (59179)</span><br />Population : 10486\"\n          }\n        },\n        \"town-59008\": {\n          value: \"10469\",\n          latitude: 50.33,\n          longitude: 3.2511111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aniche (59008)</span><br />Population : 10469\"\n          }\n        },\n        \"town-13110\": {\n          value: \"10463\",\n          latitude: 43.446944444444,\n          longitude: 5.6858333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Trets (13110)</span><br />Population : 10463\"\n          }\n        },\n        \"town-06149\": {\n          value: \"10453\",\n          latitude: 43.740833333333,\n          longitude: 7.3141666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La TrinitÃ© (06149)</span><br />Population : 10453\"\n          }\n        },\n        \"town-35024\": {\n          value: \"10447\",\n          latitude: 48.1825,\n          longitude: -1.6438888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Betton (35024)</span><br />Population : 10447\"\n          }\n        },\n        \"town-68375\": {\n          value: \"10444\",\n          latitude: 47.805277777778,\n          longitude: 7.2375,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Wittelsheim (68375)</span><br />Population : 10444\"\n          }\n        },\n        \"town-06084\": {\n          value: \"10443\",\n          latitude: 43.62,\n          longitude: 6.9719444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mouans-Sartoux (06084)</span><br />Population : 10443\"\n          }\n        },\n        \"town-81163\": {\n          value: \"10437\",\n          latitude: 43.491666666667,\n          longitude: 2.3733333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Mazamet (81163)</span><br />Population : 10437\"\n          }\n        },\n        \"town-35236\": {\n          value: \"10413\",\n          latitude: 47.651388888889,\n          longitude: -2.0847222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Redon (35236)</span><br />Population : 10413\"\n          }\n        },\n        \"town-31488\": {\n          value: \"10402\",\n          latitude: 43.665277777778,\n          longitude: 1.505,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Jean (31488)</span><br />Population : 10402\"\n          }\n        },\n        \"town-83049\": {\n          value: \"10389\",\n          latitude: 43.2375,\n          longitude: 6.0708333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Cuers (83049)</span><br />Population : 10389\"\n          }\n        },\n        \"town-26057\": {\n          value: \"10381\",\n          latitude: 45.037777777778,\n          longitude: 5.05,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bourg-de-PÃ©age (26057)</span><br />Population : 10381\"\n          }\n        },\n        \"town-78190\": {\n          value: \"10361\",\n          latitude: 48.877777777778,\n          longitude: 2.1422222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Croissy-sur-Seine (78190)</span><br />Population : 10361\"\n          }\n        },\n        \"town-81060\": {\n          value: \"10361\",\n          latitude: 44.049166666667,\n          longitude: 2.1580555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Carmaux (81060)</span><br />Population : 10361\"\n          }\n        },\n        \"town-09122\": {\n          value: \"10358\",\n          latitude: 42.965277777778,\n          longitude: 1.6069444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Foix (09122)</span><br />Population : 10358\"\n          }\n        },\n        \"town-69273\": {\n          value: \"10327\",\n          latitude: 45.668055555556,\n          longitude: 4.9019444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Corbas (69273)</span><br />Population : 10327\"\n          }\n        },\n        \"town-22136\": {\n          value: \"10324\",\n          latitude: 48.177777777778,\n          longitude: -2.7533333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">LoudÃ©ac (22136)</span><br />Population : 10324\"\n          }\n        },\n        \"town-83148\": {\n          value: \"10312\",\n          latitude: 43.427222222222,\n          longitude: 6.4319444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Vidauban (83148)</span><br />Population : 10312\"\n          }\n        },\n        \"town-76216\": {\n          value: \"10286\",\n          latitude: 49.469722222222,\n          longitude: 1.0497222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">DÃ©ville-lÃ¨s-Rouen (76216)</span><br />Population : 10286\"\n          }\n        },\n        \"town-24520\": {\n          value: \"10279\",\n          latitude: 44.89,\n          longitude: 1.2166666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sarlat-la-CanÃ©da (24520)</span><br />Population : 10279\"\n          }\n        },\n        \"town-37195\": {\n          value: \"10279\",\n          latitude: 47.389166666667,\n          longitude: 0.66055555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Riche (37195)</span><br />Population : 10279\"\n          }\n        },\n        \"town-86041\": {\n          value: \"10269\",\n          latitude: 46.5975,\n          longitude: 0.34916666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Buxerolles (86041)</span><br />Population : 10269\"\n          }\n        },\n        \"town-35210\": {\n          value: \"10240\",\n          latitude: 48.147777777778,\n          longitude: -1.7738888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">PacÃ© (35210)</span><br />Population : 10240\"\n          }\n        },\n        \"town-54159\": {\n          value: \"10239\",\n          latitude: 48.625,\n          longitude: 6.3497222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dombasle-sur-Meurthe (54159)</span><br />Population : 10239\"\n          }\n        },\n        \"town-59426\": {\n          value: \"10223\",\n          latitude: 50.746666666667,\n          longitude: 3.1580555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Neuville-en-Ferrain (59426)</span><br />Population : 10223\"\n          }\n        },\n        \"town-91216\": {\n          value: \"10222\",\n          latitude: 48.673888888889,\n          longitude: 2.3272222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ã‰pinay-sur-Orge (91216)</span><br />Population : 10222\"\n          }\n        },\n        \"town-16374\": {\n          value: \"10216\",\n          latitude: 45.640277777778,\n          longitude: 0.19777777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Soyaux (16374)</span><br />Population : 10216\"\n          }\n        },\n        \"town-62516\": {\n          value: \"10189\",\n          latitude: 50.563611111111,\n          longitude: 2.4819444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Lillers (62516)</span><br />Population : 10189\"\n          }\n        },\n        \"town-21515\": {\n          value: \"10179\",\n          latitude: 47.314444444444,\n          longitude: 5.1061111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Quetigny (21515)</span><br />Population : 10179\"\n          }\n        },\n        \"town-57019\": {\n          value: \"10167\",\n          latitude: 49.260833333333,\n          longitude: 6.1419444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AmnÃ©ville (57019)</span><br />Population : 10167\"\n          }\n        },\n        \"town-62014\": {\n          value: \"10164\",\n          latitude: 50.638611111111,\n          longitude: 2.3966666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Aire-sur-la-Lys (62014)</span><br />Population : 10164\"\n          }\n        },\n        \"town-62040\": {\n          value: \"10163\",\n          latitude: 50.735555555556,\n          longitude: 2.3025,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Arques (62040)</span><br />Population : 10163\"\n          }\n        },\n        \"town-91200\": {\n          value: \"10151\",\n          latitude: 48.528888888889,\n          longitude: 2.0108333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Dourdan (91200)</span><br />Population : 10151\"\n          }\n        },\n        \"town-66008\": {\n          value: \"10149\",\n          latitude: 42.546111111111,\n          longitude: 3.0238888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ArgelÃ¨s-sur-Mer (66008)</span><br />Population : 10149\"\n          }\n        },\n        \"town-38565\": {\n          value: \"10146\",\n          latitude: 45.297777777778,\n          longitude: 5.6369444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Voreppe (38565)</span><br />Population : 10146\"\n          }\n        },\n        \"town-35055\": {\n          value: \"10145\",\n          latitude: 48.088611111111,\n          longitude: -1.6163888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chantepie (35055)</span><br />Population : 10145\"\n          }\n        },\n        \"town-21171\": {\n          value: \"10132\",\n          latitude: 47.301666666667,\n          longitude: 5.1355555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chevigny-Saint-Sauveur (21171)</span><br />Population : 10132\"\n          }\n        },\n        \"town-97227\": {\n          value: \"10131\",\n          latitude: 14.468333333333,\n          longitude: -60.921666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sainte-Luce (97227)</span><br />Population : 10131\"\n          }\n        },\n        \"town-59090\": {\n          value: \"10130\",\n          latitude: 50.701666666667,\n          longitude: 3.0933333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bondues (59090)</span><br />Population : 10130\"\n          }\n        },\n        \"town-62587\": {\n          value: \"10113\",\n          latitude: 50.427777777778,\n          longitude: 2.9297222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Montigny-en-Gohelle (62587)</span><br />Population : 10113\"\n          }\n        },\n        \"town-78674\": {\n          value: \"10106\",\n          latitude: 48.83,\n          longitude: 2.0022222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villepreux (78674)</span><br />Population : 10106\"\n          }\n        },\n        \"town-85128\": {\n          value: \"10094\",\n          latitude: 46.454722222222,\n          longitude: -1.1658333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">LuÃ§on (85128)</span><br />Population : 10094\"\n          }\n        },\n        \"town-84138\": {\n          value: \"10077\",\n          latitude: 44.384166666667,\n          longitude: 4.9902777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">ValrÃ©as (84138)</span><br />Population : 10077\"\n          }\n        },\n        \"town-54482\": {\n          value: \"10070\",\n          latitude: 48.701111111111,\n          longitude: 6.2066666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-Max (54482)</span><br />Population : 10070\"\n          }\n        },\n        \"town-62771\": {\n          value: \"10063\",\n          latitude: 50.419722222222,\n          longitude: 2.8622222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Sallaumines (62771)</span><br />Population : 10063\"\n          }\n        },\n        \"town-69152\": {\n          value: \"10061\",\n          latitude: 45.703611111111,\n          longitude: 4.8241666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Pierre-BÃ©nite (69152)</span><br />Population : 10061\"\n          }\n        },\n        \"town-79329\": {\n          value: \"10061\",\n          latitude: 46.975,\n          longitude: -0.21527777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Thouars (79329)</span><br />Population : 10061\"\n          }\n        },\n        \"town-83034\": {\n          value: \"10060\",\n          latitude: 43.095,\n          longitude: 6.0736111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Carqueiranne (83034)</span><br />Population : 10060\"\n          }\n        },\n        \"town-57591\": {\n          value: \"10045\",\n          latitude: 49.249444444444,\n          longitude: 6.0947222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Rombas (57591)</span><br />Population : 10045\"\n          }\n        },\n        \"town-83071\": {\n          value: \"10017\",\n          latitude: 43.138055555556,\n          longitude: 6.2344444444444,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Londe-les-Maures (83071)</span><br />Population : 10017\"\n          }\n        },\n        \"town-80016\": {\n          value: \"10008\",\n          latitude: 50.001944444444,\n          longitude: 2.6522222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Albert (80016)</span><br />Population : 10008\"\n          }\n        },\n        \"town-67067\": {\n          value: \"10002\",\n          latitude: 48.731944444444,\n          longitude: 7.7083333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Brumath (67067)</span><br />Population : 10002\"\n          }\n        },\n        \"town-94055\": {\n          value: \"9990\",\n          latitude: 48.785833333333,\n          longitude: 2.5383333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Ormesson-sur-Marne (94055)</span><br />Population : 9990\"\n          }\n        },\n        \"town-57447\": {\n          value: \"9984\",\n          latitude: 49.061111111111,\n          longitude: 6.1497222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marly (57447)</span><br />Population : 9984\"\n          }\n        },\n        \"town-44129\": {\n          value: \"9961\",\n          latitude: 47.436944444444,\n          longitude: -2.0877777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">PontchÃ¢teau (44129)</span><br />Population : 9961\"\n          }\n        },\n        \"town-59324\": {\n          value: \"9935\",\n          latitude: 50.294444444444,\n          longitude: 4.1013888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Jeumont (59324)</span><br />Population : 9935\"\n          }\n        },\n        \"town-62637\": {\n          value: \"9934\",\n          latitude: 50.469166666667,\n          longitude: 2.9936111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Oignies (62637)</span><br />Population : 9934\"\n          }\n        },\n        \"town-76319\": {\n          value: \"9908\",\n          latitude: 49.3575,\n          longitude: 1.0072222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Grand-Couronne (76319)</span><br />Population : 9908\"\n          }\n        },\n        \"town-76165\": {\n          value: \"9907\",\n          latitude: 49.280833333333,\n          longitude: 1.0211111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Caudebec-lÃ¨s-Elbeuf (76165)</span><br />Population : 9907\"\n          }\n        },\n        \"town-42005\": {\n          value: \"9893\",\n          latitude: 45.526111111111,\n          longitude: 4.2602777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AndrÃ©zieux-BouthÃ©on (42005)</span><br />Population : 9893\"\n          }\n        },\n        \"town-58303\": {\n          value: \"9891\",\n          latitude: 47.012222222222,\n          longitude: 3.1463888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Varennes-Vauzelles (58303)</span><br />Population : 9891\"\n          }\n        },\n        \"town-59386\": {\n          value: \"9877\",\n          latitude: 50.675833333333,\n          longitude: 3.0661111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Marquette-lez-Lille (59386)</span><br />Population : 9877\"\n          }\n        },\n        \"town-59636\": {\n          value: \"9864\",\n          latitude: 50.685277777778,\n          longitude: 3.0486111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Wambrechies (59636)</span><br />Population : 9864\"\n          }\n        },\n        \"town-45075\": {\n          value: \"9840\",\n          latitude: 47.889722222222,\n          longitude: 1.8397222222222,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">La Chapelle-Saint-Mesmin (45075)</span><br />Population : 9840\"\n          }\n        },\n        \"town-59153\": {\n          value: \"9829\",\n          latitude: 50.449166666667,\n          longitude: 3.5905555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">CondÃ©-sur-l'Escaut (59153)</span><br />Population : 9829\"\n          }\n        },\n        \"town-33051\": {\n          value: \"9826\",\n          latitude: 44.644166666667,\n          longitude: -0.9783333333333299,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Biganos (33051)</span><br />Population : 9826\"\n          }\n        },\n        \"town-91661\": {\n          value: \"9825\",\n          latitude: 48.701388888889,\n          longitude: 2.245,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Villebon-sur-Yvette (91661)</span><br />Population : 9825\"\n          }\n        },\n        \"town-63014\": {\n          value: \"9824\",\n          latitude: 45.750833333333,\n          longitude: 3.1108333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AubiÃ¨re (63014)</span><br />Population : 9824\"\n          }\n        },\n        \"town-60282\": {\n          value: \"9819\",\n          latitude: 49.187777777778,\n          longitude: 2.4161111111111,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Gouvieux (60282)</span><br />Population : 9819\"\n          }\n        },\n        \"town-69271\": {\n          value: \"9813\",\n          latitude: 45.744444444444,\n          longitude: 4.9663888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Chassieu (69271)</span><br />Population : 9813\"\n          }\n        },\n        \"town-33366\": {\n          value: \"9809\",\n          latitude: 44.994722222222,\n          longitude: -0.44583333333333,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Saint-AndrÃ©-de-Cubzac (33366)</span><br />Population : 9809\"\n          }\n        },\n        \"town-31451\": {\n          value: \"9795\",\n          latitude: 43.458611111111,\n          longitude: 2.0041666666667,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Revel (31451)</span><br />Population : 9795\"\n          }\n        },\n        \"town-59011\": {\n          value: \"9775\",\n          latitude: 50.529444444444,\n          longitude: 2.9327777777778,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">AnnÅ“ullin (59011)</span><br />Population : 9775\"\n          }\n        },\n        \"town-13069\": {\n          value: \"9771\",\n          latitude: 43.631388888889,\n          longitude: 5.1505555555556,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">PÃ©lissanne (13069)</span><br />Population : 9771\"\n          }\n        },\n        \"town-91122\": {\n          value: \"9769\",\n          latitude: 48.696666666667,\n          longitude: 2.1613888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Bures-sur-Yvette (91122)</span><br />Population : 9769\"\n          }\n        },\n        \"town-02381\": {\n          value: \"9756\",\n          latitude: 49.921666666667,\n          longitude: 4.0838888888889,\n          href: \"#\",\n          tooltip: {\n            content: \"<span style=\\\"font-weight:bold;\\\">Hirson (02381)</span><br />Population : 9756\"\n          }\n        }\n      }\n    });\n  }\n});"
  },
  {
    "path": "BlackStone/assets/js/mapael_example_2.js",
    "content": "$(function() {\n  'use strict';\n  if ($(\".mapael-example-2\").length) {\n    $(\".mapael-example-2\").mapael({\n      map: {\n        name: \"france_departments\",\n        defaultArea: {\n          attrs: {\n            fill: \"#f4f4e8\",\n            stroke: \"#00a1fe\"\n          },\n          attrsHover: {\n            fill: \"#a4e100\"\n          }\n        }\n      },\n      legend: {\n        plot: [{\n          labelAttrs: {\n            fill: \"#4a4a4a\"\n          },\n          titleAttrs: {\n            fill: \"#4a4a4a\"\n          },\n          cssClass: 'population',\n          mode: 'horizontal',\n          title: \"Population\",\n          marginBottomTitle: 5,\n          slices: [{\n            size: 25,\n            legendSpecificAttrs: {\n              fill: '#00a1fe'\n            },\n            label: \"< 10 000\",\n            max: \"10000\"\n          }, {\n            size: 25,\n            legendSpecificAttrs: {\n              fill: '#00a1fe'\n            },\n            label: \"> 10 000 and < 100 000\",\n            min: \"10000\",\n            max: \"100000\"\n          }, {\n            size: 25,\n            legendSpecificAttrs: {\n              fill: '#00a1fe'\n            },\n            label: \"> 100 000\",\n            min: \"100000\"\n          }]\n        }]\n      },\n      plots: {\n        'ny': {\n          latitude: 40.717079,\n          longitude: -74.00116,\n          tooltip: {\n            content: \"New York\"\n          },\n          value: [5000, 20]\n        },\n        'an': {\n          latitude: 61.2108398,\n          longitude: -149.9019557,\n          tooltip: {\n            content: \"Anchorage\"\n          },\n          value: [50000, 20]\n        },\n        'sf': {\n          latitude: 37.792032,\n          longitude: -122.394613,\n          tooltip: {\n            content: \"San Francisco\"\n          },\n          value: [150000, 20]\n        },\n        'pa': {\n          latitude: 19.493204,\n          longitude: -154.8199569,\n          tooltip: {\n            content: \"Pahoa\"\n          },\n          value: [5000, 200]\n        },\n        'la': {\n          latitude: 34.025052,\n          longitude: -118.192006,\n          tooltip: {\n            content: \"Los Angeles\"\n          },\n          value: [50000, 200]\n        },\n        'dallas': {\n          latitude: 32.784881,\n          longitude: -96.808244,\n          tooltip: {\n            content: \"Dallas\"\n          },\n          value: [150000, 200]\n        },\n        'miami': {\n          latitude: 25.789125,\n          longitude: -80.205674,\n          tooltip: {\n            content: \"Miami\"\n          },\n          value: [5000, 2000]\n        },\n        'washington': {\n          latitude: 38.905761,\n          longitude: -77.020746,\n          tooltip: {\n            content: \"Washington\"\n          },\n          value: [50000, 2000]\n        },\n        'seattle': {\n          latitude: 47.599571,\n          longitude: -122.319426,\n          tooltip: {\n            content: \"Seattle\"\n          },\n          value: [150000, 2000]\n        },\n        'test1': {\n          latitude: 44.671504,\n          longitude: -110.957968,\n          tooltip: {\n            content: \"Test 1\"\n          },\n          value: [5000, 2000]\n        },\n        'test2': {\n          latitude: 40.667013,\n          longitude: -101.465781,\n          tooltip: {\n            content: \"Test 2\"\n          },\n          value: [50000, 200]\n        },\n        'test3': {\n          latitude: 38.362031,\n          longitude: -86.875938,\n          tooltip: {\n            content: \"Test 3\"\n          },\n          value: [150000, 20]\n        }\n      }\n    });\n  }\n});"
  },
  {
    "path": "BlackStone/assets/js/maps.js",
    "content": "var map;\nif ($('#map').length) {\n  function initMap() {\n    map = new google.maps.Map(document.getElementById('map'), {\n      center: {\n        lat: -34.397,\n        lng: 150.644\n      },\n      zoom: 8\n    });\n  };\n}\n(function($) {\n  'use strict';\n  $('#vmap').vectorMap({\n    map: 'world_mill_en',\n    panOnDrag: true,\n    focusOn: {\n      x: 0.5,\n      y: 0.5,\n      scale: 1,\n      animate: true\n    },\n    series: {\n      regions: [{\n        scale: ['#812e2e', '#d87474'],\n        normalizeFunction: 'polynomial',\n        values: {\n          \"AF\": 16.63,\n          \"AL\": 11.58,\n          \"DZ\": 158.97,\n          \"AO\": 85.81,\n          \"AG\": 1.1,\n          \"AR\": 351.02,\n          \"AM\": 8.83,\n          \"AU\": 1219.72,\n          \"AT\": 366.26,\n          \"AZ\": 52.17,\n          \"BS\": 7.54,\n          \"BH\": 21.73,\n          \"BD\": 105.4,\n          \"BB\": 3.96,\n          \"BY\": 52.89,\n          \"BE\": 461.33,\n          \"BZ\": 1.43,\n          \"BJ\": 6.49,\n          \"BT\": 1.4,\n          \"BO\": 19.18,\n          \"BA\": 16.2,\n          \"BW\": 12.5,\n          \"BR\": 2023.53,\n          \"BN\": 11.96,\n          \"BG\": 44.84,\n          \"BF\": 8.67,\n          \"BI\": 1.47,\n          \"KH\": 11.36,\n          \"CM\": 21.88,\n          \"CA\": 1563.66,\n          \"CV\": 1.57,\n          \"CF\": 2.11,\n          \"TD\": 7.59,\n          \"CL\": 199.18,\n          \"CN\": 5745.13,\n          \"CO\": 283.11,\n          \"KM\": 0.56,\n          \"CD\": 12.6,\n          \"CG\": 11.88,\n          \"CR\": 35.02,\n          \"CI\": 22.38,\n          \"HR\": 59.92,\n          \"CY\": 22.75,\n          \"CZ\": 195.23,\n          \"DK\": 304.56,\n          \"DJ\": 1.14,\n          \"DM\": 0.38,\n          \"DO\": 50.87,\n          \"EC\": 61.49,\n          \"EG\": 216.83,\n          \"SV\": 21.8,\n          \"GQ\": 14.55,\n          \"ER\": 2.25,\n          \"EE\": 19.22,\n          \"ET\": 30.94,\n          \"FJ\": 3.15,\n          \"FI\": 231.98,\n          \"FR\": 2555.44,\n          \"GA\": 12.56,\n          \"GM\": 1.04,\n          \"GE\": 11.23,\n          \"DE\": 3305.9,\n          \"GH\": 18.06,\n          \"GR\": 305.01,\n          \"GD\": 0.65,\n          \"GT\": 40.77,\n          \"GN\": 4.34,\n          \"GW\": 0.83,\n          \"GY\": 2.2,\n          \"HT\": 6.5,\n          \"HN\": 15.34,\n          \"HK\": 226.49,\n          \"HU\": 132.28,\n          \"IS\": 12.77,\n          \"IN\": 1430.02,\n          \"ID\": 695.06,\n          \"IR\": 337.9,\n          \"IQ\": 84.14,\n          \"IE\": 204.14,\n          \"IL\": 201.25,\n          \"IT\": 2036.69,\n          \"JM\": 13.74,\n          \"JP\": 5390.9,\n          \"JO\": 27.13,\n          \"KZ\": 129.76,\n          \"KE\": 32.42,\n          \"KI\": 0.15,\n          \"KR\": 986.26,\n          \"KW\": 117.32,\n          \"KG\": 4.44,\n          \"LA\": 6.34,\n          \"LV\": 23.39,\n          \"LB\": 39.15,\n          \"LS\": 1.8,\n          \"LR\": 0.98,\n          \"LY\": 77.91,\n          \"LT\": 35.73,\n          \"LU\": 52.43,\n          \"MK\": 9.58,\n          \"MG\": 8.33,\n          \"MW\": 5.04,\n          \"MY\": 218.95,\n          \"MV\": 1.43,\n          \"ML\": 9.08,\n          \"MT\": 7.8,\n          \"MR\": 3.49,\n          \"MU\": 9.43,\n          \"MX\": 1004.04,\n          \"MD\": 5.36,\n          \"MN\": 5.81,\n          \"ME\": 3.88,\n          \"MA\": 91.7,\n          \"MZ\": 10.21,\n          \"MM\": 35.65,\n          \"NA\": 11.45,\n          \"NP\": 15.11,\n          \"NL\": 770.31,\n          \"NZ\": 138,\n          \"NI\": 6.38,\n          \"NE\": 5.6,\n          \"NG\": 206.66,\n          \"NO\": 413.51,\n          \"OM\": 53.78,\n          \"PK\": 174.79,\n          \"PA\": 27.2,\n          \"PG\": 8.81,\n          \"PY\": 17.17,\n          \"PE\": 153.55,\n          \"PH\": 189.06,\n          \"PL\": 438.88,\n          \"PT\": 223.7,\n          \"QA\": 126.52,\n          \"RO\": 158.39,\n          \"RU\": 1476.91,\n          \"RW\": 5.69,\n          \"WS\": 0.55,\n          \"ST\": 0.19,\n          \"SA\": 434.44,\n          \"SN\": 12.66,\n          \"RS\": 38.92,\n          \"SC\": 0.92,\n          \"SL\": 1.9,\n          \"SG\": 217.38,\n          \"SK\": 86.26,\n          \"SI\": 46.44,\n          \"SB\": 0.67,\n          \"ZA\": 354.41,\n          \"ES\": 1374.78,\n          \"LK\": 48.24,\n          \"KN\": 0.56,\n          \"LC\": 1,\n          \"VC\": 0.58,\n          \"SD\": 65.93,\n          \"SR\": 3.3,\n          \"SZ\": 3.17,\n          \"SE\": 444.59,\n          \"CH\": 522.44,\n          \"SY\": 59.63,\n          \"TW\": 426.98,\n          \"TJ\": 5.58,\n          \"TZ\": 22.43,\n          \"TH\": 312.61,\n          \"TL\": 0.62,\n          \"TG\": 3.07,\n          \"TO\": 0.3,\n          \"TT\": 21.2,\n          \"TN\": 43.86,\n          \"TR\": 729.05,\n          \"TM\": 0,\n          \"UG\": 17.12,\n          \"UA\": 136.56,\n          \"AE\": 239.65,\n          \"GB\": 2258.57,\n          \"US\": 14624.18,\n          \"UY\": 40.71,\n          \"UZ\": 37.72,\n          \"VU\": 0.72,\n          \"VE\": 285.21,\n          \"VN\": 101.99,\n          \"YE\": 30.02,\n          \"ZM\": 15.69,\n          \"ZW\": 5.57\n        }\n      }]\n    }\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/misc.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    var body = $('body');\n    var contentWrapper = $('.content-wrapper');\n    var scroller = $('.container-scroller');\n    var footer = $('.footer');\n    var sidebar = $('.sidebar');\n\n    //Add active class to nav-link based on url dynamically\n    //Active class can be hard coded directly in html file also as required\n\n    function addActiveClass(element) {\n      if (current === \"\") {\n        //for root url\n        if (element.attr('href').indexOf(\"index.html\") !== -1) {\n          element.parents('.nav-item').last().addClass('active');\n          if (element.parents('.sub-menu').length) {\n            element.closest('.collapse').addClass('show');\n            element.addClass('active');\n          }\n        }\n      } else {\n        //for other url\n        if (element.attr('href').indexOf(current) !== -1) {\n          element.parents('.nav-item').last().addClass('active');\n          if (element.parents('.sub-menu').length) {\n            element.closest('.collapse').addClass('show');\n            element.addClass('active');\n          }\n          if (element.parents('.submenu-item').length) {\n            element.addClass('active');\n          }\n        }\n      }\n    }\n\n    var current = location.pathname.split(\"/\").slice(-1)[0].replace(/^\\/|\\/$/g, '');\n    $('.nav li a', sidebar).each(function() {\n      var $this = $(this);\n      addActiveClass($this);\n    })\n\n    $('.horizontal-menu .nav li a').each(function() {\n      var $this = $(this);\n      addActiveClass($this);\n    })\n\n    //Close other submenu in sidebar on opening any\n\n    sidebar.on('show.bs.collapse', '.collapse', function() {\n      sidebar.find('.collapse.show').collapse('hide');\n    });\n\n\n    //Change sidebar and content-wrapper height\n    applyStyles();\n\n    function applyStyles() {\n      //Applying perfect scrollbar\n      if (!body.hasClass(\"rtl\")) {\n        if ($('.settings-panel .tab-content .tab-pane.scroll-wrapper').length) {\n          const settingsPanelScroll = new PerfectScrollbar('.settings-panel .tab-content .tab-pane.scroll-wrapper');\n        }\n        if ($('.chats').length) {\n          const chatsScroll = new PerfectScrollbar('.chats');\n        }\n        if (body.hasClass(\"sidebar-fixed\")) {\n          var fixedSidebarScroll = new PerfectScrollbar('#sidebar .nav');\n        }\n      }\n    }\n\n    $('[data-toggle=\"minimize\"]').on(\"click\", function() {\n      if ((body.hasClass('sidebar-toggle-display')) || (body.hasClass('sidebar-absolute'))) {\n        body.toggleClass('sidebar-hidden');\n      } else {\n        body.toggleClass('sidebar-icon-only');\n      }\n    });\n\n    //checkbox and radios\n    $(\".form-check label,.form-radio label\").append('<i class=\"input-helper\"></i>');\n\n    //fullscreen\n    $(\"#fullscreen-button\").on(\"click\", function toggleFullScreen() {\n      if ((document.fullScreenElement !== undefined && document.fullScreenElement === null) || (document.msFullscreenElement !== undefined && document.msFullscreenElement === null) || (document.mozFullScreen !== undefined && !document.mozFullScreen) || (document.webkitIsFullScreen !== undefined && !document.webkitIsFullScreen)) {\n        if (document.documentElement.requestFullScreen) {\n          document.documentElement.requestFullScreen();\n        } else if (document.documentElement.mozRequestFullScreen) {\n          document.documentElement.mozRequestFullScreen();\n        } else if (document.documentElement.webkitRequestFullScreen) {\n          document.documentElement.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT);\n        } else if (document.documentElement.msRequestFullscreen) {\n          document.documentElement.msRequestFullscreen();\n        }\n      } else {\n        if (document.cancelFullScreen) {\n          document.cancelFullScreen();\n        } else if (document.mozCancelFullScreen) {\n          document.mozCancelFullScreen();\n        } else if (document.webkitCancelFullScreen) {\n          document.webkitCancelFullScreen();\n        } else if (document.msExitFullscreen) {\n          document.msExitFullscreen();\n        }\n      }\n    })\n    if ($.cookie('corona-free-banner')!=\"true\") {\n      document.querySelector('#proBanner').classList.add('d-flex');\n    }\n    else {\n      document.querySelector('#proBanner').classList.add('d-none');\n    }\n    document.querySelector('#bannerClose').addEventListener('click',function() {\n      document.querySelector('#proBanner').classList.add('d-none');\n      document.querySelector('#proBanner').classList.remove('d-flex');\n      var date = new Date();\n      date.setTime(date.getTime() + 24 * 60 * 60 * 1000); \n      $.cookie('corona-free-banner', \"true\", { expires: date });\n    });\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/modal-demo.js",
    "content": "(function($) {\n  'use strict';\n  $('#exampleModal-4').on('show.bs.modal', function(event) {\n    var button = $(event.relatedTarget) // Button that triggered the modal\n    var recipient = button.data('whatever') // Extract info from data-* attributes\n    // If necessary, you could initiate an AJAX request here (and then do the updating in a callback).\n    // Update the modal's content. We'll use jQuery here, but you could use a data binding library or other methods instead.\n    var modal = $(this)\n    modal.find('.modal-title').text('New message to ' + recipient)\n    modal.find('.modal-body input').val(recipient)\n  })\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/morris.js",
    "content": "$(function() {\n  'use strict';\n  if ($('#morris-line-example').length) {\n    Morris.Line({\n      element: 'morris-line-example',\n      lineColors: ['#63CF72', '#F36368', '#76C1FA', '#FABA66'],\n      data: [{\n          y: '2006',\n          a: 100,\n          b: 150\n        },\n        {\n          y: '2007',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2008',\n          a: 50,\n          b: 40\n        },\n        {\n          y: '2009',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2010',\n          a: 50,\n          b: 40\n        },\n        {\n          y: '2011',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2012',\n          a: 100,\n          b: 90\n        }\n      ],\n      xkey: 'y',\n      ykeys: ['a', 'b'],\n      labels: ['Series A', 'Series B']\n    });\n  }\n  if ($('#morris-area-example').length) {\n    Morris.Area({\n      element: 'morris-area-example',\n      lineColors: ['#76C1FA', '#F36368', '#63CF72', '#FABA66'],\n      data: [{\n          y: '2006',\n          a: 100,\n          b: 90\n        },\n        {\n          y: '2007',\n          a: 75,\n          b: 105\n        },\n        {\n          y: '2008',\n          a: 50,\n          b: 40\n        },\n        {\n          y: '2009',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2010',\n          a: 50,\n          b: 40\n        },\n        {\n          y: '2011',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2012',\n          a: 100,\n          b: 90\n        }\n      ],\n      xkey: 'y',\n      ykeys: ['a', 'b'],\n      labels: ['Series A', 'Series B']\n    });\n  }\n  if ($(\"#morris-bar-example\").length) {\n    Morris.Bar({\n      element: 'morris-bar-example',\n      barColors: ['#63CF72', '#F36368', '#76C1FA', '#FABA66'],\n      data: [{\n          y: '2006',\n          a: 100,\n          b: 90\n        },\n        {\n          y: '2007',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2008',\n          a: 50,\n          b: 40\n        },\n        {\n          y: '2009',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2010',\n          a: 50,\n          b: 40\n        },\n        {\n          y: '2011',\n          a: 75,\n          b: 65\n        },\n        {\n          y: '2012',\n          a: 100,\n          b: 90\n        }\n      ],\n      xkey: 'y',\n      ykeys: ['a', 'b'],\n      labels: ['Series A', 'Series B']\n    });\n  }\n  if ($(\"#morris-donut-example\").length) {\n    Morris.Donut({\n      element: 'morris-donut-example',\n      colors: ['#76C1FA', '#F36368', '#63CF72', '#FABA66'],\n      data: [{\n          label: \"Download Sales\",\n          value: 12\n        },\n        {\n          label: \"In-Store Sales\",\n          value: 30\n        },\n        {\n          label: \"Mail-Order Sales\",\n          value: 20\n        }\n      ]\n    });\n  }\n  if ($('#morris-dashboard-taget').length) {\n    Morris.Area({\n      element: 'morris-dashboard-taget',\n      parseTime: false,\n      lineColors: ['#76C1FA', '#F36368', '#63CF72', '#FABA66'],\n      data: [{\n          y: 'Jan',\n          Revenue: 190,\n          Target: 170\n        },\n        {\n          y: 'Feb',\n          Revenue: 60,\n          Target: 90\n        },\n        {\n          y: 'March',\n          Revenue: 100,\n          Target: 120\n        },\n        {\n          y: 'Apr',\n          Revenue: 150,\n          Target: 140\n        },\n        {\n          y: 'May',\n          Revenue: 130,\n          Target: 170\n        },\n        {\n          y: 'Jun',\n          Revenue: 200,\n          Target: 160\n        },\n        {\n          y: 'Jul',\n          Revenue: 150,\n          Target: 180\n        },\n        {\n          y: 'Aug',\n          Revenue: 170,\n          Target: 180\n        },\n        {\n          y: 'Sep',\n          Revenue: 140,\n          Target: 90\n        }\n      ],\n      xkey: 'y',\n      ykeys: ['Target', 'Revenue'],\n      labels: ['Monthly Target', 'Monthly Revenue'],\n      hideHover: 'auto',\n      behaveLikeLine: true,\n      resize: true,\n      axes: 'x'\n    });\n  }\n});"
  },
  {
    "path": "BlackStone/assets/js/no-ui-slider.js",
    "content": "(function($) {\n  'use strict';\n\n  // Horizontal slider\n  if ($(\"#ul-slider-1\").length) {\n    var startSlider = document.getElementById('ul-slider-1');\n    noUiSlider.create(startSlider, {\n      start: [72],\n      connect: [true, false],\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-2\").length) {\n    var startSlider = document.getElementById('ul-slider-2');\n    noUiSlider.create(startSlider, {\n      start: [92],\n      connect: [true, false],\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-3\").length) {\n    var startSlider = document.getElementById('ul-slider-3');\n    noUiSlider.create(startSlider, {\n      start: [43],\n      connect: [true, false],\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-4\").length) {\n    var startSlider = document.getElementById('ul-slider-4');\n    noUiSlider.create(startSlider, {\n      start: [20],\n      connect: [true, false],\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-5\").length) {\n    var startSlider = document.getElementById('ul-slider-5');\n    noUiSlider.create(startSlider, {\n      start: [75],\n      connect: [true, false],\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n\n  // Vertical slider\n  if ($(\"#ul-slider-6\").length) {\n    var startSlider = document.getElementById('ul-slider-6');\n    noUiSlider.create(startSlider, {\n      start: [72],\n      connect: [true, false],\n      orientation: \"vertical\",\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-7\").length) {\n    var startSlider = document.getElementById('ul-slider-7');\n    noUiSlider.create(startSlider, {\n      start: [92],\n      connect: [true, false],\n      orientation: \"vertical\",\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-8\").length) {\n    var startSlider = document.getElementById('ul-slider-8');\n    noUiSlider.create(startSlider, {\n      start: [43],\n      connect: [true, false],\n      orientation: \"vertical\",\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-9\").length) {\n    var startSlider = document.getElementById('ul-slider-9');\n    noUiSlider.create(startSlider, {\n      start: [20],\n      connect: [true, false],\n      orientation: \"vertical\",\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n  if ($(\"#ul-slider-10\").length) {\n    var startSlider = document.getElementById('ul-slider-10');\n    noUiSlider.create(startSlider, {\n      start: [75],\n      connect: [true, false],\n      orientation: \"vertical\",\n      range: {\n        'min': [0],\n        'max': [100]\n      }\n    });\n  }\n\n  // Range Slider\n  if ($(\"#value-range\").length) {\n    var bigValueSlider = document.getElementById('value-range'),\n      bigValueSpan = document.getElementById('huge-value');\n\n    noUiSlider.create(bigValueSlider, {\n      start: 1,\n      step: 0,\n      range: {\n        min: 0,\n        max: 14\n      }\n    });\n\n    var range = [\n      '0', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14', '15'\n    ];\n    bigValueSlider.noUiSlider.on('update', function(values, handle) {\n      console.log(range[Math.floor(values)]);\n\n      bigValueSpan.innerHTML = range[Math.floor(values)];\n    });\n  }\n  if ($(\"#skipstep\").length) {\n    var skipSlider = document.getElementById('skipstep');\n    noUiSlider.create(skipSlider, {\n      range: {\n        'min': 0,\n        '10%': 10,\n        '20%': 20,\n        '30%': 30,\n        // Nope, 40 is no fun.\n        '50%': 50,\n        '60%': 60,\n        '70%': 70,\n        // I never liked 80.\n        '90%': 90,\n        'max': 100\n      },\n      snap: true,\n      start: [20, 90]\n    });\n    var skipValues = [\n      document.getElementById('skip-value-lower'),\n      document.getElementById('skip-value-upper')\n    ];\n\n    skipSlider.noUiSlider.on('update', function(values, handle) {\n      skipValues[handle].innerHTML = values[handle];\n    });\n  }\n\n  // Connected Slider\n  if ($(\"#skipstep-connect\").length) {\n    $(function() {\n      var skipSlider = document.getElementById('skipstep-connect');\n      noUiSlider.create(skipSlider, {\n        connect: true,\n        range: {\n          'min': 0,\n          '10%': 10,\n          '20%': 20,\n          '30%': 30,\n          // Nope, 40 is no fun.\n          '50%': 50,\n          '60%': 60,\n          '70%': 70,\n          // I never liked 80.\n          '90%': 90,\n          'max': 100\n        },\n        snap: true,\n        start: [20, 90]\n      });\n      var skipValues = [\n        document.getElementById('skip-value-lower-2'),\n        document.getElementById('skip-value-upper-2')\n      ];\n\n      skipSlider.noUiSlider.on('update', function(values, handle) {\n        skipValues[handle].innerHTML = values[handle];\n      });\n    });\n  }\n  if ($(\"#skipstep-connect-3\").length) {\n    $(function() {\n      var skipSlider = document.getElementById('skipstep-connect-3');\n      noUiSlider.create(skipSlider, {\n        connect: true,\n        range: {\n          'min': 0,\n          '10%': 10,\n          '20%': 20,\n          '30%': 30,\n          // Nope, 40 is no fun.\n          '50%': 50,\n          '60%': 60,\n          '70%': 70,\n          // I never liked 80.\n          '90%': 90,\n          'max': 100\n        },\n        snap: true,\n        start: [20, 90]\n      });\n      var skipValues = [\n        document.getElementById('skip-value-lower-3'),\n        document.getElementById('skip-value-upper-3')\n      ];\n\n      skipSlider.noUiSlider.on('update', function(values, handle) {\n        skipValues[handle].innerHTML = values[handle];\n      });\n    });\n  }\n\n  // Tooltip Slider\n  if ($(\"#soft-limit\").length) {\n    var softSlider = document.getElementById('soft-limit');\n\n    noUiSlider.create(softSlider, {\n      start: [24, 50],\n      tooltips: true,\n      connect: true,\n      range: {\n        min: 0,\n        max: 100\n      },\n      pips: {\n        mode: 'values',\n        values: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100],\n        density: 10\n      }\n    });\n  }\n  if ($(\"#soft-limit-2\").length) {\n    var softSlider = document.getElementById('soft-limit-2');\n\n    noUiSlider.create(softSlider, {\n      start: [24, 50],\n      tooltips: [true, true],\n      connect: true,\n      range: {\n        min: 0,\n        max: 100\n      },\n      pips: {\n        mode: 'values',\n        values: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100],\n        density: 10\n      }\n    });\n  }\n  if ($(\"#soft-limit-3\").length) {\n    var softSlider = document.getElementById('soft-limit-3');\n\n    noUiSlider.create(softSlider, {\n      start: [24, 82],\n      tooltips: [true, true],\n      connect: true,\n      range: {\n        min: 0,\n        max: 100\n      },\n      pips: {\n        mode: 'values',\n        values: [0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100],\n        density: 10\n      }\n    });\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/off-canvas.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $('[data-toggle=\"offcanvas\"]').on(\"click\", function() {\n      $('.sidebar-offcanvas').toggleClass('active')\n    });\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/owl-carousel.js",
    "content": "(function($) {\n  'use strict';\n  $.fn.andSelf = function() {\n    return this.addBack.apply(this, arguments);\n  }\n\n  if ($('.example-1').length) {\n    $('.example-1').owlCarousel({\n      loop: true,\n      margin: 10,\n      nav: true,\n      autoplay: true,\n      autoplayTimeout: 4500,\n      responsive: {\n        0: {\n          items: 1\n        },\n        600: {\n          items: 3\n        },\n        1000: {\n          items: 5\n        }\n      }\n    });\n  }\n\n  if ($('.full-width').length) {\n    $('.full-width').owlCarousel({\n      loop: true,\n      margin: 10,\n      items: 1,\n      nav: true,\n      autoplay: true,\n      autoplayTimeout: 5500,\n      navText: [\"<i class='mdi mdi-chevron-left'></i>\", \"<i class='mdi mdi-chevron-right'></i>\"]\n    });\n  }\n\n  if ($('.loop').length) {\n    $('.loop').owlCarousel({\n      center: true,\n      items: 2,\n      loop: true,\n      margin: 10,\n      autoplay: true,\n      autoplayTimeout: 8500,\n      responsive: {\n        600: {\n          items: 4\n        }\n      }\n    });\n  }\n\n  if ($('.nonloop').length) {\n    $('.nonloop').owlCarousel({\n      items: 5,\n      loop: false,\n      margin: 10,\n      autoplay: true,\n      autoplayTimeout: 6000,\n      responsive: {\n        600: {\n          items: 4\n        }\n      }\n    });\n  }\n\n  if ($('.auto-width').length) {\n    $('.auto-width').owlCarousel({\n      items: 2,\n      margin: 10,\n      loop: true,\n      autoplay: true,\n      autoplayTimeout: 3500,\n      autoWidth: true,\n    });\n  }\n\n  if ($('.lazy-load').length) {\n    $('.lazy-load').owlCarousel({\n      items: 4,\n      lazyLoad: true,\n      loop: true,\n      margin: 10,\n      auto: true,\n      autoplay: true,\n      autoplayTimeout: 2500,\n    });\n  }\n\n  if ($('.rtl-carousel').length) {\n    $('.rtl-carousel').owlCarousel({\n      rtl: true,\n      loop: true,\n      margin: 10,\n      autoplay: true,\n      autoplayTimeout: 3000,\n      responsive: {\n        0: {\n          items: 1\n        },\n        600: {\n          items: 3\n        },\n        1000: {\n          items: 5\n        }\n      }\n    });\n  }\n\n  if ($('.video-carousel').length) {\n    $('.video-carousel').owlCarousel({\n      loop: false,\n      margin: 10,\n      video: true,\n      lazyLoad: true,\n      autoplay: true,\n      autoplayTimeout: 7000,\n      responsive: {\n        480: {\n          items: 4\n        },\n        600: {\n          items: 4\n        }\n      }\n    });\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/paginate.js",
    "content": "(function($) {\n  'use strict';\n\n  if ($('#pagination-demo').length) {\n    $('#pagination-demo').twbsPagination({\n      totalPages: 35,\n      visiblePages: 7,\n      onPageClick: function(event, page) {\n        $('#page-content').text('Page ' + page);\n      }\n    });\n  }\n\n  if ($('.sync-pagination').length) {\n    $('.sync-pagination').twbsPagination({\n      totalPages: 20,\n      onPageClick: function(evt, page) {\n        $('#content').text('Page ' + page);\n      }\n    });\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/popover.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    /* Code for attribute data-custom-class for adding custom class to tooltip */\n    if (typeof $.fn.popover.Constructor === 'undefined') {\n      throw new Error('Bootstrap Popover must be included first!');\n    }\n\n    var Popover = $.fn.popover.Constructor;\n\n    // add customClass option to Bootstrap Tooltip\n    $.extend(Popover.Default, {\n      customClass: ''\n    });\n\n    var _show = Popover.prototype.show;\n\n    Popover.prototype.show = function() {\n\n      // invoke parent method\n      _show.apply(this, Array.prototype.slice.apply(arguments));\n\n      if (this.config.customClass) {\n        var tip = this.getTipElement();\n        $(tip).addClass(this.config.customClass);\n      }\n\n    };\n\n    $('[data-toggle=\"popover\"]').popover()\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/profile-demo.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $('#profile-rating').barrating({\n      theme: 'css-stars',\n      showSelectedRating: false\n    });\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/progress-bar.js",
    "content": "(function($) {\n  'use strict';\n  // ProgressBar JS Starts Here\n\n  if ($('#circleProgress1').length) {\n    var bar = new ProgressBar.Circle(circleProgress1, {\n      color: '#ffffff',\n      // This has to be the same size as the maximum width to\n      // prevent clipping\n      strokeWidth: 4,\n      trailWidth: 4,\n      easing: 'easeInOut',\n      duration: 1400,\n      text: {\n        autoStyleContainer: false\n      },\n      from: {\n        color: '#0090e7',\n        width: 4\n      },\n      to: {\n        color: '#0090e7',\n        width: 4\n      },\n      // Set default step function for all animate calls\n      step: function(state, circle) {\n        circle.path.setAttribute('stroke', state.color);\n        circle.path.setAttribute('stroke-width', state.width);\n\n        var value = Math.round(circle.value() * 100);\n        if (value === 0) {\n          circle.setText('');\n        } else {\n          circle.setText(value);\n        }\n\n      }\n    });\n\n    bar.text.style.fontSize = '1rem';\n    bar.animate(.34); // Number from 0.0 to 1.0\n  }\n\n  if ($('#circleProgress2').length) {\n    var bar = new ProgressBar.Circle(circleProgress2, {\n      color: '#ffffff',\n      // This has to be the same size as the maximum width to\n      // prevent clipping\n      strokeWidth: 4,\n      trailWidth: 4,\n      easing: 'easeInOut',\n      duration: 1400,\n      text: {\n        autoStyleContainer: false\n      },\n      from: {\n        color: '#00d25b',\n        width: 4\n      },\n      to: {\n        color: '#00d25b',\n        width: 4\n      },\n      // Set default step function for all animate calls\n      step: function(state, circle) {\n        circle.path.setAttribute('stroke', state.color);\n        circle.path.setAttribute('stroke-width', state.width);\n\n        var value = Math.round(circle.value() * 100);\n        if (value === 0) {\n          circle.setText('');\n        } else {\n          circle.setText(value);\n        }\n\n      }\n    });\n\n    bar.text.style.fontSize = '1rem';\n    bar.animate(.54); // Number from 0.0 to 1.0\n  }\n\n  if ($('#circleProgress3').length) {\n    var bar = new ProgressBar.Circle(circleProgress3, {\n      color: '#ffffff',\n      // This has to be the same size as the maximum width to\n      // prevent clipping\n      strokeWidth: 4,\n      trailWidth: 4,\n      easing: 'easeInOut',\n      duration: 1400,\n      text: {\n        autoStyleContainer: false\n      },\n      from: {\n        color: '#aaa',\n        width: 4\n      },\n      to: {\n        color: '#f96868',\n        width: 4\n      },\n      // Set default step function for all animate calls\n      step: function(state, circle) {\n        circle.path.setAttribute('stroke', state.color);\n        circle.path.setAttribute('stroke-width', state.width);\n\n        var value = Math.round(circle.value() * 100);\n        if (value === 0) {\n          circle.setText('');\n        } else {\n          circle.setText(value);\n        }\n\n      }\n    });\n\n    bar.text.style.fontSize = '1rem';\n    bar.animate(.45); // Number from 0.0 to 1.0\n  }\n\n  if ($('#circleProgress4').length) {\n    var bar = new ProgressBar.Circle(circleProgress4, {\n      color: '#ffffff',\n      // This has to be the same size as the maximum width to\n      // prevent clipping\n      strokeWidth: 4,\n      trailWidth: 4,\n      easing: 'easeInOut',\n      duration: 1400,\n      text: {\n        autoStyleContainer: false\n      },\n      from: {\n        color: '#fc424a',\n        width: 4\n      },\n      to: {\n        color: '#fc424a',\n        width: 4\n      },\n      // Set default step function for all animate calls\n      step: function(state, circle) {\n        circle.path.setAttribute('stroke', state.color);\n        circle.path.setAttribute('stroke-width', state.width);\n\n        var value = Math.round(circle.value() * 100);\n        if (value === 0) {\n          circle.setText('');\n        } else {\n          circle.setText(value);\n        }\n\n      }\n    });\n\n    bar.text.style.fontSize = '1rem';\n    bar.animate(.27); // Number from 0.0 to 1.0\n  }\n\n  if ($('#circleProgress5').length) {\n    var bar = new ProgressBar.Circle(circleProgress5, {\n      color: '#ffffff',\n      // This has to be the same size as the maximum width to\n      // prevent clipping\n      strokeWidth: 4,\n      trailWidth: 4,\n      easing: 'easeInOut',\n      duration: 1400,\n      text: {\n        autoStyleContainer: false\n      },\n      from: {\n        color: '#ffab00',\n        width: 4\n      },\n      to: {\n        color: '#ffab00',\n        width: 4\n      },\n      // Set default step function for all animate calls\n      step: function(state, circle) {\n        circle.path.setAttribute('stroke', state.color);\n        circle.path.setAttribute('stroke-width', state.width);\n\n        var value = Math.round(circle.value() * 100);\n        if (value === 0) {\n          circle.setText('');\n        } else {\n          circle.setText(value);\n        }\n\n      }\n    });\n\n    bar.text.style.fontSize = '1rem';\n    bar.animate(.67); // Number from 0.0 to 1.0\n  }\n\n  if ($('#circleProgress6').length) {\n    var bar = new ProgressBar.Circle(circleProgress6, {\n      color: '#ffffff',\n      // This has to be the same size as the maximum width to\n      // prevent clipping\n      strokeWidth: 4,\n      trailWidth: 4,\n      easing: 'easeInOut',\n      duration: 1400,\n      text: {\n        autoStyleContainer: false\n      },\n      from: {\n        color: '#8f5fe8',\n        width: 4\n      },\n      to: {\n        color: '#8f5fe8',\n        width: 4\n      },\n      // Set default step function for all animate calls\n      step: function(state, circle) {\n        circle.path.setAttribute('stroke', state.color);\n        circle.path.setAttribute('stroke-width', state.width);\n\n        var value = Math.round(circle.value() * 100);\n        if (value === 0) {\n          circle.setText('');\n        } else {\n          circle.setText(value);\n        }\n\n      }\n    });\n\n    bar.text.style.fontSize = '1rem';\n    bar.animate(.95); // Number from 0.0 to 1.0\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/rickshaw.js",
    "content": "(function($) {\n  'use strict';\n\n  //Simple graph\n  if ($(\"#rickshaw-simple\").length) {\n    var rickshawSimple = new Rickshaw.Graph({\n      element: document.getElementById(\"rickshaw-simple\"),\n      renderer: 'line',\n      series: [{\n        data: [{\n          x: 0,\n          y: 40\n        }, {\n          x: 1,\n          y: 49\n        }, {\n          x: 2,\n          y: 38\n        }, {\n          x: 3,\n          y: 30\n        }, {\n          x: 4,\n          y: 32\n        }],\n        color: 'steelblue'\n      }, {\n        data: [{\n          x: 0,\n          y: 19\n        }, {\n          x: 1,\n          y: 22\n        }, {\n          x: 2,\n          y: 32\n        }, {\n          x: 3,\n          y: 20\n        }, {\n          x: 4,\n          y: 21\n        }],\n        color: 'lightblue'\n      }, {\n        data: [{\n          x: 0,\n          y: 39\n        }, {\n          x: 1,\n          y: 32\n        }, {\n          x: 2,\n          y: 12\n        }, {\n          x: 3,\n          y: 5\n        }, {\n          x: 4,\n          y: 12\n        }],\n        color: 'steelblue',\n        strokeWidth: 10,\n        opacity: 0.5\n      }]\n    });\n    rickshawSimple.render();\n  }\n\n  //Timescale\n  if ($(\"#rickshaw-time-scale\").length) {\n    var seriesData = [\n      [],\n      []\n    ];\n    var random = new Rickshaw.Fixtures.RandomData(1500000);\n\n    for (var i = 0; i < 30; i++) {\n      random.addData(seriesData);\n    }\n\n    var timeScaleGraph = new Rickshaw.Graph({\n      element: document.getElementById(\"rickshaw-time-scale\"),\n      width: 400,\n      height: 200,\n      stroke: true,\n      strokeWidth: 0.5,\n      renderer: 'area',\n      xScale: d3.time.scale(),\n      yScale: d3.scale.sqrt(),\n      series: [{\n          color: '#2796E9',\n          data: seriesData[0]\n        },\n        {\n          color: '#05BDFE',\n          data: seriesData[1]\n        }\n      ]\n    });\n\n    timeScaleGraph.render();\n\n    var xAxis = new Rickshaw.Graph.Axis.X({\n      graph: timeScaleGraph,\n      tickFormat: timeScaleGraph.x.tickFormat()\n    });\n\n    xAxis.render();\n\n    var yAxis = new Rickshaw.Graph.Axis.Y({\n      graph: timeScaleGraph\n    });\n\n    yAxis.render();\n\n    var slider = new Rickshaw.Graph.RangeSlider.Preview({\n      graph: timeScaleGraph,\n      element: document.getElementById('slider')\n    });\n  }\n\n  //Bar chart\n  if ($(\"#rickshaw-bar\").length) {\n    var seriesData = [\n      [],\n      [],\n      []\n    ];\n    var random = new Rickshaw.Fixtures.RandomData(150);\n\n    for (var i = 0; i < 15; i++) {\n      random.addData(seriesData);\n    }\n\n    var rickshawBar = new Rickshaw.Graph({\n      element: document.getElementById(\"rickshaw-bar\"),\n      width: 400,\n      height: 300,\n      renderer: 'bar',\n      series: [{\n        color: \"#2796E9\",\n        data: seriesData[0],\n      }, {\n        color: \"#05BDFE\",\n        data: seriesData[1],\n      }, {\n        color: \"#05BDFE\",\n        data: seriesData[2],\n        opacity: 0.4\n      }]\n    });\n\n    rickshawBar.render();\n  }\n\n  //Line chart\n\n  if ($(\"#rickshaw-line\").length) {\n    // set up our data series with 50 random data points\n\n    var seriesData = [\n      [],\n      [],\n      []\n    ];\n    var random = new Rickshaw.Fixtures.RandomData(150);\n\n    for (var i = 0; i < 30; i++) {\n      random.addData(seriesData);\n    }\n\n    // instantiate our graph!\n\n    var rickshawLine = new Rickshaw.Graph({\n      element: document.getElementById(\"rickshaw-line\"),\n      width: 400,\n      height: 300,\n      renderer: 'line',\n      series: [{\n        color: \"#2796E9\",\n        data: seriesData[0],\n        name: 'New York',\n        strokeWidth: 5,\n        opacity: 0.3\n      }, {\n        color: \"#05BDFE\",\n        data: seriesData[1],\n        name: 'London'\n      }, {\n        color: \"#05BDFE\",\n        data: seriesData[2],\n        name: 'Tokyo',\n        opacity: 0.4\n      }]\n    });\n\n    rickshawLine.render();\n\n    var hoverDetail = new Rickshaw.Graph.HoverDetail({\n      graph: rickshawLine\n    });\n  }\n\n  //scatter plot\n\n  if ($(\"#rickshaw-scatter\").length) {\n    // set up our data series with 50 random data points\n\n    var seriesData = [\n      [],\n      [],\n      []\n    ];\n    var random = new Rickshaw.Fixtures.RandomData(150);\n\n    for (var i = 0; i < 30; i++) {\n      random.addData(seriesData);\n      seriesData[0][i].r = 0 | Math.random() * 2 + 8\n      seriesData[1][i].r = 0 | Math.random() * 5 + 5\n      seriesData[2][i].r = 0 | Math.random() * 8 + 2\n    }\n\n    // instantiate our graph!\n\n    var rickshawScatter = new Rickshaw.Graph({\n      element: document.getElementById(\"rickshaw-scatter\"),\n      width: 400,\n      height: 300,\n      renderer: 'scatterplot',\n      series: [{\n        color: \"#2796E9\",\n        data: seriesData[0],\n        opacity: 0.5\n      }, {\n        color: \"#f7981c\",\n        data: seriesData[1],\n        opacity: 0.3\n      }, {\n        color: \"#36af47\",\n        data: seriesData[2],\n        opacity: 0.6\n      }]\n    });\n\n    rickshawScatter.renderer.dotSize = 6;\n    new Rickshaw.Graph.HoverDetail({\n      graph: rickshawScatter\n    });\n    rickshawScatter.render();\n  }\n\n\n  //Multiple renderer\n\n  if ($(\"#rickshaw-multiple\").length) {\n    var seriesData = [\n      [],\n      [],\n      [],\n      [],\n      []\n    ];\n    var random = new Rickshaw.Fixtures.RandomData(50);\n\n    for (var i = 0; i < 15; i++) {\n      random.addData(seriesData);\n    }\n\n    var rickshawMultiple = new Rickshaw.Graph({\n      element: document.getElementById(\"rickshaw-multiple\"),\n      renderer: 'multi',\n      width: 400,\n      height: 300,\n      dotSize: 5,\n      series: [{\n        name: 'temperature',\n        data: seriesData.shift(),\n        color: '#2796E9',\n        renderer: 'stack',\n        opacity: 0.4,\n      }, {\n        name: 'heat index',\n        data: seriesData.shift(),\n        color: '#f7981c',\n        renderer: 'stack',\n        opacity: 0.4,\n      }, {\n        name: 'dewpoint',\n        data: seriesData.shift(),\n        color: '#36af47',\n        renderer: 'scatterplot',\n        opacity: 0.4,\n      }, {\n        name: 'pop',\n        data: seriesData.shift().map(function(d) {\n          return {\n            x: d.x,\n            y: d.y / 4\n          }\n        }),\n        color: '#ed1c24',\n        opacity: 0.4,\n        renderer: 'bar'\n      }, {\n        name: 'humidity',\n        data: seriesData.shift().map(function(d) {\n          return {\n            x: d.x,\n            y: d.y * 1.5\n          }\n        }),\n        renderer: 'line',\n        color: 'rgba(0, 0, 127, 0.25)',\n        opacity: 0.4\n      }]\n    });\n\n    var slider = new Rickshaw.Graph.RangeSlider.Preview({\n      graph: rickshawMultiple,\n      element: document.querySelector('#multiple-slider')\n    });\n\n    rickshawMultiple.render();\n    var detail = new Rickshaw.Graph.HoverDetail({\n      graph: rickshawMultiple\n    });\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/select2.js",
    "content": "(function($) {\n  'use strict';\n\n  if ($(\".js-example-basic-single\").length) {\n    $(\".js-example-basic-single\").select2();\n  }\n  if ($(\".js-example-basic-multiple\").length) {\n    $(\".js-example-basic-multiple\").select2();\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/settings.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    $(\".nav-settings\").click(function() {\n      $(\"#right-sidebar\").toggleClass(\"open\");\n    });\n    $(\".settings-close\").click(function() {\n      $(\"#right-sidebar,#theme-settings\").removeClass(\"open\");\n    });\n\n    $(\"#settings-trigger\").on(\"click\", function() {\n      $(\"#theme-settings\").toggleClass(\"open\");\n    });\n\n\n    //background constants\n    var navbar_classes = \"navbar-danger navbar-success navbar-warning navbar-dark navbar-light navbar-primary navbar-info navbar-pink\";\n    var sidebar_classes = \"sidebar-light sidebar-dark\";\n    var $body = $(\"body\");\n\n    //sidebar backgrounds\n    $(\"#sidebar-default-theme\").on(\"click\", function() {\n      $body.removeClass(sidebar_classes);\n      $(\".sidebar-bg-options\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n    $(\"#sidebar-dark-theme\").on(\"click\", function() {\n      $body.removeClass(sidebar_classes);\n      $body.addClass(\"sidebar-dark\");\n      $(\".sidebar-bg-options\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n\n\n    //Navbar Backgrounds\n    $(\".tiles.primary\").on(\"click\", function() {\n      $(\".navbar\").removeClass(navbar_classes);\n      $(\".navbar\").addClass(\"navbar-primary\");\n      $(\".tiles\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n    $(\".tiles.success\").on(\"click\", function() {\n      $(\".navbar\").removeClass(navbar_classes);\n      $(\".navbar\").addClass(\"navbar-success\");\n      $(\".tiles\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n    $(\".tiles.warning\").on(\"click\", function() {\n      $(\".navbar\").removeClass(navbar_classes);\n      $(\".navbar\").addClass(\"navbar-warning\");\n      $(\".tiles\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n    $(\".tiles.danger\").on(\"click\", function() {\n      $(\".navbar\").removeClass(navbar_classes);\n      $(\".navbar\").addClass(\"navbar-danger\");\n      $(\".tiles\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n    $(\".tiles.info\").on(\"click\", function() {\n      $(\".navbar\").removeClass(navbar_classes);\n      $(\".navbar\").addClass(\"navbar-info\");\n      $(\".tiles\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n    $(\".tiles.dark\").on(\"click\", function() {\n      $(\".navbar\").removeClass(navbar_classes);\n      $(\".navbar\").addClass(\"navbar-dark\");\n      $(\".tiles\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n    $(\".tiles.default\").on(\"click\", function() {\n      $(\".navbar\").removeClass(navbar_classes);\n      $(\".tiles\").removeClass(\"selected\");\n      $(this).addClass(\"selected\");\n    });\n\n    //Horizontal menu in mobile\n    $('[data-toggle=\"horizontal-menu-toggle\"]').on(\"click\", function() {\n      $(\".horizontal-menu .bottom-navbar\").toggleClass(\"header-toggled\");\n    });\n    // Horizontal menu navigation in mobile menu on click\n    var navItemClicked = $('.horizontal-menu .page-navigation >.nav-item');\n    navItemClicked.on(\"click\", function(event) {\n      if(window.matchMedia('(max-width: 991px)').matches) {\n        if(!($(this).hasClass('show-submenu'))) {\n          navItemClicked.removeClass('show-submenu');\n        }\n        $(this).toggleClass('show-submenu');\n      }        \n    });\n\n    $(window).scroll(function() {\n      if(window.matchMedia('(min-width: 992px)').matches) {\n        var header = $('.horizontal-menu');\n        if ($(window).scrollTop() >= 71) {\n          $(header).addClass('fixed-on-scroll');\n        } else {\n          $(header).removeClass('fixed-on-scroll');\n        }\n      }\n    });\n\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/sparkline.js",
    "content": "(function($) {\n  'use strict';\n  if ($(\"#sparkline-line-chart\").length) {\n    $(\"#sparkline-line-chart\").sparkline([5, 6, 7, 9, 9, 5, 3, 2, 2, 4, 6, 7], {\n      type: 'line',\n      width: '100%',\n      height: '100%'\n    });\n  }\n\n  if ($(\"#sparkline-bar-chart\").length) {\n    $(\"#sparkline-bar-chart\").sparkline([5, 6, 7, 2, 0, -4, 4], {\n      type: 'bar',\n      height: '100%',\n      barWidth: '58.5%',\n      barColor: '#58D8A3',\n      negBarColor: '#e56e72',\n      zeroColor: 'green'\n    });\n  }\n\n  if ($(\"#sparkline-pie-chart\").length) {\n    $(\"#sparkline-pie-chart\").sparkline([1, 1, 2, 4], {\n      type: 'pie',\n      sliceColors: ['#0CB5F9', '#58d8a3', '#F4767B', '#F9B65F'],\n      borderColor: '#',\n      width: '100%',\n      height: '100%'\n    });\n  }\n\n  if ($(\"#sparkline-bullet-chart\").length) {\n    $(\"#sparkline-bullet-chart\").sparkline([10, 12, 12, 9, 7], {\n      type: 'bullet',\n      height: '238',\n      width: '100%',\n    });\n  }\n\n  if ($(\"#sparkline-composite-chart\").length) {\n    $(\"#sparkline-composite-chart\").sparkline([5, 6, 7, 2, 0, 3, 6, 8, 1, 2, 2, 0, 3, 6], {\n      type: 'line',\n      width: '100%',\n      height: '100%'\n    });\n  }\n\n  if ($(\"#sparkline-composite-chart\").length) {\n    $(\"#sparkline-composite-chart\").sparkline([5, 6, 7, 2, 0, 3, 6, 8, 1, 2, 2, 0, 3, 6], {\n      type: 'bar',\n      height: '150px',\n      width: '100%',\n      barWidth: 10,\n      barSpacing: 5,\n      barColor: '#60a76d',\n      negBarColor: '#60a76d',\n      composite: true\n    });\n  }\n\n  if ($(\".demo-sparkline\").length) {\n    $(\".demo-sparkline\").sparkline('html', {\n      enableTagOptions: true,\n      width: '100%',\n      height: '30px',\n      fillColor: false\n    });\n  }\n\n  if ($(\".top-seelling-dashboard-chart\").length) {\n    $(\".top-seelling-dashboard-chart\").sparkline('html', {\n      enableTagOptions: true,\n      width: '100%',\n      barWidth: 30,\n      fillColor: false\n    });\n  }\n\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/tablesorter.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    if ($('#sortable-table-1').length) {\n      $('#sortable-table-1').tablesort();\n    }\n    if ($('#sortable-table-2').length) {\n      $('#sortable-table-2').tablesort();\n    }\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/tabs.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    if ($('.demo-tabs').length) {\n      $('.demo-tabs').pwstabs({\n        effect: 'none'\n      });\n    }\n\n    if ($('.hello_world').length) {\n      $('.hello_world').pwstabs();\n    }\n\n    if ($('#rtl-tabs-1').length) {\n      $('#rtl-tabs-1').pwstabs({\n        effect: 'slidedown',\n        defaultTab: 2,\n        rtl: true\n      });\n    }\n\n    if ($('#vertical-left').length) {\n      $('#vertical-left').pwstabs({\n        effect: 'slideleft',\n        defaultTab: 1,\n        containerWidth: '600px',\n        tabsPosition: 'vertical',\n        verticalPosition: 'left'\n      });\n    }\n\n    if ($('#horizontal-left').length) {\n      $('#horizontal-left').pwstabs({\n        effect: 'slidedown',\n        defaultTab: 2,\n        containerWidth: '600px',\n        horizontalPosition: 'bottom'\n      });\n    }\n\n    if ($('.tickets-tab').length) {\n      $('.tickets-tab').pwstabs({\n        effect: 'none'\n      });\n    }\n\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/tight-grid.js",
    "content": "(function($) {\n  'use strict';\n  if ($('.grid').length) {\n    var colcade = new Colcade('.grid', {\n      columns: '.grid-col',\n      items: '.grid-item'\n    });\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/toastDemo.js",
    "content": "(function($) {\n  showSuccessToast = function() {\n    'use strict';\n    resetToastPosition();\n    $.toast({\n      heading: 'Success',\n      text: 'And these were just the basic demos! Scroll down to check further details on how to customize the output.',\n      showHideTransition: 'slide',\n      icon: 'success',\n      loaderBg: '#f96868',\n      position: 'top-right'\n    })\n  };\n  showInfoToast = function() {\n    'use strict';\n    resetToastPosition();\n    $.toast({\n      heading: 'Info',\n      text: 'And these were just the basic demos! Scroll down to check further details on how to customize the output.',\n      showHideTransition: 'slide',\n      icon: 'info',\n      loaderBg: '#46c35f',\n      position: 'top-right'\n    })\n  };\n  showWarningToast = function() {\n    'use strict';\n    resetToastPosition();\n    $.toast({\n      heading: 'Warning',\n      text: 'And these were just the basic demos! Scroll down to check further details on how to customize the output.',\n      showHideTransition: 'slide',\n      icon: 'warning',\n      loaderBg: '#57c7d4',\n      position: 'top-right'\n    })\n  };\n  showDangerToast = function() {\n    'use strict';\n    resetToastPosition();\n    $.toast({\n      heading: 'Danger',\n      text: 'And these were just the basic demos! Scroll down to check further details on how to customize the output.',\n      showHideTransition: 'slide',\n      icon: 'error',\n      loaderBg: '#f2a654',\n      position: 'top-right'\n    })\n  };\n  showToastPosition = function(position) {\n    'use strict';\n    resetToastPosition();\n    $.toast({\n      heading: 'Positioning',\n      text: 'Specify the custom position object or use one of the predefined ones',\n      position: String(position),\n      icon: 'info',\n      stack: false,\n      loaderBg: '#f96868'\n    })\n  }\n  showToastInCustomPosition = function() {\n    'use strict';\n    resetToastPosition();\n    $.toast({\n      heading: 'Custom positioning',\n      text: 'Specify the custom position object or use one of the predefined ones',\n      icon: 'info',\n      position: {\n        left: 120,\n        top: 120\n      },\n      stack: false,\n      loaderBg: '#f96868'\n    })\n  }\n  resetToastPosition = function() {\n    $('.jq-toast-wrap').removeClass('bottom-left bottom-right top-left top-right mid-center'); // to remove previous position class\n    $(\".jq-toast-wrap\").css({\n      \"top\": \"\",\n      \"left\": \"\",\n      \"bottom\": \"\",\n      \"right\": \"\"\n    }); //to remove previous position style\n  }\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/todolist.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    var todoListItem = $('.todo-list');\n    var todoListInput = $('.todo-list-input');\n    $('.todo-list-add-btn').on(\"click\", function(event) {\n      event.preventDefault();\n\n      var item = $(this).prevAll('.todo-list-input').val();\n\n      if (item) {\n        todoListItem.append(\"<li><div class='form-check'><label class='form-check-label'><input class='checkbox' type='checkbox'/>\" + item + \"<i class='input-helper'></i></label></div><i class='remove mdi mdi-close-circle-outline'></i></li>\");\n        todoListInput.val(\"\");\n      }\n\n    });\n\n    todoListItem.on('change', '.checkbox', function() {\n      if ($(this).attr('checked')) {\n        $(this).removeAttr('checked');\n      } else {\n        $(this).attr('checked', 'checked');\n      }\n\n      $(this).closest(\"li\").toggleClass('completed');\n\n    });\n\n    todoListItem.on('click', '.remove', function() {\n      $(this).parent().remove();\n    });\n\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/tooltips.js",
    "content": "(function($) {\n  'use strict';\n\n  $(function() {\n    /* Code for attribute data-custom-class for adding custom class to tooltip */\n    if (typeof $.fn.tooltip.Constructor === 'undefined') {\n      throw new Error('Bootstrap Tooltip must be included first!');\n    }\n\n    var Tooltip = $.fn.tooltip.Constructor;\n\n    // add customClass option to Bootstrap Tooltip\n    $.extend(Tooltip.Default, {\n      customClass: ''\n    });\n\n    var _show = Tooltip.prototype.show;\n\n    Tooltip.prototype.show = function() {\n\n      // invoke parent method\n      _show.apply(this, Array.prototype.slice.apply(arguments));\n\n      if (this.config.customClass) {\n        var tip = this.getTipElement();\n        $(tip).addClass(this.config.customClass);\n      }\n\n    };\n    $('[data-toggle=\"tooltip\"]').tooltip();\n\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/typeahead.js",
    "content": "(function($) {\n  'use strict';\n  var substringMatcher = function(strs) {\n    return function findMatches(q, cb) {\n      var matches, substringRegex;\n\n      // an array that will be populated with substring matches\n      matches = [];\n\n      // regex used to determine if a string contains the substring `q`\n      var substrRegex = new RegExp(q, 'i');\n\n      // iterate through the pool of strings and for any string that\n      // contains the substring `q`, add it to the `matches` array\n      for (var i = 0; i < strs.length; i++) {\n        if (substrRegex.test(strs[i])) {\n          matches.push(strs[i]);\n        }\n      }\n\n      cb(matches);\n    };\n  };\n\n  var states = ['Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California',\n    'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii',\n    'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana',\n    'Maine', 'Maryland', 'Massachusetts', 'Michigan', 'Minnesota',\n    'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire',\n    'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota',\n    'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania', 'Rhode Island',\n    'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont',\n    'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming'\n  ];\n\n  $('#the-basics .typeahead').typeahead({\n    hint: true,\n    highlight: true,\n    minLength: 1\n  }, {\n    name: 'states',\n    source: substringMatcher(states)\n  });\n  // constructs the suggestion engine\n  var states = new Bloodhound({\n    datumTokenizer: Bloodhound.tokenizers.whitespace,\n    queryTokenizer: Bloodhound.tokenizers.whitespace,\n    // `states` is an array of state names defined in \"The Basics\"\n    local: states\n  });\n\n  $('#bloodhound .typeahead').typeahead({\n    hint: true,\n    highlight: true,\n    minLength: 1\n  }, {\n    name: 'states',\n    source: states\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/widgets.js",
    "content": "(function($) {\n  'use strict';\n  $.fn.andSelf = function() {\n    return this.addBack.apply(this, arguments);\n  }\n  $(function() {\n    var isrtl = $(\"body\").hasClass(\"rtl\");\n    if ($('.owl-carousel').length) {\n      $('.owl-carousel').owlCarousel({\n        loop: true,\n        margin: 10,\n        dots: false,\n        nav: true,\n        rtl: isrtl,\n        autoplay: true,\n        autoplayTimeout: 4500,\n        navText: [\"<i class='mdi mdi-chevron-left'></i>\", \"<i class='mdi mdi-chevron-right'></i>\"],\n        responsive: {\n          0: {\n            items: 1\n          },\n          600: {\n            items: 1\n          },\n          1000: {\n            items: 1\n          }\n        }\n      });\n    }\n    });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/wizard.js",
    "content": "(function($) {\n  'use strict';\n  var form = $(\"#example-form\");\n  form.children(\"div\").steps({\n    headerTag: \"h3\",\n    bodyTag: \"section\",\n    transitionEffect: \"slideLeft\",\n    onFinished: function(event, currentIndex) {\n      alert(\"Submitted!\");\n    }\n  });\n  var validationForm = $(\"#example-validation-form\");\n  validationForm.val({\n    errorPlacement: function errorPlacement(error, element) {\n      element.before(error);\n    },\n    rules: {\n      confirm: {\n        equalTo: \"#password\"\n      }\n    }\n  });\n  validationForm.children(\"div\").steps({\n    headerTag: \"h3\",\n    bodyTag: \"section\",\n    transitionEffect: \"slideLeft\",\n    onStepChanging: function(event, currentIndex, newIndex) {\n      validationForm.val({\n        ignore: [\":disabled\", \":hidden\"]\n      })\n      return validationForm.val();\n    },\n    onFinishing: function(event, currentIndex) {\n      validationForm.val({\n        ignore: [':disabled']\n      })\n      return validationForm.val();\n    },\n    onFinished: function(event, currentIndex) {\n      alert(\"Submitted!\");\n    }\n  });\n  var verticalForm = $(\"#example-vertical-wizard\");\n  verticalForm.children(\"div\").steps({\n    headerTag: \"h3\",\n    bodyTag: \"section\",\n    transitionEffect: \"slideLeft\",\n    stepsOrientation: \"vertical\",\n    onFinished: function(event, currentIndex) {\n      alert(\"Submitted!\");\n    }\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/js/x-editable.js",
    "content": "(function($) {\n  'use strict';\n  $(function() {\n    if ($('#editable-form').length) {\n      $.fn.editable.defaults.mode = 'inline';\n      $.fn.editableform.buttons =\n        '<button type=\"submit\" class=\"btn btn-primary btn-sm editable-submit\">' +\n        '<i class=\"fa fa-fw fa-check\"></i>' +\n        '</button>' +\n        '<button type=\"button\" class=\"btn btn-default btn-sm editable-cancel\">' +\n        '<i class=\"fa fa-fw fa-times\"></i>' +\n        '</button>';\n      $('#username').editable({\n        type: 'text',\n        pk: 1,\n        name: 'username',\n        title: 'Enter username'\n      });\n\n      $('#firstname').editable({\n        validate: function(value) {\n          if ($.trim(value) === '') return 'This field is required';\n        }\n      });\n\n      $('#sex').editable({\n        source: [{\n            value: 1,\n            text: 'Male'\n          },\n          {\n            value: 2,\n            text: 'Female'\n          }\n        ]\n      });\n\n      $('#status').editable();\n\n      $('#group').editable({\n        showbuttons: false\n      });\n\n      $('#vacation').editable({\n        datepicker: {\n          todayBtn: 'linked'\n        }\n      });\n\n      $('#dob').editable();\n\n      $('#event').editable({\n        placement: 'right',\n        combodate: {\n          firstItem: 'name'\n        }\n      });\n\n      $('#meeting_start').editable({\n        format: 'yyyy-mm-dd hh:ii',\n        viewformat: 'dd/mm/yyyy hh:ii',\n        validate: function(v) {\n          if (v && v.getDate() === 10) return 'Day cant be 10!';\n        },\n        datetimepicker: {\n          todayBtn: 'linked',\n          weekStart: 1\n        }\n      });\n\n      $('#comments').editable({\n        showbuttons: 'bottom'\n      });\n\n      $('#note').editable();\n      $('#pencil').on(\"click\", function(e) {\n        e.stopPropagation();\n        e.preventDefault();\n        $('#note').editable('toggle');\n      });\n\n      $('#state').editable({\n        source: [\"Alabama\", \"Alaska\", \"Arizona\", \"Arkansas\", \"California\", \"Colorado\", \"Connecticut\", \"Delaware\", \"Florida\", \"Georgia\", \"Hawaii\", \"Idaho\", \"Illinois\", \"Indiana\", \"Iowa\", \"Kansas\", \"Kentucky\", \"Louisiana\", \"Maine\", \"Maryland\", \"Massachusetts\", \"Michigan\", \"Minnesota\", \"Mississippi\", \"Missouri\", \"Montana\", \"Nebraska\", \"Nevada\", \"New Hampshire\", \"New Jersey\", \"New Mexico\", \"New York\", \"North Dakota\", \"North Carolina\", \"Ohio\", \"Oklahoma\", \"Oregon\", \"Pennsylvania\", \"Rhode Island\", \"South Carolina\", \"South Dakota\", \"Tennessee\", \"Texas\", \"Utah\", \"Vermont\", \"Virginia\", \"Washington\", \"West Virginia\", \"Wisconsin\", \"Wyoming\"]\n      });\n\n      $('#state2').editable({\n        value: 'California',\n        typeahead: {\n          name: 'state',\n          local: [\"Alabama\", \"Alaska\", \"Arizona\", \"Arkansas\", \"California\", \"Colorado\", \"Connecticut\", \"Delaware\", \"Florida\", \"Georgia\", \"Hawaii\", \"Idaho\", \"Illinois\", \"Indiana\", \"Iowa\", \"Kansas\", \"Kentucky\", \"Louisiana\", \"Maine\", \"Maryland\", \"Massachusetts\", \"Michigan\", \"Minnesota\", \"Mississippi\", \"Missouri\", \"Montana\", \"Nebraska\", \"Nevada\", \"New Hampshire\", \"New Jersey\", \"New Mexico\", \"New York\", \"North Dakota\", \"North Carolina\", \"Ohio\", \"Oklahoma\", \"Oregon\", \"Pennsylvania\", \"Rhode Island\", \"South Carolina\", \"South Dakota\", \"Tennessee\", \"Texas\", \"Utah\", \"Vermont\", \"Virginia\", \"Washington\", \"West Virginia\", \"Wisconsin\", \"Wyoming\"]\n        }\n      });\n\n      $('#fruits').editable({\n        pk: 1,\n        limit: 3,\n        source: [{\n            value: 1,\n            text: 'banana'\n          },\n          {\n            value: 2,\n            text: 'peach'\n          },\n          {\n            value: 3,\n            text: 'apple'\n          },\n          {\n            value: 4,\n            text: 'watermelon'\n          },\n          {\n            value: 5,\n            text: 'orange'\n          }\n        ]\n      });\n\n      $('#tags').editable({\n        inputclass: 'input-large',\n        select2: {\n          tags: ['html', 'javascript', 'css', 'ajax'],\n          tokenSeparators: [\",\", \" \"]\n        }\n      });\n\n      $('#address').editable({\n        url: '/post',\n        value: {\n          city: \"Moscow\",\n          street: \"Lenina\",\n          building: \"12\"\n        },\n        validate: function(value) {\n          if (value.city === '') return 'city is required!';\n        },\n        display: function(value) {\n          if (!value) {\n            $(this).empty();\n            return;\n          }\n          var html = '<b>' + $('<div>').text(value.city).html() + '</b>, ' + $('<div>').text(value.street).html() + ' st., bld. ' + $('<div>').text(value.building).html();\n          $(this).html(html);\n        }\n      });\n\n      $('#user .editable').on('hidden', function(e, reason) {\n        if (reason === 'save' || reason === 'nochange') {\n          var $next = $(this).closest('tr').next().find('.editable');\n          if ($('#autoopen').is(':checked')) {\n            setTimeout(function() {\n              $next.editable('show');\n            }, 300);\n          } else {\n            $next.focus();\n          }\n        }\n      });\n    }\n  });\n})(jQuery);"
  },
  {
    "path": "BlackStone/assets/scss/_layouts.scss",
    "content": "/* Layouts */\n\n.navbar {\n  &.fixed-top {\n    + .page-body-wrapper {\n      padding-top: $navbar-height;\n    }\n  }\n}\n\n// Sidebar Icon Only\n.sidebar-icon-only {\n  @media (min-width: 992px) {\n    .navbar {\n      left: $sidebar-width-icon;\n      .navbar-menu-wrapper {\n        width: 100%;\n      }\n    }\n    .sidebar {\n      width: $sidebar-width-icon;\n      .sidebar-brand-wrapper {\n        width: $sidebar-width-icon;\n        .brand-logo {\n          display: none;\n        }\n        .brand-logo-mini {\n          display: inline-block;\n        }\n      }\n      .nav {\n        overflow: visible;\n        .nav-item {\n          position: relative;\n          padding: 0;\n          .profile-name {\n            display: none;\n          }\n          .mdi-dots-vertical {\n            display: none;\n          }\n          &.account-dropdown {\n            display: none;\n          }\n          .nav-link {\n            text-align: center;\n            .menu-title,\n            .badge,.menu-sub-title {\n              display: none;\n            }\n            .menu-title {\n              @include border-radius(0 5px 5px 0px);\n              @at-root #{selector-append(\".rtl\", &)} {\n                @include border-radius(5px 0 0 5px);\n              }\n            }\n            i {\n              &.menu-icon {\n                margin-right: 0;\n                margin-left: 0;\n              }\n              &.menu-arrow {\n                display: none;\n              }\n            }\n            &[aria-expanded] {\n              .menu-title{\n                @include border-radius(0 5px 0 0px);\n                @at-root #{selector-append(\".rtl\", &)} {\n                  @include border-radius(5px 0 0 0);\n                }\n              }\n            }\n          }\n          &.nav-profile {\n            display: none;\n          }\n          &.nav-category {\n            display: none;\n          }\n          &.nav-doc {\n            margin: 0;\n            i {\n              display: block;\n            }\n          }\n          .collapse {\n            display: none;\n          }\n          &.hover-open {\n            .nav-link {\n              .menu-title {\n                @include display-flex;\n                @include align-items(center);\n                background: $icon-only-menu-bg-light;\n                @at-root #{selector-append(\".sidebar-dark\", &)} {\n                    background: $sidebar-dark-menu-active-bg;\n                }\n                padding: 0.5rem 1.4rem;\n                left: $sidebar-width-icon;\n                position: absolute;\n                text-align: left;\n                top: 0;\n                bottom: 0;\n                width: $icon-only-collapse-width;\n                z-index: 1;\n                line-height: 1.8;\n                @at-root #{selector-append(\".rtl\", &)} {\n                  left: auto;\n                  right: $sidebar-width-icon;\n                  text-align: left;\n                }\n                &:after {\n                  display: none;\n                }\n              }\n            }\n            .collapse,\n            .collapsing {\n              display: block;\n              padding: .5rem 0;\n              background: $icon-only-menu-bg-light;\n              @include border-radius(0 0 5px 0);\n              @at-root #{selector-append(\".sidebar-dark\", &)} {\n                  background: $sidebar-dark-bg;\n              }\n              position: absolute;\n              left: $sidebar-width-icon;\n              width: $icon-only-collapse-width;\n              @at-root #{selector-append(\".rtl\", &)} {\n                  left: auto;\n                  right:$sidebar-width-icon;\n                  @include border-radius(0 0 0 5px);\n              }\n            }\n          }\n        }\n        &.sub-menu {\n          padding: $sidebar-icon-only-submenu-padding;\n          .nav-item {\n            .nav-link {\n              text-align: left;\n              padding-left: 20px;\n              &:before {\n                content: \"\";\n                display: inline-block;\n                width: 5px;\n                height: 5px;\n                border-radius: 50%;\n                background-color: $sidebar-dark-submenu-color;\n                position: absolute;\n                left: 0;\n            }\n            &:hover {\n              &:before {\n                background-color: white;\n              }\n            }\n            }\n          }\n          @at-root #{selector-append(\".rtl\", &)} {\n            .nav-item {\n              margin-left: 0;\n              .nav-link {\n                text-align: right;\n                &:before{\n                  left: 0;\n                  right: unset;\n                }\n              }\n            }\n          }\n        }\n      }\n      .sidebar-actions {\n        display: none;\n      }\n    }\n    &.rtl {\n      .sidebar {\n        .nav {\n          .nav-item {\n            &.profile {\n              padding-right: 0;\n            }\n          }\n        }\n      }\n    }\n    .page-body-wrapper {\n      width: calc(100% - #{$sidebar-width-icon});\n      transition: all $action-transition-duration $action-transition-timing-function;\n      -webkit-transition: all $action-transition-duration $action-transition-timing-function;\n      -moz-transition: all $action-transition-duration $action-transition-timing-function;\n      -ms-transition: all $action-transition-duration $action-transition-timing-function;\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/_navbar.scss",
    "content": "/* Navbar */\n\n.navbar {\n  font-weight: normal;\n  background: $navbar-bg;\n  left: $sidebar-width-lg;\n  transition:left $action-transition-duration $action-transition-timing-function;\n  -webkit-transition:left $action-transition-duration $action-transition-timing-function;\n  -moz-transition:left $action-transition-duration $action-transition-timing-function;\n  -ms-transition:left $action-transition-duration $action-transition-timing-function;\n  @media (max-width:992px) {\n    left: 0;\n  }\n  .navbar-brand-wrapper {\n    transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    -webkit-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    -moz-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    -ms-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    background: $navbar-bg;\n    width: $sidebar-width-lg;\n    height: $navbar-height;\n    @media (max-width: 991px) {\n      width: 55px;\n    }\n    .navbar-brand {\n      color: lighten($gray-dark, 20%);\n      font-size: 1.5rem;\n      line-height: 48px;\n      margin-right: 0;\n      padding: 0rem 0rem 0rem 1.3rem;\n      width: 100%;\n\n      &:active,\n      &:focus,\n      &:hover {\n        color: lighten($gray-dark, 10%);\n      }\n\n      img {\n        width: calc(#{$sidebar-width-lg} - 120px );\n        max-width: 100%;\n        height: 28px;\n        margin: auto;\n        vertical-align: middle;\n      }\n      &.brand-logo-mini {\n        display: none;\n        img {\n          width: calc(#{$sidebar-width-icon} - 50px );\n          max-width: 100%;\n          height: 28px;\n          margin: auto;\n        }\n      }\n    }\n  }\n  .navbar-menu-wrapper {\n    transition: width $action-transition-duration $action-transition-timing-function;\n    -webkit-transition: width $action-transition-duration $action-transition-timing-function;\n    -moz-transition: width $action-transition-duration $action-transition-timing-function;\n    -ms-transition: width $action-transition-duration $action-transition-timing-function;\n    box-shadow: $navbar-box-shadow;\n    -webkit-box-shadow: $navbar-box-shadow;\n    -moz-box-shadow: $navbar-box-shadow;  \n    color: $navbar-menu-color;\n    padding-left: 15px;\n    padding-right: 15px;\n    width: 100%;\n    height: $navbar-height;\n    .rtl & {\n      box-shadow: $navbar-box-shadow-rtl;\n    -webkit-box-shadow: $navbar-box-shadow-rtl;\n    -moz-box-shadow: $navbar-box-shadow-rtl;  \n    }\n    @media (max-width: 991px) {\n      width: auto;\n      padding-left: 15px;\n      padding-right: 15px;\n    }\n    .navbar-toggler {\n      border: 0;\n      color: $text-muted;\n      height: $navbar-height;\n      &:focus {\n        box-shadow: none\n      }\n      @include border-radius(0px);\n      &:not(.navbar-toggler-right) {\n        font-size: 0.875rem;\n        @media (max-width: 991px) {\n          display: none;\n        }\n      }\n      &.navbar-toggler-right{\n        @media (max-width:991px){\n          padding-left: 15px;\n          padding-right: 11px;\n          border-right: none;\n        }\n      }\n    }\n    .search-field {\n      .input-group {\n        input {\n          font-size: $default-font-size;\n          padding: .5rem;\n          @include input-placeholder {\n            font-size: $navbar-font-size;\n            color: $navbar-menu-color;\n            font-weight: $font-weight-light;\n          }\n        }\n        i {\n          font-size: 17px;\n          margin-right: 0;\n          color: $navbar-menu-color;\n        }\n        .input-group-text {\n          background: transparent;\n        }\n      }\n      .rtl & {\n        @extend .ms-0;\n        @extend .me-4;\n      }\n    }\n    .count-indicator {\n      position: relative;\n\n      .count-symbol,\n      .count-number {\n        position: absolute;\n        border-radius: 100%;\n        border: 2px solid $navbar-bg;\n      }\n      .count-symbol {\n        top: 17px;\n        right: -3px;\n        width: 10px;\n        height: 10px;\n      }\n      .count-number {\n        min-width: 14px;\n        height: 14px;\n        font-size: .5rem;\n        color: $white;\n        bottom: 16px;\n        right: -5px;\n        line-height: 1;\n        text-align: center;\n      }\n      &:after {\n        display: none;\n      }\n      .count {\n        position: absolute;\n        left: 66%;\n        width: 7px;\n        height: 7px;\n        color: $white;\n        border-radius: 100%;\n        text-align: center;\n        font-size: .625rem;\n        line-height: 1.5;\n        top: 7px;\n      }\n    }\n    .navbar-nav {\n      flex-direction: row;\n      align-items: center;\n      .nav-item {\n        .nav-link {\n          color: inherit;\n          font-size: $navbar-font-size;\n          margin-left: 1rem;\n          margin-right: 1rem;\n          white-space: nowrap;\n          @media (max-width: 767px) {\n            margin-left: .8rem;\n            margin-right: .8rem;\n          }\n          i {\n            font-size: $navbar-icon-font-size;\n          }\n          .navbar-profile {\n            display: flex;\n            font-weight: normal;\n            align-items: center;\n            .navbar-profile-name {\n              white-space: nowrap;\n              margin-left: 1rem;\n            }\n            i {\n              color: #a7afb7;\n            }\n          }\n          &.create-new-button {\n            padding: 0.375rem 0.75rem;\n          }\n        }\n        &.dropdown {\n          line-height: 1rem;\n          .dropdown-toggle {\n            &:after {\n              color: $primary;\n              font-size: 1rem;\n            }\n          }\n          .dropdown-menu {\n            @extend .dropdownAnimation;\n            border: none;\n            @include border-radius(4px);\n            &.navbar-dropdown {\n              position: absolute;            \n              font-size: 0.9rem;\n              margin-top: 0;\n              top: 48px;\n              right: 0;\n              left: auto;\n              -webkit-box-shadow: 0px 0px 35px -3px rgb(0, 0, 0);\n              -moz-box-shadow: 0px 0px 35px -3px rgb(0, 0, 0);\n              box-shadow: 0px 0px 35px -3px rgb(0, 0, 0);\n              .rtl & {\n                right: auto;\n                left: 0;\n              }\n              padding: 0;\n\n              .dropdown-item {\n                @extend .d-flex;\n                @extend .align-items-center;\n                margin-bottom: 0;\n                padding: 11px 13px;\n                cursor: pointer;\n                &:hover {\n                  color: #fff;\n                }\n                i {\n                  font-size: 17px;\n                }\n                .ellipsis {\n                  max-width: 200px;\n                  overflow: hidden;\n                  text-overflow: ellipsis;\n                }\n                .rtl & {\n                  i{\n                    @extend .me-0;\n                    margin-left: 10px;\n                  }\n                }\n              }\n              .dropdown-divider {\n                margin: 0;\n              }\n            }\n          }\n          @media (max-width: 991px) {\n            position: static;\n            .navbar-dropdown {\n              left: 20px;\n              right: 20px;\n              top: $navbar-height;\n              width: calc(100% - 40px);\n            }\n          }\n        }\n        &.nav-profile {\n          .nav-link {\n            @extend .d-flex;\n            .nav-profile-img {\n              position: relative;\n              width: 32px;\n              height: 32px;\n              img {\n                width: 32px;\n                height: 32px;\n                border-radius: 100%;\n              }\n              .availability-status {\n                position: absolute;\n                width: 10px;\n                height: 10px;\n                border-radius: 100%;\n                border: 2px solid #ffffff;\n                bottom: 5px;\n                right: -5px;\n                &.online {\n                  background: $success;\n                }\n                &.offline {\n                  background: $danger;\n                }\n                &.busy {\n                  background: $warning;\n                }\n              }\n            }\n            .nav-profile-text {\n              margin-left: 1.25rem;\n              .rtl & {\n                margin-left: 0;\n                margin-right: 1.25rem;\n              }\n              p {\n                line-height: 1;\n              }\n              @media (max-width: 767px) {\n                display: none;\n              }\n            }\n            &.dropdown-toggle {\n              &:after {\n                line-height: 2;\n              }\n            }\n          }\n        }\n      }\n      &.navbar-nav-right {\n        @media (min-width: 992px) {\n          margin-left: auto;\n          .rtl & {\n            margin-left: 0;\n            margin-right: auto;\n          }\n        }\n      }\n    }\n    .search {\n      input {\n        background: $card-bg;\n        padding: 13px 20px 11px 20px;\n        border: 1px solid #2c2e33;\n        &::placeholder {\n          color: $text-muted;\n          font-size: $input-placeholder-font-size;\n        }\n      }\n    }\n  }\n}\n@media (max-width:991px) {\n  .navbar {\n    flex-direction: row;\n    .navbar-brand-wrapper {\n      width: 75px;\n      .navbar-brand {\n        &.brand-logo {\n          display: none;\n        }\n        &.brand-logo-mini {\n          display: inline-block;\n        }\n      }\n    }\n  }\n  .navbar-collapse {\n    display: flex;\n    margin-top: 0.5rem;\n  }\n}\n@media (max-width:480px) {\n  .navbar {\n    .navbar-brand-wrapper {\n      width: 55px;\n      .brand-logo-mini{\n        padding-top: 0px;\n      }\n    }\n  }\n}\n\n.sidebar-tinted {\n  .navbar {\n    .navbar-brand-wrapper {\n      background: $navbar-brand-wrapper-tinted-bg;\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/_sidebar.scss",
    "content": "/* Sidebar */\n\n.sidebar {\n  min-height: calc(100vh - #{$navbar-height});\n  background: $sidebar-dark-bg;\n  font-weight: normal;\n  padding: 0;\n  width: $sidebar-width-lg;\n  z-index: 11;\n  transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n  -webkit-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n  -moz-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n  -ms-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n\n  .sidebar-brand-wrapper {\n    transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    -webkit-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    -moz-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    -ms-transition: width $action-transition-duration $action-transition-timing-function, background $action-transition-duration $action-transition-timing-function;\n    background: $sidebar-dark-bg;\n    width: $sidebar-width-lg;\n    height: $navbar-height;\n    @media (max-width: 991px) {\n      width: 55px;\n    }\n    .sidebar-brand {\n      color: lighten($gray-dark, 20%);\n      font-size: 1.5rem;\n      line-height: 48px;\n      margin-right: 0;\n      padding: 0rem 0rem 0rem 1.3rem;\n      width: 100%;\n\n      &:active,\n      &:focus,\n      &:hover {\n        color: lighten($gray-dark, 10%);\n      }\n\n      img {\n        width: calc(#{$sidebar-width-lg} - 120px );\n        max-width: 100%;\n        height: 28px;\n        margin: auto;\n        vertical-align: middle;\n      }\n      &.brand-logo-mini {\n        display: none;\n        img {\n          width: calc(#{$sidebar-width-icon} - 50px );\n          max-width: 100%;\n          height: 28px;\n          margin: auto;\n        }\n      }\n    }\n  }\n\n  .nav {\n    overflow: hidden;\n    flex-wrap: nowrap;\n    flex-direction: column;\n    margin-bottom: 60px;\n    padding-top: $navbar-height;\n    @media (max-width:992px) {\n      padding-top: 0;\n    }\n\n    .nav-item {\n      @include transition-duration(0.25s);\n      transition-property: background;\n      -webkit-transition-property: background;\n      padding-right: 20px;\n      .collapse {\n        z-index: 999;\n      }\n\n      .nav-link {\n        @include display-flex;\n        @include align-items(center);\n        white-space: nowrap;\n        padding: $sidebar-menu-padding-y 10px $sidebar-menu-padding-y $sidebar-menu-padding-x;\n        color: $sidebar-dark-menu-color;\n        @include transition-duration(0.45s);\n        transition-property: color;\n        -webkit-transition-property: color;\n        height: 46px;\n        border-radius: 0px 100px 100px 0px;\n        \n        i {\n          color: inherit;\n          &.menu-icon {\n            font-size: $sidebar-icon-font-size;\n            line-height: 1;\n            margin-left: auto;\n            .rtl & {\n              margin-left: 0;\n              margin-right: auto;\n            }\n            color: $sidebar-dark-menu-icon-color;\n            &:before {\n              vertical-align: middle;\n            }\n          }\n          &.menu-arrow {\n            font: normal normal normal 24px/1 \"Material Design Icons\";\n            line-height: 1;\n            font-size: $sidebar-icon-font-size;\n            margin-left: auto;\n            .rtl & {\n              margin-left: 0;\n              margin-right: auto;\n            }\n            color: $sidebar-dark-menu-arrow-color;\n            &:before{\n              content: \"\\f140\";\n              font-size: inherit;\n              color: inherit;\n            }\n          }\n        }\n        .menu-title {\n          color: inherit;\n          display: inline-block;\n          font-size: $sidebar-menu-font-size;\n          line-height: 1;\n          vertical-align: middle;\n        }\n        .badge {\n          margin-right: auto;\n          margin-left: 1rem;\n        }\n      }\n\n      &.active {\n        > .nav-link {\n          background: $sidebar-dark-menu-active-bg;\n          position: relative;\n          &:before {\n            content: \"\";\n            width: 3px;\n            height: 100%;\n            background: $primary;\n            display: inline-block;\n            position: absolute;\n            left: 0;\n            top: 0;\n          }\n          .menu-title {\n            color: $sidebar-dark-menu-active-color;        \n          }\n          i {\n            color: #ffffff;\n          }\n        }\n      }\n      &.nav-profile {\n        .nav-link {\n          height: auto;\n          line-height: 1;\n          border-top: 0;\n          padding: 1.25rem 0;\n          .nav-profile-image {\n            width: 44px;\n            height: 44px;\n            img {\n              width: 44px;\n              height: 44px;\n              border-radius: 100%;\n            }\n          }\n          .nav-profile-text {\n            margin-left: 1rem;\n            .rtl & {\n              margin-left: auto;\n              margin-right: 1rem;\n            }\n          }\n          .nav-profile-badge {\n            font-size: 1.125rem;\n            margin-left: auto;\n            .rtl & {\n              margin-left: 0;\n              margin-right: auto;\n            }\n          }\n        }\n      }\n      &.sidebar-actions {\n        margin-top: 1rem;\n        .nav-link {\n          border-top: 0;\n          display: block;\n          height: auto;\n        }\n        &:hover {\n          background: initial;\n          .nav-link {\n            color: initial;\n          }\n        }\n      }\n      &.profile {\n        padding-right: 0px;\n        .rtl & {\n          padding-right: 10px;\n        }\n        .profile-desc {\n          display: flex;\n          flex-direction: row;\n          align-items: center;\n          justify-content: space-between;\n          padding: 0.6rem 1.17rem;\n          line-height: 1.25;\n          .profile-name {\n            margin-left: 1rem;\n            .rtl & {\n              margin-left: 0;\n              margin-right: 1rem;\n            }\n            span {\n              font-size: 12px;\n              color: $text-muted;\n              white-space: nowrap;\n            }\n            h5 {\n              white-space: nowrap;\n            }\n          } \n          .profile-pic {\n            display: flex;\n            align-items: center;\n            .count-indicator {\n              position: relative;\n              .count-symbol,\n              .count-number {\n                position: absolute;\n                border-radius: 100%;\n                border: 2px solid $navbar-bg;\n              }\n              .count-symbol {\n                top: 17px;\n                right: -3px;\n                width: 10px;\n                height: 10px;\n              }\n              .count-number {\n                min-width: 14px;\n                height: 14px;\n                font-size: .5rem;\n                color: $white;\n                bottom: 16px;\n                right: -5px;\n                line-height: 1;\n                text-align: center;\n              }\n              &:after {\n                display: none;\n              }\n              .count {\n                position: absolute;\n                left: 66%;\n                width: 10px;\n                height: 10px;\n                color: $white;\n                border-radius: 100%;\n                text-align: center;\n                font-size: .625rem;\n                line-height: 1.5;\n                top: 26px;\n                border: 2px solid $border-color;\n              }\n            }\n          }\n          .mdi-dots-vertical {\n            font-size: 20px;\n            color: $text-muted;\n          }\n          .dropdown-menu {\n            padding: 0;\n            margin-top: 1.25rem;\n            .dropdown-item {\n              padding: 11px 13px;\n              &.preview-item {\n                align-items: center;\n                .preview-thumbnail {\n                  .preview-icon {\n                    width: 30px;\n                    height: 30px;\n                    i {\n                      font-size: 0.875rem;\n                    }\n                  }\n                }\n              }\n              &:hover {\n                color: inherit;\n              }\n            }\n            .dropdown-divider {\n              margin: 0;\n            }\n          }\n        }\n      }\n      &.nav-category {\n        padding: 0.5rem 1.188rem;\n        line-height: 1;\n        .nav-link {\n          color: $text-muted;\n          font-weight: $font-weight-medium;\n          font-size: 14px;\n          font-weight: 500;\n          height: auto;\n          padding-left: 0;\n        }\n      }\n      .menu-icon {\n        margin-right: 0.5rem;\n        font-size: 0.8125rem;\n        line-height: 1;\n        background: rgba($text-muted, 0.2);\n        width: 31px;\n        height: 31px;\n        border-radius: 100%;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        color: #ffffff;\n        i {\n          font-size: 0.875rem;\n        }\n      }\n    }\n    &.sub-menu {\n      margin-bottom: 0;\n      margin-top:0;\n      padding: 0 0 0 3.25rem;\n      list-style: none;\n\n      .nav-item {\n        padding: 0;\n        .nav-link {\n          color: $sidebar-dark-submenu-color;\n          padding: $sidebar-submenu-item-padding;\n          position: relative;\n          font-size: $sidebar-submenu-font-size;\n          line-height: 1;\n          height: auto;\n          border-top: 0;\n          &.active {\n            color: $sidebar-dark-menu-active-color;\n            background: transparent;\n          }\n          &:hover {\n            color: $sidebar-dark-submenu-hover-color;\n          }\n        }\n        &:hover {\n          background: transparent;\n        }\n      }\n    }\n    &:not(.sub-menu) {\n      >.nav-item {\n        &:hover {\n          &:not(.nav-category):not(.account-dropdown) {\n            >.nav-link {\n              background: $sidebar-dark-menu-hover-bg;\n              color: $sidebar-dark-menu-hover-color;\n            }\n          }\n        }\n      }\n    }\n      .menu-items {\n        &:nth-child(5n+1) {\n          .nav-link {\n            .menu-icon {\n              i {\n                color: $primary;\n              }\n            }\n          }\n        }\n  \n        &:nth-child(5n+2) {\n          .nav-link {\n            .menu-icon {\n              i {\n                color: $success;\n              }\n            }\n          }\n        }\n  \n        &:nth-child(5n+3) {\n          .nav-link {\n            .menu-icon {\n              i {\n                color: $info;\n              }\n            }\n          }\n        }\n  \n        &:nth-child(5n+4) {\n          .nav-link {\n            .menu-icon {\n              i {\n                color: $warning;\n              }\n            }\n          }\n        }\n  \n        &:nth-child(5n+5) {\n          .nav-link {\n            .menu-icon {\n              i {\n                color: $danger;\n              }\n            }\n          }\n        }\n      }\n    \n      \n    \n    \n  }\n}\n\n/* style for off-canvas menu*/\n@media screen and (max-width: 991px) {\n  .sidebar-offcanvas {\n    position: fixed;\n    max-height: calc(100vh - #{$navbar-height});\n    top: $navbar-height;\n    bottom: 0;\n    overflow: auto;\n    right: -$sidebar-width-lg;\n    -webkit-transition: all 0.25s ease-out;\n    -o-transition: all 0.25s ease-out;\n    transition: all 0.25s ease-out;\n    &.active {\n      right: 0;\n    }\n  }\n}\n\n.sidebar-tinted {\n  .sidebar {\n    background: $sidebar-tinted-bg;\n    .sidebar-brand-wrapper {\n      background: $sidebar-tinted-bg;\n    }\n    .nav {\n      .nav-item {\n        .nav-link {\n          color: $sidebar-tinted-menu-color;\n          .menu-icon {\n            i {\n              color: white;\n            }\n          }\n          i {\n            &.menu-arrow {\n              color: $sidebar-tinted-menu-arrow-color;\n            }\n          }\n        }\n        &.active {\n          > .nav-link {\n            background: $sidebar-tinted-menu-active-bg;\n          }\n          &:before {\n            background: $sidebar-tinted-menu-color; \n          }\n        }\n        &.profile {\n          .profile-desc {\n            .profile-name {\n              span {\n                color: $sidebar-tinted-menu-color;\n              }\n            }\n            .mdi-dots-vertical {\n              color: $sidebar-tinted-menu-color;\n            }\n          }\n          \n          .profile-pic {\n            .count-indicator {\n              .count {\n                border: 2px solid #fa424a;\n              }\n            }\n          }\n        }\n      }\n      &.sub-menu {\n        .nav-item {\n          .nav-link {\n            &:hover {\n              font-weight: $font-weight-medium;\n            }\n          }\n        }\n      }\n      &:not(.sub-menu) {\n        >.nav-item {\n          &:hover {\n            &:not(.nav-category):not(.account-dropdown) {\n              >.nav-link {\n                background: $sidebar-tinted-menu-hover-bg;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/_variables.scss",
    "content": "////////// COLOR SYSTEM //////////\n\n$blue: #5E50F9;\n$indigo: #6610f2;\n$purple: #6a008a;\n$pink: #E91E63;\n$red: #f96868;\n$orange: #f2a654;\n$yellow: #f6e84e;\n$green: #46c35f;\n$teal: #58d8a3;\n$cyan: #57c7d4;\n$black: #000;\n$white: #ffffff;\n$white-smoke: #f2f7f8;\n$violet: #41478a;\n$darkslategray : #2e383e;\n$dodger-blue : #3498db;\n\n\n$colors: (\n  blue: $blue,\n  indigo: $indigo,\n  purple: $purple,\n  pink: $pink,\n  red: $red,\n  orange: $orange,\n  yellow: $yellow,\n  green: $green,\n  teal: $teal,\n  cyan: $cyan,\n  white: $white,\n  gray: #434a54,\n  gray-light: #aab2bd,\n  gray-lighter: #e8eff4,\n  gray-lightest: #e6e9ed,\n  gray-dark: #12151e,\n  black: #000000\n);\n\n$blue: $blue;\n$indigo: $indigo;\n$purple: $purple;\n$pink: $pink;\n$red: $red;\n$orange: $orange;\n$yellow: $yellow;\n$green: $green;\n$teal: $teal;\n$cyan: $cyan;\n$white: $white;\n$gray: #434a54;\n$gray-light: #aab2bd;\n$gray-lighter: #e8eff4;\n$gray-lightest: #e6e9ed;\n$gray-dark: #12151e;\n$black: #000000;\n\n$theme-colors: (\n  primary: #0090e7,\n  secondary: #e4eaec,\n  success: #00d25b,\n  info:  #8f5fe8,\n  warning: #ffab00,\n  danger: #fc424a,\n  light: $white,\n  dark: #0d0d0d\n  );\n\n  $primary: #0090e7;\n  $secondary: #e4eaec;\n  $success: #00d25b;\n  $info:  #8f5fe8;\n  $warning: #ffab00;\n  $danger: #fc424a;\n  $light: $white;\n  $dark: #0d0d0d;\n\n\n\n////////// COLOR SYSTEM //////////\n\n////////// COLOR VARIABLES //////////\n$content-bg: #000000;\n$footer-bg: $content-bg;\n$footer-color: color(dark);\n$border-color: #2c2e33;\n////////// COLOR VARIABLES //////////\n\n////////// SOCIAL COLORS //////////\n\n$social-colors: (twitter: #2caae1,\nfacebook: #3b579d,\ngoogle: #dc4a38,\nlinkedin: #0177b5,\npinterest: #cc2127,\nyoutube: #e52d27,\ngithub: #333333,\nbehance: #1769ff,\ndribbble: #ea4c89,\nreddit: #ff4500);\n\n////////// SOCIAL COLORS //////////\n\n////////// FONTS//\n\n$type1:     'Rubik', sans-serif;\n\n////////// FONT-WEIGHT/////////\n\n$font-weight-light: 300;\n$font-weight-medium: 500;\n$font-weight-bold: 700;\n\n$default-font-size: .875rem; // 14px as base font size\n\n$text-muted: #6c7293;\n$body-color: #ffffff;\n\n////////// FONT VARIABLES //////////\n\n\n///////// CARD ////////\n$card-bg: #191c24;\n$card-description-color: #bfbfbf;\n$card-title-color: #ffffff;\n///////// CARD ////////\n\n\n//////// TABLES ////////\n$table-color: $body-color;\n$table-accent-bg: transparent;\n$table-hover-bg: $content-bg;\n$table-cell-padding: .9375rem;\n$table-border-color: $border-color;\n$table-inverse-bg: #2a2b32;\n$table-inverse-color: color(white);\n$table-dark-bg: #212529;\n$table-bg-level: 1;\n//////// TABLES ////////\n\n////////// MODALS VARIABLES //////////\n$modal-content-bg: $content-bg;\n////////// MODALS VARIABLES //////////\n\n///////// NAVBAR ////////\n$navbar-bg: #191c24;\n$navbar-brand-wrapper-tinted-bg: #fa424a;\n$navbar-height: 70px;\n$navbar-menu-color: #ffffff;\n$navbar-font-size: .9375rem;\n$navbar-icon-font-size: 1.125rem;\n\n///////// NAVBAR ////////\n\n////////// SIDEBAR ////////\n$sidebar-width-lg: 244px;\n$sidebar-width-mini: 185px;\n$sidebar-width-icon: 70px;\n\n$sidebar-dark-bg: #191c24;\n$sidebar-dark-menu-color: $text-muted;\n$sidebar-dark-menu-active-bg: darken($sidebar-dark-bg, 5%);\n$sidebar-dark-menu-active-color: #ffffff;\n$sidebar-dark-menu-hover-bg: darken($sidebar-dark-bg, 5%);\n$sidebar-dark-menu-hover-color: color(white);\n$sidebar-dark-submenu-color: $sidebar-dark-menu-color;\n$sidebar-dark-submenu-hover-bg: initial;\n$sidebar-dark-submenu-hover-color: #ffffff;\n$sidebar-dark-menu-icon-color: #bba8bff5;\n$sidebar-dark-menu-arrow-color: rgba($text-muted, 0.36);\n\n$sidebar-tinted-bg: #fa424a;\n$sidebar-tinted-menu-color: #ffffff;\n$sidebar-tinted-menu-active-bg: rgba(12, 14, 14, 0.1);\n$sidebar-tinted-menu-hover-bg: rgba(12, 14, 14, 0.1);\n$sidebar-tinted-menu-arrow-color: rgba($sidebar-tinted-menu-color, 0.36);\n\n$sidebar-menu-font-size: 0.9375rem;\n$sidebar-menu-padding-y: 0.8rem;\n$sidebar-menu-padding-x: 1.188rem;\n\n$sidebar-submenu-font-size: 0.855rem;\n$sidebar-submenu-item-padding: 0.5rem 0.35rem;\n\n$sidebar-icon-font-size: 1rem;\n$sidebar-arrow-font-size: .625rem;\n\n$sidebar-profile-bg: transparent;\n$sidebar-profile-padding: .75rem 1.625rem .75rem 1.188rem;\n\n$sidebar-mini-menu-padding: 0.8125rem 1rem 0.8125rem 1rem;\n\n$sidebar-icon-only-menu-padding: .5rem 1.625rem .5rem 1.188rem;\n$sidebar-icon-only-submenu-padding: 0 0 0 1.5rem;\n\n$rtl-sidebar-submenu-padding: 0 1.5rem 0 0;\n\n$icon-only-collapse-width: 190px;\n$icon-only-menu-bg-light: $sidebar-dark-menu-hover-bg;\n$icon-only-menu-bg-dark: $sidebar-dark-menu-hover-bg;\n\n$navbar-box-shadow: 20px 19px 34px -15px rgba(0,0,0,0.5);\n$navbar-box-shadow-rtl: -34px 19px 34px -15px $content-bg;\n\n///////// SIDEBAR ////////\n\n\n\n///////// BUTTONS ////////\n\n$button-fixed-width: 150px;\n$btn-padding-y: .375rem;\n$btn-padding-x: .75rem;\n$btn-line-height: 1;\n\n$btn-padding-y-xs: .5rem;\n$btn-padding-x-xs: .75rem;\n\n$btn-padding-y-sm: .25rem;\n$btn-padding-x-sm: .5rem;\n\n$btn-padding-y-lg: 1rem;\n$btn-padding-x-lg: 3rem;\n\n$btn-font-size: 0.9375rem;\n$btn-font-size-xs: 0.625rem;\n$btn-font-size-sm: 0.875rem;\n$btn-font-size-lg: 0.875rem;\n\n$btn-border-radius: .1875rem;\n$btn-border-radius-xs: .1875rem;\n$btn-border-radius-sm: .1875rem;\n$btn-border-radius-lg: .1875rem;\n///////// BUTTONS ////////\n\n\n\n////////// TOOLTIP VARIABLES //////////\n//default styles\n$tooltip-font-size: .75rem;\n$tooltip-padding-y: .4rem;\n$tooltip-padding-x: .75rem;\n$tooltip-border-radius: .375rem;\n////////// TOOLTIP VARIABLES //////////\n$popover-bg: $dark;\n$popover-border-color: $border-color;\n$popover-arrow-color: $popover-bg;\n$popover-arrow-outer-color: $popover-border-color;\n$popover-header-bg: $popover-bg;\n\n\n\n/////////  FORMS /////////\n$input-bg: #2A3038;\n$input-border-radius: 2px;\n$input-border-color: $border-color;\n$input-placeholder-color: lighten($input-bg, 15%);\n$input-placeholder-font-size: 0.875rem;\n$input-font-size: 0.875rem;\n\n$input-padding-y: 0.56rem;\n$input-padding-x: 0.75rem;\n$input-line-height: 1;\n\n$input-padding-y-xs: .5rem;\n$input-padding-x-xs: .75rem;\n\n$input-padding-y-sm: .50rem;\n$input-padding-x-sm: .81rem;\n\n$input-padding-y-lg: .94rem;\n$input-padding-x-lg: 1.94rem;\n\n$input-height:          2.875rem;\n$input-height-sm:       2.575rem;\n$input-height-lg:       3.175rem;\n///////// FORMS /////////\n\n////////  DROPDOWNS ///////\n$dropdown-bg: $card-bg;\n$dropdown-color: $body-color;\n$dropdown-border-color: $border-color;\n$dropdown-divider-bg: $border-color;\n$dropdown-link-color: $body-color;\n$dropdown-link-hover-bg: darken($card-bg, 3%);\n$dropdown-header-color: $body-color;\n$dropdown-menu-box-shadow: none;\n////////  DROPDOWNS ///////\n\n\n////////  PROGRESSBAR ///////\n$progress-bg: $content-bg;\n////////  PROGRESSBAR ///////\n\n\n////////// MEASUREMENT AND PROPERTY VARIABLES //////////\n$boxed-container-width: 1200px;\n$border-property: 1px solid $border-color;\n$card-spacing-y: 2.5rem;  \n$card-padding-y: 1.75rem;\n$card-padding-x: 1.5625rem;\n$card-border-radius: 0.25rem;\n$grid-gutter-width: 1.5rem;\n$action-transition-duration: 0.25s;\n$action-transition-timing-function: ease;\n$border-width: 1px;\n////////// OTHER VARIABLES //////////\n\n\n\n////////// BREAD CRUMBS VARIABLES //////////\n// default styles\n$breadcrumb-padding-y: 0.56rem;\n$breadcrumb-padding-x: 1.13rem;\n$breadcrumb-item-padding: .5rem;\n$breadcrumb-margin-bottom: 1rem;\n$breadcrumb-font-size: $default-font-size;\n$breadcrumb-bg: transparent;\n$breadcrumb-border-color: $border-color;\n$breadcrumb-divider-color: $gray-600;\n$breadcrumb-active-color: $gray-700;\n$breadcrumb-divider: \"/\";\n\n// custom styles\n$breadcrumb-custom-padding-y: 0;\n$breadcrumb-custom-padding-x: 0;\n$breadcrumb-custom-item-padding-y: 0.56rem;\n$breadcrumb-custom-item-padding-x: 10px;\n$breadcrumb-custom-item-color: #FFFFF0;\n$breadcrumb-item-bg: #141414;\n////////// BREAD CRUMBS VARIABLES //////////\n\n\n\n////////// MODALS VARIABLES //////////\n$modal-inner-padding: 0.9375rem;\n$modal-dialog-margin: 10px;\n$modal-dialog-margin-y-sm-up: 30px;\n$modal-title-line-height: $line-height-base;\n$modal-content-box-shadow-xs: 0 3px 9px rgba($black, .5);\n$modal-content-box-shadow-sm-up: 0 5px 15px rgba($black, .5);\n\n$modal-backdrop-bg: $black;\n$modal-backdrop-opacity: .5;\n\n$modal-header-border-color: $border-color;\n$modal-content-border-color: $border-color;\n$modal-footer-border-color: $border-color;\n\n$modal-header-border-width: $border-width;\n$modal-content-border-width: $border-width;\n$modal-footer-border-width: $border-width;\n\n$modal-header-padding-x: 26px;\n$modal-header-padding-y: 25px;\n\n$modal-body-padding-x: 26px;\n$modal-body-padding-y: 35px;\n\n$modal-footer-padding-x: 31px;\n$modal-footer-padding-y: 15px;\n\n$modal-lg: 90%;\n$modal-md: 500px;\n$modal-sm: 300px;\n$modal-transition: transform .4s ease;\n////////// MODALS VARIABLES //////////\n\n\n/////////  PAGINATION VARIABLES //////////\n$pagination-bg: $content-bg;\n/////////  PAGINATION VARIABLES //////////\n\n\n/////////  TABS VARIABLES //////////\n$nav-tabs-border-color: $border-color;\n$nav-tabs-link-bg: $content-bg;\n$nav-tabs-link-color: $body-color;\n$nav-tabs-link-hover-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-border-color;\n$nav-tabs-link-active-color: $body-color;\n$nav-tabs-link-active-bg: darken($content-bg, 5%);\n$nav-tabs-link-active-border-color: $nav-tabs-border-color $nav-tabs-border-color $nav-tabs-link-active-bg;\n$nav-pills-custom-bg: #8489ab;\n////////   TABS VARIABLES /////////\n\n///////// SETTINGS PANEL ////////\n$settings-panel-width: 300px;\n///////// SETTINGS PANEL ////////\n\n////////   CALENDAR  //////////////\n$fullcalendar-color: #a8b2b9;\n////////   CALENDAR  //////////////\n\n////////   MISC  //////////////\n$page-title-color: $body-color;\n////////   MISC  //////////////\n\n$buy-nowbanner-padding-top:60px;\n\n\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_background.scss",
    "content": "/* Backgrounds  */\n@each $color, $value in $theme-colors {\n\t.bg-gradient-#{$color} {\n\t\tbackground: theme-color($color);\n\t}\n}\n\n.sidebar-grdient-dark{\n  background: rgba(106,0,138,1);\n  background: -moz-linear-gradient(top, rgba(106,0,138,1) 0%, rgba(106,0,138,1) 20%, rgba(250,0,83,1) 100%);\n  background: -webkit-gradient(left top, left bottom, color-stop(0%, rgba(106,0,138,1)), color-stop(20%, rgba(106,0,138,1)), color-stop(100%, rgba(250,0,83,1)));\n  background: -webkit-linear-gradient(top, rgba(106,0,138,1) 0%, rgba(106,0,138,1) 20%, rgba(250,0,83,1) 100%);\n  background: -o-linear-gradient(top, rgba(106,0,138,1) 0%, rgba(106,0,138,1) 20%, rgba(250,0,83,1) 100%);\n  background: -ms-linear-gradient(top, rgba(106,0,138,1) 0%, rgba(106,0,138,1) 20%, rgba(250,0,83,1) 100%);\n  background: linear-gradient(to bottom, rgba(106,0,138,1) 0%, rgba(106,0,138,1) 20%, rgba(250,0,83,1) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#6a008a', endColorstr='#fa0053', GradientType=0 );\n  color: $white;\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/_badges.scss",
    "content": "/* Badges */\n\n.badge {\n  border-radius: 0.25rem;\n  font-size: 0.75rem;\n  font-weight: initial;\n  line-height: 1;\n  padding: 0.5rem 0.7rem;\n  font-weight: $font-weight-medium;\n  &.badge-pill {\n    border-radius: 10rem;\n  }\n}\n\n\n/*Badge variations*/\n@each $color, $value in $theme-colors {\n  .badge-#{$color} {\n    @include badge-variations($value);\n  }\n}\n\n/*Badge outlined variations*/\n@each $color, $value in $theme-colors {\n  .badge-outline-#{$color} {\n    @include badge-outline-variations($value);\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/_buttons.scss",
    "content": "/* Buttons */\n\n.btn {\n  font-size: $btn-font-size;\n  line-height: 1;\n  font-weight: normal;\n  i {\n    margin-right: .3125rem;\n  }\n  &.btn-rounded {\n    @include border-radius(50px);\n  }\n  &.btn-fw {\n    min-width: $button-fixed-width;\n  }\n  &.btn-sm {\n    font-size: $btn-font-size-sm;\n  }\n  &.btn-lg {\n    font-size: $btn-font-size-lg;\n  }\n  &.btn-xs {\n    padding: $btn-padding-y-xs $btn-padding-x-xs;\n    font-size: $btn-font-size-xs;\n  }\n  /* Buttons with only icons */\n  &.btn-icon {\n    width: 42px;\n    height: 42px;\n    padding: 0;\n  }\n  /* Buttons with icon and text */\n  &.btn-icon-text {\n    .btn-icon-prepend {\n      margin-right: .5rem;\n    }\n    .btn-icon-append {\n      margin-left: .5rem;\n    }\n  }\n  &.btn-social-icon {\n    width: 50px;\n    height: 50px;\n    padding: 0;\n  }\n  &.get-started-btn {\n    font-size: 0.75rem;\n    border: 1px solid rgba(#ffffff, 0.3);\n    font-weight: $font-weight-medium;\n    padding: 0.9375rem 1.0625rem;\n    @media (max-width: 576px) {\n      font-size: 0.6rem;\n      padding: 0.4375rem 0.6625rem;\n    }\n  }\n}\n\n.btn-group {\n  .btn {\n    + .btn {\n      border-left: 0;\n    }\n  }\n}\n\n.btn-toolbar {\n  .btn-group {\n    +.btn-group {\n      @extend .ms-2;\n    }\n  }\n}\n/*social buttons*/\n@each $color, $value in $social-colors {\n  .btn-#{$color} {\n    @include social-button(social-color($color));\n  }\n  .btn-outline-#{$color} {\n    @include social-outline-button(social-color($color));\n  }\n}\n/* inverse buttons */\n@each $color, $value in $theme-colors {\n  .btn-inverse-#{$color} {\n    @include button-inverse-variant($value);\n  }\n  .btn-#{$color} {\n    &:not(.btn-light):not(.btn-secondary) {\n      color: $white;\n      &:hover,\n      &:focus,\n      &:active {\n        color: $white;\n      }\n      &:focus,\n      &:active {\n        background: $value;\n        border-color: $value;\n      }\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/_cards.scss",
    "content": "/* Cards */\n\n.card {\n  border-radius: $card-border-radius;\n  .card-body {\n    padding: $card-padding-y $card-padding-x;\n    + .card-body {\n      padding-top: 1rem;\n    }\n  }\n  .card-title {\n    color: $card-title-color;\n    margin-bottom: 1.125rem;\n    text-transform: capitalize;\n  }\n  .card-subtitle {\n    @extend .text-gray;\n    font-weight: normal;\n    margin-top: 0.625rem;\n    margin-bottom: 0.625rem;\n  \n  }\n  .card-description {\n    color: $card-description-color;\n    font-weight: $font-weight-light;\n  }\n  &.card-outline-success {\n\t\tborder: 1px solid $success;\n\t}\n\t&.card-outline-primary {\n\t\tborder: 1px solid $primary;\n\t}\n\t&.card-outline-warning {\n\t\tborder: 1px solid $warning;\n\t}\n\t&.card-outline-danger {\n\t\tborder: 1px solid $danger;\n\t}\n\t&.card-rounded {\n\t\t@include border-radius(5px);\n\t}\n\n  &.card-faded {\n    background: #b5b0b2;\n    border-color: #b5b0b2;\n  }\n  &.card-circle-progress {\n    color: $white;\n    text-align: center;\n  }\n  &.card-img-holder {\n    position: relative;\n    .card-img-absolute {\n      position: absolute;\n      top:0;\n      right: 0;\n      height: 100%;\n    }\n  }\n  &.corona-gradient-card {\n    background-image: linear-gradient(to left, #d41459, #911a6c);\n    border-radius: 6px;\n    .gradient-corona-img {\n      height: 85px;\n      @media (max-width: 576px) {\n        height: auto;\n        min-height: 50px;\n        max-height: 85px;\n      }\n    }\n    @media (max-width: 576px) {\n     h4 {\n       font-size: 0.75rem;\n     }\n    }\n  }\n}\n\n@media (min-width: 576px) {\n  .card-columns {\n    column-count: 3;\n    column-gap: 1.25rem;\n    orphans: 1;\n    widows: 1;\n    .card {\n      display: inline-block;\n      width: 100%;\n      margin-bottom: 0.75rem;\n    }\n  }\n}\n@each $color, $value in $theme-colors {\n  .card-inverse-#{$color} {\n    @include card-inverse-variant(rgba($value, .2), theme-color-level($value, 1), theme-color-level($value, 3));\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_checkbox-radio.scss",
    "content": "/* Checkboxes and Radios */\n\n.form-check {\n  position: relative;\n  display: block;\n  margin-top: 15px;\n  margin-bottom: 10px;\n  padding-left: 0;\n\n  .form-check-label {\n    display: block;\n    padding-left: 0.625rem;\n    font-size: $default-font-size;\n    line-height: 1.5;\n    color: $text-muted;\n    .rtl & {\n      padding-left: 0;\n      padding-right: 1.875rem;\n    }\n\n    input {\n      position: absolute;\n      top: 0;\n      left: 0;\n      .rtl & {\n        left: auto;\n        right: 0;\n      }\n      margin-left: 0;\n      margin-top: 0;\n      z-index: 1;\n      cursor: pointer;\n      opacity: 0;\n      filter: alpha(opacity=0);\n    }\n    input[type=\"checkbox\"] {\n      + .input-helper {\n        &:before,\n        &:after {\n          position: absolute;\n          top: 0;\n          left: 0;\n          .rtl & {\n            left: auto;\n            right: 0;\n          }\n        }\n        &:before {\n          content: \"\";\n          width: 16px;\n          height: 16px;\n          border-radius: 2px;\n          border: solid $primary;\n          border-width: 2px;\n          @include transition(all);\n          transition-duration: 0s;\n          -webkit-transition-duration: 250ms;\n          transition-duration: 250ms;\n          position: absolute;\n          top: 2px;\n          left: 0;\n\n        }\n  \n        &:after {\n          @include transition(all);\n          transition-duration: 0s;\n          -webkit-transition-duration: 250ms;\n          transition-duration: 250ms;\n          font-family: Material Design Icons;\n          opacity: 0;\n          filter: alpha(opacity=0);\n          -webkit-transform: scale(0);\n          -ms-transform: scale(0);\n          -o-transform: scale(0);\n          transform: scale(0);\n          content: '\\F12C';\n          font-size: 0.875rem;\n          font-weight: bold;\n          color: $white;\n          top: 1px;\n        }\n      }\n      &:checked {\n        +.input-helper {\n          &:before {\n            background: $primary;\n            border-width: 0;\n          }\n          &:after {\n            width: 18px;\n            opacity: 1;\n            line-height: 18px;\n            filter: alpha(opacity=100);\n            -webkit-transform: scale(1);\n            -ms-transform: scale(1);\n            -o-transform: scale(1);\n            transform: scale(1);\n            color: black;\n          }\n        }\n      }\n\n      &:disabled {\n        + .input-helper {\n          &:before {\n            border-color: $border-color;\n          }\n        }\n\n        &:checked {\n          + .input-helper {\n            &:after {\n              background: $border-color;\n              color: $white;\n            }\n          }\n        }\n      }\n    }\n    input[type=\"radio\"] {\n      +.input-helper {\n        &:before {\n          position: absolute;\n          content: \"\";\n          top: 0;\n          left: 0;\n          .rtl & {\n            left: auto;\n            right: 0;\n          }\n          border: solid $primary;\n          border-width: 2px;\n          width: 20px;\n          height: 20px;\n          border-radius: 50%;\n          @include transition(all);\n          transition-duration: 0s;\n          -webkit-transition-duration: 250ms;\n          transition-duration: 250ms;\n        }\n\n        &:after {\n          content: \"\";\n          width: 8px;\n          height: 8px;\n          background: $white;\n          border-radius: 50%;\n          top: 6px;\n          left: 6px;\n          .rtl & {\n            left: auto;\n            right: 6px;\n          }\n          -webkit-transition: all;\n          -o-transition: all;\n          transition: all;\n          transition-duration: 0s;\n          -webkit-transition-duration: 250ms;\n          transition-duration: 250ms;\n          opacity: 0;\n          filter: alpha(opacity=0);\n          -webkit-transform: scale(0);\n          -ms-transform: scale(0);\n          -o-transform: scale(0);\n          transform: scale(0);\n          position: absolute;\n        }\n      }\n\n      &:checked {\n        +.input-helper {\n          &:before {\n            background: $primary;\n            border-width: 0;\n          }\n\n          &:after {\n            opacity: 1;\n            line-height: 1.5;\n            filter: alpha(opacity=100);\n            -webkit-transform: scale(1);\n            -ms-transform: scale(1);\n            -o-transform: scale(1);\n            transform: scale(1);\n          }\n        }\n      }\n\n      &:disabled {\n        + .input-helper {\n          &:before {\n            border-color: $border-color;\n          }\n        }\n\n        &:checked {\n          + .input-helper {\n            &:before {\n              background: $border-color;\n            }\n\n            &:after {\n              background: $white;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n@each $color, $value in $theme-colors {\n  .form-check-#{$color} {\n    &.form-check {\n      label {\n        input[type=\"checkbox\"],\n        input[type=\"radio\"] {\n          +.input-helper {\n            &:before {\n              border-color: theme-color($color);\n            }\n          }\n          &:checked {\n            +.input-helper {\n              &:before {\n                background: $value;\n              }\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n.form-check-muted {\n  &.form-check {\n    label {\n      input[type=\"checkbox\"],\n      input[type=\"radio\"] {\n        +.input-helper {\n          &:before {\n            border-color: $text-muted;\n          }\n        }\n        &:checked {\n          +.input-helper {\n            &:before {\n              background: $text-muted;\n            }\n          }\n        }\n      }\n    }\n  }\n}\n\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_demo.scss",
    "content": "/* Demo Styles */\n// Add spacing to Boostrap components for demo purpose\n.template-demo {\n  > .btn {\n    @extend .mt-3;\n    @extend .me-3;\n  }\n\n  .slider-wrap {\n    height: 100px;\n  }\n\n  > .btn-toolbar {\n    @extend .mt-3;\n    @extend .me-3;\n  }\n\n  > .btn-group,\n  >  .btn-group-vertical {\n    @extend .mt-2;\n    @extend .me-2;\n  }\n\n  .progress {\n    margin-top: 1.5rem;\n  }\n\n  .circle-progress {\n    @extend .mt-2;\n  }\n\n  > h2,\n   > h3,\n   > h4,\n   > h5,\n   > h6,\n  > h1 {\n    border-top: 1px solid $border-color;\n    padding: 0.5rem 0 0;\n  }\n\n  .ul-slider {\n    &.noUi-horizontal {\n      margin-top: 2rem;\n    }\n\n    &.noUi-vertical {\n      margin-right: 2rem;\n    }\n  }\n\n  > .dropdown {\n    display: inline-block;\n    @extend .me-2;\n    margin-bottom: 0.5rem;\n  }\n\n  nav {\n    .breadcrumb {\n      margin-bottom: 1.375rem;\n    }\n\n    &:last-child {\n      .breadcrumb {\n        margin-bottom: 0;\n      }\n    }\n  }\n\n  .editable-form {\n    > .form-group {\n      border-bottom: 1px solid $border-color;\n      padding-bottom: 0.8rem;\n      margin-bottom: 0.8rem;\n    }\n  }\n\n  .circle-progress {\n    padding: 15px;\n  }\n\n  .circle-progress-block {\n    @extend .mb-3;\n    @extend .px-2;\n  }\n}\n\n.demo-modal {\n  position: static;\n  display: block;\n\n  .modal-dialog {\n    @extend .mt-0;\n\n    &.modal-lg {\n      max-width: 100%;\n    }\n  }\n}\n\n.loader-demo-box {\n  @extend .border;\n  @extend .border-secondary;\n  @extend .rounded;\n  width: 100%;\n  height: 200px;\n  @extend .d-flex;\n  @extend .align-items-center;\n}\n\n.dropdown-menu-static-demo {\n  height: 250px;\n  margin-bottom: 20px;\n}\n\n.rounded-legend {\n  ul {\n    li {\n      list-style-type: none;\n      color: $text-muted;\n      font-size: .75rem;\n      .legend-dots {\n        width: 1rem;\n        height: 1rem;\n        border-radius: 100%;\n        display: inline-block;\n        vertical-align: text-bottom;\n        margin-right: .5rem;\n        .rtl & {\n          margin-left: .5rem;\n        }\n      }\n    }\n  }\n  &.legend-horizontal {\n    @include display-flex;\n    ul {\n      li {\n        display: inline-block;\n        margin-right: 1.5rem;\n        .rtl & {\n          margin-right: auto;\n          margin-left: 1.5rem;\n        }\n      }\n    }\n  }\n  &.legend-top-right {\n    ul {\n      float: right;\n      .rtl & {\n        float: left;\n      }\n    }\n  }\n  &.legend-vertical {\n    ul {\n      li {\n        margin-top: 1rem;\n      }\n    }\n  }\n}\n#proBanner {\n  position: fixed;\n  left: 0;\n  top: 0;\n  width: 100%;\n  z-index: 9999;\n  background: #000;\n  .card-body-padding {\n    padding-top: .55rem ;\n    padding-bottom: .55rem;\n    padding-left: 2rem;\n    padding-right: 2rem;\n    @media (max-width: 766px) {\n    padding-left: 1rem;\n    padding-right: 1rem;\n    }\n  }\n  .buy-now-text {\n    color: $white;\n    @media (max-width: 766px) {\n      font-size: 10px;\n      line-height: 1.5;\n    }\n  }\n  .btn {\n    &.buy-now-btn {\n      background: transparent;\n      color: #88b6ff;\n      border-radius: 10px;\n      // padding: 0.625rem 1.25rem;\n      padding: 1rem 0;\n      border-radius: 4px;\n      font-weight: bold;\n      font-size: 1rem;\n      @media (max-width: 766px) {\n        min-width: 80px;\n        padding: 1rem .5rem;\n        font-size: 12px;\n      }\n    }\n    &#bannerClose { \n      i {\n        margin-right: 1rem;\n        font-size: 1.25rem;\n        @media (max-width: 766px) {\n          font-size: 1rem;\n          margin-right: 0;\n        }\n      }\n    }\n  }\n  a {\n    text-decoration: none;\n    i {\n      font-size: 1.25rem;\n      @media (max-width: 766px) {\n        font-size: 1rem;\n      }\n    }\n  }\n  \n}\n.proBanner-padding-top {\n  padding-top: $buy-nowbanner-padding-top !important;\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/_dropdown.scss",
    "content": "/* Dropdowns */\n\n.dropdown {\n  .dropdown-menu {\n    margin-top: .75rem;\n    font-size: $default-font-size;\n    box-shadow: $dropdown-menu-box-shadow;\n    .dropdown-item {\n      font-size: 1rem;\n      padding: .25rem 1.5rem;\n      &:active {\n        background: initial;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_fonts.scss",
    "content": "/* Fonts */\n\n//PT_Sans\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 300;\n  src: url('../fonts/Rubik/Rubik-Light.ttf'); /* IE9 Compat Modes */\n}\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 400;\n  src: url('../fonts/Rubik/Rubik-Regular.ttf'); /* IE9 Compat Modes */\n}\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 500;\n  src: url('../fonts/Rubik/Rubik-Medium.ttf'); /* IE9 Compat Modes */\n}\n@font-face {\n  font-family: 'Rubik';\n  font-weight: 700;\n  src: url('../fonts/Rubik/Rubik-Bold.ttf'); /* IE9 Compat Modes */\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_footer.scss",
    "content": "/* Footer */\n\n.footer {\n  background: $footer-bg;\n  color: $footer-color;\n  padding: 20px 1rem;\n  transition: all $action-transition-duration $action-transition-timing-function;\n  -moz-transition: all $action-transition-duration $action-transition-timing-function;\n  -webkit-transition: all $action-transition-duration $action-transition-timing-function;\n  -ms-transition: all $action-transition-duration $action-transition-timing-function;\n  font-size: calc(#{$default-font-size} - 0.05rem);\n  font-weight: $font-weight-light;\n  a {\n    color: $success;\n    font-size: inherit;\n  }\n  @media (max-width: 991px) {\n    margin-left: 0;\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_forms.scss",
    "content": "/* Forms */\n\n.form-group {\n  margin-bottom: 1rem;\n}\n.input-group-append,\n.input-group-prepend {\n  color: $input-placeholder-color;\n  width: auto;\n  border: none;\n\n  .input-group-text {\n    border-color: $border-color;\n    padding: $input-padding-y .75rem;\n    color: $input-placeholder-color;\n    background: none;\n  }\n}\n.form-control {\n  border: 1px solid $border-color;\n  height: calc(2.25rem + 2px);\n  font-weight: normal;\n  font-size: $input-font-size; \n  padding: 0.625rem 0.6875rem;\n  background-color: $input-bg;\n  border-radius: 2px;\n  color: #ffffff;\n  &:focus {\n    border: 1px solid rgba(71, 164, 71, 0.5);\n    background-color: $input-bg;\n  }\n  &.form-control-lg {\n    padding: 0.94rem .75rem;\n    height: calc(2.875rem + 2px);\n  }\n\n  &.form-control-sm {\n    padding: 0.5rem .75rem;\n    height: calc(1.8125rem + 2px);\n  }\n  &::placeholder {\n    color: $text-muted;\n    font-size: $input-placeholder-font-size;\n  }\n}\n.navbar {\n  .form-control {\n    width: 75%;\n    border-radius: 6px;\n    &:focus {\n      border: none;\n    }\n  }\n}\n\nselect {\n  &.form-control {\n    padding: .4375rem .75rem;\n    border: 0;\n    color: $input-placeholder-color;\n    &:focus {\n      outline: 1px solid $border-color;\n    }\n    @each $color, $value in $theme-colors {\n      &.border-#{$color} {\n        outline: 1px solid $value;\n        &:focus {\n          outline: 1px solid $value;\n        }\n      }\n    }\n  }\n}\n.form-group {\n  label {\n    font-size: $default-font-size;\n    line-height: 1;\n    vertical-align: top;\n  }\n  &.has-danger {\n    .form-control {\n      border-color: $danger;\n    }\n  }\n  .file-upload-default {\n    visibility: hidden;\n    position: absolute;\n  }\n  .file-upload-info {\n    background: transparent;\n  }\n}\n\n.form-check {\n  min-height: 18px;\n  padding-left: 1.25rem;\n}\n\ndiv {\n  &.tagsinput {\n    background: transparent;\n  }\n}\n\n\n\n  \n\n\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_functions.scss",
    "content": "// Functions\n\n@function social-color($key: \"twitter\") {\n  @return map-get($social-colors, $key);\n}\n\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_icons.scss",
    "content": "/* Icons */\n\n.icons-list {\n  border-left: 1px solid $border-color;\n  border-top: 1px solid $border-color;\n  >div {\n    border-bottom: 1px solid $border-color;\n    border-right: 1px solid $border-color;\n    @include display-flex;\n    @include align-items(center);\n    padding:15px 15px;\n    font-weight: normal;\n    font-size: $default-font-size;\n\n    i {\n      display: inline-block;\n      font-size: 20px;\n      width: 40px;\n      text-align: left;\n      color: $primary;\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_misc.scss",
    "content": "/* Miscellanoeous */\nbody,\nhtml {\n  overflow-x: hidden;\n  padding-right: 0 !important; // resets padding right added by Bootstrap modal\n  background-color: #191c24;\n}\n\n*:-moz-full-screen,\n*:-webkit-full-screen,\n*:fullscreen *:-ms-fullscreen {\n  overflow: auto;\n}\n\n.container-scroller {\n  overflow: hidden;\n}\n\npre {\n  background: color(gray-lighter);\n  padding: 15px;\n  font-size: 14px;\n}\n\ncode {\n  padding: 5px;\n  color: $danger;\n  font-weight: $font-weight-light;\n  font-size: $default-font-size;\n  border-radius: 4px;\n}\n\n.page-header {\n  @extend .d-flex;\n  @extend .justify-content-between;\n  @extend .align-items-center;\n  margin: 0 0 1.5rem 0;\n  .breadcrumb {\n    border: 0;\n    margin-bottom: 0;\n  }\n}\n.page-title {\n  color: $page-title-color;\n  font-size: 1.125rem;\n  margin-bottom: 0;\n  .page-title-icon {\n    display: inline-block;\n    width: 36px;\n    height: 36px;\n    border-radius: 4px;\n    text-align: center;\n    box-shadow: 0px 3px 8.3px 0.7px rgba(163, 93, 255, 0.35);\n    i {\n      font-size: .9375rem;\n      line-height: 36px;\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_preview.scss",
    "content": "/* Preview */\n\n.preview-list {\n  .preview-item {\n    @include display-flex;\n    @include flex-direction(row);\n    @include align-items(flex-start);\n    padding: 1rem 0rem;\n    font-size: .875rem;\n    &:last-child {\n      border-bottom: 0;\n    }\n    .form-check {\n      margin-top: 8px;\n      margin-right: 1rem;\n    }\n    .preview-thumbnail {\n      color: color(white);\n      position: relative;\n      img,\n      .preview-icon {\n        width: 40px;\n        height: 40px;\n        text-align: center;\n        @include display-flex;\n        @include align-items(center);\n        @include justify-content(center);\n        i {\n          font-size: 1.125rem;\n          margin: 0;\n          .rtl & {\n            @extend .ms-0;\n          }\n        }\n      }\n      .badge {\n        border: 2px solid color(white);\n        border-radius: 100%;\n        bottom: 5px;\n        display: block;\n        height: 14px;\n        left: -5px;\n        padding: 0;\n        position: absolute;\n        width: 14px;\n        &.badge-online {\n          @extend .badge-success;\n        }\n        &.badge-offline {\n          @extend .badge-info;\n        }\n        &.badge-busy {\n          @extend .badge-warning;\n        }\n      }\n    }\n    .preview-item-content {\n      line-height: 1;\n      padding-left: 15px;\n      &:first-child {\n        padding-left: 0;\n      }\n      p {\n        margin-bottom: 10px;\n        line-height: 1;\n        .content-category {\n          font-family: 'source-sans-pro-semibold', sans-serif;\n          padding-right: 15px;\n          border-right: 1px solid $border-color;\n          @extend .text-muted;\n        }\n      }\n      .rtl & {\n        padding-left: 0;\n        padding-right: 1rem;\n        margin-right: 0;\n        margin-left: auto;\n      }\n    }\n    .preview-actions {\n      @include display-flex;\n      @include flex-direction(row);\n      i {\n        width: 29px;\n        color: color(gray-lightest);\n        height: 29px;\n        border: 2px solid color(gray-lightest);\n        border-radius: 100%;\n        padding: 3px 6px;\n        display: inline-block;\n        &:first-child {\n          margin-right: 10px;\n        }\n      }\n    }\n  }\n  &.comment-preview {\n    .preview-item {\n      padding: .87rem 0;\n      &:first-child {\n        padding-top: 0;\n      }\n      p {\n        line-height: 27px;\n      }\n    }\n  }\n  &.bordered {\n    .preview-item {\n      border-bottom: 1px solid $border-color;\n      &:last-child {\n        border-bottom: 0;\n      }\n    }\n  }\n}\n\n\n\n@each $color, $value in $theme-colors {\n  .icon {\n    display: flex;\n    align-items: center;\n    justify-content: center;\n    &.icon-box-#{$color} {\n      width: 40px;\n      height: 37px;\n      background: rgba($value, 0.11);\n      border-radius: 7px;\n      color: $value;\n    }\n    .icon-item {\n      font-size: 20px;\n    }\n  }\n}\n\n\n\n\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_reset.scss",
    "content": "/* Reset Styles */\n\nbody {\n    padding: 0;\n    margin: 0;\n    overflow-x: hidden;\n}\n\n.form-control,\n.form-control:focus {\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n}\n\n.form-control {\n    box-shadow: none\n}\n\n.form-control:focus {\n    outline: 0;\n    box-shadow: none;\n    background: #191c20;\n    border: none;\n}\n\na,\ndiv,\nh1,\nh2,\nh3,\nh4,\nh5,\np,\nspan {\n    text-shadow: none;\n}\n\n[type=button]:focus,\na:active,\na:focus,\na:visited,\nbutton::-moz-focus-inner,\ninput[type=reset]::-moz-focus-inner,\ninput[type=button]::-moz-focus-inner,\ninput[type=submit]::-moz-focus-inner,\ninput[type=file]>input[type=button]::-moz-focus-inner,\nselect::-moz-focus-inner {\n    outline: 0\n}\n\ninput,\n.form-control:focus,\ninput:focus,\nselect:focus,\ntextarea:focus,\nbutton:focus {\n    outline: none;\n    outline-width: 0;\n    outline-color: transparent;\n    box-shadow: none;\n    outline-style: none;\n}\n\ntextarea {\n    resize: none;\n    overflow-x: hidden;\n}\n\n.btn,\n.btn-group.open .dropdown-toggle,\n.btn:active,\n.btn:focus,\n.btn:hover,\n.btn:visited,\na,\na:active,\na:checked,\na:focus,\na:hover,\na:visited,\nbody,\nbutton,\nbutton:active,\nbutton:hover,\nbutton:visited,\ndiv,\ninput,\ninput:active,\ninput:focus,\ninput:hover,\ninput:visited,\nselect,\nselect:active,\nselect:focus,\nselect:visited,\ntextarea,\ntextarea:active,\ntextarea:focus,\ntextarea:hover,\ntextarea:visited {\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n    box-shadow: none\n}\n\n.btn.active.focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn:active:focus,\n.btn:focus,\nbutton,\nbutton:active,\nbutton:checked,\nbutton:focus,\nbutton:hover,\nbutton:visited {\n    outline: 0;\n    outline-offset: 0\n}\n\n.bootstrap-select .dropdown-toggle:focus {\n    outline: 0 ;\n    outline-offset: 0;\n}\n\n.dropdown-menu>li>a:active,\n.dropdown-menu>li>a:focus,\n.dropdown-menu>li>a:hover,\n.dropdown-menu>li>a:visited {\n    outline: 0;\n}\n\na:focus,\ninput:focus {\n    border-color: transparent;\n    outline: none\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_tables.scss",
    "content": "/* Tables */\n\n.table {\n  margin-bottom: 0;\n  color: $text-muted;\n  \n\n  thead {\n    th {\n      border-top: 0;\n      border-bottom-width: 1px;\n      font-weight: $font-weight-medium;\n      color: $text-muted; \n      \n\n      i {\n        margin-left: 0.325rem;\n      }\n    }\n  }\n\n  th,\n  td {\n    vertical-align: middle;\n    font-size: $default-font-size;\n    line-height: 1;\n    white-space: nowrap;\n    padding: $table-cell-padding;\n\n    img {\n      width: 30px;\n      height: 30px;\n      border-radius: 100%;\n    }\n\n    .badge {\n      margin-bottom: 0;\n    }\n  }\n\n  &.table-borderless {\n    border: none;\n\n    tr,\n    td,\n    th {\n      border: none;\n    }\n  }\n  .table-dark {\n    background: $table-dark-bg;\n  }\n  &.table-contextual {\n    color: #ffffff;\n  }\n}\n.table > :not(:last-child) > :last-child > *, .jsgrid .jsgrid-table > :not(:last-child) > :last-child > * {\n  border-bottom-color: $border-color;\n}\n.table > :not(:first-child), .jsgrid .jsgrid-table > :not(:first-child) {\n  border-top: none;\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/_tabs.scss",
    "content": ".nav-tabs {\n\t.nav-link {\n\t\tbackground: $nav-tabs-link-bg;\n\t\tcolor: $nav-tabs-link-color;\n\t\tborder-radius: 0;\n\t\tborder: 1px solid $border-color;\n\t\tpadding: .75rem 1.5rem;\n\t\t@media (max-width: 576px) {\n\t\t\tpadding: 0.3rem 0.5rem;\n\t\t}\n\t}\n\t.nav-item {\n\t\t&:first-child {\n\t\t\t.nav-link {\n\t\t\t\tborder-radius: 4px 0 0 0;\n\t\t\t}\t\n\t\t}\n\t\t&:last-child {\n\t\t\t.nav-link {\n\t\t\t\tborder-radius: 0 4px 0 0;\n\t\t\t}\n\t\t}\n\t}\n\t&.nav-tabs-vertical {\n\t\t@extend .flex-column;\n\t\tborder-bottom: 0;\n\t\t.nav-link {\n\t\t\t&.active {\n\t\t\t\tborder-bottom-color: $border-color;\n\t\t\t}\n\t\t}\n\t\t.nav-item {\n\t\t\t&:first-child {\n\t\t\t\t.nav-link {\n\t\t\t\t\tborder-radius: 4px 4px 0 0;\n\t\t\t\t}\t\n\t\t\t}\n\t\t\t&:last-child {\n\t\t\t\t.nav-link {\n\t\t\t\t\tborder-radius: 0 0 4px 4px;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t&.nav-tabs-vertical-custom {\n\t\t@extend .nav-tabs-vertical;\n\t\tbackground: $primary;\n\t\tborder-radius: 4px;\n\t\t.nav-link {\n\t\t\tbackground: transparent;\n\t\t\tborder-color: rgba($white, .2);\n\t\t\tcolor: darken($primary, 30%);\n\t\t\tfont-weight: $font-weight-bold;\n\t\t\tpadding: 1.75rem;\n\t\t\t&.active {\n\t\t\t\tcolor: $white;\n\t\t\t\tborder-color: rgba($white, .2);\n\t\t\t}\n\t\t}\n\t}\n}\n\n.nav-pills {\n\tborder-bottom: 1px solid $border-color;\n\tpadding-bottom: 1rem;\n\t.nav-link {\n\t\tborder: 1px solid $border-color;\n\t\tpadding: .5rem 1.5rem;\n\t\t@media (max-width: 576px) {\n\t\t\tpadding: 0.3rem 0.5rem;\n\t\t}\n\t}\n\t.nav-item {\n\t\tmargin-right: 1rem;\n\t\t@media (max-width: 576px) {\n\t\tmargin-right: 0.5rem;\n\t\tfont-size: 0.675;\n\t\t}\n\t}\n\t&.nav-pills-vertical {\n\t\t@extend .flex-column;\n\t\tborder-bottom: 0;\n\t\t.nav-item {\n\t\t\tmargin-right: 0;\n\t\t\tmargin-bottom: 1rem;\n\t\t}\n\t}\n\t&.nav-pills-custom {\n\t\tborder-bottom: 0;\n\t\t.nav-link {\n\t\t\tborder-radius: 20px;\n\t\t\tpadding: .5rem 2.5rem;\n\t\t\t@media (max-width: 576px) {\n\t\t\t\tpadding: .3rem .5rem;\n\t\t\t}\n\t\t\tbackground: $nav-pills-custom-bg;\n\t\t\tcolor: $black;\n\t\t\t&.active {\n\t\t\t\tbackground: $danger;\n\t\t\t\tcolor: $white;\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* gradient pills */\n@each $color, $value in $theme-colors {\n  .nav-pills-#{$color} {\n    .nav-link {\n\t\t\tcolor: $value;\n\t\t\t&.active {\n\t\t\t\tbackground: theme-color($color);\n\t\t\t}\n\t\t}\n  }\n}\n\n\n.tab-content {\n\tborder: 1px solid $border-color;\n\tborder-top: 0;\n\tpadding: 2rem 1rem;\n\ttext-align: justify;\n\t&.tab-content-vertical {\n\t\tborder-top: 1px solid $border-color;\n\t}\n\t&.tab-content-vertical-custom {\n\t\tborder: 0;\n\t\tpadding-top: 0;\n\t}\n\t&.tab-content-custom-pill {\n\t\tborder: 0;\n\t\tpadding-left: 0;\n\t}\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/_todo-list.scss",
    "content": "/* Tabs */\n\n.add-items {\n  margin-bottom: 1.5rem;\n  overflow: hidden;\n  input[type=\"text\"] {\n    border-top-right-radius: 0;\n    border-bottom-right-radius: 0;\n    width: 100%;\n    background: transparent;\n  }\n  .btn {\n    margin-left: .5rem;\n    .rtl & {\n      margin-left: auto;\n      margin-right: .5rem;\n    }\n  }\n}\n\n.list-wrapper {\n  height: 100%;\n  max-height: 100%;\n  ul {\n    padding: 0;\n    text-align: left;\n    list-style: none;\n    margin-bottom: 0;\n    li {\n      @extend .d-flex;\n      @extend .align-items-center;\n      @extend .justify-content-start;\n      font-size: .9375rem;\n      padding: .8rem 0;\n      border-bottom: 1px solid $border-color;\n      &:first-child {\n        border-bottom: none;\n      }\n      .form-check{\n        @extend %ellipsor;\n        max-width: 90%;\n        margin-top: .25rem;\n        margin-bottom: .25rem;\n        .form-check-label{\n          @extend%ellipsor;\n        }\n      }\n    }\n  }\n\n  input[type=\"checkbox\"] {\n    margin-right: 15px;\n  }\n\n  .remove {\n    @extend .ms-auto;\n    @extend .text-secondary;\n    .rtl & {\n      @extend .ms-0;\n      @extend .me-auto;\n    }\n    cursor: pointer;\n    font-size: 1.125rem;\n    font-weight: 600;\n    width: 1.25rem;\n    height: 1.25rem;\n    line-height: 20px;\n    text-align: center;\n  }\n\n  .completed {\n    text-decoration: line-through;\n    text-decoration-color: $primary;\n    .remove {\n      @extend .text-primary;\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_typography.scss",
    "content": "/* Typography */\n\nbody {\n  font-size: 1rem;\n  font-weight: normal;\n  font-weight: initial;\n  line-height: 1.5;\n  font-family: $type1;\n  -webkit-font-smoothing: antialiased;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-weight: $font-weight-medium;\n}\np {\n  font-size: $default-font-size;\n}\nh1,\n.h1 {\n  font-size: 2.19rem;\n}\nh2,\n.h2 {\n  font-size: 1.875rem;\n}\nh3,\n.h3 {\n  font-size: 1.5rem;\n}\nh4,\n.h4 {\n  font-size: 1.125rem;\n}\nh5,\n.h5 {\n  font-size: 1rem;\n}\nh6,\n.h6 {\n  font-size: 0.9375rem;\n}\np {\n  font-size: 0.875rem;\n}\n.display-1 {\n  font-size: 3.75rem;\n  @media (max-width: 991px) {\n    font-size: 3rem;\n  }\n}\n.display-2 {\n  font-size: 3.125rem;\n  @media (max-width: 991px) {\n    font-size: 2.5rem;\n  }\n}\n.display-3 {\n  font-size: 2.5rem;\n  @media (max-width: 991px) {\n    font-size: 2rem;\n  }\n}\n.display-4 {\n  font-size: 1.875rem;\n  @media (max-width: 991px) {\n    font-size: 1.5rem;\n  }\n}\n.display-5 {\n  font-size: 1.25rem;\n  @media (max-width: 991px) {\n    font-size: 1rem;\n  }\n}\n.blockquote {\n  padding: 1.25rem;\n  border: 1px solid $border-color;\n}\n\naddress {\n  p {\n    margin-bottom: 0;\n  }\n}\n\n//blockqoute color variations\n@each $color, $value in $theme-colors {\n  .blockquote-#{$color} {\n    @include blockquote($value);\n  }\n}\n.error-page {\n  h1 {\n    font-size: 12rem;\n    @media (max-width: 991px) {\n      font-size: 8rem;\n    }\n  }\n}\n.icon-lg {\n  font-size: 3.75rem;\n}\n.icon-md {\n  font-size: 1.875rem;\n}\n.icon-sm {\n  font-size: 1rem;\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/_utilities.scss",
    "content": "/* Utilities */\n\n.grid-margin {\n  margin-bottom: $grid-gutter-width;\n}\n.grid-margin-sm-0 {\n  @media (min-width: 576px) {\n    margin-bottom: 0;\n  }\n}\n.grid-margin-md-0 {\n  @media (min-width: 768px) {\n    margin-bottom: 0;\n  }\n}\n.grid-margin-lg-0 {\n  @media (min-width: 992px) {\n    margin-bottom: 0;\n  }\n}\n.grid-margin-xl-0 {\n  @media (min-width: 1200px) {\n    margin-bottom: 0;\n  }\n}\n.img-lg {\n  width: 92px;\n  height: 92px;\n}\n.img-sm {\n  width: 43px;\n  height: 43px;\n}\n.img-xs {\n  width: 35px;\n  height: 35px;\n}\n.img-ss {\n  width: 26px;\n  height: 26px;\n}\n.stretch-card {\n  @include display-flex;\n  @include align-items(stretch);\n  @include justify-content(stretch);\n  >.card{\n    width: 100%;\n    min-width: 100%;\n  }\n}\n\n.border-right-sm {\n  @media (min-width: 576px) {\n    border-right: $border-width solid $border-color;\n  }\n}\n.border-right-md {\n  @media (min-width: 768px) {\n    border-right: $border-width solid $border-color;\n  }\n}\n.border-right-lg {\n  @media (min-width: 992px) {\n    border-right: $border-width solid $border-color;\n  }\n}\n\n.border-left-sm {\n  @media (min-width: 576px) {\n    border-left: $border-width solid $border-color;\n  }\n}\n.border-left-md {\n  @media (min-width: 768px) {\n    border-left: $border-width solid $border-color;\n  }\n}\n.border-left-lg {\n  @media (min-width: 992px) {\n    border-left: $border-width solid $border-color;\n  }\n}\n\n.text-gray {\n  color: #8c8c8c;\n}\n\n.text-black {\n  color: $black;\n}\n\n.text-small {\n  font-size: 12px;\n}\n\n.flex-grow {\n  flex-grow: 1;\n}\n\n.font-weight-light {\n  font-weight: $font-weight-light;\n}\n\n.font-weight-medium {\n  font-weight: $font-weight-medium;\n}\n\n.font-weight-bold {\n  font-weight: $font-weight-bold;\n}\n\n.font-weight-normal {\n  font-weight: normal;\n}\n//\n.bg-gray-dark {\n  background: color(gray-dark);\n}\n\n@each $color,\n$value in $social-colors {\n  .text-#{$color} {\n    color: social-color($color);\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/_widget-grid.scss",
    "content": "#resizable-grid{\n  .drag-item{\n    position: relative;\n    .dismiss{\n      position: absolute;\n      top: 7px;\n      right: 25px;\n      font-size: 15px;\n      font-weight: bold;\n      color: lighten(theme-color(danger), 10%);\n      background: lighten(color(gray-light), 40%);\n      height: 15px;\n      width: 16px;\n      line-height: 13px;\n      cursor: pointer;\n      text-align: center;\n      @include border-radius(100%);\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/landing-screens/_auth.scss",
    "content": "/* Auth */\n\n.auth {\n\t&.login-bg {\n\t\tbackground: url(\"../images/auth/Login_bg.jpg\");\n\t\tbackground-size: cover;\n\t}\n\t.login-half-bg {\n\t\tbackground: url(\"../images/auth/login-bg.jpg\");\n\t\tbackground-size: cover;\n\t}\n\t&.register-half-bg {\n\t\tbackground: url(\"../images/auth/Login_bg2.jpg\");\n\t\tbackground-size: cover;\n\t}\n\t&.lock-full-bg {\n\t\tbackground: url(\"../images/auth/lockscreen-bg.jpg\");\n\t\tbackground-size: cover;\n\t}\n\t.lock-profile-img {\n\t\twidth: 90px;\n\t\theight: 90px;\n\t\tborder-radius: 100%;\n\t}\n\t.auth-form-dark {\n\t\tbackground: rgba($black, .6);\n\t\tcolor: $white;\n\t\t.form-control {\n\t\t\tborder-color: rgba($white, .2);\n\t\t\tcolor: $white;\n\t\t\t@include input-placeholder{\n\t\t\t\tcolor: $white;\n\t\t\t}\n\t\t}\n\t}\n\t.auth-form-light {\n\t\tbackground: $white;\n\t\tselect {\n\t\t\tcolor: $input-placeholder-color;\n\t\t}\n\t\t.input-group {\n\t\t\t.form-control {\n\t\t\t\t&:focus,\n\t\t\t\t&:active {\n\t\t\t\t\tborder-color: $border-color;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.auth-form-transparent {\n\t\tbackground: transparent;\n\t\t.form-control,\n\t\t.input-group-text {\n\t\t\tborder-color: $secondary;\n\t\t\t&:focus,\n\t\t\t&:active {\n\t\t\t\tborder-color: $secondary;\n\t\t\t}\n\t\t}\n\t\tselect {\n\t\t\toutline-color: $secondary;\n\t\t}\n\t}\n\t&.auth-img-bg {\n\t\tpadding: 0;\n\t\t.auth-form-transparent {\n\t\t\t@media (min-width:768px) {\n\t\t\t\twidth: 55%;\n\t\t\t\tmargin: auto;\n\t\t\t}\n\t\t}\n\t}\n\t.brand-logo {\n\t\tmargin-bottom: 2rem;\n\t\timg {\n\t\t\twidth: 150px;\n\t\t}\n\t}\n\tform {\n\t\t.auth-form-btn {\n\t\t\theight: 50px;\n\t\t\tline-height: 1.5;\n\t\t}\n\t\t.auth-link {\n\t\t\tfont-size: $default-font-size;\n\t\t\t&:hover {\n\t\t\t\tcolor: initial;\n\t\t\t}\n\t\t}\n\t}\n\tbutton {\n\t\tfont-size: $default-font-size;\n\t\t&.enter-btn {\n\t\t\theight: 45px;\n\t\t\tmargin-bottom: 28px;\n\t\t}\n\t}\n\t.forgot-pass {\n\t\tfont-size: $default-font-size;\n\t\ttext-align: right;\n\t}\n\t.sign-up {\n\t\tfont-size: $default-font-size;\n\t\ttext-align: center;\n\t\tmargin-top: 30px;\n\t\tmargin-bottom: 0;\n\n\t\ta {\n\t\t\tcolor: $primary;\n\t\t}\n\t}\n\t&.login-2,\n\t&.option-2 {\n\t\tpadding: 0;\n\t\t.card {\n\t\t\theight: 100vh;\n\t\t}\n\t}\n\t.terms {\n\t\tfont-size: $default-font-size;\n\t\ttext-align: center;\n\t\tmargin-top: 23px;\n\t\tmargin-bottom: 0;\n\t\ta {\n\t\t\ttext-decoration: underline;\n\t\t}\n\t}\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_bar-loader.scss",
    "content": "/* Bar loader */\n.bar-loader{\n  width: 50px;\n  height: 50px;\n  border-radius: 100%;\n  position: relative;\n  margin: 0 auto;\n}\n\n.bar-loader span{\n  display: inline-block;\n  width: 5px;\n  height: 30px;\n  background-color: rgba($danger, .7);\n}\n\n.bar-loader span:nth-child(1){\n  animation: grow 1s ease-in-out infinite;\n}\n\n.bar-loader span:nth-child(2){\n  animation: grow 1s ease-in-out 0.15s infinite;\n}\n\n.bar-loader span:nth-child(3){\n  animation: grow 1s ease-in-out 0.30s infinite;\n}\n\n.bar-loader span:nth-child(4){\n  animation: grow 1s ease-in-out 0.45s infinite;\n}\n\n@keyframes grow{\n  0%, 100%{\n    -webkit-transform: scaleY(1);\n    -ms-transform: scaleY(1);\n    -o-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n\n  50%{\n    -webkit-transform: scaleY(1.8);\n    -ms-transform: scaleY(1.8);\n    -o-transform: scaleY(1.8);\n    transform: scaleY(1.8);\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_circle-loader.scss",
    "content": "/* Circle loader */\n.circle-loader {\n    width: 70px;\n    height: 70px;\n    border-radius: 100%;\n    position: relative;\n    margin: 0 auto;\n}\n.circle-loader:before, .circle-loader:after{\n    content: \"\";\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    height: 100%;\n    border-radius: 100%;\n    border: 10px solid transparent;\n    border-top-color: $warning;\n  }\n  \n  .circle-loader:before{\n    z-index: 100;\n    animation: spin 1s infinite;\n  }\n  \n  .circle-loader:after{\n    border: 10px solid $secondary;\n  }\n  \n  @keyframes spin{\n    0%{\n      -webkit-transform: rotate(0deg);\n      -ms-transform: rotate(0deg);\n      -o-transform: rotate(0deg);\n      transform: rotate(0deg);\n    }\n  \n    100%{\n      -webkit-transform: rotate(360deg);\n      -ms-transform: rotate(360deg);\n      -o-transform: rotate(360deg);\n      transform: rotate(360deg);\n    }\n  }\n  "
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_colored-balls.scss",
    "content": "#pgloading {\n\tposition: static; \n\t.bokeh {\n    font-size: 100px;\n    width: 1em;\n    height: 1em;\n    position: relative;\n    margin: 0 auto;\n    border-radius: 50%;\n    border: .01em solid $border-color;\n    list-style: none;\n\t\tpadding:0;\n\t\tli {\n\t\t\tposition: absolute;\n\t\t\twidth: .2em;\n\t\t\theight: .2em;\n\t\t\tborder-radius: 50%;\n\t\t\t&:nth-child(1) {\n\t\t\t\tleft: 50%;\n\t\t\t\ttop: 0;\n\t\t\t\tmargin: 0 0 0 -.1em;\n\t\t\t\tbackground: $success;\n\t\t\t\t-webkit-transform-origin: 50% 250%;\n\t\t\t\ttransform-origin: 50% 250%;\n\t\t\t\t-webkit-animation: \n\t\t\t\t\t\trota 1.13s linear infinite,\n\t\t\t\t\t\topa 3.67s ease-in-out infinite alternate;\n\t\t\t\tanimation: \n\t\t\t\t\t\trota 1.13s linear infinite,\n\t\t\t\t\t\topa 3.67s ease-in-out infinite alternate;\n\t\t\t}\n\t\t\t&:nth-child(2) {\n\t\t\t\ttop: 50%; \n\t\t\t\tright: 0;\n\t\t\t\tmargin: -.1em 0 0 0;\n\t\t\t\tbackground: $danger;\n\t\t\t\t-webkit-transform-origin: -150% 50%;\n\t\t\t\ttransform-origin: -150% 50%;\n\t\t\t\t-webkit-animation: \n\t\t\t\t\t\trota 1.86s linear infinite,\n\t\t\t\t\t\topa 4.29s ease-in-out infinite alternate;\n\t\t\t\tanimation: \n\t\t\t\t\t\trota 1.86s linear infinite,\n\t\t\t\t\t\topa 4.29s ease-in-out infinite alternate;\n\t\t\t}\n\t\t\t&:nth-child(3) {\n\t\t\t\tleft: 50%; \n\t\t\t\tbottom: 0;\n\t\t\t\tmargin: 0 0 0 -.1em;\n\t\t\t\tbackground: $warning;\n\t\t\t\t-webkit-transform-origin: 50% -150%;\n\t\t\t\ttransform-origin: 50% -150%;\n\t\t\t\t-webkit-animation: \n\t\t\t\t\t\trota 1.45s linear infinite,\n\t\t\t\t\t\topa 5.12s ease-in-out infinite alternate;\n\t\t\t\tanimation: \n\t\t\t\t\t\trota 1.45s linear infinite,\n\t\t\t\t\t\topa 5.12s ease-in-out infinite alternate;\n\t\t\t}\n\t\t\t&:nth-child(4) {\n\t\t\t\ttop: 50%; \n\t\t\t\tleft: 0;\n\t\t\t\tmargin: -.1em 0 0 0;\n\t\t\t\tbackground: $primary;\n\t\t\t\t-webkit-transform-origin: 250% 50%;\n\t\t\t\ttransform-origin: 250% 50%;\n\t\t\t\t-webkit-animation: \n\t\t\t\t\t\trota 1.72s linear infinite,\n\t\t\t\t\t\topa 5.25s ease-in-out infinite alternate;\n\t\t\t\tanimation: \n\t\t\t\t\t\trota 1.72s linear infinite,\n\t\t\t\t\t\topa 5.25s ease-in-out infinite alternate;\n\t\t\t}\n\t\t}\n\t}\n}\n\n@-webkit-keyframes rota {\n    from { }\n    to { -webkit-transform: rotate(360deg); }\n}\n\n@keyframes rota {\n    from { }\n    to { -webkit-transform: rotate(360deg); transform: rotate(360deg); }\n}\n\n@-webkit-keyframes opa {\n    0% { }\n    12.0% { opacity: 0.80; }\n    19.5% { opacity: 0.88; }\n    37.2% { opacity: 0.64; }\n    40.5% { opacity: 0.52; }\n    52.7% { opacity: 0.69; }\n    60.2% { opacity: 0.60; }\n    66.6% { opacity: 0.52; }\n    70.0% { opacity: 0.63; }\n    79.9% { opacity: 0.60; }\n    84.2% { opacity: 0.75; }\n    91.0% { opacity: 0.87; }\n}\n\n@keyframes opa {\n    0% { }\n    12.0% { opacity: 0.80; }\n    19.5% { opacity: 0.88; }\n    37.2% { opacity: 0.64; }\n    40.5% { opacity: 0.52; }\n    52.7% { opacity: 0.69; }\n    60.2% { opacity: 0.60; }\n    66.6% { opacity: 0.52; }\n    70.0% { opacity: 0.63; }\n    79.9% { opacity: 0.60; }\n    84.2% { opacity: 0.75; }\n    91.0% { opacity: 0.87; }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_dot-opacity-loader.scss",
    "content": "/* Dot opacity loader */\n\n.dot-opacity-loader {\n    width: 100px;\n    height: 100px;\n    border-radius: 100%;\n    position: relative;\n    margin: 0 auto;\n}\n\n.dot-opacity-loader span{\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    border-radius: 100%;\n    background-color: $primary;\n    margin: 35px 5px;\n    opacity: 0;\n}\n  \n.dot-opacity-loader span:nth-child(1){\n    animation: opacitychange 1s ease-in-out infinite;\n}\n\n.dot-opacity-loader span:nth-child(2){\n    animation: opacitychange 1s ease-in-out 0.33s infinite;\n}\n\n.dot-opacity-loader span:nth-child(3){\n    animation: opacitychange 1s ease-in-out 0.66s infinite;\n}\n  \n@keyframes opacitychange{\n    0%, 100%{\n        opacity: 0;\n    }\n\n    60%{\n        opacity: 1;\n    }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_flip-square-loader.scss",
    "content": "/* Flip square */\n\n  .flip-square-loader{\n    -webkit-perspective: 120px;\n    -moz-perspective: 120px;\n    -ms-perspective: 120px;\n    perspective: 120px;\n    width: 100px;\n    height: 100px;\n    border-radius: 100%;\n    position: relative;\n    margin: 0 auto;\n  }\n  \n  .flip-square-loader:before{\n    content: \"\";\n    position: absolute;\n    left: 25px;\n    top: 25px;\n    width: 50px;\n    height: 50px;\n    background-color: rgba($success, .7);\n    animation: flip 1s infinite;\n  }\n  \n  @keyframes flip {\n    0% {\n      transform: rotate(0);\n    }\n  \n    50% {\n      transform: rotateY(180deg);\n    }\n  \n    100% {\n      transform: rotateY(180deg)  rotateX(180deg);\n    }\n  }"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_glowing-ball.scss",
    "content": ".glowing-loader {\n\tposition: relative;\n}\n.s2 {\n  position: absolute;\n  height: 70px;\n\twidth: 70px;\n\ttop: 50px;\n  background-color: transparent;\n  left: 50%;\n  transform: translate(-50%, -50%);\n}\n\n.s1 {\n  position: absolute;\n  height: 70px;\n  width: 70px;\n\tleft: 50%;\n\ttop: 50px;\n  transform-origin: center;\n  transform: translate(-50%, -50%) rotate(45deg);\n  background-color: transparent;\n}\n\n.bigcon {\n  position: absolute;\n  height: 75px;\n  width: 75px;\n\tleft: 50%;\n\ttop: 50px;\n  transform-origin: center;\n  transform: translate(-50%, -50%) rotate(-45deg);\n  background-color: transparent;\n  animation: bigcon 2s infinite linear;\n  animation-delay: 0.25s;\n}\n\n.b {\n  border-radius: 50%;\n  position: absolute;\n}\n\n.s {\n  width: 15px;\n  height: 15px;\n  animation: small 2s infinite ease;\n  box-shadow: 0px 2px rgba($black, .3);\n   background-color: $primary;\n}\n\n.s:nth-child(1) {\n  top: 0%;\n  left: 0%;\n}\n\n.s:nth-child(2) {\n  top: 0%;\n  right: 0%;\n}\n\n.s:nth-child(3) {\n  right: 0%;\n  bottom: 0%;\n}\n\n.s:nth-child(4) {\n  bottom: 0%;\n  left: 0%;\n}\n\n.big {\n  width: 15px;\n  height: 15px;\n  border-radius: 15px;\n  box-shadow:0px 0px 10px theme-color(primary), 0px 0px 20px theme-color(primary), 0px 0px 30px theme-color(primary), 0px 0px 50px theme-color(primary), 0px 0px 60px theme-color(primary) ;\n  z-index: 1;\n  background-color: $primary;\n  animation: bigball 1s infinite linear;\n}\n\n.sb1{\n  animation-delay: -1.75s;\n}\n.sb6{\n  animation-delay: -1.5s;\n}\n.sb2{\n  animation-delay: -1.25s;\n}\n.sb7{\n  animation-delay: -1s;\n}\n.sb3{\n  animation-delay: -0.75s;\n}\n.sb8{\n  animation-delay: -0.5s;\n}\n.sb4{\n  animation-delay: -0.25s;\n}\n.sb5{\n  animation-delay: -0s;\n}\n\n@keyframes bigcon {\n  0% {\n    transform-origin: center;\n    transform: translate(-50%, -50%) rotate(45deg);\n  }\n  100% {\n    transform-origin: center;\n    transform: translate(-50%, -50%) rotate(405deg);\n  }\n}\n\n@keyframes small {\n  0% {\n    transform: scale(1);\n     background-color: lighten($primary, 20%);\n  }\n  10% {\n    transform: scale(1.3);\n    background-color: $primary;\n  }\n  15% {\n    transform: scale(1);\n  }\n  25%{\ntransform: scale(1);\n     background-color: $primary;\n  }\n  100%{\n    transform: scale(1);\n     background-color: $primary;\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_jumping-dots-loader.scss",
    "content": "/* Jumping dots loader */\n.jumping-dots-loader {\n    width: 100px;\n    height: 100px;\n    border-radius: 100%;\n    position: relative;\n    margin: 0 auto;\n}\n.jumping-dots-loader span{\n    display: inline-block;\n    width: 20px;\n    height: 20px;\n    border-radius: 100%;\n    background-color: rgba($danger, .8);\n    margin: 35px 5px;\n  }\n  \n  .jumping-dots-loader span:nth-child(1){\n    animation: bounce 1s ease-in-out infinite;\n  }\n  \n  .jumping-dots-loader span:nth-child(2){\n    animation: bounce 1s ease-in-out 0.33s infinite;\n  }\n  \n  .jumping-dots-loader span:nth-child(3){\n    animation: bounce 1s ease-in-out 0.66s infinite;\n  }\n  \n  @keyframes bounce{\n    0%, 75%, 100%{\n      -webkit-transform: translateY(0);\n      -ms-transform: translateY(0);\n      -o-transform: translateY(0);\n      transform: translateY(0);\n    }\n  \n    25%{\n      -webkit-transform: translateY(-20px);\n      -ms-transform: translateY(-20px);\n      -o-transform: translateY(-20px);\n      transform: translateY(-20px);\n    }\n  }\n  "
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_loaders.scss",
    "content": "/* Loaders */\n\n@import \"variables\";\n@import \"colored-balls\";\n@import \"glowing-ball\";\n@import \"pixel-loader\";\n@import \"square-box\";\n@import \"circle-loader\";\n@import \"jumping-dots-loader\";\n@import \"bar-loader\";\n@import \"square-path-loader\";\n@import \"dot-opacity-loader\";\n@import \"flip-square-loader\";\n@import \"moving-square-loader\";"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_moving-square-loader.scss",
    "content": "/* Moving square loader */\n\n.moving-square-loader {\n    width: 100px;\n    height: 100px;\n    border-radius: 100%;\n    position: relative;\n    margin: 0 auto;\n}\n.moving-square-loader:before{\n    content: \"\";\n    position: absolute;\n    width: 10px;\n    height: 10px;\n    top: calc(50% - 10px);\n    left: 0px;\n    background-color: rgba($danger, .7);\n    animation: rotatemove 1s infinite;\n  }\n  \n  @keyframes rotatemove{\n    0%{\n      -webkit-transform: scale(1) translateX(0px);\n      -ms-transform: scale(1) translateX(0px);\n      -o-transform: scale(1) translateX(0px);\n      transform: scale(1) translateX(0px);\n    }\n  \n    100%{\n      -webkit-transform: scale(2) translateX(45px);\n      -ms-transform: scale(2) translateX(45px);\n      -o-transform: scale(2) translateX(45px);\n      transform: scale(2) translateX(45px);\n    }\n  }\n  "
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_pixel-loader.scss",
    "content": "/* Pixel loader */\n.pixel-loader {\n    width: 10px;\n    height: 10px;\n    background: $warning;\n    color: $warning;\n    margin: 80px auto;\n    box-shadow: 15px 15px  0 0,\n                  -15px -15px  0 0,\n                  15px -15px  0 0,\n                  -15px 15px  0 0,\n                  0 15px  0 0,\n                  15px 0  0 0,\n                  -15px 0  0 0,\n                  0 -15px 0 0;\n    animation: anim 2s linear infinite;\n  }\n  \n  @keyframes anim {\n    0% {\n      -webkit-filter: hue-rotate(0deg);\n    }\n    50% {\n      box-shadow: 20px 20px  0 0,\n                  -20px -20px  0 0,\n                  20px -20px  0 0,\n                  -20px 20px  0 0,\n                  0 10px  0 0,\n                  10px 0  0 0,\n                  -10px 0  0 0,\n                  0 -10px 0 0;\n    }\n    \n    75% {\n      box-shadow: 20px 20px  0 0,\n                  -20px -20px  0 0,\n                  20px -20px  0 0,\n                  -20px 20px  0 0,\n                  0 10px  0 0,\n                  10px 0  0 0,\n                  -10px 0  0 0,\n                  0 -10px 0 0;\n    }\n    \n    100% {\n      transform: rotate(360deg);\n      -webkit-filter: hue-rotate(360deg);\n    }\n  }\n  "
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_square-box.scss",
    "content": "/* Square box loader */\n\n@keyframes dyinglight {\n\t15% {\n\t\ttransform: scale(1.6)\n\t}\n\t50% {\n\t\ttransform: rotate(-89deg)\n\t}\n\t100% {\n\t\ttransform: rotate(-90deg)\n\t}\n}\n  \n  \n.square-box-loader {\nposition: absolute;\n  left: 50%;\n  top: 50%;\n  transform: translate(-50%, -50%);\n  display: inline-block;\n}\n  \n\n.square-box-loader-square {\n  display: block;\n  width: $square-size;\n  height: $square-size;\n  background: $primary;\n}\n  \n\n.square-box-loader-container {\nposition: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  transform-origin: 50% 50% 0;\n  animation: dyinglight 1s ease infinite;\n  backface-visibility: hidden;\n}\n  \n\n.square-box-loader-corner-top:before,\n.square-box-loader-corner-top:after,\n.square-box-loader-corner-bottom:before,\n.square-box-loader-corner-bottom:after {\n\tposition: absolute;\n  width: $square-corner-size;\n  height: $square-corner-size;\n  color: $primary;\n  content: '';\n}\n  \n\n.square-box-loader-corner-top {\n\t&:before {\n\t\tborder-left: 1px solid;\n\t\tborder-top: 1px solid;\n\t\ttop: -$square-corner-position;\n\t\tleft: -$square-corner-position;\n\t}\n\t\n\t&:after {\n\t\tborder-right: 1px solid;\n\t\tborder-top: 1px solid;\n\t\ttop: -$square-corner-position;\n\t\tright: -$square-corner-position;\n\t}\n\t\n}\n  \n\n.square-box-loader-corner-bottom {\n\t&:before {\n\t\tborder-left: 1px solid;\n\t\tborder-bottom: 1px solid;\n\t\tbottom: -$square-corner-position;\n\t\tleft: -$square-corner-position;\n\t}\n\t\n\t&:after {\n\t\tborder-right: 1px solid;\n\t\tborder-bottom: 1px solid;\n\t\tbottom: -$square-corner-position;\n\t\tright: -$square-corner-position;\n\t}\n\t\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_square-path-loader.scss",
    "content": "/* Square path loader */\n\n.square-path-loader {\n    width: 100px;\n    height: 100px;\n    border-radius: 100%;\n    position: relative;\n    margin: 0 auto;\n}\n.square-path-loader:before, .square-path-loader:after{\n    content: \"\";\n    width: 15px;\n    height: 15px;\n    position: absolute;\n    top: 0;\n    left: calc(50% - 10px);\n    background-color: rgba($success, .7);\n    animation: squaremove 1s ease-in-out infinite;\n  }\n  \n  .square-path-loader:after{\n    bottom: 0;\n    animation-delay: 0.5s;\n  }\n  \n  @keyframes squaremove{\n    0%, 100%{\n      -webkit-transform: translate(0,0) rotate(0);\n      -ms-transform: translate(0,0) rotate(0);\n      -o-transform: translate(0,0) rotate(0);\n      transform: translate(0,0) rotate(0);\n    }\n  \n    25%{\n      -webkit-transform: translate(40px,40px) rotate(45deg);\n      -ms-transform: translate(40px,40px) rotate(45deg);\n      -o-transform: translate(40px,40px) rotate(45deg);\n      transform: translate(40px,40px) rotate(45deg);\n    }\n  \n    50%{\n      -webkit-transform: translate(0px,80px) rotate(0deg);\n      -ms-transform: translate(0px,80px) rotate(0deg);\n      -o-transform: translate(0px,80px) rotate(0deg);\n      transform: translate(0px,80px) rotate(0deg);\n    }\n  \n    75%{\n      -webkit-transform: translate(-40px,40px) rotate(45deg);\n      -ms-transform: translate(-40px,40px) rotate(45deg);\n      -o-transform: translate(-40px,40px) rotate(45deg);\n      transform: translate(-40px,40px) rotate(45deg);\n    }\n  }\n  "
  },
  {
    "path": "BlackStone/assets/scss/components/loaders/_variables.scss",
    "content": "$square-box-scale: 3;\n$square-size: 30px;\n$square-corner-size: ceil($square-size / $square-box-scale);\n$square-corner-position: ceil($square-corner-size / $square-box-scale);"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_animation.scss",
    "content": "/* Animation Mixins */\n@keyframes dropdownAnimation {\n  from {\n    opacity: 0;\n    transform: translate3d(0, -30px, 0);\n  }\n\n  to {\n    opacity: 1;\n    transform: none;\n    transform: translate3d(0, 0px, 0);\n  }\n}\n\n.dropdownAnimation {\n  animation-name: dropdownAnimation;\n  @include animation-duration($action-transition-duration);\n  @include animation-fill-mode(both);\n}\n@mixin transition($settings) {\n  -webkit-transition: $settings;\n  -moz-transition: $settings;\n  -ms-transition: $settings;\n  -o-transition: $settings;\n  transition: $settings;\n}\n@keyframes fadeOut {\n  from {\n    opacity: 1;\n  }\n\n  to {\n    opacity: 0;\n  }\n}\n\n.fadeOut {\n  animation-name: fadeOut;\n}\n\n.infinite-spin {\n  @keyframes spin {\n    from {\n      transform: rotate(0deg);\n    }\n\n    to {\n      transform: rotate(360deg);\n    }\n  }\n  animation-name: spin;\n  animation-duration: 3s;\n  animation-iteration-count: infinite;\n  animation-timing-function: linear;\n}\n@keyframes fadeInUp {\n  from {\n    opacity: 0;\n    transform: translate3d(0, 100%, 0);\n  }\n\n  to {\n    opacity: 1;\n    transform: none;\n  }\n}\n\n.fadeInUp {\n  animation-name: fadeInUp;\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_background.scss",
    "content": "// Background Mixins //\n"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_badges.scss",
    "content": "//Badge Mixins\n\n//Badge vriations\n@mixin badge-variations($color) {\n\tborder: 1px solid $color;\n\tcolor: $white;\n}\n// Badge outlined variations\n@mixin badge-outline-variations($color) {\n\tcolor: $color;\n\tborder: 1px solid $color;\n}\n// Badge outlined variations\n@mixin badge-variations($color) {\n\tbackground: $color;\n\tcolor: $white;\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_blockqoute.scss",
    "content": "// BlockQuote Mixins //\n\n@mixin blockquote($color) {\n  border-color: $color;\n  .blockquote-footer {\n    color: $color;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_breadcrumbs.scss",
    "content": "// Breadcrumb color variations\n@mixin breadcrumb-inverse-variant($color) {\n  background: rgba($color, 0.25);\n  border-color: $color;\n\n  .breadcrumb-item {\n    color: $color;\n\n    &:before {\n      color: inherit;\n    }\n\n    a {\n      color: inherit;\n    }\n  }\n\n  &.breadcrumb-custom {\n    background: transparent;\n\n    .breadcrumb-item {\n      background: lighten($color, 25%);\n\n      a {\n        color: $color;\n        border: none;\n\n        &:before {\n          border-left-color: lighten($color, 25%);\n        }\n      }\n\n      span {\n        color: $color;\n      }\n\n      &:last-child {\n        background: transparent;\n      }\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_buttons.scss",
    "content": "@mixin social-button($color) {\n    background: $color;\n    color: $white;\n  \n    &:hover,\n    &:focus {\n      background: darken($color, 10%);\n      color: $white;\n    }\n    &.btn-social-icon-text {\n      padding: 0 1.5rem 0 0;\n      background: lighten($color, 10%);\n      i {\n        background: $color;\n        padding: .75rem;\n        display: inline-block;\n        margin-right: 1.5rem;\n      }\n    }\n}\n@mixin social-outline-button($color) {\n  border: 1px solid $color;\n  color: $color;\n  &:hover {\n    background: $color;\n    color: $white;\n  }\n}\n@mixin button-inverse-variant($color, $color-hover: $white) {\n    background-color: rgba($color, 0.2);\n    background-image: none;\n    border-color: rgba($color, 0);\n    &:not(.btn-inverse-light) {\n      color: $color;      \n    }\n    &:hover {\n      color: $color-hover;\n      background-color: $color;\n      border-color: $color;\n    }\n  \n    &.focus,\n    &:focus {\n      box-shadow: 0 0 0 3px rgba($color, .5);\n    }\n  \n    &.disabled,\n    &:disabled {\n      color: $color;\n      background-color: transparent;\n    }\n  \n    &.active,\n    &:active,\n    .show > &.dropdown-toggle {\n      color: $color-hover;\n      background-color: $color;\n      border-color: $color;\n    }\n}\n@mixin button-variant($value) {\n    background: $value;\n    border: 0;\n    &:not([disabled]):not(.disabled):active,\n    &:not([disabled]):not(.disabled).active,\n    .show > &.dropdown-toggle {\n      background: $value;\n    }\n    &:hover {\n      opacity: .8;\n    }\n    &:not(.btn-light) {\n      color: $white;      \n      &:hover,\n      &:focus,\n      &:active {\n        color: $white;\n      }\n    }\n    @include transition(opacity .3s ease);\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_cards.scss",
    "content": "// Cards Mixins \n\n@mixin card-inverse-variant($bg, $border, $color) {\n  background: $bg;\n  border: 1px solid $border;\n  color: $color;\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_misc.scss",
    "content": "/* Miscellaneous Mixins */\n\n// general transform\n@mixin transform($transforms) {\n\t   -moz-transform: $transforms;\n\t     -o-transform: $transforms;\n\t    -ms-transform: $transforms;\n\t-webkit-transform: $transforms;\n          transform: $transforms;\n}\n\n// rotate\n@mixin rotate ($deg) {\n  @include transform(rotate(#{$deg}deg));\n}\n\n// scale\n@mixin scale($scale) {\n\t @include transform(scale($scale));\n}\n// translate\n@mixin translate ($x, $y) {\n   @include transform(translate($x, $y));\n}\n// skew\n@mixin skew ($x, $y) {\n   @include transform(skew(#{$x}deg, #{$y}deg));\n}\n//transform origin\n@mixin transform-origin ($origin) {\n    moz-transform-origin: $origin;\n\t     -o-transform-origin: $origin;\n\t    -ms-transform-origin: $origin;\n\t-webkit-transform-origin: $origin;\n          transform-origin: $origin;\n}\n//Ellipsis\n%ellipsor{\n\ttext-overflow: ellipsis;\n\toverflow: hidden;\n\tmax-width:100%;\n\twhite-space: nowrap;\n}\n\n// Placeholder\n@mixin placeholder {\n\t&::-webkit-input-placeholder {\n\t\t@content\n\t}\n\t&:-moz-placeholder {\n\t\t@content\n\t}\n\t&::-moz-placeholder {\n\t\t@content\n\t}\n\t&:-ms-input-placeholder {\n\t\t@content\n\t}\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_no-ui-slider.scss",
    "content": "\n// Sider color variations\n@mixin slider-color-variant($color) {\n\t.noUi-base {\n\t\t.noUi-connect {\n\t\t\tbackground: $color;\n\t\t}\n\n\t\t.noUi-origin {\n\t\t\tbackground: $color;\n\n\t\t\t.noUi-handle {\n\t\t\t\t&:after {\n\t\t\t\t\tbackground: $color;\n\t\t\t\t}\n\n\t\t\t\t.noUi-tooltip {\n\t\t\t\t\tbackground: $color;\n\t\t\t\t\tcolor: $white;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_pagination.scss",
    "content": "// Pagination variations\n@mixin pagination-variants($color) {\n  .page-item {\n    &.active {\n      .page-link {\n        background: $color;\n        border-color: $color;\n      }\n    }\n\n    .page-link {\n      &:hover {\n        background: lighten($color,5%);\n        border-color: $color;\n        color: $white;\n      }\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_popovers.scss",
    "content": "// popover color variations //\n@mixin popover-variant($color) {\n\tborder-color: $color;\n\t.popover-header {\n\t\tbackground: $popover-bg;\n\t\tcolor: $color;\n\t}\n\t&.bs-popover-top{\n\t\t.arrow{\n\t\t\t&:before{\n\t\t\t\tborder-top-color: $color;\n\t\t\t}\n\t\t}\n\t}\n\t&.bs-popover-right{\n\t\t.arrow{\n\t\t\t&:before{\n\t\t\t\tborder-right-color: $color;\n\t\t\t}\n\t\t}\n\t}\n\t&.bs-popover-bottom{\n\t\t.arrow{\n\t\t\t&:before{\n\t\t\t\tborder-bottom-color: $color;\n\t\t\t}\n\t\t}\n\t}\n\t&.bs-popover-left{\n\t\t.arrow{\n\t\t\t&:before{\n\t\t\t\tborder-left-color: $color;\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/mixins/_tooltips.scss",
    "content": "// Tooltip color  variations\n\n@mixin tooltip-variant($color) {\n\t.tooltip-inner {\n\t\tbackground:  theme-color($color);\n\t\tcolor: $white;\n\t}\n\t&.bs-tooltip-top {\n    .arrow::before {\n      border-top-color: theme-color($color);\n    }\n  }\n  &.bs-tooltip-right {\n    .arrow::before {\n      border-right-color: theme-color($color);\n    }\n  }\n  &.bs-tooltip-bottom {\n    .arrow::before {\n      border-bottom-color: theme-color($color);\n    }\n  }\n  &.bs-tooltip-left {\n    .arrow::before {\n      border-left-color: theme-color($color);\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_ace.scss",
    "content": "/* Ace Editor */\n.ace_editor {\n\tmargin: auto;\n\theight: 300px;\n\twidth: 100%;\n\tfont: 14px/normal SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\", \"Courier New\", monospace;\n\n\t.ace_content {\n\t\tfont-size: $default-font-size;\n\t}\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_avgrund.scss",
    "content": "/* Avgrund Popup */\n\n.avgrund-popin {\n\tposition: absolute;\n\tbackground: #fff;\n\tpadding: 37px 33px;\n\toverflow: hidden;\n\tvisibility: hidden;\n\topacity: 0;\n\tfilter: alpha(opacity=0);\n\ttop: 50%;\n\tleft: 50%;\n\tz-index: 1000;\n\tfont-size: $default-font-size;\n\tfont-weight: normal;\n\tfont-weight: initial;\n\tline-height: 1.85;\n\t@include border-radius(10px);\n\n\t-webkit-transform: scale(0.8);\n\t-moz-transform: scale(0.8);\n\t-ms-transform: scale(0.8);\n\t-o-transform: scale(0.8);\n\ttransform: scale(0.8);\n\tp{\n\t\tfont-size: $default-font-size;\n\t\tfont-weight: normal;\n\t\tfont-weight: initial;\n\t}\n}\n\n.avgrund-overlay {\n\tbackground: $modal-backdrop-bg;\n\twidth: 100%;\n\tposition: fixed;\n\ttop: 0px;\n\tleft: 0;\n  bottom: 0;\n  right: 0;\n\tz-index: 101;\n\tvisibility: hidden;\n\topacity: 0;\n\tfilter: alpha(opacity=0);\n}\n\nbody.avgrund-ready,\n.avgrund-ready .avgrund-popin,\n.avgrund-ready .avgrund-overlay {\n\t-webkit-transform-origin: 50% 50%;\n\t-moz-transform-origin: 50% 50%;\n\t-ms-transform-origin: 50% 50%;\n\t-o-transform-origin: 50% 50%;\n\ttransform-origin: 50% 50%;\n\n\t-webkit-transition: 0.3s all ease-out;\n\t-moz-transition: 0.3s all ease-out;\n\t-ms-transition: 0.3s all ease-out;\n\t-o-transition: 0.3s all ease-out;\n\ttransition: 0.3s all ease-out;\n}\n\nbody.avgrund-active {\n\toverflow: hidden;\n}\n\n.avgrund-active .avgrund-popin {\n\tvisibility: visible;\n\topacity: 1;\n\tfilter: alpha(opacity=100);\n\n\t-webkit-transform: scale(1.1);\n\t-moz-transform: scale(1.1);\n\t-ms-transform: scale(1.1);\n\t-o-transform: scale(1.1);\n\ttransform: scale(1.1);\n}\n\n.avgrund-active .avgrund-overlay {\n\tvisibility: visible;\n\topacity: .5;\n\tfilter: alpha(opacity=50);\n\theight: 20000px;\n}\n\n.avgrund-popin.stack {\n\t-webkit-transform: scale(1.5);\n\t-moz-transform: scale(1.5);\n\t-ms-transform: scale(1.5);\n\t-o-transform: scale(1.5);\n\ttransform: scale(1.5);\n}\n\n.avgrund-active .avgrund-popin.stack {\n\t-webkit-transform: scale(1.1);\n\t-moz-transform: scale(1.1);\n\t-ms-transform: scale(1.1);\n\t-o-transform: scale(1.1);\n\ttransform: scale(1.1);\n}\n\n.avgrund-active .avgrund-blur {\n}\n\n/* Optional close button styles */\n.avgrund-close {\n\tdisplay: block;\n\tcolor:#fff;\n  background: $body-color;\n\tfont-size: 10px;\n\ttext-decoration: none;\n\ttext-transform: uppercase;\n\tposition: absolute;\n\ttop: 10px;\n\tright: 10px;\n\theight: 17px;\n\twidth: 17px;\n\ttext-align:center;\n\tline-height: 16px;\n\n  @include border-radius(50px);\n  &:hover{\n    color: #fff;\n    text-decoration:none;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_c3.scss",
    "content": ".c3-axis,\n.c3-legend-item {\n  fill: rgba(255, 255, 255, 0.7);\n}\n.c3 path,\n.c3 line {\n  stroke: #2e2f32;\n}\n.c3-chart-arcs-title {\n  fill: rgba(255, 255, 255, 0.7);\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_chartist.scss",
    "content": "/* Chartist */\n\n// Line Charts Starts\n// Data -1\n\n.ct-series-a .ct-line {\n  stroke: lighten($blue, 15);\n  stroke-width: 3px;\n  stroke-dasharray: 10px 20px;\n}\n\n.ct-series-a .ct-point {\n  stroke: lighten($blue, 1);\n  stroke-width: 10px;\n  stroke-linecap: round;\n}\n// Data -2\n\n.ct-series-b .ct-line {\n  stroke: lighten($green, 15);\n  stroke-width: 3px;\n  stroke-dasharray: 10px 20px;\n}\n\n.ct-series-b .ct-point {\n  stroke: lighten($green, 1);\n  stroke-width: 10px;\n  stroke-linecap: round;\n}\n// Data -3\n\n.ct-series-c .ct-line {\n  stroke: lighten($orange, 15);\n  stroke-width: 3px;\n  stroke-dasharray: 10px 20px;\n}\n\n.ct-series-c .ct-point {\n  stroke: lighten($orange, 1);\n  stroke-width: 10px;\n  stroke-linecap: round;\n}\n// Line Charts Ends\n// Bar Charts Starts\n// Data -1\n\n.ct-series-a .ct-bar {\n  stroke: lighten($blue, 15);\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre;\n}\n// Data -2\n\n.ct-series-b .ct-bar {\n  stroke: lighten($green, 15);\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre;\n}\n// Data -3\n\n.ct-series-c .ct-bar {\n  stroke: lighten($orange, 15);\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre;\n}\n// Data -4\n\n.ct-series-d .ct-bar {\n  stroke: lighten($red, 15);\n  stroke-width: 20px;\n  stroke-dasharray: 0;\n  stroke-linecap: squre;\n}\n// Bar Charts Ends\n// Pie Chart Starts\n// Data -1\n.ct-series-a .ct-slice-pie {\n  fill: lighten($blue, 15);\n  stroke-width: 4px;\n}\n// Data -2\n\n.ct-series-b .ct-slice-pie {\n  fill: lighten($green, 15);\n  stroke-width: 4px;\n}\n// Data 3\n\n.ct-series-c .ct-slice-pie {\n  fill: lighten($red, 15);\n  stroke-width: 4px;\n}\n// Data -4\n\n.ct-series-d .ct-slice-pie {\n  fill: lighten($orange, 15);\n  stroke-width: 4px;\n}\n// Pie Chart Starts\n// Donut chart Starts\n// Data -1\n.ct-series-a .ct-slice-donut-solid {\n  fill: lighten($blue, 15);\n}\n\n// Data -2\n.ct-series-b .ct-slice-donut-solid {\n  fill: lighten($green, 15);\n}\n\n// Data -3\n.ct-series-c .ct-slice-donut-solid {\n  fill: lighten($red, 15);\n}\n\n// Data -d\n.ct-series-a .ct-slice-donut-solid {\n  fill: lighten($orange, 15);\n}\n\n// E-commerce Dashboard Chart\n#ct-chart-dash-barChart {\n  // Data -1\n  .ct-series-a .ct-bar {\n    stroke: lighten($red, 10);\n    stroke-width: 20px;\n    stroke-dasharray: 0;\n    stroke-linecap: squre;\n  }\n  // Data -2\n  .ct-series-b .ct-bar {\n    stroke: lighten($blue, 10);\n    stroke-width: 20px;\n    stroke-dasharray: 0;\n    stroke-linecap: squre;\n  }\n  // Data -3\n  .ct-series-c .ct-bar {\n    stroke: lighten($blue, 15);\n    stroke-width: 20px;\n    stroke-dasharray: 0;\n    stroke-linecap: squre;\n  }\n  // Data -4\n  .ct-series-d .ct-bar {\n    stroke: lighten($blue, 20);\n    stroke-width: 20px;\n    stroke-dasharray: 0;\n    stroke-linecap: squre;\n  }\n}\n\n.ct-grid {\n  stroke: rgba(255, 255, 255, 0.2);\n}\n\n.ct-labels span {\n  color: #d9e9ff;\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_codemirror.scss",
    "content": "/* CodeMirror */\n\n.CodeMirror {\n  font-size: $default-font-size;\n  font-weight: normal;\n  height: auto;\n  text-align: left;\n  min-height: auto;\n}\n.CodeMirror-scroll {\n  min-height: auto;\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_colcade.scss",
    "content": "/* Colcade */\n\n* { box-sizing: border-box; }\n\n.grid {\n  border: 1px solid color(gray-light)est;\n}\n\n.grid:after {\n  display: block;\n  content: '';\n  clear: both;\n}\n\n.grid-col {\n  float: left;\n  width: 49%;\n  margin-right: 2%;\n  background: rgba(theme-color(primary), .2);\n}\n\n.grid-col--4 { margin-right: 0; }\n\n/* hide two middle */\n.grid-col--2, .grid-col--3 { display: none; }\n\n@media ( min-width: 768px ) {\n  .grid-col { width: 32%; }\n  .grid-col--2 { display: block; }\n}\n\n@media ( min-width: 1200px ) {\n  .grid-col { width: 23.5%; }\n  .grid-col--2, .grid-col--3 { display: block; }\n}\n\n.grid-item {\n  background: $primary;\n  margin-bottom: 20px;\n}\n\n.grid-item--a { height:  80px; }\n.grid-item--b { height: 140px; }\n.grid-item--c { height: 300px; }\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_colorpicker.scss",
    "content": "/* Colorpicker */\n\n.asColorPicker-dropdown {\n  max-width: initial;\n}\n.asColorPicker-trigger{\n    height: auto;\n    border: 0;\n    span {\n      border-radius: 2px;\n      width: 35px;\n    }\n}\n\n.asColorPicker-input {\n  @extend .form-control;\n}\n\n.asColorPicker-wrap {\n  @extend .input-group;\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_context-menu.scss",
    "content": "/* Context Menu */\n\n.context-menu-icon {\n  &:before {\n    color: $black;\n    font: normal normal normal 15px/1 \"Material Design Icons\";\n  }\n  &.context-menu-icon-cut {\n    &:before {\n      content: '\\F190';\n    }\n  }\n  &.context-menu-icon-edit {\n    &:before {\n      content: '\\F3EF';\n    }\n  }\n  &.context-menu-icon-copy {\n    &:before {\n      content: '\\F18F';\n    }\n  }\n  &.context-menu-icon-paste {\n    &:before {\n      content: '\\F613';\n    }\n  }\n  &.context-menu-icon-delete {\n    &:before {\n      content: '\\F6CB';\n    }\n  }\n  &.context-menu-icon-quit {\n    &:before {\n      content: '\\F156';\n    }\n  }\n}\n.context-menu-list {\n  box-shadow: none;\n  border: 1px solid $border-color;\n  .context-menu-item {\n    span {\n      color: $black;\n      font-size: .75rem;\n      font-weight: $font-weight-bold;\n    }\n    &.context-menu-hover {\n      background: $black;\n      span {\n        color: $white;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_data-tables.scss",
    "content": "/* Data Tables */\n\n.dataTables_wrapper {\n  padding-left: 0;\n  padding-right: 0;\n  label {\n    font-size: .8125rem;\n  }\n  select {\n    @extend .form-control;\n    padding: .4rem;\n  }\n  .dataTables_length {\n    select {\n      min-width: 65px;\n      margin-left: .25rem;\n      margin-right: .25rem;\n    }\n  }\n  .dataTable {\n    .btn {\n      padding: 0.1rem 1rem;\n      vertical-align: top;\n    }\n    thead {\n      th {\n        border-bottom-width: 0;\n      }\n      .sorting,\n      .sorting_asc,\n      .sorting_desc,\n      .sorting_asc_disabled,\n      .sorting_desc_disabled {\n        &:before,\n        &:after {\n          line-height: 2.5;\n          font-family: Material Design Icons;\n          font-size: .65rem;\n        }\n        &:before {\n          content: \"\\F05D\";\n          right: 1.2em;\n        }\n        &:after {\n          content: \"\\F045\";\n          right: 0.2em;\n        }\n      }\n    }\n  }\n  .dataTables_paginate {\n    margin-top: 20px;\n  }\n  .dataTables_info {\n    font-size: $default-font-size;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_datepicker.scss",
    "content": "/* Datepicker */\n\n.datepicker.datepicker-dropdown,\n.datepicker.datepicker-inline {\n\tpadding: 0 25px;\n\twidth: 30%;\n\tmax-width: 500px;\n\tmin-width: 250px;\n\t.datepicker-days {\n\t\ttable.table-condensed {\n\t\t\tthead {\n\t\t\t\ttr {\n\t\t\t\t\tth {\n\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\tpadding: .5rem 0;\n\t\t\t\t\t\t&.prev {\n\t\t\t\t\t\t\tcolor: color(gray);\n\t\t\t\t\t\t\tpadding-bottom: 1rem;\n\t\t\t\t\t\t\tpadding-top: 1rem;\n\t\t\t\t\t\t\ttext-align: left;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t&.datepicker-switch {\n\t\t\t\t\t\t\tcolor: color(gray);\n\t\t\t\t\t\t\tpadding-bottom: 1rem;\n\t\t\t\t\t\t\tpadding-top: 1rem;\n\t\t\t\t\t\t\tfont-size: 1rem;\n\t\t\t\t\t\t\tfont-weight: 600;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t&.next {\n\t\t\t\t\t\t\tcolor:grey;\n\t\t\t\t\t\t\tpadding-bottom: 1rem;\n\t\t\t\t\t\t\tpadding-top: 1rem;\n\t\t\t\t\t\t\ttext-align: right;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t&.dow {\n\t\t\t\t\t\t\tfont-weight: normal;\n\t\t\t\t\t\t\tcolor: color(gray);\n\t\t\t\t\t\t\tfont-size: .875rem;\n\t\t\t\t\t\t\tfont-weight: initial;\n\t\t\t\t\t\t\t&:first-child {\n\t\t\t\t\t\t\t\ttext-align: left;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t&:last-child {\n\t\t\t\t\t\t\t\ttext-align: right;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttbody {\n\t\t\t\tposition: relative;\n\t\t\t\ttop: 13px;\n\t\t\t\ttd {\n\t\t\t\t\ttext-align: center;\n\t\t\t\t\t&.day {\n\t\t\t\t\t\tfont-size: .9375rem;\n\t\t\t\t\t\tpadding: .5rem 0;\n\t\t\t\t\t\tcolor: color(gray);\n\t\t\t\t\t\t&:hover {\n\t\t\t\t\t\t\tbackground: $white;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\tcolor:#fff;\n\t\t\t\t\t\t\tbackground:transparent;\n\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\tz-index: 1;\n\t\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\t\tcontent: \"\";\n\t\t\t\t\t\t\t\twidth: 38px;\n\t\t\t\t\t\t\t\theight: 38px;\n\t\t\t\t\t\t\t\tbackground: $success;\n\t\t\t\t\t\t\t\t@include border-radius(100%);\n\t\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\t\tmargin: auto;\n\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\ttop: 1px;\n\t\t\t\t\t\t\t\tz-index: -1;\n\t\t\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\t\t\tright: 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t&.today {\n\t\t\t\t\t\t\tcolor:#fff;\n\t\t\t\t\t\t\tbackground:transparent;\n\t\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\t\tz-index: 1;\n\t\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\t\tcontent: \"\";\n\t\t\t\t\t\t\t\twidth: 38px;\n\t\t\t\t\t\t\t\theight: 38px;\n\t\t\t\t\t\t\t\tbackground: $info;\n\t\t\t\t\t\t\t\t@include border-radius(100%);\n\t\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\t\tmargin: auto;\n\t\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\t\ttop: 1px;\n\t\t\t\t\t\t\t\tz-index: -1;\n\t\t\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\t\t\tright: 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t&.old.day {\n\t\t\t\t\t\tcolor: darken(color(gray-lightest),4.5%);\n\t\t\t\t\t}\n\n\t\t\t\t\t&.range-start,\n\t\t\t\t\t&.range-end {\n\t\t\t\t\t  background: transparent;\n\t\t\t\t\t  position: relative;\n\t\t\t\t\t\t&::before {\n\t\t\t\t\t\t\tcontent: \"\";\n\t\t\t\t\t\t\twidth: 28px;\n\t\t\t\t\t\t\theight: 28px;\n\t\t\t\t\t\t\tbackground: rgba(theme-color(success), .2);\n\t\t\t\t\t\t\tborder-radius: 4px;\n\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\tmargin: auto;\n\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\ttop: 6px;\n\t\t\t\t\t\t\tz-index: -1;\n\t\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\t\tright: 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t&.range {\n\t\t\t\t\t\tposition: relative;\n\t\t\t\t\t\tbackground: transparent;\n\t\t\t\t\t\t&::before {\n\t\t\t\t\t\t\tcontent: \"\";\n\t\t\t\t\t\t\twidth: 28px;\n\t\t\t\t\t\t\theight: 28px;\n\t\t\t\t\t\t\tbackground: #eee;\n\t\t\t\t\t\t\tborder-radius: 4px;\n\t\t\t\t\t\t\tdisplay: block;\n\t\t\t\t\t\t\tmargin: auto;\n\t\t\t\t\t\t\tvertical-align: middle;\n\t\t\t\t\t\t\tposition: absolute;\n\t\t\t\t\t\t\ttop: 6px;\n\t\t\t\t\t\t\tz-index: -1;\n\t\t\t\t\t\t\tleft: 0;\n\t\t\t\t\t\t\tright: 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\t.datepicker-days,\n\t.datepicker-months,\n\t.datepicker-years,\n\t.datepicker-decades,\n\t.datepicker-centuries {\n\t\tpadding: .8rem .7rem;\t\t\n\t\ttable.table-condensed {\n\t\t\twidth: 100%;\n\t\t}\n\t}\n}\n.datepicker.datepicker-inline{\n\twidth:100%;\n\tmax-width: 100%;\n\tmin-width: 250px;\n\tthead{\n\t\ttr{\n\t\t\tth{\n\t\t\t\t&.prev{\n\t\t\t\t\tcolor:grey;\n\t\t\t\t\tpadding-bottom:0.5rem;\n\t\t\t\t\tpadding-top:0.5rem;\n\t\t\t\t}\n\t\t\t\t&.datepicker-switch{\n\t\t\t\t\tcolor: $primary;\n\t\t\t\t\tpadding-bottom:0.5rem;\n\t\t\t\t\tpadding-top:0.5rem;\n\t\t\t\t}\n\t\t\t\t&.next{\n\t\t\t\t\tcolor:grey;\n\t\t\t\t\tpadding-bottom:0.5rem;\n\t\t\t\t\tpadding-top:0.5rem;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n.datepicker {\n\t> div {\n\t\tdisplay: initial;\n\t}\n}\n.datepicker-custom {\n\twidth: 100%;\n\tpadding: 0;\n\t.datepicker {\n\t\t&.datepicker-inline {\n\t\t\tdisplay: block;\n\t\t\tpadding: 0;\n\t\t\theight: 100%;\n\t\t\t.datepicker-days {\n\t\t\t\tdisplay: block;\n\t\t\t\t.table-condensed {\n\t\t\t\t\ttbody {\n\t\t\t\t\t\ttr {\n\t\t\t\t\t\t\ttd {\n\t\t\t\t\t\t\t\tpadding: 1rem;\n\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\tpadding: 1rem .5rem;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttext-align: center;\n\t\t\t\t\t\t\t\t&.day {\n\t\t\t\t\t\t\t\t\t&.today {\n\t\t\t\t\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\t\t\t\t\tbackground-color: $success;\n\t\t\t\t\t\t\t\t\t\t\ttop: 6px;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\t\t\t\t\tbackground-color: $warning;\n\t\t\t\t\t\t\t\t\t\t\ttop: 6px;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t&:first-child {\n\t\t\t\t\t\t\t\t\t\tpadding-left: 2.5rem;\n\t\t\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\t\t\tpadding-left: .5rem;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t&.today,\n\t\t\t\t\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\t\t\t\t\t\tleft: 1.5rem;\n\t\t\t\t\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tleft: .25rem;\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t&:last-child {\n\t\t\t\t\t\t\t\t\t\tpadding-right: 2.5rem;\n\t\t\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\t\t\tpadding-right: .5rem;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t&.today,\n\t\t\t\t\t\t\t\t\t\t&.active {\n\t\t\t\t\t\t\t\t\t\t\t&:before {\n\t\t\t\t\t\t\t\t\t\t\t\tright: 1.5rem;\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\t.datepicker-days,\n\t\t\t.datepicker-months,\n\t\t\t.datepicker-years,\n\t\t\t.datepicker-decades,\n\t\t\t.datepicker-centuries {\n\t\t\t\theight: 100%;\n\t\t\t\tpadding: 0 0 1rem 0;\t\t\t\t\n\t\t\t\t.table-condensed {\n\t\t\t\t\theight: 100%;\n\t\t\t\t\tthead {\n\t\t\t\t\t\tbackground: $success;\n\t\t\t\t\t\ttr {\n\t\t\t\t\t\t\tth {\n\t\t\t\t\t\t\t\t&.next,\n\t\t\t\t\t\t\t\t&.prev,\n\t\t\t\t\t\t\t\t&.datepicker-switch,\n\t\t\t\t\t\t\t\t&.dow {\n\t\t\t\t\t\t\t\t\tbackground: transparent;\n\t\t\t\t\t\t\t\t\tborder-radius: 0;\n\t\t\t\t\t\t\t\t\tcolor: $white;\n\t\t\t\t\t\t\t\t\tpadding: 2rem 1rem;\n\t\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\t\tpadding: 2rem .5rem;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tfont-weight: $font-weight-bold;\n\t\t\t\t\t\t\t\t\t&:first-child {\n\t\t\t\t\t\t\t\t\t\tpadding-left: 2.5rem;\n\t\t\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\t\t\tpadding-left: .5rem;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t&:last-child {\n\t\t\t\t\t\t\t\t\t\tpadding-right: 2.5rem;\n\t\t\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\t\t\tpadding-right: .5rem;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t&.datepicker-switch {\n\t\t\t\t\t\t\t\t\tfont-size: 2rem;\n\t\t\t\t\t\t\t\t\t@media (max-width: 991px) {\n\t\t\t\t\t\t\t\t\t\tfont-size: 1rem;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t&.next,\n\t\t\t\t\t\t\t\t&.prev {\n\t\t\t\t\t\t\t\t\tfont-size: 1.5rem;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_dropify.scss",
    "content": "/* Dropify */\n\n.dropify-wrapper{\n\tborder: 2px dashed $border-color;\n\tbackground: transparent;\n\t@include border-radius(7px);\n\t&:hover{\n\t\tbackground-size: 30px 30px;\n\t\tbackground-image: -webkit-linear-gradient(135deg, #2e2f32 25%, transparent 25%, transparent 50%, #2e2f32 50%, #2e2f32 75%, transparent 75%, transparent);\n\t\tbackground-image: linear-gradient(135deg, #2e2f32 25%, transparent 25%, transparent 50%, #2e2f32 50%, #2e2f32 75%, transparent 75%, transparent);\n\t\t-webkit-animation: stripes 2s linear infinite;\n\t\tanimation: stripes 2s linear infinite;\n\t}\n\t.dropify-message{\n\t\tspan.file-icon{\n\t\t\t&:before {\n\t\t\t\tdisplay: inline-block;\n\t\t\t\tfont: normal normal normal 24px/1 \"Material Design Icons\";\n\t\t\t\tfont-size: inherit;\n\t\t\t\ttext-rendering: auto;\n\t\t\t\tline-height: inherit;\n\t\t\t\t-webkit-font-smoothing: antialiased;\n\t\t\t\tcontent: '\\F552';\n\t\t\t\tcolor: $body-color;\n\t\t\t\tfont-size: 1.25rem;\n\t\t\t}\n\t    }\n\t    p{\n\t\t\tfont-size: .8125rem;\n\t\t\tcolor: $body-color;\n\t    }\n\t}\n\t.dropify-preview{\n\t\t.dropify-infos{\n\t\t\tbackground: rgba(255,255,255,.9);\n\t\t\t.dropify-infos-inner{\n\t\t\t\t.dropify-filename{\n\t\t\t\t\tcolor: $primary;\n\t\t\t\t\tfont-size: 20px;\n\t\t\t\t\tfont-weight: 400;\n\t\t\t\t}\n\t\t\t\t.dropify-infos-message{\n\t\t\t\t\tcolor :#333;\n\t\t\t\t\tfont-weight:500;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t.dropify-render{\n\t\t\timg{\n\t\t\t\topacity: 0.7;\n\t\t\t}\n\t\t}\n\t}\n\t.dropify-clear{\n\t    background: #fff;\n\t    border: none;\n\t    font-weight: 700;\n\t    color: color(gray);\n\t}\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_dropzone.scss",
    "content": "/* Dropzone */\n\n.dropzone {\n  border: 1px solid $border-color;\n  min-height: 200px;\n  background: transparent;\n  .dz-message {\n    text-align: center;\n    width: 100%;\n    span {\n      font-size: .8125rem;\n      color: $body-color;\n    }\n  }\n  .dz-preview {\n    margin: 5px;\n    .dz-image {\n      width: 63px;\n      height: 63px;\n      border-radius: 6px;\n    }\n    .dz-error-message {\n      top: 80px;\n      left: -35px;\n    }\n    .dz-success-mark,\n    .dz-error-mark {\n      margin-left: -17px;\n      svg {\n        width: 35px;\n        height: 35px;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_flot-chart.scss",
    "content": "/* Flot chart */\n\n.flot-chart-container {\n  box-sizing: border-box;\n  width: 100%;\n  height: 100%;\n  min-height: 300px;\n  max-height: 100%;\n}\n\n.flot-chart {\n  width: 100%;\n  position: relative;\n  canvas {\n    position:absolute;\n    top: 0;\n    bottom: 0;\n  }\n  max-width: none;\n  height: 400px;\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_full-calendar.scss",
    "content": "/* Full Calendar */\n\n.fc {\n  button {\n    @extend .btn;\n    @extend .btn-sm;\n    height: auto;\n    background-image: none;\n    text-shadow: none;\n    font-weight: normal;\n    background-color: $white;\n    border-color: $border-color;\n    text-transform: capitalize;\n    color: $fullcalendar-color;\n    .fc-icon-right-single-arrow,\n    .fc-icon-left-single-arrow {\n      &:after {\n        color: $fullcalendar-color;\n        font: normal normal normal 20px/1 \"Material Design Icons\";\n      }\n    }  \n    .fc-icon-right-single-arrow {\n      &:after {\n        content: \"\\F142\";\n      }\n    }\n    .fc-icon-left-single-arrow {\n      &:after {\n        content: \"\\F141\";\n      }\n    }\n  }\n  .fc-button-group {\n    @extend .btn-group;\n    .fc-button {\n      background-color: $white;\n      margin: 0;\n      &.fc-state-active {\n        color: $danger;        \n      }\n    }\n  }\n  .fc-header-toolbar {\n    margin-top: 2rem;\n    .fc-center {\n      h2 {\n        font-size: 1rem;        \n      }\n    }\n  }\n  .fc-widget-header {\n    border: 0;\n    table {\n      tr {\n        th {\n          border-width: 0 0 1px 0;\n          text-align: right;\n          padding: 1rem;\n          span {\n            font-size: 10px;\n            text-transform: uppercase;\n            color: $fullcalendar-color;\n            letter-spacing: 1px;\n          }\n        }\n      }\n    }\n  }\n  .fc-content-skeleton {\n    table {\n      tr {\n        td {\n          padding: .5rem;\n          font-size: .875rem;\n        }\n      }\n    }\n  }\n  .fc-event {\n    border: 0;\n    color: $white;\n    padding: .5rem;\n    &.fc-start {\n      background: $primary; \n      border-radius: 4px;\n      border-left: 4px solid $primary;        \n    }\n    &.fc-not-start,\n    &.fc-not-end {\n      background: $danger;\n      border-left: 4px solid $danger;\n      padding-left: .5rem;\n    }\n    &.fc-not-end {\n      border-top-right-radius: 0;\n      border-bottom-right-radius: 0;\n    }\n    .fc-title,\n    .fc-time {\n      color: $white;\n    }\n  }\n}\n\n.fc-external-events {\n  .fc-event {\n    background: $card-bg;\n    color: $body-color;\n    border-width: 0 0 0 4px;\n    padding: 16px;\n    border-radius: 0;\n    margin-bottom: 10px;\n    &:nth-child(1) {\n      border-color: $primary;\n    }\n    &:nth-child(2) {\n      border-color: $danger;\n    }\n    &:nth-child(3) {\n      border-color: $success;\n    }\n    &:nth-child(4) {\n      border-color: $info;\n    }\n    &:nth-child(4) {\n      border-color: $warning;\n    }\n  }\n}\n\n.fc-unthemed {\n  tbody {\n    td {\n      border-color: $border-color;\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_google-charts.scss",
    "content": "/* Google Charts */\n\n.google-chart-container {\n  .google-charts {\n    width: 100%;\n    height: 280px;\n    min-height: 280px;\n    min-width: 100%;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_icheck.scss",
    "content": "/* Icheck */\n\n.icheck,\n.icheck-flat,\n.icheck-square,\n.icheck-line {\n  margin-bottom: .5rem;\n  label {\n    font-size: .8125rem;\n    line-height: 1.5;\n    margin-left: 5px;\n    margin-bottom: 0;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_jquery-file-upload.scss",
    "content": "/* Jquery File Upload */\n\n.ajax-upload-dragdrop {\n  border-color: $border-color;\n  border-style: dotted;\n  max-width:100%;\n  span {\n    b {\n      font-size: .8125rem;\n      color: $body-color;\n      font-weight: initial; \n    }\n  }\n  .ajax-file-upload {\n    background: $info;\n    box-shadow: none;\n    height: auto;\n    @extend .btn;\n  }\n}\n\n.ajax-file-upload-container {\n  min-height: 100px;\n  .ajax-file-upload-statusbar {\n    max-width: 100%;\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_js-grid.scss",
    "content": "/* Js-grid */\n\n.jsgrid {\n\t.jsgrid-button {\n\t\tbackground-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAFgEAYAAADx4WWjAAAABmJLR0T///////8JWPfcAAAACXBIWXMAAABIAAAASABGyWs+AAAZjElEQVR42u2deVyU1f7HzzyzDzCA7MgihCsY7uYOiZIamebVFl/Wy8zSxLTQuld/lmIuCGIu9cruLa9lXlNTUQsVUgQRNBbZF5F9lWEbZpj9/P74doQZ87LMDHjvPe9/vj7MPOf5fp6zjc/3e86D0H8rNTVRUd988/rrxpZTV3f48PHjixb1m+N5eVOmvP76hQtXryKEEMYVFWFhERG7dvW2nIKC4OBVq/71L1JOWdk774SHb9tmcoc1mpaWtjYLi6Ki+fPff/+f/7x2DS6YlobQpEkYJyQgxOViXFGxYUNExN693ZVXWDh//urV339/8yZCQiGUM3EixqTcqqq//e3gwQ8+MJkAnU6tVqvZbKk0KSkj47nnfv/d2nrcOInk1i2EHBw6HSBCyss3btyz53Eh4PiJEwkJCAkEGKenIzRlCsaJiQhZW2OcmentHRhYUCCX5+Tcv+/nZ/KaIKjVlZUSibPz3bu2tv7+jY1JSQjZ22P8++8ITZiA8c2bCIlEGNfU7Njx9dcbN5aXv/fe55/v2kXueFfHrawwzsjw8po1Kz9fp5PJVCoOx9T+sp4spLq6qcnJKTPTzy8wMDtbpWpurqlxcBAIEPL2RkihQKi8HCEWCyEOByGBACEPD4RkMoSysxGyshoxYtKkvLxnn83IiI3192cYoZDL1WjMduefhEbT2Njebm2dnT1x4sKFt26lpCDk7Q01Mm5cp719GyEPD4zz8+fNe/PNixcx1moxZhhz+9ftBTgce3tLy9ZWodDT08enqEirRUguh89YrE6r1SLU3o6QWDx27HPP3bjBYrHZLJZO1+933JDCwnnzVq8+eZJ0xvR0hKZNwzg5GSF3d4xJjXRt+2IxxpWVYWFRUX/964A5npc3e/aKFT/+aNg5k5IQsrPDOC9v/PjXX09Nzcpyc3vhhbKy5GSEXFygSY0fD6MWj4dxRcWmTZGRW7b0m+P5+dOnr1jx00+Gw+HNmwhZWmKcmTliRFBQdjb5vlrd1NTSYm2dmsrnDx0qlycnI+TsrC9EIMC4ouKDDyIitm41ucNqtUTS3GxlVVQ0f/66dZ0TWUYGQjNmQJPo6rhOp1RqtWy2YTkKRUFBVdXQoampPN7QoR0dt26BkPR0hCZPxpjMyDCRbdxoMgE6nUqlVnO5UmlSUmbmtGl374rFY8c2NcXFwQXv3RsxIigoKwtjpVKr7X5UUSgKCiorfXxSU0Wi4cOl0vh4KCcz08srMPD+fbk8O7u4+NlnTV4ThI6OrKzS0qFDc3JCQpYuPX1ap+vo0Ggev+PdIZPduVNY6O+flRUUFBLyyy9arVSqUAiFZnPcEI2mrq611cbG2HJUqrKyhgZX135znEKhUCgUCoVCoVAoFAqFQvlP4FGIyd//wIGYGPL0eOFCsOSRooWF/jHG3RT7R7kkwNHeDpY8W7106d69DRteesn4p9UGQbdZs8BOmAD26FGwajVYS8veFd/RAZbExtatA6tUgjW5gFdfBXv4MFhnZ7hTpEZ6D9TsiRNwFBsL9u23jXWc8FiUEi5IwqFlZWBLSkAIqaGeOn7uHBzNnAl2yBAoRyo1lYDHnvfDBUiV+/qCfeYZcOjs2Z45/s03cBQQAHbUKFM7TmB19wVwyNMTjlJSwCYlgW1tBUtqjM8HGxwMdsYMcDw319SOE7qNuIAD5eVwtGwZ2CVLwFpbgyU1RvrQypXmdrzHAvQhTaCoCOzy5eDoqlVwnJEBtqnJ3I73UQAJEQkEYG1t9T8nf++/UJKRqQBsNvSR3sfQBkiASPTHaX+cV1sLTUirhWNWt4PCAAuorQU7aBDYpUv1P5fJwJo+rcZoAfqjyvvvgz18GJpQXh4cjxkD1vTjvdEC9IUcOwZHZDglwyyEtREqLu4vARQKhUKhUCgUCoVCoVAoFMp/JL1+GAuLe0isbM8esCScum/fhAkIpaWdP9/vAsCxyEg4mjsX7MOHYA2XEE6ZAtbKSv/vJBx786b+eVwuWEdHsHFxINT4xUAGT5G9vMA6O4NtbgZrbw+WPJVOTARLHrMTS+LC48aBbWsD29gI1sFB/zrGYyCAhIpIXJgE927fBktCSCtXgv31V/07v3gx2DVrwA4dCjYwEOzp02DPnDGTAJJSQCLq48eDhdVlCB05Apa0fdKESFxg506wOTlgSVDwtdfAkiaZkAC2vt5YAQaP10kA4949/b8/KcWARGQMAxrk76TJEFJTwVZWGuv4YwKgU5FQEYn/EkjwjrRxQwyTP8ioRM4j1NTAdQzLN4EAfVpa9I9JDSgUYEmb77ogtyvkcxL4Jpg+cvMEASTiQiBtndQQEWIogNQE+Zz0KYLp48dPEFBSon9MhlUS/yXDIhk+iQDSxFQqsGKxfjkkQG52AWT8N1yRTZYmks8N5wHSREjc2MlJ/3zTdd5uBJBF54Zt1s4OLJmgyJ0nAkjNkBwKMgOTpkfOM7sAMkoYdmYyqvzZqvquDhKhBJJy9qRRzIQCYJgjna2qSv9TMk+QpkCakkSi/33iMIFMWGQiMx3dRNQNL0gi825uYEeNAks6rYsL2Dfe0D+PjP9kxu43Afn5YOfNAxsSApYMk6SzkiZE/u7tDZb8GjWc2SkUCoVCoVAoFAqFQqFQKBTjMNuiHViaMmQIHJFNgqOjYQVIRcVTKwAcJ2swydJFEuEhi0sDAvRXCPYdk20pC46TQAiJIxgG/0iN/PILfN/DY8AF6C8WTU8Hu3YtWPIQ2HBNJXko/MMPxl6/z+u9wHGSOhATA5Y8nSZbnhcWgiXLch88AEtibl9/bayAXvcBcHzwYDgiKQfdpQ6Q9cW//AKWy4U+QCL3/SAAHCc5EyRyTxa+9RQfH3DcMIjYd7ptQvqdjaQIkM7YHSQ2tmSJqR3vVgA4TqKMpI331HHCokXg+MWLpnb8iQL0R5UbN/rm+MKF5nacYLAxBgkVVVeDJaNKT1m8GBwnuxmYH7b+cEi21ScB7qlT//3ppI2TO06aWv/xx0Tm7g72wgWwZCOLjz7689NITgS545cu9bfjBI6+Q6TTkt8wpEZIqtknn4B95ZWBuuOG/FEDZC8VAo8HliRnkJ8IU6eC46SmBp4/aoC0ebKnyq1bYElKQWEhOE5+GlAoFAqFQqFQKBQKhUKhUCgDi8nCrKdOFRffuTN+/LJlMTEREdevIyQUkuAqPPPu6JBKEbp6ddmy7dtDQubOdXPz9SUBk75jsk0dWSwWi8Xi8xFiGDbbygpsVwFwzGIhxGIZLpB7CgQAGg1CGMOjYmIJXY/JmhvjMfu7U80NFTDQUAEEnc6w0/6HCfDyEovt7auru442+oJ0Oq0WITc3CwtbW7Kk0Xg4P/10//6dO7D4n8Uiq097/mJkPp/N5nC02t9+q6rKzx89GiGBgIzyMP6zWGB5PKEQoZMni4tTUwMCLl4sLc3MFAg6OrRatbrn2z5DTTMMl8swDKNUshCKilqyBOPOiae3TYE4yGZDdpBAALkoGOvfBhYLFu12dMCaV6iR3l+PnMflCgQdHRyY8lUqEMDj9b5A8m0ixNDxzu/B36EmOq/T272qQQCbzeUKhUolB4oATX3b9rr3Z5Gm1Sm99+fDOVotB35kCYXGNyFyvlBImhD5BrnT0IRUKlhtbFwT0mi0Wo1m0CDWtWuVlbm5s2aBI2TRf8/fJ8/lMgybrVbn5zc319b6+a1Zc/36t98ePtzZJ4jjSqVcjlBExKxZK1Zs3jxpkqOjl9edO2q1TqfVksGjezDGGGMOh81msRhGJuPMmePuboqftZmZjY3l5QUFCKlUCsXhw11HI7jDarVKhVBIiKenv39MzMiRtrYuLsbHnU02D+TmNjXV1np6du2c+m2bYRgGoaoqmay5meRmGI/JBEBT+jPHzQv9LTTQUAEDjcn+Tww/srjczgmKWDJrwjHGCGFM8pGeIgHw61Au5/G4XIGgoYFhuFyBoPPXjk6n0ajVLBZMQP33hggKhUKhUCgUCoVCoVAoFAoFIYTQhx8mJHz//dq1CO3b9/LLLS0IRUQsXNjSsm3b7ds//fThh/3tT6+fzEFekK0t/Ivsbkw+M9ws2Pz04eEuxhgrlX+eF0S2rH2qBTxd9FrAk5I6GKZ/Q0uEXvcBFxdLSxuburquj9ExRsjBgc+3sGho6HcBH32UkHD8eGgoxHOFQmjThlkOGNvYCARCYXt7XFx1dUHBCy8gJBTC1vBQH2fPlpZmZISE7NiRknLmDIvV2qpSKRQWFlBeZ91AnJdhWCyGYRiZLCpq5szly8mbJXoPC6F9+xYuxBghFotE6v8810Gng78LBJBOKRLpj0FyOWx4rlBAJB7Cqo9DymcYCG+HhZ092/fGx3k8v+dJof/HR50/vyxxsOt9//flGANn27bp05cv37wZxnUSWyepBp0vRrCzEwgsLEgTCgq6eLGkJC1twQIiPDjY03PMmCtX5s718Bg16sqVtjalsqNDJAInSV3AkU7H4bBYLBab3d6+fTtCP/9svJAeExWVlnbx4vLlCO3Z8+KLGCO0e/eCBRgfOZKRERv77rv96ArUQG9PKC9va5NInJ07kzmgKdTXKxRSKdmfov/o9TzA4zFM/72F3gwCIEw60G530ut7CeO4QNB1tOkcVQzfO/MUCmCzGYbNbmyEcby1lQhgGIZhsfp/JqZQKBQKhUKhUCgUCoVCofxv0uPAQmNjW1tbm5NTfX1ra3Pzyy9LJFKpVDp9Oiy/cnXV6XQ6na69ncfj8bjcjAw7O0tLK6vz5729nZ1dXDIzzSWg2ydzKSlFRfn5lpbNzTKZVLpwYUtLe3t7+xtvqFQajUYzdqxWi5BOZ2mJMUTN1GqdTqcjb0cXiUpL6+vr6trbvbycnJyd79/vtxqorJRIHj4cOTI7u7y8rOz0aY1Gq9VqfX0h0I0Ql8tmczgPH8Kz0oICCIU4OkIUc/hwEIgQj8fhcDgajY+Pi4uLyzvvDBvm6urmduyYqQQ89nS6rq6lpalpzJi8vMrKioq4OHDI11ck4vEEghs3LCz4fIFgzhxwzNNz3rxx4yZMmDmTx+NyudyRIwUCHo/HGz5cLBaJRKIjR0AuhwM34rvvSkrq6mprN240Ww1cuZKenpaWmalUajQajb+/lZVQKBB8+WVg4OjR/v7vv9/bC1y/np19797LL0ON/PxzR4darVKxWFOnDh8+cuS0aY6O1tY2NsnJfa4BuVyhUCjc3cvLGxrq69evl8tVKqXS318k4vN5vOvX++o4Ac4/fx5q7IMPSHShpKS2trZ23z5ja4ApL29sbGgIDq6qamqSSF56ic2G8CjYnTuNvYC+kEOHBAIul8stK2tr6+iQy6dOLStraKir6+17DLoIaG6WyWSyoCCFQq1Wq6dO5XI5HA6npgbu0+3bphLw6IIMwzDMtWtk1WtDQ0tLS8vEiX0uD9anOzoyDEKdK7rJjt+mzz6BUaywkAReVSqtVqcj7+TogwCtVqfT6eRyksQBw6GDA3xsrnCevb3+XghqdZ8FQGdNT+dwGIZh8vNBkK8vCOnt+we6B2bsqVPBImRjIxKJRH2f4BgvLwcHJ6cLF5ydbW1tbGJjVSqtVqMhaTVhYaZyPD4+MzM9fc4cjQZjjGfOtLQUi8XikhJfXw+PIUN+/bXPAmxtraysrNLS7O3FYmvrL7+EO9/erlSq1Wp1aOj16zk5WVmQUtA3x+/dy8iwsdHptFqtNjqax3N0dHREaNiwIUO8vDZvNvbGPJqJ7eysrMTi+/dHjHBzc3ffvFmhUKlUKoRUKrVarT53Diakdevi47OyMjO73wsF7viMGRhrtVptQoKFxZgxY8b4+ra0XLp0+TJCpaV790ZEGN/Hnvhb6MGDurra2vXrc3MrKysqoqNJ0gaPx2az2ZWVMBxevgyjSlkZhFutraHpzZ4N6SKTJgkEDg4ODghJJBcvXryIUEXFRx9t2oSQTCaXy+UIBQVFRkZGrls3bVpYWFhY7/OGuv05XVvb1NTUNHFicXFtbU3NoUMKhVqtUk2eDD/iyLDY+X2MoXNaWg4aZGf34IG7u6urq2tYWE7O6tXvvhsQcPfusWPHjq1fb23t7e3tjZBUWl1dXY3QvHmHDh06tGHDhAmrV69e/cUXJhNgSFWVRNLY6OtbXS2RSCQTJqjVsEUI5GApldbWIpFIVFDg6enu7uGRlGRpyWKxWJ27msXFbdmyZcvBgykpUVFRUaGhYrG7u7s7Qm1tICQ4ODIyMnLTpokT165duzYyss9ty9xcv/7ZZ599duDAzp1CoVCIcVSUm5ubG8bkOCkpIiIiYseOgfazWxISwsPDw6Ojw8N5PB4P46iowYMHD8Z4506RSCTCODFx9+7du033m8xsgKO7du3cKRAIBBgfPOjj4+PTKeTKlbCwsLC9ewfaz25JSTl06NCh8PDwcD6fz8d49247Ozs7jD/5hM1mszHOyzt79uzZ0FC5vKGhoWHIkKcuc/e550JDQ0P/7/+Cg/fv379/yxadDuYjS0sLCwsLhLhcoVAolEoRYrPZbKVyoP19IgpFa2trq739jz+GhISEnDhx8uTixYsXHz/e0dHc3NxsazvQ/lEoFAqFQqFQKBQKhUKhUChG0U2ERiBob1cqFYp9+ySStjapdP58iGa2tdnbW1uLxTt3jhzp5ubhcfbsUyMgL6+qqqIiKKisrKGhvv7YMUg5GDwY4jFlZbDlu7W1VouxTicUWltbWFhYXL7s7m5nZ2+/dKmHh4ODo2PP319gLI8e7hYV1dRUVQUGlpc3NDQ0XLum1ep0GJeWwtLDCRMglDRsGJvNZjPM4MEcDofD4Xz4YX19S0tz8yuv1NQ0NUkksbH9XgUymULR0WFvD2k29fUxMXfupKQkJvb0/Bs3cnKysvz8zp9PTU1OxhjygvovIMEUF9fV1dZu3QrRRUdHCws+n8/v+crsgAA/v2efzcnhcjkcLvf0aYlEKm1tXbPm/v3a2urqnu9q32cBLS3t7TLZsmWwGrW8fPZsf/+xY/PyelsQZLlcuaLVarUYI1Rd3dTU3Gz+Fd4MQgixWCT3zdLyt9+yszMze79NAkTibW2hHB5PKOTxeDzymngzCvDxcXZ2cgoP1+lg7wKVSqPRalev7m1BGHO5XO6qVba2Hh7u7ikpkyYNHTpsWHOzuQU84s6d4uKCgpiY06eTkxMTMYbOOWpUd+fFxxcW5udv356QUF9fW4txeXlZWWlp3zOwesujplJd3dTU2CgQlJXV1zc0nD/f1NTeLpUGB8OmL6dPw7B57RpE4p2ctFoej8t99VWRaNAgOztf39zc5ctXrECIzy8vLy8/dWrSpC1btmxZvtzff+XKlSt7/kqM3vJoHhg8eNAge3uFYtq0kSNHjXrhBVdXW1s7ux07RCI+n8+fOBEmtM8/hy3KQ0OHDHnmGR+fqioXl4cPJZIXX9Tp0tLS0lJSiopKSkpKli0rKrp69erVc+dyck6dOnWq/9faP0ZiYl5ebq6bW2pqQUF+/uM7OV27tm5daKit7YkTISEhIUlJkEiD8fHjwcHBwcnJKSkHDx482PfUsn7jzp2vvvrqKzu7b78NCAgIyMjYtIkImT179uz4+Nu3o6Ojo21sBtrPbklOjoyMjLS0PH48KCgoKC5u/XoQcvTojBkzZmRkyGR1dXV1gwcbex2z7dExdWpYWFhYe3tVVWpqaurChTKZVCqVPniAsUaj0bi58flisVjc92Q/swsguLlNnjx5skx26dKqVatW/eMfarVGo9HodAzD5/P5Eom5r0+hUCgUCoVCoVAoFAqFQqH8b3PsWHFxauqLLx49mp+fmLho0UD702Nyc1ta6urc3RHas2fBAowR2rkzOBjjTz+9e/fCBeO3ZzDbKiaZTKNRqRgmIOD06e3bb95EiMuFMIdGo1Ih9N13hYXJyatWPbUCnn/+3Lndu2NjHz5sbKyoGDKEOO7q6uHh51dRkZPzl7989tnkyU+dgDfeiI//+9+/+CI1tbDw1q05cxDi80UihBiGz7ew0Gji4195ZevW558Xi/l8oRD2yX8q2LUrMzM29r33EAoPDwrCGKEvvnjtNYwR2rVrwQKMY2OrqwsKnn/ebA6MHn3y5JYtiYlTppw6tW1bz9e4x8RUVOTkzJpFNpFH6MABcBw6a3R0Ts5vv61dazbH58y5dGn//h9+QGjr1mnTOi88evQPP3z88Y0bdXUKhUz2eJQxL6+lpa7OzQ2h6OhXX1WpEIqOXroUY4R27JgzB+OVKxMSjh//6iuzOf4HzPTpzs5Dh2ZmImRt7eSEEEIikViMUHZ2dXVBwaxZfn7ffbd+fV7egwetrQ0NnUsAAwLOnAkPv3ULIY1GqeRyEZLL29oQmjnTzy8wMD7+229nzVqxYs0acwt4FOi+cqWqKi8vIGDRonPndu+OiZHLOzqkUisr8ioKe3t7e0/PsjIPDyurQYNKS9PTy8uzsgIDEVKrlUqEXF3t7T08KisfPHjrrQMHvLwEAjabwyFv6e4HAYQHD6RSicTNbc6cM2d27IiLKympqSksHD4cISsre3uEEMIY3IL9JxBiGDZbpyspefvtI0e8vJ55xsrKzq6iwtyOEx4bRr29razs7KqqcnLefHP//tGj584dOXLmzMuXEWptra8HAbDDgVqtUCD0669Llnz66dy5/e14r3nrrbi4o0ePHkXo44/HjcN4796srGvXNmwYaL96TVxcZWVu7owZA+3Hfw3/D73/bnBl1mLvAAAAAElFTkSuQmCC);\n\t}\n\t.jsgrid-grid-header {\n\t\tborder: none;\n\t\tborder-top: 0;\n\t}\n\t.jsgrid-grid-body {\n\t\tborder-color: rgba(255, 255, 255, 0.1);\n\t}\n\t.jsgrid-table {\n\t\t@extend .table;\n\t\tth {\n\t\t\tfont-weight: initial;\n\t\t\tfont-weight: $font-weight-bold;\n\t\t}\n\t\tth, \n\t\ttd {\n      background-color: #0d0d0d;\n\t\t}\n\t\t.jsgrid-filter-row {\n\t\t\tinput[type=text],\n\t\t\tselect {\n\t\t\t\t@extend .form-control;\n\t\t\t}\n\t\t\tinput[type=number] {\n\t\t\t\t@extend .form-control;\n\t\t\t\tpadding: .56rem 0;\n\t\t\t}\n\t\t}\n\t}\n\t.jsgrid-header-sort {\n\t\t&:before {\n\t\t\tmargin-top: 10px;\n\t\t\tfloat: right;\n\t\t}\n\t}\n\t.jsgrid-header-sort-asc {\n\t\t&:before {\n\t\t\tborder-color: transparent transparent $body-color;\n\t\t}\n\t}\n\t.jsgrid-header-sort-desc {\n\t\t&:before {\n\t\t\tborder-color: $body-color transparent transparent\n\t\t}\n\t}\n\t.jsgrid-pager {\n\t\tline-height: 2;\n\t\t@extend .pagination;\n\t\t.jsgrid-pager-nav-button,\n\t\t.jsgrid-pager-page {\n\t\t\t@extend .page-item;\n\t\t\ta {\n\t\t\t\t@extend .page-link;\n\t\t\t}\n\t\t}\n\t}\n\t.jsgrid-pager-current-page {\n\t\tpadding: 0.5rem 0.75rem;\n\t\tfont-weight: initial;\n\t\tline-height: 1.25;\n\t}\n\t.jsgrid-cell,\n\t.jsgrid-header-cell {\n    border: 1px solid rgba(255, 255, 255, 0.1);\n\t}\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_justguage.scss",
    "content": ".gauge {\n  text {\n    fill: $text-muted;\n  }\n}  "
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_jvectormap.scss",
    "content": "/* Jvectormap */\n\n.jvectormap-container {\n    background: $white;\n}\n\n.vector-map {\n  width: 100%;\n  height: 300px;\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_light-gallery.scss",
    "content": "/* Light Gallery */\n\n.lightGallery{\n  width: 100%;\n  margin: 0;\n  .image-tile{\n    position: relative;\n    @extend .col-xl-3;\n    @extend .col-lg-3;\n    @extend .col-md-3;\n    @extend .col-md-4;\n    @extend .col-6;\n    margin-bottom: 30px;\n    .demo-gallery-poster{\n      @extend .d-flex;\n      position: absolute;\n      top: 0;\n      bottom: 0;\n      left: 0;\n      right: 0;\n      img{\n        display: block;\n        margin: auto;\n        width: 40%;\n        max-width: 60px;\n        min-width: 20px;\n      }\n    }\n    img{\n      max-width: 100%;\n      width: 100%;\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_listify.scss",
    "content": "/* Listify */\n\n.listify-list{\n  input{\n    border: 1px solid $white-smoke;\n    color: color(gray-light);\n    background: #fff;\n  }\n  button{\n\n  }\n  ul.list{\n    list-style: none;\n    padding-left: 0;\n    li{\n      display: block;\n      border-bottom: $border-property;\n      padding: 15px 10px;\n      h5{\n        color: $primary;\n      }\n      p{\n        color: color(gray-light);\n        margin: 0;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_morris.scss",
    "content": ".morris-chart {\n  text {\n    fill: $text-muted;\n  }\n} "
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_no-ui-slider.scss",
    "content": "/* No-ui-slider */\n\n.noUi-target {\n  border: none;\n  box-shadow: none;\n  @include border-radius(0px);\n\n  .noUi-handle {\n    width: 20px;\n    height: 20px;\n    border-radius: 100%;\n    box-shadow: none;\n    background: $content-bg;\n\n    &:before {\n      display: none;\n    }\n\n    &:after {\n      content: \"\";\n      width: 10px;\n      height: 10px;\n      border-radius: 100%;\n      left: 4px;\n      top: 4px;\n    }\n  }\n\n  &.noUi-horizontal {\n    height: 0.25rem;\n\n    .noUi-handle {\n      top: -8px;\n    }\n  }\n\n  &.noUi-vertical {\n    width: 0.25rem;\n    height: 156px;\n    display: inline-block;\n\n    .noUi-handle {\n      left: -7px;\n    }\n  }\n\n  .noUi-base {\n    box-shadow: none;\n    border: none;\n\n    .noUi-connect {\n      background: $primary;\n      box-shadow: none;\n    }\n\n    .noUi-origin {\n      background: $success;\n    }\n  }\n\n  .noUi-pips {\n\n    .noUi-marker-horizontal,\n    .noUi-marker-vertical {\n      background: $border-color;\n    }\n\n    .noUi-marker-horizontal {\n      height: 9px;\n      width: 1px;\n    }\n\n    .noUi-marker-vertical {\n      height: 1px;\n      width: 9px;\n    }\n\n    .noUi-value {\n      color: $white;\n      font-size: 0.94rem;\n      font-weight: $font-weight-bold;\n    }\n  }\n}\n\n/* Slider Color variations */\n@each $color,\n$value in $theme-colors {\n  .slider-#{$color} {\n    @include slider-color-variant($value);\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_owl-carousel.scss",
    "content": "/* Owl-carousel */\n\n.owl-carousel {\n    img {\n        border-radius: 4px;\n    }\n    &.full-width {\n        .owl-nav {\n            position: absolute;\n            top: 30%;\n            width: 100%;\n            margin-top: 0;\n            .owl-prev,\n            .owl-next {\n                background: transparent;\n                color: $white;\n                i {\n                    &:before {\n                        width: 60px;\n                        height: 60px;\n                        background: rgba($black, .5);\n                        border-radius: 100%;\n                        font-size: 1.875rem;\n                        font-weight: bold;\n                        line-height: 2;\n                    }\n                }\n            }\n            .owl-prev {\n                float: left;\n            }\n            .owl-next {\n                float: right;\n            }\n        }\n        .owl-dots {\n            margin-top: 1rem;\n        }\n    }\n    .item-video {\n        width: 200px;\n        height: 200px;\n    }\n    &.portfolio-carousel {\n        &.full-width {\n            .owl-nav {\n                top: auto;\n                bottom: 100%;\n                text-align: right;\n                .rtl & {\n                    text-align: left;\n                }\n                .owl-prev,\n                .owl-next {\n                    color: #a7afb7;\n                    margin: 0;\n                    padding: 0px 2px 14px 2px !important;\n                    @media (min-width: 768px) and (max-width: 1200px ) {\n                        padding: 0px 2px 19px 0px;\n                    }\n                    i {\n                        text-align: center;\n                        &:before {\n                            width: 32px;\n                            height: 32px;\n                            font-size: 1.25rem;\n                            font-weight: normal;\n                            line-height: 32px;\n                            @media (min-width: 768px) and (max-width: 1200px ) {\n                                width: 20px;\n                                height: 20px;\n                                font-size: .75rem;\n                                line-height: 20px;\n                            }\n                        }\n                    }\n                }\n                .owl-prev {\n                    float: none;\n                }\n                .owl-next {\n                    float: none;\n                }\n            }\n            .owl-dots {\n                margin-top: 1rem;\n            }\n        }\n    }\n}\n\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_progressbar-js.scss",
    "content": "/* Progressbar-js */\n\n.progress-bar-js-line {\n  height: 6px;\n}\n\n.progressbar-js-circle {\n  width: 100%;\n  position: relative;\n}\n\n.demo-progress-circle {\n  -webkit-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n\n.progress {\n  background-color: #2f323a;\n  border-radius: 0px;\n  .progress-bar {\n    border-radius: 0px;\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_pws-tabs.scss",
    "content": "/* Pws-tabs */\n\n.pws_tabs_container {\n\tul.pws_tabs_controll {\n\t\tborder-bottom: 1px solid $primary;\n\t\tli {\n      &:first-child {\n        a {\n          @include border-radius(5px 0px 0px 0px);\n        }\n      }\n      &:last-child {\n        a {\n          border-right: 1px solid $primary;\n          @include border-radius(0px 5px 0px 0px);\n        }\n      }\n\t\t\ta {\n\t\t\t\tborder: 1px solid $primary;\n\t\t\t\tborder-bottom: none;\n        border-right: none;\n\t\t\t\tbackground: #fff;\n\t\t\t\tcolor: $primary;\n\t\t\t\tpadding: 0.6em 1.3em;\n        margin-right: 0;\n\n\t\t\t\t&:hover {\n\t\t\t\t\tbackground: #fff;\n\t\t\t\t\tcolor: $primary;\n\t\t\t\t}\n\n\t\t\t\t&.pws_tab_active {\n\t\t\t\t\tbackground: $primary;\n\t\t\t\t\tcolor: #fff;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t.demo-tabs {\n\t\tborder: 1px solid $primary;\n\t\t@include border-radius(0px 5px 5px 5px);\n\t\toverflow: hidden;\n\t\tbackground: color(white-smoke);\n\t\tmargin-bottom: 45px;\n\t\tpadding-top: 3.5rem;\n\n\t\t.CodeMirror {\n\t\t\tmargin-bottom: 20px;\n\t\t}\n\t}\n  // Styles for vertical Tab\n  &.pws_tabs_vertical {\n    .pws_tabs_controll {\n      border-right: none;\n\t\t\tborder-bottom:none;\n      li {\n        &:first-child {\n          a {\n            @include border-radius(5px 0px 0px 0px);\n          }\n        }\n        &:last-child {\n          a {\n            border-bottom: 1px solid $primary;\n            @include border-radius(0px 0px 0px 5px);\n            border-right: 0px;\n          }\n        }\n        a {\n          @include border-radius(0px);\n          border: 1px solid $primary;\n          border-right: none;\n          border-bottom: none;\n          margin-bottom: 0;\n        }\n      }\n    }\n  }\n  // Styles for vertical Tab\n\n  // Styles for horizontal Tab\n  &.pws_tabs_horizontal_bottom {\n    .pws_tabs_list {\n      margin-bottom: 0;\n    }\n    .pws_tabs_controll {\n\t\t\tborder-top: 1px solid $primary;\n      border-right: none;\n\t\t\tborder-bottom: none;\n      li {\n        &:first-child {\n          a {\n            @include border-radius(0px 0px 0px 5px);\n          }\n        }\n        &:last-child {\n          a {\n            @include border-radius(0px 0px 5px 0px);\n            border-right: 1px solid $primary;\n          }\n        }\n        a {\n          @include border-radius(0px);\n          border: 1px solid $primary;\n          border-top: none;\n          border-right: none;\n          margin-right: 0;\n          margin-bottom: 0;\n        }\n      }\n    }\n  }\n  // Styles for vertical Tab\n\n  // Styles for RTL Tab\n  &.pws_tabs_rtl {\n    .pws_tabs_controll {\n  \t\tli {\n        &:first-child {\n          a {\n            @include border-radius(0px 5px 0px 0px);\n            border-right: 1px solid $primary;\n          }\n        }\n        &:last-child {\n          a {\n            border-right: none;\n            @include border-radius(5px 0px 0px 0px);\n          }\n        }\n  \t\t\ta {\n  \t\t\t\tborder: 1px solid $primary;\n  \t\t\t\tborder-bottom: none;\n          border-right: none;\n          margin-right: 0;\n          margin-left: 0;\n  \t\t\t}\n  \t\t}\n  \t}\n  }\n  // Styles for RTL Tab\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_quill.scss",
    "content": "/* Quill Editor */\n\n.quill-container {\n  height: 300px;\n}\n.ql-toolbar,\n.quill-container {\n  &.ql-snow {\n    border-color: $border-color;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_rating.scss",
    "content": "/* Rating */\n\n.br-theme-fontawesome-stars,\n.br-theme-css-stars {\n  .br-widget {\n    a {\n      font-size: 20px;\n      &:after{\n        color: lighten(black, 30%);\n      }\n      &.br-selected,\n      &.br-active {\n        &:after {\n          color:  $warning;\n        }\n      }\n    }\n  }\n}\n\n.br-theme-bars-1to10,\n.br-theme-bars-movie,\n.br-theme-bars-pill,\n.br-theme-bars-reversed,\n.br-theme-bars-horizontal {\n  .br-widget {\n    a {\n      background-color: lighten(black, 30%);\n      color:  $warning;\n      &.br-selected,\n      &.br-active {\n        background-color: $warning;\n      }\n    }\n  }\n}\n\n.br-theme-bars-square {\n  .br-widget {\n    a {\n      border-color: lighten(black, 30%);\n      color: $text-muted;\n      background: transparent;\n      &.br-selected,\n      &.br-active {\n        color: $warning;\n        border-color: $warning;\n      }\n    }\n  }\n}\n\n.br-theme-bars-movie,\n.br-theme-bars-reversed,\n.br-theme-bars-1to10,\n.br-theme-bars-horizontal {\n  .br-widget {\n    .br-current-rating {\n      color: $body-color;\n      font-size: $default-font-size;\n      font-weight: initial;\n    }\n  }\n}\n\n.br-theme-bars-1to10 {\n  height: 26px;\n  .br-widget {\n    height: 24px;\n    .br-current-rating {\n      line-height: 1;\n    }\n  }\n}\n\n.br-theme-bars-pill {\n  .br-widget {\n    a {\n     line-height: 2.5;\n     color: $text-muted;\n    }\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_select2.scss",
    "content": "/* Select2 */\n\n.select2-container--default {\n  .select2-results__option--highlighted[aria-selected] {\n    background: $primary;\n  }\n  .select2-selection--single,\n  .select2-dropdown,\n  .select2-selection--multiple {\n    border-color: $border-color;\n    background: $content-bg;\n    .select2-search__field {\n      border-color: $border-color;\n    }\n  }\n  .select2-selection--single {\n    height: auto;\n    @extend .form-control;\n    .select2-search__field {\n      @extend .form-control;\n    }\n    .select2-selection__rendered {\n      color: $white;\n      line-height: 14px;\n    }\n  }\n  .select2-dropdown {\n    font-size: .8125rem;\n  }\n  &.select2-container--focus {\n    .select2-selection--multiple {\n      border-color: $border-color;\n    }\n  }\n  .select2-selection--multiple {\n    .select2-selection__choice {\n      color: color(white);\n      border: 0;\n      border-radius: 3px;\n      padding: 6px;\n      font-size: .625rem;\n      font-family: inherit;\n      line-height: 1;\n      .select2-selection__choice__remove {\n        color: color(white);\n      }\n      &:nth-child(5n+1) {\n        background: $primary;\n      }\n      &:nth-child(5n+2) {\n        background: $success;\n      }\n      &:nth-child(5n+3) {\n        background: $info;\n      }\n      &:nth-child(5n+4) {\n        background: $danger;\n      }\n      &:nth-child(5n+5) {\n        background: $warning;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_summernote.scss",
    "content": "/* Summernote Editor */\n\n.note-editor{\n  &.note-frame {\n    border: 1px solid $border-color;\n  }\n}\n.note-popover {\n  border: 1px solid $border-color;\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_sweet-alert.scss",
    "content": "/* SweetAlert */\n\n.swal2-container {\n  z-index: 1500;\n}\n\n.swal2-modal {\n  min-height: 315px;\n  @extend .d-flex;\n  @include align-items(center);\n  @include justify-content(center);\n  @include flex-direction(column);\n  @include border-radius(10px);\n\n  .swal2-title {\n    font-size: 25px;\n    line-height: 1;\n    font-weight: $font-weight-medium;\n    color: $body-color;\n    font-weight: initial;\n    margin-bottom: 0;\n  }\n\n  .swal2-icon,\n  .swal2-success-ring {\n    margin-top: 0;\n    margin-bottom: 42px;\n  }\n\n  .swal2-buttonswrapper {\n    margin-top: 0;\n    padding: 0;\n\n    .swal2-styled {\n      @extend .btn;\n      margin-top: 0;\n      font-weight: initial;\n\n      &.swal2-confirm {\n        @extend .btn;\n        @extend .bg-success;\n        @extend .border-success;\n        font-weight: initial;\n        margin-top: 32px;\n      }\n\n      &.swal2-cancel {\n        @extend .btn;\n        margin-top: 32px;\n        border: 1px solid $border-color;\n        color: $white;\n        font-weight: initial;\n      }\n    }\n  }\n\n  .swal2-content {\n    font-size: $default-font-size;\n    font-weight: $font-weight-medium;\n    color: $body-color;\n    font-weight: initial;\n    margin-top: 11px;\n  }\n\n  .swal2-close {\n    font-size: 20px;\n  }\n\n  .swal2-success-ring {\n    left: -30px;\n  }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_switchery.scss",
    "content": "/* Switchery */\n\n.switchery {\n  width: 35px;\n  height: 21px;\n  border-radius: 11px;\n  >small {\n    width: 20px;\n    height: 20px;\n  }\n}\n\n.switchery-small {\n  width: 25px;\n  height: 13px;\n  >small {\n    width: 13px;\n    height: 13px;\n  }\n}\n\n.switchery-large {\n  width: 50px;\n  height: 28px;\n  border-radius: 14px;\n  >small {\n    width: 27px;\n    height: 27px;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_tags.scss",
    "content": "/* Tags */\n\ndiv.tagsinput {\n  padding: 15px 15px 10px;\n  border-color: $border-color;\n  span.tag {\n    background: $primary;\n    border: 0;\n    color: color(white);\n    padding: 6px 14px;\n    font-size: .8125rem;\n    font-family: inherit;\n    line-height: 1;\n    a {\n      color: color(white);\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_tinymce.scss",
    "content": "/* TinyMCE Editor */\n\n.mce-tinymce {\n  &.mce-panel,\n  .mce-panel {\n    border-color: $border-color;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_toast.scss",
    "content": "/* Toast */\n\n.jq-toast-wrap {\n    .jq-icon-success {\n        background-color: $success;\n    }\n    .jq-icon-info {\n        background-color: $info;\n    }\n    .jq-icon-warning {\n        background-color: $warning;\n    }\n    .jq-icon-error {\n        background-color: $danger;\n    }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_typeahead.scss",
    "content": "/* Typeahead */\n\n.tt-menu,\n.gist {\n  text-align: left;\n}\n\n.twitter-typeahead {\n  max-width: 100%;\n}\n\n.typeahead,\n.tt-query,\n.tt-hint {\n  @extend .form-control;\n}\n\n.typeahead {\n  background-color: #2A3038;\n  &:focus {\n    border-color: $border-color;\n  }\n}\n\n\n.tt-query {\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n     -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n}\n\n.tt-hint {\n  color: color(gray)\n}\n\n.tt-menu {\n  width: 100%;\n  margin: 12px 0;\n  padding: 8px 0;\n  background-color: #000000;\n  border: 1px solid $border-color;\n  -webkit-border-radius: 8px;\n     -moz-border-radius: 8px;\n          border-radius: 8px;\n  -webkit-box-shadow: 0 5px 10px rgba(0,0,0,.2);\n     -moz-box-shadow: 0 5px 10px rgba(0,0,0,.2);\n          box-shadow: 0 5px 10px rgba(0,0,0,.2);\n}\n\n.tt-suggestion {\n  padding: 3px 20px;\n  font-size: inherit;\n  &:hover {\n    cursor: pointer;\n    color: color(white);\n    background-color: $primary;\n  }\n  .tt-cursor {\n    color: color(white);\n    background-color: $primary;\n  }\n  p {\n    margin: 0;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_wizard.scss",
    "content": "/* Wizard */\n\n.wizard {\n    display: block;\n    width: 100%;\n    overflow: hidden;\n\n    a {\n        outline: 0;\n    }\n\n    ul {\n        list-style: none;\n        padding: 0;\n        margin: 0;\n\n        >li {\n            display: block;\n            padding: 0;\n        }\n    }\n\n    >.steps {\n        .current-info {\n            position: absolute;\n            left: -999em;\n        }\n\n        position: relative;\n        display: block;\n        width: 100%;\n\n        .number {\n            font-size: $default-font-size;\n        }\n\n        >ul {\n            >li {\n                width: 25%;\n\n                @media (max-width: 767px) {\n                    width: 50%;\n                }\n\n                float: left;\n                text-align: center;\n            }\n        }\n\n        a {\n            display: block;\n            width: auto;\n            margin: 0 0.5em 0.5em;\n            padding: 1em 1em;\n            text-decoration: none;\n            -webkit-border-radius: 5px;\n            -moz-border-radius: 5px;\n            border-radius: 5px;\n            font-size: $default-font-size;\n            font-weight: $font-weight-medium;\n\n            &:hover {\n                display: block;\n                width: auto;\n                margin: 0 0.5em 0.5em;\n                padding: 1em;\n                text-decoration: none;\n                -webkit-border-radius: 5px;\n                -moz-border-radius: 5px;\n                border-radius: 5px;\n            }\n\n            &:active {\n                display: block;\n                width: auto;\n                margin: 0 0.5em 0.5em;\n                padding: 1em;\n                text-decoration: none;\n                -webkit-border-radius: 5px;\n                -moz-border-radius: 5px;\n                border-radius: 5px;\n            }\n        }\n\n        .disabled {\n            a {\n                background: rgba(0, 136, 204, 0.2);\n                color: rgba(255, 255, 255, 0.7);\n                cursor: default;\n\n                &:active {\n                    background: color(gray-lightest)e;\n                    color: color(gray);\n                    cursor: default;\n                }\n            }\n        }\n\n        .current {\n            a {\n                background: rgba(0, 136, 204, 0.2);\n                color: color(white);\n                cursor: default;\n\n                \n\n                &:active {\n                    background: $primary;\n                    color: color(white);\n                    cursor: default;\n                }\n            }\n        }\n\n        .done {\n            a {\n                background: lighten($primary, 20%);\n                color: color(white);\n\n                &:hover {\n                    background: lighten($primary, 20%);\n                    color: color(white);\n                }\n\n                &:active {\n                    background: lighten($primary, 20%);\n                    color: color(white);\n                }\n            }\n        }\n\n        .error {\n            a {\n                background: $danger;\n                color: #fff;\n\n                &:hover {\n                    background: $danger;\n                    color: #fff;\n                }\n\n                &:active {\n                    background: $danger;\n                    color: #fff;\n                }\n            }\n        }\n    }\n\n    >.content {\n        >.title {\n            position: absolute;\n            left: -999em;\n        }\n        border: 1px solid rgba(255, 255, 255, 0.1);\n        display: block;\n        margin: 0.5em;\n        min-height: 24em;\n        overflow: hidden;\n        position: relative;\n        width: auto;\n        -webkit-border-radius: 5px;\n        -moz-border-radius: 5px;\n        border-radius: 5px;\n\n        >.body {\n            float: left;\n            position: absolute;\n            width: 95%;\n            height: 95%;\n            padding: 2.5%;\n            overflow-y: auto;\n\n            ul {\n                list-style: disc;\n\n                >li {\n                    display: list-item;\n                }\n            }\n\n            >iframe {\n                border: 0 none;\n                width: 100%;\n                height: 100%;\n            }\n\n            input {\n                display: block;\n                border: 1px solid $border-color;\n            }\n\n            input[type=\"checkbox\"] {\n                display: inline-block;\n            }\n\n            input.error {\n                background: rgb(251, 227, 228);\n                border: 1px solid lighten(theme-color(danger), 20%);\n                color: $danger;\n            }\n\n            label {\n                display: inline-block;\n                margin-bottom: 0.5em;\n            }\n\n            label.error {\n                color: $danger;\n                display: inline-block;\n                margin-left: 1.5em;\n            }\n        }\n    }\n\n    >.actions {\n        padding-top: 20px;\n\n        >ul {\n            >li {\n                float: left;\n                margin: 0 0.5em;\n            }\n\n            display: inline-block;\n            text-align: right;\n        }\n\n        position: relative;\n        display: block;\n        text-align: right;\n        width: 100%;\n\n        a {\n            @extend .btn;\n            @extend .btn-primary;\n        }\n\n        .disabled {\n            a {\n                @extend .btn-outline-primary;\n            }\n        }\n    }\n\n    &.vertical {\n        >.steps {\n            display: inline;\n            float: left;\n            width: 30%;\n\n            @media (max-width: 767px) {\n                width: 42%;\n            }\n\n            >ul {\n                >li {\n                    float: none;\n                    width: 100%;\n                    text-align: left;\n                }\n            }\n        }\n\n        >.content {\n            display: inline;\n            float: left;\n            margin: 0 2.5% 0.5em 2.5%;\n            width: 65%;\n\n            @media (max-width: 767px) {\n                width: 52%;\n            }\n        }\n\n        >.actions {\n            display: inline;\n            float: right;\n            margin: 0 2.5%;\n            width: 95%;\n\n            @media (max-width: 767px) {\n                margin: 0;\n                width: 100%;\n            }\n\n            >ul {\n                >li {\n                    margin: 0 0 0 1em;\n                }\n            }\n        }\n    }\n}\n\n.tabcontrol {\n    display: block;\n    width: 100%;\n    overflow: hidden;\n\n    a {\n        outline: 0;\n    }\n\n    ul {\n        list-style: none;\n        padding: 0;\n        margin: 0;\n\n        >li {\n            display: block;\n            padding: 0;\n        }\n    }\n\n    >.steps {\n        .current-info {\n            position: absolute;\n            left: -999em;\n        }\n\n        position: relative;\n        display: block;\n        width: 100%;\n\n        >ul {\n            position: relative;\n            margin: 6px 0 0 0;\n            top: 1px;\n            z-index: 1;\n\n            >li {\n                float: left;\n                margin: 5px 2px 0 0;\n                padding: 1px;\n                -webkit-border-top-left-radius: 5px;\n                -webkit-border-top-right-radius: 5px;\n                -moz-border-radius-topleft: 5px;\n                -moz-border-radius-topright: 5px;\n                border-top-left-radius: 5px;\n                border-top-right-radius: 5px;\n\n                &:hover {\n                    background: #edecec;\n                    border: 1px solid $border-color;\n                    padding: 0;\n                }\n\n                >a {\n                    color: color(gray-light);\n                    display: inline-block;\n                    border: 0 none;\n                    margin: 0;\n                    padding: 10px 30px;\n                    text-decoration: none;\n\n                    &:hover {\n                        text-decoration: none;\n                    }\n                }\n            }\n\n            >li.current {\n                background: color(white);\n                border: 1px solid $border-color;\n                border-bottom: 0 none;\n                padding: 0 0 1px 0;\n                margin-top: 0;\n\n                >a {\n                    padding: 15px 30px 10px 30px;\n                }\n            }\n        }\n    }\n\n    >.content {\n        >.title {\n            position: absolute;\n            left: -999em;\n        }\n\n        position: relative;\n        display: inline-block;\n        width: 100%;\n        height: 35em;\n        overflow: hidden;\n        border-top: 1px solid $border-color;\n        padding-top: 20px;\n\n        >.body {\n            float: left;\n            position: absolute;\n            width: 95%;\n            height: 95%;\n            padding: 2.5%;\n\n            ul {\n                list-style: disc;\n\n                >li {\n                    display: list-item;\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_wysieditor.scss",
    "content": "/* Wysi Editor */\n\n.wysi-editor {\n    #toolbar [data-wysihtml-action] {\n        float: right;\n    }\n\n    #toolbar,\n    textarea {\n        width: 920px;\n        padding: 5px;\n        -webkit-box-sizing: border-box;\n        -ms-box-sizing: border-box;\n        -moz-box-sizing: border-box;\n        box-sizing: border-box;\n    }\n\n    textarea {\n        height: 280px;\n        border: 1px solid $border-color;\n        font-family: inherit;\n        font-size: 1rem;\n    }\n\n    textarea:focus {\n        color: black;\n        border: 1px solid $border-color;\n    }\n\n    .wysihtml-action-active,\n    .wysihtml-command-active {\n        font-weight: bold;\n    }\n\n    [data-wysihtml-dialog] {\n        margin: 5px 0 0;\n        padding: 5px;\n        border: 1px solid #666;\n    }\n\n    a[data-wysihtml-command-value=\"red\"] {\n        color: $danger;\n    }\n\n    a[data-wysihtml-command-value=\"green\"] {\n        color: $success;\n    }\n\n    a[data-wysihtml-command-value=\"blue\"] {\n        color: $info;\n    }\n\n    .wysihtml-editor,\n    .wysihtml-editor table td {\n        outline: 1px dotted $border-color;\n    }\n\n    code {\n        background: #ddd;\n        padding: 10px;\n        white-space: pre;\n        display: block;\n        margin: 1em 0;\n    }\n\n    .toolbar {\n        display: block;\n        border-radius: 3px;\n        border: 1px solid #fff;\n        margin-bottom: 9px;\n        line-height: 1em;\n    }\n\n    .toolbar a {\n        display: inline-block;\n        height: 1.5em;\n        border-radius: 3px;\n        font-size: 1rem;\n        line-height: 1.5em;\n        text-decoration: none;\n        background: color(white);\n        border: 1px solid $border-color;\n        padding: 0 0.2em;\n        margin: 1px 0;\n        color: $primary;\n    }\n\n    .toolbar .wysihtml-action-active,\n    .toolbar a.wysihtml-command-active {\n        background: #222;\n        color: white;\n    }\n\n    .toolbar .block {\n        padding: 1px;\n        display: inline-block;\n        background: #eee;\n        border-radius: 3px;\n        margin: 0 1px 1px 0;\n    }\n\n    div[data-wysihtml-dialog=\"createTable\"] {\n        position: absolute;\n        background: white;\n    }\n\n    div[data-wysihtml-dialog=\"createTable\"] td {\n        width: 10px;\n        height: 5px;\n        border: 1px solid $border-color;\n    }\n\n    .wysihtml-editor table td.wysiwyg-tmp-selected-cell {\n        outline: 2px solid $success;\n    }\n\n    .editor-container-tag {\n        padding: 5px 10px;\n        position: absolute;\n        color: white;\n        background: rgba(0,0,0,0.8);\n        width: 100px;\n        margin-left: -50px;\n        -webkit-transition: 0.1s left, 0.1s top;\n    }\n\n    .wrap {\n        max-width: 700px;\n        margin: 40px;\n    }\n\n    .editable .wysihtml-uneditable-container {\n        outline: 1px dotted $border-color;\n        position: relative;\n    }\n\n    .editable .wysihtml-uneditable-container-right {\n        float: right;\n        width: 50%;\n        margin-left: 2em;\n        margin-bottom: 1em;\n    }\n\n    .editable .wysihtml-uneditable-container-left {\n        float: left;\n        width: 50%;\n        margin-right: 2em;\n        margin-bottom: 1em;\n    }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/components/plugin-overrides/_x-editable.scss",
    "content": "/* X-editable */\n\n.editable-form {\n  .editable {\n    color: $body-color;\n    font-size: .8125rem;\n  }\n  .editable-click {\n    border-color: $body-color;\n  }\n}\n.editable-container {\n  &.editable-inline {\n    max-width: 100%;\n    .editableform {\n      max-width: 100%;\n      .control-group {\n        max-width: 100%;\n        white-space: initial;\n        >div {\n          max-width: 100%;\n        }\n        .editable-input {\n          // max-width: 50%;\n          input,\n          textarea {\n            max-width: 100%;\n          }\n          .combodate {\n            .form-control {\n              padding-left: 0;\n              padding-right: 0;\n            }\n          }\n        }\n        .editable-buttons {\n          @media (max-width: 991px) {\n            display: block;\n            margin-top: 10px;\n          }\n          .editable-submit {\n            @extend .btn-outline-success;\n            @extend .btn-xs;\n            @extend .mt-1;\n          }\n          .editable-cancel {\n            @extend .btn-outline-secondary;\n            @extend .btn-xs;\n            @extend .mt-1;\n          }\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/scss/style.scss",
    "content": "/*-------------------------------------------------------------------\n  ===== Table of Contents =====\n\n  * Bootstrap functions\n  * Template variables\n  * SCSS Compass Functions\n  * Boostrap Main SCSS\n  * Template mixins\n    + Animation Mixins\n    + Background Mixins\n    + Badge Mixins\n    + Button Mixins\n    + Miscellaneous Mixins\n    + BlockQuote Mixins\n    + Cards Mixins\n    + Color Functions Mixins\n    + Tooltips\n    + popovers\n  * Core Styles\n    + Reset Styles\n    + Fonts\n    + Functions\n    + Backgrounds\n    + Typography\n    + Miscellaneous\n    + Footer\n    + Layouts\n    + Utilities\n    + Demo styles\n  * Components\n    + Accordions\n    + Badges\n    + Bootstrap Alerts\n    + Boostrap Progress\n    + Buttons\n    + Breadcrumbs\n    + Cards\n    + Checkboxes and Radios\n    + Dropdowns\n    + Forms\n    + Google maps\n    + Icons\n    + Loaders\n    + Lists\n    + Modals\n    + Pagination\n    + Popover\n    + Preview\n    + Tables\n    + Tabs\n    + Timeline\n    + Todo List\n    + Tooltips\n    + User Profile\n    + Pricing table\n  * Email\n    + Mail Sidebar\n    + Mail List Container\n    + Message Content\n  * Plugin Overrides\n    + Ace Editor\n    + Avgrund Popup\n    + Bootstrap Tour\n    + Chartist\n    + CodeMirror\n    + Colcade\n    + Colorpicker\n    + Context Menu\n    + Data Tables\n    + Datepicker\n    + Dropify\n    + Dropzone\n    + Flot chart\n    + Full Calendar\n    + Google Charts\n    + Icheck\n    + Jquery File Upload\n    + Js-grid\n    + Jvectormap\n    + Light Gallery\n    + Listify\n    + No-ui-slider\n    + Owl-carousel\n    + Progressbar-js\n    + Pws-tabs\n    + Quill Editor\n    + Rating\n    + Select2\n    + Summernote Editor\n    + SweetAlert\n    + Switchery\n    + Tags\n    + TinyMCE Editor\n    + Toast\n    + Typeahead\n    + Wysi Editor\n    + X-editable\n    + Wizard\n  * Landing screens\n    + Auth\n    + Lock Screen\n-------------------------------------------------------------------*/\n\n/*-------------------------------------------------------------------*/\n/* === Import Bootstrap functions and variables === */\n@import \"../../node_modules/bootstrap/scss/functions\";\n@import \"../../node_modules/bootstrap/scss/variables\";\n\n/*-------------------------------------------------------------------*/\n/* === Import template variables === */\n@import './variables';\n\n/*-------------------------------------------------------------------*/\n/* === SCSS Compass Functions === */\n@import \"../../node_modules/compass-mixins/lib/compass\";\n@import \"../../node_modules/compass-mixins/lib/animate\";\n\n/*-------------------------------------------------------------------*/\n/* === Boostrap Main SCSS === */\n@import \"../../node_modules/bootstrap/scss/bootstrap\";\n\n/*-------------------------------------------------------------------*/\n/* === Template mixins === */\n@import \"components/mixins/misc\";\n@import \"components/mixins/animation\";\n@import \"components/mixins/background\";\n@import \"components/mixins/badges\";\n@import \"components/mixins/blockqoute\";\n@import \"components/mixins/buttons\";\n@import \"components/mixins/breadcrumbs\";\n@import \"components/mixins/cards\";\n@import \"components/mixins/no-ui-slider\";\n@import \"components/mixins/pagination\";\n@import \"components/mixins/popovers\";\n@import \"components/mixins/tooltips\";\n\n/*-------------------------------------------------------------------*/\n/* === Core Styles === */\n@import \"components/reset\";\n@import \"components/fonts\";\n@import \"components/functions\";\n@import \"components/background\";\n@import \"components/typography\";\n@import \"components/misc\";\n@import \"components/footer\";\n@import \"components/utilities\";\n@import \"components/demo\";\n\n/*-------------------------------------------------------------------*/\n/* === Components === */\n// @import \"components/accordions\";\n@import \"components/badges\";\n// @import \"components/bootstrap-alerts\";\n// @import \"components/bootstrap-progress\";\n@import \"components/buttons\";\n// @import \"components/breadcrumbs\";\n@import \"components/cards\";\n@import \"components/checkbox-radio\";\n@import \"components/dropdown\";\n@import \"components/forms\";\n// @import \"components/google-maps\";\n@import \"components/icons\";\n@import \"components/loaders/loaders\";\n// @import \"components/lists\";\n// @import \"components/modals\";\n// @import \"components/pagination\";\n// @import \"components/portfolio\";\n// @import \"components/popover\";\n@import \"components/preview\";\n@import \"components/tables\";\n@import \"components/tabs\";\n// @import \"components/timeline\";\n@import \"components/todo-list\";\n// @import \"components/tooltips\";\n// @import \"components/user-profile\";\n// @import \"components/pricing-table\";\n\n/*-------------------------------------------------------------------*/\n/* === Email === */\n// @import \"../modern-dark/shared/components/mail-components/mail-sidebar\";\n// @import \"../modern-dark/shared/components/mail-components/mail-list-container\";\n// @import \"../modern-dark/shared/components/mail-components/messagecontent\";\n\n/*-------------------------------------------------------------------*/\n/* === Plugin overrides === */\n@import \"components/plugin-overrides/ace\";\n@import \"components/plugin-overrides/avgrund\";\n@import \"components/plugin-overrides/chartist\";\n@import \"components/plugin-overrides/c3\";\n@import \"components/plugin-overrides/codemirror\";\n@import \"components/plugin-overrides/colorpicker\";\n@import \"components/plugin-overrides/context-menu\";\n@import \"components/plugin-overrides/data-tables\";\n@import \"components/plugin-overrides/dropify\";\n@import \"components/plugin-overrides/dropzone\";\n@import \"components/plugin-overrides/flot-chart\";\n@import \"components/plugin-overrides/full-calendar\";\n@import \"components/plugin-overrides/google-charts\";\n@import \"components/plugin-overrides/icheck\";\n@import \"components/plugin-overrides/jquery-file-upload\";\n@import \"components/plugin-overrides/js-grid\";\n@import \"components/plugin-overrides/jvectormap\";\n@import \"components/plugin-overrides/justguage.scss\";\n@import \"components/plugin-overrides/light-gallery\";\n@import \"components/plugin-overrides/listify\";\n@import \"components/plugin-overrides/morris.scss\";\n@import \"components/plugin-overrides/no-ui-slider\";\n@import \"components/plugin-overrides/owl-carousel\";\n@import \"components/plugin-overrides/progressbar-js\";\n@import \"components/plugin-overrides/pws-tabs\";\n@import \"components/plugin-overrides/quill\";\n@import \"components/plugin-overrides/rating\";\n@import \"components/plugin-overrides/select2\";\n@import \"components/plugin-overrides/summernote\";\n@import \"components/plugin-overrides/sweet-alert\";\n@import \"components/plugin-overrides/switchery\";\n@import \"components/plugin-overrides/tags\";\n@import \"components/plugin-overrides/tinymce\";\n@import \"components/plugin-overrides/toast\";\n@import \"components/plugin-overrides/typeahead\";\n@import \"components/plugin-overrides/wysieditor\";\n@import \"components/plugin-overrides/x-editable\";\n\n/*-------------------------------------------------------------------*/\n/* === Landing screens === */\n@import \"components/landing-screens/auth\";\n\n@import './navbar';\n@import './sidebar';\n@import './layouts';\n@import './vertical/vertical-wrapper';"
  },
  {
    "path": "BlackStone/assets/scss/vertical/_vertical-wrapper.scss",
    "content": ".page-body-wrapper {\n  min-height: 100vh;\n  @include display-flex();\n  @include flex-direction(row);\n  padding-left: 0;\n  padding-right: 0;\n  transition: all 0.25s ease;\n  width: calc(100% - #{$sidebar-width-lg});\n\n  &.full-page-wrapper {\n    width: 100%;\n    min-height: 100vh;\n  }\n\n  @media (max-width:992px) {\n    width: 100%;\n  }\n}\n\n.container-scroller {\n  display: flex;\n  position: relative;\n}\n\n.main-panel {\n  transition: width $action-transition-duration $action-transition-timing-function, margin $action-transition-duration $action-transition-timing-function;\n  width: 100%;\n  min-height: calc(100vh - #{$navbar-height});\n  padding-top: $navbar-height;\n  @include display-flex();\n  @include flex-direction(column);\n  @media (max-width: 991px) {\n    margin-left: 0;\n    width: 100%;\n  }\n}\n\n.content-wrapper {\n  background: $content-bg;\n  padding: 1.875rem 1.75rem;\n  width: 100%;\n  @include flex-grow(1);\n}"
  },
  {
    "path": "BlackStone/assets/vendors/codemirror/ambiance.css",
    "content": "/* ambiance theme for codemirror */\n\n/* Color scheme */\n\n.cm-s-ambiance .cm-header { color: blue; }\n.cm-s-ambiance .cm-quote { color: #24C2C7; }\n\n.cm-s-ambiance .cm-keyword { color: #cda869; }\n.cm-s-ambiance .cm-atom { color: #CF7EA9; }\n.cm-s-ambiance .cm-number { color: #78CF8A; }\n.cm-s-ambiance .cm-def { color: #aac6e3; }\n.cm-s-ambiance .cm-variable { color: #ffb795; }\n.cm-s-ambiance .cm-variable-2 { color: #eed1b3; }\n.cm-s-ambiance .cm-variable-3, .cm-s-ambiance .cm-type { color: #faded3; }\n.cm-s-ambiance .cm-property { color: #eed1b3; }\n.cm-s-ambiance .cm-operator { color: #fa8d6a; }\n.cm-s-ambiance .cm-comment { color: #555; font-style:italic; }\n.cm-s-ambiance .cm-string { color: #8f9d6a; }\n.cm-s-ambiance .cm-string-2 { color: #9d937c; }\n.cm-s-ambiance .cm-meta { color: #D2A8A1; }\n.cm-s-ambiance .cm-qualifier { color: yellow; }\n.cm-s-ambiance .cm-builtin { color: #9999cc; }\n.cm-s-ambiance .cm-bracket { color: #24C2C7; }\n.cm-s-ambiance .cm-tag { color: #fee4ff; }\n.cm-s-ambiance .cm-attribute { color: #9B859D; }\n.cm-s-ambiance .cm-hr { color: pink; }\n.cm-s-ambiance .cm-link { color: #F4C20B; }\n.cm-s-ambiance .cm-special { color: #FF9D00; }\n.cm-s-ambiance .cm-error { color: #AF2018; }\n\n.cm-s-ambiance .CodeMirror-matchingbracket { color: #0f0; }\n.cm-s-ambiance .CodeMirror-nonmatchingbracket { color: #f22; }\n\n.cm-s-ambiance div.CodeMirror-selected { background: rgba(255, 255, 255, 0.15); }\n.cm-s-ambiance.CodeMirror-focused div.CodeMirror-selected { background: rgba(255, 255, 255, 0.10); }\n.cm-s-ambiance .CodeMirror-line::selection, .cm-s-ambiance .CodeMirror-line > span::selection, .cm-s-ambiance .CodeMirror-line > span > span::selection { background: rgba(255, 255, 255, 0.10); }\n.cm-s-ambiance .CodeMirror-line::-moz-selection, .cm-s-ambiance .CodeMirror-line > span::-moz-selection, .cm-s-ambiance .CodeMirror-line > span > span::-moz-selection { background: rgba(255, 255, 255, 0.10); }\n\n/* Editor styling */\n\n.cm-s-ambiance.CodeMirror {\n  line-height: 1.40em;\n  color: #E6E1DC;\n  background-color: #202020;\n  -webkit-box-shadow: inset 0 0 10px black;\n  -moz-box-shadow: inset 0 0 10px black;\n  box-shadow: inset 0 0 10px black;\n}\n\n.cm-s-ambiance .CodeMirror-gutters {\n  background: #3D3D3D;\n  border-right: 1px solid #4D4D4D;\n  box-shadow: 0 10px 20px black;\n}\n\n.cm-s-ambiance .CodeMirror-linenumber {\n  text-shadow: 0px 1px 1px #4d4d4d;\n  color: #111;\n  padding: 0 5px;\n}\n\n.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; }\n.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; }\n\n.cm-s-ambiance .CodeMirror-cursor { border-left: 1px solid #7991E8; }\n\n.cm-s-ambiance .CodeMirror-activeline-background {\n  background: none repeat scroll 0% 0% rgba(255, 255, 255, 0.031);\n}\n\n.cm-s-ambiance.CodeMirror,\n.cm-s-ambiance .CodeMirror-gutters {\n  background-image: url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAMgAAADICAQAAAAHUWYVAABFFUlEQVQYGbzBCeDVU/74/6fj9HIcx/FRHx9JCFmzMyGRURhLZIkUsoeRfUjS2FNDtr6WkMhO9sm+S8maJfu+Jcsg+/o/c+Z4z/t97/vezy3z+z8ekGlnYICG/o7gdk+wmSHZ1z4pJItqapjoKXWahm8NmV6eOTbWUOp6/6a/XIg6GQqmenJ2lDHyvCFZ2cBDbmtHA043VFhHwXxClWmeYAdLhV00Bd85go8VmaFCkbVkzlQENzfBDZ5gtN7HwF0KDrTwJ0dypSOzpaKCMwQHKTIreYIxlmhXTzTWkVm+LTynZhiSBT3RZQ7aGfjGEd3qyXQ1FDymqbKxpspERQN2MiRjNZlFFQXfCNFm9nM1zpAsoYjmtRTc5ajwuaXc5xrWskT97RaKzAGe5ARHhVUsDbjKklziiX5WROcJwSNCNI+9w1Jwv4Zb2r7lCMZ4oq5C0EdTx+2GzNuKpJ+iFf38JEWkHJn9DNF7mmBDITrWEg0VWL3pHU20tSZnuqWu+R3BtYa8XxV1HO7GyD32UkOpL/yDloINFTmvtId+nmAjxRw40VMwVKiwrKLE4bK5UOVntYwhOcSSXKrJHKPJedocpGjVz/ZMIbnYUPB10/eKCrs5apqpgVmWzBYWpmtKHecJPjaUuEgRDDaU0oZghCJ6zNMQ5ZhDYx05r5v2muQdM0EILtXUsaKiQX9WMEUotagQzFbUNN6NUPC2nm5pxEWGCjMc3GdJHjSU2kORLK/JGSrkfGEIjncU/CYUnOipoYemwj8tST9NsJmB7TUVXtbUtXATJVZXBMvYeTXJfobgJUPmGMP/yFaWonaa6BcFO3nqcIqCozSZoZoSr1g4zJOzuyGnxTEX3lUEJ7WcZgme8ddaWvWJo2AJR9DZU3CUIbhCSG6ybSwN6qtJVnCU2svDTP2ZInOw2cBTrqtQahtNZn9NcJ4l2NaSmSkkP1noZWnVwkLmdUPOwLZEwy2Z3S3R+4rIG9hcbpPXHFVWcQdZkn2FOta3cKWQnNRC5g1LsJah4GCzSVsKnCOY5OAFRTBekyyryeyilhFKva75r4Mc0aWanGEaThcy31s439KKxTzJYY5WTHPU1FtIHjQU3Oip4xlNzj/lBw23dYZVliQa7WAXf4shetcQfatI+jWRDBPmyNeW6A1P5kdDgyYJlba0BIM8BZu1JfrFwItyjcAMR3K0BWOIrtMEXyhyrlVEx3ui5dUBjmB/Q3CXW85R4mBD0s7B+4q5tKUjOlb9qqmhi5AZ6GFIC5HXtOobdYGlVdMVbNJ8toNTFcHxnoL+muBagcctjWnbNMuR00uI7nQESwg5q2qqrKWIfrNUmeQocY6HuyxJV02wj36w00yhpmUFenv4p6fUkZYqLyuinx2RGOjhCXYyJF84oiU00YMOOhhquNdfbOB7gU88pY4xJO8LVdp6/q2voeB4R04vIdhSE40xZObx1HGGJ/ja0LBthFInKaLPPFzuCaYaoj8JjPME8yoyxo6zlBqkiUZYgq00OYMswbWO5NGmq+xhipxHLRW29ARjNKXO0wRnear8XSg4XFPLKEPUS1GqvyLwiuBUoa7zpZ0l5xxFwWmWZC1H5h5FwU8eQ7K+g8UcVY6TMQreVQT/8uQ8Z+ALIXnSEa2pYZQneE9RZbSBNYXfWYJzW/h/4j4Dp1tYVcFIC5019Vyi4ThPqSFCzjGWaHQTBU8q6vrVwgxP9Lkm840imWKpcLCjYTtrKuwvsKSnrvHCXGkSMk9p6lhckfRpIeis+N2PiszT+mFLspyGleUhDwcLrZqmyeylxwjBcKHEapqkmyangyLZRVOijwOtCY5SsG5zL0OwlCJ4y5KznF3EUNDDrinwiyLZRzOXtlBbK5ITHFGLp8Q0R6ab6mS7enI2cFrxOyHvOCFaT1HThS1krjCwqWeurCkk+willhCC+RSZnRXBiZaC5RXRIZYKp2lyfrHwiKPKR0JDzrdU2EFgpidawlFDR6FgXUMNa+g1FY3bUQh2cLCwosRdnuQTS/S+JVrGLeWIvtQUvONJxlqSQYYKpwoN2kaocLjdVsis4Mk80ESF2YpSkzwldjHkjFCUutI/r+EHDU8oCs6yzL3PhWiEooZdFMkymlas4AcI3KmoMMNSQ3tHzjGWCrcJJdYyZC7QFGwjRL9p+MrRkAGWzIaWCn9W0F3TsK01c2ZvQw0byvxuQU0r1lM0qJO7wW0kRIMdDTtXEdzi4VIh+EoIHm0mWtAtpCixlabgn83fKTI7anJe9ST7WIK1DMGpQmYeA58ImV6ezOGOzK2Kgq01pd60cKWiUi9Lievb/0vIDPHQ05Kzt4ddPckQBQtoaurjyHnek/nKzpQLrVgKPjIkh2v4uyezpv+Xoo7fPFXaGFp1vaLKxQ4uUpQQS5VuQs7BCq4xRJv7fwpVvvFEB3j+620haOuocqMhWd6TTPAEx+mdFNGHdranFe95WrWmIvlY4F1Dle2ECgc6cto7SryuqGGGha0tFQ5V53migUKmg6XKAo4qS3mik+0OZpAhOLeZKicacgaYcyx5hypYQE02ZA4xi/pNhOQxR4klNKyqacj+mpxnLTnnGSo85++3ZCZq6lrZkXlGEX3o+C9FieccJbZWVFjC0Yo1FZnJhoYMFoI1hEZ9r6hwg75HwzBNhbZCdJEfJwTPGzJvaKImw1yYX1HDAmpXR+ZJQ/SmgqMNVQb5vgamGwLtt7VwvP7Qk1xpiM5x5Cyv93E06MZmgs0Nya2azIKOYKCGBQQW97RmhKNKF02JZqHEJ4o58qp7X5EcZmc56trXEqzjCBZ1MFGR87Ql2tSTs6CGxS05PTzRQorkbw7aKoKXFDXsYW42VJih/q+FP2BdTzDTwVqOYB13liM50vG7wy28qagyuIXMeQI/Oqq8bcn5wJI50xH00CRntyfpL1T4hydYpoXgNiFzoIUTDZnLNRzh4TBHwbYGDvZkxmlyJloyr6tRihpeUG94GnKtIznREF0tzJG/OOr73JBcrSh1k6WuTprgLU+mnSGnv6Zge0NNz+kTDdH8nuAuTdJDCNb21LCiIuqlYbqGzT3RAoZofQfjFazkqeNWdYaGvYTM001EW2oKPvVk1ldUGSgUtHFwjKM1h9jnFcmy5lChoLNaQMGGDsYbKixlaMBmmsx1QjCfflwTfO/gckW0ruZ3jugKR3R5W9hGUWqCgxuFgsuaCHorotGKzGaeZB9DMsaTnKCpMtwTvOzhYk0rdrArKCqcaWmVk1+F372ur1YkKxgatI8Qfe1gIX9wE9FgS8ESmuABIXnRUbCapcKe+nO7slClSZFzpV/LkLncEb1qiO42fS3R855Su2mCLh62t1SYZZYVmKwIHjREF2uihTzB20JOkz7dkxzYQnK0UOU494wh+VWRc6Un2kpTaVgLDFEkJ/uhzRcI0YKGgpGWOlocBU/a4fKoJ/pEaNV6jip3+Es9VXY078rGnmAdf7t9ylPXS34RBSuYPs1UecZTU78WanhBCHpZ5sAoTz0LGZKjPf9TRypqWEiTvOFglL1fCEY3wY/++rbk7C8bWebA6p6om6PgOL2kp44TFJlVNBXae2rqqdZztOJpT87GQsE9jqCPIe9VReZuQ/CIgacsyZdCpIScSYqcZk8r+nsyCzhyfhOqHGOIvrLknC8wTpFcaYiGC/RU1NRbUeUpocQOnkRpGOrIOcNRx+1uA0UrzhSSt+VyS3SJpnFWkzNDqOFGIWcfR86DnmARTQ1HKIL33ExPiemeOhYSSjzlSUZZuE4TveoJLnBUOFof6KiysCbnAEcZgcUNTDOwkqWu3RWtmGpZwlHhJENdZ3miGz0lJlsKnjbwqSHQjpxnFDlTLLwqJPMZMjd7KrzkSG7VsxXBZE+F8YZkb01Oe00yyRK9psh5SYh29ySPKBo2ylNht7ZkZnsKenjKNJu9PNEyZpaCHv4Kt6RQsLvAVp7M9kIimmCUwGeWqLMmGuIotYMmWNpSahkhZw9FqZsVnKJhsjAHvtHMsTM9fCI06Dx/u3vfUXCqfsKRc4oFY2jMsoo/7DJDwZ1CsIKnJu+J9ldkpmiCxQx1rWjI+T9FwcWWzOuaYH0Hj7klNRVWEQpmaqosakiGNTFHdjS/qnUdmf0NJW5xsL0HhimCCZZSRzmSPTXJQ4aaztAwtZnoabebJ+htCaZ7Cm535ByoqXKbX1WRc4Eh2MkRXWzImVc96Cj4VdOKVxR84VdQsIUM8Psoou2byVHyZFuq7O8otbSQ2UAoeEWTudATLGSpZzVLlXVkPU2Jc+27lsw2jmg5T5VhbeE3BT083K9WsTTkFU/Osi0rC5lRlpwRHUiesNS0sOvmqGML1aRbPAxTJD9ZKtxuob+hhl8cwYGWpJ8nub7t5p6coYbMovZ1BTdaKn1jYD6h4GFDNFyT/Kqe1XCXphXHOKLZmuRSRdBPEfVUXQzJm5YGPGGJdvAEr7hHNdGZnuBvrpciGmopOLf5N0uVMy0FfYToJk90uUCbJupaVpO53UJXR2bVpoU00V2KOo4zMFrBd0Jtz2pa0clT5Q5L8IpQ177mWQejPMEJhuQjS10ref6HHjdEhy1P1EYR7GtO0uSsKJQYLiTnG1rVScj5lyazpqWGl5uBbRWl7m6ixGOOnEsMJR7z8J0n6KMnCdxhiNYQCoZ6CmYLnO8omC3MkW3bktlPmEt/VQQHejL3+dOE5FlPdK/Mq8hZxxJtLyRrepLThYKbLZxkSb5W52vYxNOaOxUF0yxMUPwBTYqCzy01XayYK0sJyWBLqX0MwU5CzoymRzV0EjjeUeLgDpTo6ij42ZAzvD01dHUUTPLU96MdLbBME8nFBn7zJCMtJcZokn8YoqU0FS5WFKyniHobguMcmW8N0XkWZjkyN3hqOMtS08r+/xTBwpZSZ3qiVRX8SzMHHjfUNFjgHEPmY9PL3ykEzxkSre/1ZD6z/NuznuB0RcE1TWTm9zRgfUWVJiG6yrzgmWPXC8EAR4Wxhlad0ZbgQyEz3pG5RVEwwDJH2mgKpjcTiCOzn1lfUWANFbZ2BA8balnEweJC9J0iuaeZoI+ippFCztEKVvckR2iice1JvhVytrQwUAZpgsubCPaU7xUe9vWnaOpaSBEspalykhC9bUlOMpT42ZHca6hyrqKmw/wMR8H5ZmdFoBVJb03O4UL0tSNnvIeRmkrLWqrs78gcrEn2tpcboh0UPOW3UUR9PMk4T4nnNKWmCjlrefhCwxRNztfmIQVdDElvS4m1/WuOujoZCs5XVOjtKPGokJzsYCtFYoWonSPT21DheU/wWhM19FcElwqNGOsp9Q8N/cwXaiND1MmeL1Q5XROtYYgGeFq1aTMsoMmcrKjQrOFQTQ1fmBYhmW6o8Jkjc7iDJRTBIo5kgJD5yMEYA3srCg7VFKwiVJkmRCc5ohGOKhsYMn/XBLdo5taZjlb9YAlGWRimqbCsoY7HFAXLa5I1HPRxMMsQDHFkWtRNniqT9UEeNjcE7RUlrCJ4R2CSJuqlKHWvJXjAUNcITYkenuBRB84TbeepcqTj3zZyFJzgYQdHnqfgI0ddUwS6GqWpsKWhjq9cV0vBAEMN2znq+EBfIWT+pClYw5xsTlJU6GeIBsjGmmANTzJZiIYpgrM0Oa8ZMjd7NP87jxhqGOhJlnQtjuQpB+8aEE00wZFznSJPyHxgH3HkPOsJFvYk8zqCHzTs1BYOa4J3PFU+UVRZxlHDM4YavlNUuMoRveiZA2d7grMNc2g+RbSCEKzmgYsUmWmazFJyoiOZ4KnyhKOGRzWJa0+moyV4TVHDzn51Awtqaphfk/lRQ08FX1iiqxTB/kLwd0VynKfEvI6cd4XMV5bMhZ7gZUWVzYQ6Nm2BYzxJbw3bGthEUUMfgbGeorae6DxHtJoZ6alhZ0+ytiVoK1R4z5PTrOECT/SugseEOlb1MMNR4VRNcJy+V1Hg9ONClSZFZjdHlc6W6FBLdJja2MC5hhpu0DBYEY1TFGwiFAxRRCsYkiM9JRb0JNMVkW6CZYT/2EiTGWmo8k+h4FhDNE7BvppoTSFnmCV5xZKzvcCdDo7VVPnIU+I+Rc68juApC90MwcFCsJ5hDqxgScYKreruyQwTqrzoqDCmhWi4IbhB0Yrt3RGa6GfDv52rKXWhh28dyZaWUvcZeMTBaZoSGyiCtRU5J8iviioHaErs7Jkj61syVzTTgOcUOQ8buFBTYWdL5g3T4qlpe0+wvD63heAXRfCCIed9RbCsp2CiI7raUOYOTU13N8PNHvpaGvayo4a3LLT1lDrVEPT2zLUlheB1R+ZTRfKWJ+dcocLJfi11vyJ51lLqJ0WD7tRwryezjiV5W28uJO9qykzX8JDe2lHl/9oyBwa2UMfOngpXCixvKdXTk3wrsKmiVYdZIqsoWEERjbcUNDuiaQomGoIbFdEHmsyWnuR+IeriKDVLnlawlyNHKwKlSU631PKep8J4Q+ayjkSLKYLhalNHlYvttb6fHm0p6OApsZ4l2VfdqZkjuysy6ysKLlckf1KUutCTs39bmCgEyyoasIWlVaMF7mgmWtBT8Kol5xpH9IGllo8cJdopcvZ2sImlDmMIbtDk3KIpeNiS08lQw11NFPTwVFlPP6pJ2gvRfI7gQUfmNAtf6Gs0wQxDsKGlVBdF8rCa3jzdwMaGHOsItrZk7hAyOzpK9VS06j5F49b0VNGOOfKs3lDToMsMBe9ZWtHFEgxTJLs7qrygKZjUnmCYoeAqeU6jqWuLJup4WghOdvCYJnrSkSzoyRkm5M2StQwVltPkfCAk58tET/CSg+8MUecmotMEnhBKfWBIZsg2ihruMJQaoIm+tkTLKEqspMh00w95gvFCQRtDwTT1gVDDSEVdlwqZfxoQRbK0g+tbiBZxzKlpnpypejdDwTaeOvorMk/IJE10h9CqRe28hhLbe0pMsdSwv4ZbhKivo2BjDWfL8UKJgeavwlwb5KlwhyE4u4XkGE2ytZCznKLCDZZq42VzT8HLCrpruFbIfOIINmh/qCdZ1ZBc65kLHR1Bkyf5zn6pN3SvGKIlFNGplhrO9QSXanLOMQTLCa0YJCRrCZm/CZmrLTm7WzCK4GJDiWUdFeYx1LCFg3NMd0XmCuF3Y5rITLDUsYS9zoHVzwnJoYpSTQoObyEzr4cFBNqYTopoaU/wkyLZ2lPhX/5Y95ulxGTV7KjhWrOZgl8MyUUafjYraNjNU1N3IWcjT5WzWqjwtoarHSUObGYO3GCJZpsBlnJGPd6ZYLyl1GdCA2625IwwJDP8GUKymbzuyPlZlvTUsaUh5zFDhRWFzPKKZLAlWdcQbObgF9tOqOsmB1dqcqYJmWstFbZRRI9poolmqiLnU0POvxScpah2iSL5UJNzgScY5+AuIbpO0YD3NCW+dLMszFSdFCWGqG6eVq2uYVNDdICGD6W7EPRWZEY5gpsE9rUkS3mijzzJnm6UpUFXG1hCUeVoS5WfNcFpblELL2qqrCvMvRfd45oalvKU2tiQ6ePJOVMRXase9iTtLJztPxJKLWpo2CRDcJwn2sWSLKIO1WQWNTCvpVUvOZhgSC40JD0dOctaSqzkCRbXsKlb11Oip6PCJ0IwSJM31j3akRxlP7Rwn6aGaUL0qiLnJkvB3xWZ2+Q1TfCwpQH3G0o92UzmX4o/oJNQMMSQc547wVHhdk+VCw01DFYEnTxzZKAm74QmeNNR1w6WzEhNK15VJzuCdxQ53dRUDws5KvwgBMOEgpcVNe0hZI6RXT1Jd0cyj5nsaEAHgVmGaJIlWdsc5Ui2ElrRR6jrRAttNMEAIWrTDFubkZaok7/AkzfIwfuWVq0jHzuCK4QabtLUMVPB3kJ0oyHTSVFlqMALilJf2Rf8k5aaHtMfayocLBS8L89oKoxpJvnAkDPa0qp5DAUTHKWmCcnthlou8iCKaFFLHWcINd1nyIwXqrSxMNmSs6KmoL2QrKuWtlQ5V0120xQ5vRyZS1rgFkWwhiOwiuQbR0OOVhQM9iS3tiXp4RawRPMp5tDletOOBL95MpM01dZTBM9pkn5qF010rIeHFcFZhmSGpYpTsI6nwhqe5C9ynhlpp5ophuRb6WcJFldkVnVEwwxVfrVkvnWUuNLCg5bgboFHPDlDPDmnK7hUrWiIbjadDclujlZcaokOFup4Ri1kacV6jmrrK1hN9bGwpKEBQ4Q6DvIUXOmo6U5LqQM6EPyiKNjVkPnJkDPNEaxhiFay5ExW1NXVUGqcpYYdPcGiCq7z/TSlbhL4pplWXKd7NZO5QQFrefhRQW/NHOsqcIglc4UhWklR8K0QzbAw08CBDnpbgqXdeD/QUsM4RZXDFBW6WJKe/mFPdH0LtBgiq57wFLzlyQzz82qYx5D5WJP5yVJDW01BfyHnS6HKO/reZqId1WGa4Hkh2kWodJ8i6KoIPlAj2hPt76CzXsVR6koPRzWTfKqIentatYpQw2me4AA3y1Kind3SwoOKZDcFXTwl9tWU6mfgRk9d71sKtlNwrjnYw5tC5n5LdKiGry3JKNlHEd3oaMCFHrazBPMp/uNJ+V7IudcSbeOIdjUEdwl0VHCOZo5t6YluEuaC9mQeMgSfOyKnYGFHcIeQ84yQWbuJYJpZw5CzglDH7gKnWqqM9ZTaXcN0TeYhR84eQtJT76JJ1lREe7WnnvsMmRc9FQ7SBBM9mV3lCUdmHk/S2RAMt0QjFNFqQpWjDPQ01DXWUdDBkXziKPjGEP3VP+zIWU2t7im41FOloyWzn/L6dkUy3VLDaZ6appgDLHPjJEsyvJngWEPUyVBiAaHCTEXwrLvSEbV1e1gKJniicWorC1MUrVjB3uDhJE/wgSOzk1DXpk0k73qCM8xw2UvD5kJmDUfOomqMpWCkJRlvKXGmoeBm18USjVIk04SClxTB6YrgLAPLWYK9HLUt5cmc0vYES8GnTeRc6skZbQkWdxRsIcyBRzx1DbTk9FbU0caTPOgJHhJKnOGIVhQqvKmo0llRw9sabrZkDtdg3PqaKi9oatjY8B+G371paMg6+mZFNNtQ04mWBq3rYLOmtWWQp8KJnpy9DdFensyjdqZ+yY40VJlH8wcdLzC8PZnvHMFUTZUrDTkLyQaGus5X5LzpYAf3i+e/ZlhqGqWhh6Ou6xTR9Z6oi5AZZtp7Mj2EEm8oSpxiYZCHU/1fbGdNNNRRoZMhmilEb2gqHOEJDtXkHK/JnG6IrvbPCwV3NhONVdS1thBMs1T4QOBcTWa2IzhMk2nW5Kyn9tXUtpv9RsG2msxk+ZsQzRQacJncpgke0+T8y5Fzj8BiGo7XlJjaTIlpQs7KFjpqGnKuoyEPeIKnFMkZHvopgh81ySxNFWvJWcKRs70j2FOT012IllEEO1n4pD1513Yg2ssQPOThOkvyrqHUdEXOSEsihmBbTbKX1kLBPWqWkLOqJbjB3GBIZmoa8qWl4CG/iZ7oiA72ZL7TJNeZUY7kFQftDcHHluBzRbCegzMtrRjVQpX2lgoPKKLJAkcbMl01XK2p7yhL8pCBbQ3BN2avJgKvttcrWDK3CiUOVxQ8ZP+pqXKyIxnmBymCg5vJjNfkPK4+c8cIfK8ocVt7kmfd/I5SR1hKvCzUtb+lhgc00ZaO6CyhIQP1Uv4yIZjload72PXX0OIJvnFU+0Zf6MhsJwTfW0r0UwQfW4LNLZl5HK261JCZ4qnBaAreVAS3WrjV0LBnNDUNNDToCEeFfwgcb4gOEqLRhirWkexrCEYKVV711DLYEE1XBEsp5tpTGjorkomKYF9FDXv7fR3BGwbettSxnyL53MBPjsxDZjMh+VUW9NRxq1DhVk+FSxQcaGjV9Pawv6eGByw5qzoy7xk4RsOShqjJwWKe/1pEEfzkobeD/dQJmpqedcyBTy2sr4nGNRH0c0SPWTLrqAc0OQcb/gemKgqucQT7ySWKCn2EUotoCvpZct7RO2sy/QW0IWcXd7pQRQyZVwT2USRO87uhjioTLKV2brpMUcMQRbKH/N2T+UlTpaMls6cmc6CCNy3JdYYSUzzJQ4oSD3oKLncULOiJvjBEC2oqnCJkJluCYy2ZQ5so9YYlZ1VLlQU1mXEW1jZERwj/MUSRc24TdexlqLKfQBtDTScJUV8FszXBEY5ktpD5Ur9hYB4Nb1iikw3JoYpkKX+RodRKFt53MMuRnKSpY31PwYaGaILh3wxJGz9TkTPEETxoCWZrgvOlmyMzxFEwVJE5xZKzvyJ4WxEc16Gd4Xe3Weq4XH2jKRikqOkGQ87hQnC7wBmGYLAnesX3M+S87eFATauuN+Qcrh7xIxXJbUIdMw3JGE3ylCWzrieaqCn4zhGM19TQ3z1oH1AX+pWEqIc7wNGAkULBo/ZxRaV9NNyh4Br3rCHZzbzmSfawBL0dNRwpW1kK9mxPXR9povcdrGSZK9c2k0xwFGzjuniCtRSZCZ6ccZ7gaktmgAOtKbG/JnOkJrjcQTdFMsxRQ2cLY3WTIrlCw1eWKn8R6pvt4GFDso3QoL4a3nLk3G6JrtME3dSenpx7PNFTmga0EaJTLQ061sEeQoWXhSo9LTXsaSjoJQRXeZLtDclbCrYzfzHHeaKjHCVOUkQHO3JeEepr56mhiyaYYKjjNU+Fed1wS5VlhWSqI/hYUdDOkaxiKehoyOnrCV5yBHtbWFqTHCCwtpDcYolesVR5yUzTZBb3RNMd0d6WP+SvhuBmRcGxnuQzT95IC285cr41cLGQ6aJJhmi4TMGempxeimBRQw1tFKV+8jd6KuzoSTqqDxzRtpZkurvKEHxlqXKRIjjfUNNXQsNOsRScoWFLT+YeRZVD3GRN0MdQcKqQjHDMrdGGVu3iYJpQx3WGUvfbmxwFfR20WBq0oYY7LMFhhgYtr8jpaEnaOzjawWWaTP8mMr0t/EPDPoqcnxTBI5o58L7uoWnMrpoqPwgVrlAUWE+V+TQl9rawoyP6QGAlQw2TPRX+YSkxyBC8Z6jhHkXBgQL7WII3DVFnRfCrBfxewv9D6xsyjys4VkhWb9pUU627JllV0YDNHMku/ldNMMXDEo4aFnAkk4U6frNEU4XgZUPmEKHUl44KrzmYamjAbh0JFvGnaTLPu1s9jPCwjFpYiN7z1DTOk/nc07CfDFzmCf7i+bfNHXhDtLeBXzTBT5rkMvWOIxpl4EMh2LGJBu2syDnAEx2naEhHDWMMzPZEhygyS1mS5RTJr5ZkoKbEUoYqr2kqdDUE8ztK7OaIntJkFrIECwv8LJTaVx5XJE86go8dFeZ3FN3rjabCAYpoYEeC9zzJVULBbmZhDyd7ko09ydpNZ3nm2Kee4FPPXHnYEF1nqOFEC08LUVcDvYXkJHW8gTaKCk9YGOeIJhqiE4ToPEepdp7IWFjdwnWaufGMwJJCMtUTTBBK9BGCOy2tGGrJTHIwyEOzp6aPzNMOtlZkDvcEWpP5SVNhfkvDxhmSazTJXYrM9U1E0xwFVwqZQwzJxw6+kGGGUj2FglGGmnb1/G51udRSMNlTw6GGnCcUwVcOpmsqTHa06o72sw1RL02p9z0VbnMLOaIX3QKaYKSCFQzBKEUNHTSc48k53RH9wxGMtpQa5KjjW0W0n6XCCCG4yxNNdhQ4R4l1Ff+2sSd6UFHiIEOyqqFgT01mEUMD+joy75jPhOA+oVVLm309FR4yVOlp4RhLiScNmSmaYF5Pw0STrOIoWMSR2UkRXOMp+M4SHW8o8Zoi6OZgjKOaFar8zZDzkWzvKOjkKBjmCXby8JahhjXULY4KlzgKLvAwxVGhvyd4zxB1d9T0piazmKLCVZY5sKiD0y2ZSYrkUEPUbIk+dlQ4SJHTR50k1DPaUWIdTZW9NJwnJMOECgd7ou/MnppMJ02O1VT4Wsh85MnZzcFTngpXGKo84qmwgKbCL/orR/SzJ2crA+t6Mp94KvxJUeIbT3CQu1uIdlQEOzlKfS3UMcrTiFmOuroocrZrT2AcmamOKg8YomeEKm/rlT2sociMaybaUlFhuqHCM2qIJ+rg4EcDFymiDSxzaHdPcpE62pD5kyM5SBMoA1PaUtfIthS85ig1VPiPPYXgYEMNk4Qq7TXBgo7oT57gPUdwgCHzhIVFPFU6OYJzHAX9m5oNrVjeE61miDrqQ4VSa1oiURTsKHC0IfjNwU2WzK6eqK8jWln4g15TVBnqmDteCJ501PGAocJhhqjZdtBEB6lnhLreFJKxmlKbeGrqLiSThVIbCdGzloasa6lpMQXHCME2boLpJgT7yWaemu6wBONbqGNVRS0PKIL7LckbjmQtR7K8I5qtqel+T/ChJTNIKLjdUMNIRyvOEko9YYl2cwQveBikCNawJKcLBbc7+JM92mysNvd/Fqp8a0k6CNEe7cnZrxlW0wQXaXjaktnRwNOGZKYiONwS7a1JVheq3WgJHlQUGKHKmp4KAxXR/ULURcNgoa4zhKSLpZR3kxRRb0NmD0OFn+UCS7CzI1nbP6+o4x47QZE5xRCt3ZagnYcvmpYQktXdk5YKXTzBC57kKEe0VVuiSYqapssMS3C9p2CKkHOg8B8Pa8p5atrIw3qezIWanMGa5HRDNF6RM9wcacl0N+Q8Z8hsIkSnaIIdHRUOEebAPy1zbCkhM062FCJtif7PU+UtoVXzWKqM1PxXO8cfdruhFQ/a6x3JKYagvVDhQEtNiyiiSQ7OsuRsZUku0CRNDs4Sog6KKjsZgk2bYJqijgsEenoKeniinRXBn/U3lgpPdyDZynQx8IiioMnCep5Ky8mjGs6Wty0l1hUQTcNWswS3WRp2kCNZwJG8omG8JphPUaFbC8lEfabwP7VtM9yoaNCAjpR41VNhrD9LkbN722v0CoZMByFzhaW+MyzRYEWFDQwN2M4/JiT76PuljT3VU/A36eaIThb+R9oZGOAJ9tewkgGvqOMNRWYjT/Cwu99Q8LqDE4TgbLWxJ1jaDDAERsFOFrobgjUsBScaguXU8kKm2RL19tRypSHnHNlHiIZqgufs4opgQdVdwxBNNFBR6kVFqb8ogimOzB6a6HTzrlDHEpYaxjiiA4TMQobkDg2vejjfwJGWmnbVFAw3H3hq2NyQfG7hz4aC+w3BbwbesG0swYayvpAs6++Ri1Vfzx93mFChvyN5xVHTS+0p9aqCAxyZ6ZacZyw5+7uuQkFPR9DDk9NOiE7X1PCYJVjVUqq7JlrHwWALF5nfHNGjApdpqgzx5OwilDhCiDYTgnc9waGW4BdLNNUQvOtpzDOWHDH8D7TR/A/85KljEQu3NREc4Pl/6B1Hhc8Umb5CsKMmGC9EPcxoT2amwHNCmeOEnOPbklnMkbOgIvO5UMOpQrS9UGVdt6iH/fURjhI/WOpaW9OKLYRod6HCUEdOX000wpDZQ6hwg6LgZfOqo1RfT/CrJzjekXOGhpc1VW71ZLbXyyp+93ILbC1kPtIEYx0FIx1VDrLoVzXRKRYWk809yYlC9ImcrinxtabKnzRJk3lAU1OLEN1j2zrYzr2myHRXJFf4h4QKT1qSTzTB5+ZNTzTRkAxX8FcLV2uS8eoQQ2aAkFzvCM72sJIcJET3WPjRk5wi32uSS9rfZajpWEvj9hW42F4o5NytSXYy8IKHay10VYdrcl4SkqscrXpMwyGOgtkajheSxdQqmpxP1L3t4R5PqasFnrQEjytq6qgp9Y09Qx9o4S1FzhUCn1kyHSzBWLemoSGvOqLNhZyBjmCaAUYpMgt4Ck7wBBMMwWKWgjsUwTaGVsxWC1mYoKiyqqeGKYqonSIRQ3KIkHO0pmAxTdBHkbOvfllfr+AA+7gnc50huVKYK393FOyg7rbPO/izI7hE4CnHHHnJ0ogNPRUGeUpsrZZTBJcrovUcJe51BPsr6GkJdhCCsZ6aTtMEb2pqWkqeVtDXE/QVggsU/Nl86d9RMF3DxvZTA58agu810RWawCiSzzXBeU3MMW9oyJUedvNEvQyNu1f10BSMddR1vaLCYpYa/mGocLSiYDcLbQz8aMn5iyF4xBNMs1P0QEOV7o5gaWGuzSeLue4tt3ro7y4Tgm4G/mopdZgl6q0o6KzJWE3mMksNr3r+a6CbT8g5wZNzT9O7fi/zpaOmnz3BRoqos+tv9zMbdpxsqDBOEewtJLt7cg5wtKKbvldpSzRRCD43VFheCI7yZLppggMVBS/KMAdHODJvOwq2NQSbKKKPLdFWQs7Fqo+mpl01JXYRgq8dnGLhTiFzqmWsUMdpllZdbKlyvSdYxhI9YghOtxR8LgSLWHK62mGGVoxzBE8LNWzqH9CUesQzFy5RQzTc56mhi6fgXEWwpKfE5Z7M05ZgZUPmo6auiv8YKzDYwWBLMErIbKHJvOwIrvEdhOBcQ9JdU1NHQ7CXn2XIDFBKU2WAgcX9UAUzDXWd5alwuyJ41Z9rjKLCL4aCp4WarhPm2rH+SaHUYE001JDZ2ZAzXPjdMpZWvC9wmqIB2lLhQ01D5jO06hghWMndbM7yRJMsoCj1vYbnFQVrW9jak3OlEJ3s/96+p33dEPRV5GxiqaGjIthUU6FFEZyqCa5qJrpBdzSw95IUnOPIrCUUjRZQFrbw5PR0R1qiYx3cb6nrWUMrBmmiBQxVHtTew5ICP/ip6g4hed/Akob/32wvBHsIOX83cI8hGeNeNPCIkPmXe8fPKx84OMSRM1MTdXSwjCZ4S30jVGhvqTRak/OVhgGazHuOCud5onEO1lJr6ecVyaOK6H7zqlBlIaHE0oroCgfvGJIdPcmfLNGLjpz7hZwZQpUbFME0A1cIJa7VNORkgfsMBatbKgwwJM9bSvQXeNOvbIjelg6WWvo5kvbKaJJNHexkKNHL9xRyFlH8Ti2riB5wVPhUk7nGkJnoCe428LR/wRGdYIlmWebCyxou1rCk4g/ShugBDX0V0ZQWkh0dOVsagkM0yV6OoLd5ye+pRlsCr0n+KiQrGuq5yJDzrTAXHtLUMduTDBVKrSm3eHL+6ijxhFDX9Z5gVU/wliHYTMiMFpKLNMEywu80wd3meoFmt6VbRMPenhrOc6DVe4pgXU8DnnHakLOIIrlF4FZPIw6R+zxBP0dyq6OOZ4Q5sLKCcz084ok+VsMMyQhNZmmBgX5xIXOEJTmi7VsGTvMTNdHHhpzdbE8Du2oKxgvBqQKdDDnTFOylCFaxR1syz2iqrOI/FEpNc3C6f11/7+ASS6l2inq2ciTrCCzgyemrCL5SVPjQkdPZUmGy2c9Sw9FtR1sS30RmsKPCS4rkIC/2U0MduwucYolGaPjKEyhzmiPYXagyWbYz8LWBDdzRimAXzxx4z8K9hpzlhLq+NiQ97HuKorMUfK/OVvC2JfiHUPCQI/q7J2gjK+tTDNxkCc4TMssqCs4TGtLVwQihyoAWgj9bosU80XGW6Ac9TJGziaUh5+hnFcHOnlaM1iRn29NaqGENTTTSUHCH2tWTeV0osUhH6psuVLjRUmGWhm6OZEshGeNowABHcJ2Bpy2ZszRcKkRXd2QuKVEeXnbfaEq825FguqfgfE2whlChSRMdron+LATTPQ2Z369t4B9C5gs/ylzv+CMmepIDPclFQl13W0rspPd1JOcbghGOEutqCv5qacURQl3dDKyvyJlqKXGPgcM9FfawJAMVmdcspcYKOZc4GjDYkFlK05olNMHyHn4zFNykyOxt99RkHlfwmiHo60l2EKI+mhreEKp080Tbug08BVPcgoqC5zWt+NLDTZ7oNSF51N1qie7Va3uCCwyZbkINf/NED6jzOsBdZjFN8oqG3wxVunqCSYYKf3EdhJyf9YWGf7tRU2oH3VHgPr1fe5J9hOgHd7xQ0y7qBwXr23aGErP0cm64JVjZwsOGqL+mhNgZmhJLW2oY4UhedsyBgzrCKrq7BmcpNVhR6jBPq64Vgi+kn6XE68pp8J5/+0wRHGOpsKenQn9DZntPzjRLZpDAdD2fnSgkG9tmIXnUwQ6WVighs7Yi2MxQ0N3CqYaCXkJ0oyOztMDJjmSSpcpvlrk0RMMOjmArQ04PRV1DO1FwhCVaUVPpKUM03JK5SxPsIWRu8/CGHi8UHChiqGFDTbSRJWeYUDDcH6vJWUxR4k1FXbMUwV6e4AJFXS8oMqsZKqzvYQ9DDQdZckY4aGsIhtlubbd2r3j4QBMoTamdPZk7O/Bf62lacZwneNjQoGcdVU7zJOd7ghsUHOkosagic6cnWc8+4gg285R6zZP5s1/LUbCKIznTwK36PkdwlOrl4U1LwfdCCa+IrvFkmgw1PCAUXKWo0sURXWcI2muKJlgyFzhynCY4RBOsqCjoI1R5zREco0n2Vt09BQtYSizgKNHfUmUrQ5UOCh51BFcLmY7umhYqXKQomOop8bUnWNNQcIiBcYaC6xzMNOS8JQQfeqKBmmglB+97ok/lfk3ygaHSyZaCRTzRxQo6GzLfa2jWBPepw+UmT7SQEJyiyRkhBLMVOfcoMjcK0eZChfUNzFAUzCsEN5vP/X1uP/n/aoMX+K+nw/Hjr/9xOo7j7Pju61tLcgvJpTWXNbfN5jLpi6VfCOviTktKlFusQixdEKWmEBUKNaIpjZRSSOXSgzaaKLdabrm1/9nZ+/f+vd/vz/v9+Xy+zZ7PRorYoZqyLrCwQdEAixxVOEXNNnjX2nUSRlkqGmWowk8lxR50JPy9Bo6qJXaXwNvREBvnThPEPrewryLhcAnj5WE15Fqi8W7R1sAuEu86S4ENikItFN4xkv9Af4nXSnUVcLiA9xzesFpivRRVeFKtsMRaKBhuSbjOELnAUtlSQUpXgdfB4Z1oSbnFEetbQ0IrAe+Y+pqnDcEJFj6S8LDZzZHwY4e3XONNlARraomNEt2bkvGsosA3ioyHm+6jCMbI59wqt4eeara28IzEmyPgoRaUOEDhTVdEJhmCoTWfC0p8aNkCp0oYqih2iqGi4yXeMkOsn4LdLLnmKfh/YogjNsPebeFGR4m9BJHLzB61XQ3BtpISfS2FugsK9FAtLWX1dCRcrCnUp44CNzuCowUZmxSRgYaE6Za0W2u/E7CVXCiI/UOR8aAm1+OSyE3mOUcwyc1zBBeoX1kiKy0Zfxck1Gsyulti11i83QTBF5Kg3pDQThFMVHiPSlK+0cSedng/VaS8bOZbtsBcTcZAR8JP5KeqQ1OYKAi20njdNNRpgnsU//K+JnaXJaGTomr7aYIphoRn9aeShJWKEq9LcozSF7QleEfDI5LYm5bgVkFkRwVDBCVu0DDIkGupo8TZBq+/pMQURYErJQmPKGKjNDkWOLx7Jd5QizdUweIaKrlP7SwJDhZvONjLkOsBBX9UpGxnydhXkfBLQ8IxgojQbLFnJf81JytSljclYYyEFyx0kVBvKWOFJmONpshGAcsduQY5giVNCV51eOdJYo/pLhbvM0uDHSevNKRcrKZIqnCtJeEsO95RoqcgGK4ocZcho1tTYtcZvH41pNQ7vA0WrhIfOSraIIntIAi+NXWCErdbkvrWwjRLrt0NKUdL6KSOscTOdMSOUtBHwL6OLA0vNSdynaWQEnCpIvKaIrJJEbvHkmuNhn6OjM8VkSGSqn1uYJCGHnq9I3aLhNME3t6GjIkO7xrNFumpyTNX/NrwX7CrIRiqqWijI9JO4d1iieykyfiposQIQ8YjjsjlBh6oHWbwRjgYJQn2NgSnNycmJAk3NiXhx44Sxykihxm8ybUwT1OVKySc7vi3OXVkdBJ4AyXBeksDXG0IhgtYY0lY5ahCD0ehborIk5aUWRJviMA7Xt5kyRjonrXENkm8yYqgs8VzgrJmClK20uMM3jRJ0FiQICQF9hdETlLQWRIb5ki6WDfWRPobvO6a4GP5mcOrNzDFELtTkONLh9dXE8xypEg7z8A9jkhrQ6Fhjlg/QVktJXxt4WXzT/03Q8IaQWSqIuEvloQ2mqC9Jfi7wRul4RX3pSPlzpoVlmCtI2jvKHCFhjcM3sN6lqF6HxnKelLjXWbwrpR4xzuCrTUZx2qq9oAh8p6ixCUGr78g8oyjRAtB5CZFwi80VerVpI0h+IeBxa6Zg6kWvpDHaioYYuEsRbDC3eOmC2JvGYLeioxGknL2UATNJN6hmtj1DlpLvDVmocYbrGCVJKOrg4X6DgddLA203BKMFngdJJFtFd7vJLm6KEpc5yjQrkk7M80SGe34X24nSex1Ra5Omgb71JKyg8SrU3i/kARKwWpH0kOGhKkObyfd0ZGjvyXlAkVZ4xRbYJ2irFMkFY1SwyWxr2oo4zlNiV+7zmaweFpT4kR3kaDAFW6xpSqzJay05FtYR4HmZhc9UxKbbfF2V8RG1MBmSaE+kmC6JnaRXK9gsiXhJHl/U0qM0WTcbyhwkYIvFGwjSbjfwhiJt8ZSQU+Bd5+marPMOkVkD0muxYLIfEuhh60x/J92itguihJSEMySVPQnTewnEm+620rTQEMsOfo4/kP/0ARvWjitlpSX7GxBgcMEsd3EEeYWvdytd+Saawi6aCIj1CkGb6Aj9rwhx16Cf3vAwFy5pyLhVonXzy51FDpdEblbkdJbUcEPDEFzQ8qNmhzzLTmmKWKbFCXeEuRabp6rxbvAtLF442QjQ+wEA9eL1xSR7Q0JXzlSHjJ4exq89yR0laScJ/FW6z4a73pFMEfDiRZvuvijIt86RaSFOl01riV2mD1UEvxGk/Geg5aWwGki1zgKPG9J2U8PEg8qYvMsZeytiTRXBMslCU8JSlxi8EabjwUldlDNLfzTUmCgxWsjqWCOHavYAqsknKFIO0yQ61VL5AVFxk6WhEaCAkdJgt9aSkzXlKNX2jEa79waYuc7gq0N3GDJGCBhoiTXUEPsdknCUE1CK0fwsiaylSF2uiDyO4XX3pFhNd7R4itFGc0k/ElBZwWvq+GC6szVeEoS/MZ+qylwpKNKv9Z469UOjqCjwlusicyTxG6VpNxcQ8IncoR4RhLbR+NdpGGmJWOcIzJGUuKPGpQg8rrG21dOMqQssJQ4RxH5jaUqnZuQ0F4Q+cjxLwPtpZbIAk3QTJHQWBE5S1BokoVtDd6lhqr9UpHSUxMcIYl9pojsb8h4SBOsMQcqvOWC2E8EVehqiJ1hrrAEbQxeK0NGZ0Gkq+guSRgniM23bIHVkqwx4hiHd7smaOyglyIyQuM978j4VS08J/A2G1KeMBRo4fBaSNhKUEZfQewVQ/C1I+MgfbEleEzCUw7mKXI0M3hd1EESVji8x5uQ41nxs1q4RMJCCXs7Iq9acpxn22oSDnQ/sJTxsCbHIYZiLyhY05TY0ZLIOQrGaSJDDN4t8pVaIrsqqFdEegtizc1iTew5Q4ayBDMUsQMkXocaYkc0hZua412siZ1rSXlR460zRJ5SlHGe5j801RLMlJTxtaOM3Q1pvxJ45zUlWFD7rsAbpfEm1JHxG0eh8w2R7QQVzBUw28FhFp5QZzq8t2rx2joqulYTWSuJdTYfWwqMFMcovFmSyJPNyLhE4E10pHzYjOC3huArRa571ZsGajQpQx38SBP5pyZB6lMU3khDnp0MBV51BE9o2E+TY5Ml2E8S7C0o6w1xvCZjf0HkVEHCzFoyNmqC+9wdcqN+Tp7jSDheE9ws8Y5V0NJCn2bk2tqSY4okdrEhx1iDN8cSudwepWmAGXKcJXK65H9to8jYQRH7SBF01ESUJdd0TayVInaWhLkOjlXE5irKGOnI6GSWGCJa482zBI9rCr0jyTVcEuzriC1vcr6mwFGSiqy5zMwxBH/TJHwjSPhL8+01kaaSUuMFKTcLEvaUePcrSmwn8DZrgikWb7CGPxkSjhQwrRk57tctmxLsb9sZvL9LSlyuSLlWkqOjwduo8b6Uv1DkmudIeFF2dHCgxVtk8dpIvHpBxhEOdhKk7OLIUSdJ+cSRY57B+0DgGUUlNfpthTfGkauzxrvTsUUaCVhlKeteTXCoJDCa2NOKhOmC4G1H8JBd4OBZReSRGkqcb/CO1PyLJTLB4j1q8JYaIutEjSLX8YKM+a6phdMsdLFUoV5RTm9JSkuDN8WcIon0NZMNZWh1q8C7SJEwV5HxrmnnTrf3KoJBlmCYI2ilSLlfEvlE4011NNgjgthzEua0oKK7JLE7HZHlEl60BLMVFewg4EWNt0ThrVNEVkkiTwpKXSWJzdRENgvKGq4IhjsiezgSFtsfCUq8qki5S1LRQeYQQ4nemmCkImWMw3tFUoUBZk4NOeZYEp4XRKTGa6wJjrWNHBVJR4m3FCnbuD6aak2WsMTh3SZImGCIPKNgsDpVwnsa70K31lCFJZYcwwSMFcQulGTsZuEaSdBXkPGZhu0FsdUO73RHjq8MPGGIfaGIbVTk6iuI3GFgucHrIQkmWSJdBd7BBu+uOryWAhY7+Lki9rK5wtEQzWwvtbqGhIMFwWRJsElsY4m9IIg9L6lCX0VklaPAYkfkZEGDnOWowlBJjtMUkcGK4Lg6EtoZInMUBVYLgn0UsdmCyCz7gIGHFfk+k1QwTh5We7A9x+IdJ6CvIkEagms0hR50eH9UnTQJ+2oiKyVlLFUE+8gBGu8MQ3CppUHesnjTHN4QB/UGPhCTHLFPHMFrCqa73gqObUJGa03wgbhHkrCfpEpzNLE7JDS25FMKhlhKKWKfCgqstLCPu1zBXy0J2ztwjtixBu8UTRn9LVtkmCN2iyFhtME70JHRQ1KVZXqKI/KNIKYMCYs1GUMEKbM1bKOI9LDXC7zbHS+bt+1MTWS9odA9DtrYtpbImQJ2VHh/lisEwaHqUk1kjKTAKknkBEXkbkdMGwq0dnhzLJF3NJH3JVwrqOB4Sca2hti75nmJN0WzxS6UxDYoEpxpa4htVlRjkYE7DZGzJVU72uC9IyhQL4i8YfGWSYLLNcHXloyz7QhNifmKSE9JgfGmuyLhc403Xm9vqcp6gXe3xuuv8F6VJNxkyTHEkHG2g0aKXL0MsXc1bGfgas2//dCONXiNLCX+5mB7eZIl1kHh7ajwpikyzlUUWOVOsjSQlsS+M0R+pPje/dzBXRZGO0rMtgQrLLG9VSu9n6CMXS3BhwYmSoIBhsjNBmZbgusE9BCPCP5triU4VhNbJfE+swSP27aayE8tuTpYYjtrYjMVGZdp2NpS1s6aBnKSHDsbKuplKbHM4a0wMFd/5/DmGyKrJSUaW4IBrqUhx0vyfzTBBLPIUcnZdrAkNsKR0sWRspumSns6Ch0v/qqIbBYUWKvPU/CFoyrDJGwSNFhbA/MlzKqjrO80hRbpKx0Jewsi/STftwGSlKc1JZyAzx05dhLEdnfQvhZOqiHWWEAHC7+30FuRcZUgaO5gpaIK+xsiHRUsqaPElTV40xQZQ107Q9BZE1nryDVGU9ZSQ47bmhBpLcYpUt7S+xuK/FiT8qKjwXYw5ypS2iuCv7q1gtgjhuBuB8LCFY5cUuCNtsQOFcT+4Ih9JX+k8Ea6v0iCIRZOtCT0Et00JW5UeC85Cg0ScK0k411HcG1zKtre3SeITBRk7WfwDhEvaYLTHP9le0m8By0JDwn4TlLW/aJOvGHxdjYUes+ScZigCkYQdNdEOhkiezgShqkx8ueKjI8lDfK2oNiOFvrZH1hS+tk7NV7nOmLHicGWEgubkXKdwdtZknCLJXaCpkrjZBtLZFsDP9CdxWsSr05Sxl6CMmoFbCOgryX40uDtamB7SVmXW4Ihlgpmq+00tBKUUa83WbjLUNkzDmY7cow1JDygyPGlhgGKYKz4vcV7QBNbJIgM11TUqZaMdwTeSguH6rOaw1JRKzaaGyxVm2EJ/uCIrVWUcZUkcp2grMsEjK+DMwS59jQk3Kd6SEq1d0S6uVmO4Bc1lDXTUcHjluCXEq+1OlBDj1pi9zgiXxnKuE0SqTXwhqbETW6RggMEnGl/q49UT2iCzgJvRwVXS2K/d6+ZkyUl7jawSVLit46EwxVljDZwoSQ20sDBihztHfk2yA8NVZghiXwrYHQdfKAOtzsayjhY9bY0yE2CWEeJ9xfzO423xhL5syS2TFJofO2pboHob0nY4GiAgRrvGQEDa/FWSsoaaYl0syRsEt3kWoH3B01shCXhTUWe9w3Bt44SC9QCh3eShQctwbaK2ApLroGCMlZrYqvlY3qYhM0aXpFkPOuoqJ3Dm6fxXrGwVF9gCWZagjPqznfkuMKQ8DPTQRO8ZqG1hPGKEm9IgpGW4DZDgTNriTxvFiq+Lz+0cKfp4wj6OCK9JSnzNSn9LFU7UhKZZMnYwcJ8s8yRsECScK4j5UOB95HFO0CzhY4xJxuCix0lDlEUeMdS6EZBkTsUkZ4K74dugyTXS7aNgL8aqjDfkCE0ZbwkCXpaWCKhl8P7VD5jxykivSyxyZrYERbe168LYu9ZYh86IkscgVLE7tWPKmJv11CgoyJltMEbrohtVAQfO4ImltiHEroYEs7RxAarVpY8AwXMcMReFOTYWe5iiLRQxJ5Q8DtJ8LQhWOhIeFESPGsILhbNDRljNbHzNRlTFbk2S3L0NOS6V1KFJYKUbSTcIIhM0wQ/s2TM0SRMNcQmSap3jCH4yhJZKSkwyRHpYYgsFeQ4U7xoCB7VVOExhXepo9ABBsYbvGWKXPME3lyH95YioZ0gssQRWWbI+FaSMkXijZXwgiTlYdPdkNLaETxlyDVIwqeaEus0aTcYcg0RVOkpR3CSJqIddK+90JCxzsDVloyrFd5ZAr4TBKfaWa6boEA7C7s6EpYaeFPjveooY72mjIccLHJ9HUwVlDhKkmutJDJBwnp1rvulJZggKDRfbXAkvC/4l3ozQOG9a8lxjx0i7nV4jSXc7vhe3OwIxjgSHjdEhhsif9YkPGlus3iLFDnWOFhtCZbJg0UbQcIaR67JjthoCyMEZRwhiXWyxO5QxI6w5NhT4U1WsJvDO60J34fW9hwzwlKij6ZAW9ne4L0s8C6XeBMEkd/LQy1VucBRot6QMlbivaBhoBgjqGiCJNhsqVp/S2SsG6DIONCR0dXhvWbJ+MRRZJkkuEjgDXJjFQW6SSL7GXK8Z2CZg7cVsbWGoKmEpzQ5elpiy8Ryg7dMkLLUEauzeO86CuwlSOlgYLojZWeJ9xM3S1PWfEfKl5ISLQ0MEKR8YOB2QfCxJBjrKPCN4f9MkaSsqoVXJBmP7EpFZ9UQfOoOFwSzBN4MQ8LsGrymlipcJQhmy0GaQjPqCHaXRwuCZwRbqK2Fg9wlClZqYicrIgMdZfxTQ0c7TBIbrChxmuzoKG8XRaSrIhhiyNFJkrC7oIAWMEOQa5aBekPCRknCo4IKPrYkvCDI8aYmY7WFtprgekcJZ3oLIqssCSMtFbQTJKwXYy3BY5oCh2iKPCpJOE+zRdpYgi6O2KmOAgvVCYaU4ySRek1sgyFhJ403QFHiVEmJHwtybO1gs8Hr5+BETQX3War0qZngYGgtVZtoqd6vFSk/UwdZElYqyjrF4HXUeFspIi9IGKf4j92pKGAdCYMVsbcV3kRF0N+R8LUd5PCsIGWoxDtBkCI0nKofdJQxT+LtZflvuc8Q3CjwWkq8KwUpHzkK/NmSsclCL0nseQdj5FRH5CNHSgtLiW80Of5HU9Hhlsga9bnBq3fEVltKfO5IaSTmGjjc4J0otcP7QsJUSQM8pEj5/wCuUuC2DWz8AAAAAElFTkSuQmCC\");\n}\n"
  },
  {
    "path": "BlackStone/assets/vendors/codemirror/codemirror.css",
    "content": "/* BASICS */\n\n.CodeMirror {\n  /* Set height, width, borders, and global font properties here */\n  font-family: monospace;\n  height: 300px;\n  color: black;\n  direction: ltr;\n}\n\n/* PADDING */\n\n.CodeMirror-lines {\n  padding: 4px 0; /* Vertical padding around content */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n  padding: 0 4px; /* Horizontal padding of content */\n}\n\n.CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  background-color: white; /* The little square between H and V scrollbars */\n}\n\n/* GUTTER */\n\n.CodeMirror-gutters {\n  border-right: 1px solid #ddd;\n  background-color: #f7f7f7;\n  white-space: nowrap;\n}\n.CodeMirror-linenumbers {}\n.CodeMirror-linenumber {\n  padding: 0 3px 0 5px;\n  min-width: 20px;\n  text-align: right;\n  color: #999;\n  white-space: nowrap;\n}\n\n.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror-cursor {\n  border-left: 1px solid black;\n  border-right: none;\n  width: 0;\n}\n/* Shown when moving in bi-directional text */\n.CodeMirror div.CodeMirror-secondarycursor {\n  border-left: 1px solid silver;\n}\n.cm-fat-cursor .CodeMirror-cursor {\n  width: auto;\n  border: 0 !important;\n  background: #7e7;\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n  z-index: 1;\n}\n.cm-fat-cursor .CodeMirror-line::selection,\n.cm-fat-cursor .CodeMirror-line > span::selection, \n.cm-fat-cursor .CodeMirror-line > span > span::selection { background: transparent; }\n.cm-fat-cursor .CodeMirror-line::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span::-moz-selection,\n.cm-fat-cursor .CodeMirror-line > span > span::-moz-selection { background: transparent; }\n.cm-fat-cursor { caret-color: transparent; }\n@-moz-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@-webkit-keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n@keyframes blink {\n  0% {}\n  50% { background-color: transparent; }\n  100% {}\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\n.CodeMirror-overwrite .CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\n\n.CodeMirror-rulers {\n  position: absolute;\n  left: 0; right: 0; top: -50px; bottom: 0;\n  overflow: hidden;\n}\n.CodeMirror-ruler {\n  border-left: 1px solid #ccc;\n  top: 0; bottom: 0;\n  position: absolute;\n}\n\n/* DEFAULT THEME */\n\n.cm-s-default .cm-header {color: blue;}\n.cm-s-default .cm-quote {color: #090;}\n.cm-negative {color: #d44;}\n.cm-positive {color: #292;}\n.cm-header, .cm-strong {font-weight: bold;}\n.cm-em {font-style: italic;}\n.cm-link {text-decoration: underline;}\n.cm-strikethrough {text-decoration: line-through;}\n\n.cm-s-default .cm-keyword {color: #708;}\n.cm-s-default .cm-atom {color: #219;}\n.cm-s-default .cm-number {color: #164;}\n.cm-s-default .cm-def {color: #00f;}\n.cm-s-default .cm-variable,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3, .cm-s-default .cm-type {color: #085;}\n.cm-s-default .cm-comment {color: #a50;}\n.cm-s-default .cm-string {color: #a11;}\n.cm-s-default .cm-string-2 {color: #f50;}\n.cm-s-default .cm-meta {color: #555;}\n.cm-s-default .cm-qualifier {color: #555;}\n.cm-s-default .cm-builtin {color: #30a;}\n.cm-s-default .cm-bracket {color: #997;}\n.cm-s-default .cm-tag {color: #170;}\n.cm-s-default .cm-attribute {color: #00c;}\n.cm-s-default .cm-hr {color: #999;}\n.cm-s-default .cm-link {color: #00c;}\n\n.cm-s-default .cm-error {color: #f00;}\n.cm-invalidchar {color: #f00;}\n\n.CodeMirror-composing { border-bottom: 2px solid; }\n\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0b0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #a22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\n.CodeMirror-activeline-background {background: #e8f2ff;}\n\n/* STOP */\n\n/* The rest of this file contains styles related to the mechanics of\n   the editor. You probably shouldn't touch them. */\n\n.CodeMirror {\n  position: relative;\n  overflow: hidden;\n  background: white;\n}\n\n.CodeMirror-scroll {\n  overflow: scroll !important; /* Things will break if this is overridden */\n  /* 50px is the magic margin used to hide the element's real scrollbars */\n  /* See overflow: hidden in .CodeMirror */\n  margin-bottom: -50px; margin-right: -50px;\n  padding-bottom: 50px;\n  height: 100%;\n  outline: none; /* Prevent dragging from highlighting the element */\n  position: relative;\n}\n.CodeMirror-sizer {\n  position: relative;\n  border-right: 50px solid transparent;\n}\n\n/* The fake, visible scrollbars. Used to force redraw during scrolling\n   before actual scrolling happens, thus preventing shaking and\n   flickering artifacts. */\n.CodeMirror-vscrollbar, .CodeMirror-hscrollbar, .CodeMirror-scrollbar-filler, .CodeMirror-gutter-filler {\n  position: absolute;\n  z-index: 6;\n  display: none;\n  outline: none;\n}\n.CodeMirror-vscrollbar {\n  right: 0; top: 0;\n  overflow-x: hidden;\n  overflow-y: scroll;\n}\n.CodeMirror-hscrollbar {\n  bottom: 0; left: 0;\n  overflow-y: hidden;\n  overflow-x: scroll;\n}\n.CodeMirror-scrollbar-filler {\n  right: 0; bottom: 0;\n}\n.CodeMirror-gutter-filler {\n  left: 0; bottom: 0;\n}\n\n.CodeMirror-gutters {\n  position: absolute; left: 0; top: 0;\n  min-height: 100%;\n  z-index: 3;\n}\n.CodeMirror-gutter {\n  white-space: normal;\n  height: 100%;\n  display: inline-block;\n  vertical-align: top;\n  margin-bottom: -50px;\n}\n.CodeMirror-gutter-wrapper {\n  position: absolute;\n  z-index: 4;\n  background: none !important;\n  border: none !important;\n}\n.CodeMirror-gutter-background {\n  position: absolute;\n  top: 0; bottom: 0;\n  z-index: 4;\n}\n.CodeMirror-gutter-elt {\n  position: absolute;\n  cursor: default;\n  z-index: 4;\n}\n.CodeMirror-gutter-wrapper ::selection { background-color: transparent }\n.CodeMirror-gutter-wrapper ::-moz-selection { background-color: transparent }\n\n.CodeMirror-lines {\n  cursor: text;\n  min-height: 1px; /* prevents collapsing before first draw */\n}\n.CodeMirror pre.CodeMirror-line,\n.CodeMirror pre.CodeMirror-line-like {\n  /* Reset some styles that the rest of the page might have set */\n  -moz-border-radius: 0; -webkit-border-radius: 0; border-radius: 0;\n  border-width: 0;\n  background: transparent;\n  font-family: inherit;\n  font-size: inherit;\n  margin: 0;\n  white-space: pre;\n  word-wrap: normal;\n  line-height: inherit;\n  color: inherit;\n  z-index: 2;\n  position: relative;\n  overflow: visible;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-font-variant-ligatures: contextual;\n  font-variant-ligatures: contextual;\n}\n.CodeMirror-wrap pre.CodeMirror-line,\n.CodeMirror-wrap pre.CodeMirror-line-like {\n  word-wrap: break-word;\n  white-space: pre-wrap;\n  word-break: normal;\n}\n\n.CodeMirror-linebackground {\n  position: absolute;\n  left: 0; right: 0; top: 0; bottom: 0;\n  z-index: 0;\n}\n\n.CodeMirror-linewidget {\n  position: relative;\n  z-index: 2;\n  padding: 0.1px; /* Force widget margins to stay inside of the container */\n}\n\n.CodeMirror-widget {}\n\n.CodeMirror-rtl pre { direction: rtl; }\n\n.CodeMirror-code {\n  outline: none;\n}\n\n/* Force content-box sizing for the elements where we expect it */\n.CodeMirror-scroll,\n.CodeMirror-sizer,\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n}\n\n.CodeMirror-measure {\n  position: absolute;\n  width: 100%;\n  height: 0;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.CodeMirror-cursor {\n  position: absolute;\n  pointer-events: none;\n}\n.CodeMirror-measure pre { position: static; }\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 3;\n}\ndiv.CodeMirror-dragcursors {\n  visibility: visible;\n}\n\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\n.CodeMirror-line::selection, .CodeMirror-line > span::selection, .CodeMirror-line > span > span::selection { background: #d7d4f0; }\n.CodeMirror-line::-moz-selection, .CodeMirror-line > span::-moz-selection, .CodeMirror-line > span > span::-moz-selection { background: #d7d4f0; }\n\n.cm-searching {\n  background-color: #ffa;\n  background-color: rgba(255, 255, 0, .4);\n}\n\n/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n\n/* See issue #2901 */\n.cm-tab-wrap-hack:after { content: ''; }\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n"
  },
  {
    "path": "BlackStone/assets/vendors/codemirror/codemirror.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n// This is CodeMirror (https://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function (global, factory) {\n  typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n  typeof define === 'function' && define.amd ? define(factory) :\n  (global = global || self, global.CodeMirror = factory());\n}(this, (function () { 'use strict';\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n  var userAgent = navigator.userAgent;\n  var platform = navigator.platform;\n\n  var gecko = /gecko\\/\\d/i.test(userAgent);\n  var ie_upto10 = /MSIE \\d/.test(userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(userAgent);\n  var edge = /Edge\\/(\\d+)/.exec(userAgent);\n  var ie = ie_upto10 || ie_11up || edge;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : +(edge || ie_11up)[1]);\n  var webkit = !edge && /WebKit\\//.test(userAgent);\n  var qtwebkit = webkit && /Qt\\/\\d+\\.\\d+/.test(userAgent);\n  var chrome = !edge && /Chrome\\//.test(userAgent);\n  var presto = /Opera\\//.test(userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var mac_geMountainLion = /Mac OS X 1\\d\\D([8-9]|\\d\\d)\\D/.test(userAgent);\n  var phantom = /PhantomJS/.test(userAgent);\n\n  var ios = safari && (/Mobile\\/\\w+/.test(userAgent) || navigator.maxTouchPoints > 2);\n  var android = /Android/.test(userAgent);\n  // This is woefully incomplete. Suggestions for alternative methods welcome.\n  var mobile = ios || android || /webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(userAgent);\n  var mac = ios || /Mac/.test(platform);\n  var chromeOS = /\\bCrOS\\b/.test(userAgent);\n  var windows = /win/i.test(platform);\n\n  var presto_version = presto && userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) { presto_version = Number(presto_version[1]); }\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  function classTest(cls) { return new RegExp(\"(^|\\\\s)\" + cls + \"(?:$|\\\\s)\\\\s*\") }\n\n  var rmClass = function(node, cls) {\n    var current = node.className;\n    var match = classTest(cls).exec(current);\n    if (match) {\n      var after = current.slice(match.index + match[0].length);\n      node.className = current.slice(0, match.index) + (after ? match[1] + after : \"\");\n    }\n  };\n\n  function removeChildren(e) {\n    for (var count = e.childNodes.length; count > 0; --count)\n      { e.removeChild(e.firstChild); }\n    return e\n  }\n\n  function removeChildrenAndAdd(parent, e) {\n    return removeChildren(parent).appendChild(e)\n  }\n\n  function elt(tag, content, className, style) {\n    var e = document.createElement(tag);\n    if (className) { e.className = className; }\n    if (style) { e.style.cssText = style; }\n    if (typeof content == \"string\") { e.appendChild(document.createTextNode(content)); }\n    else if (content) { for (var i = 0; i < content.length; ++i) { e.appendChild(content[i]); } }\n    return e\n  }\n  // wrapper for elt, which removes the elt from the accessibility tree\n  function eltP(tag, content, className, style) {\n    var e = elt(tag, content, className, style);\n    e.setAttribute(\"role\", \"presentation\");\n    return e\n  }\n\n  var range;\n  if (document.createRange) { range = function(node, start, end, endNode) {\n    var r = document.createRange();\n    r.setEnd(endNode || node, end);\n    r.setStart(node, start);\n    return r\n  }; }\n  else { range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    try { r.moveToElementText(node.parentNode); }\n    catch(e) { return r }\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r\n  }; }\n\n  function contains(parent, child) {\n    if (child.nodeType == 3) // Android browser always returns false when child is a textnode\n      { child = child.parentNode; }\n    if (parent.contains)\n      { return parent.contains(child) }\n    do {\n      if (child.nodeType == 11) { child = child.host; }\n      if (child == parent) { return true }\n    } while (child = child.parentNode)\n  }\n\n  function activeElt() {\n    // IE and Edge may throw an \"Unspecified Error\" when accessing document.activeElement.\n    // IE < 10 will throw when accessed while the page is loading or in an iframe.\n    // IE > 9 and Edge will throw when accessed in an iframe if document.body is unavailable.\n    var activeElement;\n    try {\n      activeElement = document.activeElement;\n    } catch(e) {\n      activeElement = document.body || null;\n    }\n    while (activeElement && activeElement.shadowRoot && activeElement.shadowRoot.activeElement)\n      { activeElement = activeElement.shadowRoot.activeElement; }\n    return activeElement\n  }\n\n  function addClass(node, cls) {\n    var current = node.className;\n    if (!classTest(cls).test(current)) { node.className += (current ? \" \" : \"\") + cls; }\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      { if (as[i] && !classTest(as[i]).test(b)) { b += \" \" + as[i]; } }\n    return b\n  }\n\n  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    { selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; }; }\n  else if (ie) // Suppress mysterious IE10 errors\n    { selectInput = function(node) { try { node.select(); } catch(_e) {} }; }\n\n  function bind(f) {\n    var args = Array.prototype.slice.call(arguments, 1);\n    return function(){return f.apply(null, args)}\n  }\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) { target = {}; }\n    for (var prop in obj)\n      { if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        { target[prop] = obj[prop]; } }\n    return target\n  }\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  function countColumn(string, end, tabSize, startIndex, startValue) {\n    if (end == null) {\n      end = string.search(/[^\\s\\u00a0]/);\n      if (end == -1) { end = string.length; }\n    }\n    for (var i = startIndex || 0, n = startValue || 0;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        { return n + (end - i) }\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  }\n\n  var Delayed = function() {\n    this.id = null;\n    this.f = null;\n    this.time = 0;\n    this.handler = bind(this.onTimeout, this);\n  };\n  Delayed.prototype.onTimeout = function (self) {\n    self.id = 0;\n    if (self.time <= +new Date) {\n      self.f();\n    } else {\n      setTimeout(self.handler, self.time - +new Date);\n    }\n  };\n  Delayed.prototype.set = function (ms, f) {\n    this.f = f;\n    var time = +new Date + ms;\n    if (!this.id || time < this.time) {\n      clearTimeout(this.id);\n      this.id = setTimeout(this.handler, ms);\n      this.time = time;\n    }\n  };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      { if (array[i] == elt) { return i } }\n    return -1\n  }\n\n  // Number of pixels added to scroller and sizer to hide scrollbar\n  var scrollerGap = 50;\n\n  // Returned or thrown by various protocols to signal 'I'm not\n  // handling this'.\n  var Pass = {toString: function(){return \"CodeMirror.Pass\"}};\n\n  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) { nextTab = string.length; }\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        { return pos + Math.min(skipped, goal - col) }\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) { return pos }\n    }\n  }\n\n  var spaceStrs = [\"\"];\n  function spaceStr(n) {\n    while (spaceStrs.length <= n)\n      { spaceStrs.push(lst(spaceStrs) + \" \"); }\n    return spaceStrs[n]\n  }\n\n  function lst(arr) { return arr[arr.length-1] }\n\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = f(array[i], i); }\n    return out\n  }\n\n  function insertSorted(array, value, score) {\n    var pos = 0, priority = score(value);\n    while (pos < array.length && score(array[pos]) <= priority) { pos++; }\n    array.splice(pos, 0, value);\n  }\n\n  function nothing() {}\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      nothing.prototype = base;\n      inst = new nothing();\n    }\n    if (props) { copyObj(props, inst); }\n    return inst\n  }\n\n  var nonASCIISingleCaseWordChar = /[\\u00df\\u0587\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  function isWordCharBasic(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch))\n  }\n  function isWordChar(ch, helper) {\n    if (!helper) { return isWordCharBasic(ch) }\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) { return true }\n    return helper.test(ch)\n  }\n\n  function isEmpty(obj) {\n    for (var n in obj) { if (obj.hasOwnProperty(n) && obj[n]) { return false } }\n    return true\n  }\n\n  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\n  var extendingChars = /[\\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]/;\n  function isExtendingChar(ch) { return ch.charCodeAt(0) >= 768 && extendingChars.test(ch) }\n\n  // Returns a number from the range [`0`; `str.length`] unless `pos` is outside that range.\n  function skipExtendingChars(str, pos, dir) {\n    while ((dir < 0 ? pos > 0 : pos < str.length) && isExtendingChar(str.charAt(pos))) { pos += dir; }\n    return pos\n  }\n\n  // Returns the value from the range [`from`; `to`] that satisfies\n  // `pred` and is closest to `from`. Assumes that at least `to`\n  // satisfies `pred`. Supports `from` being greater than `to`.\n  function findFirst(pred, from, to) {\n    // At any point we are certain `to` satisfies `pred`, don't know\n    // whether `from` does.\n    var dir = from > to ? -1 : 1;\n    for (;;) {\n      if (from == to) { return from }\n      var midF = (from + to) / 2, mid = dir < 0 ? Math.ceil(midF) : Math.floor(midF);\n      if (mid == from) { return pred(mid) ? from : to }\n      if (pred(mid)) { to = mid; }\n      else { from = mid + dir; }\n    }\n  }\n\n  // BIDI HELPERS\n\n  function iterateBidiSections(order, from, to, f) {\n    if (!order) { return f(from, to, \"ltr\", 0) }\n    var found = false;\n    for (var i = 0; i < order.length; ++i) {\n      var part = order[i];\n      if (part.from < to && part.to > from || from == to && part.to == from) {\n        f(Math.max(part.from, from), Math.min(part.to, to), part.level == 1 ? \"rtl\" : \"ltr\", i);\n        found = true;\n      }\n    }\n    if (!found) { f(from, to, \"ltr\"); }\n  }\n\n  var bidiOther = null;\n  function getBidiPartAt(order, ch, sticky) {\n    var found;\n    bidiOther = null;\n    for (var i = 0; i < order.length; ++i) {\n      var cur = order[i];\n      if (cur.from < ch && cur.to > ch) { return i }\n      if (cur.to == ch) {\n        if (cur.from != cur.to && sticky == \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n      if (cur.from == ch) {\n        if (cur.from != cur.to && sticky != \"before\") { found = i; }\n        else { bidiOther = i; }\n      }\n    }\n    return found != null ? found : bidiOther\n  }\n\n  // Bidirectional ordering algorithm\n  // See http://unicode.org/reports/tr9/tr9-13.html for the algorithm\n  // that this (partially) implements.\n\n  // One-char codes used for character types:\n  // L (L):   Left-to-Right\n  // R (R):   Right-to-Left\n  // r (AL):  Right-to-Left Arabic\n  // 1 (EN):  European Number\n  // + (ES):  European Number Separator\n  // % (ET):  European Number Terminator\n  // n (AN):  Arabic Number\n  // , (CS):  Common Number Separator\n  // m (NSM): Non-Spacing Mark\n  // b (BN):  Boundary Neutral\n  // s (B):   Paragraph Separator\n  // t (S):   Segment Separator\n  // w (WS):  Whitespace\n  // N (ON):  Other Neutrals\n\n  // Returns null if characters are ordered as they appear\n  // (left-to-right), or an array of sections ({from, to, level}\n  // objects) in the order in which they occur visually.\n  var bidiOrdering = (function() {\n    // Character types for codepoints 0 to 0xff\n    var lowTypes = \"bbbbbbbbbtstwsbbbbbbbbbbbbbbssstwNN%%%NNNNNN,N,N1111111111NNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNNNLLLLLLLLLLLLLLLLLLLLLLLLLLNNNNbbbbbbsbbbbbbbbbbbbbbbbbbbbbbbbbb,N%%%%NNNNLNNNNN%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6f9\n    var arabicTypes = \"nnnnnnNNr%%r,rNNmmmmmmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmnNmmmmmmrrmmNmmmmrr1111111111\";\n    function charType(code) {\n      if (code <= 0xf7) { return lowTypes.charAt(code) }\n      else if (0x590 <= code && code <= 0x5f4) { return \"R\" }\n      else if (0x600 <= code && code <= 0x6f9) { return arabicTypes.charAt(code - 0x600) }\n      else if (0x6ee <= code && code <= 0x8ac) { return \"r\" }\n      else if (0x2000 <= code && code <= 0x200b) { return \"w\" }\n      else if (code == 0x200c) { return \"b\" }\n      else { return \"L\" }\n    }\n\n    var bidiRE = /[\\u0590-\\u05f4\\u0600-\\u06ff\\u0700-\\u08ac]/;\n    var isNeutral = /[stwN]/, isStrong = /[LRr]/, countsAsLeft = /[Lb1n]/, countsAsNum = /[1n]/;\n\n    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\n\n    return function(str, direction) {\n      var outerType = direction == \"ltr\" ? \"L\" : \"R\";\n\n      if (str.length == 0 || direction == \"ltr\" && !bidiRE.test(str)) { return false }\n      var len = str.length, types = [];\n      for (var i = 0; i < len; ++i)\n        { types.push(charType(str.charCodeAt(i))); }\n\n      // W1. Examine each non-spacing mark (NSM) in the level run, and\n      // change the type of the NSM to the type of the previous\n      // character. If the NSM is at the start of the level run, it will\n      // get the type of sor.\n      for (var i$1 = 0, prev = outerType; i$1 < len; ++i$1) {\n        var type = types[i$1];\n        if (type == \"m\") { types[i$1] = prev; }\n        else { prev = type; }\n      }\n\n      // W2. Search backwards from each instance of a European number\n      // until the first strong type (R, L, AL, or sor) is found. If an\n      // AL is found, change the type of the European number to Arabic\n      // number.\n      // W3. Change all ALs to R.\n      for (var i$2 = 0, cur = outerType; i$2 < len; ++i$2) {\n        var type$1 = types[i$2];\n        if (type$1 == \"1\" && cur == \"r\") { types[i$2] = \"n\"; }\n        else if (isStrong.test(type$1)) { cur = type$1; if (type$1 == \"r\") { types[i$2] = \"R\"; } }\n      }\n\n      // W4. A single European separator between two European numbers\n      // changes to a European number. A single common separator between\n      // two numbers of the same type changes to that type.\n      for (var i$3 = 1, prev$1 = types[0]; i$3 < len - 1; ++i$3) {\n        var type$2 = types[i$3];\n        if (type$2 == \"+\" && prev$1 == \"1\" && types[i$3+1] == \"1\") { types[i$3] = \"1\"; }\n        else if (type$2 == \",\" && prev$1 == types[i$3+1] &&\n                 (prev$1 == \"1\" || prev$1 == \"n\")) { types[i$3] = prev$1; }\n        prev$1 = type$2;\n      }\n\n      // W5. A sequence of European terminators adjacent to European\n      // numbers changes to all European numbers.\n      // W6. Otherwise, separators and terminators change to Other\n      // Neutral.\n      for (var i$4 = 0; i$4 < len; ++i$4) {\n        var type$3 = types[i$4];\n        if (type$3 == \",\") { types[i$4] = \"N\"; }\n        else if (type$3 == \"%\") {\n          var end = (void 0);\n          for (end = i$4 + 1; end < len && types[end] == \"%\"; ++end) {}\n          var replace = (i$4 && types[i$4-1] == \"!\") || (end < len && types[end] == \"1\") ? \"1\" : \"N\";\n          for (var j = i$4; j < end; ++j) { types[j] = replace; }\n          i$4 = end - 1;\n        }\n      }\n\n      // W7. Search backwards from each instance of a European number\n      // until the first strong type (R, L, or sor) is found. If an L is\n      // found, then change the type of the European number to L.\n      for (var i$5 = 0, cur$1 = outerType; i$5 < len; ++i$5) {\n        var type$4 = types[i$5];\n        if (cur$1 == \"L\" && type$4 == \"1\") { types[i$5] = \"L\"; }\n        else if (isStrong.test(type$4)) { cur$1 = type$4; }\n      }\n\n      // N1. A sequence of neutrals takes the direction of the\n      // surrounding strong text if the text on both sides has the same\n      // direction. European and Arabic numbers act as if they were R in\n      // terms of their influence on neutrals. Start-of-level-run (sor)\n      // and end-of-level-run (eor) are used at level run boundaries.\n      // N2. Any remaining neutrals take the embedding direction.\n      for (var i$6 = 0; i$6 < len; ++i$6) {\n        if (isNeutral.test(types[i$6])) {\n          var end$1 = (void 0);\n          for (end$1 = i$6 + 1; end$1 < len && isNeutral.test(types[end$1]); ++end$1) {}\n          var before = (i$6 ? types[i$6-1] : outerType) == \"L\";\n          var after = (end$1 < len ? types[end$1] : outerType) == \"L\";\n          var replace$1 = before == after ? (before ? \"L\" : \"R\") : outerType;\n          for (var j$1 = i$6; j$1 < end$1; ++j$1) { types[j$1] = replace$1; }\n          i$6 = end$1 - 1;\n        }\n      }\n\n      // Here we depart from the documented algorithm, in order to avoid\n      // building up an actual levels array. Since there are only three\n      // levels (0, 1, 2) in an implementation that doesn't take\n      // explicit embedding into account, we can build up the order on\n      // the fly, without following the level-based algorithm.\n      var order = [], m;\n      for (var i$7 = 0; i$7 < len;) {\n        if (countsAsLeft.test(types[i$7])) {\n          var start = i$7;\n          for (++i$7; i$7 < len && countsAsLeft.test(types[i$7]); ++i$7) {}\n          order.push(new BidiSpan(0, start, i$7));\n        } else {\n          var pos = i$7, at = order.length, isRTL = direction == \"rtl\" ? 1 : 0;\n          for (++i$7; i$7 < len && types[i$7] != \"L\"; ++i$7) {}\n          for (var j$2 = pos; j$2 < i$7;) {\n            if (countsAsNum.test(types[j$2])) {\n              if (pos < j$2) { order.splice(at, 0, new BidiSpan(1, pos, j$2)); at += isRTL; }\n              var nstart = j$2;\n              for (++j$2; j$2 < i$7 && countsAsNum.test(types[j$2]); ++j$2) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j$2));\n              at += isRTL;\n              pos = j$2;\n            } else { ++j$2; }\n          }\n          if (pos < i$7) { order.splice(at, 0, new BidiSpan(1, pos, i$7)); }\n        }\n      }\n      if (direction == \"ltr\") {\n        if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n          order[0].from = m[0].length;\n          order.unshift(new BidiSpan(0, 0, m[0].length));\n        }\n        if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n          lst(order).to -= m[0].length;\n          order.push(new BidiSpan(0, len - m[0].length, len));\n        }\n      }\n\n      return direction == \"rtl\" ? order.reverse() : order\n    }\n  })();\n\n  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\n  function getOrder(line, direction) {\n    var order = line.order;\n    if (order == null) { order = line.order = bidiOrdering(line.text, direction); }\n    return order\n  }\n\n  // EVENT HANDLING\n\n  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var noHandlers = [];\n\n  var on = function(emitter, type, f) {\n    if (emitter.addEventListener) {\n      emitter.addEventListener(type, f, false);\n    } else if (emitter.attachEvent) {\n      emitter.attachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers || (emitter._handlers = {});\n      map[type] = (map[type] || noHandlers).concat(f);\n    }\n  };\n\n  function getHandlers(emitter, type) {\n    return emitter._handlers && emitter._handlers[type] || noHandlers\n  }\n\n  function off(emitter, type, f) {\n    if (emitter.removeEventListener) {\n      emitter.removeEventListener(type, f, false);\n    } else if (emitter.detachEvent) {\n      emitter.detachEvent(\"on\" + type, f);\n    } else {\n      var map = emitter._handlers, arr = map && map[type];\n      if (arr) {\n        var index = indexOf(arr, f);\n        if (index > -1)\n          { map[type] = arr.slice(0, index).concat(arr.slice(index + 1)); }\n      }\n    }\n  }\n\n  function signal(emitter, type /*, values...*/) {\n    var handlers = getHandlers(emitter, type);\n    if (!handlers.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2);\n    for (var i = 0; i < handlers.length; ++i) { handlers[i].apply(null, args); }\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\n  function signalDOMEvent(cm, e, override) {\n    if (typeof e == \"string\")\n      { e = {type: e, preventDefault: function() { this.defaultPrevented = true; }}; }\n    signal(cm, override || e.type, cm, e);\n    return e_defaultPrevented(e) || e.codemirrorIgnore\n  }\n\n  function signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) { return }\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) { if (indexOf(set, arr[i]) == -1)\n      { set.push(arr[i]); } }\n  }\n\n  function hasHandler(emitter, type) {\n    return getHandlers(emitter, type).length > 0\n  }\n\n  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\n  function eventMixin(ctor) {\n    ctor.prototype.on = function(type, f) {on(this, type, f);};\n    ctor.prototype.off = function(type, f) {off(this, type, f);};\n  }\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  function e_preventDefault(e) {\n    if (e.preventDefault) { e.preventDefault(); }\n    else { e.returnValue = false; }\n  }\n  function e_stopPropagation(e) {\n    if (e.stopPropagation) { e.stopPropagation(); }\n    else { e.cancelBubble = true; }\n  }\n  function e_defaultPrevented(e) {\n    return e.defaultPrevented != null ? e.defaultPrevented : e.returnValue == false\n  }\n  function e_stop(e) {e_preventDefault(e); e_stopPropagation(e);}\n\n  function e_target(e) {return e.target || e.srcElement}\n  function e_button(e) {\n    var b = e.which;\n    if (b == null) {\n      if (e.button & 1) { b = 1; }\n      else if (e.button & 2) { b = 3; }\n      else if (e.button & 4) { b = 2; }\n    }\n    if (mac && e.ctrlKey && b == 1) { b = 3; }\n    return b\n  }\n\n  // Detect drag-and-drop\n  var dragAndDrop = function() {\n    // There is *some* kind of drag-and-drop support in IE6-8, but I\n    // couldn't get it to work yet.\n    if (ie && ie_version < 9) { return false }\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div\n  }();\n\n  var zwspSupported;\n  function zeroWidthElement(measure) {\n    if (zwspSupported == null) {\n      var test = elt(\"span\", \"\\u200b\");\n      removeChildrenAndAdd(measure, elt(\"span\", [test, document.createTextNode(\"x\")]));\n      if (measure.firstChild.offsetHeight != 0)\n        { zwspSupported = test.offsetWidth <= 1 && test.offsetHeight > 2 && !(ie && ie_version < 8); }\n    }\n    var node = zwspSupported ? elt(\"span\", \"\\u200b\") :\n      elt(\"span\", \"\\u00a0\", null, \"display: inline-block; width: 1px; margin-right: -1px\");\n    node.setAttribute(\"cm-text\", \"\");\n    return node\n  }\n\n  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) { return badBidiRects }\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    removeChildren(measure);\n    if (!r0 || r0.left == r0.right) { return false } // Safari returns null in some cases (#2780)\n    return badBidiRects = (r1.right - r0.right < 3)\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLinesAuto = \"\\n\\nb\".split(/\\n/).length != 3 ? function (string) {\n    var pos = 0, result = [], l = string.length;\n    while (pos <= l) {\n      var nl = string.indexOf(\"\\n\", pos);\n      if (nl == -1) { nl = string.length; }\n      var line = string.slice(pos, string.charAt(nl - 1) == \"\\r\" ? nl - 1 : nl);\n      var rt = line.indexOf(\"\\r\");\n      if (rt != -1) {\n        result.push(line.slice(0, rt));\n        pos += rt + 1;\n      } else {\n        result.push(line);\n        pos = nl + 1;\n      }\n    }\n    return result\n  } : function (string) { return string.split(/\\r\\n?|\\n/); };\n\n  var hasSelection = window.getSelection ? function (te) {\n    try { return te.selectionStart != te.selectionEnd }\n    catch(e) { return false }\n  } : function (te) {\n    var range;\n    try {range = te.ownerDocument.selection.createRange();}\n    catch(e) {}\n    if (!range || range.parentElement() != te) { return false }\n    return range.compareEndPoints(\"StartToEnd\", range) != 0\n  };\n\n  var hasCopyEvent = (function () {\n    var e = elt(\"div\");\n    if (\"oncopy\" in e) { return true }\n    e.setAttribute(\"oncopy\", \"return;\");\n    return typeof e.oncopy == \"function\"\n  })();\n\n  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) { return badZoomedRects }\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1\n  }\n\n  // Known modes, by name and by MIME\n  var modes = {}, mimeModes = {};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  function defineMode(name, mode) {\n    if (arguments.length > 2)\n      { mode.dependencies = Array.prototype.slice.call(arguments, 2); }\n    modes[name] = mode;\n  }\n\n  function defineMIME(mime, spec) {\n    mimeModes[mime] = spec;\n  }\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\n  function resolveMode(spec) {\n    if (typeof spec == \"string\" && mimeModes.hasOwnProperty(spec)) {\n      spec = mimeModes[spec];\n    } else if (spec && typeof spec.name == \"string\" && mimeModes.hasOwnProperty(spec.name)) {\n      var found = mimeModes[spec.name];\n      if (typeof found == \"string\") { found = {name: found}; }\n      spec = createObj(found, spec);\n      spec.name = found.name;\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+xml$/.test(spec)) {\n      return resolveMode(\"application/xml\")\n    } else if (typeof spec == \"string\" && /^[\\w\\-]+\\/[\\w\\-]+\\+json$/.test(spec)) {\n      return resolveMode(\"application/json\")\n    }\n    if (typeof spec == \"string\") { return {name: spec} }\n    else { return spec || {name: \"null\"} }\n  }\n\n  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\n  function getMode(options, spec) {\n    spec = resolveMode(spec);\n    var mfactory = modes[spec.name];\n    if (!mfactory) { return getMode(options, \"text/plain\") }\n    var modeObj = mfactory(options, spec);\n    if (modeExtensions.hasOwnProperty(spec.name)) {\n      var exts = modeExtensions[spec.name];\n      for (var prop in exts) {\n        if (!exts.hasOwnProperty(prop)) { continue }\n        if (modeObj.hasOwnProperty(prop)) { modeObj[\"_\" + prop] = modeObj[prop]; }\n        modeObj[prop] = exts[prop];\n      }\n    }\n    modeObj.name = spec.name;\n    if (spec.helperType) { modeObj.helperType = spec.helperType; }\n    if (spec.modeProps) { for (var prop$1 in spec.modeProps)\n      { modeObj[prop$1] = spec.modeProps[prop$1]; } }\n\n    return modeObj\n  }\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\n  var modeExtensions = {};\n  function extendMode(mode, properties) {\n    var exts = modeExtensions.hasOwnProperty(mode) ? modeExtensions[mode] : (modeExtensions[mode] = {});\n    copyObj(properties, exts);\n  }\n\n  function copyState(mode, state) {\n    if (state === true) { return state }\n    if (mode.copyState) { return mode.copyState(state) }\n    var nstate = {};\n    for (var n in state) {\n      var val = state[n];\n      if (val instanceof Array) { val = val.concat([]); }\n      nstate[n] = val;\n    }\n    return nstate\n  }\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\n  function innerMode(mode, state) {\n    var info;\n    while (mode.innerMode) {\n      info = mode.innerMode(state);\n      if (!info || info.mode == mode) { break }\n      state = info.state;\n      mode = info.mode;\n    }\n    return info || {mode: mode, state: state}\n  }\n\n  function startState(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true\n  }\n\n  // STRING STREAM\n\n  // Fed to the mode parsers, provides helper functions to make\n  // parsers more succinct.\n\n  var StringStream = function(string, tabSize, lineOracle) {\n    this.pos = this.start = 0;\n    this.string = string;\n    this.tabSize = tabSize || 8;\n    this.lastColumnPos = this.lastColumnValue = 0;\n    this.lineStart = 0;\n    this.lineOracle = lineOracle;\n  };\n\n  StringStream.prototype.eol = function () {return this.pos >= this.string.length};\n  StringStream.prototype.sol = function () {return this.pos == this.lineStart};\n  StringStream.prototype.peek = function () {return this.string.charAt(this.pos) || undefined};\n  StringStream.prototype.next = function () {\n    if (this.pos < this.string.length)\n      { return this.string.charAt(this.pos++) }\n  };\n  StringStream.prototype.eat = function (match) {\n    var ch = this.string.charAt(this.pos);\n    var ok;\n    if (typeof match == \"string\") { ok = ch == match; }\n    else { ok = ch && (match.test ? match.test(ch) : match(ch)); }\n    if (ok) {++this.pos; return ch}\n  };\n  StringStream.prototype.eatWhile = function (match) {\n    var start = this.pos;\n    while (this.eat(match)){}\n    return this.pos > start\n  };\n  StringStream.prototype.eatSpace = function () {\n    var start = this.pos;\n    while (/[\\s\\u00a0]/.test(this.string.charAt(this.pos))) { ++this.pos; }\n    return this.pos > start\n  };\n  StringStream.prototype.skipToEnd = function () {this.pos = this.string.length;};\n  StringStream.prototype.skipTo = function (ch) {\n    var found = this.string.indexOf(ch, this.pos);\n    if (found > -1) {this.pos = found; return true}\n  };\n  StringStream.prototype.backUp = function (n) {this.pos -= n;};\n  StringStream.prototype.column = function () {\n    if (this.lastColumnPos < this.start) {\n      this.lastColumnValue = countColumn(this.string, this.start, this.tabSize, this.lastColumnPos, this.lastColumnValue);\n      this.lastColumnPos = this.start;\n    }\n    return this.lastColumnValue - (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.indentation = function () {\n    return countColumn(this.string, null, this.tabSize) -\n      (this.lineStart ? countColumn(this.string, this.lineStart, this.tabSize) : 0)\n  };\n  StringStream.prototype.match = function (pattern, consume, caseInsensitive) {\n    if (typeof pattern == \"string\") {\n      var cased = function (str) { return caseInsensitive ? str.toLowerCase() : str; };\n      var substr = this.string.substr(this.pos, pattern.length);\n      if (cased(substr) == cased(pattern)) {\n        if (consume !== false) { this.pos += pattern.length; }\n        return true\n      }\n    } else {\n      var match = this.string.slice(this.pos).match(pattern);\n      if (match && match.index > 0) { return null }\n      if (match && consume !== false) { this.pos += match[0].length; }\n      return match\n    }\n  };\n  StringStream.prototype.current = function (){return this.string.slice(this.start, this.pos)};\n  StringStream.prototype.hideFirstChars = function (n, inner) {\n    this.lineStart += n;\n    try { return inner() }\n    finally { this.lineStart -= n; }\n  };\n  StringStream.prototype.lookAhead = function (n) {\n    var oracle = this.lineOracle;\n    return oracle && oracle.lookAhead(n)\n  };\n  StringStream.prototype.baseToken = function () {\n    var oracle = this.lineOracle;\n    return oracle && oracle.baseToken(this.pos)\n  };\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) { throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\") }\n    var chunk = doc;\n    while (!chunk.lines) {\n      for (var i = 0;; ++i) {\n        var child = chunk.children[i], sz = child.chunkSize();\n        if (n < sz) { chunk = child; break }\n        n -= sz;\n      }\n    }\n    return chunk.lines[n]\n  }\n\n  // Get the part of a document between two positions, as an array of\n  // strings.\n  function getBetween(doc, start, end) {\n    var out = [], n = start.line;\n    doc.iter(start.line, end.line + 1, function (line) {\n      var text = line.text;\n      if (n == end.line) { text = text.slice(0, end.ch); }\n      if (n == start.line) { text = text.slice(start.ch); }\n      out.push(text);\n      ++n;\n    });\n    return out\n  }\n  // Get the lines between from and to, as array of strings.\n  function getLines(doc, from, to) {\n    var out = [];\n    doc.iter(from, to, function (line) { out.push(line.text); }); // iter aborts when callback returns truthy value\n    return out\n  }\n\n  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) { for (var n = line; n; n = n.parent) { n.height += diff; } }\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\n  function lineNo(line) {\n    if (line.parent == null) { return null }\n    var cur = line.parent, no = indexOf(cur.lines, line);\n    for (var chunk = cur.parent; chunk; cur = chunk, chunk = chunk.parent) {\n      for (var i = 0;; ++i) {\n        if (chunk.children[i] == cur) { break }\n        no += chunk.children[i].chunkSize();\n      }\n    }\n    return no + cur.first\n  }\n\n  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i$1 = 0; i$1 < chunk.children.length; ++i$1) {\n        var child = chunk.children[i$1], ch = child.height;\n        if (h < ch) { chunk = child; continue outer }\n        h -= ch;\n        n += child.chunkSize();\n      }\n      return n\n    } while (!chunk.lines)\n    var i = 0;\n    for (; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i], lh = line.height;\n      if (h < lh) { break }\n      h -= lh;\n    }\n    return n + i\n  }\n\n  function isLine(doc, l) {return l >= doc.first && l < doc.first + doc.size}\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber))\n  }\n\n  // A Pos instance represents a position within the text.\n  function Pos(line, ch, sticky) {\n    if ( sticky === void 0 ) sticky = null;\n\n    if (!(this instanceof Pos)) { return new Pos(line, ch, sticky) }\n    this.line = line;\n    this.ch = ch;\n    this.sticky = sticky;\n  }\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  function cmp(a, b) { return a.line - b.line || a.ch - b.ch }\n\n  function equalCursorPos(a, b) { return a.sticky == b.sticky && cmp(a, b) == 0 }\n\n  function copyPos(x) {return Pos(x.line, x.ch)}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\n  function clipLine(doc, n) {return Math.max(doc.first, Math.min(n, doc.first + doc.size - 1))}\n  function clipPos(doc, pos) {\n    if (pos.line < doc.first) { return Pos(doc.first, 0) }\n    var last = doc.first + doc.size - 1;\n    if (pos.line > last) { return Pos(last, getLine(doc, last).text.length) }\n    return clipToLen(pos, getLine(doc, pos.line).text.length)\n  }\n  function clipToLen(pos, linelen) {\n    var ch = pos.ch;\n    if (ch == null || ch > linelen) { return Pos(pos.line, linelen) }\n    else if (ch < 0) { return Pos(pos.line, 0) }\n    else { return pos }\n  }\n  function clipPosArray(doc, array) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) { out[i] = clipPos(doc, array[i]); }\n    return out\n  }\n\n  var SavedContext = function(state, lookAhead) {\n    this.state = state;\n    this.lookAhead = lookAhead;\n  };\n\n  var Context = function(doc, state, line, lookAhead) {\n    this.state = state;\n    this.doc = doc;\n    this.line = line;\n    this.maxLookAhead = lookAhead || 0;\n    this.baseTokens = null;\n    this.baseTokenPos = 1;\n  };\n\n  Context.prototype.lookAhead = function (n) {\n    var line = this.doc.getLine(this.line + n);\n    if (line != null && n > this.maxLookAhead) { this.maxLookAhead = n; }\n    return line\n  };\n\n  Context.prototype.baseToken = function (n) {\n    if (!this.baseTokens) { return null }\n    while (this.baseTokens[this.baseTokenPos] <= n)\n      { this.baseTokenPos += 2; }\n    var type = this.baseTokens[this.baseTokenPos + 1];\n    return {type: type && type.replace(/( |^)overlay .*/, \"\"),\n            size: this.baseTokens[this.baseTokenPos] - n}\n  };\n\n  Context.prototype.nextLine = function () {\n    this.line++;\n    if (this.maxLookAhead > 0) { this.maxLookAhead--; }\n  };\n\n  Context.fromSaved = function (doc, saved, line) {\n    if (saved instanceof SavedContext)\n      { return new Context(doc, copyState(doc.mode, saved.state), line, saved.lookAhead) }\n    else\n      { return new Context(doc, copyState(doc.mode, saved), line) }\n  };\n\n  Context.prototype.save = function (copy) {\n    var state = copy !== false ? copyState(this.doc.mode, this.state) : this.state;\n    return this.maxLookAhead > 0 ? new SavedContext(state, this.maxLookAhead) : state\n  };\n\n\n  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\n  function highlightLine(cm, line, context, forceToEnd) {\n    // A styles array always starts with a number identifying the\n    // mode/overlays that it is based on (for easy invalidation).\n    var st = [cm.state.modeGen], lineClasses = {};\n    // Compute the base array of styles\n    runMode(cm, line.text, cm.doc.mode, context, function (end, style) { return st.push(end, style); },\n            lineClasses, forceToEnd);\n    var state = context.state;\n\n    // Run overlays, adjust style array.\n    var loop = function ( o ) {\n      context.baseTokens = st;\n      var overlay = cm.state.overlays[o], i = 1, at = 0;\n      context.state = true;\n      runMode(cm, line.text, overlay.mode, context, function (end, style) {\n        var start = i;\n        // Ensure there's a token end at the current position, and that i points at it\n        while (at < end) {\n          var i_end = st[i];\n          if (i_end > end)\n            { st.splice(i, 1, end, st[i+1], i_end); }\n          i += 2;\n          at = Math.min(end, i_end);\n        }\n        if (!style) { return }\n        if (overlay.opaque) {\n          st.splice(start, i - start, end, \"overlay \" + style);\n          i = start + 2;\n        } else {\n          for (; start < i; start += 2) {\n            var cur = st[start+1];\n            st[start+1] = (cur ? cur + \" \" : \"\") + \"overlay \" + style;\n          }\n        }\n      }, lineClasses);\n      context.state = state;\n      context.baseTokens = null;\n      context.baseTokenPos = 1;\n    };\n\n    for (var o = 0; o < cm.state.overlays.length; ++o) loop( o );\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null}\n  }\n\n  function getLineStyles(cm, line, updateFrontier) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var context = getContextBefore(cm, lineNo(line));\n      var resetState = line.text.length > cm.options.maxHighlightLength && copyState(cm.doc.mode, context.state);\n      var result = highlightLine(cm, line, context);\n      if (resetState) { context.state = resetState; }\n      line.stateAfter = context.save(!resetState);\n      line.styles = result.styles;\n      if (result.classes) { line.styleClasses = result.classes; }\n      else if (line.styleClasses) { line.styleClasses = null; }\n      if (updateFrontier === cm.doc.highlightFrontier)\n        { cm.doc.modeFrontier = Math.max(cm.doc.modeFrontier, ++cm.doc.highlightFrontier); }\n    }\n    return line.styles\n  }\n\n  function getContextBefore(cm, n, precise) {\n    var doc = cm.doc, display = cm.display;\n    if (!doc.mode.startState) { return new Context(doc, true, n) }\n    var start = findStartLine(cm, n, precise);\n    var saved = start > doc.first && getLine(doc, start - 1).stateAfter;\n    var context = saved ? Context.fromSaved(doc, saved, start) : new Context(doc, startState(doc.mode), start);\n\n    doc.iter(start, n, function (line) {\n      processLine(cm, line.text, context);\n      var pos = context.line;\n      line.stateAfter = pos == n - 1 || pos % 5 == 0 || pos >= display.viewFrom && pos < display.viewTo ? context.save() : null;\n      context.nextLine();\n    });\n    if (precise) { doc.modeFrontier = context.line; }\n    return context\n  }\n\n  // Lightweight form of highlight -- proceed over this line and\n  // update state, but don't save a style array. Used for lines that\n  // aren't currently visible.\n  function processLine(cm, text, context, startAt) {\n    var mode = cm.doc.mode;\n    var stream = new StringStream(text, cm.options.tabSize, context);\n    stream.start = stream.pos = startAt || 0;\n    if (text == \"\") { callBlankLine(mode, context.state); }\n    while (!stream.eol()) {\n      readToken(mode, stream, context.state);\n      stream.start = stream.pos;\n    }\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) { return mode.blankLine(state) }\n    if (!mode.innerMode) { return }\n    var inner = innerMode(mode, state);\n    if (inner.mode.blankLine) { return inner.mode.blankLine(inner.state) }\n  }\n\n  function readToken(mode, stream, state, inner) {\n    for (var i = 0; i < 10; i++) {\n      if (inner) { inner[0] = innerMode(mode, state).mode; }\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) { return style }\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\")\n  }\n\n  var Token = function(stream, type, state) {\n    this.start = stream.start; this.end = stream.pos;\n    this.string = stream.current();\n    this.type = type || null;\n    this.state = state;\n  };\n\n  // Utility for getTokenAt and getLineTokens\n  function takeToken(cm, pos, precise, asArray) {\n    var doc = cm.doc, mode = doc.mode, style;\n    pos = clipPos(doc, pos);\n    var line = getLine(doc, pos.line), context = getContextBefore(cm, pos.line, precise);\n    var stream = new StringStream(line.text, cm.options.tabSize, context), tokens;\n    if (asArray) { tokens = []; }\n    while ((asArray || stream.pos < pos.ch) && !stream.eol()) {\n      stream.start = stream.pos;\n      style = readToken(mode, stream, context.state);\n      if (asArray) { tokens.push(new Token(stream, style, copyState(doc.mode, context.state))); }\n    }\n    return asArray ? tokens : new Token(stream, style, context.state)\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) { for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) { break }\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        { output[prop] = lineClass[2]; }\n      else if (!(new RegExp(\"(?:^|\\\\s)\" + lineClass[2] + \"(?:$|\\\\s)\")).test(output[prop]))\n        { output[prop] += \" \" + lineClass[2]; }\n    } }\n    return type\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, context, f, lineClasses, forceToEnd) {\n    var flattenSpans = mode.flattenSpans;\n    if (flattenSpans == null) { flattenSpans = cm.options.flattenSpans; }\n    var curStart = 0, curStyle = null;\n    var stream = new StringStream(text, cm.options.tabSize, context), style;\n    var inner = cm.options.addModeClass && [null];\n    if (text == \"\") { extractLineClasses(callBlankLine(mode, context.state), lineClasses); }\n    while (!stream.eol()) {\n      if (stream.pos > cm.options.maxHighlightLength) {\n        flattenSpans = false;\n        if (forceToEnd) { processLine(cm, text, context, stream.pos); }\n        stream.pos = text.length;\n        style = null;\n      } else {\n        style = extractLineClasses(readToken(mode, stream, context.state, inner), lineClasses);\n      }\n      if (inner) {\n        var mName = inner[0].name;\n        if (mName) { style = \"m-\" + (style ? mName + \" \" + style : mName); }\n      }\n      if (!flattenSpans || curStyle != style) {\n        while (curStart < stream.start) {\n          curStart = Math.min(stream.start, curStart + 5000);\n          f(curStart, curStyle);\n        }\n        curStyle = style;\n      }\n      stream.start = stream.pos;\n    }\n    while (curStart < stream.pos) {\n      // Webkit seems to refuse to render text nodes longer than 57444\n      // characters, and returns inaccurate measurements in nodes\n      // starting around 5000 chars.\n      var pos = Math.min(stream.pos, curStart + 5000);\n      f(pos, curStyle);\n      curStart = pos;\n    }\n  }\n\n  // Finds the line to start with when starting a parse. Tries to\n  // find a line with a stateAfter, so that it can start with a\n  // valid state. If that fails, it returns the line with the\n  // smallest indentation, which tends to need the least context to\n  // parse correctly.\n  function findStartLine(cm, n, precise) {\n    var minindent, minline, doc = cm.doc;\n    var lim = precise ? -1 : n - (cm.doc.mode.innerMode ? 1000 : 100);\n    for (var search = n; search > lim; --search) {\n      if (search <= doc.first) { return doc.first }\n      var line = getLine(doc, search - 1), after = line.stateAfter;\n      if (after && (!precise || search + (after instanceof SavedContext ? after.lookAhead : 0) <= doc.modeFrontier))\n        { return search }\n      var indented = countColumn(line.text, null, cm.options.tabSize);\n      if (minline == null || minindent > indented) {\n        minline = search - 1;\n        minindent = indented;\n      }\n    }\n    return minline\n  }\n\n  function retreatFrontier(doc, n) {\n    doc.modeFrontier = Math.min(doc.modeFrontier, n);\n    if (doc.highlightFrontier < n - 10) { return }\n    var start = doc.first;\n    for (var line = n - 1; line > start; line--) {\n      var saved = getLine(doc, line).stateAfter;\n      // change is on 3\n      // state on line 1 looked ahead 2 -- so saw 3\n      // test 1 + 2 < 3 should cover this\n      if (saved && (!(saved instanceof SavedContext) || line + saved.lookAhead < n)) {\n        start = line + 1;\n        break\n      }\n    }\n    doc.highlightFrontier = Math.min(doc.highlightFrontier, start);\n  }\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  function seeReadOnlySpans() {\n    sawReadOnlySpans = true;\n  }\n\n  function seeCollapsedSpans() {\n    sawCollapsedSpans = true;\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\n  function getMarkedSpanFor(spans, marker) {\n    if (spans) { for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.marker == marker) { return span }\n    } }\n  }\n\n  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\n  function removeMarkedSpan(spans, span) {\n    var r;\n    for (var i = 0; i < spans.length; ++i)\n      { if (spans[i] != span) { (r || (r = [])).push(spans[i]); } }\n    return r\n  }\n\n  // Add a span to a line.\n  function addMarkedSpan(line, span, op) {\n    var inThisOp = op && window.WeakSet && (op.markedSpans || (op.markedSpans = new WeakSet));\n    if (inThisOp && inThisOp.has(line.markedSpans)) {\n      line.markedSpans.push(span);\n    } else {\n      line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n      if (inThisOp) { inThisOp.add(line.markedSpans); }\n    }\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\n  function markedSpansBefore(old, startCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= startCh : span.from < startCh);\n      if (startsBefore || span.from == startCh && marker.type == \"bookmark\" && (!isInsert || !span.marker.insertLeft)) {\n        var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= startCh : span.to > startCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    } }\n    return nw\n  }\n  function markedSpansAfter(old, endCh, isInsert) {\n    var nw;\n    if (old) { for (var i = 0; i < old.length; ++i) {\n      var span = old[i], marker = span.marker;\n      var endsAfter = span.to == null || (marker.inclusiveRight ? span.to >= endCh : span.to > endCh);\n      if (endsAfter || span.from == endCh && marker.type == \"bookmark\" && (!isInsert || span.marker.insertLeft)) {\n        var startsBefore = span.from == null || (marker.inclusiveLeft ? span.from <= endCh : span.from < endCh)\n        ;(nw || (nw = [])).push(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    } }\n    return nw\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\n  function stretchSpansOverChange(doc, change) {\n    if (change.full) { return null }\n    var oldFirst = isLine(doc, change.from.line) && getLine(doc, change.from.line).markedSpans;\n    var oldLast = isLine(doc, change.to.line) && getLine(doc, change.to.line).markedSpans;\n    if (!oldFirst && !oldLast) { return null }\n\n    var startCh = change.from.ch, endCh = change.to.ch, isInsert = cmp(change.from, change.to) == 0;\n    // Get the spans that 'stick out' on both sides\n    var first = markedSpansBefore(oldFirst, startCh, isInsert);\n    var last = markedSpansAfter(oldLast, endCh, isInsert);\n\n    // Next, merge those two ends\n    var sameLine = change.text.length == 1, offset = lst(change.text).length + (sameLine ? startCh : 0);\n    if (first) {\n      // Fix up .to properties of first\n      for (var i = 0; i < first.length; ++i) {\n        var span = first[i];\n        if (span.to == null) {\n          var found = getMarkedSpanFor(last, span.marker);\n          if (!found) { span.to = startCh; }\n          else if (sameLine) { span.to = found.to == null ? null : found.to + offset; }\n        }\n      }\n    }\n    if (last) {\n      // Fix up .from in last (or move them into first in case of sameLine)\n      for (var i$1 = 0; i$1 < last.length; ++i$1) {\n        var span$1 = last[i$1];\n        if (span$1.to != null) { span$1.to += offset; }\n        if (span$1.from == null) {\n          var found$1 = getMarkedSpanFor(first, span$1.marker);\n          if (!found$1) {\n            span$1.from = offset;\n            if (sameLine) { (first || (first = [])).push(span$1); }\n          }\n        } else {\n          span$1.from += offset;\n          if (sameLine) { (first || (first = [])).push(span$1); }\n        }\n      }\n    }\n    // Make sure we didn't create any zero-length spans\n    if (first) { first = clearEmptySpans(first); }\n    if (last && last != first) { last = clearEmptySpans(last); }\n\n    var newMarkers = [first];\n    if (!sameLine) {\n      // Fill gap with whole-line-spans\n      var gap = change.text.length - 2, gapMarkers;\n      if (gap > 0 && first)\n        { for (var i$2 = 0; i$2 < first.length; ++i$2)\n          { if (first[i$2].to == null)\n            { (gapMarkers || (gapMarkers = [])).push(new MarkedSpan(first[i$2].marker, null, null)); } } }\n      for (var i$3 = 0; i$3 < gap; ++i$3)\n        { newMarkers.push(gapMarkers); }\n      newMarkers.push(last);\n    }\n    return newMarkers\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\n  function clearEmptySpans(spans) {\n    for (var i = 0; i < spans.length; ++i) {\n      var span = spans[i];\n      if (span.from != null && span.from == span.to && span.marker.clearWhenEmpty !== false)\n        { spans.splice(i--, 1); }\n    }\n    if (!spans.length) { return null }\n    return spans\n  }\n\n  // Used to 'clip' out readOnly ranges when making a change.\n  function removeReadOnlyRanges(doc, from, to) {\n    var markers = null;\n    doc.iter(from.line, to.line + 1, function (line) {\n      if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n        var mark = line.markedSpans[i].marker;\n        if (mark.readOnly && (!markers || indexOf(markers, mark) == -1))\n          { (markers || (markers = [])).push(mark); }\n      } }\n    });\n    if (!markers) { return null }\n    var parts = [{from: from, to: to}];\n    for (var i = 0; i < markers.length; ++i) {\n      var mk = markers[i], m = mk.find(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) { continue }\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          { newParts.push({from: p.from, to: m.from}); }\n        if (dto > 0 || !mk.inclusiveRight && !dto)\n          { newParts.push({from: m.to, to: p.to}); }\n        parts.splice.apply(parts, newParts);\n        j += newParts.length - 3;\n      }\n    }\n    return parts\n  }\n\n  // Connect or disconnect spans from a line.\n  function detachMarkedSpans(line) {\n    var spans = line.markedSpans;\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.detachLine(line); }\n    line.markedSpans = null;\n  }\n  function attachMarkedSpans(line, spans) {\n    if (!spans) { return }\n    for (var i = 0; i < spans.length; ++i)\n      { spans[i].marker.attachLine(line); }\n    line.markedSpans = spans;\n  }\n\n  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0 }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0 }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\n  function compareCollapsedMarkers(a, b) {\n    var lenDiff = a.lines.length - b.lines.length;\n    if (lenDiff != 0) { return lenDiff }\n    var aPos = a.find(), bPos = b.find();\n    var fromCmp = cmp(aPos.from, bPos.from) || extraLeft(a) - extraLeft(b);\n    if (fromCmp) { return -fromCmp }\n    var toCmp = cmp(aPos.to, bPos.to) || extraRight(a) - extraRight(b);\n    if (toCmp) { return toCmp }\n    return b.id - a.id\n  }\n\n  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\n  function collapsedSpanAtSide(line, start) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (sp.marker.collapsed && (start ? sp.from : sp.to) == null &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0))\n        { found = sp.marker; }\n    } }\n    return found\n  }\n  function collapsedSpanAtStart(line) { return collapsedSpanAtSide(line, true) }\n  function collapsedSpanAtEnd(line) { return collapsedSpanAtSide(line, false) }\n\n  function collapsedSpanAround(line, ch) {\n    var sps = sawCollapsedSpans && line.markedSpans, found;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (sp.marker.collapsed && (sp.from == null || sp.from < ch) && (sp.to == null || sp.to > ch) &&\n          (!found || compareCollapsedMarkers(found, sp.marker) < 0)) { found = sp.marker; }\n    } }\n    return found\n  }\n\n  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\n  function conflictingCollapsedRange(doc, lineNo, from, to, marker) {\n    var line = getLine(doc, lineNo);\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var i = 0; i < sps.length; ++i) {\n      var sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      var found = sp.marker.find(0);\n      var fromCmp = cmp(found.from, from) || extraLeft(sp.marker) - extraLeft(marker);\n      var toCmp = cmp(found.to, to) || extraRight(sp.marker) - extraRight(marker);\n      if (fromCmp >= 0 && toCmp <= 0 || fromCmp <= 0 && toCmp >= 0) { continue }\n      if (fromCmp <= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.to, from) >= 0 : cmp(found.to, from) > 0) ||\n          fromCmp >= 0 && (sp.marker.inclusiveRight && marker.inclusiveLeft ? cmp(found.from, to) <= 0 : cmp(found.from, to) < 0))\n        { return true }\n    } }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      { line = merged.find(-1, true).line; }\n    return line\n  }\n\n  function visualLineEnd(line) {\n    var merged;\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return line\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line\n      ;(lines || (lines = [])).push(line);\n    }\n    return lines\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) { return lineN }\n    return lineNo(vis)\n  }\n\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) { return lineN }\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) { return lineN }\n    while (merged = collapsedSpanAtEnd(line))\n      { line = merged.find(1, true).line; }\n    return lineNo(line) + 1\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\n  function lineIsHidden(doc, line) {\n    var sps = sawCollapsedSpans && line.markedSpans;\n    if (sps) { for (var sp = (void 0), i = 0; i < sps.length; ++i) {\n      sp = sps[i];\n      if (!sp.marker.collapsed) { continue }\n      if (sp.from == null) { return true }\n      if (sp.marker.widgetNode) { continue }\n      if (sp.from == 0 && sp.marker.inclusiveLeft && lineIsHiddenInner(doc, line, sp))\n        { return true }\n    } }\n  }\n  function lineIsHiddenInner(doc, line, span) {\n    if (span.to == null) {\n      var end = span.marker.find(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.markedSpans, span.marker))\n    }\n    if (span.marker.inclusiveRight && span.to == line.text.length)\n      { return true }\n    for (var sp = (void 0), i = 0; i < line.markedSpans.length; ++i) {\n      sp = line.markedSpans[i];\n      if (sp.marker.collapsed && !sp.marker.widgetNode && sp.from == span.to &&\n          (sp.to == null || sp.to != span.from) &&\n          (sp.marker.inclusiveLeft || span.marker.inclusiveRight) &&\n          lineIsHiddenInner(doc, line, sp)) { return true }\n    }\n  }\n\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(lineObj);\n\n    var h = 0, chunk = lineObj.parent;\n    for (var i = 0; i < chunk.lines.length; ++i) {\n      var line = chunk.lines[i];\n      if (line == lineObj) { break }\n      else { h += line.height; }\n    }\n    for (var p = chunk.parent; p; chunk = p, p = chunk.parent) {\n      for (var i$1 = 0; i$1 < p.children.length; ++i$1) {\n        var cur = p.children[i$1];\n        if (cur == chunk) { break }\n        else { h += cur.height; }\n      }\n    }\n    return h\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(line) {\n    if (line.height == 0) { return 0 }\n    var len = line.text.length, merged, cur = line;\n    while (merged = collapsedSpanAtStart(cur)) {\n      var found = merged.find(0, true);\n      cur = found.from.line;\n      len += found.from.ch - found.to.ch;\n    }\n    cur = line;\n    while (merged = collapsedSpanAtEnd(cur)) {\n      var found$1 = merged.find(0, true);\n      len -= cur.text.length - found$1.from.ch;\n      cur = found$1.to.line;\n      len += cur.text.length - found$1.to.ch;\n    }\n    return len\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function (line) {\n      var len = lineLength(line);\n      if (len > d.maxLineLength) {\n        d.maxLineLength = len;\n        d.maxLine = line;\n      }\n    });\n  }\n\n  // LINE DATA STRUCTURE\n\n  // Line objects. These hold state related to a line, including\n  // highlighting info (the styles array).\n  var Line = function(text, markedSpans, estimateHeight) {\n    this.text = text;\n    attachMarkedSpans(this, markedSpans);\n    this.height = estimateHeight ? estimateHeight(this) : 1;\n  };\n\n  Line.prototype.lineNo = function () { return lineNo(this) };\n  eventMixin(Line);\n\n  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\n  function updateLine(line, text, markedSpans, estimateHeight) {\n    line.text = text;\n    if (line.stateAfter) { line.stateAfter = null; }\n    if (line.styles) { line.styles = null; }\n    if (line.order != null) { line.order = null; }\n    detachMarkedSpans(line);\n    attachMarkedSpans(line, markedSpans);\n    var estHeight = estimateHeight ? estimateHeight(line) : 1;\n    if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n  }\n\n  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) { return null }\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"))\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = eltP(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: eltP(\"pre\", [content], \"CodeMirror-line\"), content: content,\n                   col: 0, pos: 0, cm: cm,\n                   trailingSpace: false,\n                   splitSpaces: cm.getOption(\"lineWrapping\")};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order = (void 0);\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line, cm.doc.direction)))\n        { builder.addToken = buildTokenBadBidi(builder.addToken, order); }\n      builder.map = [];\n      var allowFrontierUpdate = lineView != cm.display.externalMeasured && lineNo(line);\n      insertLineContent(line, builder, getLineStyles(cm, line, allowFrontierUpdate));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          { builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\"); }\n        if (line.styleClasses.textClass)\n          { builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\"); }\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        { builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure))); }\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n  (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map)\n        ;(lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    // See issue #2901\n    if (webkit) {\n      var last = builder.content.lastChild;\n      if (/\\bcm-tab\\b/.test(last.className) || (last.querySelector && last.querySelector(\".cm-tab\")))\n        { builder.content.className = \"cm-tab-wrap-hack\"; }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      { builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\"); }\n\n    return builder\n  }\n\n  function defaultSpecialCharPlaceholder(ch) {\n    var token = elt(\"span\", \"\\u2022\", \"cm-invalidchar\");\n    token.title = \"\\\\u\" + ch.charCodeAt(0).toString(16);\n    token.setAttribute(\"aria-label\", token.title);\n    return token\n  }\n\n  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, css, attributes) {\n    if (!text) { return }\n    var displayText = builder.splitSpaces ? splitSpaces(text, builder.trailingSpace) : text;\n    var special = builder.cm.state.specialChars, mustWrap = false;\n    var content;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      content = document.createTextNode(displayText);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) { mustWrap = true; }\n      builder.pos += text.length;\n    } else {\n      content = document.createDocumentFragment();\n      var pos = 0;\n      while (true) {\n        special.lastIndex = pos;\n        var m = special.exec(text);\n        var skipped = m ? m.index - pos : text.length - pos;\n        if (skipped) {\n          var txt = document.createTextNode(displayText.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt])); }\n          else { content.appendChild(txt); }\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += skipped;\n        }\n        if (!m) { break }\n        pos += skipped + 1;\n        var txt$1 = (void 0);\n        if (m[0] == \"\\t\") {\n          var tabSize = builder.cm.options.tabSize, tabWidth = tabSize - builder.col % tabSize;\n          txt$1 = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          txt$1.setAttribute(\"role\", \"presentation\");\n          txt$1.setAttribute(\"cm-text\", \"\\t\");\n          builder.col += tabWidth;\n        } else if (m[0] == \"\\r\" || m[0] == \"\\n\") {\n          txt$1 = content.appendChild(elt(\"span\", m[0] == \"\\r\" ? \"\\u240d\" : \"\\u2424\", \"cm-invalidchar\"));\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          builder.col += 1;\n        } else {\n          txt$1 = builder.cm.options.specialCharPlaceholder(m[0]);\n          txt$1.setAttribute(\"cm-text\", m[0]);\n          if (ie && ie_version < 9) { content.appendChild(elt(\"span\", [txt$1])); }\n          else { content.appendChild(txt$1); }\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt$1);\n        builder.pos++;\n      }\n    }\n    builder.trailingSpace = displayText.charCodeAt(text.length - 1) == 32;\n    if (style || startStyle || endStyle || mustWrap || css || attributes) {\n      var fullStyle = style || \"\";\n      if (startStyle) { fullStyle += startStyle; }\n      if (endStyle) { fullStyle += endStyle; }\n      var token = elt(\"span\", [content], fullStyle, css);\n      if (attributes) {\n        for (var attr in attributes) { if (attributes.hasOwnProperty(attr) && attr != \"style\" && attr != \"class\")\n          { token.setAttribute(attr, attributes[attr]); } }\n      }\n      return builder.content.appendChild(token)\n    }\n    builder.content.appendChild(content);\n  }\n\n  // Change some spaces to NBSP to prevent the browser from collapsing\n  // trailing spaces at the end of a line when rendering text (issue #1362).\n  function splitSpaces(text, trailingBefore) {\n    if (text.length > 1 && !/  /.test(text)) { return text }\n    var spaceBefore = trailingBefore, result = \"\";\n    for (var i = 0; i < text.length; i++) {\n      var ch = text.charAt(i);\n      if (ch == \" \" && spaceBefore && (i == text.length - 1 || text.charCodeAt(i + 1) == 32))\n        { ch = \"\\u00a0\"; }\n      result += ch;\n      spaceBefore = ch == \" \";\n    }\n    return result\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function (builder, text, style, startStyle, endStyle, css, attributes) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        var part = (void 0);\n        for (var i = 0; i < order.length; i++) {\n          part = order[i];\n          if (part.to > start && part.from <= start) { break }\n        }\n        if (part.to >= end) { return inner(builder, text, style, startStyle, endStyle, css, attributes) }\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, css, attributes);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    }\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) { builder.map.push(builder.pos, builder.pos + size, widget); }\n    if (!ignoreWidget && builder.cm.display.input.needsContentAttribute) {\n      if (!widget)\n        { widget = builder.content.appendChild(document.createElement(\"span\")); }\n      widget.setAttribute(\"cm-marker\", marker.id);\n    }\n    if (widget) {\n      builder.cm.display.input.setUneditable(widget);\n      builder.content.appendChild(widget);\n    }\n    builder.pos += size;\n    builder.trailingSpace = false;\n  }\n\n  // Outputs a number of spans to make up a line, taking highlighting\n  // and marked text into account.\n  function insertLineContent(line, builder, styles) {\n    var spans = line.markedSpans, allText = line.text, at = 0;\n    if (!spans) {\n      for (var i$1 = 1; i$1 < styles.length; i$1+=2)\n        { builder.addToken(builder, allText.slice(at, at = styles[i$1]), interpretTokenStyle(styles[i$1+1], builder.cm.options)); }\n      return\n    }\n\n    var len = allText.length, pos = 0, i = 1, text = \"\", style, css;\n    var nextChange = 0, spanStyle, spanEndStyle, spanStartStyle, collapsed, attributes;\n    for (;;) {\n      if (nextChange == pos) { // Update current marker set\n        spanStyle = spanEndStyle = spanStartStyle = css = \"\";\n        attributes = null;\n        collapsed = null; nextChange = Infinity;\n        var foundBookmarks = [], endStyles = (void 0);\n        for (var j = 0; j < spans.length; ++j) {\n          var sp = spans[j], m = sp.marker;\n          if (m.type == \"bookmark\" && sp.from == pos && m.widgetNode) {\n            foundBookmarks.push(m);\n          } else if (sp.from <= pos && (sp.to == null || sp.to > pos || m.collapsed && sp.to == pos && sp.from == pos)) {\n            if (sp.to != null && sp.to != pos && nextChange > sp.to) {\n              nextChange = sp.to;\n              spanEndStyle = \"\";\n            }\n            if (m.className) { spanStyle += \" \" + m.className; }\n            if (m.css) { css = (css ? css + \";\" : \"\") + m.css; }\n            if (m.startStyle && sp.from == pos) { spanStartStyle += \" \" + m.startStyle; }\n            if (m.endStyle && sp.to == nextChange) { (endStyles || (endStyles = [])).push(m.endStyle, sp.to); }\n            // support for the old title property\n            // https://github.com/codemirror/CodeMirror/pull/5673\n            if (m.title) { (attributes || (attributes = {})).title = m.title; }\n            if (m.attributes) {\n              for (var attr in m.attributes)\n                { (attributes || (attributes = {}))[attr] = m.attributes[attr]; }\n            }\n            if (m.collapsed && (!collapsed || compareCollapsedMarkers(collapsed.marker, m) < 0))\n              { collapsed = sp; }\n          } else if (sp.from > pos && nextChange > sp.from) {\n            nextChange = sp.from;\n          }\n        }\n        if (endStyles) { for (var j$1 = 0; j$1 < endStyles.length; j$1 += 2)\n          { if (endStyles[j$1 + 1] == nextChange) { spanEndStyle += \" \" + endStyles[j$1]; } } }\n\n        if (!collapsed || collapsed.from == pos) { for (var j$2 = 0; j$2 < foundBookmarks.length; ++j$2)\n          { buildCollapsedSpan(builder, 0, foundBookmarks[j$2]); } }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) { return }\n          if (collapsed.to == pos) { collapsed = false; }\n        }\n      }\n      if (pos >= len) { break }\n\n      var upto = Math.min(len, nextChange);\n      while (true) {\n        if (text) {\n          var end = pos + text.length;\n          if (!collapsed) {\n            var tokenText = end > upto ? text.slice(0, upto - pos) : text;\n            builder.addToken(builder, tokenText, style ? style + spanStyle : spanStyle,\n                             spanStartStyle, pos + tokenText.length == nextChange ? spanEndStyle : \"\", css, attributes);\n          }\n          if (end >= upto) {text = text.slice(upto - pos); pos = upto; break}\n          pos = end;\n          spanStartStyle = \"\";\n        }\n        text = allText.slice(at, at = styles[i++]);\n        style = interpretTokenStyle(styles[i++], builder.cm.options);\n      }\n    }\n  }\n\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array\n  }\n\n  var operationGroup = null;\n\n  function pushOperation(op) {\n    if (operationGroup) {\n      operationGroup.ops.push(op);\n    } else {\n      op.ownsGroup = operationGroup = {\n        ops: [op],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        { callbacks[i].call(null); }\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          { while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            { op.cursorActivityHandlers[op.cursorActivityCalled++].call(null, op.cm); } }\n      }\n    } while (i < callbacks.length)\n  }\n\n  function finishOperation(op, endCb) {\n    var group = op.ownsGroup;\n    if (!group) { return }\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      endCb(group);\n    }\n  }\n\n  var orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\n  function signalLater(emitter, type /*, values...*/) {\n    var arr = getHandlers(emitter, type);\n    if (!arr.length) { return }\n    var args = Array.prototype.slice.call(arguments, 2), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    var loop = function ( i ) {\n      list.push(function () { return arr[i].apply(null, args); });\n    };\n\n    for (var i = 0; i < arr.length; ++i)\n      loop( i );\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) { delayed[i](); }\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") { updateLineText(cm, lineView); }\n      else if (type == \"gutter\") { updateLineGutter(cm, lineView, lineN, dims); }\n      else if (type == \"class\") { updateLineClasses(cm, lineView); }\n      else if (type == \"widget\") { updateLineWidgets(cm, lineView, dims); }\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        { lineView.text.parentNode.replaceChild(lineView.node, lineView.text); }\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) { lineView.node.style.zIndex = 2; }\n    }\n    return lineView.node\n  }\n\n  function updateLineBackground(cm, lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) { cls += \" CodeMirror-linebackground\"; }\n    if (lineView.background) {\n      if (cls) { lineView.background.className = cls; }\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n      cm.display.input.setUneditable(lineView.background);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built\n    }\n    return buildLineContent(cm, lineView)\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) { lineView.node = built.pre; }\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(cm, lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(cm, lineView) {\n    updateLineBackground(cm, lineView);\n    if (lineView.line.wrapClass)\n      { ensureLineWrapped(lineView).className = lineView.line.wrapClass; }\n    else if (lineView.node != lineView.text)\n      { lineView.node.className = \"\"; }\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    if (lineView.gutterBackground) {\n      lineView.node.removeChild(lineView.gutterBackground);\n      lineView.gutterBackground = null;\n    }\n    if (lineView.line.gutterClass) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.gutterBackground = elt(\"div\", null, \"CodeMirror-gutter-background \" + lineView.line.gutterClass,\n                                      (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px; width: \" + (dims.gutterTotalWidth) + \"px\"));\n      cm.display.input.setUneditable(lineView.gutterBackground);\n      wrap.insertBefore(lineView.gutterBackground, lineView.text);\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap$1 = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter = elt(\"div\", null, \"CodeMirror-gutter-wrapper\", (\"left: \" + (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"));\n      gutterWrap.setAttribute(\"aria-hidden\", \"true\");\n      cm.display.input.setUneditable(gutterWrap);\n      wrap$1.insertBefore(gutterWrap, lineView.text);\n      if (lineView.line.gutterClass)\n        { gutterWrap.className += \" \" + lineView.line.gutterClass; }\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        { lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              (\"left: \" + (dims.gutterLeft[\"CodeMirror-linenumbers\"]) + \"px; width: \" + (cm.display.lineNumInnerWidth) + \"px\"))); }\n      if (markers) { for (var k = 0; k < cm.display.gutterSpecs.length; ++k) {\n        var id = cm.display.gutterSpecs[k].className, found = markers.hasOwnProperty(id) && markers[id];\n        if (found)\n          { gutterWrap.appendChild(elt(\"div\", [found], \"CodeMirror-gutter-elt\",\n                                     (\"left: \" + (dims.gutterLeft[id]) + \"px; width: \" + (dims.gutterWidth[id]) + \"px\"))); }\n      } }\n    }\n  }\n\n  function updateLineWidgets(cm, lineView, dims) {\n    if (lineView.alignable) { lineView.alignable = null; }\n    var isWidget = classTest(\"CodeMirror-linewidget\");\n    for (var node = lineView.node.firstChild, next = (void 0); node; node = next) {\n      next = node.nextSibling;\n      if (isWidget.test(node.className)) { lineView.node.removeChild(node); }\n    }\n    insertLineWidgets(cm, lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) { lineView.bgClass = built.bgClass; }\n    if (built.textClass) { lineView.textClass = built.textClass; }\n\n    updateLineClasses(cm, lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(cm, lineView, dims);\n    return lineView.node\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(cm, lineView, dims) {\n    insertLineWidgetsFor(cm, lineView.line, lineView, dims, true);\n    if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n      { insertLineWidgetsFor(cm, lineView.rest[i], lineView, dims, false); } }\n  }\n\n  function insertLineWidgetsFor(cm, line, lineView, dims, allowAbove) {\n    if (!line.widgets) { return }\n    var wrap = ensureLineWrapped(lineView);\n    for (var i = 0, ws = line.widgets; i < ws.length; ++i) {\n      var widget = ws[i], node = elt(\"div\", [widget.node], \"CodeMirror-linewidget\" + (widget.className ? \" \" + widget.className : \"\"));\n      if (!widget.handleMouseEvents) { node.setAttribute(\"cm-ignore-events\", \"true\"); }\n      positionLineWidget(widget, node, lineView, dims);\n      cm.display.input.setUneditable(node);\n      if (allowAbove && widget.above)\n        { wrap.insertBefore(node, lineView.gutter || lineView.text); }\n      else\n        { wrap.appendChild(node); }\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n  (lineView.alignable || (lineView.alignable = [])).push(node);\n      var width = dims.wrapperWidth;\n      node.style.left = dims.fixedPos + \"px\";\n      if (!widget.coverGutter) {\n        width -= dims.gutterTotalWidth;\n        node.style.paddingLeft = dims.gutterTotalWidth + \"px\";\n      }\n      node.style.width = width + \"px\";\n    }\n    if (widget.coverGutter) {\n      node.style.zIndex = 5;\n      node.style.position = \"relative\";\n      if (!widget.noHScroll) { node.style.marginLeft = -dims.gutterTotalWidth + \"px\"; }\n    }\n  }\n\n  function widgetHeight(widget) {\n    if (widget.height != null) { return widget.height }\n    var cm = widget.doc.cm;\n    if (!cm) { return 0 }\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        { parentStyle += \"margin-left: -\" + cm.display.gutters.offsetWidth + \"px;\"; }\n      if (widget.noHScroll)\n        { parentStyle += \"width: \" + cm.display.wrapper.clientWidth + \"px;\"; }\n      removeChildrenAndAdd(cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\n    return widget.height = widget.node.parentNode.offsetHeight\n  }\n\n  // Return true when the given mouse event happened in a widget\n  function eventInWidget(display, e) {\n    for (var n = e_target(e); n != display.wrapper; n = n.parentNode) {\n      if (!n || (n.nodeType == 1 && n.getAttribute(\"cm-ignore-events\") == \"true\") ||\n          (n.parentNode == display.sizer && n != display.mover))\n        { return true }\n    }\n  }\n\n  // POSITION MEASUREMENT\n\n  function paddingTop(display) {return display.lineSpace.offsetTop}\n  function paddingVert(display) {return display.mover.offsetHeight - display.lineSpace.offsetHeight}\n  function paddingH(display) {\n    if (display.cachedPaddingH) { return display.cachedPaddingH }\n    var e = removeChildrenAndAdd(display.measure, elt(\"pre\", \"x\", \"CodeMirror-line-like\"));\n    var style = window.getComputedStyle ? window.getComputedStyle(e) : e.currentStyle;\n    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) { display.cachedPaddingH = data; }\n    return data\n  }\n\n  function scrollGap(cm) { return scrollerGap - cm.display.nativeBarWidth }\n  function displayWidth(cm) {\n    return cm.display.scroller.clientWidth - scrollGap(cm) - cm.display.barWidth\n  }\n  function displayHeight(cm) {\n    return cm.display.scroller.clientHeight - scrollGap(cm) - cm.display.barHeight\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && displayWidth(cm);\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            { heights.push((cur.bottom + next.top) / 2 - rect.top); }\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      { return {map: lineView.measure.map, cache: lineView.measure.cache} }\n    if (lineView.rest) {\n      for (var i = 0; i < lineView.rest.length; i++)\n        { if (lineView.rest[i] == line)\n          { return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]} } }\n      for (var i$1 = 0; i$1 < lineView.rest.length; i$1++)\n        { if (lineNo(lineView.rest[i$1]) > lineN)\n          { return {map: lineView.measure.maps[i$1], cache: lineView.measure.caches[i$1], before: true} } }\n    }\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias)\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      { return cm.display.view[findViewIndex(cm, lineN)] }\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      { return ext }\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text) {\n      view = null;\n    } else if (view && view.changes) {\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n      cm.curOp.forceUpdate = true;\n    }\n    if (!view)\n      { view = updateExternalMeasurement(cm, line); }\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    }\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) { ch = -1; }\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        { prepared.rect = prepared.view.text.getBoundingClientRect(); }\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) { prepared.cache[key] = found; }\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom}\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function nodeAndOffsetInLineMap(map, ch, bias) {\n    var node, start, end, collapse, mStart, mEnd;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      mStart = map[i];\n      mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) { collapse = \"right\"; }\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          { collapse = bias; }\n        if (bias == \"left\" && start == 0)\n          { while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          } }\n        if (bias == \"right\" && start == mEnd - mStart)\n          { while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          } }\n        break\n      }\n    }\n    return {node: node, start: start, end: end, collapse: collapse, coverStart: mStart, coverEnd: mEnd}\n  }\n\n  function getUsefulRect(rects, bias) {\n    var rect = nullRect;\n    if (bias == \"left\") { for (var i = 0; i < rects.length; i++) {\n      if ((rect = rects[i]).left != rect.right) { break }\n    } } else { for (var i$1 = rects.length - 1; i$1 >= 0; i$1--) {\n      if ((rect = rects[i$1]).left != rect.right) { break }\n    } }\n    return rect\n  }\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var place = nodeAndOffsetInLineMap(prepared.map, ch, bias);\n    var node = place.node, start = place.start, end = place.end, collapse = place.collapse;\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i$1 = 0; i$1 < 4; i$1++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(place.coverStart + start))) { --start; }\n        while (place.coverStart + end < place.coverEnd && isExtendingChar(prepared.line.text.charAt(place.coverStart + end))) { ++end; }\n        if (ie && ie_version < 9 && start == 0 && end == place.coverEnd - place.coverStart)\n          { rect = node.parentNode.getBoundingClientRect(); }\n        else\n          { rect = getUsefulRect(range(node, start, end).getClientRects(), bias); }\n        if (rect.left || rect.right || start == 0) { break }\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) { rect = maybeUpdateRectForZooming(cm.display.measure, rect); }\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) { collapse = bias = \"right\"; }\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        { rect = rects[bias == \"right\" ? rects.length - 1 : 0]; }\n      else\n        { rect = node.getBoundingClientRect(); }\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        { rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom}; }\n      else\n        { rect = nullRect; }\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    var i = 0;\n    for (; i < heights.length - 1; i++)\n      { if (mid < heights[i]) { break } }\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) { result.bogus = true; }\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      { return rect }\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY}\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) { for (var i = 0; i < lineView.rest.length; i++)\n        { lineView.measure.caches[i] = {}; } }\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      { clearLineMeasurementCacheFor(cm.display.view[i]); }\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\n    cm.display.cachedCharWidth = cm.display.cachedTextHeight = cm.display.cachedPaddingH = null;\n    if (!cm.options.lineWrapping) { cm.display.maxLineChanged = true; }\n    cm.display.lineNumChars = null;\n  }\n\n  function pageScrollX() {\n    // Work around https://bugs.chromium.org/p/chromium/issues/detail?id=489206\n    // which causes page_Offset and bounding client rects to use\n    // different reference viewports and invalidate our calculations.\n    if (chrome && android) { return -(document.body.getBoundingClientRect().left - parseInt(getComputedStyle(document.body).marginLeft)) }\n    return window.pageXOffset || (document.documentElement || document.body).scrollLeft\n  }\n  function pageScrollY() {\n    if (chrome && android) { return -(document.body.getBoundingClientRect().top - parseInt(getComputedStyle(document.body).marginTop)) }\n    return window.pageYOffset || (document.documentElement || document.body).scrollTop\n  }\n\n  function widgetTopHeight(lineObj) {\n    var height = 0;\n    if (lineObj.widgets) { for (var i = 0; i < lineObj.widgets.length; ++i) { if (lineObj.widgets[i].above)\n      { height += widgetHeight(lineObj.widgets[i]); } } }\n    return height\n  }\n\n  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"line\", \"div\" (display.lineDiv), \"local\"./null (editor), \"window\",\n  // or \"page\".\n  function intoCoordSystem(cm, lineObj, rect, context, includeWidgets) {\n    if (!includeWidgets) {\n      var height = widgetTopHeight(lineObj);\n      rect.top += height; rect.bottom += height;\n    }\n    if (context == \"line\") { return rect }\n    if (!context) { context = \"local\"; }\n    var yOff = heightAtLine(lineObj);\n    if (context == \"local\") { yOff += paddingTop(cm.display); }\n    else { yOff -= cm.display.viewOffset; }\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\n      yOff += lOff.top + (context == \"window\" ? 0 : pageScrollY());\n      var xOff = lOff.left + (context == \"window\" ? 0 : pageScrollX());\n      rect.left += xOff; rect.right += xOff;\n    }\n    rect.top += yOff; rect.bottom += yOff;\n    return rect\n  }\n\n  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"./null.\n  function fromCoordSystem(cm, coords, context) {\n    if (context == \"div\") { return coords }\n    var left = coords.left, top = coords.top;\n    // First move into \"page\" coordinate system\n    if (context == \"page\") {\n      left -= pageScrollX();\n      top -= pageScrollY();\n    } else if (context == \"local\" || !context) {\n      var localBox = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\n    return {left: left - lineSpaceBox.left, top: top - lineSpaceBox.top}\n  }\n\n  function charCoords(cm, pos, context, lineObj, bias) {\n    if (!lineObj) { lineObj = getLine(cm.doc, pos.line); }\n    return intoCoordSystem(cm, lineObj, measureChar(cm, lineObj, pos.ch, bias), context)\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  // A cursor Pos(line, char, \"before\") is on the same visual line as `char - 1`\n  // and after `char - 1` in writing order of `char - 1`\n  // A cursor Pos(line, char, \"after\") is on the same visual line as `char`\n  // and before `char` in writing order of `char`\n  // Examples (upper-case letters are RTL, lower-case are LTR):\n  //     Pos(0, 1, ...)\n  //     before   after\n  // ab     a|b     a|b\n  // aB     a|B     aB|\n  // Ab     |Ab     A|b\n  // AB     B|A     B|A\n  // Every position after the last character on a line is considered to stick\n  // to the last character on the line.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\n      if (right) { m.left = m.right; } else { m.right = m.left; }\n      return intoCoordSystem(cm, lineObj, m, context)\n    }\n    var order = getOrder(lineObj, cm.doc.direction), ch = pos.ch, sticky = pos.sticky;\n    if (ch >= lineObj.text.length) {\n      ch = lineObj.text.length;\n      sticky = \"before\";\n    } else if (ch <= 0) {\n      ch = 0;\n      sticky = \"after\";\n    }\n    if (!order) { return get(sticky == \"before\" ? ch - 1 : ch, sticky == \"before\") }\n\n    function getBidi(ch, partPos, invert) {\n      var part = order[partPos], right = part.level == 1;\n      return get(invert ? ch - 1 : ch, right != invert)\n    }\n    var partPos = getBidiPartAt(order, ch, sticky);\n    var other = bidiOther;\n    var val = getBidi(ch, partPos, sticky == \"before\");\n    if (other != null) { val.other = getBidi(ch, other, sticky != \"before\"); }\n    return val\n  }\n\n  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0;\n    pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) { left = charWidth(cm.display) * pos.ch; }\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height}\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, sticky, outside, xRel) {\n    var pos = Pos(line, ch, sticky);\n    pos.xRel = xRel;\n    if (outside) { pos.outside = outside; }\n    return pos\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\n  function coordsChar(cm, x, y) {\n    var doc = cm.doc;\n    y += cm.display.viewOffset;\n    if (y < 0) { return PosWithInfo(doc.first, 0, null, -1, -1) }\n    var lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      { return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, null, 1, 1) }\n    if (x < 0) { x = 0; }\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var collapsed = collapsedSpanAround(lineObj, found.ch + (found.xRel > 0 || found.outside > 0 ? 1 : 0));\n      if (!collapsed) { return found }\n      var rangeEnd = collapsed.find(1);\n      if (rangeEnd.line == lineN) { return rangeEnd }\n      lineObj = getLine(doc, lineN = rangeEnd.line);\n    }\n  }\n\n  function wrappedLineExtent(cm, lineObj, preparedMeasure, y) {\n    y -= widgetTopHeight(lineObj);\n    var end = lineObj.text.length;\n    var begin = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch - 1).bottom <= y; }, end, 0);\n    end = findFirst(function (ch) { return measureCharPrepared(cm, preparedMeasure, ch).top > y; }, begin, end);\n    return {begin: begin, end: end}\n  }\n\n  function wrappedLineExtentChar(cm, lineObj, preparedMeasure, target) {\n    if (!preparedMeasure) { preparedMeasure = prepareMeasureForLine(cm, lineObj); }\n    var targetTop = intoCoordSystem(cm, lineObj, measureCharPrepared(cm, preparedMeasure, target), \"line\").top;\n    return wrappedLineExtent(cm, lineObj, preparedMeasure, targetTop)\n  }\n\n  // Returns true if the given side of a box is after the given\n  // coordinates, in top-to-bottom, left-to-right order.\n  function boxIsAfter(box, x, y, left) {\n    return box.bottom <= y ? false : box.top > y ? true : (left ? box.left : box.right) > x\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    // Move y into line-local coordinate space\n    y -= heightAtLine(lineObj);\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    // When directly calling `measureCharPrepared`, we have to adjust\n    // for the widgets at this line.\n    var widgetHeight = widgetTopHeight(lineObj);\n    var begin = 0, end = lineObj.text.length, ltr = true;\n\n    var order = getOrder(lineObj, cm.doc.direction);\n    // If the line isn't plain left-to-right text, first figure out\n    // which bidi section the coordinates fall into.\n    if (order) {\n      var part = (cm.options.lineWrapping ? coordsBidiPartWrapped : coordsBidiPart)\n                   (cm, lineObj, lineNo, preparedMeasure, order, x, y);\n      ltr = part.level != 1;\n      // The awkward -1 offsets are needed because findFirst (called\n      // on these below) will treat its first bound as inclusive,\n      // second as exclusive, but we want to actually address the\n      // characters in the part's range\n      begin = ltr ? part.from : part.to - 1;\n      end = ltr ? part.to : part.from - 1;\n    }\n\n    // A binary search to find the first character whose bounding box\n    // starts after the coordinates. If we run across any whose box wrap\n    // the coordinates, store that.\n    var chAround = null, boxAround = null;\n    var ch = findFirst(function (ch) {\n      var box = measureCharPrepared(cm, preparedMeasure, ch);\n      box.top += widgetHeight; box.bottom += widgetHeight;\n      if (!boxIsAfter(box, x, y, false)) { return false }\n      if (box.top <= y && box.left <= x) {\n        chAround = ch;\n        boxAround = box;\n      }\n      return true\n    }, begin, end);\n\n    var baseX, sticky, outside = false;\n    // If a box around the coordinates was found, use that\n    if (boxAround) {\n      // Distinguish coordinates nearer to the left or right side of the box\n      var atLeft = x - boxAround.left < boxAround.right - x, atStart = atLeft == ltr;\n      ch = chAround + (atStart ? 0 : 1);\n      sticky = atStart ? \"after\" : \"before\";\n      baseX = atLeft ? boxAround.left : boxAround.right;\n    } else {\n      // (Adjust for extended bound, if necessary.)\n      if (!ltr && (ch == end || ch == begin)) { ch++; }\n      // To determine which side to associate with, get the box to the\n      // left of the character and compare it's vertical position to the\n      // coordinates\n      sticky = ch == 0 ? \"after\" : ch == lineObj.text.length ? \"before\" :\n        (measureCharPrepared(cm, preparedMeasure, ch - (ltr ? 1 : 0)).bottom + widgetHeight <= y) == ltr ?\n        \"after\" : \"before\";\n      // Now get accurate coordinates for this place, in order to get a\n      // base X position\n      var coords = cursorCoords(cm, Pos(lineNo, ch, sticky), \"line\", lineObj, preparedMeasure);\n      baseX = coords.left;\n      outside = y < coords.top ? -1 : y >= coords.bottom ? 1 : 0;\n    }\n\n    ch = skipExtendingChars(lineObj.text, ch, 1);\n    return PosWithInfo(lineNo, ch, sticky, outside, x - baseX)\n  }\n\n  function coordsBidiPart(cm, lineObj, lineNo, preparedMeasure, order, x, y) {\n    // Bidi parts are sorted left-to-right, and in a non-line-wrapping\n    // situation, we can take this ordering to correspond to the visual\n    // ordering. This finds the first part whose end is after the given\n    // coordinates.\n    var index = findFirst(function (i) {\n      var part = order[i], ltr = part.level != 1;\n      return boxIsAfter(cursorCoords(cm, Pos(lineNo, ltr ? part.to : part.from, ltr ? \"before\" : \"after\"),\n                                     \"line\", lineObj, preparedMeasure), x, y, true)\n    }, 0, order.length - 1);\n    var part = order[index];\n    // If this isn't the first part, the part's start is also after\n    // the coordinates, and the coordinates aren't on the same line as\n    // that start, move one part back.\n    if (index > 0) {\n      var ltr = part.level != 1;\n      var start = cursorCoords(cm, Pos(lineNo, ltr ? part.from : part.to, ltr ? \"after\" : \"before\"),\n                               \"line\", lineObj, preparedMeasure);\n      if (boxIsAfter(start, x, y, true) && start.top > y)\n        { part = order[index - 1]; }\n    }\n    return part\n  }\n\n  function coordsBidiPartWrapped(cm, lineObj, _lineNo, preparedMeasure, order, x, y) {\n    // In a wrapped line, rtl text on wrapping boundaries can do things\n    // that don't correspond to the ordering in our `order` array at\n    // all, so a binary search doesn't work, and we want to return a\n    // part that only spans one line so that the binary search in\n    // coordsCharInner is safe. As such, we first find the extent of the\n    // wrapped line, and then do a flat search in which we discard any\n    // spans that aren't on the line.\n    var ref = wrappedLineExtent(cm, lineObj, preparedMeasure, y);\n    var begin = ref.begin;\n    var end = ref.end;\n    if (/\\s/.test(lineObj.text.charAt(end - 1))) { end--; }\n    var part = null, closestDist = null;\n    for (var i = 0; i < order.length; i++) {\n      var p = order[i];\n      if (p.from >= end || p.to <= begin) { continue }\n      var ltr = p.level != 1;\n      var endX = measureCharPrepared(cm, preparedMeasure, ltr ? Math.min(end, p.to) - 1 : Math.max(begin, p.from)).right;\n      // Weigh against spans ending before this, so that they are only\n      // picked if nothing ends after\n      var dist = endX < x ? x - endX + 1e9 : endX - x;\n      if (!part || closestDist > dist) {\n        part = p;\n        closestDist = dist;\n      }\n    }\n    if (!part) { part = order[order.length - 1]; }\n    // Clip the part to the wrapped line.\n    if (part.from < begin) { part = {from: begin, to: part.to, level: part.level}; }\n    if (part.to > end) { part = {from: part.from, to: end, level: part.level}; }\n    return part\n  }\n\n  var measureText;\n  // Compute the default text height.\n  function textHeight(display) {\n    if (display.cachedTextHeight != null) { return display.cachedTextHeight }\n    if (measureText == null) {\n      measureText = elt(\"pre\", null, \"CodeMirror-line-like\");\n      // Measure a bunch of lines, for browsers that compute\n      // fractional heights.\n      for (var i = 0; i < 49; ++i) {\n        measureText.appendChild(document.createTextNode(\"x\"));\n        measureText.appendChild(elt(\"br\"));\n      }\n      measureText.appendChild(document.createTextNode(\"x\"));\n    }\n    removeChildrenAndAdd(display.measure, measureText);\n    var height = measureText.offsetHeight / 50;\n    if (height > 3) { display.cachedTextHeight = height; }\n    removeChildren(display.measure);\n    return height || 1\n  }\n\n  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) { return display.cachedCharWidth }\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor], \"CodeMirror-line-like\");\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) { display.cachedCharWidth = width; }\n    return width || 10\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      var id = cm.display.gutterSpecs[i].className;\n      left[id] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[id] = n.clientWidth;\n    }\n    return {fixedPos: compensateForHScroll(d),\n            gutterTotalWidth: d.gutters.offsetWidth,\n            gutterLeft: left,\n            gutterWidth: width,\n            wrapperWidth: d.wrapper.clientWidth}\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\n  function estimateHeight(cm) {\n    var th = textHeight(cm.display), wrapping = cm.options.lineWrapping;\n    var perLine = wrapping && Math.max(5, cm.display.scroller.clientWidth / charWidth(cm.display) - 3);\n    return function (line) {\n      if (lineIsHidden(cm.doc, line)) { return 0 }\n\n      var widgetsHeight = 0;\n      if (line.widgets) { for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) { widgetsHeight += line.widgets[i].height; }\n      } }\n\n      if (wrapping)\n        { return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th }\n      else\n        { return widgetsHeight + th }\n    }\n  }\n\n  function estimateLineHeights(cm) {\n    var doc = cm.doc, est = estimateHeight(cm);\n    doc.iter(function (line) {\n      var estHeight = est(line);\n      if (estHeight != line.height) { updateLineHeight(line, estHeight); }\n    });\n  }\n\n  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal && e_target(e).getAttribute(\"cm-not-content\") == \"true\") { return null }\n\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e$1) { return null }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel > 0 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) { return null }\n    n -= cm.display.viewFrom;\n    if (n < 0) { return null }\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) { return i }\n    }\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\n  function regChange(cm, from, to, lendiff) {\n    if (from == null) { from = cm.doc.first; }\n    if (to == null) { to = cm.doc.first + cm.doc.size; }\n    if (!lendiff) { lendiff = 0; }\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      { display.updateLineNumbers = from; }\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        { resetView(cm); }\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut$1 = viewCuttingPoint(cm, from, from, -1);\n      if (cut$1) {\n        display.view = display.view.slice(0, cut$1.index);\n        display.viewTo = cut$1.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        { ext.lineN += lendiff; }\n      else if (from < ext.lineN + ext.size)\n        { display.externalMeasured = null; }\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      { display.externalMeasured = null; }\n\n    if (line < display.viewFrom || line >= display.viewTo) { return }\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) { return }\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) { arr.push(type); }\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      { return {index: index, lineN: newN} }\n    var n = cm.display.viewFrom;\n    for (var i = 0; i < index; i++)\n      { n += view[i].size; }\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) { return null }\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) { return null }\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN}\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        { display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view); }\n      else if (display.viewFrom < from)\n        { display.view = display.view.slice(findViewIndex(cm, from)); }\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        { display.view = display.view.concat(buildViewArray(cm, display.viewTo, to)); }\n      else if (display.viewTo > to)\n        { display.view = display.view.slice(0, findViewIndex(cm, to)); }\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) { ++dirty; }\n    }\n    return dirty\n  }\n\n  function updateSelection(cm) {\n    cm.display.input.showSelection(cm.display.input.prepareSelection());\n  }\n\n  function prepareSelection(cm, primary) {\n    if ( primary === void 0 ) primary = true;\n\n    var doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    var customCursor = cm.options.$customCursor;\n    if (customCursor) { primary = true; }\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      if (!primary && i == doc.sel.primIndex) { continue }\n      var range = doc.sel.ranges[i];\n      if (range.from().line >= cm.display.viewTo || range.to().line < cm.display.viewFrom) { continue }\n      var collapsed = range.empty();\n      if (customCursor) {\n        var head = customCursor(cm, range);\n        if (head) { drawSelectionCursor(cm, head, curFragment); }\n      } else if (collapsed || cm.options.showCursorWhenSelecting) {\n        drawSelectionCursor(cm, range.head, curFragment);\n      }\n      if (!collapsed)\n        { drawSelectionRange(cm, range, selFragment); }\n    }\n    return result\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, head, output) {\n    var pos = cursorCoords(cm, head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (/\\bcm-fat-cursor\\b/.test(cm.getWrapperElement().className)) {\n      var charPos = charCoords(cm, head, \"div\", null, null);\n      var width = charPos.right - charPos.left;\n      cursor.style.width = (width > 0 ? width : cm.defaultCharWidth()) + \"px\";\n    }\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  function cmpCoords(a, b) { return a.top - b.top || a.left - b.left }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\n    var fragment = document.createDocumentFragment();\n    var padding = paddingH(cm.display), leftSide = padding.left;\n    var rightSide = Math.max(display.sizerWidth, displayWidth(cm) - display.sizer.offsetLeft) - padding.right;\n    var docLTR = doc.direction == \"ltr\";\n\n    function add(left, top, width, bottom) {\n      if (top < 0) { top = 0; }\n      top = Math.round(top);\n      bottom = Math.round(bottom);\n      fragment.appendChild(elt(\"div\", null, \"CodeMirror-selected\", (\"position: absolute; left: \" + left + \"px;\\n                             top: \" + top + \"px; width: \" + (width == null ? rightSide - left : width) + \"px;\\n                             height: \" + (bottom - top) + \"px\")));\n    }\n\n    function drawForLine(line, fromArg, toArg) {\n      var lineObj = getLine(doc, line);\n      var lineLen = lineObj.text.length;\n      var start, end;\n      function coords(ch, bias) {\n        return charCoords(cm, Pos(line, ch), \"div\", lineObj, bias)\n      }\n\n      function wrapX(pos, dir, side) {\n        var extent = wrappedLineExtentChar(cm, lineObj, null, pos);\n        var prop = (dir == \"ltr\") == (side == \"after\") ? \"left\" : \"right\";\n        var ch = side == \"after\" ? extent.begin : extent.end - (/\\s/.test(lineObj.text.charAt(extent.end - 1)) ? 2 : 1);\n        return coords(ch, prop)[prop]\n      }\n\n      var order = getOrder(lineObj, doc.direction);\n      iterateBidiSections(order, fromArg || 0, toArg == null ? lineLen : toArg, function (from, to, dir, i) {\n        var ltr = dir == \"ltr\";\n        var fromPos = coords(from, ltr ? \"left\" : \"right\");\n        var toPos = coords(to - 1, ltr ? \"right\" : \"left\");\n\n        var openStart = fromArg == null && from == 0, openEnd = toArg == null && to == lineLen;\n        var first = i == 0, last = !order || i == order.length - 1;\n        if (toPos.top - fromPos.top <= 3) { // Single line\n          var openLeft = (docLTR ? openStart : openEnd) && first;\n          var openRight = (docLTR ? openEnd : openStart) && last;\n          var left = openLeft ? leftSide : (ltr ? fromPos : toPos).left;\n          var right = openRight ? rightSide : (ltr ? toPos : fromPos).right;\n          add(left, fromPos.top, right - left, fromPos.bottom);\n        } else { // Multiple lines\n          var topLeft, topRight, botLeft, botRight;\n          if (ltr) {\n            topLeft = docLTR && openStart && first ? leftSide : fromPos.left;\n            topRight = docLTR ? rightSide : wrapX(from, dir, \"before\");\n            botLeft = docLTR ? leftSide : wrapX(to, dir, \"after\");\n            botRight = docLTR && openEnd && last ? rightSide : toPos.right;\n          } else {\n            topLeft = !docLTR ? leftSide : wrapX(from, dir, \"before\");\n            topRight = !docLTR && openStart && first ? rightSide : fromPos.right;\n            botLeft = !docLTR && openEnd && last ? leftSide : toPos.left;\n            botRight = !docLTR ? rightSide : wrapX(to, dir, \"after\");\n          }\n          add(topLeft, fromPos.top, topRight - topLeft, fromPos.bottom);\n          if (fromPos.bottom < toPos.top) { add(leftSide, fromPos.bottom, null, toPos.top); }\n          add(botLeft, toPos.top, botRight - botLeft, toPos.bottom);\n        }\n\n        if (!start || cmpCoords(fromPos, start) < 0) { start = fromPos; }\n        if (cmpCoords(toPos, start) < 0) { start = toPos; }\n        if (!end || cmpCoords(fromPos, end) < 0) { end = fromPos; }\n        if (cmpCoords(toPos, end) < 0) { end = toPos; }\n      });\n      return {start: start, end: end}\n    }\n\n    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.ch).start;\n      if (singleVLine) {\n        if (leftEnd.top < rightStart.top - 2) {\n          add(leftEnd.right, leftEnd.top, null, leftEnd.bottom);\n          add(leftSide, rightStart.top, rightStart.left, rightStart.bottom);\n        } else {\n          add(leftEnd.right, leftEnd.top, rightStart.left - leftEnd.right, leftEnd.bottom);\n        }\n      }\n      if (leftEnd.bottom < rightStart.top)\n        { add(leftSide, leftEnd.bottom, null, rightStart.top); }\n    }\n\n    output.appendChild(fragment);\n  }\n\n  // Cursor-blinking\n  function restartBlink(cm) {\n    if (!cm.state.focused) { return }\n    var display = cm.display;\n    clearInterval(display.blinker);\n    var on = true;\n    display.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      { display.blinker = setInterval(function () {\n        if (!cm.hasFocus()) { onBlur(cm); }\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate); }\n    else if (cm.options.cursorBlinkRate < 0)\n      { display.cursorDiv.style.visibility = \"hidden\"; }\n  }\n\n  function ensureFocus(cm) {\n    if (!cm.hasFocus()) {\n      cm.display.input.focus();\n      if (!cm.state.focused) { onFocus(cm); }\n    }\n  }\n\n  function delayBlurEvent(cm) {\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { if (cm.state.delayingBlurEvent) {\n      cm.state.delayingBlurEvent = false;\n      if (cm.state.focused) { onBlur(cm); }\n    } }, 100);\n  }\n\n  function onFocus(cm, e) {\n    if (cm.state.delayingBlurEvent && !cm.state.draggingText) { cm.state.delayingBlurEvent = false; }\n\n    if (cm.options.readOnly == \"nocursor\") { return }\n    if (!cm.state.focused) {\n      signal(cm, \"focus\", cm, e);\n      cm.state.focused = true;\n      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // This test prevents this from firing when a context\n      // menu is closed (since the input reset would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        cm.display.input.reset();\n        if (webkit) { setTimeout(function () { return cm.display.input.reset(true); }, 20); } // Issue #1730\n      }\n      cm.display.input.receivedFocus();\n    }\n    restartBlink(cm);\n  }\n  function onBlur(cm, e) {\n    if (cm.state.delayingBlurEvent) { return }\n\n    if (cm.state.focused) {\n      signal(cm, \"blur\", cm, e);\n      cm.state.focused = false;\n      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function () { if (!cm.state.focused) { cm.display.shift = false; } }, 150);\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    var viewTop = Math.max(0, display.scroller.getBoundingClientRect().top);\n    var oldHeight = display.lineDiv.getBoundingClientRect().top;\n    var mustScroll = 0;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], wrapping = cm.options.lineWrapping;\n      var height = (void 0), width = 0;\n      if (cur.hidden) { continue }\n      oldHeight += cur.line.height;\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n        // Check that lines don't extend past the right of the current\n        // editor width\n        if (!wrapping && cur.text.firstChild)\n          { width = cur.text.firstChild.getBoundingClientRect().right - box.left - 1; }\n      }\n      var diff = cur.line.height - height;\n      if (diff > .005 || diff < -.005) {\n        if (oldHeight < viewTop) { mustScroll -= diff; }\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) { for (var j = 0; j < cur.rest.length; j++)\n          { updateWidgetHeight(cur.rest[j]); } }\n      }\n      if (width > cm.display.sizerWidth) {\n        var chWidth = Math.ceil(width / charWidth(cm.display));\n        if (chWidth > cm.display.maxLineLength) {\n          cm.display.maxLineLength = chWidth;\n          cm.display.maxLine = cur.line;\n          cm.display.maxLineChanged = true;\n        }\n      }\n    }\n    if (Math.abs(mustScroll) > 2) { display.scroller.scrollTop += mustScroll; }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) { for (var i = 0; i < line.widgets.length; ++i) {\n      var w = line.widgets[i], parent = w.node.parentNode;\n      if (parent) { w.height = parent.offsetHeight; }\n    } }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from) {\n        from = ensureFrom;\n        to = lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight);\n      } else if (Math.min(ensureTo, doc.lastLine()) >= to) {\n        from = lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight);\n        to = ensureTo;\n      }\n    }\n    return {from: from, to: Math.max(to, from + 1)}\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, rect) {\n    if (signalDOMEvent(cm, \"scrollCursorIntoView\")) { return }\n\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), doScroll = null;\n    if (rect.top + box.top < 0) { doScroll = true; }\n    else if (rect.bottom + box.top > (window.innerHeight || document.documentElement.clientHeight)) { doScroll = false; }\n    if (doScroll != null && !phantom) {\n      var scrollNode = elt(\"div\", \"\\u200b\", null, (\"position: absolute;\\n                         top: \" + (rect.top - display.viewOffset - paddingTop(cm.display)) + \"px;\\n                         height: \" + (rect.bottom - rect.top + scrollGap(cm) + display.barHeight) + \"px;\\n                         left: \" + (rect.left) + \"px; width: \" + (Math.max(2, rect.right - rect.left)) + \"px;\"));\n      cm.display.lineSpace.appendChild(scrollNode);\n      scrollNode.scrollIntoView(doScroll);\n      cm.display.lineSpace.removeChild(scrollNode);\n    }\n  }\n\n  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) { margin = 0; }\n    var rect;\n    if (!cm.options.lineWrapping && pos == end) {\n      // Set pos and end to the cursor positions around the character pos sticks to\n      // If pos.sticky == \"before\", that is around pos.ch - 1, otherwise around pos.ch\n      // If pos == Pos(_, 0, \"before\"), pos and end are unchanged\n      end = pos.sticky == \"before\" ? Pos(pos.line, pos.ch + 1, \"before\") : pos;\n      pos = pos.ch ? Pos(pos.line, pos.sticky == \"before\" ? pos.ch - 1 : pos.ch, \"after\") : pos;\n    }\n    for (var limit = 0; limit < 5; limit++) {\n      var changed = false;\n      var coords = cursorCoords(cm, pos);\n      var endCoords = !end || end == pos ? coords : cursorCoords(cm, end);\n      rect = {left: Math.min(coords.left, endCoords.left),\n              top: Math.min(coords.top, endCoords.top) - margin,\n              right: Math.max(coords.left, endCoords.left),\n              bottom: Math.max(coords.bottom, endCoords.bottom) + margin};\n      var scrollPos = calculateScrollPos(cm, rect);\n      var startTop = cm.doc.scrollTop, startLeft = cm.doc.scrollLeft;\n      if (scrollPos.scrollTop != null) {\n        updateScrollTop(cm, scrollPos.scrollTop);\n        if (Math.abs(cm.doc.scrollTop - startTop) > 1) { changed = true; }\n      }\n      if (scrollPos.scrollLeft != null) {\n        setScrollLeft(cm, scrollPos.scrollLeft);\n        if (Math.abs(cm.doc.scrollLeft - startLeft) > 1) { changed = true; }\n      }\n      if (!changed) { break }\n    }\n    return rect\n  }\n\n  // Scroll a given set of coordinates into view (immediately).\n  function scrollIntoView(cm, rect) {\n    var scrollPos = calculateScrollPos(cm, rect);\n    if (scrollPos.scrollTop != null) { updateScrollTop(cm, scrollPos.scrollTop); }\n    if (scrollPos.scrollLeft != null) { setScrollLeft(cm, scrollPos.scrollLeft); }\n  }\n\n  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\n  function calculateScrollPos(cm, rect) {\n    var display = cm.display, snapMargin = textHeight(cm.display);\n    if (rect.top < 0) { rect.top = 0; }\n    var screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = displayHeight(cm), result = {};\n    if (rect.bottom - rect.top > screen) { rect.bottom = rect.top + screen; }\n    var docBottom = cm.doc.height + paddingVert(display);\n    var atTop = rect.top < snapMargin, atBottom = rect.bottom > docBottom - snapMargin;\n    if (rect.top < screentop) {\n      result.scrollTop = atTop ? 0 : rect.top;\n    } else if (rect.bottom > screentop + screen) {\n      var newTop = Math.min(rect.top, (atBottom ? docBottom : rect.bottom) - screen);\n      if (newTop != screentop) { result.scrollTop = newTop; }\n    }\n\n    var gutterSpace = cm.options.fixedGutter ? 0 : display.gutters.offsetWidth;\n    var screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft - gutterSpace;\n    var screenw = displayWidth(cm) - display.gutters.offsetWidth;\n    var tooWide = rect.right - rect.left > screenw;\n    if (tooWide) { rect.right = rect.left + screenw; }\n    if (rect.left < 10)\n      { result.scrollLeft = 0; }\n    else if (rect.left < screenleft)\n      { result.scrollLeft = Math.max(0, rect.left + gutterSpace - (tooWide ? 0 : 10)); }\n    else if (rect.right > screenw + screenleft - 3)\n      { result.scrollLeft = rect.right + (tooWide ? 0 : 10) - screenw; }\n    return result\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollTop(cm, top) {\n    if (top == null) { return }\n    resolveScrollToPos(cm);\n    cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor();\n    cm.curOp.scrollToPos = {from: cur, to: cur, margin: cm.options.cursorScrollMargin};\n  }\n\n  function scrollToCoords(cm, x, y) {\n    if (x != null || y != null) { resolveScrollToPos(cm); }\n    if (x != null) { cm.curOp.scrollLeft = x; }\n    if (y != null) { cm.curOp.scrollTop = y; }\n  }\n\n  function scrollToRange(cm, range) {\n    resolveScrollToPos(cm);\n    cm.curOp.scrollToPos = range;\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      scrollToCoordsRange(cm, from, to, range.margin);\n    }\n  }\n\n  function scrollToCoordsRange(cm, from, to, margin) {\n    var sPos = calculateScrollPos(cm, {\n      left: Math.min(from.left, to.left),\n      top: Math.min(from.top, to.top) - margin,\n      right: Math.max(from.right, to.right),\n      bottom: Math.max(from.bottom, to.bottom) + margin\n    });\n    scrollToCoords(cm, sPos.scrollLeft, sPos.scrollTop);\n  }\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function updateScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) { return }\n    if (!gecko) { updateDisplaySimple(cm, {top: val}); }\n    setScrollTop(cm, val, true);\n    if (gecko) { updateDisplaySimple(cm); }\n    startWorker(cm, 100);\n  }\n\n  function setScrollTop(cm, val, forceScroll) {\n    val = Math.max(0, Math.min(cm.display.scroller.scrollHeight - cm.display.scroller.clientHeight, val));\n    if (cm.display.scroller.scrollTop == val && !forceScroll) { return }\n    cm.doc.scrollTop = val;\n    cm.display.scrollbars.setScrollTop(val);\n    if (cm.display.scroller.scrollTop != val) { cm.display.scroller.scrollTop = val; }\n  }\n\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\n  function setScrollLeft(cm, val, isScroller, forceScroll) {\n    val = Math.max(0, Math.min(val, cm.display.scroller.scrollWidth - cm.display.scroller.clientWidth));\n    if ((isScroller ? val == cm.doc.scrollLeft : Math.abs(cm.doc.scrollLeft - val) < 2) && !forceScroll) { return }\n    cm.doc.scrollLeft = val;\n    alignHorizontally(cm);\n    if (cm.display.scroller.scrollLeft != val) { cm.display.scroller.scrollLeft = val; }\n    cm.display.scrollbars.setScrollLeft(val);\n  }\n\n  // SCROLLBARS\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var d = cm.display, gutterW = d.gutters.offsetWidth;\n    var docH = Math.round(cm.doc.height + paddingVert(cm.display));\n    return {\n      clientHeight: d.scroller.clientHeight,\n      viewHeight: d.wrapper.clientHeight,\n      scrollWidth: d.scroller.scrollWidth, clientWidth: d.scroller.clientWidth,\n      viewWidth: d.wrapper.clientWidth,\n      barLeft: cm.options.fixedGutter ? gutterW : 0,\n      docHeight: docH,\n      scrollHeight: docH + scrollGap(cm) + d.barHeight,\n      nativeBarWidth: d.nativeBarWidth,\n      gutterWidth: gutterW\n    }\n  }\n\n  var NativeScrollbars = function(place, scroll, cm) {\n    this.cm = cm;\n    var vert = this.vert = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    var horiz = this.horiz = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    vert.tabIndex = horiz.tabIndex = -1;\n    place(vert); place(horiz);\n\n    on(vert, \"scroll\", function () {\n      if (vert.clientHeight) { scroll(vert.scrollTop, \"vertical\"); }\n    });\n    on(horiz, \"scroll\", function () {\n      if (horiz.clientWidth) { scroll(horiz.scrollLeft, \"horizontal\"); }\n    });\n\n    this.checkedZeroWidth = false;\n    // Need to set a minimum width to see the scrollbar on IE7 (but must not set it on IE8).\n    if (ie && ie_version < 8) { this.horiz.style.minHeight = this.vert.style.minWidth = \"18px\"; }\n  };\n\n  NativeScrollbars.prototype.update = function (measure) {\n    var needsH = measure.scrollWidth > measure.clientWidth + 1;\n    var needsV = measure.scrollHeight > measure.clientHeight + 1;\n    var sWidth = measure.nativeBarWidth;\n\n    if (needsV) {\n      this.vert.style.display = \"block\";\n      this.vert.style.bottom = needsH ? sWidth + \"px\" : \"0\";\n      var totalHeight = measure.viewHeight - (needsH ? sWidth : 0);\n      // A bug in IE8 can cause this value to be negative, so guard it.\n      this.vert.firstChild.style.height =\n        Math.max(0, measure.scrollHeight - measure.clientHeight + totalHeight) + \"px\";\n    } else {\n      this.vert.scrollTop = 0;\n      this.vert.style.display = \"\";\n      this.vert.firstChild.style.height = \"0\";\n    }\n\n    if (needsH) {\n      this.horiz.style.display = \"block\";\n      this.horiz.style.right = needsV ? sWidth + \"px\" : \"0\";\n      this.horiz.style.left = measure.barLeft + \"px\";\n      var totalWidth = measure.viewWidth - measure.barLeft - (needsV ? sWidth : 0);\n      this.horiz.firstChild.style.width =\n        Math.max(0, measure.scrollWidth - measure.clientWidth + totalWidth) + \"px\";\n    } else {\n      this.horiz.style.display = \"\";\n      this.horiz.firstChild.style.width = \"0\";\n    }\n\n    if (!this.checkedZeroWidth && measure.clientHeight > 0) {\n      if (sWidth == 0) { this.zeroWidthHack(); }\n      this.checkedZeroWidth = true;\n    }\n\n    return {right: needsV ? sWidth : 0, bottom: needsH ? sWidth : 0}\n  };\n\n  NativeScrollbars.prototype.setScrollLeft = function (pos) {\n    if (this.horiz.scrollLeft != pos) { this.horiz.scrollLeft = pos; }\n    if (this.disableHoriz) { this.enableZeroWidthBar(this.horiz, this.disableHoriz, \"horiz\"); }\n  };\n\n  NativeScrollbars.prototype.setScrollTop = function (pos) {\n    if (this.vert.scrollTop != pos) { this.vert.scrollTop = pos; }\n    if (this.disableVert) { this.enableZeroWidthBar(this.vert, this.disableVert, \"vert\"); }\n  };\n\n  NativeScrollbars.prototype.zeroWidthHack = function () {\n    var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n    this.horiz.style.height = this.vert.style.width = w;\n    this.horiz.style.pointerEvents = this.vert.style.pointerEvents = \"none\";\n    this.disableHoriz = new Delayed;\n    this.disableVert = new Delayed;\n  };\n\n  NativeScrollbars.prototype.enableZeroWidthBar = function (bar, delay, type) {\n    bar.style.pointerEvents = \"auto\";\n    function maybeDisable() {\n      // To find out whether the scrollbar is still visible, we\n      // check whether the element under the pixel in the bottom\n      // right corner of the scrollbar box is the scrollbar box\n      // itself (when the bar is still visible) or its filler child\n      // (when the bar is hidden). If it is still visible, we keep\n      // it enabled, if it's hidden, we disable pointer events.\n      var box = bar.getBoundingClientRect();\n      var elt = type == \"vert\" ? document.elementFromPoint(box.right - 1, (box.top + box.bottom) / 2)\n          : document.elementFromPoint((box.right + box.left) / 2, box.bottom - 1);\n      if (elt != bar) { bar.style.pointerEvents = \"none\"; }\n      else { delay.set(1000, maybeDisable); }\n    }\n    delay.set(1000, maybeDisable);\n  };\n\n  NativeScrollbars.prototype.clear = function () {\n    var parent = this.horiz.parentNode;\n    parent.removeChild(this.horiz);\n    parent.removeChild(this.vert);\n  };\n\n  var NullScrollbars = function () {};\n\n  NullScrollbars.prototype.update = function () { return {bottom: 0, right: 0} };\n  NullScrollbars.prototype.setScrollLeft = function () {};\n  NullScrollbars.prototype.setScrollTop = function () {};\n  NullScrollbars.prototype.clear = function () {};\n\n  function updateScrollbars(cm, measure) {\n    if (!measure) { measure = measureForScrollbars(cm); }\n    var startWidth = cm.display.barWidth, startHeight = cm.display.barHeight;\n    updateScrollbarsInner(cm, measure);\n    for (var i = 0; i < 4 && startWidth != cm.display.barWidth || startHeight != cm.display.barHeight; i++) {\n      if (startWidth != cm.display.barWidth && cm.options.lineWrapping)\n        { updateHeightsInViewport(cm); }\n      updateScrollbarsInner(cm, measureForScrollbars(cm));\n      startWidth = cm.display.barWidth; startHeight = cm.display.barHeight;\n    }\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbarsInner(cm, measure) {\n    var d = cm.display;\n    var sizes = d.scrollbars.update(measure);\n\n    d.sizer.style.paddingRight = (d.barWidth = sizes.right) + \"px\";\n    d.sizer.style.paddingBottom = (d.barHeight = sizes.bottom) + \"px\";\n    d.heightForcer.style.borderBottom = sizes.bottom + \"px solid transparent\";\n\n    if (sizes.right && sizes.bottom) {\n      d.scrollbarFiller.style.display = \"block\";\n      d.scrollbarFiller.style.height = sizes.bottom + \"px\";\n      d.scrollbarFiller.style.width = sizes.right + \"px\";\n    } else { d.scrollbarFiller.style.display = \"\"; }\n    if (sizes.bottom && cm.options.coverGutterNextToScrollbar && cm.options.fixedGutter) {\n      d.gutterFiller.style.display = \"block\";\n      d.gutterFiller.style.height = sizes.bottom + \"px\";\n      d.gutterFiller.style.width = measure.gutterWidth + \"px\";\n    } else { d.gutterFiller.style.display = \"\"; }\n  }\n\n  var scrollbarModel = {\"native\": NativeScrollbars, \"null\": NullScrollbars};\n\n  function initScrollbars(cm) {\n    if (cm.display.scrollbars) {\n      cm.display.scrollbars.clear();\n      if (cm.display.scrollbars.addClass)\n        { rmClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n    }\n\n    cm.display.scrollbars = new scrollbarModel[cm.options.scrollbarStyle](function (node) {\n      cm.display.wrapper.insertBefore(node, cm.display.scrollbarFiller);\n      // Prevent clicks in the scrollbars from killing focus\n      on(node, \"mousedown\", function () {\n        if (cm.state.focused) { setTimeout(function () { return cm.display.input.focus(); }, 0); }\n      });\n      node.setAttribute(\"cm-not-content\", \"true\");\n    }, function (pos, axis) {\n      if (axis == \"horizontal\") { setScrollLeft(cm, pos); }\n      else { updateScrollTop(cm, pos); }\n    }, cm);\n    if (cm.display.scrollbars.addClass)\n      { addClass(cm.display.wrapper, cm.display.scrollbars.addClass); }\n  }\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: 0,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      focus: false,\n      id: ++nextOpId,          // Unique ID\n      markArrays: null         // Used by addMarkedSpan\n    };\n    pushOperation(cm.curOp);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp;\n    if (op) { finishOperation(op, function (group) {\n      for (var i = 0; i < group.ops.length; i++)\n        { group.ops[i].cm.curOp = null; }\n      endOperations(group);\n    }); }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      { endOperation_R1(ops[i]); }\n    for (var i$1 = 0; i$1 < ops.length; i$1++) // Write DOM (maybe)\n      { endOperation_W1(ops[i$1]); }\n    for (var i$2 = 0; i$2 < ops.length; i$2++) // Read DOM\n      { endOperation_R2(ops[i$2]); }\n    for (var i$3 = 0; i$3 < ops.length; i$3++) // Write DOM (maybe)\n      { endOperation_W2(ops[i$3]); }\n    for (var i$4 = 0; i$4 < ops.length; i$4++) // Read DOM\n      { endOperation_finish(ops[i$4]); }\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    maybeClipScrollbars(cm);\n    if (op.updateMaxLine) { findMaxLine(cm); }\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) { updateHeightsInViewport(cm); }\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      cm.display.sizerWidth = op.adjustWidthTo;\n      op.barMeasure.scrollWidth =\n        Math.max(display.scroller.clientWidth, display.sizer.offsetLeft + op.adjustWidthTo + scrollGap(cm) + cm.display.barWidth);\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo - displayWidth(cm));\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      { op.preparedSelection = display.input.prepareSelection(); }\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        { setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true); }\n      cm.display.maxLineChanged = false;\n    }\n\n    var takeFocus = op.focus && op.focus == activeElt();\n    if (op.preparedSelection)\n      { cm.display.input.showSelection(op.preparedSelection, takeFocus); }\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      { updateScrollbars(cm, op.barMeasure); }\n    if (op.updatedDisplay)\n      { setDocumentHeight(cm, op.barMeasure); }\n\n    if (op.selectionChanged) { restartBlink(cm); }\n\n    if (cm.state.focused && op.updateInput)\n      { cm.display.input.reset(op.typing); }\n    if (takeFocus) { ensureFocus(op.cm); }\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.updatedDisplay) { postUpdateDisplay(cm, op.update); }\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      { display.wheelStartX = display.wheelStartY = null; }\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null) { setScrollTop(cm, op.scrollTop, op.forceScroll); }\n\n    if (op.scrollLeft != null) { setScrollLeft(cm, op.scrollLeft, true, true); }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var rect = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                   clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      maybeScrollWindow(cm, rect);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\n    var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers;\n    if (hidden) { for (var i = 0; i < hidden.length; ++i)\n      { if (!hidden[i].lines.length) { signal(hidden[i], \"hide\"); } } }\n    if (unhidden) { for (var i$1 = 0; i$1 < unhidden.length; ++i$1)\n      { if (unhidden[i$1].lines.length) { signal(unhidden[i$1], \"unhide\"); } } }\n\n    if (display.wrapper.offsetHeight)\n      { doc.scrollTop = cm.display.scroller.scrollTop; }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      { signal(cm, \"changes\", cm, op.changeObjs); }\n    if (op.update)\n      { op.update.finish(); }\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) { return f() }\n    startOperation(cm);\n    try { return f() }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) { return f.apply(cm, arguments) }\n      startOperation(cm);\n      try { return f.apply(cm, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) { return f.apply(this, arguments) }\n      startOperation(this);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(this); }\n    }\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) { return f.apply(this, arguments) }\n      startOperation(cm);\n      try { return f.apply(this, arguments) }\n      finally { endOperation(cm); }\n    }\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.highlightFrontier < cm.display.viewTo)\n      { cm.state.highlight.set(time, bind(highlightWorker, cm)); }\n  }\n\n  function highlightWorker(cm) {\n    var doc = cm.doc;\n    if (doc.highlightFrontier >= cm.display.viewTo) { return }\n    var end = +new Date + cm.options.workTime;\n    var context = getContextBefore(cm, doc.highlightFrontier);\n    var changedLines = [];\n\n    doc.iter(context.line, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function (line) {\n      if (context.line >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var resetState = line.text.length > cm.options.maxHighlightLength ? copyState(doc.mode, context.state) : null;\n        var highlighted = highlightLine(cm, line, context, true);\n        if (resetState) { context.state = resetState; }\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) { line.styleClasses = newCls; }\n        else if (oldCls) { line.styleClasses = null; }\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) { ischange = oldStyles[i] != line.styles[i]; }\n        if (ischange) { changedLines.push(context.line); }\n        line.stateAfter = context.save();\n        context.nextLine();\n      } else {\n        if (line.text.length <= cm.options.maxHighlightLength)\n          { processLine(cm, line.text, context); }\n        line.stateAfter = context.line % 5 == 0 ? context.save() : null;\n        context.nextLine();\n      }\n      if (+new Date > end) {\n        startWorker(cm, cm.options.workDelay);\n        return true\n      }\n    });\n    doc.highlightFrontier = context.line;\n    doc.modeFrontier = Math.max(doc.modeFrontier, context.line);\n    if (changedLines.length) { runInOp(cm, function () {\n      for (var i = 0; i < changedLines.length; i++)\n        { regLineChange(cm, changedLines[i], \"text\"); }\n    }); }\n  }\n\n  // DISPLAY DRAWING\n\n  var DisplayUpdate = function(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.wrapperWidth = display.wrapper.clientWidth;\n    this.oldDisplayWidth = displayWidth(cm);\n    this.force = force;\n    this.dims = getDimensions(cm);\n    this.events = [];\n  };\n\n  DisplayUpdate.prototype.signal = function (emitter, type) {\n    if (hasHandler(emitter, type))\n      { this.events.push(arguments); }\n  };\n  DisplayUpdate.prototype.finish = function () {\n    for (var i = 0; i < this.events.length; i++)\n      { signal.apply(null, this.events[i]); }\n  };\n\n  function maybeClipScrollbars(cm) {\n    var display = cm.display;\n    if (!display.scrollbarsClipped && display.scroller.offsetWidth) {\n      display.nativeBarWidth = display.scroller.offsetWidth - display.scroller.clientWidth;\n      display.heightForcer.style.height = scrollGap(cm) + \"px\";\n      display.sizer.style.marginBottom = -display.nativeBarWidth + \"px\";\n      display.sizer.style.borderRightWidth = scrollGap(cm) + \"px\";\n      display.scrollbarsClipped = true;\n    }\n  }\n\n  function selectionSnapshot(cm) {\n    if (cm.hasFocus()) { return null }\n    var active = activeElt();\n    if (!active || !contains(cm.display.lineDiv, active)) { return null }\n    var result = {activeElt: active};\n    if (window.getSelection) {\n      var sel = window.getSelection();\n      if (sel.anchorNode && sel.extend && contains(cm.display.lineDiv, sel.anchorNode)) {\n        result.anchorNode = sel.anchorNode;\n        result.anchorOffset = sel.anchorOffset;\n        result.focusNode = sel.focusNode;\n        result.focusOffset = sel.focusOffset;\n      }\n    }\n    return result\n  }\n\n  function restoreSelection(snapshot) {\n    if (!snapshot || !snapshot.activeElt || snapshot.activeElt == activeElt()) { return }\n    snapshot.activeElt.focus();\n    if (!/^(INPUT|TEXTAREA)$/.test(snapshot.activeElt.nodeName) &&\n        snapshot.anchorNode && contains(document.body, snapshot.anchorNode) && contains(document.body, snapshot.focusNode)) {\n      var sel = window.getSelection(), range = document.createRange();\n      range.setEnd(snapshot.anchorNode, snapshot.anchorOffset);\n      range.collapse(false);\n      sel.removeAllRanges();\n      sel.addRange(range);\n      sel.extend(snapshot.focusNode, snapshot.focusOffset);\n    }\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        display.renderedView == display.view && countDirtyView(cm) == 0)\n      { return false }\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) { from = Math.max(doc.first, display.viewFrom); }\n    if (display.viewTo > to && display.viewTo - to < 20) { to = Math.min(end, display.viewTo); }\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastWrapHeight != update.wrapperHeight || display.lastWrapWidth != update.wrapperWidth;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force && display.renderedView == display.view &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      { return false }\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var selSnapshot = selectionSnapshot(cm);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"none\"; }\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) { display.lineDiv.style.display = \"\"; }\n    display.renderedView = display.view;\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    restoreSelection(selSnapshot);\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width and height.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n    display.gutters.style.height = display.sizer.style.minHeight = 0;\n\n    if (different) {\n      display.lastWrapHeight = update.wrapperHeight;\n      display.lastWrapWidth = update.wrapperWidth;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var viewport = update.viewport;\n\n    for (var first = true;; first = false) {\n      if (!first || !cm.options.lineWrapping || update.oldDisplayWidth == displayWidth(cm)) {\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          { viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - displayHeight(cm), viewport.top)}; }\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          { break }\n      } else if (first) {\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n      }\n      if (!updateDisplayIfNeeded(cm, update)) { break }\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.force = false;\n    }\n\n    update.signal(cm, \"update\", cm);\n    if (cm.display.viewFrom != cm.display.reportedViewFrom || cm.display.viewTo != cm.display.reportedViewTo) {\n      update.signal(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n      cm.display.reportedViewFrom = cm.display.viewFrom; cm.display.reportedViewTo = cm.display.viewTo;\n    }\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      updateScrollbars(cm, barMeasure);\n      setDocumentHeight(cm, barMeasure);\n      update.finish();\n    }\n  }\n\n  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        { node.style.display = \"none\"; }\n      else\n        { node.parentNode.removeChild(node); }\n      return next\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) ; else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) { cur = rm(cur); }\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) { updateNumber = false; }\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) { cur = rm(cur); }\n  }\n\n  function updateGutterSpace(display) {\n    var width = display.gutters.offsetWidth;\n    display.sizer.style.marginLeft = width + \"px\";\n    // Send an event to consumers responding to changes in gutter width.\n    signalLater(display, \"gutterChanged\", display);\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = measure.docHeight + \"px\";\n    cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = (measure.docHeight + cm.display.barHeight + scrollGap(cm)) + \"px\";\n  }\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\n    if (!display.alignWidgets && (!display.gutters.firstChild || !cm.options.fixedGutter)) { return }\n    var comp = compensateForHScroll(display) - display.scroller.scrollLeft + cm.doc.scrollLeft;\n    var gutterW = display.gutters.offsetWidth, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) { if (!view[i].hidden) {\n      if (cm.options.fixedGutter) {\n        if (view[i].gutter)\n          { view[i].gutter.style.left = left; }\n        if (view[i].gutterBackground)\n          { view[i].gutterBackground.style.left = left; }\n      }\n      var align = view[i].alignable;\n      if (align) { for (var j = 0; j < align.length; j++)\n        { align[j].style.left = left; } }\n    } }\n    if (cm.options.fixedGutter)\n      { display.gutters.style.left = (comp + gutterW) + \"px\"; }\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\n  function maybeUpdateLineNumberWidth(cm) {\n    if (!cm.options.lineNumbers) { return false }\n    var doc = cm.doc, last = lineNumberFor(cm.options, doc.first + doc.size - 1), display = cm.display;\n    if (last.length != display.lineNumChars) {\n      var test = display.measure.appendChild(elt(\"div\", [elt(\"div\", last)],\n                                                 \"CodeMirror-linenumber CodeMirror-gutter-elt\"));\n      var innerW = test.firstChild.offsetWidth, padding = test.offsetWidth - innerW;\n      display.lineGutter.style.width = \"\";\n      display.lineNumInnerWidth = Math.max(innerW, display.lineGutter.offsetWidth - padding) + 1;\n      display.lineNumWidth = display.lineNumInnerWidth + padding;\n      display.lineNumChars = display.lineNumInnerWidth ? last.length : -1;\n      display.lineGutter.style.width = display.lineNumWidth + \"px\";\n      updateGutterSpace(cm.display);\n      return true\n    }\n    return false\n  }\n\n  function getGutters(gutters, lineNumbers) {\n    var result = [], sawLineNumbers = false;\n    for (var i = 0; i < gutters.length; i++) {\n      var name = gutters[i], style = null;\n      if (typeof name != \"string\") { style = name.style; name = name.className; }\n      if (name == \"CodeMirror-linenumbers\") {\n        if (!lineNumbers) { continue }\n        else { sawLineNumbers = true; }\n      }\n      result.push({className: name, style: style});\n    }\n    if (lineNumbers && !sawLineNumbers) { result.push({className: \"CodeMirror-linenumbers\", style: null}); }\n    return result\n  }\n\n  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\n  function renderGutters(display) {\n    var gutters = display.gutters, specs = display.gutterSpecs;\n    removeChildren(gutters);\n    display.lineGutter = null;\n    for (var i = 0; i < specs.length; ++i) {\n      var ref = specs[i];\n      var className = ref.className;\n      var style = ref.style;\n      var gElt = gutters.appendChild(elt(\"div\", null, \"CodeMirror-gutter \" + className));\n      if (style) { gElt.style.cssText = style; }\n      if (className == \"CodeMirror-linenumbers\") {\n        display.lineGutter = gElt;\n        gElt.style.width = (display.lineNumWidth || 1) + \"px\";\n      }\n    }\n    gutters.style.display = specs.length ? \"\" : \"none\";\n    updateGutterSpace(display);\n  }\n\n  function updateGutters(cm) {\n    renderGutters(cm.display);\n    regChange(cm);\n    alignHorizontally(cm);\n  }\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc, input, options) {\n    var d = this;\n    this.input = input;\n\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    d.scrollbarFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    d.gutterFiller.setAttribute(\"cm-not-content\", \"true\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = eltP(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = elt(\"div\", null, \"CodeMirror-measure\");\n    // Wraps everything that needs to exist inside the vertically-padded coordinate system\n    d.lineSpace = eltP(\"div\", [d.measure, d.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\n                      null, \"position: relative; outline: none\");\n    var lines = eltP(\"div\", [d.lineSpace], \"CodeMirror-lines\");\n    // Moved around its parent to cover visible view.\n    d.mover = elt(\"div\", [lines], null, \"position: relative\");\n    // Set to the height of the document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    d.sizerWidth = null;\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\n    d.heightForcer = elt(\"div\", null, null, \"position: absolute; height: \" + scrollerGap + \"px; width: 1px;\");\n    // Will contain the gutters, if any.\n    d.gutters = elt(\"div\", null, \"CodeMirror-gutters\");\n    d.lineGutter = null;\n    // Actual scrollable element.\n    d.scroller = elt(\"div\", [d.sizer, d.heightForcer, d.gutters], \"CodeMirror-scroll\");\n    d.scroller.setAttribute(\"tabIndex\", \"-1\");\n    // The element in which the editor lives.\n    d.wrapper = elt(\"div\", [d.scrollbarFiller, d.gutterFiller, d.scroller], \"CodeMirror\");\n\n    // This attribute is respected by automatic translation systems such as Google Translate,\n    // and may also be respected by tools used by human translators.\n    d.wrapper.setAttribute('translate', 'no');\n\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\n    if (!webkit && !(gecko && mobile)) { d.scroller.draggable = true; }\n\n    if (place) {\n      if (place.appendChild) { place.appendChild(d.wrapper); }\n      else { place(d.wrapper); }\n    }\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    d.reportedViewFrom = d.reportedViewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    d.renderedView = null;\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastWrapHeight = d.lastWrapWidth = 0;\n    d.updateLineNumbers = null;\n\n    d.nativeBarWidth = d.barHeight = d.barWidth = 0;\n    d.scrollbarsClipped = false;\n\n    // Used to only resize the line number gutter when necessary (when\n    // the amount of lines crosses a boundary that makes its width change)\n    d.lineNumWidth = d.lineNumInnerWidth = d.lineNumChars = null;\n    // Set to true when a non-horizontal-scrolling line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n\n    // Tracks the maximum line length so that the horizontal scrollbar\n    // can be kept static when scrolling.\n    d.maxLine = null;\n    d.maxLineLength = 0;\n    d.maxLineChanged = false;\n\n    // Used for measuring wheel scrolling granularity\n    d.wheelDX = d.wheelDY = d.wheelStartX = d.wheelStartY = null;\n\n    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\n\n    d.activeTouch = null;\n\n    d.gutterSpecs = getGutters(options.gutters, options.lineNumbers);\n    renderGutters(d);\n\n    input.init(d);\n  }\n\n  // Since the delta values reported on mouse wheel events are\n  // unstandardized between browsers and even browser versions, and\n  // generally horribly unpredictable, this code starts by measuring\n  // the scroll effect that the first few mouse wheel events have,\n  // and, from that, detects the way it can convert deltas to pixel\n  // offsets afterwards.\n  //\n  // The reason we want to know the amount a wheel event will scroll\n  // is that it gives us a chance to update the display before the\n  // actual scrolling happens, reducing flickering.\n\n  var wheelSamples = 0, wheelPixelsPerUnit = null;\n  // Fill in a browser-detected starting value on browsers where we\n  // know one. These don't have to be accurate -- the result of them\n  // being wrong would just be a slight flicker on the first wheel\n  // scroll (if it is large enough).\n  if (ie) { wheelPixelsPerUnit = -.53; }\n  else if (gecko) { wheelPixelsPerUnit = 15; }\n  else if (chrome) { wheelPixelsPerUnit = -.7; }\n  else if (safari) { wheelPixelsPerUnit = -1/3; }\n\n  function wheelEventDelta(e) {\n    var dx = e.wheelDeltaX, dy = e.wheelDeltaY;\n    if (dx == null && e.detail && e.axis == e.HORIZONTAL_AXIS) { dx = e.detail; }\n    if (dy == null && e.detail && e.axis == e.VERTICAL_AXIS) { dy = e.detail; }\n    else if (dy == null) { dy = e.wheelDelta; }\n    return {x: dx, y: dy}\n  }\n  function wheelEventPixels(e) {\n    var delta = wheelEventDelta(e);\n    delta.x *= wheelPixelsPerUnit;\n    delta.y *= wheelPixelsPerUnit;\n    return delta\n  }\n\n  function onScrollWheel(cm, e) {\n    var delta = wheelEventDelta(e), dx = delta.x, dy = delta.y;\n    var pixelsPerUnit = wheelPixelsPerUnit;\n    if (e.deltaMode === 0) {\n      dx = e.deltaX;\n      dy = e.deltaY;\n      pixelsPerUnit = 1;\n    }\n\n    var display = cm.display, scroll = display.scroller;\n    // Quit if there's nothing to scroll here\n    var canScrollX = scroll.scrollWidth > scroll.clientWidth;\n    var canScrollY = scroll.scrollHeight > scroll.clientHeight;\n    if (!(dx && canScrollX || dy && canScrollY)) { return }\n\n    // Webkit browsers on OS X abort momentum scrolls when the target\n    // of the scroll event is removed from the scrollable element.\n    // This hack (see related code in patchDisplay) makes sure the\n    // element is kept around.\n    if (dy && mac && webkit) {\n      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer\n          }\n        }\n      }\n    }\n\n    // On some browsers, horizontal scrolling will cause redraws to\n    // happen before the gutter has been realigned, causing it to\n    // wriggle around in a most unseemly way. When we have an\n    // estimated pixels/delta value, we just handle horizontal\n    // scrolling entirely here. It'll be slightly off from native, but\n    // better than glitching out.\n    if (dx && !gecko && !presto && pixelsPerUnit != null) {\n      if (dy && canScrollY)\n        { updateScrollTop(cm, Math.max(0, scroll.scrollTop + dy * pixelsPerUnit)); }\n      setScrollLeft(cm, Math.max(0, scroll.scrollLeft + dx * pixelsPerUnit));\n      // Only prevent default scrolling if vertical scrolling is\n      // actually possible. Otherwise, it causes vertical scroll\n      // jitter on OSX trackpads when deltaX is small and deltaY\n      // is large (issue #3579)\n      if (!dy || (dy && canScrollY))\n        { e_preventDefault(e); }\n      display.wheelStartX = null; // Abort measurement, if in progress\n      return\n    }\n\n    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\n    if (dy && pixelsPerUnit != null) {\n      var pixels = dy * pixelsPerUnit;\n      var top = cm.doc.scrollTop, bot = top + display.wrapper.clientHeight;\n      if (pixels < 0) { top = Math.max(0, top + pixels - 50); }\n      else { bot = Math.min(cm.doc.height, bot + pixels + 50); }\n      updateDisplaySimple(cm, {top: top, bottom: bot});\n    }\n\n    if (wheelSamples < 20 && e.deltaMode !== 0) {\n      if (display.wheelStartX == null) {\n        display.wheelStartX = scroll.scrollLeft; display.wheelStartY = scroll.scrollTop;\n        display.wheelDX = dx; display.wheelDY = dy;\n        setTimeout(function () {\n          if (display.wheelStartX == null) { return }\n          var movedX = scroll.scrollLeft - display.wheelStartX;\n          var movedY = scroll.scrollTop - display.wheelStartY;\n          var sample = (movedY && display.wheelDY && movedY / display.wheelDY) ||\n            (movedX && display.wheelDX && movedX / display.wheelDX);\n          display.wheelStartX = display.wheelStartY = null;\n          if (!sample) { return }\n          wheelPixelsPerUnit = (wheelPixelsPerUnit * wheelSamples + sample) / (wheelSamples + 1);\n          ++wheelSamples;\n        }, 200);\n      } else {\n        display.wheelDX += dx; display.wheelDY += dy;\n      }\n    }\n  }\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  var Selection = function(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  };\n\n  Selection.prototype.primary = function () { return this.ranges[this.primIndex] };\n\n  Selection.prototype.equals = function (other) {\n    if (other == this) { return true }\n    if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) { return false }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var here = this.ranges[i], there = other.ranges[i];\n      if (!equalCursorPos(here.anchor, there.anchor) || !equalCursorPos(here.head, there.head)) { return false }\n    }\n    return true\n  };\n\n  Selection.prototype.deepCopy = function () {\n    var out = [];\n    for (var i = 0; i < this.ranges.length; i++)\n      { out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head)); }\n    return new Selection(out, this.primIndex)\n  };\n\n  Selection.prototype.somethingSelected = function () {\n    for (var i = 0; i < this.ranges.length; i++)\n      { if (!this.ranges[i].empty()) { return true } }\n    return false\n  };\n\n  Selection.prototype.contains = function (pos, end) {\n    if (!end) { end = pos; }\n    for (var i = 0; i < this.ranges.length; i++) {\n      var range = this.ranges[i];\n      if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n        { return i }\n    }\n    return -1\n  };\n\n  var Range = function(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  };\n\n  Range.prototype.from = function () { return minPos(this.anchor, this.head) };\n  Range.prototype.to = function () { return maxPos(this.anchor, this.head) };\n  Range.prototype.empty = function () { return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(cm, ranges, primIndex) {\n    var mayTouch = cm && cm.options.selectionsMayTouch;\n    var prim = ranges[primIndex];\n    ranges.sort(function (a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      var diff = cmp(prev.to(), cur.from());\n      if (mayTouch && !cur.empty() ? diff > 0 : diff >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) { --primIndex; }\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex)\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0)\n  }\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\n  function changeEnd(change) {\n    if (!change.text) { return change.to }\n    return Pos(change.from.line + change.text.length - 1,\n               lst(change.text).length + (change.text.length == 1 ? change.from.ch : 0))\n  }\n\n  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) { return pos }\n    if (cmp(pos, change.to) <= 0) { return changeEnd(change) }\n\n    var line = pos.line + change.text.length - (change.to.line - change.from.line) - 1, ch = pos.ch;\n    if (pos.line == change.to.line) { ch += changeEnd(change).ch - change.to.ch; }\n    return Pos(line, ch)\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(doc.cm, out, doc.sel.primIndex)\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      { return Pos(nw.line, pos.ch - old.ch + nw.ch) }\n    else\n      { return Pos(nw.line + (pos.line - old.line), pos.ch) }\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex)\n  }\n\n  // Used to get the editor into a consistent state again when options change.\n\n  function loadMode(cm) {\n    cm.doc.mode = getMode(cm.options, cm.doc.modeOption);\n    resetModeState(cm);\n  }\n\n  function resetModeState(cm) {\n    cm.doc.iter(function (line) {\n      if (line.stateAfter) { line.stateAfter = null; }\n      if (line.styles) { line.styles = null; }\n    });\n    cm.doc.modeFrontier = cm.doc.highlightFrontier = cm.doc.first;\n    startWorker(cm, 100);\n    cm.state.modeGen++;\n    if (cm.curOp) { regChange(cm); }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore)\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, estimateHeight) {\n    function spansFor(n) {return markedSpans ? markedSpans[n] : null}\n    function update(line, text, spans) {\n      updateLine(line, text, spans, estimateHeight);\n      signalLater(line, \"change\", line, change);\n    }\n    function linesFor(start, end) {\n      var result = [];\n      for (var i = start; i < end; ++i)\n        { result.push(new Line(text[i], spansFor(i), estimateHeight)); }\n      return result\n    }\n\n    var from = change.from, to = change.to, text = change.text;\n    var firstLine = getLine(doc, from.line), lastLine = getLine(doc, to.line);\n    var lastText = lst(text), lastSpans = spansFor(text.length - 1), nlines = to.line - from.line;\n\n    // Adjust the line structure\n    if (change.full) {\n      doc.insert(0, linesFor(0, text.length));\n      doc.remove(text.length, doc.size - text.length);\n    } else if (isWholeLineUpdate(doc, change)) {\n      // This is a whole-line replace. Treated specially to make\n      // sure line objects move the way they are supposed to.\n      var added = linesFor(0, text.length - 1);\n      update(lastLine, lastLine.text, lastSpans);\n      if (nlines) { doc.remove(from.line, nlines); }\n      if (added.length) { doc.insert(from.line, added); }\n    } else if (firstLine == lastLine) {\n      if (text.length == 1) {\n        update(firstLine, firstLine.text.slice(0, from.ch) + lastText + firstLine.text.slice(to.ch), lastSpans);\n      } else {\n        var added$1 = linesFor(1, text.length - 1);\n        added$1.push(new Line(lastText + firstLine.text.slice(to.ch), lastSpans, estimateHeight));\n        update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n        doc.insert(from.line + 1, added$1);\n      }\n    } else if (text.length == 1) {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0] + lastLine.text.slice(to.ch), spansFor(0));\n      doc.remove(from.line + 1, nlines);\n    } else {\n      update(firstLine, firstLine.text.slice(0, from.ch) + text[0], spansFor(0));\n      update(lastLine, lastText + lastLine.text.slice(to.ch), lastSpans);\n      var added$2 = linesFor(1, text.length - 1);\n      if (nlines > 1) { doc.remove(from.line + 1, nlines - 1); }\n      doc.insert(from.line + 1, added$2);\n    }\n\n    signalLater(doc, \"change\", doc, change);\n  }\n\n  // Call f for all linked documents.\n  function linkedDocs(doc, f, sharedHistOnly) {\n    function propagate(doc, skip, sharedHist) {\n      if (doc.linked) { for (var i = 0; i < doc.linked.length; ++i) {\n        var rel = doc.linked[i];\n        if (rel.doc == skip) { continue }\n        var shared = sharedHist && rel.sharedHist;\n        if (sharedHistOnly && !shared) { continue }\n        f(rel.doc, shared);\n        propagate(rel.doc, doc, shared);\n      } }\n    }\n    propagate(doc, null, true);\n  }\n\n  // Attach a document to an editor.\n  function attachDoc(cm, doc) {\n    if (doc.cm) { throw new Error(\"This document is already in use.\") }\n    cm.doc = doc;\n    doc.cm = cm;\n    estimateLineHeights(cm);\n    loadMode(cm);\n    setDirectionClass(cm);\n    cm.options.direction = doc.direction;\n    if (!cm.options.lineWrapping) { findMaxLine(cm); }\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  function setDirectionClass(cm) {\n  (cm.doc.direction == \"rtl\" ? addClass : rmClass)(cm.display.lineDiv, \"CodeMirror-rtl\");\n  }\n\n  function directionChanged(cm) {\n    runInOp(cm, function () {\n      setDirectionClass(cm);\n      regChange(cm);\n    });\n  }\n\n  function History(prev) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = prev ? prev.undoDepth : Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = prev ? prev.maxGeneration : 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.from), to: changeEnd(change), text: getBetween(doc, change.from, change.to)};\n    attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1);\n    linkedDocs(doc, function (doc) { return attachLocalSpans(doc, histChange, change.from.line, change.to.line + 1); }, true);\n    return histChange\n  }\n\n  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) { array.pop(); }\n      else { break }\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done)\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done)\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done)\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, or are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n    var last;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && hist.lastModTime > time - (doc.cm ? doc.cm.options.historyEventDelay : 500)) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\n        // Optimized case for simple insertion -- don't want to add\n        // new changesets for every character typed\n        last.to = changeEnd(change);\n      } else {\n        // Add new sub-event\n        cur.changes.push(historyChangeFromChange(doc, change));\n      }\n    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        { pushSelectionToHistory(doc.sel, hist.done); }\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) { hist.done.shift(); }\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) { signal(doc, \"historyAdded\"); }\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500)\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      { hist.done[hist.done.length - 1] = sel; }\n    else\n      { pushSelectionToHistory(sel, hist.done); }\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      { clearSelectionEvents(hist.undone); }\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      { dest.push(sel); }\n  }\n\n  // Used to store marked span information in the history.\n  function attachLocalSpans(doc, change, from, to) {\n    var existing = change[\"spans_\" + doc.id], n = 0;\n    doc.iter(Math.max(doc.first, from), Math.min(doc.first + doc.size, to), function (line) {\n      if (line.markedSpans)\n        { (existing || (existing = change[\"spans_\" + doc.id] = {}))[n] = line.markedSpans; }\n      ++n;\n    });\n  }\n\n  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\n  function removeClearedSpans(spans) {\n    if (!spans) { return null }\n    var out;\n    for (var i = 0; i < spans.length; ++i) {\n      if (spans[i].marker.explicitlyCleared) { if (!out) { out = spans.slice(0, i); } }\n      else if (out) { out.push(spans[i]); }\n    }\n    return !out ? spans : out.length ? out : null\n  }\n\n  // Retrieve and filter the old marked spans stored in a change event.\n  function getOldSpans(doc, change) {\n    var found = change[\"spans_\" + doc.id];\n    if (!found) { return null }\n    var nw = [];\n    for (var i = 0; i < change.text.length; ++i)\n      { nw.push(removeClearedSpans(found[i])); }\n    return nw\n  }\n\n  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\n  function mergeOldSpans(doc, change) {\n    var old = getOldSpans(doc, change);\n    var stretched = stretchSpansOverChange(doc, change);\n    if (!old) { return stretched }\n    if (!stretched) { return old }\n\n    for (var i = 0; i < old.length; ++i) {\n      var oldCur = old[i], stretchCur = stretched[i];\n      if (oldCur && stretchCur) {\n        spans: for (var j = 0; j < stretchCur.length; ++j) {\n          var span = stretchCur[j];\n          for (var k = 0; k < oldCur.length; ++k)\n            { if (oldCur[k].marker == span.marker) { continue spans } }\n          oldCur.push(span);\n        }\n      } else if (stretchCur) {\n        old[i] = stretchCur;\n      }\n    }\n    return old\n  }\n\n  // Used both to provide a JSON-safe object in .getHistory, and, when\n  // detaching a document, to split the history in two\n  function copyHistoryArray(events, newGroup, instantiateSel) {\n    var copy = [];\n    for (var i = 0; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\n      for (var j = 0; j < changes.length; ++j) {\n        var change = changes[j], m = (void 0);\n        newChanges.push({from: change.from, to: change.to, text: change.text});\n        if (newGroup) { for (var prop in change) { if (m = prop.match(/^spans_(\\d+)$/)) {\n          if (indexOf(newGroup, Number(m[1])) > -1) {\n            lst(newChanges)[prop] = change[prop];\n            delete change[prop];\n          }\n        } } }\n      }\n    }\n    return copy\n  }\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(range, head, other, extend) {\n    if (extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head)\n    } else {\n      return new Range(other || head, head)\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options, extend) {\n    if (extend == null) { extend = doc.cm && (doc.cm.display.shift || doc.extend); }\n    setSelection(doc, new Selection([extendRange(doc.sel.primary(), head, other, extend)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    var out = [];\n    var extend = doc.cm && (doc.cm.display.shift || doc.extend);\n    for (var i = 0; i < doc.sel.ranges.length; i++)\n      { out[i] = extendRange(doc.sel.ranges[i], heads[i], null, extend); }\n    var newSel = normalizeSelection(doc.cm, out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(doc.cm, ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel, options) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          { this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head)); }\n      },\n      origin: options && options.origin\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj); }\n    if (obj.ranges != sel.ranges) { return normalizeSelection(doc.cm, obj.ranges, obj.ranges.length - 1) }\n    else { return sel }\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      { sel = filterSelectionChange(doc, sel, options); }\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm && doc.cm.getOption(\"readOnly\") != \"nocursor\")\n      { ensureCursorVisible(doc.cm); }\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) { return }\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = 1;\n      doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false));\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var old = sel.ranges.length == doc.sel.ranges.length && doc.sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, old && old.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, old && old.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) { out = sel.ranges.slice(0, i); }\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(doc.cm, out, sel.primIndex) : sel\n  }\n\n  function skipAtomicInner(doc, pos, oldPos, dir, mayClear) {\n    var line = getLine(doc, pos.line);\n    if (line.markedSpans) { for (var i = 0; i < line.markedSpans.length; ++i) {\n      var sp = line.markedSpans[i], m = sp.marker;\n\n      // Determine if we should prevent the cursor being placed to the left/right of an atomic marker\n      // Historically this was determined using the inclusiveLeft/Right option, but the new way to control it\n      // is with selectLeft/Right\n      var preventCursorLeft = (\"selectLeft\" in m) ? !m.selectLeft : m.inclusiveLeft;\n      var preventCursorRight = (\"selectRight\" in m) ? !m.selectRight : m.inclusiveRight;\n\n      if ((sp.from == null || (preventCursorLeft ? sp.from <= pos.ch : sp.from < pos.ch)) &&\n          (sp.to == null || (preventCursorRight ? sp.to >= pos.ch : sp.to > pos.ch))) {\n        if (mayClear) {\n          signal(m, \"beforeCursorEnter\");\n          if (m.explicitlyCleared) {\n            if (!line.markedSpans) { break }\n            else {--i; continue}\n          }\n        }\n        if (!m.atomic) { continue }\n\n        if (oldPos) {\n          var near = m.find(dir < 0 ? 1 : -1), diff = (void 0);\n          if (dir < 0 ? preventCursorRight : preventCursorLeft)\n            { near = movePos(doc, near, -dir, near && near.line == pos.line ? line : null); }\n          if (near && near.line == pos.line && (diff = cmp(near, oldPos)) && (dir < 0 ? diff < 0 : diff > 0))\n            { return skipAtomicInner(doc, near, pos, dir, mayClear) }\n        }\n\n        var far = m.find(dir < 0 ? -1 : 1);\n        if (dir < 0 ? preventCursorLeft : preventCursorRight)\n          { far = movePos(doc, far, dir, far.line == pos.line ? line : null); }\n        return far ? skipAtomicInner(doc, far, pos, dir, mayClear) : null\n      }\n    } }\n    return pos\n  }\n\n  // Ensure a given position is not inside an atomic range.\n  function skipAtomic(doc, pos, oldPos, bias, mayClear) {\n    var dir = bias || 1;\n    var found = skipAtomicInner(doc, pos, oldPos, dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, dir, true)) ||\n        skipAtomicInner(doc, pos, oldPos, -dir, mayClear) ||\n        (!mayClear && skipAtomicInner(doc, pos, oldPos, -dir, true));\n    if (!found) {\n      doc.cantEdit = true;\n      return Pos(doc.first, 0)\n    }\n    return found\n  }\n\n  function movePos(doc, pos, dir, line) {\n    if (dir < 0 && pos.ch == 0) {\n      if (pos.line > doc.first) { return clipPos(doc, Pos(pos.line - 1)) }\n      else { return null }\n    } else if (dir > 0 && pos.ch == (line || getLine(doc, pos.line)).text.length) {\n      if (pos.line < doc.first + doc.size - 1) { return Pos(pos.line + 1, 0) }\n      else { return null }\n    } else {\n      return new Pos(pos.line, pos.ch + dir)\n    }\n  }\n\n  function selectAll(cm) {\n    cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);\n  }\n\n  // UPDATING\n\n  // Allow \"beforeChange\" event handlers to influence a change\n  function filterChange(doc, change, update) {\n    var obj = {\n      canceled: false,\n      from: change.from,\n      to: change.to,\n      text: change.text,\n      origin: change.origin,\n      cancel: function () { return obj.canceled = true; }\n    };\n    if (update) { obj.update = function (from, to, text, origin) {\n      if (from) { obj.from = clipPos(doc, from); }\n      if (to) { obj.to = clipPos(doc, to); }\n      if (text) { obj.text = text; }\n      if (origin !== undefined) { obj.origin = origin; }\n    }; }\n    signal(doc, \"beforeChange\", doc, obj);\n    if (doc.cm) { signal(doc.cm, \"beforeChange\", doc.cm, obj); }\n\n    if (obj.canceled) {\n      if (doc.cm) { doc.cm.curOp.updateInput = 2; }\n      return null\n    }\n    return {from: obj.from, to: obj.to, text: obj.text, origin: obj.origin}\n  }\n\n  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) { return operation(doc.cm, makeChange)(doc, change, ignoreReadOnly) }\n      if (doc.cm.state.suppressEdits) { return }\n    }\n\n    if (hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\")) {\n      change = filterChange(doc, change, true);\n      if (!change) { return }\n    }\n\n    // Possibly split or suppress the update based on the presence\n    // of read-only spans in its range.\n    var split = sawReadOnlySpans && !ignoreReadOnly && removeReadOnlyRanges(doc, change.from, change.to);\n    if (split) {\n      for (var i = split.length - 1; i >= 0; --i)\n        { makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text, origin: change.origin}); }\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) { return }\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(doc, change, selAfter, doc.cm ? doc.cm.curOp.id : NaN);\n\n    makeChangeSingleDoc(doc, change, selAfter, stretchSpansOverChange(doc, change));\n    var rebased = [];\n\n    linkedDocs(doc, function (doc, sharedHist) {\n      if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n        rebaseHist(doc.history, change);\n        rebased.push(doc.history);\n      }\n      makeChangeSingleDoc(doc, change, null, stretchSpansOverChange(doc, change));\n    });\n  }\n\n  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    var suppress = doc.cm && doc.cm.state.suppressEdits;\n    if (suppress && !allowSelectionOnly) { return }\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    var i = 0;\n    for (; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        { break }\n    }\n    if (i == source.length) { return }\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return\n        }\n        selAfter = event;\n      } else if (suppress) {\n        source.push(event);\n        return\n      } else { break }\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\n    hist.generation = event.generation || ++hist.maxGeneration;\n\n    var filter = hasHandler(doc, \"beforeChange\") || doc.cm && hasHandler(doc.cm, \"beforeChange\");\n\n    var loop = function ( i ) {\n      var change = event.changes[i];\n      change.origin = type;\n      if (filter && !filterChange(doc, change, false)) {\n        source.length = 0;\n        return {}\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) { doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)}); }\n      var rebased = [];\n\n      // Propagate to the linked documents\n      linkedDocs(doc, function (doc, sharedHist) {\n        if (!sharedHist && indexOf(rebased, doc.history) == -1) {\n          rebaseHist(doc.history, change);\n          rebased.push(doc.history);\n        }\n        makeChangeSingleDoc(doc, change, null, mergeOldSpans(doc, change));\n      });\n    };\n\n    for (var i$1 = event.changes.length - 1; i$1 >= 0; --i$1) {\n      var returned = loop( i$1 );\n\n      if ( returned ) return returned.v;\n    }\n  }\n\n  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) { return }\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function (range) { return new Range(\n      Pos(range.anchor.line + distance, range.anchor.ch),\n      Pos(range.head.line + distance, range.head.ch)\n    ); }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        { regLineChange(doc.cm, l, \"gutter\"); }\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\n  function makeChangeSingleDoc(doc, change, selAfter, spans) {\n    if (doc.cm && !doc.cm.curOp)\n      { return operation(doc.cm, makeChangeSingleDoc)(doc, change, selAfter, spans) }\n\n    if (change.to.line < doc.first) {\n      shiftDoc(doc, change.text.length - 1 - (change.to.line - change.from.line));\n      return\n    }\n    if (change.from.line > doc.lastLine()) { return }\n\n    // Clip the change to the size of this doc\n    if (change.from.line < doc.first) {\n      var shift = change.text.length - 1 - (doc.first - change.from.line);\n      shiftDoc(doc, shift);\n      change = {from: Pos(doc.first, 0), to: Pos(change.to.line + shift, change.to.ch),\n                text: [lst(change.text)], origin: change.origin};\n    }\n    var last = doc.lastLine();\n    if (change.to.line > last) {\n      change = {from: change.from, to: Pos(last, getLine(doc, last).text.length),\n                text: [change.text[0]], origin: change.origin};\n    }\n\n    change.removed = getBetween(doc, change.from, change.to);\n\n    if (!selAfter) { selAfter = computeSelAfterChange(doc, change); }\n    if (doc.cm) { makeChangeSingleDocInEditor(doc.cm, change, spans); }\n    else { updateDoc(doc, change, spans); }\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n\n    if (doc.cantEdit && skipAtomic(doc, Pos(doc.firstLine(), 0)))\n      { doc.cantEdit = false; }\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\n    var doc = cm.doc, display = cm.display, from = change.from, to = change.to;\n\n    var recomputeMaxLength = false, checkWidthStart = from.line;\n    if (!cm.options.lineWrapping) {\n      checkWidthStart = lineNo(visualLine(getLine(doc, from.line)));\n      doc.iter(checkWidthStart, to.line + 1, function (line) {\n        if (line == display.maxLine) {\n          recomputeMaxLength = true;\n          return true\n        }\n      });\n    }\n\n    if (doc.sel.contains(change.from, change.to) > -1)\n      { signalCursorActivity(cm); }\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function (line) {\n        var len = lineLength(line);\n        if (len > display.maxLineLength) {\n          display.maxLine = line;\n          display.maxLineLength = len;\n          display.maxLineChanged = true;\n          recomputeMaxLength = false;\n        }\n      });\n      if (recomputeMaxLength) { cm.curOp.updateMaxLine = true; }\n    }\n\n    retreatFrontier(doc, from.line);\n    startWorker(cm, 400);\n\n    var lendiff = change.text.length - (to.line - from.line) - 1;\n    // Remember that these lines changed, for updating the display\n    if (change.full)\n      { regChange(cm); }\n    else if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      { regLineChange(cm, from.line, \"text\"); }\n    else\n      { regChange(cm, from.line, to.line + 1, lendiff); }\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) { signalLater(cm, \"change\", cm, obj); }\n      if (changesHandler) { (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj); }\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    var assign;\n\n    if (!to) { to = from; }\n    if (cmp(to, from) < 0) { (assign = [to, from], from = assign[0], to = assign[1]); }\n    if (typeof code == \"string\") { code = doc.splitLines(code); }\n    makeChange(doc, {from: from, to: to, text: code, origin: origin});\n  }\n\n  // Rebasing/resetting history to deal with externally-sourced changes\n\n  function rebaseHistSelSingle(pos, from, to, diff) {\n    if (to < pos.line) {\n      pos.line += diff;\n    } else if (from < pos.line) {\n      pos.line = from;\n      pos.ch = 0;\n    }\n  }\n\n  // Tries to rebase an array of history events given a change in the\n  // document. If the change touches the same lines as the event, the\n  // event, and everything 'behind' it, is discarded. If the change is\n  // before the event, the event's positions are updated. Uses a\n  // copy-on-write scheme for the positions, to avoid having to\n  // reallocate them all on every rebase, but also avoid problems with\n  // shared position objects being unsafely updated.\n  function rebaseHistArray(array, from, to, diff) {\n    for (var i = 0; i < array.length; ++i) {\n      var sub = array[i], ok = true;\n      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue\n      }\n      for (var j$1 = 0; j$1 < sub.changes.length; ++j$1) {\n        var cur = sub.changes[j$1];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\n      }\n    }\n  }\n\n  function rebaseHist(hist, change) {\n    var from = change.from.line, to = change.to.line, diff = change.text.length - (to - from) - 1;\n    rebaseHistArray(hist.done, from, to, diff);\n    rebaseHistArray(hist.undone, from, to, diff);\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\n    if (typeof handle == \"number\") { line = getLine(doc, clipLine(doc, handle)); }\n    else { no = lineNo(handle); }\n    if (no == null) { return null }\n    if (op(line, no) && doc.cm) { regLineChange(doc.cm, no, changeType); }\n    return line\n  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    var height = 0;\n    for (var i = 0; i < lines.length; ++i) {\n      lines[i].parent = this;\n      height += lines[i].height;\n    }\n    this.height = height;\n  }\n\n  LeafChunk.prototype = {\n    chunkSize: function() { return this.lines.length },\n\n    // Remove the n lines at offset 'at'.\n    removeInner: function(at, n) {\n      for (var i = at, e = at + n; i < e; ++i) {\n        var line = this.lines[i];\n        this.height -= line.height;\n        cleanUpLine(line);\n        signalLater(line, \"delete\");\n      }\n      this.lines.splice(at, n);\n    },\n\n    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\n    insertInner: function(at, lines, height) {\n      this.height += height;\n      this.lines = this.lines.slice(0, at).concat(lines).concat(this.lines.slice(at));\n      for (var i = 0; i < lines.length; ++i) { lines[i].parent = this; }\n    },\n\n    // Used to iterate over a part of the tree.\n    iterN: function(at, n, op) {\n      for (var e = at + n; at < e; ++at)\n        { if (op(this.lines[at])) { return true } }\n    }\n  };\n\n  function BranchChunk(children) {\n    this.children = children;\n    var size = 0, height = 0;\n    for (var i = 0; i < children.length; ++i) {\n      var ch = children[i];\n      size += ch.chunkSize(); height += ch.height;\n      ch.parent = this;\n    }\n    this.size = size;\n    this.height = height;\n    this.parent = null;\n  }\n\n  BranchChunk.prototype = {\n    chunkSize: function() { return this.size },\n\n    removeInner: function(at, n) {\n      this.size -= n;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var rm = Math.min(n, sz - at), oldHeight = child.height;\n          child.removeInner(at, rm);\n          this.height -= oldHeight - child.height;\n          if (sz == rm) { this.children.splice(i--, 1); child.parent = null; }\n          if ((n -= rm) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n      // If the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\n        var lines = [];\n        this.collapse(lines);\n        this.children = [new LeafChunk(lines)];\n        this.children[0].parent = this;\n      }\n    },\n\n    collapse: function(lines) {\n      for (var i = 0; i < this.children.length; ++i) { this.children[i].collapse(lines); }\n    },\n\n    insertInner: function(at, lines, height) {\n      this.size += lines.length;\n      this.height += height;\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at <= sz) {\n          child.insertInner(at, lines, height);\n          if (child.lines && child.lines.length > 50) {\n            // To avoid memory thrashing when child.lines is huge (e.g. first view of a large file), it's never spliced.\n            // Instead, small slices are taken. They're taken in order because sequential memory accesses are fastest.\n            var remaining = child.lines.length % 25 + 25;\n            for (var pos = remaining; pos < child.lines.length;) {\n              var leaf = new LeafChunk(child.lines.slice(pos, pos += 25));\n              child.height -= leaf.height;\n              this.children.splice(++i, 0, leaf);\n              leaf.parent = this;\n            }\n            child.lines = child.lines.slice(0, remaining);\n            this.maybeSpill();\n          }\n          break\n        }\n        at -= sz;\n      }\n    },\n\n    // When a node has grown, check whether it should be split.\n    maybeSpill: function() {\n      if (this.children.length <= 10) { return }\n      var me = this;\n      do {\n        var spilled = me.children.splice(me.children.length - 5, 5);\n        var sibling = new BranchChunk(spilled);\n        if (!me.parent) { // Become the parent node\n          var copy = new BranchChunk(me.children);\n          copy.parent = me;\n          me.children = [copy, sibling];\n          me = copy;\n       } else {\n          me.size -= sibling.size;\n          me.height -= sibling.height;\n          var myIndex = indexOf(me.parent.children, me);\n          me.parent.children.splice(myIndex + 1, 0, sibling);\n        }\n        sibling.parent = me.parent;\n      } while (me.children.length > 10)\n      me.parent.maybeSpill();\n    },\n\n    iterN: function(at, n, op) {\n      for (var i = 0; i < this.children.length; ++i) {\n        var child = this.children[i], sz = child.chunkSize();\n        if (at < sz) {\n          var used = Math.min(n, sz - at);\n          if (child.iterN(at, used, op)) { return true }\n          if ((n -= used) == 0) { break }\n          at = 0;\n        } else { at -= sz; }\n      }\n    }\n  };\n\n  // Line widgets are block elements displayed above or below a line.\n\n  var LineWidget = function(doc, node, options) {\n    if (options) { for (var opt in options) { if (options.hasOwnProperty(opt))\n      { this[opt] = options[opt]; } } }\n    this.doc = doc;\n    this.node = node;\n  };\n\n  LineWidget.prototype.clear = function () {\n    var cm = this.doc.cm, ws = this.line.widgets, line = this.line, no = lineNo(line);\n    if (no == null || !ws) { return }\n    for (var i = 0; i < ws.length; ++i) { if (ws[i] == this) { ws.splice(i--, 1); } }\n    if (!ws.length) { line.widgets = null; }\n    var height = widgetHeight(this);\n    updateLineHeight(line, Math.max(0, line.height - height));\n    if (cm) {\n      runInOp(cm, function () {\n        adjustScrollWhenAboveVisible(cm, line, -height);\n        regLineChange(cm, no, \"widget\");\n      });\n      signalLater(cm, \"lineWidgetCleared\", cm, this, no);\n    }\n  };\n\n  LineWidget.prototype.changed = function () {\n      var this$1 = this;\n\n    var oldH = this.height, cm = this.doc.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) { return }\n    if (!lineIsHidden(this.doc, line)) { updateLineHeight(line, line.height + diff); }\n    if (cm) {\n      runInOp(cm, function () {\n        cm.curOp.forceUpdate = true;\n        adjustScrollWhenAboveVisible(cm, line, diff);\n        signalLater(cm, \"lineWidgetChanged\", cm, this$1, lineNo(line));\n      });\n    }\n  };\n  eventMixin(LineWidget);\n\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      { addToScrollTop(cm, diff); }\n  }\n\n  function addLineWidget(doc, handle, node, options) {\n    var widget = new LineWidget(doc, node, options);\n    var cm = doc.cm;\n    if (cm && widget.noHScroll) { cm.display.alignWidgets = true; }\n    changeLine(doc, handle, \"widget\", function (line) {\n      var widgets = line.widgets || (line.widgets = []);\n      if (widget.insertAt == null) { widgets.push(widget); }\n      else { widgets.splice(Math.min(widgets.length, Math.max(0, widget.insertAt)), 0, widget); }\n      widget.line = line;\n      if (cm && !lineIsHidden(doc, line)) {\n        var aboveVisible = heightAtLine(line) < doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) { addToScrollTop(cm, widget.height); }\n        cm.curOp.forceUpdate = true;\n      }\n      return true\n    });\n    if (cm) { signalLater(cm, \"lineWidgetAdded\", cm, widget, typeof handle == \"number\" ? handle : lineNo(handle)); }\n    return widget\n  }\n\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  var TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n    this.id = ++nextMarkerId;\n  };\n\n  // Clear the marker.\n  TextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    var cm = this.doc.cm, withOp = cm && !cm.curOp;\n    if (withOp) { startOperation(cm); }\n    if (hasHandler(this, \"clear\")) {\n      var found = this.find();\n      if (found) { signalLater(this, \"clear\", found.from, found.to); }\n    }\n    var min = null, max = null;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (cm && !this.collapsed) { regLineChange(cm, lineNo(line), \"text\"); }\n      else if (cm) {\n        if (span.to != null) { max = lineNo(line); }\n        if (span.from != null) { min = lineNo(line); }\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && this.collapsed && !lineIsHidden(this.doc, line) && cm)\n        { updateLineHeight(line, textHeight(cm.display)); }\n    }\n    if (cm && this.collapsed && !cm.options.lineWrapping) { for (var i$1 = 0; i$1 < this.lines.length; ++i$1) {\n      var visual = visualLine(this.lines[i$1]), len = lineLength(visual);\n      if (len > cm.display.maxLineLength) {\n        cm.display.maxLine = visual;\n        cm.display.maxLineLength = len;\n        cm.display.maxLineChanged = true;\n      }\n    } }\n\n    if (min != null && cm && this.collapsed) { regChange(cm, min, max + 1); }\n    this.lines.length = 0;\n    this.explicitlyCleared = true;\n    if (this.atomic && this.doc.cantEdit) {\n      this.doc.cantEdit = false;\n      if (cm) { reCheckSelection(cm.doc); }\n    }\n    if (cm) { signalLater(cm, \"markerCleared\", cm, this, min, max); }\n    if (withOp) { endOperation(cm); }\n    if (this.parent) { this.parent.clear(); }\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function (side, lineObj) {\n    if (side == null && this.type == \"bookmark\") { side = 1; }\n    var from, to;\n    for (var i = 0; i < this.lines.length; ++i) {\n      var line = this.lines[i];\n      var span = getMarkedSpanFor(line.markedSpans, this);\n      if (span.from != null) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) { return from }\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) { return to }\n      }\n    }\n    return from && {from: from, to: to}\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function () {\n      var this$1 = this;\n\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) { return }\n    runInOp(cm, function () {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          { updateLineHeight(line, line.height + dHeight); }\n      }\n      signalLater(cm, \"markerChanged\", cm, this$1);\n    });\n  };\n\n  TextMarker.prototype.attachLine = function (line) {\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp;\n      if (!op.maybeHiddenMarkers || indexOf(op.maybeHiddenMarkers, this) == -1)\n        { (op.maybeUnhiddenMarkers || (op.maybeUnhiddenMarkers = [])).push(this); }\n    }\n    this.lines.push(line);\n  };\n\n  TextMarker.prototype.detachLine = function (line) {\n    this.lines.splice(indexOf(this.lines, line), 1);\n    if (!this.lines.length && this.doc.cm) {\n      var op = this.doc.cm.curOp\n      ;(op.maybeHiddenMarkers || (op.maybeHiddenMarkers = [])).push(this);\n    }\n  };\n  eventMixin(TextMarker);\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) { return markTextShared(doc, from, to, options, type) }\n    // Ensure we are in an operation.\n    if (doc.cm && !doc.cm.curOp) { return operation(doc.cm, markText)(doc, from, to, options, type) }\n\n    var marker = new TextMarker(doc, type), diff = cmp(from, to);\n    if (options) { copyObj(options, marker, false); }\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      { return marker }\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = eltP(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) { marker.widgetNode.setAttribute(\"cm-ignore-events\", \"true\"); }\n      if (options.insertLeft) { marker.widgetNode.insertLeft = true; }\n    }\n    if (marker.collapsed) {\n      if (conflictingCollapsedRange(doc, from.line, from, to, marker) ||\n          from.line != to.line && conflictingCollapsedRange(doc, to.line, from, to, marker))\n        { throw new Error(\"Inserting collapsed marker partially overlapping an existing one\") }\n      seeCollapsedSpans();\n    }\n\n    if (marker.addToHistory)\n      { addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, NaN); }\n\n    var curLine = from.line, cm = doc.cm, updateMaxLine;\n    doc.iter(curLine, to.line + 1, function (line) {\n      if (cm && marker.collapsed && !cm.options.lineWrapping && visualLine(line) == cm.display.maxLine)\n        { updateMaxLine = true; }\n      if (marker.collapsed && curLine != from.line) { updateLineHeight(line, 0); }\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null), doc.cm && doc.cm.curOp);\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\n    if (marker.collapsed) { doc.iter(from.line, to.line + 1, function (line) {\n      if (lineIsHidden(doc, line)) { updateLineHeight(line, 0); }\n    }); }\n\n    if (marker.clearOnEnter) { on(marker, \"beforeCursorEnter\", function () { return marker.clear(); }); }\n\n    if (marker.readOnly) {\n      seeReadOnlySpans();\n      if (doc.history.done.length || doc.history.undone.length)\n        { doc.clearHistory(); }\n    }\n    if (marker.collapsed) {\n      marker.id = ++nextMarkerId;\n      marker.atomic = true;\n    }\n    if (cm) {\n      // Sync editor state\n      if (updateMaxLine) { cm.curOp.updateMaxLine = true; }\n      if (marker.collapsed)\n        { regChange(cm, from.line, to.line + 1); }\n      else if (marker.className || marker.startStyle || marker.endStyle || marker.css ||\n               marker.attributes || marker.title)\n        { for (var i = from.line; i <= to.line; i++) { regLineChange(cm, i, \"text\"); } }\n      if (marker.atomic) { reCheckSelection(cm.doc); }\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      { markers[i].parent = this; }\n  };\n\n  SharedTextMarker.prototype.clear = function () {\n    if (this.explicitlyCleared) { return }\n    this.explicitlyCleared = true;\n    for (var i = 0; i < this.markers.length; ++i)\n      { this.markers[i].clear(); }\n    signalLater(this, \"clear\");\n  };\n\n  SharedTextMarker.prototype.find = function (side, lineObj) {\n    return this.primary.find(side, lineObj)\n  };\n  eventMixin(SharedTextMarker);\n\n  function markTextShared(doc, from, to, options, type) {\n    options = copyObj(options);\n    options.shared = false;\n    var markers = [markText(doc, from, to, options, type)], primary = markers[0];\n    var widget = options.widgetNode;\n    linkedDocs(doc, function (doc) {\n      if (widget) { options.widgetNode = widget.cloneNode(true); }\n      markers.push(markText(doc, clipPos(doc, from), clipPos(doc, to), options, type));\n      for (var i = 0; i < doc.linked.length; ++i)\n        { if (doc.linked[i].isParent) { return } }\n      primary = lst(markers);\n    });\n    return new SharedTextMarker(markers, primary)\n  }\n\n  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())), function (m) { return m.parent; })\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    var loop = function ( i ) {\n      var marker = markers[i], linked = [marker.primary.doc];\n      linkedDocs(marker.primary.doc, function (d) { return linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    };\n\n    for (var i = 0; i < markers.length; i++) loop( i );\n  }\n\n  var nextDocId = 0;\n  var Doc = function(text, mode, firstLine, lineSep, direction) {\n    if (!(this instanceof Doc)) { return new Doc(text, mode, firstLine, lineSep, direction) }\n    if (firstLine == null) { firstLine = 0; }\n\n    BranchChunk.call(this, [new LeafChunk([new Line(\"\", null)])]);\n    this.first = firstLine;\n    this.scrollTop = this.scrollLeft = 0;\n    this.cantEdit = false;\n    this.cleanGeneration = 1;\n    this.modeFrontier = this.highlightFrontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(null);\n    this.id = ++nextDocId;\n    this.modeOption = mode;\n    this.lineSep = lineSep;\n    this.direction = (direction == \"rtl\") ? \"rtl\" : \"ltr\";\n    this.extend = false;\n\n    if (typeof text == \"string\") { text = this.splitLines(text); }\n    updateDoc(this, {from: start, to: start, text: text});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\n    iter: function(from, to, op) {\n      if (op) { this.iterN(from - this.first, to - from, op); }\n      else { this.iterN(this.first, this.first + this.size, from); }\n    },\n\n    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++i) { height += lines[i].height; }\n      this.insertInner(at - this.first, lines, height);\n    },\n    remove: function(at, n) { this.removeInner(at - this.first, n); },\n\n    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\n\n    getValue: function(lineSep) {\n      var lines = getLines(this, this.first, this.first + this.size);\n      if (lineSep === false) { return lines }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n    setValue: docMethodOp(function(code) {\n      var top = Pos(this.first, 0), last = this.first + this.size - 1;\n      makeChange(this, {from: top, to: Pos(last, getLine(this, last).text.length),\n                        text: this.splitLines(code), origin: \"setValue\", full: true}, true);\n      if (this.cm) { scrollToCoords(this.cm, 0, 0); }\n      setSelection(this, simpleSelection(top), sel_dontScroll);\n    }),\n    replaceRange: function(code, from, to, origin) {\n      from = clipPos(this, from);\n      to = to ? clipPos(this, to) : from;\n      replaceRange(this, code, from, to, origin);\n    },\n    getRange: function(from, to, lineSep) {\n      var lines = getBetween(this, clipPos(this, from), clipPos(this, to));\n      if (lineSep === false) { return lines }\n      if (lineSep === '') { return lines.join('') }\n      return lines.join(lineSep || this.lineSeparator())\n    },\n\n    getLine: function(line) {var l = this.getLineHandle(line); return l && l.text},\n\n    getLineHandle: function(line) {if (isLine(this, line)) { return getLine(this, line) }},\n    getLineNumber: function(line) {return lineNo(line)},\n\n    getLineHandleVisualStart: function(line) {\n      if (typeof line == \"number\") { line = getLine(this, line); }\n      return visualLine(line)\n    },\n\n    lineCount: function() {return this.size},\n    firstLine: function() {return this.first},\n    lastLine: function() {return this.first + this.size - 1},\n\n    clipPos: function(pos) {return clipPos(this, pos)},\n\n    getCursor: function(start) {\n      var range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") { pos = range.head; }\n      else if (start == \"anchor\") { pos = range.anchor; }\n      else if (start == \"end\" || start == \"to\" || start === false) { pos = range.to(); }\n      else { pos = range.from(); }\n      return pos\n    },\n    listSelections: function() { return this.sel.ranges },\n    somethingSelected: function() {return this.sel.somethingSelected()},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      var heads = map(this.sel.ranges, f);\n      extendSelections(this, clipPosArray(this, heads), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) { return }\n      var out = [];\n      for (var i = 0; i < ranges.length; i++)\n        { out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head || ranges[i].anchor)); }\n      if (primary == null) { primary = Math.min(ranges.length - 1, this.sel.primIndex); }\n      setSelection(this, normalizeSelection(this.cm, out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(this.cm, ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) { return lines }\n      else { return lines.join(lineSep || this.lineSeparator()) }\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) { sel = sel.join(lineSep || this.lineSeparator()); }\n        parts[i] = sel;\n      }\n      return parts\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        { dup[i] = code; }\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: this.splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i$1 = changes.length - 1; i$1 >= 0; i$1--)\n        { makeChange(this, changes[i$1]); }\n      if (newSel) { setSelectionReplaceHistory(this, newSel); }\n      else if (this.cm) { ensureCursorVisible(this.cm); }\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) { if (!hist.done[i].ranges) { ++done; } }\n      for (var i$1 = 0; i$1 < hist.undone.length; i$1++) { if (!hist.undone[i$1].ranges) { ++undone; } }\n      return {undo: done, redo: undone}\n    },\n    clearHistory: function() {\n      var this$1 = this;\n\n      this.history = new History(this.history);\n      linkedDocs(this, function (doc) { return doc.history = this$1.history; }, true);\n    },\n\n    markClean: function() {\n      this.cleanGeneration = this.changeGeneration(true);\n    },\n    changeGeneration: function(forceSplit) {\n      if (forceSplit)\n        { this.history.lastOp = this.history.lastSelOp = this.history.lastOrigin = null; }\n      return this.history.generation\n    },\n    isClean: function (gen) {\n      return this.history.generation == (gen || this.cleanGeneration)\n    },\n\n    getHistory: function() {\n      return {done: copyHistoryArray(this.history.done),\n              undone: copyHistoryArray(this.history.undone)}\n    },\n    setHistory: function(histData) {\n      var hist = this.history = new History(this.history);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    setGutterMarker: docMethodOp(function(line, gutterID, value) {\n      return changeLine(this, line, \"gutter\", function (line) {\n        var markers = line.gutterMarkers || (line.gutterMarkers = {});\n        markers[gutterID] = value;\n        if (!value && isEmpty(markers)) { line.gutterMarkers = null; }\n        return true\n      })\n    }),\n\n    clearGutter: docMethodOp(function(gutterID) {\n      var this$1 = this;\n\n      this.iter(function (line) {\n        if (line.gutterMarkers && line.gutterMarkers[gutterID]) {\n          changeLine(this$1, line, \"gutter\", function () {\n            line.gutterMarkers[gutterID] = null;\n            if (isEmpty(line.gutterMarkers)) { line.gutterMarkers = null; }\n            return true\n          });\n        }\n      });\n    }),\n\n    lineInfo: function(line) {\n      var n;\n      if (typeof line == \"number\") {\n        if (!isLine(this, line)) { return null }\n        n = line;\n        line = getLine(this, line);\n        if (!line) { return null }\n      } else {\n        n = lineNo(line);\n        if (n == null) { return null }\n      }\n      return {line: n, handle: line, text: line.text, gutterMarkers: line.gutterMarkers,\n              textClass: line.textClass, bgClass: line.bgClass, wrapClass: line.wrapClass,\n              widgets: line.widgets}\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        if (!line[prop]) { line[prop] = cls; }\n        else if (classTest(cls).test(line[prop])) { return false }\n        else { line[prop] += \" \" + cls; }\n        return true\n      })\n    }),\n    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, where == \"gutter\" ? \"gutter\" : \"class\", function (line) {\n        var prop = where == \"text\" ? \"textClass\"\n                 : where == \"background\" ? \"bgClass\"\n                 : where == \"gutter\" ? \"gutterClass\" : \"wrapClass\";\n        var cur = line[prop];\n        if (!cur) { return false }\n        else if (cls == null) { line[prop] = null; }\n        else {\n          var found = cur.match(classTest(cls));\n          if (!found) { return false }\n          var end = found.index + found[0].length;\n          line[prop] = cur.slice(0, found.index) + (!found.index || end == cur.length ? \"\" : \" \") + cur.slice(end) || null;\n        }\n        return true\n      })\n    }),\n\n    addLineWidget: docMethodOp(function(handle, node, options) {\n      return addLineWidget(this, handle, node, options)\n    }),\n    removeLineWidget: function(widget) { widget.clear(); },\n\n    markText: function(from, to, options) {\n      return markText(this, clipPos(this, from), clipPos(this, to), options, options && options.type || \"range\")\n    },\n    setBookmark: function(pos, options) {\n      var realOpts = {replacedWith: options && (options.nodeType == null ? options.widget : options),\n                      insertLeft: options && options.insertLeft,\n                      clearWhenEmpty: false, shared: options && options.shared,\n                      handleMouseEvents: options && options.handleMouseEvents};\n      pos = clipPos(this, pos);\n      return markText(this, pos, pos, realOpts, \"bookmark\")\n    },\n    findMarksAt: function(pos) {\n      pos = clipPos(this, pos);\n      var markers = [], spans = getLine(this, pos.line).markedSpans;\n      if (spans) { for (var i = 0; i < spans.length; ++i) {\n        var span = spans[i];\n        if ((span.from == null || span.from <= pos.ch) &&\n            (span.to == null || span.to >= pos.ch))\n          { markers.push(span.marker.parent || span.marker); }\n      } }\n      return markers\n    },\n    findMarks: function(from, to, filter) {\n      from = clipPos(this, from); to = clipPos(this, to);\n      var found = [], lineNo = from.line;\n      this.iter(from.line, to.line + 1, function (line) {\n        var spans = line.markedSpans;\n        if (spans) { for (var i = 0; i < spans.length; i++) {\n          var span = spans[i];\n          if (!(span.to != null && lineNo == from.line && from.ch >= span.to ||\n                span.from == null && lineNo != from.line ||\n                span.from != null && lineNo == to.line && span.from >= to.ch) &&\n              (!filter || filter(span.marker)))\n            { found.push(span.marker.parent || span.marker); }\n        } }\n        ++lineNo;\n      });\n      return found\n    },\n    getAllMarks: function() {\n      var markers = [];\n      this.iter(function (line) {\n        var sps = line.markedSpans;\n        if (sps) { for (var i = 0; i < sps.length; ++i)\n          { if (sps[i].from != null) { markers.push(sps[i].marker); } } }\n      });\n      return markers\n    },\n\n    posFromIndex: function(off) {\n      var ch, lineNo = this.first, sepSize = this.lineSeparator().length;\n      this.iter(function (line) {\n        var sz = line.text.length + sepSize;\n        if (sz > off) { ch = off; return true }\n        off -= sz;\n        ++lineNo;\n      });\n      return clipPos(this, Pos(lineNo, ch))\n    },\n    indexFromPos: function (coords) {\n      coords = clipPos(this, coords);\n      var index = coords.ch;\n      if (coords.line < this.first || coords.ch < 0) { return 0 }\n      var sepSize = this.lineSeparator().length;\n      this.iter(this.first, coords.line, function (line) { // iter aborts when callback returns a truthy value\n        index += line.text.length + sepSize;\n      });\n      return index\n    },\n\n    copy: function(copyHistory) {\n      var doc = new Doc(getLines(this, this.first, this.first + this.size),\n                        this.modeOption, this.first, this.lineSep, this.direction);\n      doc.scrollTop = this.scrollTop; doc.scrollLeft = this.scrollLeft;\n      doc.sel = this.sel;\n      doc.extend = false;\n      if (copyHistory) {\n        doc.history.undoDepth = this.history.undoDepth;\n        doc.setHistory(this.getHistory());\n      }\n      return doc\n    },\n\n    linkedDoc: function(options) {\n      if (!options) { options = {}; }\n      var from = this.first, to = this.first + this.size;\n      if (options.from != null && options.from > from) { from = options.from; }\n      if (options.to != null && options.to < to) { to = options.to; }\n      var copy = new Doc(getLines(this, from, to), options.mode || this.modeOption, from, this.lineSep, this.direction);\n      if (options.sharedHist) { copy.history = this.history\n      ; }(this.linked || (this.linked = [])).push({doc: copy, sharedHist: options.sharedHist});\n      copy.linked = [{doc: this, isParent: true, sharedHist: options.sharedHist}];\n      copySharedMarkers(copy, findSharedMarkers(this));\n      return copy\n    },\n    unlinkDoc: function(other) {\n      if (other instanceof CodeMirror) { other = other.doc; }\n      if (this.linked) { for (var i = 0; i < this.linked.length; ++i) {\n        var link = this.linked[i];\n        if (link.doc != other) { continue }\n        this.linked.splice(i, 1);\n        other.unlinkDoc(this);\n        detachSharedMarkers(findSharedMarkers(this));\n        break\n      } }\n      // If the histories were shared, split them again\n      if (other.history == this.history) {\n        var splitIds = [other.id];\n        linkedDocs(other, function (doc) { return splitIds.push(doc.id); }, true);\n        other.history = new History(null);\n        other.history.done = copyHistoryArray(this.history.done, splitIds);\n        other.history.undone = copyHistoryArray(this.history.undone, splitIds);\n      }\n    },\n    iterLinkedDocs: function(f) {linkedDocs(this, f);},\n\n    getMode: function() {return this.mode},\n    getEditor: function() {return this.cm},\n\n    splitLines: function(str) {\n      if (this.lineSep) { return str.split(this.lineSep) }\n      return splitLinesAuto(str)\n    },\n    lineSeparator: function() { return this.lineSep || \"\\n\" },\n\n    setDirection: docMethodOp(function (dir) {\n      if (dir != \"rtl\") { dir = \"ltr\"; }\n      if (dir == this.direction) { return }\n      this.direction = dir;\n      this.iter(function (line) { return line.order = null; });\n      if (this.cm) { directionChanged(this.cm); }\n    })\n  });\n\n  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Kludge to work around strange IE behavior where it'll sometimes\n  // re-fire a series of drag-related events right after the drop (#1551)\n  var lastDrop = 0;\n\n  function onDrop(e) {\n    var cm = this;\n    clearDragCursor(cm);\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e))\n      { return }\n    e_preventDefault(e);\n    if (ie) { lastDrop = +new Date; }\n    var pos = posFromMouse(cm, e, true), files = e.dataTransfer.files;\n    if (!pos || cm.isReadOnly()) { return }\n    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\n    if (files && files.length && window.FileReader && window.File) {\n      var n = files.length, text = Array(n), read = 0;\n      var markAsReadAndPasteIfAllFilesAreRead = function () {\n        if (++read == n) {\n          operation(cm, function () {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos,\n                          text: cm.doc.splitLines(\n                              text.filter(function (t) { return t != null; }).join(cm.doc.lineSeparator())),\n                          origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(clipPos(cm.doc, pos), clipPos(cm.doc, changeEnd(change))));\n          })();\n        }\n      };\n      var readTextFromFile = function (file, i) {\n        if (cm.options.allowDropFileTypes &&\n            indexOf(cm.options.allowDropFileTypes, file.type) == -1) {\n          markAsReadAndPasteIfAllFilesAreRead();\n          return\n        }\n        var reader = new FileReader;\n        reader.onerror = function () { return markAsReadAndPasteIfAllFilesAreRead(); };\n        reader.onload = function () {\n          var content = reader.result;\n          if (/[\\x00-\\x08\\x0e-\\x1f]{2}/.test(content)) {\n            markAsReadAndPasteIfAllFilesAreRead();\n            return\n          }\n          text[i] = content;\n          markAsReadAndPasteIfAllFilesAreRead();\n        };\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < files.length; i++) { readTextFromFile(files[i], i); }\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\n        cm.state.draggingText(e);\n        // Ensure the editor is re-focused\n        setTimeout(function () { return cm.display.input.focus(); }, 20);\n        return\n      }\n      try {\n        var text$1 = e.dataTransfer.getData(\"Text\");\n        if (text$1) {\n          var selected;\n          if (cm.state.draggingText && !cm.state.draggingText.copy)\n            { selected = cm.listSelections(); }\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) { for (var i$1 = 0; i$1 < selected.length; ++i$1)\n            { replaceRange(cm.doc, \"\", selected[i$1].anchor, selected[i$1].head, \"drag\"); } }\n          cm.replaceSelection(text$1, \"around\", \"paste\");\n          cm.display.input.focus();\n        }\n      }\n      catch(e$1){}\n    }\n  }\n\n  function onDragStart(cm, e) {\n    if (ie && (!cm.state.draggingText || +new Date - lastDrop < 100)) { e_stop(e); return }\n    if (signalDOMEvent(cm, e) || eventInWidget(cm.display, e)) { return }\n\n    e.dataTransfer.setData(\"Text\", cm.getSelection());\n    e.dataTransfer.effectAllowed = \"copyMove\";\n\n    // Use dummy image instead of default browsers image.\n    // Recent Safari (~6.0.2) have a tendency to segfault when this happens, so we don't do it there.\n    if (e.dataTransfer.setDragImage && !safari) {\n      var img = elt(\"img\", null, null, \"position: fixed; left: 0; top: 0;\");\n      img.src = \"data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\";\n      if (presto) {\n        img.width = img.height = 1;\n        cm.display.wrapper.appendChild(img);\n        // Force a relayout, or Opera won't use our image for some obscure reason\n        img._top = img.offsetTop;\n      }\n      e.dataTransfer.setDragImage(img, 0, 0);\n      if (presto) { img.parentNode.removeChild(img); }\n    }\n  }\n\n  function onDragOver(cm, e) {\n    var pos = posFromMouse(cm, e);\n    if (!pos) { return }\n    var frag = document.createDocumentFragment();\n    drawSelectionCursor(cm, pos, frag);\n    if (!cm.display.dragCursor) {\n      cm.display.dragCursor = elt(\"div\", null, \"CodeMirror-cursors CodeMirror-dragcursors\");\n      cm.display.lineSpace.insertBefore(cm.display.dragCursor, cm.display.cursorDiv);\n    }\n    removeChildrenAndAdd(cm.display.dragCursor, frag);\n  }\n\n  function clearDragCursor(cm) {\n    if (cm.display.dragCursor) {\n      cm.display.lineSpace.removeChild(cm.display.dragCursor);\n      cm.display.dragCursor = null;\n    }\n  }\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.getElementsByClassName) { return }\n    var byClass = document.getElementsByClassName(\"CodeMirror\"), editors = [];\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) { editors.push(cm); }\n    }\n    if (editors.length) { editors[0].operation(function () {\n      for (var i = 0; i < editors.length; i++) { f(editors[i]); }\n    }); }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) { return }\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function () {\n      if (resizeTimer == null) { resizeTimer = setTimeout(function () {\n        resizeTimer = null;\n        forEachCodeMirror(onResize);\n      }, 100); }\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function () { return forEachCodeMirror(onBlur); });\n  }\n  // Called when the window resizes\n  function onResize(cm) {\n    var d = cm.display;\n    // Might be a text scaling operation, clear size caches.\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    d.scrollbarsClipped = false;\n    cm.setSize();\n  }\n\n  var keyNames = {\n    3: \"Pause\", 8: \"Backspace\", 9: \"Tab\", 13: \"Enter\", 16: \"Shift\", 17: \"Ctrl\", 18: \"Alt\",\n    19: \"Pause\", 20: \"CapsLock\", 27: \"Esc\", 32: \"Space\", 33: \"PageUp\", 34: \"PageDown\", 35: \"End\",\n    36: \"Home\", 37: \"Left\", 38: \"Up\", 39: \"Right\", 40: \"Down\", 44: \"PrintScrn\", 45: \"Insert\",\n    46: \"Delete\", 59: \";\", 61: \"=\", 91: \"Mod\", 92: \"Mod\", 93: \"Mod\",\n    106: \"*\", 107: \"=\", 109: \"-\", 110: \".\", 111: \"/\", 145: \"ScrollLock\",\n    173: \"-\", 186: \";\", 187: \"=\", 188: \",\", 189: \"-\", 190: \".\", 191: \"/\", 192: \"`\", 219: \"[\", 220: \"\\\\\",\n    221: \"]\", 222: \"'\", 224: \"Mod\", 63232: \"Up\", 63233: \"Down\", 63234: \"Left\", 63235: \"Right\", 63272: \"Delete\",\n    63273: \"Home\", 63275: \"End\", 63276: \"PageUp\", 63277: \"PageDown\", 63302: \"Insert\"\n  };\n\n  // Number keys\n  for (var i = 0; i < 10; i++) { keyNames[i + 48] = keyNames[i + 96] = String(i); }\n  // Alphabetic keys\n  for (var i$1 = 65; i$1 <= 90; i$1++) { keyNames[i$1] = String.fromCharCode(i$1); }\n  // Function keys\n  for (var i$2 = 1; i$2 <= 12; i$2++) { keyNames[i$2 + 111] = keyNames[i$2 + 63235] = \"F\" + i$2; }\n\n  var keyMap = {};\n\n  keyMap.basic = {\n    \"Left\": \"goCharLeft\", \"Right\": \"goCharRight\", \"Up\": \"goLineUp\", \"Down\": \"goLineDown\",\n    \"End\": \"goLineEnd\", \"Home\": \"goLineStartSmart\", \"PageUp\": \"goPageUp\", \"PageDown\": \"goPageDown\",\n    \"Delete\": \"delCharAfter\", \"Backspace\": \"delCharBefore\", \"Shift-Backspace\": \"delCharBefore\",\n    \"Tab\": \"defaultTab\", \"Shift-Tab\": \"indentAuto\",\n    \"Enter\": \"newlineAndIndent\", \"Insert\": \"toggleOverwrite\",\n    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // are simply ignored.\n  keyMap.pcDefault = {\n    \"Ctrl-A\": \"selectAll\", \"Ctrl-D\": \"deleteLine\", \"Ctrl-Z\": \"undo\", \"Shift-Ctrl-Z\": \"redo\", \"Ctrl-Y\": \"redo\",\n    \"Ctrl-Home\": \"goDocStart\", \"Ctrl-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\n    \"Ctrl-Left\": \"goGroupLeft\", \"Ctrl-Right\": \"goGroupRight\", \"Alt-Left\": \"goLineStart\", \"Alt-Right\": \"goLineEnd\",\n    \"Ctrl-Backspace\": \"delGroupBefore\", \"Ctrl-Delete\": \"delGroupAfter\", \"Ctrl-S\": \"save\", \"Ctrl-F\": \"find\",\n    \"Ctrl-G\": \"findNext\", \"Shift-Ctrl-G\": \"findPrev\", \"Shift-Ctrl-F\": \"replace\", \"Shift-Ctrl-R\": \"replaceAll\",\n    \"Ctrl-[\": \"indentLess\", \"Ctrl-]\": \"indentMore\",\n    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\n    \"fallthrough\": \"basic\"\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\n  keyMap.emacsy = {\n    \"Ctrl-F\": \"goCharRight\", \"Ctrl-B\": \"goCharLeft\", \"Ctrl-P\": \"goLineUp\", \"Ctrl-N\": \"goLineDown\",\n    \"Ctrl-A\": \"goLineStart\", \"Ctrl-E\": \"goLineEnd\", \"Ctrl-V\": \"goPageDown\", \"Shift-Ctrl-V\": \"goPageUp\",\n    \"Ctrl-D\": \"delCharAfter\", \"Ctrl-H\": \"delCharBefore\", \"Alt-Backspace\": \"delWordBefore\", \"Ctrl-K\": \"killLine\",\n    \"Ctrl-T\": \"transposeChars\", \"Ctrl-O\": \"openLine\"\n  };\n  keyMap.macDefault = {\n    \"Cmd-A\": \"selectAll\", \"Cmd-D\": \"deleteLine\", \"Cmd-Z\": \"undo\", \"Shift-Cmd-Z\": \"redo\", \"Cmd-Y\": \"redo\",\n    \"Cmd-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"Alt-Backspace\": \"delGroupBefore\",\n    \"Ctrl-Alt-Backspace\": \"delGroupAfter\", \"Alt-Delete\": \"delGroupAfter\", \"Cmd-S\": \"save\", \"Cmd-F\": \"find\",\n    \"Cmd-G\": \"findNext\", \"Shift-Cmd-G\": \"findPrev\", \"Cmd-Alt-F\": \"replace\", \"Shift-Cmd-Alt-F\": \"replaceAll\",\n    \"Cmd-[\": \"indentLess\", \"Cmd-]\": \"indentMore\", \"Cmd-Backspace\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    \"fallthrough\": [\"basic\", \"emacsy\"]\n  };\n  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function normalizeKeyName(name) {\n    var parts = name.split(/-(?!$)/);\n    name = parts[parts.length - 1];\n    var alt, ctrl, shift, cmd;\n    for (var i = 0; i < parts.length - 1; i++) {\n      var mod = parts[i];\n      if (/^(cmd|meta|m)$/i.test(mod)) { cmd = true; }\n      else if (/^a(lt)?$/i.test(mod)) { alt = true; }\n      else if (/^(c|ctrl|control)$/i.test(mod)) { ctrl = true; }\n      else if (/^s(hift)?$/i.test(mod)) { shift = true; }\n      else { throw new Error(\"Unrecognized modifier name: \" + mod) }\n    }\n    if (alt) { name = \"Alt-\" + name; }\n    if (ctrl) { name = \"Ctrl-\" + name; }\n    if (cmd) { name = \"Cmd-\" + name; }\n    if (shift) { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // This is a kludge to keep keymaps mostly working as raw objects\n  // (backwards compatibility) while at the same time support features\n  // like normalization and multi-stroke key bindings. It compiles a\n  // new normalized keymap, and then updates the old object to reflect\n  // this.\n  function normalizeKeyMap(keymap) {\n    var copy = {};\n    for (var keyname in keymap) { if (keymap.hasOwnProperty(keyname)) {\n      var value = keymap[keyname];\n      if (/^(name|fallthrough|(de|at)tach)$/.test(keyname)) { continue }\n      if (value == \"...\") { delete keymap[keyname]; continue }\n\n      var keys = map(keyname.split(\" \"), normalizeKeyName);\n      for (var i = 0; i < keys.length; i++) {\n        var val = (void 0), name = (void 0);\n        if (i == keys.length - 1) {\n          name = keys.join(\" \");\n          val = value;\n        } else {\n          name = keys.slice(0, i + 1).join(\" \");\n          val = \"...\";\n        }\n        var prev = copy[name];\n        if (!prev) { copy[name] = val; }\n        else if (prev != val) { throw new Error(\"Inconsistent bindings for \" + name) }\n      }\n      delete keymap[keyname];\n    } }\n    for (var prop in copy) { keymap[prop] = copy[prop]; }\n    return keymap\n  }\n\n  function lookupKey(key, map, handle, context) {\n    map = getKeyMap(map);\n    var found = map.call ? map.call(key, context) : map[key];\n    if (found === false) { return \"nothing\" }\n    if (found === \"...\") { return \"multi\" }\n    if (found != null && handle(found)) { return \"handled\" }\n\n    if (map.fallthrough) {\n      if (Object.prototype.toString.call(map.fallthrough) != \"[object Array]\")\n        { return lookupKey(key, map.fallthrough, handle, context) }\n      for (var i = 0; i < map.fallthrough.length; i++) {\n        var result = lookupKey(key, map.fallthrough[i], handle, context);\n        if (result) { return result }\n      }\n    }\n  }\n\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  function isModifierKey(value) {\n    var name = typeof value == \"string\" ? value : keyNames[value.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\"\n  }\n\n  function addModifierNames(name, event, noShift) {\n    var base = name;\n    if (event.altKey && base != \"Alt\") { name = \"Alt-\" + name; }\n    if ((flipCtrlCmd ? event.metaKey : event.ctrlKey) && base != \"Ctrl\") { name = \"Ctrl-\" + name; }\n    if ((flipCtrlCmd ? event.ctrlKey : event.metaKey) && base != \"Mod\") { name = \"Cmd-\" + name; }\n    if (!noShift && event.shiftKey && base != \"Shift\") { name = \"Shift-\" + name; }\n    return name\n  }\n\n  // Look up the name of a key as indicated by an event object.\n  function keyName(event, noShift) {\n    if (presto && event.keyCode == 34 && event[\"char\"]) { return false }\n    var name = keyNames[event.keyCode];\n    if (name == null || event.altGraphKey) { return false }\n    // Ctrl-ScrollLock has keyCode 3, same as Ctrl-Pause,\n    // so we'll use event.code when available (Chrome 48+, FF 38+, Safari 10.1+)\n    if (event.keyCode == 3 && event.code) { name = event.code; }\n    return addModifierNames(name, event, noShift)\n  }\n\n  function getKeyMap(val) {\n    return typeof val == \"string\" ? keyMap[val] : val\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function () {\n      for (var i = kill.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\"); }\n      ensureCursorVisible(cm);\n    });\n  }\n\n  function moveCharLogically(line, ch, dir) {\n    var target = skipExtendingChars(line.text, ch + dir, dir);\n    return target < 0 || target > line.text.length ? null : target\n  }\n\n  function moveLogically(line, start, dir) {\n    var ch = moveCharLogically(line, start.ch, dir);\n    return ch == null ? null : new Pos(start.line, ch, dir < 0 ? \"after\" : \"before\")\n  }\n\n  function endOfLine(visually, cm, lineObj, lineNo, dir) {\n    if (visually) {\n      if (cm.doc.direction == \"rtl\") { dir = -dir; }\n      var order = getOrder(lineObj, cm.doc.direction);\n      if (order) {\n        var part = dir < 0 ? lst(order) : order[0];\n        var moveInStorageOrder = (dir < 0) == (part.level == 1);\n        var sticky = moveInStorageOrder ? \"after\" : \"before\";\n        var ch;\n        // With a wrapped rtl chunk (possibly spanning multiple bidi parts),\n        // it could be that the last bidi part is not on the last visual line,\n        // since visual lines contain content order-consecutive chunks.\n        // Thus, in rtl, we are looking for the first (content-order) character\n        // in the rtl chunk that is on the last line (that is, the same line\n        // as the last (content-order) character).\n        if (part.level > 0 || cm.doc.direction == \"rtl\") {\n          var prep = prepareMeasureForLine(cm, lineObj);\n          ch = dir < 0 ? lineObj.text.length - 1 : 0;\n          var targetTop = measureCharPrepared(cm, prep, ch).top;\n          ch = findFirst(function (ch) { return measureCharPrepared(cm, prep, ch).top == targetTop; }, (dir < 0) == (part.level == 1) ? part.from : part.to - 1, ch);\n          if (sticky == \"before\") { ch = moveCharLogically(lineObj, ch, 1); }\n        } else { ch = dir < 0 ? part.to : part.from; }\n        return new Pos(lineNo, ch, sticky)\n      }\n    }\n    return new Pos(lineNo, dir < 0 ? lineObj.text.length : 0, dir < 0 ? \"before\" : \"after\")\n  }\n\n  function moveVisually(cm, line, start, dir) {\n    var bidi = getOrder(line, cm.doc.direction);\n    if (!bidi) { return moveLogically(line, start, dir) }\n    if (start.ch >= line.text.length) {\n      start.ch = line.text.length;\n      start.sticky = \"before\";\n    } else if (start.ch <= 0) {\n      start.ch = 0;\n      start.sticky = \"after\";\n    }\n    var partPos = getBidiPartAt(bidi, start.ch, start.sticky), part = bidi[partPos];\n    if (cm.doc.direction == \"ltr\" && part.level % 2 == 0 && (dir > 0 ? part.to > start.ch : part.from < start.ch)) {\n      // Case 1: We move within an ltr part in an ltr editor. Even with wrapped lines,\n      // nothing interesting happens.\n      return moveLogically(line, start, dir)\n    }\n\n    var mv = function (pos, dir) { return moveCharLogically(line, pos instanceof Pos ? pos.ch : pos, dir); };\n    var prep;\n    var getWrappedLineExtent = function (ch) {\n      if (!cm.options.lineWrapping) { return {begin: 0, end: line.text.length} }\n      prep = prep || prepareMeasureForLine(cm, line);\n      return wrappedLineExtentChar(cm, line, prep, ch)\n    };\n    var wrappedLineExtent = getWrappedLineExtent(start.sticky == \"before\" ? mv(start, -1) : start.ch);\n\n    if (cm.doc.direction == \"rtl\" || part.level == 1) {\n      var moveInStorageOrder = (part.level == 1) == (dir < 0);\n      var ch = mv(start, moveInStorageOrder ? 1 : -1);\n      if (ch != null && (!moveInStorageOrder ? ch >= part.from && ch >= wrappedLineExtent.begin : ch <= part.to && ch <= wrappedLineExtent.end)) {\n        // Case 2: We move within an rtl part or in an rtl editor on the same visual line\n        var sticky = moveInStorageOrder ? \"before\" : \"after\";\n        return new Pos(start.line, ch, sticky)\n      }\n    }\n\n    // Case 3: Could not move within this bidi part in this visual line, so leave\n    // the current bidi part\n\n    var searchInVisualLine = function (partPos, dir, wrappedLineExtent) {\n      var getRes = function (ch, moveInStorageOrder) { return moveInStorageOrder\n        ? new Pos(start.line, mv(ch, 1), \"before\")\n        : new Pos(start.line, ch, \"after\"); };\n\n      for (; partPos >= 0 && partPos < bidi.length; partPos += dir) {\n        var part = bidi[partPos];\n        var moveInStorageOrder = (dir > 0) == (part.level != 1);\n        var ch = moveInStorageOrder ? wrappedLineExtent.begin : mv(wrappedLineExtent.end, -1);\n        if (part.from <= ch && ch < part.to) { return getRes(ch, moveInStorageOrder) }\n        ch = moveInStorageOrder ? part.from : mv(part.to, -1);\n        if (wrappedLineExtent.begin <= ch && ch < wrappedLineExtent.end) { return getRes(ch, moveInStorageOrder) }\n      }\n    };\n\n    // Case 3a: Look for other bidi parts on the same visual line\n    var res = searchInVisualLine(partPos + dir, dir, wrappedLineExtent);\n    if (res) { return res }\n\n    // Case 3b: Look for other bidi parts on the next visual line\n    var nextCh = dir > 0 ? wrappedLineExtent.end : mv(wrappedLineExtent.begin, -1);\n    if (nextCh != null && !(dir > 0 && nextCh == line.text.length)) {\n      res = searchInVisualLine(dir > 0 ? 0 : bidi.length - 1, dir, getWrappedLineExtent(nextCh));\n      if (res) { return res }\n    }\n\n    // Case 4: Nowhere to move\n    return null\n  }\n\n  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = {\n    selectAll: selectAll,\n    singleSelection: function (cm) { return cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll); },\n    killLine: function (cm) { return deleteNearSelection(cm, function (range) {\n      if (range.empty()) {\n        var len = getLine(cm.doc, range.head.line).text.length;\n        if (range.head.ch == len && range.head.line < cm.lastLine())\n          { return {from: range.head, to: Pos(range.head.line + 1, 0)} }\n        else\n          { return {from: range.head, to: Pos(range.head.line, len)} }\n      } else {\n        return {from: range.from(), to: range.to()}\n      }\n    }); },\n    deleteLine: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0),\n      to: clipPos(cm.doc, Pos(range.to().line + 1, 0))\n    }); }); },\n    delLineLeft: function (cm) { return deleteNearSelection(cm, function (range) { return ({\n      from: Pos(range.from().line, 0), to: range.from()\n    }); }); },\n    delWrappedLineLeft: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n      return {from: leftPos, to: range.from()}\n    }); },\n    delWrappedLineRight: function (cm) { return deleteNearSelection(cm, function (range) {\n      var top = cm.charCoords(range.head, \"div\").top + 5;\n      var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      return {from: range.from(), to: rightPos }\n    }); },\n    undo: function (cm) { return cm.undo(); },\n    redo: function (cm) { return cm.redo(); },\n    undoSelection: function (cm) { return cm.undoSelection(); },\n    redoSelection: function (cm) { return cm.redoSelection(); },\n    goDocStart: function (cm) { return cm.extendSelection(Pos(cm.firstLine(), 0)); },\n    goDocEnd: function (cm) { return cm.extendSelection(Pos(cm.lastLine())); },\n    goLineStart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStart(cm, range.head.line); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineStartSmart: function (cm) { return cm.extendSelectionsBy(function (range) { return lineStartSmart(cm, range.head); },\n      {origin: \"+move\", bias: 1}\n    ); },\n    goLineEnd: function (cm) { return cm.extendSelectionsBy(function (range) { return lineEnd(cm, range.head.line); },\n      {origin: \"+move\", bias: -1}\n    ); },\n    goLineRight: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeft: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      return cm.coordsChar({left: 0, top: top}, \"div\")\n    }, sel_move); },\n    goLineLeftSmart: function (cm) { return cm.extendSelectionsBy(function (range) {\n      var top = cm.cursorCoords(range.head, \"div\").top + 5;\n      var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n      if (pos.ch < cm.getLine(pos.line).search(/\\S/)) { return lineStartSmart(cm, range.head) }\n      return pos\n    }, sel_move); },\n    goLineUp: function (cm) { return cm.moveV(-1, \"line\"); },\n    goLineDown: function (cm) { return cm.moveV(1, \"line\"); },\n    goPageUp: function (cm) { return cm.moveV(-1, \"page\"); },\n    goPageDown: function (cm) { return cm.moveV(1, \"page\"); },\n    goCharLeft: function (cm) { return cm.moveH(-1, \"char\"); },\n    goCharRight: function (cm) { return cm.moveH(1, \"char\"); },\n    goColumnLeft: function (cm) { return cm.moveH(-1, \"column\"); },\n    goColumnRight: function (cm) { return cm.moveH(1, \"column\"); },\n    goWordLeft: function (cm) { return cm.moveH(-1, \"word\"); },\n    goGroupRight: function (cm) { return cm.moveH(1, \"group\"); },\n    goGroupLeft: function (cm) { return cm.moveH(-1, \"group\"); },\n    goWordRight: function (cm) { return cm.moveH(1, \"word\"); },\n    delCharBefore: function (cm) { return cm.deleteH(-1, \"codepoint\"); },\n    delCharAfter: function (cm) { return cm.deleteH(1, \"char\"); },\n    delWordBefore: function (cm) { return cm.deleteH(-1, \"word\"); },\n    delWordAfter: function (cm) { return cm.deleteH(1, \"word\"); },\n    delGroupBefore: function (cm) { return cm.deleteH(-1, \"group\"); },\n    delGroupAfter: function (cm) { return cm.deleteH(1, \"group\"); },\n    indentAuto: function (cm) { return cm.indentSelection(\"smart\"); },\n    indentMore: function (cm) { return cm.indentSelection(\"add\"); },\n    indentLess: function (cm) { return cm.indentSelection(\"subtract\"); },\n    insertTab: function (cm) { return cm.replaceSelection(\"\\t\"); },\n    insertSoftTab: function (cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(spaceStr(tabSize - col % tabSize));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function (cm) {\n      if (cm.somethingSelected()) { cm.indentSelection(\"add\"); }\n      else { cm.execCommand(\"insertTab\"); }\n    },\n    // Swap the two chars left and right of each selection's head.\n    // Move cursor behind the two swapped characters afterwards.\n    //\n    // Doesn't consider line feeds a character.\n    // Doesn't scan more than one line above to find a character.\n    // Doesn't do anything on an empty line.\n    // Doesn't do anything with non-empty selections.\n    transposeChars: function (cm) { return runInOp(cm, function () {\n      var ranges = cm.listSelections(), newSel = [];\n      for (var i = 0; i < ranges.length; i++) {\n        if (!ranges[i].empty()) { continue }\n        var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n        if (line) {\n          if (cur.ch == line.length) { cur = new Pos(cur.line, cur.ch - 1); }\n          if (cur.ch > 0) {\n            cur = new Pos(cur.line, cur.ch + 1);\n            cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                            Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n          } else if (cur.line > cm.doc.first) {\n            var prev = getLine(cm.doc, cur.line - 1).text;\n            if (prev) {\n              cur = new Pos(cur.line, 1);\n              cm.replaceRange(line.charAt(0) + cm.doc.lineSeparator() +\n                              prev.charAt(prev.length - 1),\n                              Pos(cur.line - 1, prev.length - 1), cur, \"+transpose\");\n            }\n          }\n        }\n        newSel.push(new Range(cur, cur));\n      }\n      cm.setSelections(newSel);\n    }); },\n    newlineAndIndent: function (cm) { return runInOp(cm, function () {\n      var sels = cm.listSelections();\n      for (var i = sels.length - 1; i >= 0; i--)\n        { cm.replaceRange(cm.doc.lineSeparator(), sels[i].anchor, sels[i].head, \"+input\"); }\n      sels = cm.listSelections();\n      for (var i$1 = 0; i$1 < sels.length; i$1++)\n        { cm.indentLine(sels[i$1].from().line, null, true); }\n      ensureCursorVisible(cm);\n    }); },\n    openLine: function (cm) { return cm.replaceSelection(\"\\n\", \"start\"); },\n    toggleOverwrite: function (cm) { return cm.toggleOverwrite(); }\n  };\n\n\n  function lineStart(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLine(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, visual, lineN, 1)\n  }\n  function lineEnd(cm, lineN) {\n    var line = getLine(cm.doc, lineN);\n    var visual = visualLineEnd(line);\n    if (visual != line) { lineN = lineNo(visual); }\n    return endOfLine(true, cm, line, lineN, -1)\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, start.line);\n    var order = getOrder(line, cm.doc.direction);\n    if (!order || order[0].level == 0) {\n      var firstNonWS = Math.max(start.ch, line.text.search(/\\S/));\n      var inWS = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS, start.sticky)\n    }\n    return start\n  }\n\n  // Run a handler that was bound to a key.\n  function doHandleBinding(cm, bound, dropShift) {\n    if (typeof bound == \"string\") {\n      bound = commands[bound];\n      if (!bound) { return false }\n    }\n    // Ensure previous input has been read, so that the handler sees a\n    // consistent view of the document\n    cm.display.input.ensurePolled();\n    var prevShift = cm.display.shift, done = false;\n    try {\n      if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n      if (dropShift) { cm.display.shift = false; }\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done\n  }\n\n  function lookupKeyForEditor(cm, name, handle) {\n    for (var i = 0; i < cm.state.keyMaps.length; i++) {\n      var result = lookupKey(name, cm.state.keyMaps[i], handle, cm);\n      if (result) { return result }\n    }\n    return (cm.options.extraKeys && lookupKey(name, cm.options.extraKeys, handle, cm))\n      || lookupKey(name, cm.options.keyMap, handle, cm)\n  }\n\n  // Note that, despite the name, this function is also used to check\n  // for bound mouse clicks.\n\n  var stopSeq = new Delayed;\n\n  function dispatchKey(cm, name, e, handle) {\n    var seq = cm.state.keySeq;\n    if (seq) {\n      if (isModifierKey(name)) { return \"handled\" }\n      if (/\\'$/.test(name))\n        { cm.state.keySeq = null; }\n      else\n        { stopSeq.set(50, function () {\n          if (cm.state.keySeq == seq) {\n            cm.state.keySeq = null;\n            cm.display.input.reset();\n          }\n        }); }\n      if (dispatchKeyInner(cm, seq + \" \" + name, e, handle)) { return true }\n    }\n    return dispatchKeyInner(cm, name, e, handle)\n  }\n\n  function dispatchKeyInner(cm, name, e, handle) {\n    var result = lookupKeyForEditor(cm, name, handle);\n\n    if (result == \"multi\")\n      { cm.state.keySeq = name; }\n    if (result == \"handled\")\n      { signalLater(cm, \"keyHandled\", cm, name, e); }\n\n    if (result == \"handled\" || result == \"multi\") {\n      e_preventDefault(e);\n      restartBlink(cm);\n    }\n\n    return !!result\n  }\n\n  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    var name = keyName(e, true);\n    if (!name) { return false }\n\n    if (e.shiftKey && !cm.state.keySeq) {\n      // First try to resolve full name (including 'Shift-'). Failing\n      // that, see if there is a cursor-motion command (starting with\n      // 'go') bound to the keyname without 'Shift-'.\n      return dispatchKey(cm, \"Shift-\" + name, e, function (b) { return doHandleBinding(cm, b, true); })\n          || dispatchKey(cm, name, e, function (b) {\n               if (typeof b == \"string\" ? /^go[A-Z]/.test(b) : b.motion)\n                 { return doHandleBinding(cm, b) }\n             })\n    } else {\n      return dispatchKey(cm, name, e, function (b) { return doHandleBinding(cm, b); })\n    }\n  }\n\n  // Handle a key from the keypress event\n  function handleCharBinding(cm, e, ch) {\n    return dispatchKey(cm, \"'\" + ch + \"'\", e, function (b) { return doHandleBinding(cm, b, true); })\n  }\n\n  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    cm.curOp.focus = activeElt();\n    if (signalDOMEvent(cm, e)) { return }\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) { e.returnValue = false; }\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\n      lastStoppedKey = handled ? code : null;\n      // Opera has no cut event... we try to at least catch the key combo\n      if (!handled && code == 88 && !hasCopyEvent && (mac ? e.metaKey : e.ctrlKey))\n        { cm.replaceSelection(\"\", null, \"cut\"); }\n    }\n    if (gecko && !mac && !handled && code == 46 && e.shiftKey && !e.ctrlKey && document.execCommand)\n      { document.execCommand(\"cut\"); }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      { showCrossHair(cm); }\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) { this.doc.sel.shift = false; }\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (e.target && e.target != cm.display.input.getField()) { return }\n    if (eventInWidget(cm.display, e) || signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) { return }\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return}\n    if ((presto && (!e.which || e.which < 10)) && handleKeyBinding(cm, e)) { return }\n    var ch = String.fromCharCode(charCode == null ? keyCode : charCode);\n    // Some browsers fire keypress events for backspace\n    if (ch == \"\\x08\") { return }\n    if (handleCharBinding(cm, e, ch)) { return }\n    cm.display.input.onKeyPress(e);\n  }\n\n  var DOUBLECLICK_DELAY = 400;\n\n  var PastClick = function(time, pos, button) {\n    this.time = time;\n    this.pos = pos;\n    this.button = button;\n  };\n\n  PastClick.prototype.compare = function (time, pos, button) {\n    return this.time + DOUBLECLICK_DELAY > time &&\n      cmp(pos, this.pos) == 0 && button == this.button\n  };\n\n  var lastClick, lastDoubleClick;\n  function clickRepeat(pos, button) {\n    var now = +new Date;\n    if (lastDoubleClick && lastDoubleClick.compare(now, pos, button)) {\n      lastClick = lastDoubleClick = null;\n      return \"triple\"\n    } else if (lastClick && lastClick.compare(now, pos, button)) {\n      lastDoubleClick = new PastClick(now, pos, button);\n      lastClick = null;\n      return \"double\"\n    } else {\n      lastClick = new PastClick(now, pos, button);\n      lastDoubleClick = null;\n      return \"single\"\n    }\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    var cm = this, display = cm.display;\n    if (signalDOMEvent(cm, e) || display.activeTouch && display.input.supportsTouch()) { return }\n    display.input.ensurePolled();\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\n        display.scroller.draggable = false;\n        setTimeout(function () { return display.scroller.draggable = true; }, 100);\n      }\n      return\n    }\n    if (clickInGutter(cm, e)) { return }\n    var pos = posFromMouse(cm, e), button = e_button(e), repeat = pos ? clickRepeat(pos, button) : \"single\";\n    window.focus();\n\n    // #3261: make sure, that we're not starting a second selection\n    if (button == 1 && cm.state.selectingText)\n      { cm.state.selectingText(e); }\n\n    if (pos && handleMappedButton(cm, button, pos, repeat, e)) { return }\n\n    if (button == 1) {\n      if (pos) { leftButtonDown(cm, pos, repeat, e); }\n      else if (e_target(e) == display.scroller) { e_preventDefault(e); }\n    } else if (button == 2) {\n      if (pos) { extendSelection(cm.doc, pos); }\n      setTimeout(function () { return display.input.focus(); }, 20);\n    } else if (button == 3) {\n      if (captureRightClick) { cm.display.input.onContextMenu(e); }\n      else { delayBlurEvent(cm); }\n    }\n  }\n\n  function handleMappedButton(cm, button, pos, repeat, event) {\n    var name = \"Click\";\n    if (repeat == \"double\") { name = \"Double\" + name; }\n    else if (repeat == \"triple\") { name = \"Triple\" + name; }\n    name = (button == 1 ? \"Left\" : button == 2 ? \"Middle\" : \"Right\") + name;\n\n    return dispatchKey(cm,  addModifierNames(name, event), event, function (bound) {\n      if (typeof bound == \"string\") { bound = commands[bound]; }\n      if (!bound) { return false }\n      var done = false;\n      try {\n        if (cm.isReadOnly()) { cm.state.suppressEdits = true; }\n        done = bound(cm, pos) != Pass;\n      } finally {\n        cm.state.suppressEdits = false;\n      }\n      return done\n    })\n  }\n\n  function configureMouse(cm, repeat, event) {\n    var option = cm.getOption(\"configureMouse\");\n    var value = option ? option(cm, repeat, event) : {};\n    if (value.unit == null) {\n      var rect = chromeOS ? event.shiftKey && event.metaKey : event.altKey;\n      value.unit = rect ? \"rectangle\" : repeat == \"single\" ? \"char\" : repeat == \"double\" ? \"word\" : \"line\";\n    }\n    if (value.extend == null || cm.doc.extend) { value.extend = cm.doc.extend || event.shiftKey; }\n    if (value.addNew == null) { value.addNew = mac ? event.metaKey : event.ctrlKey; }\n    if (value.moveOnDrag == null) { value.moveOnDrag = !(mac ? event.altKey : event.ctrlKey); }\n    return value\n  }\n\n  function leftButtonDown(cm, pos, repeat, event) {\n    if (ie) { setTimeout(bind(ensureFocus, cm), 0); }\n    else { cm.curOp.focus = activeElt(); }\n\n    var behavior = configureMouse(cm, repeat, event);\n\n    var sel = cm.doc.sel, contained;\n    if (cm.options.dragDrop && dragAndDrop && !cm.isReadOnly() &&\n        repeat == \"single\" && (contained = sel.contains(pos)) > -1 &&\n        (cmp((contained = sel.ranges[contained]).from(), pos) < 0 || pos.xRel > 0) &&\n        (cmp(contained.to(), pos) > 0 || pos.xRel < 0))\n      { leftButtonStartDrag(cm, event, pos, behavior); }\n    else\n      { leftButtonSelect(cm, event, pos, behavior); }\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, event, pos, behavior) {\n    var display = cm.display, moved = false;\n    var dragEnd = operation(cm, function (e) {\n      if (webkit) { display.scroller.draggable = false; }\n      cm.state.draggingText = false;\n      if (cm.state.delayingBlurEvent) {\n        if (cm.hasFocus()) { cm.state.delayingBlurEvent = false; }\n        else { delayBlurEvent(cm); }\n      }\n      off(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n      off(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n      off(display.scroller, \"dragstart\", dragStart);\n      off(display.scroller, \"drop\", dragEnd);\n      if (!moved) {\n        e_preventDefault(e);\n        if (!behavior.addNew)\n          { extendSelection(cm.doc, pos, null, null, behavior.extend); }\n        // Work around unexplainable focus problem in IE9 (#2127) and Chrome (#3081)\n        if ((webkit && !safari) || ie && ie_version == 9)\n          { setTimeout(function () {display.wrapper.ownerDocument.body.focus({preventScroll: true}); display.input.focus();}, 20); }\n        else\n          { display.input.focus(); }\n      }\n    });\n    var mouseMove = function(e2) {\n      moved = moved || Math.abs(event.clientX - e2.clientX) + Math.abs(event.clientY - e2.clientY) >= 10;\n    };\n    var dragStart = function () { return moved = true; };\n    // Let the drag handler handle this.\n    if (webkit) { display.scroller.draggable = true; }\n    cm.state.draggingText = dragEnd;\n    dragEnd.copy = !behavior.moveOnDrag;\n    on(display.wrapper.ownerDocument, \"mouseup\", dragEnd);\n    on(display.wrapper.ownerDocument, \"mousemove\", mouseMove);\n    on(display.scroller, \"dragstart\", dragStart);\n    on(display.scroller, \"drop\", dragEnd);\n\n    cm.state.delayingBlurEvent = true;\n    setTimeout(function () { return display.input.focus(); }, 20);\n    // IE's approach to draggable\n    if (display.scroller.dragDrop) { display.scroller.dragDrop(); }\n  }\n\n  function rangeForUnit(cm, pos, unit) {\n    if (unit == \"char\") { return new Range(pos, pos) }\n    if (unit == \"word\") { return cm.findWordAt(pos) }\n    if (unit == \"line\") { return new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))) }\n    var result = unit(cm, pos);\n    return new Range(result.from, result.to)\n  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, event, start, behavior) {\n    if (ie) { delayBlurEvent(cm); }\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(event);\n\n    var ourRange, ourIndex, startSel = doc.sel, ranges = startSel.ranges;\n    if (behavior.addNew && !behavior.extend) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        { ourRange = ranges[ourIndex]; }\n      else\n        { ourRange = new Range(start, start); }\n    } else {\n      ourRange = doc.sel.primary();\n      ourIndex = doc.sel.primIndex;\n    }\n\n    if (behavior.unit == \"rectangle\") {\n      if (!behavior.addNew) { ourRange = new Range(start, start); }\n      start = posFromMouse(cm, event, true, true);\n      ourIndex = -1;\n    } else {\n      var range = rangeForUnit(cm, start, behavior.unit);\n      if (behavior.extend)\n        { ourRange = extendRange(ourRange, range.anchor, range.head, behavior.extend); }\n      else\n        { ourRange = range; }\n    }\n\n    if (!behavior.addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex == -1) {\n      ourIndex = ranges.length;\n      setSelection(doc, normalizeSelection(cm, ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    } else if (ranges.length > 1 && ranges[ourIndex].empty() && behavior.unit == \"char\" && !behavior.extend) {\n      setSelection(doc, normalizeSelection(cm, ranges.slice(0, ourIndex).concat(ranges.slice(ourIndex + 1)), 0),\n                   {scroll: false, origin: \"*mouse\"});\n      startSel = doc.sel;\n    } else {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) { return }\n      lastPos = pos;\n\n      if (behavior.unit == \"rectangle\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos))); }\n          else if (text.length > leftPos)\n            { ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize)))); }\n        }\n        if (!ranges.length) { ranges.push(new Range(start, start)); }\n        setSelection(doc, normalizeSelection(cm, startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var range = rangeForUnit(cm, pos, behavior.unit);\n        var anchor = oldRange.anchor, head;\n        if (cmp(range.anchor, anchor) > 0) {\n          head = range.head;\n          anchor = minPos(oldRange.from(), range.anchor);\n        } else {\n          head = range.anchor;\n          anchor = maxPos(oldRange.to(), range.head);\n        }\n        var ranges$1 = startSel.ranges.slice(0);\n        ranges$1[ourIndex] = bidiSimplify(cm, new Range(clipPos(doc, anchor), head));\n        setSelection(doc, normalizeSelection(cm, ranges$1, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\n    // Used to ensure timeout re-tries don't fire when another extend\n    // happened in the meantime (clearTimeout isn't reliable -- at\n    // least on Chrome, the timeouts still happen even when cleared,\n    // if the clear happens after their scheduled firing time).\n    var counter = 0;\n\n    function extend(e) {\n      var curCount = ++counter;\n      var cur = posFromMouse(cm, e, true, behavior.unit == \"rectangle\");\n      if (!cur) { return }\n      if (cmp(cur, lastPos) != 0) {\n        cm.curOp.focus = activeElt();\n        extendTo(cur);\n        var visible = visibleLines(display, doc);\n        if (cur.line >= visible.to || cur.line < visible.from)\n          { setTimeout(operation(cm, function () {if (counter == curCount) { extend(e); }}), 150); }\n      } else {\n        var outside = e.clientY < editorSize.top ? -20 : e.clientY > editorSize.bottom ? 20 : 0;\n        if (outside) { setTimeout(operation(cm, function () {\n          if (counter != curCount) { return }\n          display.scroller.scrollTop += outside;\n          extend(e);\n        }), 50); }\n      }\n    }\n\n    function done(e) {\n      cm.state.selectingText = false;\n      counter = Infinity;\n      // If e is null or undefined we interpret this as someone trying\n      // to explicitly cancel the selection rather than the user\n      // letting go of the mouse button.\n      if (e) {\n        e_preventDefault(e);\n        display.input.focus();\n      }\n      off(display.wrapper.ownerDocument, \"mousemove\", move);\n      off(display.wrapper.ownerDocument, \"mouseup\", up);\n      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function (e) {\n      if (e.buttons === 0 || !e_button(e)) { done(e); }\n      else { extend(e); }\n    });\n    var up = operation(cm, done);\n    cm.state.selectingText = up;\n    on(display.wrapper.ownerDocument, \"mousemove\", move);\n    on(display.wrapper.ownerDocument, \"mouseup\", up);\n  }\n\n  // Used when mouse-selecting to adjust the anchor to the proper side\n  // of a bidi jump depending on the visual position of the head.\n  function bidiSimplify(cm, range) {\n    var anchor = range.anchor;\n    var head = range.head;\n    var anchorLine = getLine(cm.doc, anchor.line);\n    if (cmp(anchor, head) == 0 && anchor.sticky == head.sticky) { return range }\n    var order = getOrder(anchorLine);\n    if (!order) { return range }\n    var index = getBidiPartAt(order, anchor.ch, anchor.sticky), part = order[index];\n    if (part.from != anchor.ch && part.to != anchor.ch) { return range }\n    var boundary = index + ((part.from == anchor.ch) == (part.level != 1) ? 0 : 1);\n    if (boundary == 0 || boundary == order.length) { return range }\n\n    // Compute the relative visual position of the head compared to the\n    // anchor (<0 is to the left, >0 to the right)\n    var leftSide;\n    if (head.line != anchor.line) {\n      leftSide = (head.line - anchor.line) * (cm.doc.direction == \"ltr\" ? 1 : -1) > 0;\n    } else {\n      var headIndex = getBidiPartAt(order, head.ch, head.sticky);\n      var dir = headIndex - index || (head.ch - anchor.ch) * (part.level == 1 ? -1 : 1);\n      if (headIndex == boundary - 1 || headIndex == boundary)\n        { leftSide = dir < 0; }\n      else\n        { leftSide = dir > 0; }\n    }\n\n    var usePart = order[boundary + (leftSide ? -1 : 0)];\n    var from = leftSide == (usePart.level == 1);\n    var ch = from ? usePart.from : usePart.to, sticky = from ? \"after\" : \"before\";\n    return anchor.ch == ch && anchor.sticky == sticky ? range : new Range(new Pos(anchor.line, ch, sticky), head)\n  }\n\n\n  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\n  function gutterEvent(cm, e, type, prevent) {\n    var mX, mY;\n    if (e.touches) {\n      mX = e.touches[0].clientX;\n      mY = e.touches[0].clientY;\n    } else {\n      try { mX = e.clientX; mY = e.clientY; }\n      catch(e$1) { return false }\n    }\n    if (mX >= Math.floor(cm.display.gutters.getBoundingClientRect().right)) { return false }\n    if (prevent) { e_preventDefault(e); }\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\n\n    if (mY > lineBox.bottom || !hasHandler(cm, type)) { return e_defaultPrevented(e) }\n    mY -= lineBox.top - display.viewOffset;\n\n    for (var i = 0; i < cm.display.gutterSpecs.length; ++i) {\n      var g = display.gutters.childNodes[i];\n      if (g && g.getBoundingClientRect().right >= mX) {\n        var line = lineAtHeight(cm.doc, mY);\n        var gutter = cm.display.gutterSpecs[i];\n        signal(cm, type, cm, line, gutter.className, e);\n        return e_defaultPrevented(e)\n      }\n    }\n  }\n\n  function clickInGutter(cm, e) {\n    return gutterEvent(cm, e, \"gutterClick\", true)\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (eventInWidget(cm.display, e) || contextMenuInGutter(cm, e)) { return }\n    if (signalDOMEvent(cm, e, \"contextmenu\")) { return }\n    if (!captureRightClick) { cm.display.input.onContextMenu(e); }\n  }\n\n  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) { return false }\n    return gutterEvent(cm, e, \"gutterContextMenu\", false)\n  }\n\n  function themeChanged(cm) {\n    cm.display.wrapper.className = cm.display.wrapper.className.replace(/\\s*cm-s-\\S+/g, \"\") +\n      cm.options.theme.replace(/(^|\\s)\\s*/g, \" cm-s-\");\n    clearCaches(cm);\n  }\n\n  var Init = {toString: function(){return \"CodeMirror.Init\"}};\n\n  var defaults = {};\n  var optionHandlers = {};\n\n  function defineOptions(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    function option(name, deflt, handle, notOnInit) {\n      CodeMirror.defaults[name] = deflt;\n      if (handle) { optionHandlers[name] =\n        notOnInit ? function (cm, val, old) {if (old != Init) { handle(cm, val, old); }} : handle; }\n    }\n\n    CodeMirror.defineOption = option;\n\n    // Passed to option handlers when there is no old value.\n    CodeMirror.Init = Init;\n\n    // These two are, on init, called from the constructor because they\n    // have to be initialized before the editor can start at all.\n    option(\"value\", \"\", function (cm, val) { return cm.setValue(val); }, true);\n    option(\"mode\", null, function (cm, val) {\n      cm.doc.modeOption = val;\n      loadMode(cm);\n    }, true);\n\n    option(\"indentUnit\", 2, loadMode, true);\n    option(\"indentWithTabs\", false);\n    option(\"smartIndent\", true);\n    option(\"tabSize\", 4, function (cm) {\n      resetModeState(cm);\n      clearCaches(cm);\n      regChange(cm);\n    }, true);\n\n    option(\"lineSeparator\", null, function (cm, val) {\n      cm.doc.lineSep = val;\n      if (!val) { return }\n      var newBreaks = [], lineNo = cm.doc.first;\n      cm.doc.iter(function (line) {\n        for (var pos = 0;;) {\n          var found = line.text.indexOf(val, pos);\n          if (found == -1) { break }\n          pos = found + val.length;\n          newBreaks.push(Pos(lineNo, found));\n        }\n        lineNo++;\n      });\n      for (var i = newBreaks.length - 1; i >= 0; i--)\n        { replaceRange(cm.doc, val, newBreaks[i], Pos(newBreaks[i].line, newBreaks[i].ch + val.length)); }\n    });\n    option(\"specialChars\", /[\\u0000-\\u001f\\u007f-\\u009f\\u00ad\\u061c\\u200b\\u200e\\u200f\\u2028\\u2029\\ufeff\\ufff9-\\ufffc]/g, function (cm, val, old) {\n      cm.state.specialChars = new RegExp(val.source + (val.test(\"\\t\") ? \"\" : \"|\\t\"), \"g\");\n      if (old != Init) { cm.refresh(); }\n    });\n    option(\"specialCharPlaceholder\", defaultSpecialCharPlaceholder, function (cm) { return cm.refresh(); }, true);\n    option(\"electricChars\", true);\n    option(\"inputStyle\", mobile ? \"contenteditable\" : \"textarea\", function () {\n      throw new Error(\"inputStyle can not (yet) be changed in a running editor\") // FIXME\n    }, true);\n    option(\"spellcheck\", false, function (cm, val) { return cm.getInputField().spellcheck = val; }, true);\n    option(\"autocorrect\", false, function (cm, val) { return cm.getInputField().autocorrect = val; }, true);\n    option(\"autocapitalize\", false, function (cm, val) { return cm.getInputField().autocapitalize = val; }, true);\n    option(\"rtlMoveVisually\", !windows);\n    option(\"wholeLineUpdateBefore\", true);\n\n    option(\"theme\", \"default\", function (cm) {\n      themeChanged(cm);\n      updateGutters(cm);\n    }, true);\n    option(\"keyMap\", \"default\", function (cm, val, old) {\n      var next = getKeyMap(val);\n      var prev = old != Init && getKeyMap(old);\n      if (prev && prev.detach) { prev.detach(cm, next); }\n      if (next.attach) { next.attach(cm, prev || null); }\n    });\n    option(\"extraKeys\", null);\n    option(\"configureMouse\", null);\n\n    option(\"lineWrapping\", false, wrappingChanged, true);\n    option(\"gutters\", [], function (cm, val) {\n      cm.display.gutterSpecs = getGutters(val, cm.options.lineNumbers);\n      updateGutters(cm);\n    }, true);\n    option(\"fixedGutter\", true, function (cm, val) {\n      cm.display.gutters.style.left = val ? compensateForHScroll(cm.display) + \"px\" : \"0\";\n      cm.refresh();\n    }, true);\n    option(\"coverGutterNextToScrollbar\", false, function (cm) { return updateScrollbars(cm); }, true);\n    option(\"scrollbarStyle\", \"native\", function (cm) {\n      initScrollbars(cm);\n      updateScrollbars(cm);\n      cm.display.scrollbars.setScrollTop(cm.doc.scrollTop);\n      cm.display.scrollbars.setScrollLeft(cm.doc.scrollLeft);\n    }, true);\n    option(\"lineNumbers\", false, function (cm, val) {\n      cm.display.gutterSpecs = getGutters(cm.options.gutters, val);\n      updateGutters(cm);\n    }, true);\n    option(\"firstLineNumber\", 1, updateGutters, true);\n    option(\"lineNumberFormatter\", function (integer) { return integer; }, updateGutters, true);\n    option(\"showCursorWhenSelecting\", false, updateSelection, true);\n\n    option(\"resetSelectionOnContextMenu\", true);\n    option(\"lineWiseCopyCut\", true);\n    option(\"pasteLinesPerSelection\", true);\n    option(\"selectionsMayTouch\", false);\n\n    option(\"readOnly\", false, function (cm, val) {\n      if (val == \"nocursor\") {\n        onBlur(cm);\n        cm.display.input.blur();\n      }\n      cm.display.input.readOnlyChanged(val);\n    });\n\n    option(\"screenReaderLabel\", null, function (cm, val) {\n      val = (val === '') ? null : val;\n      cm.display.input.screenReaderLabelChanged(val);\n    });\n\n    option(\"disableInput\", false, function (cm, val) {if (!val) { cm.display.input.reset(); }}, true);\n    option(\"dragDrop\", true, dragDropChanged);\n    option(\"allowDropFileTypes\", null);\n\n    option(\"cursorBlinkRate\", 530);\n    option(\"cursorScrollMargin\", 0);\n    option(\"cursorHeight\", 1, updateSelection, true);\n    option(\"singleCursorHeightPerLine\", true, updateSelection, true);\n    option(\"workTime\", 100);\n    option(\"workDelay\", 100);\n    option(\"flattenSpans\", true, resetModeState, true);\n    option(\"addModeClass\", false, resetModeState, true);\n    option(\"pollInterval\", 100);\n    option(\"undoDepth\", 200, function (cm, val) { return cm.doc.history.undoDepth = val; });\n    option(\"historyEventDelay\", 1250);\n    option(\"viewportMargin\", 10, function (cm) { return cm.refresh(); }, true);\n    option(\"maxHighlightLength\", 10000, resetModeState, true);\n    option(\"moveInputWithCursor\", true, function (cm, val) {\n      if (!val) { cm.display.input.resetPosition(); }\n    });\n\n    option(\"tabindex\", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || \"\"; });\n    option(\"autofocus\", null);\n    option(\"direction\", \"ltr\", function (cm, val) { return cm.doc.setDirection(val); }, true);\n    option(\"phrases\", null);\n  }\n\n  function dragDropChanged(cm, value, old) {\n    var wasOn = old && old != Init;\n    if (!value != !wasOn) {\n      var funcs = cm.display.dragFunctions;\n      var toggle = value ? on : off;\n      toggle(cm.display.scroller, \"dragstart\", funcs.start);\n      toggle(cm.display.scroller, \"dragenter\", funcs.enter);\n      toggle(cm.display.scroller, \"dragover\", funcs.over);\n      toggle(cm.display.scroller, \"dragleave\", funcs.leave);\n      toggle(cm.display.scroller, \"drop\", funcs.drop);\n    }\n  }\n\n  function wrappingChanged(cm) {\n    if (cm.options.lineWrapping) {\n      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n      cm.display.sizerWidth = null;\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function () { return updateScrollbars(cm); }, 100);\n  }\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    var this$1 = this;\n\n    if (!(this instanceof CodeMirror)) { return new CodeMirror(place, options) }\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") { doc = new Doc(doc, options.mode, null, options.lineSeparator, options.direction); }\n    else if (options.mode) { doc.modeOption = options.mode; }\n    this.doc = doc;\n\n    var input = new CodeMirror.inputStyles[options.inputStyle](this);\n    var display = this.display = new Display(place, doc, input, options);\n    display.wrapper.CodeMirror = this;\n    themeChanged(this);\n    if (options.lineWrapping)\n      { this.display.wrapper.className += \" CodeMirror-wrap\"; }\n    initScrollbars(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false,\n      delayingBlurEvent: false,\n      focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: -1, cutIncoming: -1, // help recognize paste/cut edits in input.poll\n      selectingText: false,\n      draggingText: false,\n      highlight: new Delayed(), // stores highlight worker timeout\n      keySeq: null,  // Unfinished key sequence\n      specialChars: null\n    };\n\n    if (options.autofocus && !mobile) { display.input.focus(); }\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) { setTimeout(function () { return this$1.display.input.reset(true); }, 20); }\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || this.hasFocus())\n      { setTimeout(function () {\n        if (this$1.hasFocus() && !this$1.state.focused) { onFocus(this$1); }\n      }, 20); }\n    else\n      { onBlur(this); }\n\n    for (var opt in optionHandlers) { if (optionHandlers.hasOwnProperty(opt))\n      { optionHandlers[opt](this, options[opt], Init); } }\n    maybeUpdateLineNumberWidth(this);\n    if (options.finishInit) { options.finishInit(this); }\n    for (var i = 0; i < initHooks.length; ++i) { initHooks[i](this); }\n    endOperation(this);\n    // Suppress optimizelegibility in Webkit, since it breaks text\n    // measuring on line wrapping boundaries.\n    if (webkit && options.lineWrapping &&\n        getComputedStyle(display.lineDiv).textRendering == \"optimizelegibility\")\n      { display.lineDiv.style.textRendering = \"auto\"; }\n  }\n\n  // The default configuration options.\n  CodeMirror.defaults = defaults;\n  // Functions to run when options are changed.\n  CodeMirror.optionHandlers = optionHandlers;\n\n  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\n      { on(d.scroller, \"dblclick\", operation(cm, function (e) {\n        if (signalDOMEvent(cm, e)) { return }\n        var pos = posFromMouse(cm, e);\n        if (!pos || clickInGutter(cm, e) || eventInWidget(cm.display, e)) { return }\n        e_preventDefault(e);\n        var word = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      })); }\n    else\n      { on(d.scroller, \"dblclick\", function (e) { return signalDOMEvent(cm, e) || e_preventDefault(e); }); }\n    // Some browsers fire contextmenu *after* opening the menu, at\n    // which point we can't mess with it anymore. Context menu is\n    // handled in onMouseDown for these browsers.\n    on(d.scroller, \"contextmenu\", function (e) { return onContextMenu(cm, e); });\n    on(d.input.getField(), \"contextmenu\", function (e) {\n      if (!d.scroller.contains(e.target)) { onContextMenu(cm, e); }\n    });\n\n    // Used to suppress mouse event handling when a touch happens\n    var touchFinished, prevTouch = {end: 0};\n    function finishTouch() {\n      if (d.activeTouch) {\n        touchFinished = setTimeout(function () { return d.activeTouch = null; }, 1000);\n        prevTouch = d.activeTouch;\n        prevTouch.end = +new Date;\n      }\n    }\n    function isMouseLikeTouchEvent(e) {\n      if (e.touches.length != 1) { return false }\n      var touch = e.touches[0];\n      return touch.radiusX <= 1 && touch.radiusY <= 1\n    }\n    function farAway(touch, other) {\n      if (other.left == null) { return true }\n      var dx = other.left - touch.left, dy = other.top - touch.top;\n      return dx * dx + dy * dy > 20 * 20\n    }\n    on(d.scroller, \"touchstart\", function (e) {\n      if (!signalDOMEvent(cm, e) && !isMouseLikeTouchEvent(e) && !clickInGutter(cm, e)) {\n        d.input.ensurePolled();\n        clearTimeout(touchFinished);\n        var now = +new Date;\n        d.activeTouch = {start: now, moved: false,\n                         prev: now - prevTouch.end <= 300 ? prevTouch : null};\n        if (e.touches.length == 1) {\n          d.activeTouch.left = e.touches[0].pageX;\n          d.activeTouch.top = e.touches[0].pageY;\n        }\n      }\n    });\n    on(d.scroller, \"touchmove\", function () {\n      if (d.activeTouch) { d.activeTouch.moved = true; }\n    });\n    on(d.scroller, \"touchend\", function (e) {\n      var touch = d.activeTouch;\n      if (touch && !eventInWidget(d, e) && touch.left != null &&\n          !touch.moved && new Date - touch.start < 300) {\n        var pos = cm.coordsChar(d.activeTouch, \"page\"), range;\n        if (!touch.prev || farAway(touch, touch.prev)) // Single tap\n          { range = new Range(pos, pos); }\n        else if (!touch.prev.prev || farAway(touch, touch.prev.prev)) // Double tap\n          { range = cm.findWordAt(pos); }\n        else // Triple tap\n          { range = new Range(Pos(pos.line, 0), clipPos(cm.doc, Pos(pos.line + 1, 0))); }\n        cm.setSelection(range.anchor, range.head);\n        cm.focus();\n        e_preventDefault(e);\n      }\n      finishTouch();\n    });\n    on(d.scroller, \"touchcancel\", finishTouch);\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\n    on(d.scroller, \"scroll\", function () {\n      if (d.scroller.clientHeight) {\n        updateScrollTop(cm, d.scroller.scrollTop);\n        setScrollLeft(cm, d.scroller.scrollLeft, true);\n        signal(cm, \"scroll\", cm);\n      }\n    });\n\n    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function (e) { return onScrollWheel(cm, e); });\n    on(d.scroller, \"DOMMouseScroll\", function (e) { return onScrollWheel(cm, e); });\n\n    // Prevent wrapper from ever scrolling\n    on(d.wrapper, \"scroll\", function () { return d.wrapper.scrollTop = d.wrapper.scrollLeft = 0; });\n\n    d.dragFunctions = {\n      enter: function (e) {if (!signalDOMEvent(cm, e)) { e_stop(e); }},\n      over: function (e) {if (!signalDOMEvent(cm, e)) { onDragOver(cm, e); e_stop(e); }},\n      start: function (e) { return onDragStart(cm, e); },\n      drop: operation(cm, onDrop),\n      leave: function (e) {if (!signalDOMEvent(cm, e)) { clearDragCursor(cm); }}\n    };\n\n    var inp = d.input.getField();\n    on(inp, \"keyup\", function (e) { return onKeyUp.call(cm, e); });\n    on(inp, \"keydown\", operation(cm, onKeyDown));\n    on(inp, \"keypress\", operation(cm, onKeyPress));\n    on(inp, \"focus\", function (e) { return onFocus(cm, e); });\n    on(inp, \"blur\", function (e) { return onBlur(cm, e); });\n  }\n\n  var initHooks = [];\n  CodeMirror.defineInitHook = function (f) { return initHooks.push(f); };\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) { how = \"add\"; }\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!doc.mode.indent) { how = \"prev\"; }\n      else { state = getContextBefore(cm, n).state; }\n    }\n\n    var tabSize = cm.options.tabSize;\n    var line = getLine(doc, n), curSpace = countColumn(line.text, null, tabSize);\n    if (line.stateAfter) { line.stateAfter = null; }\n    var curSpaceString = line.text.match(/^\\s*/)[0], indentation;\n    if (!aggressive && !/\\S/.test(line.text)) {\n      indentation = 0;\n      how = \"not\";\n    } else if (how == \"smart\") {\n      indentation = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\n        if (!aggressive) { return }\n        how = \"prev\";\n      }\n    }\n    if (how == \"prev\") {\n      if (n > doc.first) { indentation = countColumn(getLine(doc, n-1).text, null, tabSize); }\n      else { indentation = 0; }\n    } else if (how == \"add\") {\n      indentation = curSpace + cm.options.indentUnit;\n    } else if (how == \"subtract\") {\n      indentation = curSpace - cm.options.indentUnit;\n    } else if (typeof how == \"number\") {\n      indentation = curSpace + how;\n    }\n    indentation = Math.max(0, indentation);\n\n    var indentString = \"\", pos = 0;\n    if (cm.options.indentWithTabs)\n      { for (var i = Math.floor(indentation / tabSize); i; --i) {pos += tabSize; indentString += \"\\t\";} }\n    if (pos < indentation) { indentString += spaceStr(indentation - pos); }\n\n    if (indentString != curSpaceString) {\n      replaceRange(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n      line.stateAfter = null;\n      return true\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i$1 = 0; i$1 < doc.sel.ranges.length; i$1++) {\n        var range = doc.sel.ranges[i$1];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos$1 = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i$1, new Range(pos$1, pos$1));\n          break\n        }\n      }\n    }\n  }\n\n  // This will be set to a {lineWise: bool, text: [string]} object, so\n  // that, when pasting, we know what kind of selections the copied\n  // text was made out of.\n  var lastCopied = null;\n\n  function setLastCopied(newLastCopied) {\n    lastCopied = newLastCopied;\n  }\n\n  function applyTextInput(cm, inserted, deleted, sel, origin) {\n    var doc = cm.doc;\n    cm.display.shift = false;\n    if (!sel) { sel = doc.sel; }\n\n    var recent = +new Date - 200;\n    var paste = origin == \"paste\" || cm.state.pasteIncoming > recent;\n    var textLines = splitLinesAuto(inserted), multiPaste = null;\n    // When pasting N lines into N selections, insert one line per selection\n    if (paste && sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.text.join(\"\\n\") == inserted) {\n        if (sel.ranges.length % lastCopied.text.length == 0) {\n          multiPaste = [];\n          for (var i = 0; i < lastCopied.text.length; i++)\n            { multiPaste.push(doc.splitLines(lastCopied.text[i])); }\n        }\n      } else if (textLines.length == sel.ranges.length && cm.options.pasteLinesPerSelection) {\n        multiPaste = map(textLines, function (l) { return [l]; });\n      }\n    }\n\n    var updateInput = cm.curOp.updateInput;\n    // Normal behavior is to insert the new text into every selection\n    for (var i$1 = sel.ranges.length - 1; i$1 >= 0; i$1--) {\n      var range = sel.ranges[i$1];\n      var from = range.from(), to = range.to();\n      if (range.empty()) {\n        if (deleted && deleted > 0) // Handle deletion\n          { from = Pos(from.line, from.ch - deleted); }\n        else if (cm.state.overwrite && !paste) // Handle overwrite\n          { to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length)); }\n        else if (paste && lastCopied && lastCopied.lineWise && lastCopied.text.join(\"\\n\") == textLines.join(\"\\n\"))\n          { from = to = Pos(from.line, 0); }\n      }\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i$1 % multiPaste.length] : textLines,\n                         origin: origin || (paste ? \"paste\" : cm.state.cutIncoming > recent ? \"cut\" : \"+input\")};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n    }\n    if (inserted && !paste)\n      { triggerElectric(cm, inserted); }\n\n    ensureCursorVisible(cm);\n    if (cm.curOp.updateInput < 2) { cm.curOp.updateInput = updateInput; }\n    cm.curOp.typing = true;\n    cm.state.pasteIncoming = cm.state.cutIncoming = -1;\n  }\n\n  function handlePaste(e, cm) {\n    var pasted = e.clipboardData && e.clipboardData.getData(\"Text\");\n    if (pasted) {\n      e.preventDefault();\n      if (!cm.isReadOnly() && !cm.options.disableInput)\n        { runInOp(cm, function () { return applyTextInput(cm, pasted, 0, null, \"paste\"); }); }\n      return true\n    }\n  }\n\n  function triggerElectric(cm, inserted) {\n    // When an 'electric' character is inserted, immediately trigger a reindent\n    if (!cm.options.electricChars || !cm.options.smartIndent) { return }\n    var sel = cm.doc.sel;\n\n    for (var i = sel.ranges.length - 1; i >= 0; i--) {\n      var range = sel.ranges[i];\n      if (range.head.ch > 100 || (i && sel.ranges[i - 1].head.line == range.head.line)) { continue }\n      var mode = cm.getModeAt(range.head);\n      var indented = false;\n      if (mode.electricChars) {\n        for (var j = 0; j < mode.electricChars.length; j++)\n          { if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n            indented = indentLine(cm, range.head.line, \"smart\");\n            break\n          } }\n      } else if (mode.electricInput) {\n        if (mode.electricInput.test(getLine(cm.doc, range.head.line).text.slice(0, range.head.ch)))\n          { indented = indentLine(cm, range.head.line, \"smart\"); }\n      }\n      if (indented) { signalLater(cm, \"electricInput\", cm, range.head.line); }\n    }\n  }\n\n  function copyableRanges(cm) {\n    var text = [], ranges = [];\n    for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n      var line = cm.doc.sel.ranges[i].head.line;\n      var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n      ranges.push(lineRange);\n      text.push(cm.getRange(lineRange.anchor, lineRange.head));\n    }\n    return {text: text, ranges: ranges}\n  }\n\n  function disableBrowserMagic(field, spellcheck, autocorrect, autocapitalize) {\n    field.setAttribute(\"autocorrect\", autocorrect ? \"\" : \"off\");\n    field.setAttribute(\"autocapitalize\", autocapitalize ? \"\" : \"off\");\n    field.setAttribute(\"spellcheck\", !!spellcheck);\n  }\n\n  function hiddenTextarea() {\n    var te = elt(\"textarea\", null, null, \"position: absolute; bottom: -1em; padding: 0; width: 1px; height: 1em; min-height: 1em; outline: none\");\n    var div = elt(\"div\", [te], null, \"overflow: hidden; position: relative; width: 3px; height: 0px;\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\n    if (webkit) { te.style.width = \"1000px\"; }\n    else { te.setAttribute(\"wrap\", \"off\"); }\n    // If border: 0; -- iOS fails to open keyboard (issue #1287)\n    if (ios) { te.style.border = \"1px solid black\"; }\n    disableBrowserMagic(te);\n    return div\n  }\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\n\n  function addEditorMethods(CodeMirror) {\n    var optionHandlers = CodeMirror.optionHandlers;\n\n    var helpers = CodeMirror.helpers = {};\n\n    CodeMirror.prototype = {\n      constructor: CodeMirror,\n      focus: function(){window.focus(); this.display.input.focus();},\n\n      setOption: function(option, value) {\n        var options = this.options, old = options[option];\n        if (options[option] == value && option != \"mode\") { return }\n        options[option] = value;\n        if (optionHandlers.hasOwnProperty(option))\n          { operation(this, optionHandlers[option])(this, value, old); }\n        signal(this, \"optionChange\", this, option);\n      },\n\n      getOption: function(option) {return this.options[option]},\n      getDoc: function() {return this.doc},\n\n      addKeyMap: function(map, bottom) {\n        this.state.keyMaps[bottom ? \"push\" : \"unshift\"](getKeyMap(map));\n      },\n      removeKeyMap: function(map) {\n        var maps = this.state.keyMaps;\n        for (var i = 0; i < maps.length; ++i)\n          { if (maps[i] == map || maps[i].name == map) {\n            maps.splice(i, 1);\n            return true\n          } }\n      },\n\n      addOverlay: methodOp(function(spec, options) {\n        var mode = spec.token ? spec : CodeMirror.getMode(this.options, spec);\n        if (mode.startState) { throw new Error(\"Overlays may not be stateful.\") }\n        insertSorted(this.state.overlays,\n                     {mode: mode, modeSpec: spec, opaque: options && options.opaque,\n                      priority: (options && options.priority) || 0},\n                     function (overlay) { return overlay.priority; });\n        this.state.modeGen++;\n        regChange(this);\n      }),\n      removeOverlay: methodOp(function(spec) {\n        var overlays = this.state.overlays;\n        for (var i = 0; i < overlays.length; ++i) {\n          var cur = overlays[i].modeSpec;\n          if (cur == spec || typeof spec == \"string\" && cur.name == spec) {\n            overlays.splice(i, 1);\n            this.state.modeGen++;\n            regChange(this);\n            return\n          }\n        }\n      }),\n\n      indentLine: methodOp(function(n, dir, aggressive) {\n        if (typeof dir != \"string\" && typeof dir != \"number\") {\n          if (dir == null) { dir = this.options.smartIndent ? \"smart\" : \"prev\"; }\n          else { dir = dir ? \"add\" : \"subtract\"; }\n        }\n        if (isLine(this.doc, n)) { indentLine(this, n, dir, aggressive); }\n      }),\n      indentSelection: methodOp(function(how) {\n        var ranges = this.doc.sel.ranges, end = -1;\n        for (var i = 0; i < ranges.length; i++) {\n          var range = ranges[i];\n          if (!range.empty()) {\n            var from = range.from(), to = range.to();\n            var start = Math.max(end, from.line);\n            end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n            for (var j = start; j < end; ++j)\n              { indentLine(this, j, how); }\n            var newRanges = this.doc.sel.ranges;\n            if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n              { replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll); }\n          } else if (range.head.line > end) {\n            indentLine(this, range.head.line, how, true);\n            end = range.head.line;\n            if (i == this.doc.sel.primIndex) { ensureCursorVisible(this); }\n          }\n        }\n      }),\n\n      // Fetch the parser token for a given character. Useful for hacks\n      // that want to inspect the mode state (say, for completion).\n      getTokenAt: function(pos, precise) {\n        return takeToken(this, pos, precise)\n      },\n\n      getLineTokens: function(line, precise) {\n        return takeToken(this, Pos(line), precise, true)\n      },\n\n      getTokenTypeAt: function(pos) {\n        pos = clipPos(this.doc, pos);\n        var styles = getLineStyles(this, getLine(this.doc, pos.line));\n        var before = 0, after = (styles.length - 1) / 2, ch = pos.ch;\n        var type;\n        if (ch == 0) { type = styles[2]; }\n        else { for (;;) {\n          var mid = (before + after) >> 1;\n          if ((mid ? styles[mid * 2 - 1] : 0) >= ch) { after = mid; }\n          else if (styles[mid * 2 + 1] < ch) { before = mid + 1; }\n          else { type = styles[mid * 2 + 2]; break }\n        } }\n        var cut = type ? type.indexOf(\"overlay \") : -1;\n        return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1)\n      },\n\n      getModeAt: function(pos) {\n        var mode = this.doc.mode;\n        if (!mode.innerMode) { return mode }\n        return CodeMirror.innerMode(mode, this.getTokenAt(pos).state).mode\n      },\n\n      getHelper: function(pos, type) {\n        return this.getHelpers(pos, type)[0]\n      },\n\n      getHelpers: function(pos, type) {\n        var found = [];\n        if (!helpers.hasOwnProperty(type)) { return found }\n        var help = helpers[type], mode = this.getModeAt(pos);\n        if (typeof mode[type] == \"string\") {\n          if (help[mode[type]]) { found.push(help[mode[type]]); }\n        } else if (mode[type]) {\n          for (var i = 0; i < mode[type].length; i++) {\n            var val = help[mode[type][i]];\n            if (val) { found.push(val); }\n          }\n        } else if (mode.helperType && help[mode.helperType]) {\n          found.push(help[mode.helperType]);\n        } else if (help[mode.name]) {\n          found.push(help[mode.name]);\n        }\n        for (var i$1 = 0; i$1 < help._global.length; i$1++) {\n          var cur = help._global[i$1];\n          if (cur.pred(mode, this) && indexOf(found, cur.val) == -1)\n            { found.push(cur.val); }\n        }\n        return found\n      },\n\n      getStateAfter: function(line, precise) {\n        var doc = this.doc;\n        line = clipLine(doc, line == null ? doc.first + doc.size - 1: line);\n        return getContextBefore(this, line + 1, precise).state\n      },\n\n      cursorCoords: function(start, mode) {\n        var pos, range = this.doc.sel.primary();\n        if (start == null) { pos = range.head; }\n        else if (typeof start == \"object\") { pos = clipPos(this.doc, start); }\n        else { pos = start ? range.from() : range.to(); }\n        return cursorCoords(this, pos, mode || \"page\")\n      },\n\n      charCoords: function(pos, mode) {\n        return charCoords(this, clipPos(this.doc, pos), mode || \"page\")\n      },\n\n      coordsChar: function(coords, mode) {\n        coords = fromCoordSystem(this, coords, mode || \"page\");\n        return coordsChar(this, coords.left, coords.top)\n      },\n\n      lineAtHeight: function(height, mode) {\n        height = fromCoordSystem(this, {top: height, left: 0}, mode || \"page\").top;\n        return lineAtHeight(this.doc, height + this.display.viewOffset)\n      },\n      heightAtLine: function(line, mode, includeWidgets) {\n        var end = false, lineObj;\n        if (typeof line == \"number\") {\n          var last = this.doc.first + this.doc.size - 1;\n          if (line < this.doc.first) { line = this.doc.first; }\n          else if (line > last) { line = last; end = true; }\n          lineObj = getLine(this.doc, line);\n        } else {\n          lineObj = line;\n        }\n        return intoCoordSystem(this, lineObj, {top: 0, left: 0}, mode || \"page\", includeWidgets || end).top +\n          (end ? this.doc.height - heightAtLine(lineObj) : 0)\n      },\n\n      defaultTextHeight: function() { return textHeight(this.display) },\n      defaultCharWidth: function() { return charWidth(this.display) },\n\n      getViewport: function() { return {from: this.display.viewFrom, to: this.display.viewTo}},\n\n      addWidget: function(pos, node, scroll, vert, horiz) {\n        var display = this.display;\n        pos = cursorCoords(this, clipPos(this.doc, pos));\n        var top = pos.bottom, left = pos.left;\n        node.style.position = \"absolute\";\n        node.setAttribute(\"cm-ignore-events\", \"true\");\n        this.display.input.setUneditable(node);\n        display.sizer.appendChild(node);\n        if (vert == \"over\") {\n          top = pos.top;\n        } else if (vert == \"above\" || vert == \"near\") {\n          var vspace = Math.max(display.wrapper.clientHeight, this.doc.height),\n          hspace = Math.max(display.sizer.clientWidth, display.lineSpace.clientWidth);\n          // Default to positioning above (if specified and possible); otherwise default to positioning below\n          if ((vert == 'above' || pos.bottom + node.offsetHeight > vspace) && pos.top > node.offsetHeight)\n            { top = pos.top - node.offsetHeight; }\n          else if (pos.bottom + node.offsetHeight <= vspace)\n            { top = pos.bottom; }\n          if (left + node.offsetWidth > hspace)\n            { left = hspace - node.offsetWidth; }\n        }\n        node.style.top = top + \"px\";\n        node.style.left = node.style.right = \"\";\n        if (horiz == \"right\") {\n          left = display.sizer.clientWidth - node.offsetWidth;\n          node.style.right = \"0px\";\n        } else {\n          if (horiz == \"left\") { left = 0; }\n          else if (horiz == \"middle\") { left = (display.sizer.clientWidth - node.offsetWidth) / 2; }\n          node.style.left = left + \"px\";\n        }\n        if (scroll)\n          { scrollIntoView(this, {left: left, top: top, right: left + node.offsetWidth, bottom: top + node.offsetHeight}); }\n      },\n\n      triggerOnKeyDown: methodOp(onKeyDown),\n      triggerOnKeyPress: methodOp(onKeyPress),\n      triggerOnKeyUp: onKeyUp,\n      triggerOnMouseDown: methodOp(onMouseDown),\n\n      execCommand: function(cmd) {\n        if (commands.hasOwnProperty(cmd))\n          { return commands[cmd].call(null, this) }\n      },\n\n      triggerElectric: methodOp(function(text) { triggerElectric(this, text); }),\n\n      findPosH: function(from, amount, unit, visually) {\n        var dir = 1;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          cur = findPosH(this.doc, cur, dir, unit, visually);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveH: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        this.extendSelectionsBy(function (range) {\n          if (this$1.display.shift || this$1.doc.extend || range.empty())\n            { return findPosH(this$1.doc, range.head, dir, unit, this$1.options.rtlMoveVisually) }\n          else\n            { return dir < 0 ? range.from() : range.to() }\n        }, sel_move);\n      }),\n\n      deleteH: methodOp(function(dir, unit) {\n        var sel = this.doc.sel, doc = this.doc;\n        if (sel.somethingSelected())\n          { doc.replaceSelection(\"\", null, \"+delete\"); }\n        else\n          { deleteNearSelection(this, function (range) {\n            var other = findPosH(doc, range.head, dir, unit, false);\n            return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other}\n          }); }\n      }),\n\n      findPosV: function(from, amount, unit, goalColumn) {\n        var dir = 1, x = goalColumn;\n        if (amount < 0) { dir = -1; amount = -amount; }\n        var cur = clipPos(this.doc, from);\n        for (var i = 0; i < amount; ++i) {\n          var coords = cursorCoords(this, cur, \"div\");\n          if (x == null) { x = coords.left; }\n          else { coords.left = x; }\n          cur = findPosV(this, coords, dir, unit);\n          if (cur.hitSide) { break }\n        }\n        return cur\n      },\n\n      moveV: methodOp(function(dir, unit) {\n        var this$1 = this;\n\n        var doc = this.doc, goals = [];\n        var collapse = !this.display.shift && !doc.extend && doc.sel.somethingSelected();\n        doc.extendSelectionsBy(function (range) {\n          if (collapse)\n            { return dir < 0 ? range.from() : range.to() }\n          var headPos = cursorCoords(this$1, range.head, \"div\");\n          if (range.goalColumn != null) { headPos.left = range.goalColumn; }\n          goals.push(headPos.left);\n          var pos = findPosV(this$1, headPos, dir, unit);\n          if (unit == \"page\" && range == doc.sel.primary())\n            { addToScrollTop(this$1, charCoords(this$1, pos, \"div\").top - headPos.top); }\n          return pos\n        }, sel_move);\n        if (goals.length) { for (var i = 0; i < doc.sel.ranges.length; i++)\n          { doc.sel.ranges[i].goalColumn = goals[i]; } }\n      }),\n\n      // Find the word at the given position (as returned by coordsChar).\n      findWordAt: function(pos) {\n        var doc = this.doc, line = getLine(doc, pos.line).text;\n        var start = pos.ch, end = pos.ch;\n        if (line) {\n          var helper = this.getHelper(pos, \"wordChars\");\n          if ((pos.sticky == \"before\" || end == line.length) && start) { --start; } else { ++end; }\n          var startChar = line.charAt(start);\n          var check = isWordChar(startChar, helper)\n            ? function (ch) { return isWordChar(ch, helper); }\n            : /\\s/.test(startChar) ? function (ch) { return /\\s/.test(ch); }\n            : function (ch) { return (!/\\s/.test(ch) && !isWordChar(ch)); };\n          while (start > 0 && check(line.charAt(start - 1))) { --start; }\n          while (end < line.length && check(line.charAt(end))) { ++end; }\n        }\n        return new Range(Pos(pos.line, start), Pos(pos.line, end))\n      },\n\n      toggleOverwrite: function(value) {\n        if (value != null && value == this.state.overwrite) { return }\n        if (this.state.overwrite = !this.state.overwrite)\n          { addClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n        else\n          { rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\"); }\n\n        signal(this, \"overwriteToggle\", this, this.state.overwrite);\n      },\n      hasFocus: function() { return this.display.input.getField() == activeElt() },\n      isReadOnly: function() { return !!(this.options.readOnly || this.doc.cantEdit) },\n\n      scrollTo: methodOp(function (x, y) { scrollToCoords(this, x, y); }),\n      getScrollInfo: function() {\n        var scroller = this.display.scroller;\n        return {left: scroller.scrollLeft, top: scroller.scrollTop,\n                height: scroller.scrollHeight - scrollGap(this) - this.display.barHeight,\n                width: scroller.scrollWidth - scrollGap(this) - this.display.barWidth,\n                clientHeight: displayHeight(this), clientWidth: displayWidth(this)}\n      },\n\n      scrollIntoView: methodOp(function(range, margin) {\n        if (range == null) {\n          range = {from: this.doc.sel.primary().head, to: null};\n          if (margin == null) { margin = this.options.cursorScrollMargin; }\n        } else if (typeof range == \"number\") {\n          range = {from: Pos(range, 0), to: null};\n        } else if (range.from == null) {\n          range = {from: range, to: null};\n        }\n        if (!range.to) { range.to = range.from; }\n        range.margin = margin || 0;\n\n        if (range.from.line != null) {\n          scrollToRange(this, range);\n        } else {\n          scrollToCoordsRange(this, range.from, range.to, range.margin);\n        }\n      }),\n\n      setSize: methodOp(function(width, height) {\n        var this$1 = this;\n\n        var interpret = function (val) { return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val; };\n        if (width != null) { this.display.wrapper.style.width = interpret(width); }\n        if (height != null) { this.display.wrapper.style.height = interpret(height); }\n        if (this.options.lineWrapping) { clearLineMeasurementCache(this); }\n        var lineNo = this.display.viewFrom;\n        this.doc.iter(lineNo, this.display.viewTo, function (line) {\n          if (line.widgets) { for (var i = 0; i < line.widgets.length; i++)\n            { if (line.widgets[i].noHScroll) { regLineChange(this$1, lineNo, \"widget\"); break } } }\n          ++lineNo;\n        });\n        this.curOp.forceUpdate = true;\n        signal(this, \"refresh\", this);\n      }),\n\n      operation: function(f){return runInOp(this, f)},\n      startOperation: function(){return startOperation(this)},\n      endOperation: function(){return endOperation(this)},\n\n      refresh: methodOp(function() {\n        var oldHeight = this.display.cachedTextHeight;\n        regChange(this);\n        this.curOp.forceUpdate = true;\n        clearCaches(this);\n        scrollToCoords(this, this.doc.scrollLeft, this.doc.scrollTop);\n        updateGutterSpace(this.display);\n        if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5 || this.options.lineWrapping)\n          { estimateLineHeights(this); }\n        signal(this, \"refresh\", this);\n      }),\n\n      swapDoc: methodOp(function(doc) {\n        var old = this.doc;\n        old.cm = null;\n        // Cancel the current text selection if any (#5821)\n        if (this.state.selectingText) { this.state.selectingText(); }\n        attachDoc(this, doc);\n        clearCaches(this);\n        this.display.input.reset();\n        scrollToCoords(this, doc.scrollLeft, doc.scrollTop);\n        this.curOp.forceScroll = true;\n        signalLater(this, \"swapDoc\", this, old);\n        return old\n      }),\n\n      phrase: function(phraseText) {\n        var phrases = this.options.phrases;\n        return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText\n      },\n\n      getInputField: function(){return this.display.input.getField()},\n      getWrapperElement: function(){return this.display.wrapper},\n      getScrollerElement: function(){return this.display.scroller},\n      getGutterElement: function(){return this.display.gutters}\n    };\n    eventMixin(CodeMirror);\n\n    CodeMirror.registerHelper = function(type, name, value) {\n      if (!helpers.hasOwnProperty(type)) { helpers[type] = CodeMirror[type] = {_global: []}; }\n      helpers[type][name] = value;\n    };\n    CodeMirror.registerGlobalHelper = function(type, name, predicate, value) {\n      CodeMirror.registerHelper(type, name, value);\n      helpers[type]._global.push({pred: predicate, val: value});\n    };\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"codepoint\", \"char\", \"column\" (like char, but\n  // doesn't cross line boundaries), \"word\" (across next word), or\n  // \"group\" (to the start of next group of word or\n  // non-word-non-whitespace chars). The visually param controls\n  // whether, in right-to-left text, direction 1 means to move towards\n  // the next index in the string, or towards the character to the right\n  // of the current position. The resulting position will have a\n  // hitSide=true property if it reached the end of the document.\n  function findPosH(doc, pos, dir, unit, visually) {\n    var oldPos = pos;\n    var origDir = dir;\n    var lineObj = getLine(doc, pos.line);\n    var lineDir = visually && doc.direction == \"rtl\" ? -dir : dir;\n    function findNextLine() {\n      var l = pos.line + lineDir;\n      if (l < doc.first || l >= doc.first + doc.size) { return false }\n      pos = new Pos(l, pos.ch, pos.sticky);\n      return lineObj = getLine(doc, l)\n    }\n    function moveOnce(boundToLine) {\n      var next;\n      if (unit == \"codepoint\") {\n        var ch = lineObj.text.charCodeAt(pos.ch + (dir > 0 ? 0 : -1));\n        if (isNaN(ch)) {\n          next = null;\n        } else {\n          var astral = dir > 0 ? ch >= 0xD800 && ch < 0xDC00 : ch >= 0xDC00 && ch < 0xDFFF;\n          next = new Pos(pos.line, Math.max(0, Math.min(lineObj.text.length, pos.ch + dir * (astral ? 2 : 1))), -dir);\n        }\n      } else if (visually) {\n        next = moveVisually(doc.cm, lineObj, pos, dir);\n      } else {\n        next = moveLogically(lineObj, pos, dir);\n      }\n      if (next == null) {\n        if (!boundToLine && findNextLine())\n          { pos = endOfLine(visually, doc.cm, lineObj, pos.line, lineDir); }\n        else\n          { return false }\n      } else {\n        pos = next;\n      }\n      return true\n    }\n\n    if (unit == \"char\" || unit == \"codepoint\") {\n      moveOnce();\n    } else if (unit == \"column\") {\n      moveOnce(true);\n    } else if (unit == \"word\" || unit == \"group\") {\n      var sawType = null, group = unit == \"group\";\n      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\n      for (var first = true;; first = false) {\n        if (dir < 0 && !moveOnce(!first)) { break }\n        var cur = lineObj.text.charAt(pos.ch) || \"\\n\";\n        var type = isWordChar(cur, helper) ? \"w\"\n          : group && cur == \"\\n\" ? \"n\"\n          : !group || /\\s/.test(cur) ? null\n          : \"p\";\n        if (group && !first && !type) { type = \"s\"; }\n        if (sawType && sawType != type) {\n          if (dir < 0) {dir = 1; moveOnce(); pos.sticky = \"after\";}\n          break\n        }\n\n        if (type) { sawType = type; }\n        if (dir > 0 && !moveOnce(!first)) { break }\n      }\n    }\n    var result = skipAtomic(doc, pos, oldPos, origDir, true);\n    if (equalCursorPos(oldPos, result)) { result.hitSide = true; }\n    return result\n  }\n\n  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\n  function findPosV(cm, pos, dir, unit) {\n    var doc = cm.doc, x = pos.left, y;\n    if (unit == \"page\") {\n      var pageSize = Math.min(cm.display.wrapper.clientHeight, window.innerHeight || document.documentElement.clientHeight);\n      var moveAmount = Math.max(pageSize - .5 * textHeight(cm.display), 3);\n      y = (dir > 0 ? pos.bottom : pos.top) + dir * moveAmount;\n\n    } else if (unit == \"line\") {\n      y = dir > 0 ? pos.bottom + 3 : pos.top - 3;\n    }\n    var target;\n    for (;;) {\n      target = coordsChar(cm, x, y);\n      if (!target.outside) { break }\n      if (dir < 0 ? y <= 0 : y >= doc.height) { target.hitSide = true; break }\n      y += dir * 5;\n    }\n    return target\n  }\n\n  // CONTENTEDITABLE INPUT STYLE\n\n  var ContentEditableInput = function(cm) {\n    this.cm = cm;\n    this.lastAnchorNode = this.lastAnchorOffset = this.lastFocusNode = this.lastFocusOffset = null;\n    this.polling = new Delayed();\n    this.composing = null;\n    this.gracePeriod = false;\n    this.readDOMTimeout = null;\n  };\n\n  ContentEditableInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = input.cm;\n    var div = input.div = display.lineDiv;\n    div.contentEditable = true;\n    disableBrowserMagic(div, cm.options.spellcheck, cm.options.autocorrect, cm.options.autocapitalize);\n\n    function belongsToInput(e) {\n      for (var t = e.target; t; t = t.parentNode) {\n        if (t == div) { return true }\n        if (/\\bCodeMirror-(?:line)?widget\\b/.test(t.className)) { break }\n      }\n      return false\n    }\n\n    on(div, \"paste\", function (e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n      // IE doesn't fire input events, so we schedule a read for the pasted content in this way\n      if (ie_version <= 11) { setTimeout(operation(cm, function () { return this$1.updateFromDOM(); }), 20); }\n    });\n\n    on(div, \"compositionstart\", function (e) {\n      this$1.composing = {data: e.data, done: false};\n    });\n    on(div, \"compositionupdate\", function (e) {\n      if (!this$1.composing) { this$1.composing = {data: e.data, done: false}; }\n    });\n    on(div, \"compositionend\", function (e) {\n      if (this$1.composing) {\n        if (e.data != this$1.composing.data) { this$1.readFromDOMSoon(); }\n        this$1.composing.done = true;\n      }\n    });\n\n    on(div, \"touchstart\", function () { return input.forceCompositionEnd(); });\n\n    on(div, \"input\", function () {\n      if (!this$1.composing) { this$1.readFromDOMSoon(); }\n    });\n\n    function onCopyCut(e) {\n      if (!belongsToInput(e) || signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n        if (e.type == \"cut\") { cm.replaceSelection(\"\", null, \"cut\"); }\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.operation(function () {\n            cm.setSelections(ranges.ranges, 0, sel_dontScroll);\n            cm.replaceSelection(\"\", null, \"cut\");\n          });\n        }\n      }\n      if (e.clipboardData) {\n        e.clipboardData.clearData();\n        var content = lastCopied.text.join(\"\\n\");\n        // iOS exposes the clipboard API, but seems to discard content inserted into it\n        e.clipboardData.setData(\"Text\", content);\n        if (e.clipboardData.getData(\"Text\") == content) {\n          e.preventDefault();\n          return\n        }\n      }\n      // Old-fashioned briefly-focus-a-textarea hack\n      var kludge = hiddenTextarea(), te = kludge.firstChild;\n      cm.display.lineSpace.insertBefore(kludge, cm.display.lineSpace.firstChild);\n      te.value = lastCopied.text.join(\"\\n\");\n      var hadFocus = activeElt();\n      selectInput(te);\n      setTimeout(function () {\n        cm.display.lineSpace.removeChild(kludge);\n        hadFocus.focus();\n        if (hadFocus == div) { input.showPrimarySelection(); }\n      }, 50);\n    }\n    on(div, \"copy\", onCopyCut);\n    on(div, \"cut\", onCopyCut);\n  };\n\n  ContentEditableInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.div.setAttribute('aria-label', label);\n    } else {\n      this.div.removeAttribute('aria-label');\n    }\n  };\n\n  ContentEditableInput.prototype.prepareSelection = function () {\n    var result = prepareSelection(this.cm, false);\n    result.focus = activeElt() == this.div;\n    return result\n  };\n\n  ContentEditableInput.prototype.showSelection = function (info, takeFocus) {\n    if (!info || !this.cm.display.view.length) { return }\n    if (info.focus || takeFocus) { this.showPrimarySelection(); }\n    this.showMultipleSelections(info);\n  };\n\n  ContentEditableInput.prototype.getSelection = function () {\n    return this.cm.display.wrapper.ownerDocument.getSelection()\n  };\n\n  ContentEditableInput.prototype.showPrimarySelection = function () {\n    var sel = this.getSelection(), cm = this.cm, prim = cm.doc.sel.primary();\n    var from = prim.from(), to = prim.to();\n\n    if (cm.display.viewTo == cm.display.viewFrom || from.line >= cm.display.viewTo || to.line < cm.display.viewFrom) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var curAnchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var curFocus = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (curAnchor && !curAnchor.bad && curFocus && !curFocus.bad &&\n        cmp(minPos(curAnchor, curFocus), from) == 0 &&\n        cmp(maxPos(curAnchor, curFocus), to) == 0)\n      { return }\n\n    var view = cm.display.view;\n    var start = (from.line >= cm.display.viewFrom && posToDOM(cm, from)) ||\n        {node: view[0].measure.map[2], offset: 0};\n    var end = to.line < cm.display.viewTo && posToDOM(cm, to);\n    if (!end) {\n      var measure = view[view.length - 1].measure;\n      var map = measure.maps ? measure.maps[measure.maps.length - 1] : measure.map;\n      end = {node: map[map.length - 1], offset: map[map.length - 2] - map[map.length - 3]};\n    }\n\n    if (!start || !end) {\n      sel.removeAllRanges();\n      return\n    }\n\n    var old = sel.rangeCount && sel.getRangeAt(0), rng;\n    try { rng = range(start.node, start.offset, end.offset, end.node); }\n    catch(e) {} // Our model of the DOM might be outdated, in which case the range we try to set can be impossible\n    if (rng) {\n      if (!gecko && cm.state.focused) {\n        sel.collapse(start.node, start.offset);\n        if (!rng.collapsed) {\n          sel.removeAllRanges();\n          sel.addRange(rng);\n        }\n      } else {\n        sel.removeAllRanges();\n        sel.addRange(rng);\n      }\n      if (old && sel.anchorNode == null) { sel.addRange(old); }\n      else if (gecko) { this.startGracePeriod(); }\n    }\n    this.rememberSelection();\n  };\n\n  ContentEditableInput.prototype.startGracePeriod = function () {\n      var this$1 = this;\n\n    clearTimeout(this.gracePeriod);\n    this.gracePeriod = setTimeout(function () {\n      this$1.gracePeriod = false;\n      if (this$1.selectionChanged())\n        { this$1.cm.operation(function () { return this$1.cm.curOp.selectionChanged = true; }); }\n    }, 20);\n  };\n\n  ContentEditableInput.prototype.showMultipleSelections = function (info) {\n    removeChildrenAndAdd(this.cm.display.cursorDiv, info.cursors);\n    removeChildrenAndAdd(this.cm.display.selectionDiv, info.selection);\n  };\n\n  ContentEditableInput.prototype.rememberSelection = function () {\n    var sel = this.getSelection();\n    this.lastAnchorNode = sel.anchorNode; this.lastAnchorOffset = sel.anchorOffset;\n    this.lastFocusNode = sel.focusNode; this.lastFocusOffset = sel.focusOffset;\n  };\n\n  ContentEditableInput.prototype.selectionInEditor = function () {\n    var sel = this.getSelection();\n    if (!sel.rangeCount) { return false }\n    var node = sel.getRangeAt(0).commonAncestorContainer;\n    return contains(this.div, node)\n  };\n\n  ContentEditableInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\") {\n      if (!this.selectionInEditor() || activeElt() != this.div)\n        { this.showSelection(this.prepareSelection(), true); }\n      this.div.focus();\n    }\n  };\n  ContentEditableInput.prototype.blur = function () { this.div.blur(); };\n  ContentEditableInput.prototype.getField = function () { return this.div };\n\n  ContentEditableInput.prototype.supportsTouch = function () { return true };\n\n  ContentEditableInput.prototype.receivedFocus = function () {\n      var this$1 = this;\n\n    var input = this;\n    if (this.selectionInEditor())\n      { setTimeout(function () { return this$1.pollSelection(); }, 20); }\n    else\n      { runInOp(this.cm, function () { return input.cm.curOp.selectionChanged = true; }); }\n\n    function poll() {\n      if (input.cm.state.focused) {\n        input.pollSelection();\n        input.polling.set(input.cm.options.pollInterval, poll);\n      }\n    }\n    this.polling.set(this.cm.options.pollInterval, poll);\n  };\n\n  ContentEditableInput.prototype.selectionChanged = function () {\n    var sel = this.getSelection();\n    return sel.anchorNode != this.lastAnchorNode || sel.anchorOffset != this.lastAnchorOffset ||\n      sel.focusNode != this.lastFocusNode || sel.focusOffset != this.lastFocusOffset\n  };\n\n  ContentEditableInput.prototype.pollSelection = function () {\n    if (this.readDOMTimeout != null || this.gracePeriod || !this.selectionChanged()) { return }\n    var sel = this.getSelection(), cm = this.cm;\n    // On Android Chrome (version 56, at least), backspacing into an\n    // uneditable block element will put the cursor in that element,\n    // and then, because it's not editable, hide the virtual keyboard.\n    // Because Android doesn't allow us to actually detect backspace\n    // presses in a sane way, this code checks for when that happens\n    // and simulates a backspace press in this case.\n    if (android && chrome && this.cm.display.gutterSpecs.length && isInGutter(sel.anchorNode)) {\n      this.cm.triggerOnKeyDown({type: \"keydown\", keyCode: 8, preventDefault: Math.abs});\n      this.blur();\n      this.focus();\n      return\n    }\n    if (this.composing) { return }\n    this.rememberSelection();\n    var anchor = domToPos(cm, sel.anchorNode, sel.anchorOffset);\n    var head = domToPos(cm, sel.focusNode, sel.focusOffset);\n    if (anchor && head) { runInOp(cm, function () {\n      setSelection(cm.doc, simpleSelection(anchor, head), sel_dontScroll);\n      if (anchor.bad || head.bad) { cm.curOp.selectionChanged = true; }\n    }); }\n  };\n\n  ContentEditableInput.prototype.pollContent = function () {\n    if (this.readDOMTimeout != null) {\n      clearTimeout(this.readDOMTimeout);\n      this.readDOMTimeout = null;\n    }\n\n    var cm = this.cm, display = cm.display, sel = cm.doc.sel.primary();\n    var from = sel.from(), to = sel.to();\n    if (from.ch == 0 && from.line > cm.firstLine())\n      { from = Pos(from.line - 1, getLine(cm.doc, from.line - 1).length); }\n    if (to.ch == getLine(cm.doc, to.line).text.length && to.line < cm.lastLine())\n      { to = Pos(to.line + 1, 0); }\n    if (from.line < display.viewFrom || to.line > display.viewTo - 1) { return false }\n\n    var fromIndex, fromLine, fromNode;\n    if (from.line == display.viewFrom || (fromIndex = findViewIndex(cm, from.line)) == 0) {\n      fromLine = lineNo(display.view[0].line);\n      fromNode = display.view[0].node;\n    } else {\n      fromLine = lineNo(display.view[fromIndex].line);\n      fromNode = display.view[fromIndex - 1].node.nextSibling;\n    }\n    var toIndex = findViewIndex(cm, to.line);\n    var toLine, toNode;\n    if (toIndex == display.view.length - 1) {\n      toLine = display.viewTo - 1;\n      toNode = display.lineDiv.lastChild;\n    } else {\n      toLine = lineNo(display.view[toIndex + 1].line) - 1;\n      toNode = display.view[toIndex + 1].node.previousSibling;\n    }\n\n    if (!fromNode) { return false }\n    var newText = cm.doc.splitLines(domTextBetween(cm, fromNode, toNode, fromLine, toLine));\n    var oldText = getBetween(cm.doc, Pos(fromLine, 0), Pos(toLine, getLine(cm.doc, toLine).text.length));\n    while (newText.length > 1 && oldText.length > 1) {\n      if (lst(newText) == lst(oldText)) { newText.pop(); oldText.pop(); toLine--; }\n      else if (newText[0] == oldText[0]) { newText.shift(); oldText.shift(); fromLine++; }\n      else { break }\n    }\n\n    var cutFront = 0, cutEnd = 0;\n    var newTop = newText[0], oldTop = oldText[0], maxCutFront = Math.min(newTop.length, oldTop.length);\n    while (cutFront < maxCutFront && newTop.charCodeAt(cutFront) == oldTop.charCodeAt(cutFront))\n      { ++cutFront; }\n    var newBot = lst(newText), oldBot = lst(oldText);\n    var maxCutEnd = Math.min(newBot.length - (newText.length == 1 ? cutFront : 0),\n                             oldBot.length - (oldText.length == 1 ? cutFront : 0));\n    while (cutEnd < maxCutEnd &&\n           newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1))\n      { ++cutEnd; }\n    // Try to move start of change to start of selection if ambiguous\n    if (newText.length == 1 && oldText.length == 1 && fromLine == from.line) {\n      while (cutFront && cutFront > from.ch &&\n             newBot.charCodeAt(newBot.length - cutEnd - 1) == oldBot.charCodeAt(oldBot.length - cutEnd - 1)) {\n        cutFront--;\n        cutEnd++;\n      }\n    }\n\n    newText[newText.length - 1] = newBot.slice(0, newBot.length - cutEnd).replace(/^\\u200b+/, \"\");\n    newText[0] = newText[0].slice(cutFront).replace(/\\u200b+$/, \"\");\n\n    var chFrom = Pos(fromLine, cutFront);\n    var chTo = Pos(toLine, oldText.length ? lst(oldText).length - cutEnd : 0);\n    if (newText.length > 1 || newText[0] || cmp(chFrom, chTo)) {\n      replaceRange(cm.doc, newText, chFrom, chTo, \"+input\");\n      return true\n    }\n  };\n\n  ContentEditableInput.prototype.ensurePolled = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.reset = function () {\n    this.forceCompositionEnd();\n  };\n  ContentEditableInput.prototype.forceCompositionEnd = function () {\n    if (!this.composing) { return }\n    clearTimeout(this.readDOMTimeout);\n    this.composing = null;\n    this.updateFromDOM();\n    this.div.blur();\n    this.div.focus();\n  };\n  ContentEditableInput.prototype.readFromDOMSoon = function () {\n      var this$1 = this;\n\n    if (this.readDOMTimeout != null) { return }\n    this.readDOMTimeout = setTimeout(function () {\n      this$1.readDOMTimeout = null;\n      if (this$1.composing) {\n        if (this$1.composing.done) { this$1.composing = null; }\n        else { return }\n      }\n      this$1.updateFromDOM();\n    }, 80);\n  };\n\n  ContentEditableInput.prototype.updateFromDOM = function () {\n      var this$1 = this;\n\n    if (this.cm.isReadOnly() || !this.pollContent())\n      { runInOp(this.cm, function () { return regChange(this$1.cm); }); }\n  };\n\n  ContentEditableInput.prototype.setUneditable = function (node) {\n    node.contentEditable = \"false\";\n  };\n\n  ContentEditableInput.prototype.onKeyPress = function (e) {\n    if (e.charCode == 0 || this.composing) { return }\n    e.preventDefault();\n    if (!this.cm.isReadOnly())\n      { operation(this.cm, applyTextInput)(this.cm, String.fromCharCode(e.charCode == null ? e.keyCode : e.charCode), 0); }\n  };\n\n  ContentEditableInput.prototype.readOnlyChanged = function (val) {\n    this.div.contentEditable = String(val != \"nocursor\");\n  };\n\n  ContentEditableInput.prototype.onContextMenu = function () {};\n  ContentEditableInput.prototype.resetPosition = function () {};\n\n  ContentEditableInput.prototype.needsContentAttribute = true;\n\n  function posToDOM(cm, pos) {\n    var view = findViewForLine(cm, pos.line);\n    if (!view || view.hidden) { return null }\n    var line = getLine(cm.doc, pos.line);\n    var info = mapFromLineView(view, line, pos.line);\n\n    var order = getOrder(line, cm.doc.direction), side = \"left\";\n    if (order) {\n      var partPos = getBidiPartAt(order, pos.ch);\n      side = partPos % 2 ? \"right\" : \"left\";\n    }\n    var result = nodeAndOffsetInLineMap(info.map, pos.ch, side);\n    result.offset = result.collapse == \"right\" ? result.end : result.start;\n    return result\n  }\n\n  function isInGutter(node) {\n    for (var scan = node; scan; scan = scan.parentNode)\n      { if (/CodeMirror-gutter-wrapper/.test(scan.className)) { return true } }\n    return false\n  }\n\n  function badPos(pos, bad) { if (bad) { pos.bad = true; } return pos }\n\n  function domTextBetween(cm, from, to, fromLine, toLine) {\n    var text = \"\", closing = false, lineSep = cm.doc.lineSeparator(), extraLinebreak = false;\n    function recognizeMarker(id) { return function (marker) { return marker.id == id; } }\n    function close() {\n      if (closing) {\n        text += lineSep;\n        if (extraLinebreak) { text += lineSep; }\n        closing = extraLinebreak = false;\n      }\n    }\n    function addText(str) {\n      if (str) {\n        close();\n        text += str;\n      }\n    }\n    function walk(node) {\n      if (node.nodeType == 1) {\n        var cmText = node.getAttribute(\"cm-text\");\n        if (cmText) {\n          addText(cmText);\n          return\n        }\n        var markerID = node.getAttribute(\"cm-marker\"), range;\n        if (markerID) {\n          var found = cm.findMarks(Pos(fromLine, 0), Pos(toLine + 1, 0), recognizeMarker(+markerID));\n          if (found.length && (range = found[0].find(0)))\n            { addText(getBetween(cm.doc, range.from, range.to).join(lineSep)); }\n          return\n        }\n        if (node.getAttribute(\"contenteditable\") == \"false\") { return }\n        var isBlock = /^(pre|div|p|li|table|br)$/i.test(node.nodeName);\n        if (!/^br$/i.test(node.nodeName) && node.textContent.length == 0) { return }\n\n        if (isBlock) { close(); }\n        for (var i = 0; i < node.childNodes.length; i++)\n          { walk(node.childNodes[i]); }\n\n        if (/^(pre|p)$/i.test(node.nodeName)) { extraLinebreak = true; }\n        if (isBlock) { closing = true; }\n      } else if (node.nodeType == 3) {\n        addText(node.nodeValue.replace(/\\u200b/g, \"\").replace(/\\u00a0/g, \" \"));\n      }\n    }\n    for (;;) {\n      walk(from);\n      if (from == to) { break }\n      from = from.nextSibling;\n      extraLinebreak = false;\n    }\n    return text\n  }\n\n  function domToPos(cm, node, offset) {\n    var lineNode;\n    if (node == cm.display.lineDiv) {\n      lineNode = cm.display.lineDiv.childNodes[offset];\n      if (!lineNode) { return badPos(cm.clipPos(Pos(cm.display.viewTo - 1)), true) }\n      node = null; offset = 0;\n    } else {\n      for (lineNode = node;; lineNode = lineNode.parentNode) {\n        if (!lineNode || lineNode == cm.display.lineDiv) { return null }\n        if (lineNode.parentNode && lineNode.parentNode == cm.display.lineDiv) { break }\n      }\n    }\n    for (var i = 0; i < cm.display.view.length; i++) {\n      var lineView = cm.display.view[i];\n      if (lineView.node == lineNode)\n        { return locateNodeInLineView(lineView, node, offset) }\n    }\n  }\n\n  function locateNodeInLineView(lineView, node, offset) {\n    var wrapper = lineView.text.firstChild, bad = false;\n    if (!node || !contains(wrapper, node)) { return badPos(Pos(lineNo(lineView.line), 0), true) }\n    if (node == wrapper) {\n      bad = true;\n      node = wrapper.childNodes[offset];\n      offset = 0;\n      if (!node) {\n        var line = lineView.rest ? lst(lineView.rest) : lineView.line;\n        return badPos(Pos(lineNo(line), line.text.length), bad)\n      }\n    }\n\n    var textNode = node.nodeType == 3 ? node : null, topNode = node;\n    if (!textNode && node.childNodes.length == 1 && node.firstChild.nodeType == 3) {\n      textNode = node.firstChild;\n      if (offset) { offset = textNode.nodeValue.length; }\n    }\n    while (topNode.parentNode != wrapper) { topNode = topNode.parentNode; }\n    var measure = lineView.measure, maps = measure.maps;\n\n    function find(textNode, topNode, offset) {\n      for (var i = -1; i < (maps ? maps.length : 0); i++) {\n        var map = i < 0 ? measure.map : maps[i];\n        for (var j = 0; j < map.length; j += 3) {\n          var curNode = map[j + 2];\n          if (curNode == textNode || curNode == topNode) {\n            var line = lineNo(i < 0 ? lineView.line : lineView.rest[i]);\n            var ch = map[j] + offset;\n            if (offset < 0 || curNode != textNode) { ch = map[j + (offset ? 1 : 0)]; }\n            return Pos(line, ch)\n          }\n        }\n      }\n    }\n    var found = find(textNode, topNode, offset);\n    if (found) { return badPos(found, bad) }\n\n    // FIXME this is all really shaky. might handle the few cases it needs to handle, but likely to cause problems\n    for (var after = topNode.nextSibling, dist = textNode ? textNode.nodeValue.length - offset : 0; after; after = after.nextSibling) {\n      found = find(after, after.firstChild, 0);\n      if (found)\n        { return badPos(Pos(found.line, found.ch - dist), bad) }\n      else\n        { dist += after.textContent.length; }\n    }\n    for (var before = topNode.previousSibling, dist$1 = offset; before; before = before.previousSibling) {\n      found = find(before, before.firstChild, -1);\n      if (found)\n        { return badPos(Pos(found.line, found.ch + dist$1), bad) }\n      else\n        { dist$1 += before.textContent.length; }\n    }\n  }\n\n  // TEXTAREA INPUT STYLE\n\n  var TextareaInput = function(cm) {\n    this.cm = cm;\n    // See input.poll and input.reset\n    this.prevInput = \"\";\n\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling intensively.\n    this.pollingFast = false;\n    // Self-resetting timeout for the poller\n    this.polling = new Delayed();\n    // Used to work around IE issue with selection being forgotten when focus moves away from textarea\n    this.hasSelection = false;\n    this.composing = null;\n  };\n\n  TextareaInput.prototype.init = function (display) {\n      var this$1 = this;\n\n    var input = this, cm = this.cm;\n    this.createField(display);\n    var te = this.textarea;\n\n    display.wrapper.insertBefore(this.wrapper, display.wrapper.firstChild);\n\n    // Needed to hide big blue blinking cursor on Mobile Safari (doesn't seem to work in iOS 8 anymore)\n    if (ios) { te.style.width = \"0px\"; }\n\n    on(te, \"input\", function () {\n      if (ie && ie_version >= 9 && this$1.hasSelection) { this$1.hasSelection = null; }\n      input.poll();\n    });\n\n    on(te, \"paste\", function (e) {\n      if (signalDOMEvent(cm, e) || handlePaste(e, cm)) { return }\n\n      cm.state.pasteIncoming = +new Date;\n      input.fastPoll();\n    });\n\n    function prepareCopyCut(e) {\n      if (signalDOMEvent(cm, e)) { return }\n      if (cm.somethingSelected()) {\n        setLastCopied({lineWise: false, text: cm.getSelections()});\n      } else if (!cm.options.lineWiseCopyCut) {\n        return\n      } else {\n        var ranges = copyableRanges(cm);\n        setLastCopied({lineWise: true, text: ranges.text});\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges.ranges, null, sel_dontScroll);\n        } else {\n          input.prevInput = \"\";\n          te.value = ranges.text.join(\"\\n\");\n          selectInput(te);\n        }\n      }\n      if (e.type == \"cut\") { cm.state.cutIncoming = +new Date; }\n    }\n    on(te, \"cut\", prepareCopyCut);\n    on(te, \"copy\", prepareCopyCut);\n\n    on(display.scroller, \"paste\", function (e) {\n      if (eventInWidget(display, e) || signalDOMEvent(cm, e)) { return }\n      if (!te.dispatchEvent) {\n        cm.state.pasteIncoming = +new Date;\n        input.focus();\n        return\n      }\n\n      // Pass the `paste` event to the textarea so it's handled by its event listener.\n      var event = new Event(\"paste\");\n      event.clipboardData = e.clipboardData;\n      te.dispatchEvent(event);\n    });\n\n    // Prevent normal selection in the editor (we handle our own)\n    on(display.lineSpace, \"selectstart\", function (e) {\n      if (!eventInWidget(display, e)) { e_preventDefault(e); }\n    });\n\n    on(te, \"compositionstart\", function () {\n      var start = cm.getCursor(\"from\");\n      if (input.composing) { input.composing.range.clear(); }\n      input.composing = {\n        start: start,\n        range: cm.markText(start, cm.getCursor(\"to\"), {className: \"CodeMirror-composing\"})\n      };\n    });\n    on(te, \"compositionend\", function () {\n      if (input.composing) {\n        input.poll();\n        input.composing.range.clear();\n        input.composing = null;\n      }\n    });\n  };\n\n  TextareaInput.prototype.createField = function (_display) {\n    // Wraps and hides input textarea\n    this.wrapper = hiddenTextarea();\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    this.textarea = this.wrapper.firstChild;\n  };\n\n  TextareaInput.prototype.screenReaderLabelChanged = function (label) {\n    // Label for screenreaders, accessibility\n    if(label) {\n      this.textarea.setAttribute('aria-label', label);\n    } else {\n      this.textarea.removeAttribute('aria-label');\n    }\n  };\n\n  TextareaInput.prototype.prepareSelection = function () {\n    // Redraw the selection and/or cursor\n    var cm = this.cm, display = cm.display, doc = cm.doc;\n    var result = prepareSelection(cm);\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result\n  };\n\n  TextareaInput.prototype.showSelection = function (drawn) {\n    var cm = this.cm, display = cm.display;\n    removeChildrenAndAdd(display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      this.wrapper.style.top = drawn.teTop + \"px\";\n      this.wrapper.style.left = drawn.teLeft + \"px\";\n    }\n  };\n\n  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  TextareaInput.prototype.reset = function (typing) {\n    if (this.contextMenuPending || this.composing) { return }\n    var cm = this.cm;\n    if (cm.somethingSelected()) {\n      this.prevInput = \"\";\n      var content = cm.getSelection();\n      this.textarea.value = content;\n      if (cm.state.focused) { selectInput(this.textarea); }\n      if (ie && ie_version >= 9) { this.hasSelection = content; }\n    } else if (!typing) {\n      this.prevInput = this.textarea.value = \"\";\n      if (ie && ie_version >= 9) { this.hasSelection = null; }\n    }\n  };\n\n  TextareaInput.prototype.getField = function () { return this.textarea };\n\n  TextareaInput.prototype.supportsTouch = function () { return false };\n\n  TextareaInput.prototype.focus = function () {\n    if (this.cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != this.textarea)) {\n      try { this.textarea.focus(); }\n      catch (e) {} // IE8 will throw if the textarea is display: none or not in DOM\n    }\n  };\n\n  TextareaInput.prototype.blur = function () { this.textarea.blur(); };\n\n  TextareaInput.prototype.resetPosition = function () {\n    this.wrapper.style.top = this.wrapper.style.left = 0;\n  };\n\n  TextareaInput.prototype.receivedFocus = function () { this.slowPoll(); };\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\n  TextareaInput.prototype.slowPoll = function () {\n      var this$1 = this;\n\n    if (this.pollingFast) { return }\n    this.polling.set(this.cm.options.pollInterval, function () {\n      this$1.poll();\n      if (this$1.cm.state.focused) { this$1.slowPoll(); }\n    });\n  };\n\n  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\n  TextareaInput.prototype.fastPoll = function () {\n    var missed = false, input = this;\n    input.pollingFast = true;\n    function p() {\n      var changed = input.poll();\n      if (!changed && !missed) {missed = true; input.polling.set(60, p);}\n      else {input.pollingFast = false; input.slowPoll();}\n    }\n    input.polling.set(20, p);\n  };\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  TextareaInput.prototype.poll = function () {\n      var this$1 = this;\n\n    var cm = this.cm, input = this.textarea, prevInput = this.prevInput;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (this.contextMenuPending || !cm.state.focused ||\n        (hasSelection(input) && !prevInput && !this.composing) ||\n        cm.isReadOnly() || cm.options.disableInput || cm.state.keySeq)\n      { return false }\n\n    var text = input.value;\n    // If nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) { return false }\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && this.hasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      cm.display.input.reset();\n      return false\n    }\n\n    if (cm.doc.sel == cm.display.selForContextMenu) {\n      var first = text.charCodeAt(0);\n      if (first == 0x200b && !prevInput) { prevInput = \"\\u200b\"; }\n      if (first == 0x21da) { this.reset(); return this.cm.execCommand(\"undo\") }\n    }\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) { ++same; }\n\n    runInOp(cm, function () {\n      applyTextInput(cm, text.slice(same), prevInput.length - same,\n                     null, this$1.composing ? \"*compose\" : null);\n\n      // Don't leave long text in the textarea, since it makes further polling slow\n      if (text.length > 1000 || text.indexOf(\"\\n\") > -1) { input.value = this$1.prevInput = \"\"; }\n      else { this$1.prevInput = text; }\n\n      if (this$1.composing) {\n        this$1.composing.range.clear();\n        this$1.composing.range = cm.markText(this$1.composing.start, cm.getCursor(\"to\"),\n                                           {className: \"CodeMirror-composing\"});\n      }\n    });\n    return true\n  };\n\n  TextareaInput.prototype.ensurePolled = function () {\n    if (this.pollingFast && this.poll()) { this.pollingFast = false; }\n  };\n\n  TextareaInput.prototype.onKeyPress = function () {\n    if (ie && ie_version >= 9) { this.hasSelection = null; }\n    this.fastPoll();\n  };\n\n  TextareaInput.prototype.onContextMenu = function (e) {\n    var input = this, cm = input.cm, display = cm.display, te = input.textarea;\n    if (input.contextMenuPending) { input.contextMenuPending(); }\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) { return } // Opera is difficult.\n\n    // Reset the current text selection only if the click is done outside of the selection\n    // and 'resetSelectionOnContextMenu' option is true.\n    var reset = cm.options.resetSelectionOnContextMenu;\n    if (reset && cm.doc.sel.contains(pos) == -1)\n      { operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll); }\n\n    var oldCSS = te.style.cssText, oldWrapperCSS = input.wrapper.style.cssText;\n    var wrapperBox = input.wrapper.offsetParent.getBoundingClientRect();\n    input.wrapper.style.cssText = \"position: static\";\n    te.style.cssText = \"position: absolute; width: 30px; height: 30px;\\n      top: \" + (e.clientY - wrapperBox.top - 5) + \"px; left: \" + (e.clientX - wrapperBox.left - 5) + \"px;\\n      z-index: 1000; background: \" + (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") + \";\\n      outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    var oldScrollY;\n    if (webkit) { oldScrollY = window.scrollY; } // Work around Chrome issue (#2712)\n    display.input.focus();\n    if (webkit) { window.scrollTo(null, oldScrollY); }\n    display.input.reset();\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) { te.value = input.prevInput = \" \"; }\n    input.contextMenuPending = rehide;\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (te.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = \"\\u200b\" + (selected ? te.value : \"\");\n        te.value = \"\\u21da\"; // Used to catch context-menu undo\n        te.value = extval;\n        input.prevInput = selected ? \"\" : \"\\u200b\";\n        te.selectionStart = 1; te.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      if (input.contextMenuPending != rehide) { return }\n      input.contextMenuPending = false;\n      input.wrapper.style.cssText = oldWrapperCSS;\n      te.style.cssText = oldCSS;\n      if (ie && ie_version < 9) { display.scrollbars.setScrollTop(display.scroller.scrollTop = scrollPos); }\n\n      // Try to detect the user choosing select-all\n      if (te.selectionStart != null) {\n        if (!ie || (ie && ie_version < 9)) { prepareSelectAllHack(); }\n        var i = 0, poll = function () {\n          if (display.selForContextMenu == cm.doc.sel && te.selectionStart == 0 &&\n              te.selectionEnd > 0 && input.prevInput == \"\\u200b\") {\n            operation(cm, selectAll)(cm);\n          } else if (i++ < 10) {\n            display.detectingSelectAll = setTimeout(poll, 500);\n          } else {\n            display.selForContextMenu = null;\n            display.input.reset();\n          }\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) { prepareSelectAllHack(); }\n    if (captureRightClick) {\n      e_stop(e);\n      var mouseup = function () {\n        off(window, \"mouseup\", mouseup);\n        setTimeout(rehide, 20);\n      };\n      on(window, \"mouseup\", mouseup);\n    } else {\n      setTimeout(rehide, 50);\n    }\n  };\n\n  TextareaInput.prototype.readOnlyChanged = function (val) {\n    if (!val) { this.reset(); }\n    this.textarea.disabled = val == \"nocursor\";\n    this.textarea.readOnly = !!val;\n  };\n\n  TextareaInput.prototype.setUneditable = function () {};\n\n  TextareaInput.prototype.needsContentAttribute = false;\n\n  function fromTextArea(textarea, options) {\n    options = options ? copyObj(options) : {};\n    options.value = textarea.value;\n    if (!options.tabindex && textarea.tabIndex)\n      { options.tabindex = textarea.tabIndex; }\n    if (!options.placeholder && textarea.placeholder)\n      { options.placeholder = textarea.placeholder; }\n    // Set autofocus to true if this textarea is focused, or if it has\n    // autofocus and no other element is focused.\n    if (options.autofocus == null) {\n      var hasFocus = activeElt();\n      options.autofocus = hasFocus == textarea ||\n        textarea.getAttribute(\"autofocus\") != null && hasFocus == document.body;\n    }\n\n    function save() {textarea.value = cm.getValue();}\n\n    var realSubmit;\n    if (textarea.form) {\n      on(textarea.form, \"submit\", save);\n      // Deplorable hack to make the submit method do the right thing.\n      if (!options.leaveSubmitMethodAlone) {\n        var form = textarea.form;\n        realSubmit = form.submit;\n        try {\n          var wrappedSubmit = form.submit = function () {\n            save();\n            form.submit = realSubmit;\n            form.submit();\n            form.submit = wrappedSubmit;\n          };\n        } catch(e) {}\n      }\n    }\n\n    options.finishInit = function (cm) {\n      cm.save = save;\n      cm.getTextArea = function () { return textarea; };\n      cm.toTextArea = function () {\n        cm.toTextArea = isNaN; // Prevent this from being ran twice\n        save();\n        textarea.parentNode.removeChild(cm.getWrapperElement());\n        textarea.style.display = \"\";\n        if (textarea.form) {\n          off(textarea.form, \"submit\", save);\n          if (!options.leaveSubmitMethodAlone && typeof textarea.form.submit == \"function\")\n            { textarea.form.submit = realSubmit; }\n        }\n      };\n    };\n\n    textarea.style.display = \"none\";\n    var cm = CodeMirror(function (node) { return textarea.parentNode.insertBefore(node, textarea.nextSibling); },\n      options);\n    return cm\n  }\n\n  function addLegacyProps(CodeMirror) {\n    CodeMirror.off = off;\n    CodeMirror.on = on;\n    CodeMirror.wheelEventPixels = wheelEventPixels;\n    CodeMirror.Doc = Doc;\n    CodeMirror.splitLines = splitLinesAuto;\n    CodeMirror.countColumn = countColumn;\n    CodeMirror.findColumn = findColumn;\n    CodeMirror.isWordChar = isWordCharBasic;\n    CodeMirror.Pass = Pass;\n    CodeMirror.signal = signal;\n    CodeMirror.Line = Line;\n    CodeMirror.changeEnd = changeEnd;\n    CodeMirror.scrollbarModel = scrollbarModel;\n    CodeMirror.Pos = Pos;\n    CodeMirror.cmpPos = cmp;\n    CodeMirror.modes = modes;\n    CodeMirror.mimeModes = mimeModes;\n    CodeMirror.resolveMode = resolveMode;\n    CodeMirror.getMode = getMode;\n    CodeMirror.modeExtensions = modeExtensions;\n    CodeMirror.extendMode = extendMode;\n    CodeMirror.copyState = copyState;\n    CodeMirror.startState = startState;\n    CodeMirror.innerMode = innerMode;\n    CodeMirror.commands = commands;\n    CodeMirror.keyMap = keyMap;\n    CodeMirror.keyName = keyName;\n    CodeMirror.isModifierKey = isModifierKey;\n    CodeMirror.lookupKey = lookupKey;\n    CodeMirror.normalizeKeyMap = normalizeKeyMap;\n    CodeMirror.StringStream = StringStream;\n    CodeMirror.SharedTextMarker = SharedTextMarker;\n    CodeMirror.TextMarker = TextMarker;\n    CodeMirror.LineWidget = LineWidget;\n    CodeMirror.e_preventDefault = e_preventDefault;\n    CodeMirror.e_stopPropagation = e_stopPropagation;\n    CodeMirror.e_stop = e_stop;\n    CodeMirror.addClass = addClass;\n    CodeMirror.contains = contains;\n    CodeMirror.rmClass = rmClass;\n    CodeMirror.keyNames = keyNames;\n  }\n\n  // EDITOR CONSTRUCTOR\n\n  defineOptions(CodeMirror);\n\n  addEditorMethods(CodeMirror);\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\n  var dontDelegate = \"iter insert remove copy getEditor constructor\".split(\" \");\n  for (var prop in Doc.prototype) { if (Doc.prototype.hasOwnProperty(prop) && indexOf(dontDelegate, prop) < 0)\n    { CodeMirror.prototype[prop] = (function(method) {\n      return function() {return method.apply(this.doc, arguments)}\n    })(Doc.prototype[prop]); } }\n\n  eventMixin(Doc);\n  CodeMirror.inputStyles = {\"textarea\": TextareaInput, \"contenteditable\": ContentEditableInput};\n\n  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\n  CodeMirror.defineMode = function(name/*, mode, …*/) {\n    if (!CodeMirror.defaults.mode && name != \"null\") { CodeMirror.defaults.mode = name; }\n    defineMode.apply(this, arguments);\n  };\n\n  CodeMirror.defineMIME = defineMIME;\n\n  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function () { return ({token: function (stream) { return stream.skipToEnd(); }}); });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // EXTENSIONS\n\n  CodeMirror.defineExtension = function (name, func) {\n    CodeMirror.prototype[name] = func;\n  };\n  CodeMirror.defineDocExtension = function (name, func) {\n    Doc.prototype[name] = func;\n  };\n\n  CodeMirror.fromTextArea = fromTextArea;\n\n  addLegacyProps(CodeMirror);\n\n  CodeMirror.version = \"5.64.0\";\n\n  return CodeMirror;\n\n})));\n"
  },
  {
    "path": "BlackStone/assets/vendors/codemirror/javascript.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode(\"javascript\", function(config, parserConfig) {\n  var indentUnit = config.indentUnit;\n  var statementIndent = parserConfig.statementIndent;\n  var jsonldMode = parserConfig.jsonld;\n  var jsonMode = parserConfig.json || jsonldMode;\n  var trackScope = parserConfig.trackScope !== false\n  var isTS = parserConfig.typescript;\n  var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\n\n  // Tokenizer\n\n  var keywords = function(){\n    function kw(type) {return {type: type, style: \"keyword\"};}\n    var A = kw(\"keyword a\"), B = kw(\"keyword b\"), C = kw(\"keyword c\"), D = kw(\"keyword d\");\n    var operator = kw(\"operator\"), atom = {type: \"atom\", style: \"atom\"};\n\n    return {\n      \"if\": kw(\"if\"), \"while\": A, \"with\": A, \"else\": B, \"do\": B, \"try\": B, \"finally\": B,\n      \"return\": D, \"break\": D, \"continue\": D, \"new\": kw(\"new\"), \"delete\": C, \"void\": C, \"throw\": C,\n      \"debugger\": kw(\"debugger\"), \"var\": kw(\"var\"), \"const\": kw(\"var\"), \"let\": kw(\"var\"),\n      \"function\": kw(\"function\"), \"catch\": kw(\"catch\"),\n      \"for\": kw(\"for\"), \"switch\": kw(\"switch\"), \"case\": kw(\"case\"), \"default\": kw(\"default\"),\n      \"in\": operator, \"typeof\": operator, \"instanceof\": operator,\n      \"true\": atom, \"false\": atom, \"null\": atom, \"undefined\": atom, \"NaN\": atom, \"Infinity\": atom,\n      \"this\": kw(\"this\"), \"class\": kw(\"class\"), \"super\": kw(\"atom\"),\n      \"yield\": C, \"export\": kw(\"export\"), \"import\": kw(\"import\"), \"extends\": C,\n      \"await\": C\n    };\n  }();\n\n  var isOperatorChar = /[+\\-*&%=<>!?|~^@]/;\n  var isJsonldKeyword = /^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)\"/;\n\n  function readRegexp(stream) {\n    var escaped = false, next, inSet = false;\n    while ((next = stream.next()) != null) {\n      if (!escaped) {\n        if (next == \"/\" && !inSet) return;\n        if (next == \"[\") inSet = true;\n        else if (inSet && next == \"]\") inSet = false;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n  }\n\n  // Used as scratch variables to communicate multiple values without\n  // consing up tons of objects.\n  var type, content;\n  function ret(tp, style, cont) {\n    type = tp; content = cont;\n    return style;\n  }\n  function tokenBase(stream, state) {\n    var ch = stream.next();\n    if (ch == '\"' || ch == \"'\") {\n      state.tokenize = tokenString(ch);\n      return state.tokenize(stream, state);\n    } else if (ch == \".\" && stream.match(/^\\d[\\d_]*(?:[eE][+\\-]?[\\d_]+)?/)) {\n      return ret(\"number\", \"number\");\n    } else if (ch == \".\" && stream.match(\"..\")) {\n      return ret(\"spread\", \"meta\");\n    } else if (/[\\[\\]{}\\(\\),;\\:\\.]/.test(ch)) {\n      return ret(ch);\n    } else if (ch == \"=\" && stream.eat(\">\")) {\n      return ret(\"=>\", \"operator\");\n    } else if (ch == \"0\" && stream.match(/^(?:x[\\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/)) {\n      return ret(\"number\", \"number\");\n    } else if (/\\d/.test(ch)) {\n      stream.match(/^[\\d_]*(?:n|(?:\\.[\\d_]*)?(?:[eE][+\\-]?[\\d_]+)?)?/);\n      return ret(\"number\", \"number\");\n    } else if (ch == \"/\") {\n      if (stream.eat(\"*\")) {\n        state.tokenize = tokenComment;\n        return tokenComment(stream, state);\n      } else if (stream.eat(\"/\")) {\n        stream.skipToEnd();\n        return ret(\"comment\", \"comment\");\n      } else if (expressionAllowed(stream, state, 1)) {\n        readRegexp(stream);\n        stream.match(/^\\b(([gimyus])(?![gimyus]*\\2))+\\b/);\n        return ret(\"regexp\", \"string-2\");\n      } else {\n        stream.eat(\"=\");\n        return ret(\"operator\", \"operator\", stream.current());\n      }\n    } else if (ch == \"`\") {\n      state.tokenize = tokenQuasi;\n      return tokenQuasi(stream, state);\n    } else if (ch == \"#\" && stream.peek() == \"!\") {\n      stream.skipToEnd();\n      return ret(\"meta\", \"meta\");\n    } else if (ch == \"#\" && stream.eatWhile(wordRE)) {\n      return ret(\"variable\", \"property\")\n    } else if (ch == \"<\" && stream.match(\"!--\") ||\n               (ch == \"-\" && stream.match(\"->\") && !/\\S/.test(stream.string.slice(0, stream.start)))) {\n      stream.skipToEnd()\n      return ret(\"comment\", \"comment\")\n    } else if (isOperatorChar.test(ch)) {\n      if (ch != \">\" || !state.lexical || state.lexical.type != \">\") {\n        if (stream.eat(\"=\")) {\n          if (ch == \"!\" || ch == \"=\") stream.eat(\"=\")\n        } else if (/[<>*+\\-|&?]/.test(ch)) {\n          stream.eat(ch)\n          if (ch == \">\") stream.eat(ch)\n        }\n      }\n      if (ch == \"?\" && stream.eat(\".\")) return ret(\".\")\n      return ret(\"operator\", \"operator\", stream.current());\n    } else if (wordRE.test(ch)) {\n      stream.eatWhile(wordRE);\n      var word = stream.current()\n      if (state.lastType != \".\") {\n        if (keywords.propertyIsEnumerable(word)) {\n          var kw = keywords[word]\n          return ret(kw.type, kw.style, word)\n        }\n        if (word == \"async\" && stream.match(/^(\\s|\\/\\*([^*]|\\*(?!\\/))*?\\*\\/)*[\\[\\(\\w]/, false))\n          return ret(\"async\", \"keyword\", word)\n      }\n      return ret(\"variable\", \"variable\", word)\n    }\n  }\n\n  function tokenString(quote) {\n    return function(stream, state) {\n      var escaped = false, next;\n      if (jsonldMode && stream.peek() == \"@\" && stream.match(isJsonldKeyword)){\n        state.tokenize = tokenBase;\n        return ret(\"jsonld-keyword\", \"meta\");\n      }\n      while ((next = stream.next()) != null) {\n        if (next == quote && !escaped) break;\n        escaped = !escaped && next == \"\\\\\";\n      }\n      if (!escaped) state.tokenize = tokenBase;\n      return ret(\"string\", \"string\");\n    };\n  }\n\n  function tokenComment(stream, state) {\n    var maybeEnd = false, ch;\n    while (ch = stream.next()) {\n      if (ch == \"/\" && maybeEnd) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      maybeEnd = (ch == \"*\");\n    }\n    return ret(\"comment\", \"comment\");\n  }\n\n  function tokenQuasi(stream, state) {\n    var escaped = false, next;\n    while ((next = stream.next()) != null) {\n      if (!escaped && (next == \"`\" || next == \"$\" && stream.eat(\"{\"))) {\n        state.tokenize = tokenBase;\n        break;\n      }\n      escaped = !escaped && next == \"\\\\\";\n    }\n    return ret(\"quasi\", \"string-2\", stream.current());\n  }\n\n  var brackets = \"([{}])\";\n  // This is a crude lookahead trick to try and notice that we're\n  // parsing the argument patterns for a fat-arrow function before we\n  // actually hit the arrow token. It only works if the arrow is on\n  // the same line as the arguments and there's no strange noise\n  // (comments) in between. Fallback is to only notice when we hit the\n  // arrow, and not declare the arguments as locals for the arrow\n  // body.\n  function findFatArrow(stream, state) {\n    if (state.fatArrowAt) state.fatArrowAt = null;\n    var arrow = stream.string.indexOf(\"=>\", stream.start);\n    if (arrow < 0) return;\n\n    if (isTS) { // Try to skip TypeScript return type declarations after the arguments\n      var m = /:\\s*(?:\\w+(?:<[^>]*>|\\[\\])?|\\{[^}]*\\})\\s*$/.exec(stream.string.slice(stream.start, arrow))\n      if (m) arrow = m.index\n    }\n\n    var depth = 0, sawSomething = false;\n    for (var pos = arrow - 1; pos >= 0; --pos) {\n      var ch = stream.string.charAt(pos);\n      var bracket = brackets.indexOf(ch);\n      if (bracket >= 0 && bracket < 3) {\n        if (!depth) { ++pos; break; }\n        if (--depth == 0) { if (ch == \"(\") sawSomething = true; break; }\n      } else if (bracket >= 3 && bracket < 6) {\n        ++depth;\n      } else if (wordRE.test(ch)) {\n        sawSomething = true;\n      } else if (/[\"'\\/`]/.test(ch)) {\n        for (;; --pos) {\n          if (pos == 0) return\n          var next = stream.string.charAt(pos - 1)\n          if (next == ch && stream.string.charAt(pos - 2) != \"\\\\\") { pos--; break }\n        }\n      } else if (sawSomething && !depth) {\n        ++pos;\n        break;\n      }\n    }\n    if (sawSomething && !depth) state.fatArrowAt = pos;\n  }\n\n  // Parser\n\n  var atomicTypes = {\"atom\": true, \"number\": true, \"variable\": true, \"string\": true,\n                     \"regexp\": true, \"this\": true, \"import\": true, \"jsonld-keyword\": true};\n\n  function JSLexical(indented, column, type, align, prev, info) {\n    this.indented = indented;\n    this.column = column;\n    this.type = type;\n    this.prev = prev;\n    this.info = info;\n    if (align != null) this.align = align;\n  }\n\n  function inScope(state, varname) {\n    if (!trackScope) return false\n    for (var v = state.localVars; v; v = v.next)\n      if (v.name == varname) return true;\n    for (var cx = state.context; cx; cx = cx.prev) {\n      for (var v = cx.vars; v; v = v.next)\n        if (v.name == varname) return true;\n    }\n  }\n\n  function parseJS(state, style, type, content, stream) {\n    var cc = state.cc;\n    // Communicate our context to the combinators.\n    // (Less wasteful than consing up a hundred closures on every call.)\n    cx.state = state; cx.stream = stream; cx.marked = null, cx.cc = cc; cx.style = style;\n\n    if (!state.lexical.hasOwnProperty(\"align\"))\n      state.lexical.align = true;\n\n    while(true) {\n      var combinator = cc.length ? cc.pop() : jsonMode ? expression : statement;\n      if (combinator(type, content)) {\n        while(cc.length && cc[cc.length - 1].lex)\n          cc.pop()();\n        if (cx.marked) return cx.marked;\n        if (type == \"variable\" && inScope(state, content)) return \"variable-2\";\n        return style;\n      }\n    }\n  }\n\n  // Combinator utils\n\n  var cx = {state: null, column: null, marked: null, cc: null};\n  function pass() {\n    for (var i = arguments.length - 1; i >= 0; i--) cx.cc.push(arguments[i]);\n  }\n  function cont() {\n    pass.apply(null, arguments);\n    return true;\n  }\n  function inList(name, list) {\n    for (var v = list; v; v = v.next) if (v.name == name) return true\n    return false;\n  }\n  function register(varname) {\n    var state = cx.state;\n    cx.marked = \"def\";\n    if (!trackScope) return\n    if (state.context) {\n      if (state.lexical.info == \"var\" && state.context && state.context.block) {\n        // FIXME function decls are also not block scoped\n        var newContext = registerVarScoped(varname, state.context)\n        if (newContext != null) {\n          state.context = newContext\n          return\n        }\n      } else if (!inList(varname, state.localVars)) {\n        state.localVars = new Var(varname, state.localVars)\n        return\n      }\n    }\n    // Fall through means this is global\n    if (parserConfig.globalVars && !inList(varname, state.globalVars))\n      state.globalVars = new Var(varname, state.globalVars)\n  }\n  function registerVarScoped(varname, context) {\n    if (!context) {\n      return null\n    } else if (context.block) {\n      var inner = registerVarScoped(varname, context.prev)\n      if (!inner) return null\n      if (inner == context.prev) return context\n      return new Context(inner, context.vars, true)\n    } else if (inList(varname, context.vars)) {\n      return context\n    } else {\n      return new Context(context.prev, new Var(varname, context.vars), false)\n    }\n  }\n\n  function isModifier(name) {\n    return name == \"public\" || name == \"private\" || name == \"protected\" || name == \"abstract\" || name == \"readonly\"\n  }\n\n  // Combinators\n\n  function Context(prev, vars, block) { this.prev = prev; this.vars = vars; this.block = block }\n  function Var(name, next) { this.name = name; this.next = next }\n\n  var defaultVars = new Var(\"this\", new Var(\"arguments\", null))\n  function pushcontext() {\n    cx.state.context = new Context(cx.state.context, cx.state.localVars, false)\n    cx.state.localVars = defaultVars\n  }\n  function pushblockcontext() {\n    cx.state.context = new Context(cx.state.context, cx.state.localVars, true)\n    cx.state.localVars = null\n  }\n  function popcontext() {\n    cx.state.localVars = cx.state.context.vars\n    cx.state.context = cx.state.context.prev\n  }\n  popcontext.lex = true\n  function pushlex(type, info) {\n    var result = function() {\n      var state = cx.state, indent = state.indented;\n      if (state.lexical.type == \"stat\") indent = state.lexical.indented;\n      else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n        indent = outer.indented;\n      state.lexical = new JSLexical(indent, cx.stream.column(), type, null, state.lexical, info);\n    };\n    result.lex = true;\n    return result;\n  }\n  function poplex() {\n    var state = cx.state;\n    if (state.lexical.prev) {\n      if (state.lexical.type == \")\")\n        state.indented = state.lexical.indented;\n      state.lexical = state.lexical.prev;\n    }\n  }\n  poplex.lex = true;\n\n  function expect(wanted) {\n    function exp(type) {\n      if (type == wanted) return cont();\n      else if (wanted == \";\" || type == \"}\" || type == \")\" || type == \"]\") return pass();\n      else return cont(exp);\n    };\n    return exp;\n  }\n\n  function statement(type, value) {\n    if (type == \"var\") return cont(pushlex(\"vardef\", value), vardef, expect(\";\"), poplex);\n    if (type == \"keyword a\") return cont(pushlex(\"form\"), parenExpr, statement, poplex);\n    if (type == \"keyword b\") return cont(pushlex(\"form\"), statement, poplex);\n    if (type == \"keyword d\") return cx.stream.match(/^\\s*$/, false) ? cont() : cont(pushlex(\"stat\"), maybeexpression, expect(\";\"), poplex);\n    if (type == \"debugger\") return cont(expect(\";\"));\n    if (type == \"{\") return cont(pushlex(\"}\"), pushblockcontext, block, poplex, popcontext);\n    if (type == \";\") return cont();\n    if (type == \"if\") {\n      if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n        cx.state.cc.pop()();\n      return cont(pushlex(\"form\"), parenExpr, statement, poplex, maybeelse);\n    }\n    if (type == \"function\") return cont(functiondef);\n    if (type == \"for\") return cont(pushlex(\"form\"), pushblockcontext, forspec, statement, popcontext, poplex);\n    if (type == \"class\" || (isTS && value == \"interface\")) {\n      cx.marked = \"keyword\"\n      return cont(pushlex(\"form\", type == \"class\" ? type : value), className, poplex)\n    }\n    if (type == \"variable\") {\n      if (isTS && value == \"declare\") {\n        cx.marked = \"keyword\"\n        return cont(statement)\n      } else if (isTS && (value == \"module\" || value == \"enum\" || value == \"type\") && cx.stream.match(/^\\s*\\w/, false)) {\n        cx.marked = \"keyword\"\n        if (value == \"enum\") return cont(enumdef);\n        else if (value == \"type\") return cont(typename, expect(\"operator\"), typeexpr, expect(\";\"));\n        else return cont(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), block, poplex, poplex)\n      } else if (isTS && value == \"namespace\") {\n        cx.marked = \"keyword\"\n        return cont(pushlex(\"form\"), expression, statement, poplex)\n      } else if (isTS && value == \"abstract\") {\n        cx.marked = \"keyword\"\n        return cont(statement)\n      } else {\n        return cont(pushlex(\"stat\"), maybelabel);\n      }\n    }\n    if (type == \"switch\") return cont(pushlex(\"form\"), parenExpr, expect(\"{\"), pushlex(\"}\", \"switch\"), pushblockcontext,\n                                      block, poplex, poplex, popcontext);\n    if (type == \"case\") return cont(expression, expect(\":\"));\n    if (type == \"default\") return cont(expect(\":\"));\n    if (type == \"catch\") return cont(pushlex(\"form\"), pushcontext, maybeCatchBinding, statement, poplex, popcontext);\n    if (type == \"export\") return cont(pushlex(\"stat\"), afterExport, poplex);\n    if (type == \"import\") return cont(pushlex(\"stat\"), afterImport, poplex);\n    if (type == \"async\") return cont(statement)\n    if (value == \"@\") return cont(expression, statement)\n    return pass(pushlex(\"stat\"), expression, expect(\";\"), poplex);\n  }\n  function maybeCatchBinding(type) {\n    if (type == \"(\") return cont(funarg, expect(\")\"))\n  }\n  function expression(type, value) {\n    return expressionInner(type, value, false);\n  }\n  function expressionNoComma(type, value) {\n    return expressionInner(type, value, true);\n  }\n  function parenExpr(type) {\n    if (type != \"(\") return pass()\n    return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex)\n  }\n  function expressionInner(type, value, noComma) {\n    if (cx.state.fatArrowAt == cx.stream.start) {\n      var body = noComma ? arrowBodyNoComma : arrowBody;\n      if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, expect(\"=>\"), body, popcontext);\n      else if (type == \"variable\") return pass(pushcontext, pattern, expect(\"=>\"), body, popcontext);\n    }\n\n    var maybeop = noComma ? maybeoperatorNoComma : maybeoperatorComma;\n    if (atomicTypes.hasOwnProperty(type)) return cont(maybeop);\n    if (type == \"function\") return cont(functiondef, maybeop);\n    if (type == \"class\" || (isTS && value == \"interface\")) { cx.marked = \"keyword\"; return cont(pushlex(\"form\"), classExpression, poplex); }\n    if (type == \"keyword c\" || type == \"async\") return cont(noComma ? expressionNoComma : expression);\n    if (type == \"(\") return cont(pushlex(\")\"), maybeexpression, expect(\")\"), poplex, maybeop);\n    if (type == \"operator\" || type == \"spread\") return cont(noComma ? expressionNoComma : expression);\n    if (type == \"[\") return cont(pushlex(\"]\"), arrayLiteral, poplex, maybeop);\n    if (type == \"{\") return contCommasep(objprop, \"}\", null, maybeop);\n    if (type == \"quasi\") return pass(quasi, maybeop);\n    if (type == \"new\") return cont(maybeTarget(noComma));\n    return cont();\n  }\n  function maybeexpression(type) {\n    if (type.match(/[;\\}\\)\\],]/)) return pass();\n    return pass(expression);\n  }\n\n  function maybeoperatorComma(type, value) {\n    if (type == \",\") return cont(maybeexpression);\n    return maybeoperatorNoComma(type, value, false);\n  }\n  function maybeoperatorNoComma(type, value, noComma) {\n    var me = noComma == false ? maybeoperatorComma : maybeoperatorNoComma;\n    var expr = noComma == false ? expression : expressionNoComma;\n    if (type == \"=>\") return cont(pushcontext, noComma ? arrowBodyNoComma : arrowBody, popcontext);\n    if (type == \"operator\") {\n      if (/\\+\\+|--/.test(value) || isTS && value == \"!\") return cont(me);\n      if (isTS && value == \"<\" && cx.stream.match(/^([^<>]|<[^<>]*>)*>\\s*\\(/, false))\n        return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, me);\n      if (value == \"?\") return cont(expression, expect(\":\"), expr);\n      return cont(expr);\n    }\n    if (type == \"quasi\") { return pass(quasi, me); }\n    if (type == \";\") return;\n    if (type == \"(\") return contCommasep(expressionNoComma, \")\", \"call\", me);\n    if (type == \".\") return cont(property, me);\n    if (type == \"[\") return cont(pushlex(\"]\"), maybeexpression, expect(\"]\"), poplex, me);\n    if (isTS && value == \"as\") { cx.marked = \"keyword\"; return cont(typeexpr, me) }\n    if (type == \"regexp\") {\n      cx.state.lastType = cx.marked = \"operator\"\n      cx.stream.backUp(cx.stream.pos - cx.stream.start - 1)\n      return cont(expr)\n    }\n  }\n  function quasi(type, value) {\n    if (type != \"quasi\") return pass();\n    if (value.slice(value.length - 2) != \"${\") return cont(quasi);\n    return cont(maybeexpression, continueQuasi);\n  }\n  function continueQuasi(type) {\n    if (type == \"}\") {\n      cx.marked = \"string-2\";\n      cx.state.tokenize = tokenQuasi;\n      return cont(quasi);\n    }\n  }\n  function arrowBody(type) {\n    findFatArrow(cx.stream, cx.state);\n    return pass(type == \"{\" ? statement : expression);\n  }\n  function arrowBodyNoComma(type) {\n    findFatArrow(cx.stream, cx.state);\n    return pass(type == \"{\" ? statement : expressionNoComma);\n  }\n  function maybeTarget(noComma) {\n    return function(type) {\n      if (type == \".\") return cont(noComma ? targetNoComma : target);\n      else if (type == \"variable\" && isTS) return cont(maybeTypeArgs, noComma ? maybeoperatorNoComma : maybeoperatorComma)\n      else return pass(noComma ? expressionNoComma : expression);\n    };\n  }\n  function target(_, value) {\n    if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorComma); }\n  }\n  function targetNoComma(_, value) {\n    if (value == \"target\") { cx.marked = \"keyword\"; return cont(maybeoperatorNoComma); }\n  }\n  function maybelabel(type) {\n    if (type == \":\") return cont(poplex, statement);\n    return pass(maybeoperatorComma, expect(\";\"), poplex);\n  }\n  function property(type) {\n    if (type == \"variable\") {cx.marked = \"property\"; return cont();}\n  }\n  function objprop(type, value) {\n    if (type == \"async\") {\n      cx.marked = \"property\";\n      return cont(objprop);\n    } else if (type == \"variable\" || cx.style == \"keyword\") {\n      cx.marked = \"property\";\n      if (value == \"get\" || value == \"set\") return cont(getterSetter);\n      var m // Work around fat-arrow-detection complication for detecting typescript typed arrow params\n      if (isTS && cx.state.fatArrowAt == cx.stream.start && (m = cx.stream.match(/^\\s*:\\s*/, false)))\n        cx.state.fatArrowAt = cx.stream.pos + m[0].length\n      return cont(afterprop);\n    } else if (type == \"number\" || type == \"string\") {\n      cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n      return cont(afterprop);\n    } else if (type == \"jsonld-keyword\") {\n      return cont(afterprop);\n    } else if (isTS && isModifier(value)) {\n      cx.marked = \"keyword\"\n      return cont(objprop)\n    } else if (type == \"[\") {\n      return cont(expression, maybetype, expect(\"]\"), afterprop);\n    } else if (type == \"spread\") {\n      return cont(expressionNoComma, afterprop);\n    } else if (value == \"*\") {\n      cx.marked = \"keyword\";\n      return cont(objprop);\n    } else if (type == \":\") {\n      return pass(afterprop)\n    }\n  }\n  function getterSetter(type) {\n    if (type != \"variable\") return pass(afterprop);\n    cx.marked = \"property\";\n    return cont(functiondef);\n  }\n  function afterprop(type) {\n    if (type == \":\") return cont(expressionNoComma);\n    if (type == \"(\") return pass(functiondef);\n  }\n  function commasep(what, end, sep) {\n    function proceed(type, value) {\n      if (sep ? sep.indexOf(type) > -1 : type == \",\") {\n        var lex = cx.state.lexical;\n        if (lex.info == \"call\") lex.pos = (lex.pos || 0) + 1;\n        return cont(function(type, value) {\n          if (type == end || value == end) return pass()\n          return pass(what)\n        }, proceed);\n      }\n      if (type == end || value == end) return cont();\n      if (sep && sep.indexOf(\";\") > -1) return pass(what)\n      return cont(expect(end));\n    }\n    return function(type, value) {\n      if (type == end || value == end) return cont();\n      return pass(what, proceed);\n    };\n  }\n  function contCommasep(what, end, info) {\n    for (var i = 3; i < arguments.length; i++)\n      cx.cc.push(arguments[i]);\n    return cont(pushlex(end, info), commasep(what, end), poplex);\n  }\n  function block(type) {\n    if (type == \"}\") return cont();\n    return pass(statement, block);\n  }\n  function maybetype(type, value) {\n    if (isTS) {\n      if (type == \":\") return cont(typeexpr);\n      if (value == \"?\") return cont(maybetype);\n    }\n  }\n  function maybetypeOrIn(type, value) {\n    if (isTS && (type == \":\" || value == \"in\")) return cont(typeexpr)\n  }\n  function mayberettype(type) {\n    if (isTS && type == \":\") {\n      if (cx.stream.match(/^\\s*\\w+\\s+is\\b/, false)) return cont(expression, isKW, typeexpr)\n      else return cont(typeexpr)\n    }\n  }\n  function isKW(_, value) {\n    if (value == \"is\") {\n      cx.marked = \"keyword\"\n      return cont()\n    }\n  }\n  function typeexpr(type, value) {\n    if (value == \"keyof\" || value == \"typeof\" || value == \"infer\" || value == \"readonly\") {\n      cx.marked = \"keyword\"\n      return cont(value == \"typeof\" ? expressionNoComma : typeexpr)\n    }\n    if (type == \"variable\" || value == \"void\") {\n      cx.marked = \"type\"\n      return cont(afterType)\n    }\n    if (value == \"|\" || value == \"&\") return cont(typeexpr)\n    if (type == \"string\" || type == \"number\" || type == \"atom\") return cont(afterType);\n    if (type == \"[\") return cont(pushlex(\"]\"), commasep(typeexpr, \"]\", \",\"), poplex, afterType)\n    if (type == \"{\") return cont(pushlex(\"}\"), typeprops, poplex, afterType)\n    if (type == \"(\") return cont(commasep(typearg, \")\"), maybeReturnType, afterType)\n    if (type == \"<\") return cont(commasep(typeexpr, \">\"), typeexpr)\n    if (type == \"quasi\") { return pass(quasiType, afterType); }\n  }\n  function maybeReturnType(type) {\n    if (type == \"=>\") return cont(typeexpr)\n  }\n  function typeprops(type) {\n    if (type.match(/[\\}\\)\\]]/)) return cont()\n    if (type == \",\" || type == \";\") return cont(typeprops)\n    return pass(typeprop, typeprops)\n  }\n  function typeprop(type, value) {\n    if (type == \"variable\" || cx.style == \"keyword\") {\n      cx.marked = \"property\"\n      return cont(typeprop)\n    } else if (value == \"?\" || type == \"number\" || type == \"string\") {\n      return cont(typeprop)\n    } else if (type == \":\") {\n      return cont(typeexpr)\n    } else if (type == \"[\") {\n      return cont(expect(\"variable\"), maybetypeOrIn, expect(\"]\"), typeprop)\n    } else if (type == \"(\") {\n      return pass(functiondecl, typeprop)\n    } else if (!type.match(/[;\\}\\)\\],]/)) {\n      return cont()\n    }\n  }\n  function quasiType(type, value) {\n    if (type != \"quasi\") return pass();\n    if (value.slice(value.length - 2) != \"${\") return cont(quasiType);\n    return cont(typeexpr, continueQuasiType);\n  }\n  function continueQuasiType(type) {\n    if (type == \"}\") {\n      cx.marked = \"string-2\";\n      cx.state.tokenize = tokenQuasi;\n      return cont(quasiType);\n    }\n  }\n  function typearg(type, value) {\n    if (type == \"variable\" && cx.stream.match(/^\\s*[?:]/, false) || value == \"?\") return cont(typearg)\n    if (type == \":\") return cont(typeexpr)\n    if (type == \"spread\") return cont(typearg)\n    return pass(typeexpr)\n  }\n  function afterType(type, value) {\n    if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n    if (value == \"|\" || type == \".\" || value == \"&\") return cont(typeexpr)\n    if (type == \"[\") return cont(typeexpr, expect(\"]\"), afterType)\n    if (value == \"extends\" || value == \"implements\") { cx.marked = \"keyword\"; return cont(typeexpr) }\n    if (value == \"?\") return cont(typeexpr, expect(\":\"), typeexpr)\n  }\n  function maybeTypeArgs(_, value) {\n    if (value == \"<\") return cont(pushlex(\">\"), commasep(typeexpr, \">\"), poplex, afterType)\n  }\n  function typeparam() {\n    return pass(typeexpr, maybeTypeDefault)\n  }\n  function maybeTypeDefault(_, value) {\n    if (value == \"=\") return cont(typeexpr)\n  }\n  function vardef(_, value) {\n    if (value == \"enum\") {cx.marked = \"keyword\"; return cont(enumdef)}\n    return pass(pattern, maybetype, maybeAssign, vardefCont);\n  }\n  function pattern(type, value) {\n    if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(pattern) }\n    if (type == \"variable\") { register(value); return cont(); }\n    if (type == \"spread\") return cont(pattern);\n    if (type == \"[\") return contCommasep(eltpattern, \"]\");\n    if (type == \"{\") return contCommasep(proppattern, \"}\");\n  }\n  function proppattern(type, value) {\n    if (type == \"variable\" && !cx.stream.match(/^\\s*:/, false)) {\n      register(value);\n      return cont(maybeAssign);\n    }\n    if (type == \"variable\") cx.marked = \"property\";\n    if (type == \"spread\") return cont(pattern);\n    if (type == \"}\") return pass();\n    if (type == \"[\") return cont(expression, expect(']'), expect(':'), proppattern);\n    return cont(expect(\":\"), pattern, maybeAssign);\n  }\n  function eltpattern() {\n    return pass(pattern, maybeAssign)\n  }\n  function maybeAssign(_type, value) {\n    if (value == \"=\") return cont(expressionNoComma);\n  }\n  function vardefCont(type) {\n    if (type == \",\") return cont(vardef);\n  }\n  function maybeelse(type, value) {\n    if (type == \"keyword b\" && value == \"else\") return cont(pushlex(\"form\", \"else\"), statement, poplex);\n  }\n  function forspec(type, value) {\n    if (value == \"await\") return cont(forspec);\n    if (type == \"(\") return cont(pushlex(\")\"), forspec1, poplex);\n  }\n  function forspec1(type) {\n    if (type == \"var\") return cont(vardef, forspec2);\n    if (type == \"variable\") return cont(forspec2);\n    return pass(forspec2)\n  }\n  function forspec2(type, value) {\n    if (type == \")\") return cont()\n    if (type == \";\") return cont(forspec2)\n    if (value == \"in\" || value == \"of\") { cx.marked = \"keyword\"; return cont(expression, forspec2) }\n    return pass(expression, forspec2)\n  }\n  function functiondef(type, value) {\n    if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondef);}\n    if (type == \"variable\") {register(value); return cont(functiondef);}\n    if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, statement, popcontext);\n    if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondef)\n  }\n  function functiondecl(type, value) {\n    if (value == \"*\") {cx.marked = \"keyword\"; return cont(functiondecl);}\n    if (type == \"variable\") {register(value); return cont(functiondecl);}\n    if (type == \"(\") return cont(pushcontext, pushlex(\")\"), commasep(funarg, \")\"), poplex, mayberettype, popcontext);\n    if (isTS && value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, functiondecl)\n  }\n  function typename(type, value) {\n    if (type == \"keyword\" || type == \"variable\") {\n      cx.marked = \"type\"\n      return cont(typename)\n    } else if (value == \"<\") {\n      return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex)\n    }\n  }\n  function funarg(type, value) {\n    if (value == \"@\") cont(expression, funarg)\n    if (type == \"spread\") return cont(funarg);\n    if (isTS && isModifier(value)) { cx.marked = \"keyword\"; return cont(funarg); }\n    if (isTS && type == \"this\") return cont(maybetype, maybeAssign)\n    return pass(pattern, maybetype, maybeAssign);\n  }\n  function classExpression(type, value) {\n    // Class expressions may have an optional name.\n    if (type == \"variable\") return className(type, value);\n    return classNameAfter(type, value);\n  }\n  function className(type, value) {\n    if (type == \"variable\") {register(value); return cont(classNameAfter);}\n  }\n  function classNameAfter(type, value) {\n    if (value == \"<\") return cont(pushlex(\">\"), commasep(typeparam, \">\"), poplex, classNameAfter)\n    if (value == \"extends\" || value == \"implements\" || (isTS && type == \",\")) {\n      if (value == \"implements\") cx.marked = \"keyword\";\n      return cont(isTS ? typeexpr : expression, classNameAfter);\n    }\n    if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n  }\n  function classBody(type, value) {\n    if (type == \"async\" ||\n        (type == \"variable\" &&\n         (value == \"static\" || value == \"get\" || value == \"set\" || (isTS && isModifier(value))) &&\n         cx.stream.match(/^\\s+[\\w$\\xa1-\\uffff]/, false))) {\n      cx.marked = \"keyword\";\n      return cont(classBody);\n    }\n    if (type == \"variable\" || cx.style == \"keyword\") {\n      cx.marked = \"property\";\n      return cont(classfield, classBody);\n    }\n    if (type == \"number\" || type == \"string\") return cont(classfield, classBody);\n    if (type == \"[\")\n      return cont(expression, maybetype, expect(\"]\"), classfield, classBody)\n    if (value == \"*\") {\n      cx.marked = \"keyword\";\n      return cont(classBody);\n    }\n    if (isTS && type == \"(\") return pass(functiondecl, classBody)\n    if (type == \";\" || type == \",\") return cont(classBody);\n    if (type == \"}\") return cont();\n    if (value == \"@\") return cont(expression, classBody)\n  }\n  function classfield(type, value) {\n    if (value == \"!\") return cont(classfield)\n    if (value == \"?\") return cont(classfield)\n    if (type == \":\") return cont(typeexpr, maybeAssign)\n    if (value == \"=\") return cont(expressionNoComma)\n    var context = cx.state.lexical.prev, isInterface = context && context.info == \"interface\"\n    return pass(isInterface ? functiondecl : functiondef)\n  }\n  function afterExport(type, value) {\n    if (value == \"*\") { cx.marked = \"keyword\"; return cont(maybeFrom, expect(\";\")); }\n    if (value == \"default\") { cx.marked = \"keyword\"; return cont(expression, expect(\";\")); }\n    if (type == \"{\") return cont(commasep(exportField, \"}\"), maybeFrom, expect(\";\"));\n    return pass(statement);\n  }\n  function exportField(type, value) {\n    if (value == \"as\") { cx.marked = \"keyword\"; return cont(expect(\"variable\")); }\n    if (type == \"variable\") return pass(expressionNoComma, exportField);\n  }\n  function afterImport(type) {\n    if (type == \"string\") return cont();\n    if (type == \"(\") return pass(expression);\n    if (type == \".\") return pass(maybeoperatorComma);\n    return pass(importSpec, maybeMoreImports, maybeFrom);\n  }\n  function importSpec(type, value) {\n    if (type == \"{\") return contCommasep(importSpec, \"}\");\n    if (type == \"variable\") register(value);\n    if (value == \"*\") cx.marked = \"keyword\";\n    return cont(maybeAs);\n  }\n  function maybeMoreImports(type) {\n    if (type == \",\") return cont(importSpec, maybeMoreImports)\n  }\n  function maybeAs(_type, value) {\n    if (value == \"as\") { cx.marked = \"keyword\"; return cont(importSpec); }\n  }\n  function maybeFrom(_type, value) {\n    if (value == \"from\") { cx.marked = \"keyword\"; return cont(expression); }\n  }\n  function arrayLiteral(type) {\n    if (type == \"]\") return cont();\n    return pass(commasep(expressionNoComma, \"]\"));\n  }\n  function enumdef() {\n    return pass(pushlex(\"form\"), pattern, expect(\"{\"), pushlex(\"}\"), commasep(enummember, \"}\"), poplex, poplex)\n  }\n  function enummember() {\n    return pass(pattern, maybeAssign);\n  }\n\n  function isContinuedStatement(state, textAfter) {\n    return state.lastType == \"operator\" || state.lastType == \",\" ||\n      isOperatorChar.test(textAfter.charAt(0)) ||\n      /[,.]/.test(textAfter.charAt(0));\n  }\n\n  function expressionAllowed(stream, state, backUp) {\n    return state.tokenize == tokenBase &&\n      /^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\\[{}\\(,;:]|=>)$/.test(state.lastType) ||\n      (state.lastType == \"quasi\" && /\\{\\s*$/.test(stream.string.slice(0, stream.pos - (backUp || 0))))\n  }\n\n  // Interface\n\n  return {\n    startState: function(basecolumn) {\n      var state = {\n        tokenize: tokenBase,\n        lastType: \"sof\",\n        cc: [],\n        lexical: new JSLexical((basecolumn || 0) - indentUnit, 0, \"block\", false),\n        localVars: parserConfig.localVars,\n        context: parserConfig.localVars && new Context(null, null, false),\n        indented: basecolumn || 0\n      };\n      if (parserConfig.globalVars && typeof parserConfig.globalVars == \"object\")\n        state.globalVars = parserConfig.globalVars;\n      return state;\n    },\n\n    token: function(stream, state) {\n      if (stream.sol()) {\n        if (!state.lexical.hasOwnProperty(\"align\"))\n          state.lexical.align = false;\n        state.indented = stream.indentation();\n        findFatArrow(stream, state);\n      }\n      if (state.tokenize != tokenComment && stream.eatSpace()) return null;\n      var style = state.tokenize(stream, state);\n      if (type == \"comment\") return style;\n      state.lastType = type == \"operator\" && (content == \"++\" || content == \"--\") ? \"incdec\" : type;\n      return parseJS(state, style, type, content, stream);\n    },\n\n    indent: function(state, textAfter) {\n      if (state.tokenize == tokenComment || state.tokenize == tokenQuasi) return CodeMirror.Pass;\n      if (state.tokenize != tokenBase) return 0;\n      var firstChar = textAfter && textAfter.charAt(0), lexical = state.lexical, top\n      // Kludge to prevent 'maybelse' from blocking lexical scope pops\n      if (!/^\\s*else\\b/.test(textAfter)) for (var i = state.cc.length - 1; i >= 0; --i) {\n        var c = state.cc[i];\n        if (c == poplex) lexical = lexical.prev;\n        else if (c != maybeelse && c != popcontext) break;\n      }\n      while ((lexical.type == \"stat\" || lexical.type == \"form\") &&\n             (firstChar == \"}\" || ((top = state.cc[state.cc.length - 1]) &&\n                                   (top == maybeoperatorComma || top == maybeoperatorNoComma) &&\n                                   !/^[,\\.=+\\-*:?[\\(]/.test(textAfter))))\n        lexical = lexical.prev;\n      if (statementIndent && lexical.type == \")\" && lexical.prev.type == \"stat\")\n        lexical = lexical.prev;\n      var type = lexical.type, closing = firstChar == type;\n\n      if (type == \"vardef\") return lexical.indented + (state.lastType == \"operator\" || state.lastType == \",\" ? lexical.info.length + 1 : 0);\n      else if (type == \"form\" && firstChar == \"{\") return lexical.indented;\n      else if (type == \"form\") return lexical.indented + indentUnit;\n      else if (type == \"stat\")\n        return lexical.indented + (isContinuedStatement(state, textAfter) ? statementIndent || indentUnit : 0);\n      else if (lexical.info == \"switch\" && !closing && parserConfig.doubleIndentSwitch != false)\n        return lexical.indented + (/^(?:case|default)\\b/.test(textAfter) ? indentUnit : 2 * indentUnit);\n      else if (lexical.align) return lexical.column + (closing ? 0 : 1);\n      else return lexical.indented + (closing ? 0 : indentUnit);\n    },\n\n    electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\n    blockCommentStart: jsonMode ? null : \"/*\",\n    blockCommentEnd: jsonMode ? null : \"*/\",\n    blockCommentContinue: jsonMode ? null : \" * \",\n    lineComment: jsonMode ? null : \"//\",\n    fold: \"brace\",\n    closeBrackets: \"()[]{}''\\\"\\\"``\",\n\n    helperType: jsonMode ? \"json\" : \"javascript\",\n    jsonldMode: jsonldMode,\n    jsonMode: jsonMode,\n\n    expressionAllowed: expressionAllowed,\n\n    skipExpression: function(state) {\n      parseJS(state, \"atom\", \"atom\", \"true\", new CodeMirror.StringStream(\"\", 2, null))\n    }\n  };\n});\n\nCodeMirror.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/json\", { name: \"javascript\", json: true });\nCodeMirror.defineMIME(\"application/x-json\", { name: \"javascript\", json: true });\nCodeMirror.defineMIME(\"application/manifest+json\", { name: \"javascript\", json: true })\nCodeMirror.defineMIME(\"application/ld+json\", { name: \"javascript\", jsonld: true });\nCodeMirror.defineMIME(\"text/typescript\", { name: \"javascript\", typescript: true });\nCodeMirror.defineMIME(\"application/typescript\", { name: \"javascript\", typescript: true });\n\n});\n"
  },
  {
    "path": "BlackStone/assets/vendors/codemirror/shell.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: https://codemirror.net/LICENSE\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\n\nCodeMirror.defineMode('shell', function() {\n\n  var words = {};\n  function define(style, dict) {\n    for(var i = 0; i < dict.length; i++) {\n      words[dict[i]] = style;\n    }\n  };\n\n  var commonAtoms = [\"true\", \"false\"];\n  var commonKeywords = [\"if\", \"then\", \"do\", \"else\", \"elif\", \"while\", \"until\", \"for\", \"in\", \"esac\", \"fi\",\n    \"fin\", \"fil\", \"done\", \"exit\", \"set\", \"unset\", \"export\", \"function\"];\n  var commonCommands = [\"ab\", \"awk\", \"bash\", \"beep\", \"cat\", \"cc\", \"cd\", \"chown\", \"chmod\", \"chroot\", \"clear\",\n    \"cp\", \"curl\", \"cut\", \"diff\", \"echo\", \"find\", \"gawk\", \"gcc\", \"get\", \"git\", \"grep\", \"hg\", \"kill\", \"killall\",\n    \"ln\", \"ls\", \"make\", \"mkdir\", \"openssl\", \"mv\", \"nc\", \"nl\", \"node\", \"npm\", \"ping\", \"ps\", \"restart\", \"rm\",\n    \"rmdir\", \"sed\", \"service\", \"sh\", \"shopt\", \"shred\", \"source\", \"sort\", \"sleep\", \"ssh\", \"start\", \"stop\",\n    \"su\", \"sudo\", \"svn\", \"tee\", \"telnet\", \"top\", \"touch\", \"vi\", \"vim\", \"wall\", \"wc\", \"wget\", \"who\", \"write\",\n    \"yes\", \"zsh\"];\n\n  CodeMirror.registerHelper(\"hintWords\", \"shell\", commonAtoms.concat(commonKeywords, commonCommands));\n\n  define('atom', commonAtoms);\n  define('keyword', commonKeywords);\n  define('builtin', commonCommands);\n\n  function tokenBase(stream, state) {\n    if (stream.eatSpace()) return null;\n\n    var sol = stream.sol();\n    var ch = stream.next();\n\n    if (ch === '\\\\') {\n      stream.next();\n      return null;\n    }\n    if (ch === '\\'' || ch === '\"' || ch === '`') {\n      state.tokens.unshift(tokenString(ch, ch === \"`\" ? \"quote\" : \"string\"));\n      return tokenize(stream, state);\n    }\n    if (ch === '#') {\n      if (sol && stream.eat('!')) {\n        stream.skipToEnd();\n        return 'meta'; // 'comment'?\n      }\n      stream.skipToEnd();\n      return 'comment';\n    }\n    if (ch === '$') {\n      state.tokens.unshift(tokenDollar);\n      return tokenize(stream, state);\n    }\n    if (ch === '+' || ch === '=') {\n      return 'operator';\n    }\n    if (ch === '-') {\n      stream.eat('-');\n      stream.eatWhile(/\\w/);\n      return 'attribute';\n    }\n    if (ch == \"<\") {\n      if (stream.match(\"<<\")) return \"operator\"\n      var heredoc = stream.match(/^<-?\\s*['\"]?([^'\"]*)['\"]?/)\n      if (heredoc) {\n        state.tokens.unshift(tokenHeredoc(heredoc[1]))\n        return 'string-2'\n      }\n    }\n    if (/\\d/.test(ch)) {\n      stream.eatWhile(/\\d/);\n      if(stream.eol() || !/\\w/.test(stream.peek())) {\n        return 'number';\n      }\n    }\n    stream.eatWhile(/[\\w-]/);\n    var cur = stream.current();\n    if (stream.peek() === '=' && /\\w+/.test(cur)) return 'def';\n    return words.hasOwnProperty(cur) ? words[cur] : null;\n  }\n\n  function tokenString(quote, style) {\n    var close = quote == \"(\" ? \")\" : quote == \"{\" ? \"}\" : quote\n    return function(stream, state) {\n      var next, escaped = false;\n      while ((next = stream.next()) != null) {\n        if (next === close && !escaped) {\n          state.tokens.shift();\n          break;\n        } else if (next === '$' && !escaped && quote !== \"'\" && stream.peek() != close) {\n          escaped = true;\n          stream.backUp(1);\n          state.tokens.unshift(tokenDollar);\n          break;\n        } else if (!escaped && quote !== close && next === quote) {\n          state.tokens.unshift(tokenString(quote, style))\n          return tokenize(stream, state)\n        } else if (!escaped && /['\"]/.test(next) && !/['\"]/.test(quote)) {\n          state.tokens.unshift(tokenStringStart(next, \"string\"));\n          stream.backUp(1);\n          break;\n        }\n        escaped = !escaped && next === '\\\\';\n      }\n      return style;\n    };\n  };\n\n  function tokenStringStart(quote, style) {\n    return function(stream, state) {\n      state.tokens[0] = tokenString(quote, style)\n      stream.next()\n      return tokenize(stream, state)\n    }\n  }\n\n  var tokenDollar = function(stream, state) {\n    if (state.tokens.length > 1) stream.eat('$');\n    var ch = stream.next()\n    if (/['\"({]/.test(ch)) {\n      state.tokens[0] = tokenString(ch, ch == \"(\" ? \"quote\" : ch == \"{\" ? \"def\" : \"string\");\n      return tokenize(stream, state);\n    }\n    if (!/\\d/.test(ch)) stream.eatWhile(/\\w/);\n    state.tokens.shift();\n    return 'def';\n  };\n\n  function tokenHeredoc(delim) {\n    return function(stream, state) {\n      if (stream.sol() && stream.string == delim) state.tokens.shift()\n      stream.skipToEnd()\n      return \"string-2\"\n    }\n  }\n\n  function tokenize(stream, state) {\n    return (state.tokens[0] || tokenBase) (stream, state);\n  };\n\n  return {\n    startState: function() {return {tokens:[]};},\n    token: function(stream, state) {\n      return tokenize(stream, state);\n    },\n    closeBrackets: \"()[]{}''\\\"\\\"``\",\n    lineComment: '#',\n    fold: \"brace\"\n  };\n});\n\nCodeMirror.defineMIME('text/x-sh', 'shell');\n// Apache uses a slightly different Media Type for Shell scripts\n// http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types\nCodeMirror.defineMIME('application/x-sh', 'shell');\n\n});\n"
  },
  {
    "path": "BlackStone/assets/vendors/css/vendor.bundle.base.css",
    "content": "/*\n * Container style\n */\n.ps {\n  overflow: hidden !important;\n  overflow-anchor: none;\n  -ms-overflow-style: none;\n  touch-action: auto;\n  -ms-touch-action: auto;\n}\n\n/*\n * Scrollbar rail styles\n */\n.ps__rail-x {\n  display: none;\n  opacity: 0;\n  transition: background-color .2s linear, opacity .2s linear;\n  -webkit-transition: background-color .2s linear, opacity .2s linear;\n  height: 15px;\n  /* there must be 'bottom' or 'top' for ps__rail-x */\n  bottom: 0px;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps__rail-y {\n  display: none;\n  opacity: 0;\n  transition: background-color .2s linear, opacity .2s linear;\n  -webkit-transition: background-color .2s linear, opacity .2s linear;\n  width: 15px;\n  /* there must be 'right' or 'left' for ps__rail-y */\n  right: 0;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps--active-x > .ps__rail-x,\n.ps--active-y > .ps__rail-y {\n  display: block;\n  background-color: transparent;\n}\n\n.ps:hover > .ps__rail-x,\n.ps:hover > .ps__rail-y,\n.ps--focus > .ps__rail-x,\n.ps--focus > .ps__rail-y,\n.ps--scrolling-x > .ps__rail-x,\n.ps--scrolling-y > .ps__rail-y {\n  opacity: 0.6;\n}\n\n.ps .ps__rail-x:hover,\n.ps .ps__rail-y:hover,\n.ps .ps__rail-x:focus,\n.ps .ps__rail-y:focus,\n.ps .ps__rail-x.ps--clicking,\n.ps .ps__rail-y.ps--clicking {\n  background-color: #eee;\n  opacity: 0.9;\n}\n\n/*\n * Scrollbar thumb styles\n */\n.ps__thumb-x {\n  background-color: #aaa;\n  border-radius: 6px;\n  transition: background-color .2s linear, height .2s ease-in-out;\n  -webkit-transition: background-color .2s linear, height .2s ease-in-out;\n  height: 6px;\n  /* there must be 'bottom' for ps__thumb-x */\n  bottom: 2px;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps__thumb-y {\n  background-color: #aaa;\n  border-radius: 6px;\n  transition: background-color .2s linear, width .2s ease-in-out;\n  -webkit-transition: background-color .2s linear, width .2s ease-in-out;\n  width: 6px;\n  /* there must be 'right' for ps__thumb-y */\n  right: 2px;\n  /* please don't change 'position' */\n  position: absolute;\n}\n\n.ps__rail-x:hover > .ps__thumb-x,\n.ps__rail-x:focus > .ps__thumb-x,\n.ps__rail-x.ps--clicking .ps__thumb-x {\n  background-color: #999;\n  height: 11px;\n}\n\n.ps__rail-y:hover > .ps__thumb-y,\n.ps__rail-y:focus > .ps__thumb-y,\n.ps__rail-y.ps--clicking .ps__thumb-y {\n  background-color: #999;\n  width: 11px;\n}\n\n/* MS supports */\n@supports (-ms-overflow-style: none) {\n  .ps {\n    overflow: auto !important;\n  }\n}\n\n@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {\n  .ps {\n    overflow: auto !important;\n  }\n}\n"
  },
  {
    "path": "BlackStone/assets/vendors/js/vendor.bundle.base.js",
    "content": "/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!function(e,t){\"use strict\";\"object\"==typeof module&&\"object\"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error(\"jQuery requires a window with a document\");return t(e)}:t(e)}(\"undefined\"!=typeof window?window:this,function(C,e){\"use strict\";var t=[],E=C.document,r=Object.getPrototypeOf,s=t.slice,g=t.concat,u=t.push,i=t.indexOf,n={},o=n.toString,v=n.hasOwnProperty,a=v.toString,l=a.call(Object),y={},m=function(e){return\"function\"==typeof e&&\"number\"!=typeof e.nodeType},x=function(e){return null!=e&&e===e.window},c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement(\"script\");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+\"\":\"object\"==typeof e||\"function\"==typeof e?n[o.call(e)]||\"object\":typeof e}var f=\"3.4.1\",k=function(e,t){return new k.fn.init(e,t)},p=/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;function d(e){var t=!!e&&\"length\"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&(\"array\"===n||0===t||\"number\"==typeof t&&0<t&&t-1 in e)}k.fn=k.prototype={jquery:f,constructor:k,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=k.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return k.each(this,e)},map:function(n){return this.pushStack(k.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},k.extend=k.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for(\"boolean\"==typeof a&&(l=a,a=arguments[s]||{},s++),\"object\"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],\"__proto__\"!==t&&a!==r&&(l&&r&&(k.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||k.isPlainObject(n)?n:{},i=!1,a[t]=k.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},k.extend({expando:\"jQuery\"+(f+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||\"[object Object]\"!==o.call(e))&&(!(t=r(e))||\"function\"==typeof(n=v.call(t,\"constructor\")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t){b(e,{nonce:t&&t.nonce})},each:function(e,t){var n,r=0;if(d(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},trim:function(e){return null==e?\"\":(e+\"\").replace(p,\"\")},makeArray:function(e,t){var n=t||[];return null!=e&&(d(Object(e))?k.merge(n,\"string\"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(d(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g.apply([],a)},guid:1,support:y}),\"function\"==typeof Symbol&&(k.fn[Symbol.iterator]=t[Symbol.iterator]),k.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(e,t){n[\"[object \"+t+\"]\"]=t.toLowerCase()});var h=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,v,s,c,y,k=\"sizzle\"+1*new Date,m=n.document,S=0,r=0,p=ue(),x=ue(),N=ue(),A=ue(),D=function(e,t){return e===t&&(l=!0),0},j={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",M=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",I=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",W=\"\\\\[\"+M+\"*(\"+I+\")(?:\"+M+\"*([*^$|!~]?=)\"+M+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+I+\"))|)\"+M+\"*\\\\]\",$=\":(\"+I+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+W+\")*)|.*)\\\\)|)\",F=new RegExp(M+\"+\",\"g\"),B=new RegExp(\"^\"+M+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+M+\"+$\",\"g\"),_=new RegExp(\"^\"+M+\"*,\"+M+\"*\"),z=new RegExp(\"^\"+M+\"*([>+~]|\"+M+\")\"+M+\"*\"),U=new RegExp(M+\"|>\"),X=new RegExp($),V=new RegExp(\"^\"+I+\"$\"),G={ID:new RegExp(\"^#(\"+I+\")\"),CLASS:new RegExp(\"^\\\\.(\"+I+\")\"),TAG:new RegExp(\"^(\"+I+\"|[*])\"),ATTR:new RegExp(\"^\"+W),PSEUDO:new RegExp(\"^\"+$),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+M+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+M+\"*(?:([+-]|)\"+M+\"*(\\\\d+)|))\"+M+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+R+\")$\",\"i\"),needsContext:new RegExp(\"^\"+M+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+M+\"*((?:-\\\\d)?\\\\d*)\"+M+\"*\\\\)|)(?=[^-]|$)\",\"i\")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\\d$/i,K=/^[^{]+\\{\\s*\\[native \\w/,Z=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,ee=/[+~]/,te=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+M+\"?|(\"+M+\")|.)\",\"ig\"),ne=function(e,t,n){var r=\"0x\"+t-65536;return r!=r||n?t:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},re=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,ie=function(e,t){return t?\"\\0\"===e?\"\\ufffd\":e.slice(0,-1)+\"\\\\\"+e.charCodeAt(e.length-1).toString(16)+\" \":\"\\\\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&\"fieldset\"===e.nodeName.toLowerCase()},{dir:\"parentNode\",next:\"legend\"});try{H.apply(t=O.call(m.childNodes),m.childNodes),t[m.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&((e?e.ownerDocument||e:m)!==C&&T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!A[t+\" \"]&&(!v||!v.test(t))&&(1!==p||\"object\"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&U.test(t)){(s=e.getAttribute(\"id\"))?s=s.replace(re,ie):e.setAttribute(\"id\",s=k),o=(l=h(t)).length;while(o--)l[o]=\"#\"+s+\" \"+xe(l[o]);c=l.join(\",\"),f=ee.test(t)&&ye(e.parentNode)||e}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){A(t,!0)}finally{s===k&&e.removeAttribute(\"id\")}}}return g(t.replace(B,\"$1\"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+\" \")>b.cacheLength&&delete e[r.shift()],e[t+\" \"]=n}}function le(e){return e[k]=!0,e}function ce(e){var t=C.createElement(\"fieldset\");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split(\"|\"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return(\"input\"===t||\"button\"===t)&&e.type===n}}function ge(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&\"undefined\"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e.namespaceURI,n=(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||\"HTML\")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:m;return r!==C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),m!==C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",oe,!1):n.attachEvent&&n.attachEvent(\"onunload\",oe)),d.attributes=ce(function(e){return e.className=\"i\",!e.getAttribute(\"className\")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment(\"\")),!e.getElementsByTagName(\"*\").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=k,!C.getElementsByName||!C.getElementsByName(k).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute(\"id\")===t}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t=\"undefined\"!=typeof e.getAttributeNode&&e.getAttributeNode(\"id\");return t&&t.value===n}},b.find.ID=function(e,t){if(\"undefined\"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode(\"id\"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return\"undefined\"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if(\"*\"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if(\"undefined\"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){a.appendChild(e).innerHTML=\"<a id='\"+k+\"'></a><select id='\"+k+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",e.querySelectorAll(\"[msallowcapture^='']\").length&&v.push(\"[*^$]=\"+M+\"*(?:''|\\\"\\\")\"),e.querySelectorAll(\"[selected]\").length||v.push(\"\\\\[\"+M+\"*(?:value|\"+R+\")\"),e.querySelectorAll(\"[id~=\"+k+\"-]\").length||v.push(\"~=\"),e.querySelectorAll(\":checked\").length||v.push(\":checked\"),e.querySelectorAll(\"a#\"+k+\"+*\").length||v.push(\".#.+[+~]\")}),ce(function(e){e.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var t=C.createElement(\"input\");t.setAttribute(\"type\",\"hidden\"),e.appendChild(t).setAttribute(\"name\",\"D\"),e.querySelectorAll(\"[name=d]\").length&&v.push(\"name\"+M+\"*[*^$|!~]?=\"),2!==e.querySelectorAll(\":enabled\").length&&v.push(\":enabled\",\":disabled\"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(\":disabled\").length&&v.push(\":enabled\",\":disabled\"),e.querySelectorAll(\"*,:x\"),v.push(\",.*:\")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,\"*\"),c.call(e,\"[s!='']:x\"),s.push(\"!=\",$)}),v=v.length&&new RegExp(v.join(\"|\")),s=s.length&&new RegExp(s.join(\"|\")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)===(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e===C||e.ownerDocument===m&&y(m,e)?-1:t===C||t.ownerDocument===m&&y(m,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e===C?-1:t===C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]===m?-1:s[r]===m?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if((e.ownerDocument||e)!==C&&T(e),d.matchesSelector&&E&&!A[t+\" \"]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){A(t,!0)}return 0<se(t,C,null,[e]).length},se.contains=function(e,t){return(e.ownerDocument||e)!==C&&T(e),y(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!==C&&T(e);var n=b.attrHandle[t.toLowerCase()],r=n&&j.call(b.attrHandle,t.toLowerCase())?n(e,t,!E):void 0;return void 0!==r?r:d.attributes||!E?e.getAttribute(t):(r=e.getAttributeNode(t))&&r.specified?r.value:null},se.escape=function(e){return(e+\"\").replace(re,ie)},se.error=function(e){throw new Error(\"Syntax error, unrecognized expression: \"+e)},se.uniqueSort=function(e){var t,n=[],r=0,i=0;if(l=!d.detectDuplicates,u=!d.sortStable&&e.slice(0),e.sort(D),l){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return u=null,e},o=se.getText=function(e){var t,n=\"\",r=0,i=e.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=o(e)}else if(3===i||4===i)return e.nodeValue}else while(t=e[r++])n+=o(t);return n},(b=se.selectors={cacheLength:50,createPseudo:le,match:G,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||\"\").replace(te,ne),\"~=\"===e[2]&&(e[3]=\" \"+e[3]+\" \"),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),\"nth\"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*(\"even\"===e[3]||\"odd\"===e[3])),e[5]=+(e[7]+e[8]||\"odd\"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||\"\":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(\")\",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return\"*\"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=p[e+\" \"];return t||(t=new RegExp(\"(^|\"+M+\")\"+e+\"(\"+M+\"|$)\"))&&p(e,function(e){return t.test(\"string\"==typeof e.className&&e.className||\"undefined\"!=typeof e.getAttribute&&e.getAttribute(\"class\")||\"\")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?\"!=\"===r:!r||(t+=\"\",\"=\"===r?t===i:\"!=\"===r?t!==i:\"^=\"===r?i&&0===t.indexOf(i):\"*=\"===r?i&&-1<t.indexOf(i):\"$=\"===r?i&&t.slice(-i.length)===i:\"~=\"===r?-1<(\" \"+t.replace(F,\" \")+\" \").indexOf(i):\"|=\"===r&&(t===i||t.slice(0,i.length+1)===i+\"-\"))}},CHILD:function(h,e,t,g,v){var y=\"nth\"!==h.slice(0,3),m=\"last\"!==h.slice(-4),x=\"of-type\"===e;return 1===g&&0===v?function(e){return!!e.parentNode}:function(e,t,n){var r,i,o,a,s,u,l=y!==m?\"nextSibling\":\"previousSibling\",c=e.parentNode,f=x&&e.nodeName.toLowerCase(),p=!n&&!x,d=!1;if(c){if(y){while(l){a=e;while(a=a[l])if(x?a.nodeName.toLowerCase()===f:1===a.nodeType)return!1;u=l=\"only\"===h&&!u&&\"nextSibling\"}return!0}if(u=[m?c.firstChild:c.lastChild],m&&p){d=(s=(r=(i=(o=(a=c)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1])&&r[2],a=s&&c.childNodes[s];while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if(1===a.nodeType&&++d&&a===e){i[h]=[S,s,d];break}}else if(p&&(d=s=(r=(i=(o=(a=e)[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]||[])[0]===S&&r[1]),!1===d)while(a=++s&&a&&a[l]||(d=s=0)||u.pop())if((x?a.nodeName.toLowerCase()===f:1===a.nodeType)&&++d&&(p&&((i=(o=a[k]||(a[k]={}))[a.uniqueID]||(o[a.uniqueID]={}))[h]=[S,d]),a===e))break;return(d-=v)===g||d%g==0&&0<=d/g}}},PSEUDO:function(e,o){var t,a=b.pseudos[e]||b.setFilters[e.toLowerCase()]||se.error(\"unsupported pseudo: \"+e);return a[k]?a(o):1<a.length?(t=[e,e,\"\",o],b.setFilters.hasOwnProperty(e.toLowerCase())?le(function(e,t){var n,r=a(e,o),i=r.length;while(i--)e[n=P(e,r[i])]=!(t[n]=r[i])}):function(e){return a(e,0,t)}):a}},pseudos:{not:le(function(e){var r=[],i=[],s=f(e.replace(B,\"$1\"));return s[k]?le(function(e,t,n,r){var i,o=s(e,null,r,[]),a=e.length;while(a--)(i=o[a])&&(e[a]=!(t[a]=i))}):function(e,t,n){return r[0]=e,s(r,null,n,i),r[0]=null,!i.pop()}}),has:le(function(t){return function(e){return 0<se(t,e).length}}),contains:le(function(t){return t=t.replace(te,ne),function(e){return-1<(e.textContent||o(e)).indexOf(t)}}),lang:le(function(n){return V.test(n||\"\")||se.error(\"unsupported lang: \"+n),n=n.replace(te,ne).toLowerCase(),function(e){var t;do{if(t=E?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(t=t.toLowerCase())===n||0===t.indexOf(n+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var t=n.location&&n.location.hash;return t&&t.slice(1)===e.id},root:function(e){return e===a},focus:function(e){return e===C.activeElement&&(!C.hasFocus||C.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&!!e.checked||\"option\"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!b.pseudos.empty(e)},header:function(e){return J.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return\"input\"===t&&\"button\"===e.type||\"button\"===t},text:function(e){var t;return\"input\"===e.nodeName.toLowerCase()&&\"text\"===e.type&&(null==(t=e.getAttribute(\"type\"))||\"text\"===t.toLowerCase())},first:ve(function(){return[0]}),last:ve(function(e,t){return[t-1]}),eq:ve(function(e,t,n){return[n<0?n+t:n]}),even:ve(function(e,t){for(var n=0;n<t;n+=2)e.push(n);return e}),odd:ve(function(e,t){for(var n=1;n<t;n+=2)e.push(n);return e}),lt:ve(function(e,t,n){for(var r=n<0?n+t:t<n?t:n;0<=--r;)e.push(r);return e}),gt:ve(function(e,t,n){for(var r=n<0?n+t:n;++r<t;)e.push(r);return e})}}).pseudos.nth=b.pseudos.eq,{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})b.pseudos[e]=de(e);for(e in{submit:!0,reset:!0})b.pseudos[e]=he(e);function me(){}function xe(e){for(var t=0,n=e.length,r=\"\";t<n;t++)r+=e[t].value;return r}function be(s,e,t){var u=e.dir,l=e.next,c=l||u,f=t&&\"parentNode\"===c,p=r++;return e.first?function(e,t,n){while(e=e[u])if(1===e.nodeType||f)return s(e,t,n);return!1}:function(e,t,n){var r,i,o,a=[S,p];if(n){while(e=e[u])if((1===e.nodeType||f)&&s(e,t,n))return!0}else while(e=e[u])if(1===e.nodeType||f)if(i=(o=e[k]||(e[k]={}))[e.uniqueID]||(o[e.uniqueID]={}),l&&l===e.nodeName.toLowerCase())e=e[u]||e;else{if((r=i[c])&&r[0]===S&&r[1]===p)return a[2]=r[2];if((i[c]=a)[2]=s(e,t,n))return!0}return!1}}function we(i){return 1<i.length?function(e,t,n){var r=i.length;while(r--)if(!i[r](e,t,n))return!1;return!0}:i[0]}function Te(e,t,n,r,i){for(var o,a=[],s=0,u=e.length,l=null!=t;s<u;s++)(o=e[s])&&(n&&!n(o,r,i)||(a.push(o),l&&t.push(s)));return a}function Ce(d,h,g,v,y,e){return v&&!v[k]&&(v=Ce(v)),y&&!y[k]&&(y=Ce(y,e)),le(function(e,t,n,r){var i,o,a,s=[],u=[],l=t.length,c=e||function(e,t,n){for(var r=0,i=t.length;r<i;r++)se(e,t[r],n);return n}(h||\"*\",n.nodeType?[n]:n,[]),f=!d||!e&&h?c:Te(c,s,d,n,r),p=g?y||(e?d:l||v)?[]:t:f;if(g&&g(f,p,n,r),v){i=Te(p,u),v(i,[],n,r),o=i.length;while(o--)(a=i[o])&&(p[u[o]]=!(f[u[o]]=a))}if(e){if(y||d){if(y){i=[],o=p.length;while(o--)(a=p[o])&&i.push(f[o]=a);y(null,p=[],i,r)}o=p.length;while(o--)(a=p[o])&&-1<(i=y?P(e,a):s[o])&&(e[i]=!(t[i]=a))}}else p=Te(p===t?p.splice(l,p.length):p),y?y(null,t,p,r):H.apply(t,p)})}function Ee(e){for(var i,t,n,r=e.length,o=b.relative[e[0].type],a=o||b.relative[\" \"],s=o?1:0,u=be(function(e){return e===i},a,!0),l=be(function(e){return-1<P(i,e)},a,!0),c=[function(e,t,n){var r=!o&&(n||t!==w)||((i=t).nodeType?u(e,t,n):l(e,t,n));return i=null,r}];s<r;s++)if(t=b.relative[e[s].type])c=[be(we(c),t)];else{if((t=b.filter[e[s].type].apply(null,e[s].matches))[k]){for(n=++s;n<r;n++)if(b.relative[e[n].type])break;return Ce(1<s&&we(c),1<s&&xe(e.slice(0,s-1).concat({value:\" \"===e[s-2].type?\"*\":\"\"})).replace(B,\"$1\"),t,s<n&&Ee(e.slice(s,n)),n<r&&Ee(e=e.slice(n)),n<r&&xe(e))}c.push(t)}return we(c)}return me.prototype=b.filters=b.pseudos,b.setFilters=new me,h=se.tokenize=function(e,t){var n,r,i,o,a,s,u,l=x[e+\" \"];if(l)return t?0:l.slice(0);a=e,s=[],u=b.preFilter;while(a){for(o in n&&!(r=_.exec(a))||(r&&(a=a.slice(r[0].length)||a),s.push(i=[])),n=!1,(r=z.exec(a))&&(n=r.shift(),i.push({value:n,type:r[0].replace(B,\" \")}),a=a.slice(n.length)),b.filter)!(r=G[o].exec(a))||u[o]&&!(r=u[o](r))||(n=r.shift(),i.push({value:n,type:o,matches:r}),a=a.slice(n.length));if(!n)break}return t?a.length:a?se.error(e):x(e,s).slice(0)},f=se.compile=function(e,t){var n,v,y,m,x,r,i=[],o=[],a=N[e+\" \"];if(!a){t||(t=h(e)),n=t.length;while(n--)(a=Ee(t[n]))[k]?i.push(a):o.push(a);(a=N(e,(v=o,m=0<(y=i).length,x=0<v.length,r=function(e,t,n,r,i){var o,a,s,u=0,l=\"0\",c=e&&[],f=[],p=w,d=e||x&&b.find.TAG(\"*\",i),h=S+=null==p?1:Math.random()||.1,g=d.length;for(i&&(w=t===C||t||i);l!==g&&null!=(o=d[l]);l++){if(x&&o){a=0,t||o.ownerDocument===C||(T(o),n=!E);while(s=v[a++])if(s(o,t||C,n)){r.push(o);break}i&&(S=h)}m&&((o=!s&&o)&&u--,e&&c.push(o))}if(u+=l,m&&l!==u){a=0;while(s=y[a++])s(c,f,t,n);if(e){if(0<u)while(l--)c[l]||f[l]||(f[l]=q.call(r));f=Te(f)}H.apply(r,f),i&&!e&&0<f.length&&1<u+y.length&&se.uniqueSort(r)}return i&&(S=h,w=p),c},m?le(r):r))).selector=e}return a},g=se.select=function(e,t,n,r){var i,o,a,s,u,l=\"function\"==typeof e&&e,c=!r&&h(e=l.selector||e);if(n=n||[],1===c.length){if(2<(o=c[0]=c[0].slice(0)).length&&\"ID\"===(a=o[0]).type&&9===t.nodeType&&E&&b.relative[o[1].type]){if(!(t=(b.find.ID(a.matches[0].replace(te,ne),t)||[])[0]))return n;l&&(t=t.parentNode),e=e.slice(o.shift().value.length)}i=G.needsContext.test(e)?0:o.length;while(i--){if(a=o[i],b.relative[s=a.type])break;if((u=b.find[s])&&(r=u(a.matches[0].replace(te,ne),ee.test(o[0].type)&&ye(t.parentNode)||t))){if(o.splice(i,1),!(e=r.length&&xe(o)))return H.apply(n,r),n;break}}}return(l||f(e,c))(r,t,!E,n,!t||ee.test(e)&&ye(t.parentNode)||t),n},d.sortStable=k.split(\"\").sort(D).join(\"\")===k,d.detectDuplicates=!!l,T(),d.sortDetached=ce(function(e){return 1&e.compareDocumentPosition(C.createElement(\"fieldset\"))}),ce(function(e){return e.innerHTML=\"<a href='#'></a>\",\"#\"===e.firstChild.getAttribute(\"href\")})||fe(\"type|href|height|width\",function(e,t,n){if(!n)return e.getAttribute(t,\"type\"===t.toLowerCase()?1:2)}),d.attributes&&ce(function(e){return e.innerHTML=\"<input/>\",e.firstChild.setAttribute(\"value\",\"\"),\"\"===e.firstChild.getAttribute(\"value\")})||fe(\"value\",function(e,t,n){if(!n&&\"input\"===e.nodeName.toLowerCase())return e.defaultValue}),ce(function(e){return null==e.getAttribute(\"disabled\")})||fe(R,function(e,t,n){var r;if(!n)return!0===e[t]?t.toLowerCase():(r=e.getAttributeNode(t))&&r.specified?r.value:null}),se}(C);k.find=h,k.expr=h.selectors,k.expr[\":\"]=k.expr.pseudos,k.uniqueSort=k.unique=h.uniqueSort,k.text=h.getText,k.isXMLDoc=h.isXML,k.contains=h.contains,k.escapeSelector=h.escape;var T=function(e,t,n){var r=[],i=void 0!==n;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&k(e).is(n))break;r.push(e)}return r},S=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},N=k.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var D=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;function j(e,n,r){return m(n)?k.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?k.grep(e,function(e){return e===n!==r}):\"string\"!=typeof n?k.grep(e,function(e){return-1<i.call(n,e)!==r}):k.filter(n,e,r)}k.filter=function(e,t,n){var r=t[0];return n&&(e=\":not(\"+e+\")\"),1===t.length&&1===r.nodeType?k.find.matchesSelector(r,e)?[r]:[]:k.find.matches(e,k.grep(t,function(e){return 1===e.nodeType}))},k.fn.extend({find:function(e){var t,n,r=this.length,i=this;if(\"string\"!=typeof e)return this.pushStack(k(e).filter(function(){for(t=0;t<r;t++)if(k.contains(i[t],this))return!0}));for(n=this.pushStack([]),t=0;t<r;t++)k.find(e,i[t],n);return 1<r?k.uniqueSort(n):n},filter:function(e){return this.pushStack(j(this,e||[],!1))},not:function(e){return this.pushStack(j(this,e||[],!0))},is:function(e){return!!j(this,\"string\"==typeof e&&N.test(e)?k(e):e||[],!1).length}});var q,L=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(k.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||q,\"string\"==typeof e){if(!(r=\"<\"===e[0]&&\">\"===e[e.length-1]&&3<=e.length?[null,e,null]:L.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof k?t[0]:t,k.merge(this,k.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),D.test(r[1])&&k.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(k):k.makeArray(e,this)}).prototype=k.fn,q=k(E);var H=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}k.fn.extend({has:function(e){var t=k(e,this),n=t.length;return this.filter(function(){for(var e=0;e<n;e++)if(k.contains(this,t[e]))return!0})},closest:function(e,t){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof e&&k(e);if(!N.test(e))for(;r<i;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(n.nodeType<11&&(a?-1<a.index(n):1===n.nodeType&&k.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(1<o.length?k.uniqueSort(o):o)},index:function(e){return e?\"string\"==typeof e?i.call(k(e),this[0]):i.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(k.uniqueSort(k.merge(this.get(),k(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),k.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return T(e,\"parentNode\")},parentsUntil:function(e,t,n){return T(e,\"parentNode\",n)},next:function(e){return P(e,\"nextSibling\")},prev:function(e){return P(e,\"previousSibling\")},nextAll:function(e){return T(e,\"nextSibling\")},prevAll:function(e){return T(e,\"previousSibling\")},nextUntil:function(e,t,n){return T(e,\"nextSibling\",n)},prevUntil:function(e,t,n){return T(e,\"previousSibling\",n)},siblings:function(e){return S((e.parentNode||{}).firstChild,e)},children:function(e){return S(e.firstChild)},contents:function(e){return\"undefined\"!=typeof e.contentDocument?e.contentDocument:(A(e,\"template\")&&(e=e.content||e),k.merge([],e.childNodes))}},function(r,i){k.fn[r]=function(e,t){var n=k.map(this,i,e);return\"Until\"!==r.slice(-5)&&(t=e),t&&\"string\"==typeof t&&(n=k.filter(t,n)),1<this.length&&(O[r]||k.uniqueSort(n),H.test(r)&&n.reverse()),this.pushStack(n)}});var R=/[^\\x20\\t\\r\\n\\f]+/g;function M(e){return e}function I(e){throw e}function W(e,t,n,r){var i;try{e&&m(i=e.promise)?i.call(e).done(t).fail(n):e&&m(i=e.then)?i.call(e,t,n):t.apply(void 0,[e].slice(r))}catch(e){n.apply(void 0,[e])}}k.Callbacks=function(r){var e,n;r=\"string\"==typeof r?(e=r,n={},k.each(e.match(R)||[],function(e,t){n[t]=!0}),n):k.extend({},r);var i,t,o,a,s=[],u=[],l=-1,c=function(){for(a=a||r.once,o=i=!0;u.length;l=-1){t=u.shift();while(++l<s.length)!1===s[l].apply(t[0],t[1])&&r.stopOnFalse&&(l=s.length,t=!1)}r.memory||(t=!1),i=!1,a&&(s=t?[]:\"\")},f={add:function(){return s&&(t&&!i&&(l=s.length-1,u.push(t)),function n(e){k.each(e,function(e,t){m(t)?r.unique&&f.has(t)||s.push(t):t&&t.length&&\"string\"!==w(t)&&n(t)})}(arguments),t&&!i&&c()),this},remove:function(){return k.each(arguments,function(e,t){var n;while(-1<(n=k.inArray(t,s,n)))s.splice(n,1),n<=l&&l--}),this},has:function(e){return e?-1<k.inArray(e,s):0<s.length},empty:function(){return s&&(s=[]),this},disable:function(){return a=u=[],s=t=\"\",this},disabled:function(){return!s},lock:function(){return a=u=[],t||i||(s=t=\"\"),this},locked:function(){return!!a},fireWith:function(e,t){return a||(t=[e,(t=t||[]).slice?t.slice():t],u.push(t),i||c()),this},fire:function(){return f.fireWith(this,arguments),this},fired:function(){return!!o}};return f},k.extend({Deferred:function(e){var o=[[\"notify\",\"progress\",k.Callbacks(\"memory\"),k.Callbacks(\"memory\"),2],[\"resolve\",\"done\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",k.Callbacks(\"once memory\"),k.Callbacks(\"once memory\"),1,\"rejected\"]],i=\"pending\",a={state:function(){return i},always:function(){return s.done(arguments).fail(arguments),this},\"catch\":function(e){return a.then(null,e)},pipe:function(){var i=arguments;return k.Deferred(function(r){k.each(o,function(e,t){var n=m(i[t[4]])&&i[t[4]];s[t[1]](function(){var e=n&&n.apply(this,arguments);e&&m(e.promise)?e.promise().progress(r.notify).done(r.resolve).fail(r.reject):r[t[0]+\"With\"](this,n?[e]:arguments)})}),i=null}).promise()},then:function(t,n,r){var u=0;function l(i,o,a,s){return function(){var n=this,r=arguments,e=function(){var e,t;if(!(i<u)){if((e=a.apply(n,r))===o.promise())throw new TypeError(\"Thenable self-resolution\");t=e&&(\"object\"==typeof e||\"function\"==typeof e)&&e.then,m(t)?s?t.call(e,l(u,o,M,s),l(u,o,I,s)):(u++,t.call(e,l(u,o,M,s),l(u,o,I,s),l(u,o,M,o.notifyWith))):(a!==M&&(n=void 0,r=[e]),(s||o.resolveWith)(n,r))}},t=s?e:function(){try{e()}catch(e){k.Deferred.exceptionHook&&k.Deferred.exceptionHook(e,t.stackTrace),u<=i+1&&(a!==I&&(n=void 0,r=[e]),o.rejectWith(n,r))}};i?t():(k.Deferred.getStackHook&&(t.stackTrace=k.Deferred.getStackHook()),C.setTimeout(t))}}return k.Deferred(function(e){o[0][3].add(l(0,e,m(r)?r:M,e.notifyWith)),o[1][3].add(l(0,e,m(t)?t:M)),o[2][3].add(l(0,e,m(n)?n:I))}).promise()},promise:function(e){return null!=e?k.extend(e,a):a}},s={};return k.each(o,function(e,t){var n=t[2],r=t[5];a[t[1]]=n.add,r&&n.add(function(){i=r},o[3-e][2].disable,o[3-e][3].disable,o[0][2].lock,o[0][3].lock),n.add(t[3].fire),s[t[0]]=function(){return s[t[0]+\"With\"](this===s?void 0:this,arguments),this},s[t[0]+\"With\"]=n.fireWith}),a.promise(s),e&&e.call(s,s),s},when:function(e){var n=arguments.length,t=n,r=Array(t),i=s.call(arguments),o=k.Deferred(),a=function(t){return function(e){r[t]=this,i[t]=1<arguments.length?s.call(arguments):e,--n||o.resolveWith(r,i)}};if(n<=1&&(W(e,o.done(a(t)).resolve,o.reject,!n),\"pending\"===o.state()||m(i[t]&&i[t].then)))return o.then();while(t--)W(i[t],a(t),o.reject);return o.promise()}});var $=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;k.Deferred.exceptionHook=function(e,t){C.console&&C.console.warn&&e&&$.test(e.name)&&C.console.warn(\"jQuery.Deferred exception: \"+e.message,e.stack,t)},k.readyException=function(e){C.setTimeout(function(){throw e})};var F=k.Deferred();function B(){E.removeEventListener(\"DOMContentLoaded\",B),C.removeEventListener(\"load\",B),k.ready()}k.fn.ready=function(e){return F.then(e)[\"catch\"](function(e){k.readyException(e)}),this},k.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--k.readyWait:k.isReady)||(k.isReady=!0)!==e&&0<--k.readyWait||F.resolveWith(E,[k])}}),k.ready.then=F.then,\"complete\"===E.readyState||\"loading\"!==E.readyState&&!E.documentElement.doScroll?C.setTimeout(k.ready):(E.addEventListener(\"DOMContentLoaded\",B),C.addEventListener(\"load\",B));var _=function(e,t,n,r,i,o,a){var s=0,u=e.length,l=null==n;if(\"object\"===w(n))for(s in i=!0,n)_(e,t,s,n[s],!0,o,a);else if(void 0!==r&&(i=!0,m(r)||(a=!0),l&&(a?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(k(e),n)})),t))for(;s<u;s++)t(e[s],n,a?r:r.call(e[s],s,t(e[s],n)));return i?e:l?t.call(e):u?t(e[0],n):o},z=/^-ms-/,U=/-([a-z])/g;function X(e,t){return t.toUpperCase()}function V(e){return e.replace(z,\"ms-\").replace(U,X)}var G=function(e){return 1===e.nodeType||9===e.nodeType||!+e.nodeType};function Y(){this.expando=k.expando+Y.uid++}Y.uid=1,Y.prototype={cache:function(e){var t=e[this.expando];return t||(t={},G(e)&&(e.nodeType?e[this.expando]=t:Object.defineProperty(e,this.expando,{value:t,configurable:!0}))),t},set:function(e,t,n){var r,i=this.cache(e);if(\"string\"==typeof t)i[V(t)]=n;else for(r in t)i[V(r)]=t[r];return i},get:function(e,t){return void 0===t?this.cache(e):e[this.expando]&&e[this.expando][V(t)]},access:function(e,t,n){return void 0===t||t&&\"string\"==typeof t&&void 0===n?this.get(e,t):(this.set(e,t,n),void 0!==n?n:t)},remove:function(e,t){var n,r=e[this.expando];if(void 0!==r){if(void 0!==t){n=(t=Array.isArray(t)?t.map(V):(t=V(t))in r?[t]:t.match(R)||[]).length;while(n--)delete r[t[n]]}(void 0===t||k.isEmptyObject(r))&&(e.nodeType?e[this.expando]=void 0:delete e[this.expando])}},hasData:function(e){var t=e[this.expando];return void 0!==t&&!k.isEmptyObject(t)}};var Q=new Y,J=new Y,K=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Z=/[A-Z]/g;function ee(e,t,n){var r,i;if(void 0===n&&1===e.nodeType)if(r=\"data-\"+t.replace(Z,\"-$&\").toLowerCase(),\"string\"==typeof(n=e.getAttribute(r))){try{n=\"true\"===(i=n)||\"false\"!==i&&(\"null\"===i?null:i===+i+\"\"?+i:K.test(i)?JSON.parse(i):i)}catch(e){}J.set(e,t,n)}else n=void 0;return n}k.extend({hasData:function(e){return J.hasData(e)||Q.hasData(e)},data:function(e,t,n){return J.access(e,t,n)},removeData:function(e,t){J.remove(e,t)},_data:function(e,t,n){return Q.access(e,t,n)},_removeData:function(e,t){Q.remove(e,t)}}),k.fn.extend({data:function(n,e){var t,r,i,o=this[0],a=o&&o.attributes;if(void 0===n){if(this.length&&(i=J.get(o),1===o.nodeType&&!Q.get(o,\"hasDataAttrs\"))){t=a.length;while(t--)a[t]&&0===(r=a[t].name).indexOf(\"data-\")&&(r=V(r.slice(5)),ee(o,r,i[r]));Q.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof n?this.each(function(){J.set(this,n)}):_(this,function(e){var t;if(o&&void 0===e)return void 0!==(t=J.get(o,n))?t:void 0!==(t=ee(o,n))?t:void 0;this.each(function(){J.set(this,n,e)})},null,e,1<arguments.length,null,!0)},removeData:function(e){return this.each(function(){J.remove(this,e)})}}),k.extend({queue:function(e,t,n){var r;if(e)return t=(t||\"fx\")+\"queue\",r=Q.get(e,t),n&&(!r||Array.isArray(n)?r=Q.access(e,t,k.makeArray(n)):r.push(n)),r||[]},dequeue:function(e,t){t=t||\"fx\";var n=k.queue(e,t),r=n.length,i=n.shift(),o=k._queueHooks(e,t);\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===t&&n.unshift(\"inprogress\"),delete o.stop,i.call(e,function(){k.dequeue(e,t)},o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+\"queueHooks\";return Q.get(e,n)||Q.access(e,n,{empty:k.Callbacks(\"once memory\").add(function(){Q.remove(e,[t+\"queue\",n])})})}}),k.fn.extend({queue:function(t,n){var e=2;return\"string\"!=typeof t&&(n=t,t=\"fx\",e--),arguments.length<e?k.queue(this[0],t):void 0===n?this:this.each(function(){var e=k.queue(this,t,n);k._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==e[0]&&k.dequeue(this,t)})},dequeue:function(e){return this.each(function(){k.dequeue(this,e)})},clearQueue:function(e){return this.queue(e||\"fx\",[])},promise:function(e,t){var n,r=1,i=k.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};\"string\"!=typeof e&&(t=e,e=void 0),e=e||\"fx\";while(a--)(n=Q.get(o[a],e+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(t)}});var te=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,ne=new RegExp(\"^(?:([+-])=|)(\"+te+\")([a-z%]*)$\",\"i\"),re=[\"Top\",\"Right\",\"Bottom\",\"Left\"],ie=E.documentElement,oe=function(e){return k.contains(e.ownerDocument,e)},ae={composed:!0};ie.getRootNode&&(oe=function(e){return k.contains(e.ownerDocument,e)||e.getRootNode(ae)===e.ownerDocument});var se=function(e,t){return\"none\"===(e=t||e).style.display||\"\"===e.style.display&&oe(e)&&\"none\"===k.css(e,\"display\")},ue=function(e,t,n,r){var i,o,a={};for(o in t)a[o]=e.style[o],e.style[o]=t[o];for(o in i=n.apply(e,r||[]),t)e.style[o]=a[o];return i};function le(e,t,n,r){var i,o,a=20,s=r?function(){return r.cur()}:function(){return k.css(e,t,\"\")},u=s(),l=n&&n[3]||(k.cssNumber[t]?\"\":\"px\"),c=e.nodeType&&(k.cssNumber[t]||\"px\"!==l&&+u)&&ne.exec(k.css(e,t));if(c&&c[3]!==l){u/=2,l=l||c[3],c=+u||1;while(a--)k.style(e,t,c+l),(1-o)*(1-(o=s()/u||.5))<=0&&(a=0),c/=o;c*=2,k.style(e,t,c+l),n=n||[]}return n&&(c=+c||+u||0,i=n[1]?c+(n[1]+1)*n[2]:+n[2],r&&(r.unit=l,r.start=c,r.end=i)),i}var ce={};function fe(e,t){for(var n,r,i,o,a,s,u,l=[],c=0,f=e.length;c<f;c++)(r=e[c]).style&&(n=r.style.display,t?(\"none\"===n&&(l[c]=Q.get(r,\"display\")||null,l[c]||(r.style.display=\"\")),\"\"===r.style.display&&se(r)&&(l[c]=(u=a=o=void 0,a=(i=r).ownerDocument,s=i.nodeName,(u=ce[s])||(o=a.body.appendChild(a.createElement(s)),u=k.css(o,\"display\"),o.parentNode.removeChild(o),\"none\"===u&&(u=\"block\"),ce[s]=u)))):\"none\"!==n&&(l[c]=\"none\",Q.set(r,\"display\",n)));for(c=0;c<f;c++)null!=l[c]&&(e[c].style.display=l[c]);return e}k.fn.extend({show:function(){return fe(this,!0)},hide:function(){return fe(this)},toggle:function(e){return\"boolean\"==typeof e?e?this.show():this.hide():this.each(function(){se(this)?k(this).show():k(this).hide()})}});var pe=/^(?:checkbox|radio)$/i,de=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,he=/^$|^module$|\\/(?:java|ecma)script/i,ge={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};function ve(e,t){var n;return n=\"undefined\"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||\"*\"):\"undefined\"!=typeof e.querySelectorAll?e.querySelectorAll(t||\"*\"):[],void 0===t||t&&A(e,t)?k.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n<r;n++)Q.set(e[n],\"globalEval\",!t||Q.get(t[n],\"globalEval\"))}ge.optgroup=ge.option,ge.tbody=ge.tfoot=ge.colgroup=ge.caption=ge.thead,ge.th=ge.td;var me,xe,be=/<|&#?\\w+;/;function we(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d<h;d++)if((o=e[d])||0===o)if(\"object\"===w(o))k.merge(p,o.nodeType?[o]:o);else if(be.test(o)){a=a||f.appendChild(t.createElement(\"div\")),s=(de.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=ge[s]||ge._default,a.innerHTML=u[1]+k.htmlPrefilter(o)+u[2],c=u[0];while(c--)a=a.lastChild;k.merge(p,a.childNodes),(a=f.firstChild).textContent=\"\"}else p.push(t.createTextNode(o));f.textContent=\"\",d=0;while(o=p[d++])if(r&&-1<k.inArray(o,r))i&&i.push(o);else if(l=oe(o),a=ve(f.appendChild(o),\"script\"),l&&ye(a),n){c=0;while(o=a[c++])he.test(o.type||\"\")&&n.push(o)}return f}me=E.createDocumentFragment().appendChild(E.createElement(\"div\")),(xe=E.createElement(\"input\")).setAttribute(\"type\",\"radio\"),xe.setAttribute(\"checked\",\"checked\"),xe.setAttribute(\"name\",\"t\"),me.appendChild(xe),y.checkClone=me.cloneNode(!0).cloneNode(!0).lastChild.checked,me.innerHTML=\"<textarea>x</textarea>\",y.noCloneChecked=!!me.cloneNode(!0).lastChild.defaultValue;var Te=/^key/,Ce=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Ee=/^([^.]*)(?:\\.(.+)|)/;function ke(){return!0}function Se(){return!1}function Ne(e,t){return e===function(){try{return E.activeElement}catch(e){}}()==(\"focus\"===t)}function Ae(e,t,n,r,i,o){var a,s;if(\"object\"==typeof t){for(s in\"string\"!=typeof n&&(r=r||n,n=void 0),t)Ae(e,s,n,r,t[s],o);return e}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=Se;else if(!i)return e;return 1===o&&(a=i,(i=function(e){return k().off(e),a.apply(this,arguments)}).guid=a.guid||(a.guid=k.guid++)),e.each(function(){k.event.add(this,t,i,r,n)})}function De(e,i,o){o?(Q.set(e,i,!1),k.event.add(e,i,{namespace:!1,handler:function(e){var t,n,r=Q.get(this,i);if(1&e.isTrigger&&this[i]){if(r.length)(k.event.special[i]||{}).delegateType&&e.stopPropagation();else if(r=s.call(arguments),Q.set(this,i,r),t=o(this,i),this[i](),r!==(n=Q.get(this,i))||t?Q.set(this,i,!1):n={},r!==n)return e.stopImmediatePropagation(),e.preventDefault(),n.value}else r.length&&(Q.set(this,i,{value:k.event.trigger(k.extend(r[0],k.Event.prototype),r.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Q.get(e,i)&&k.event.add(e,i,ke)}k.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.get(t);if(v){n.handler&&(n=(o=n).handler,i=o.selector),i&&k.find.matchesSelector(ie,i),n.guid||(n.guid=k.guid++),(u=v.events)||(u=v.events={}),(a=v.handle)||(a=v.handle=function(e){return\"undefined\"!=typeof k&&k.event.triggered!==e.type?k.event.dispatch.apply(t,arguments):void 0}),l=(e=(e||\"\").match(R)||[\"\"]).length;while(l--)d=g=(s=Ee.exec(e[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=k.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=k.event.special[d]||{},c=k.extend({type:d,origType:g,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&k.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||((p=u[d]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,c),c.handler.guid||(c.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,c):p.push(c),k.event.global[d]=!0)}},remove:function(e,t,n,r,i){var o,a,s,u,l,c,f,p,d,h,g,v=Q.hasData(e)&&Q.get(e);if(v&&(u=v.events)){l=(t=(t||\"\").match(R)||[\"\"]).length;while(l--)if(d=g=(s=Ee.exec(t[l])||[])[1],h=(s[2]||\"\").split(\".\").sort(),d){f=k.event.special[d]||{},p=u[d=(r?f.delegateType:f.bindType)||d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||s&&!s.test(c.namespace)||r&&r!==c.selector&&(\"**\"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(e,h,v.handle)||k.removeEvent(e,d,v.handle),delete u[d])}else for(d in u)k.event.remove(e,d+t[l],n,r,!0);k.isEmptyObject(u)&&Q.remove(e,\"handle events\")}},dispatch:function(e){var t,n,r,i,o,a,s=k.event.fix(e),u=new Array(arguments.length),l=(Q.get(this,\"events\")||{})[s.type]||[],c=k.event.special[s.type]||{};for(u[0]=s,t=1;t<arguments.length;t++)u[t]=arguments[t];if(s.delegateTarget=this,!c.preDispatch||!1!==c.preDispatch.call(this,s)){a=k.event.handlers.call(this,s,l),t=0;while((i=a[t++])&&!s.isPropagationStopped()){s.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!s.isImmediatePropagationStopped())s.rnamespace&&!1!==o.namespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((k.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()))}return c.postDispatch&&c.postDispatch.call(this,s),s.result}},handlers:function(e,t){var n,r,i,o,a,s=[],u=t.delegateCount,l=e.target;if(u&&l.nodeType&&!(\"click\"===e.type&&1<=e.button))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&(\"click\"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n<u;n++)void 0===a[i=(r=t[n]).selector+\" \"]&&(a[i]=r.needsContext?-1<k(i,this).index(l):k.find(i,this,null,[l]).length),a[i]&&o.push(r);o.length&&s.push({elem:l,handlers:o})}return l=this,u<t.length&&s.push({elem:l,handlers:t.slice(u)}),s},addProp:function(t,e){Object.defineProperty(k.Event.prototype,t,{enumerable:!0,configurable:!0,get:m(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(e){return e[k.expando]?e:new k.Event(e)},special:{load:{noBubble:!0},click:{setup:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&De(t,\"click\",ke),!1},trigger:function(e){var t=this||e;return pe.test(t.type)&&t.click&&A(t,\"input\")&&De(t,\"click\"),!0},_default:function(e){var t=e.target;return pe.test(t.type)&&t.click&&A(t,\"input\")&&Q.get(t,\"click\")||A(t,\"a\")}},beforeunload:{postDispatch:function(e){void 0!==e.result&&e.originalEvent&&(e.originalEvent.returnValue=e.result)}}}},k.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n)},k.Event=function(e,t){if(!(this instanceof k.Event))return new k.Event(e,t);e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||void 0===e.defaultPrevented&&!1===e.returnValue?ke:Se,this.target=e.target&&3===e.target.nodeType?e.target.parentNode:e.target,this.currentTarget=e.currentTarget,this.relatedTarget=e.relatedTarget):this.type=e,t&&k.extend(this,t),this.timeStamp=e&&e.timeStamp||Date.now(),this[k.expando]=!0},k.Event.prototype={constructor:k.Event,isDefaultPrevented:Se,isPropagationStopped:Se,isImmediatePropagationStopped:Se,isSimulated:!1,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=ke,e&&!this.isSimulated&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=ke,e&&!this.isSimulated&&e.stopPropagation()},stopImmediatePropagation:function(){var e=this.originalEvent;this.isImmediatePropagationStopped=ke,e&&!this.isSimulated&&e.stopImmediatePropagation(),this.stopPropagation()}},k.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,\"char\":!0,code:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(e){var t=e.button;return null==e.which&&Te.test(e.type)?null!=e.charCode?e.charCode:e.keyCode:!e.which&&void 0!==t&&Ce.test(e.type)?1&t?1:2&t?3:4&t?2:0:e.which}},k.event.addProp),k.each({focus:\"focusin\",blur:\"focusout\"},function(e,t){k.event.special[e]={setup:function(){return De(this,e,Ne),!1},trigger:function(){return De(this,e),!0},delegateType:t}}),k.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(e,i){k.event.special[e]={delegateType:i,bindType:i,handle:function(e){var t,n=e.relatedTarget,r=e.handleObj;return n&&(n===this||k.contains(this,n))||(e.type=r.origType,t=r.handler.apply(this,arguments),e.type=i),t}}}),k.fn.extend({on:function(e,t,n,r){return Ae(this,e,t,n,r)},one:function(e,t,n,r){return Ae(this,e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,k(e.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return!1!==t&&\"function\"!=typeof t||(n=t,t=void 0),!1===n&&(n=Se),this.each(function(){k.event.remove(this,e,n,t)})}});var je=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,qe=/<script|<style|<link/i,Le=/checked\\s*(?:[^=]|=\\s*.checked.)/i,He=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;function Oe(e,t){return A(e,\"table\")&&A(11!==t.nodeType?t:t.firstChild,\"tr\")&&k(e).children(\"tbody\")[0]||e}function Pe(e){return e.type=(null!==e.getAttribute(\"type\"))+\"/\"+e.type,e}function Re(e){return\"true/\"===(e.type||\"\").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute(\"type\"),e}function Me(e,t){var n,r,i,o,a,s,u,l;if(1===t.nodeType){if(Q.hasData(e)&&(o=Q.access(e),a=Q.set(t,o),l=o.events))for(i in delete a.handle,a.events={},l)for(n=0,r=l[i].length;n<r;n++)k.event.add(t,i,l[i][n]);J.hasData(e)&&(s=J.access(e),u=k.extend({},s),J.set(t,u))}}function Ie(n,r,i,o){r=g.apply([],r);var e,t,a,s,u,l,c=0,f=n.length,p=f-1,d=r[0],h=m(d);if(h||1<f&&\"string\"==typeof d&&!y.checkClone&&Le.test(d))return n.each(function(e){var t=n.eq(e);h&&(r[0]=d.call(this,e,t.html())),Ie(t,r,i,o)});if(f&&(t=(e=we(r,n[0].ownerDocument,!1,n,o)).firstChild,1===e.childNodes.length&&(e=t),t||o)){for(s=(a=k.map(ve(e,\"script\"),Pe)).length;c<f;c++)u=e,c!==p&&(u=k.clone(u,!0,!0),s&&k.merge(a,ve(u,\"script\"))),i.call(n[c],u,c);if(s)for(l=a[a.length-1].ownerDocument,k.map(a,Re),c=0;c<s;c++)u=a[c],he.test(u.type||\"\")&&!Q.access(u,\"globalEval\")&&k.contains(l,u)&&(u.src&&\"module\"!==(u.type||\"\").toLowerCase()?k._evalUrl&&!u.noModule&&k._evalUrl(u.src,{nonce:u.nonce||u.getAttribute(\"nonce\")}):b(u.textContent.replace(He,\"\"),u,l))}return n}function We(e,t,n){for(var r,i=t?k.filter(t,e):e,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||k.cleanData(ve(r)),r.parentNode&&(n&&oe(r)&&ye(ve(r,\"script\")),r.parentNode.removeChild(r));return e}k.extend({htmlPrefilter:function(e){return e.replace(je,\"<$1></$2>\")},clone:function(e,t,n){var r,i,o,a,s,u,l,c=e.cloneNode(!0),f=oe(e);if(!(y.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||k.isXMLDoc(e)))for(a=ve(c),r=0,i=(o=ve(e)).length;r<i;r++)s=o[r],u=a[r],void 0,\"input\"===(l=u.nodeName.toLowerCase())&&pe.test(s.type)?u.checked=s.checked:\"input\"!==l&&\"textarea\"!==l||(u.defaultValue=s.defaultValue);if(t)if(n)for(o=o||ve(e),a=a||ve(c),r=0,i=o.length;r<i;r++)Me(o[r],a[r]);else Me(e,c);return 0<(a=ve(c,\"script\")).length&&ye(a,!f&&ve(e,\"script\")),c},cleanData:function(e){for(var t,n,r,i=k.event.special,o=0;void 0!==(n=e[o]);o++)if(G(n)){if(t=n[Q.expando]){if(t.events)for(r in t.events)i[r]?k.event.remove(n,r):k.removeEvent(n,r,t.handle);n[Q.expando]=void 0}n[J.expando]&&(n[J.expando]=void 0)}}}),k.fn.extend({detach:function(e){return We(this,e,!0)},remove:function(e){return We(this,e)},text:function(e){return _(this,function(e){return void 0===e?k.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)})},null,e,arguments.length)},append:function(){return Ie(this,arguments,function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||Oe(this,e).appendChild(e)})},prepend:function(){return Ie(this,arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=Oe(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return Ie(this,arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(k.cleanData(ve(e,!1)),e.textContent=\"\");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map(function(){return k.clone(this,e,t)})},html:function(e){return _(this,function(e){var t=this[0]||{},n=0,r=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if(\"string\"==typeof e&&!qe.test(e)&&!ge[(de.exec(e)||[\"\",\"\"])[1].toLowerCase()]){e=k.htmlPrefilter(e);try{for(;n<r;n++)1===(t=this[n]||{}).nodeType&&(k.cleanData(ve(t,!1)),t.innerHTML=e);t=0}catch(e){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var n=[];return Ie(this,arguments,function(e){var t=this.parentNode;k.inArray(this,n)<0&&(k.cleanData(ve(this)),t&&t.replaceChild(e,this))},n)}}),k.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(e,a){k.fn[e]=function(e){for(var t,n=[],r=k(e),i=r.length-1,o=0;o<=i;o++)t=o===i?this:this.clone(!0),k(r[o])[a](t),u.apply(n,t.get());return this.pushStack(n)}});var $e=new RegExp(\"^(\"+te+\")(?!px)[a-z%]+$\",\"i\"),Fe=function(e){var t=e.ownerDocument.defaultView;return t&&t.opener||(t=C),t.getComputedStyle(e)},Be=new RegExp(re.join(\"|\"),\"i\");function _e(e,t,n){var r,i,o,a,s=e.style;return(n=n||Fe(e))&&(\"\"!==(a=n.getPropertyValue(t)||n[t])||oe(e)||(a=k.style(e,t)),!y.pixelBoxStyles()&&$e.test(a)&&Be.test(t)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function ze(e,t){return{get:function(){if(!e())return(this.get=t).apply(this,arguments);delete this.get}}}!function(){function e(){if(u){s.style.cssText=\"position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0\",u.style.cssText=\"position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%\",ie.appendChild(s).appendChild(u);var e=C.getComputedStyle(u);n=\"1%\"!==e.top,a=12===t(e.marginLeft),u.style.right=\"60%\",o=36===t(e.right),r=36===t(e.width),u.style.position=\"absolute\",i=12===t(u.offsetWidth/3),ie.removeChild(s),u=null}}function t(e){return Math.round(parseFloat(e))}var n,r,i,o,a,s=E.createElement(\"div\"),u=E.createElement(\"div\");u.style&&(u.style.backgroundClip=\"content-box\",u.cloneNode(!0).style.backgroundClip=\"\",y.clearCloneStyle=\"content-box\"===u.style.backgroundClip,k.extend(y,{boxSizingReliable:function(){return e(),r},pixelBoxStyles:function(){return e(),o},pixelPosition:function(){return e(),n},reliableMarginLeft:function(){return e(),a},scrollboxSize:function(){return e(),i}}))}();var Ue=[\"Webkit\",\"Moz\",\"ms\"],Xe=E.createElement(\"div\").style,Ve={};function Ge(e){var t=k.cssProps[e]||Ve[e];return t||(e in Xe?e:Ve[e]=function(e){var t=e[0].toUpperCase()+e.slice(1),n=Ue.length;while(n--)if((e=Ue[n]+t)in Xe)return e}(e)||e)}var Ye=/^(none|table(?!-c[ea]).+)/,Qe=/^--/,Je={position:\"absolute\",visibility:\"hidden\",display:\"block\"},Ke={letterSpacing:\"0\",fontWeight:\"400\"};function Ze(e,t,n){var r=ne.exec(t);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):t}function et(e,t,n,r,i,o){var a=\"width\"===t?1:0,s=0,u=0;if(n===(r?\"border\":\"content\"))return 0;for(;a<4;a+=2)\"margin\"===n&&(u+=k.css(e,n+re[a],!0,i)),r?(\"content\"===n&&(u-=k.css(e,\"padding\"+re[a],!0,i)),\"margin\"!==n&&(u-=k.css(e,\"border\"+re[a]+\"Width\",!0,i))):(u+=k.css(e,\"padding\"+re[a],!0,i),\"padding\"!==n?u+=k.css(e,\"border\"+re[a]+\"Width\",!0,i):s+=k.css(e,\"border\"+re[a]+\"Width\",!0,i));return!r&&0<=o&&(u+=Math.max(0,Math.ceil(e[\"offset\"+t[0].toUpperCase()+t.slice(1)]-o-u-s-.5))||0),u}function tt(e,t,n){var r=Fe(e),i=(!y.boxSizingReliable()||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,r),o=i,a=_e(e,t,r),s=\"offset\"+t[0].toUpperCase()+t.slice(1);if($e.test(a)){if(!n)return a;a=\"auto\"}return(!y.boxSizingReliable()&&i||\"auto\"===a||!parseFloat(a)&&\"inline\"===k.css(e,\"display\",!1,r))&&e.getClientRects().length&&(i=\"border-box\"===k.css(e,\"boxSizing\",!1,r),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+et(e,t,n||(i?\"border\":\"content\"),o,r,a)+\"px\"}function nt(e,t,n,r,i){return new nt.prototype.init(e,t,n,r,i)}k.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=_e(e,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,a,s=V(t),u=Qe.test(t),l=e.style;if(u||(t=Ge(s)),a=k.cssHooks[t]||k.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(e,!1,r))?i:l[t];\"string\"===(o=typeof n)&&(i=ne.exec(n))&&i[1]&&(n=le(e,t,i),o=\"number\"),null!=n&&n==n&&(\"number\"!==o||u||(n+=i&&i[3]||(k.cssNumber[s]?\"\":\"px\")),y.clearCloneStyle||\"\"!==n||0!==t.indexOf(\"background\")||(l[t]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(e,n,r))||(u?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,r){var i,o,a,s=V(t);return Qe.test(t)||(t=Ge(s)),(a=k.cssHooks[t]||k.cssHooks[s])&&\"get\"in a&&(i=a.get(e,!0,n)),void 0===i&&(i=_e(e,t,r)),\"normal\"===i&&t in Ke&&(i=Ke[t]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),k.each([\"height\",\"width\"],function(e,u){k.cssHooks[u]={get:function(e,t,n){if(t)return!Ye.test(k.css(e,\"display\"))||e.getClientRects().length&&e.getBoundingClientRect().width?tt(e,u,n):ue(e,Je,function(){return tt(e,u,n)})},set:function(e,t,n){var r,i=Fe(e),o=!y.scrollboxSize()&&\"absolute\"===i.position,a=(o||n)&&\"border-box\"===k.css(e,\"boxSizing\",!1,i),s=n?et(e,u,n,a,i):0;return a&&o&&(s-=Math.ceil(e[\"offset\"+u[0].toUpperCase()+u.slice(1)]-parseFloat(i[u])-et(e,u,\"border\",!1,i)-.5)),s&&(r=ne.exec(t))&&\"px\"!==(r[3]||\"px\")&&(e.style[u]=t,t=k.css(e,u)),Ze(0,t,s)}}}),k.cssHooks.marginLeft=ze(y.reliableMarginLeft,function(e,t){if(t)return(parseFloat(_e(e,\"marginLeft\"))||e.getBoundingClientRect().left-ue(e,{marginLeft:0},function(){return e.getBoundingClientRect().left}))+\"px\"}),k.each({margin:\"\",padding:\"\",border:\"Width\"},function(i,o){k.cssHooks[i+o]={expand:function(e){for(var t=0,n={},r=\"string\"==typeof e?e.split(\" \"):[e];t<4;t++)n[i+re[t]+o]=r[t]||r[t-2]||r[0];return n}},\"margin\"!==i&&(k.cssHooks[i+o].set=Ze)}),k.fn.extend({css:function(e,t){return _(this,function(e,t,n){var r,i,o={},a=0;if(Array.isArray(t)){for(r=Fe(e),i=t.length;a<i;a++)o[t[a]]=k.css(e,t[a],!1,r);return o}return void 0!==n?k.style(e,t,n):k.css(e,t)},e,t,1<arguments.length)}}),((k.Tween=nt).prototype={constructor:nt,init:function(e,t,n,r,i,o){this.elem=e,this.prop=n,this.easing=i||k.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=r,this.unit=o||(k.cssNumber[n]?\"\":\"px\")},cur:function(){var e=nt.propHooks[this.prop];return e&&e.get?e.get(this):nt.propHooks._default.get(this)},run:function(e){var t,n=nt.propHooks[this.prop];return this.options.duration?this.pos=t=k.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):nt.propHooks._default.set(this),this}}).init.prototype=nt.prototype,(nt.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=k.css(e.elem,e.prop,\"\"))&&\"auto\"!==t?t:0},set:function(e){k.fx.step[e.prop]?k.fx.step[e.prop](e):1!==e.elem.nodeType||!k.cssHooks[e.prop]&&null==e.elem.style[Ge(e.prop)]?e.elem[e.prop]=e.now:k.style(e.elem,e.prop,e.now+e.unit)}}}).scrollTop=nt.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},k.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:\"swing\"},k.fx=nt.prototype.init,k.fx.step={};var rt,it,ot,at,st=/^(?:toggle|show|hide)$/,ut=/queueHooks$/;function lt(){it&&(!1===E.hidden&&C.requestAnimationFrame?C.requestAnimationFrame(lt):C.setTimeout(lt,k.fx.interval),k.fx.tick())}function ct(){return C.setTimeout(function(){rt=void 0}),rt=Date.now()}function ft(e,t){var n,r=0,i={height:e};for(t=t?1:0;r<4;r+=2-t)i[\"margin\"+(n=re[r])]=i[\"padding\"+n]=e;return t&&(i.opacity=i.width=e),i}function pt(e,t,n){for(var r,i=(dt.tweeners[t]||[]).concat(dt.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,t,e))return r}function dt(o,e,t){var n,a,r=0,i=dt.prefilters.length,s=k.Deferred().always(function(){delete u.elem}),u=function(){if(a)return!1;for(var e=rt||ct(),t=Math.max(0,l.startTime+l.duration-e),n=1-(t/l.duration||0),r=0,i=l.tweens.length;r<i;r++)l.tweens[r].run(n);return s.notifyWith(o,[l,n,t]),n<1&&i?t:(i||s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l]),!1)},l=s.promise({elem:o,props:k.extend({},e),opts:k.extend(!0,{specialEasing:{},easing:k.easing._default},t),originalProperties:e,originalOptions:t,startTime:rt||ct(),duration:t.duration,tweens:[],createTween:function(e,t){var n=k.Tween(o,l.opts,e,t,l.opts.specialEasing[e]||l.opts.easing);return l.tweens.push(n),n},stop:function(e){var t=0,n=e?l.tweens.length:0;if(a)return this;for(a=!0;t<n;t++)l.tweens[t].run(1);return e?(s.notifyWith(o,[l,1,0]),s.resolveWith(o,[l,e])):s.rejectWith(o,[l,e]),this}}),c=l.props;for(!function(e,t){var n,r,i,o,a;for(n in e)if(i=t[r=V(n)],o=e[n],Array.isArray(o)&&(i=o[1],o=e[n]=o[0]),n!==r&&(e[r]=o,delete e[n]),(a=k.cssHooks[r])&&\"expand\"in a)for(n in o=a.expand(o),delete e[r],o)n in e||(e[n]=o[n],t[n]=i);else t[r]=i}(c,l.opts.specialEasing);r<i;r++)if(n=dt.prefilters[r].call(l,o,c,l.opts))return m(n.stop)&&(k._queueHooks(l.elem,l.opts.queue).stop=n.stop.bind(n)),n;return k.map(c,pt,l),m(l.opts.start)&&l.opts.start.call(o,l),l.progress(l.opts.progress).done(l.opts.done,l.opts.complete).fail(l.opts.fail).always(l.opts.always),k.fx.timer(k.extend(u,{elem:o,anim:l,queue:l.opts.queue})),l}k.Animation=k.extend(dt,{tweeners:{\"*\":[function(e,t){var n=this.createTween(e,t);return le(n.elem,e,ne.exec(t),n),n}]},tweener:function(e,t){m(e)?(t=e,e=[\"*\"]):e=e.match(R);for(var n,r=0,i=e.length;r<i;r++)n=e[r],dt.tweeners[n]=dt.tweeners[n]||[],dt.tweeners[n].unshift(t)},prefilters:[function(e,t,n){var r,i,o,a,s,u,l,c,f=\"width\"in t||\"height\"in t,p=this,d={},h=e.style,g=e.nodeType&&se(e),v=Q.get(e,\"fxshow\");for(r in n.queue||(null==(a=k._queueHooks(e,\"fx\")).unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,k.queue(e,\"fx\").length||a.empty.fire()})})),t)if(i=t[r],st.test(i)){if(delete t[r],o=o||\"toggle\"===i,i===(g?\"hide\":\"show\")){if(\"show\"!==i||!v||void 0===v[r])continue;g=!0}d[r]=v&&v[r]||k.style(e,r)}if((u=!k.isEmptyObject(t))||!k.isEmptyObject(d))for(r in f&&1===e.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],null==(l=v&&v.display)&&(l=Q.get(e,\"display\")),\"none\"===(c=k.css(e,\"display\"))&&(l?c=l:(fe([e],!0),l=e.style.display||l,c=k.css(e,\"display\"),fe([e]))),(\"inline\"===c||\"inline-block\"===c&&null!=l)&&\"none\"===k.css(e,\"float\")&&(u||(p.done(function(){h.display=l}),null==l&&(c=h.display,l=\"none\"===c?\"\":c)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1,d)u||(v?\"hidden\"in v&&(g=v.hidden):v=Q.access(e,\"fxshow\",{display:l}),o&&(v.hidden=!g),g&&fe([e],!0),p.done(function(){for(r in g||fe([e]),Q.remove(e,\"fxshow\"),d)k.style(e,r,d[r])})),u=pt(g?v[r]:0,r,p),r in v||(v[r]=u.start,g&&(u.end=u.start,u.start=0))}],prefilter:function(e,t){t?dt.prefilters.unshift(e):dt.prefilters.push(e)}}),k.speed=function(e,t,n){var r=e&&\"object\"==typeof e?k.extend({},e):{complete:n||!n&&t||m(e)&&e,duration:e,easing:n&&t||t&&!m(t)&&t};return k.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in k.fx.speeds?r.duration=k.fx.speeds[r.duration]:r.duration=k.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){m(r.old)&&r.old.call(this),r.queue&&k.dequeue(this,r.queue)},r},k.fn.extend({fadeTo:function(e,t,n,r){return this.filter(se).css(\"opacity\",0).show().end().animate({opacity:t},e,n,r)},animate:function(t,e,n,r){var i=k.isEmptyObject(t),o=k.speed(e,n,r),a=function(){var e=dt(this,k.extend({},t),o);(i||Q.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(i,e,o){var a=function(e){var t=e.stop;delete e.stop,t(o)};return\"string\"!=typeof i&&(o=e,e=i,i=void 0),e&&!1!==i&&this.queue(i||\"fx\",[]),this.each(function(){var e=!0,t=null!=i&&i+\"queueHooks\",n=k.timers,r=Q.get(this);if(t)r[t]&&r[t].stop&&a(r[t]);else for(t in r)r[t]&&r[t].stop&&ut.test(t)&&a(r[t]);for(t=n.length;t--;)n[t].elem!==this||null!=i&&n[t].queue!==i||(n[t].anim.stop(o),e=!1,n.splice(t,1));!e&&o||k.dequeue(this,i)})},finish:function(a){return!1!==a&&(a=a||\"fx\"),this.each(function(){var e,t=Q.get(this),n=t[a+\"queue\"],r=t[a+\"queueHooks\"],i=k.timers,o=n?n.length:0;for(t.finish=!0,k.queue(this,a,[]),r&&r.stop&&r.stop.call(this,!0),e=i.length;e--;)i[e].elem===this&&i[e].queue===a&&(i[e].anim.stop(!0),i.splice(e,1));for(e=0;e<o;e++)n[e]&&n[e].finish&&n[e].finish.call(this);delete t.finish})}}),k.each([\"toggle\",\"show\",\"hide\"],function(e,r){var i=k.fn[r];k.fn[r]=function(e,t,n){return null==e||\"boolean\"==typeof e?i.apply(this,arguments):this.animate(ft(r,!0),e,t,n)}}),k.each({slideDown:ft(\"show\"),slideUp:ft(\"hide\"),slideToggle:ft(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(e,r){k.fn[e]=function(e,t,n){return this.animate(r,e,t,n)}}),k.timers=[],k.fx.tick=function(){var e,t=0,n=k.timers;for(rt=Date.now();t<n.length;t++)(e=n[t])()||n[t]!==e||n.splice(t--,1);n.length||k.fx.stop(),rt=void 0},k.fx.timer=function(e){k.timers.push(e),k.fx.start()},k.fx.interval=13,k.fx.start=function(){it||(it=!0,lt())},k.fx.stop=function(){it=null},k.fx.speeds={slow:600,fast:200,_default:400},k.fn.delay=function(r,e){return r=k.fx&&k.fx.speeds[r]||r,e=e||\"fx\",this.queue(e,function(e,t){var n=C.setTimeout(e,r);t.stop=function(){C.clearTimeout(n)}})},ot=E.createElement(\"input\"),at=E.createElement(\"select\").appendChild(E.createElement(\"option\")),ot.type=\"checkbox\",y.checkOn=\"\"!==ot.value,y.optSelected=at.selected,(ot=E.createElement(\"input\")).value=\"t\",ot.type=\"radio\",y.radioValue=\"t\"===ot.value;var ht,gt=k.expr.attrHandle;k.fn.extend({attr:function(e,t){return _(this,k.attr,e,t,1<arguments.length)},removeAttr:function(e){return this.each(function(){k.removeAttr(this,e)})}}),k.extend({attr:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return\"undefined\"==typeof e.getAttribute?k.prop(e,t,n):(1===o&&k.isXMLDoc(e)||(i=k.attrHooks[t.toLowerCase()]||(k.expr.match.bool.test(t)?ht:void 0)),void 0!==n?null===n?void k.removeAttr(e,t):i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:(e.setAttribute(t,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(e,t))?r:null==(r=k.find.attr(e,t))?void 0:r)},attrHooks:{type:{set:function(e,t){if(!y.radioValue&&\"radio\"===t&&A(e,\"input\")){var n=e.value;return e.setAttribute(\"type\",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,r=0,i=t&&t.match(R);if(i&&1===e.nodeType)while(n=i[r++])e.removeAttribute(n)}}),ht={set:function(e,t,n){return!1===t?k.removeAttr(e,n):e.setAttribute(n,n),n}},k.each(k.expr.match.bool.source.match(/\\w+/g),function(e,t){var a=gt[t]||k.find.attr;gt[t]=function(e,t,n){var r,i,o=t.toLowerCase();return n||(i=gt[o],gt[o]=r,r=null!=a(e,t,n)?o:null,gt[o]=i),r}});var vt=/^(?:input|select|textarea|button)$/i,yt=/^(?:a|area)$/i;function mt(e){return(e.match(R)||[]).join(\" \")}function xt(e){return e.getAttribute&&e.getAttribute(\"class\")||\"\"}function bt(e){return Array.isArray(e)?e:\"string\"==typeof e&&e.match(R)||[]}k.fn.extend({prop:function(e,t){return _(this,k.prop,e,t,1<arguments.length)},removeProp:function(e){return this.each(function(){delete this[k.propFix[e]||e]})}}),k.extend({prop:function(e,t,n){var r,i,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&k.isXMLDoc(e)||(t=k.propFix[t]||t,i=k.propHooks[t]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(e,n,t))?r:e[t]=n:i&&\"get\"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){var t=k.find.attr(e,\"tabindex\");return t?parseInt(t,10):vt.test(e.nodeName)||yt.test(e.nodeName)&&e.href?0:-1}}},propFix:{\"for\":\"htmlFor\",\"class\":\"className\"}}),y.optSelected||(k.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),k.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){k.propFix[this.toLowerCase()]=this}),k.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).addClass(t.call(this,e,xt(this)))});if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(m(t))return this.each(function(e){k(this).removeClass(t.call(this,e,xt(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if((e=bt(t)).length)while(n=this[u++])if(i=xt(n),r=1===n.nodeType&&\" \"+mt(i)+\" \"){a=0;while(o=e[a++])while(-1<r.indexOf(\" \"+o+\" \"))r=r.replace(\" \"+o+\" \",\" \");i!==(s=mt(r))&&n.setAttribute(\"class\",s)}return this},toggleClass:function(i,t){var o=typeof i,a=\"string\"===o||Array.isArray(i);return\"boolean\"==typeof t&&a?t?this.addClass(i):this.removeClass(i):m(i)?this.each(function(e){k(this).toggleClass(i.call(this,e,xt(this),t),t)}):this.each(function(){var e,t,n,r;if(a){t=0,n=k(this),r=bt(i);while(e=r[t++])n.hasClass(e)?n.removeClass(e):n.addClass(e)}else void 0!==i&&\"boolean\"!==o||((e=xt(this))&&Q.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===i?\"\":Q.get(this,\"__className__\")||\"\"))})},hasClass:function(e){var t,n,r=0;t=\" \"+e+\" \";while(n=this[r++])if(1===n.nodeType&&-1<(\" \"+mt(xt(n))+\" \").indexOf(t))return!0;return!1}});var wt=/\\r/g;k.fn.extend({val:function(n){var r,e,i,t=this[0];return arguments.length?(i=m(n),this.each(function(e){var t;1===this.nodeType&&(null==(t=i?n.call(this,e,k(this).val()):n)?t=\"\":\"number\"==typeof t?t+=\"\":Array.isArray(t)&&(t=k.map(t,function(e){return null==e?\"\":e+\"\"})),(r=k.valHooks[this.type]||k.valHooks[this.nodeName.toLowerCase()])&&\"set\"in r&&void 0!==r.set(this,t,\"value\")||(this.value=t))})):t?(r=k.valHooks[t.type]||k.valHooks[t.nodeName.toLowerCase()])&&\"get\"in r&&void 0!==(e=r.get(t,\"value\"))?e:\"string\"==typeof(e=t.value)?e.replace(wt,\"\"):null==e?\"\":e:void 0}}),k.extend({valHooks:{option:{get:function(e){var t=k.find.attr(e,\"value\");return null!=t?t:mt(k.text(e))}},select:{get:function(e){var t,n,r,i=e.options,o=e.selectedIndex,a=\"select-one\"===e.type,s=a?null:[],u=a?o+1:i.length;for(r=o<0?u:a?o:0;r<u;r++)if(((n=i[r]).selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!A(n.parentNode,\"optgroup\"))){if(t=k(n).val(),a)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=k.makeArray(t),a=i.length;while(a--)((r=i[a]).selected=-1<k.inArray(k.valHooks.option.get(r),o))&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),k.each([\"radio\",\"checkbox\"],function(){k.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=-1<k.inArray(k(e).val(),t)}},y.checkOn||(k.valHooks[this].get=function(e){return null===e.getAttribute(\"value\")?\"on\":e.value})}),y.focusin=\"onfocusin\"in C;var Tt=/^(?:focusinfocus|focusoutblur)$/,Ct=function(e){e.stopPropagation()};k.extend(k.event,{trigger:function(e,t,n,r){var i,o,a,s,u,l,c,f,p=[n||E],d=v.call(e,\"type\")?e.type:e,h=v.call(e,\"namespace\")?e.namespace.split(\".\"):[];if(o=f=a=n=n||E,3!==n.nodeType&&8!==n.nodeType&&!Tt.test(d+k.event.triggered)&&(-1<d.indexOf(\".\")&&(d=(h=d.split(\".\")).shift(),h.sort()),u=d.indexOf(\":\")<0&&\"on\"+d,(e=e[k.expando]?e:new k.Event(d,\"object\"==typeof e&&e)).isTrigger=r?2:3,e.namespace=h.join(\".\"),e.rnamespace=e.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,e.result=void 0,e.target||(e.target=n),t=null==t?[e]:k.makeArray(t,[e]),c=k.event.special[d]||{},r||!c.trigger||!1!==c.trigger.apply(n,t))){if(!r&&!c.noBubble&&!x(n)){for(s=c.delegateType||d,Tt.test(s+d)||(o=o.parentNode);o;o=o.parentNode)p.push(o),a=o;a===(n.ownerDocument||E)&&p.push(a.defaultView||a.parentWindow||C)}i=0;while((o=p[i++])&&!e.isPropagationStopped())f=o,e.type=1<i?s:c.bindType||d,(l=(Q.get(o,\"events\")||{})[e.type]&&Q.get(o,\"handle\"))&&l.apply(o,t),(l=u&&o[u])&&l.apply&&G(o)&&(e.result=l.apply(o,t),!1===e.result&&e.preventDefault());return e.type=d,r||e.isDefaultPrevented()||c._default&&!1!==c._default.apply(p.pop(),t)||!G(n)||u&&m(n[d])&&!x(n)&&((a=n[u])&&(n[u]=null),k.event.triggered=d,e.isPropagationStopped()&&f.addEventListener(d,Ct),n[d](),e.isPropagationStopped()&&f.removeEventListener(d,Ct),k.event.triggered=void 0,a&&(n[u]=a)),e.result}},simulate:function(e,t,n){var r=k.extend(new k.Event,n,{type:e,isSimulated:!0});k.event.trigger(r,null,t)}}),k.fn.extend({trigger:function(e,t){return this.each(function(){k.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];if(n)return k.event.trigger(e,t,n,!0)}}),y.focusin||k.each({focus:\"focusin\",blur:\"focusout\"},function(n,r){var i=function(e){k.event.simulate(r,e.target,k.event.fix(e))};k.event.special[r]={setup:function(){var e=this.ownerDocument||this,t=Q.access(e,r);t||e.addEventListener(n,i,!0),Q.access(e,r,(t||0)+1)},teardown:function(){var e=this.ownerDocument||this,t=Q.access(e,r)-1;t?Q.access(e,r,t):(e.removeEventListener(n,i,!0),Q.remove(e,r))}}});var Et=C.location,kt=Date.now(),St=/\\?/;k.parseXML=function(e){var t;if(!e||\"string\"!=typeof e)return null;try{t=(new C.DOMParser).parseFromString(e,\"text/xml\")}catch(e){t=void 0}return t&&!t.getElementsByTagName(\"parsererror\").length||k.error(\"Invalid XML: \"+e),t};var Nt=/\\[\\]$/,At=/\\r?\\n/g,Dt=/^(?:submit|button|image|reset|file)$/i,jt=/^(?:input|select|textarea|keygen)/i;function qt(n,e,r,i){var t;if(Array.isArray(e))k.each(e,function(e,t){r||Nt.test(n)?i(n,t):qt(n+\"[\"+(\"object\"==typeof t&&null!=t?e:\"\")+\"]\",t,r,i)});else if(r||\"object\"!==w(e))i(n,e);else for(t in e)qt(n+\"[\"+t+\"]\",e[t],r,i)}k.param=function(e,t){var n,r=[],i=function(e,t){var n=m(t)?t():t;r[r.length]=encodeURIComponent(e)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(null==e)return\"\";if(Array.isArray(e)||e.jquery&&!k.isPlainObject(e))k.each(e,function(){i(this.name,this.value)});else for(n in e)qt(n,e[n],t,i);return r.join(\"&\")},k.fn.extend({serialize:function(){return k.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var e=k.prop(this,\"elements\");return e?k.makeArray(e):this}).filter(function(){var e=this.type;return this.name&&!k(this).is(\":disabled\")&&jt.test(this.nodeName)&&!Dt.test(e)&&(this.checked||!pe.test(e))}).map(function(e,t){var n=k(this).val();return null==n?null:Array.isArray(n)?k.map(n,function(e){return{name:t.name,value:e.replace(At,\"\\r\\n\")}}):{name:t.name,value:n.replace(At,\"\\r\\n\")}}).get()}});var Lt=/%20/g,Ht=/#.*$/,Ot=/([?&])_=[^&]*/,Pt=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Rt=/^(?:GET|HEAD)$/,Mt=/^\\/\\//,It={},Wt={},$t=\"*/\".concat(\"*\"),Ft=E.createElement(\"a\");function Bt(o){return function(e,t){\"string\"!=typeof e&&(t=e,e=\"*\");var n,r=0,i=e.toLowerCase().match(R)||[];if(m(t))while(n=i[r++])\"+\"===n[0]?(n=n.slice(1)||\"*\",(o[n]=o[n]||[]).unshift(t)):(o[n]=o[n]||[]).push(t)}}function _t(t,i,o,a){var s={},u=t===Wt;function l(e){var r;return s[e]=!0,k.each(t[e]||[],function(e,t){var n=t(i,o,a);return\"string\"!=typeof n||u||s[n]?u?!(r=n):void 0:(i.dataTypes.unshift(n),l(n),!1)}),r}return l(i.dataTypes[0])||!s[\"*\"]&&l(\"*\")}function zt(e,t){var n,r,i=k.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((i[n]?e:r||(r={}))[n]=t[n]);return r&&k.extend(!0,e,r),e}Ft.href=Et.href,k.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:Et.href,type:\"GET\",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":$t,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":k.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?zt(zt(e,k.ajaxSettings),t):zt(k.ajaxSettings,e)},ajaxPrefilter:Bt(It),ajaxTransport:Bt(Wt),ajax:function(e,t){\"object\"==typeof e&&(t=e,e=void 0),t=t||{};var c,f,p,n,d,r,h,g,i,o,v=k.ajaxSetup({},t),y=v.context||v,m=v.context&&(y.nodeType||y.jquery)?k(y):k.event,x=k.Deferred(),b=k.Callbacks(\"once memory\"),w=v.statusCode||{},a={},s={},u=\"canceled\",T={readyState:0,getResponseHeader:function(e){var t;if(h){if(!n){n={};while(t=Pt.exec(p))n[t[1].toLowerCase()+\" \"]=(n[t[1].toLowerCase()+\" \"]||[]).concat(t[2])}t=n[e.toLowerCase()+\" \"]}return null==t?null:t.join(\", \")},getAllResponseHeaders:function(){return h?p:null},setRequestHeader:function(e,t){return null==h&&(e=s[e.toLowerCase()]=s[e.toLowerCase()]||e,a[e]=t),this},overrideMimeType:function(e){return null==h&&(v.mimeType=e),this},statusCode:function(e){var t;if(e)if(h)T.always(e[T.status]);else for(t in e)w[t]=[w[t],e[t]];return this},abort:function(e){var t=e||u;return c&&c.abort(t),l(0,t),this}};if(x.promise(T),v.url=((e||v.url||Et.href)+\"\").replace(Mt,Et.protocol+\"//\"),v.type=t.method||t.type||v.method||v.type,v.dataTypes=(v.dataType||\"*\").toLowerCase().match(R)||[\"\"],null==v.crossDomain){r=E.createElement(\"a\");try{r.href=v.url,r.href=r.href,v.crossDomain=Ft.protocol+\"//\"+Ft.host!=r.protocol+\"//\"+r.host}catch(e){v.crossDomain=!0}}if(v.data&&v.processData&&\"string\"!=typeof v.data&&(v.data=k.param(v.data,v.traditional)),_t(It,v,t,T),h)return T;for(i in(g=k.event&&v.global)&&0==k.active++&&k.event.trigger(\"ajaxStart\"),v.type=v.type.toUpperCase(),v.hasContent=!Rt.test(v.type),f=v.url.replace(Ht,\"\"),v.hasContent?v.data&&v.processData&&0===(v.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(v.data=v.data.replace(Lt,\"+\")):(o=v.url.slice(f.length),v.data&&(v.processData||\"string\"==typeof v.data)&&(f+=(St.test(f)?\"&\":\"?\")+v.data,delete v.data),!1===v.cache&&(f=f.replace(Ot,\"$1\"),o=(St.test(f)?\"&\":\"?\")+\"_=\"+kt+++o),v.url=f+o),v.ifModified&&(k.lastModified[f]&&T.setRequestHeader(\"If-Modified-Since\",k.lastModified[f]),k.etag[f]&&T.setRequestHeader(\"If-None-Match\",k.etag[f])),(v.data&&v.hasContent&&!1!==v.contentType||t.contentType)&&T.setRequestHeader(\"Content-Type\",v.contentType),T.setRequestHeader(\"Accept\",v.dataTypes[0]&&v.accepts[v.dataTypes[0]]?v.accepts[v.dataTypes[0]]+(\"*\"!==v.dataTypes[0]?\", \"+$t+\"; q=0.01\":\"\"):v.accepts[\"*\"]),v.headers)T.setRequestHeader(i,v.headers[i]);if(v.beforeSend&&(!1===v.beforeSend.call(y,T,v)||h))return T.abort();if(u=\"abort\",b.add(v.complete),T.done(v.success),T.fail(v.error),c=_t(Wt,v,t,T)){if(T.readyState=1,g&&m.trigger(\"ajaxSend\",[T,v]),h)return T;v.async&&0<v.timeout&&(d=C.setTimeout(function(){T.abort(\"timeout\")},v.timeout));try{h=!1,c.send(a,l)}catch(e){if(h)throw e;l(-1,e)}}else l(-1,\"No Transport\");function l(e,t,n,r){var i,o,a,s,u,l=t;h||(h=!0,d&&C.clearTimeout(d),c=void 0,p=r||\"\",T.readyState=0<e?4:0,i=200<=e&&e<300||304===e,n&&(s=function(e,t,n){var r,i,o,a,s=e.contents,u=e.dataTypes;while(\"*\"===u[0])u.shift(),void 0===r&&(r=e.mimeType||t.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||e.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}(v,T,n)),s=function(e,t,n,r){var i,o,a,s,u,l={},c=e.dataTypes.slice();if(c[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];o=c.shift();while(o)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!u&&r&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),u=o,o=c.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=l[u+\" \"+o]||l[\"* \"+o]))for(i in l)if((s=i.split(\" \"))[1]===o&&(a=l[u+\" \"+s[0]]||l[\"* \"+s[0]])){!0===a?a=l[i]:!0!==l[i]&&(o=s[0],c.unshift(s[1]));break}if(!0!==a)if(a&&e[\"throws\"])t=a(t);else try{t=a(t)}catch(e){return{state:\"parsererror\",error:a?e:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:t}}(v,s,T,i),i?(v.ifModified&&((u=T.getResponseHeader(\"Last-Modified\"))&&(k.lastModified[f]=u),(u=T.getResponseHeader(\"etag\"))&&(k.etag[f]=u)),204===e||\"HEAD\"===v.type?l=\"nocontent\":304===e?l=\"notmodified\":(l=s.state,o=s.data,i=!(a=s.error))):(a=l,!e&&l||(l=\"error\",e<0&&(e=0))),T.status=e,T.statusText=(t||l)+\"\",i?x.resolveWith(y,[o,l,T]):x.rejectWith(y,[T,l,a]),T.statusCode(w),w=void 0,g&&m.trigger(i?\"ajaxSuccess\":\"ajaxError\",[T,v,i?o:a]),b.fireWith(y,[T,l]),g&&(m.trigger(\"ajaxComplete\",[T,v]),--k.active||k.event.trigger(\"ajaxStop\")))}return T},getJSON:function(e,t,n){return k.get(e,t,n,\"json\")},getScript:function(e,t){return k.get(e,void 0,t,\"script\")}}),k.each([\"get\",\"post\"],function(e,i){k[i]=function(e,t,n,r){return m(t)&&(r=r||n,n=t,t=void 0),k.ajax(k.extend({url:e,type:i,dataType:r,data:t,success:n},k.isPlainObject(e)&&e))}}),k._evalUrl=function(e,t){return k.ajax({url:e,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,converters:{\"text script\":function(){}},dataFilter:function(e){k.globalEval(e,t)}})},k.fn.extend({wrapAll:function(e){var t;return this[0]&&(m(e)&&(e=e.call(this[0])),t=k(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this},wrapInner:function(n){return m(n)?this.each(function(e){k(this).wrapInner(n.call(this,e))}):this.each(function(){var e=k(this),t=e.contents();t.length?t.wrapAll(n):e.append(n)})},wrap:function(t){var n=m(t);return this.each(function(e){k(this).wrapAll(n?t.call(this,e):t)})},unwrap:function(e){return this.parent(e).not(\"body\").each(function(){k(this).replaceWith(this.childNodes)}),this}}),k.expr.pseudos.hidden=function(e){return!k.expr.pseudos.visible(e)},k.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},k.ajaxSettings.xhr=function(){try{return new C.XMLHttpRequest}catch(e){}};var Ut={0:200,1223:204},Xt=k.ajaxSettings.xhr();y.cors=!!Xt&&\"withCredentials\"in Xt,y.ajax=Xt=!!Xt,k.ajaxTransport(function(i){var o,a;if(y.cors||Xt&&!i.crossDomain)return{send:function(e,t){var n,r=i.xhr();if(r.open(i.type,i.url,i.async,i.username,i.password),i.xhrFields)for(n in i.xhrFields)r[n]=i.xhrFields[n];for(n in i.mimeType&&r.overrideMimeType&&r.overrideMimeType(i.mimeType),i.crossDomain||e[\"X-Requested-With\"]||(e[\"X-Requested-With\"]=\"XMLHttpRequest\"),e)r.setRequestHeader(n,e[n]);o=function(e){return function(){o&&(o=a=r.onload=r.onerror=r.onabort=r.ontimeout=r.onreadystatechange=null,\"abort\"===e?r.abort():\"error\"===e?\"number\"!=typeof r.status?t(0,\"error\"):t(r.status,r.statusText):t(Ut[r.status]||r.status,r.statusText,\"text\"!==(r.responseType||\"text\")||\"string\"!=typeof r.responseText?{binary:r.response}:{text:r.responseText},r.getAllResponseHeaders()))}},r.onload=o(),a=r.onerror=r.ontimeout=o(\"error\"),void 0!==r.onabort?r.onabort=a:r.onreadystatechange=function(){4===r.readyState&&C.setTimeout(function(){o&&a()})},o=o(\"abort\");try{r.send(i.hasContent&&i.data||null)}catch(e){if(o)throw e}},abort:function(){o&&o()}}}),k.ajaxPrefilter(function(e){e.crossDomain&&(e.contents.script=!1)}),k.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(e){return k.globalEval(e),e}}}),k.ajaxPrefilter(\"script\",function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type=\"GET\")}),k.ajaxTransport(\"script\",function(n){var r,i;if(n.crossDomain||n.scriptAttrs)return{send:function(e,t){r=k(\"<script>\").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on(\"load error\",i=function(e){r.remove(),i=null,e&&t(\"error\"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var Vt,Gt=[],Yt=/(=)\\?(?=&|$)|\\?\\?/;k.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var e=Gt.pop()||k.expando+\"_\"+kt++;return this[e]=!0,e}}),k.ajaxPrefilter(\"json jsonp\",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Yt.test(e.url)?\"url\":\"string\"==typeof e.data&&0===(e.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Yt.test(e.data)&&\"data\");if(a||\"jsonp\"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Yt,\"$1\"+r):!1!==e.jsonp&&(e.url+=(St.test(e.url)?\"&\":\"?\")+e.jsonp+\"=\"+r),e.converters[\"script json\"]=function(){return o||k.error(r+\" was not called\"),o[0]},e.dataTypes[0]=\"json\",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?k(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Gt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),\"script\"}),y.createHTMLDocument=((Vt=E.implementation.createHTMLDocument(\"\").body).innerHTML=\"<form></form><form></form>\",2===Vt.childNodes.length),k.parseHTML=function(e,t,n){return\"string\"!=typeof e?[]:(\"boolean\"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument(\"\")).createElement(\"base\")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=D.exec(e))?[t.createElement(i[1])]:(i=we([e],t,o),o&&o.length&&k(o).remove(),k.merge([],i.childNodes)));var r,i,o},k.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(\" \");return-1<s&&(r=mt(e.slice(s)),e=e.slice(0,s)),m(t)?(n=t,t=void 0):t&&\"object\"==typeof t&&(i=\"POST\"),0<a.length&&k.ajax({url:e,type:i||\"GET\",dataType:\"html\",data:t}).done(function(e){o=arguments,a.html(r?k(\"<div>\").append(k.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},k.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(e,t){k.fn[t]=function(e){return this.on(t,e)}}),k.expr.pseudos.animated=function(t){return k.grep(k.timers,function(e){return t===e.elem}).length},k.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=k.css(e,\"position\"),c=k(e),f={};\"static\"===l&&(e.style.position=\"relative\"),s=c.offset(),o=k.css(e,\"top\"),u=k.css(e,\"left\"),(\"absolute\"===l||\"fixed\"===l)&&-1<(o+u).indexOf(\"auto\")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,k.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),\"using\"in t?t.using.call(e,f):c.css(f)}},k.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){k.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if(\"fixed\"===k.css(r,\"position\"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&\"static\"===k.css(e,\"position\"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=k(e).offset()).top+=k.css(e,\"borderTopWidth\",!0),i.left+=k.css(e,\"borderLeftWidth\",!0))}return{top:t.top-i.top-k.css(r,\"marginTop\",!0),left:t.left-i.left-k.css(r,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&\"static\"===k.css(e,\"position\"))e=e.offsetParent;return e||ie})}}),k.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,i){var o=\"pageYOffset\"===i;k.fn[t]=function(e){return _(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),k.each([\"top\",\"left\"],function(e,n){k.cssHooks[n]=ze(y.pixelPosition,function(e,t){if(t)return t=_e(e,n),$e.test(t)?k(e).position()[n]+\"px\":t})}),k.each({Height:\"height\",Width:\"width\"},function(a,s){k.each({padding:\"inner\"+a,content:s,\"\":\"outer\"+a},function(r,o){k.fn[o]=function(e,t){var n=arguments.length&&(r||\"boolean\"!=typeof e),i=r||(!0===e||!0===t?\"margin\":\"border\");return _(this,function(e,t,n){var r;return x(e)?0===o.indexOf(\"outer\")?e[\"inner\"+a]:e.document.documentElement[\"client\"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body[\"scroll\"+a],r[\"scroll\"+a],e.body[\"offset\"+a],r[\"offset\"+a],r[\"client\"+a])):void 0===n?k.css(e,t,i):k.style(e,t,n,i)},s,n?e:void 0,n)}})}),k.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(e,n){k.fn[n]=function(e,t){return 0<arguments.length?this.on(n,null,e,t):this.trigger(n)}}),k.fn.extend({hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),k.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,\"**\"):this.off(t,e||\"**\",n)}}),k.proxy=function(e,t){var n,r,i;if(\"string\"==typeof t&&(n=e[t],t=e,e=n),m(e))return r=s.call(arguments,2),(i=function(){return e.apply(t||this,r.concat(s.call(arguments)))}).guid=e.guid=e.guid||k.guid++,i},k.holdReady=function(e){e?k.readyWait++:k.ready(!0)},k.isArray=Array.isArray,k.parseJSON=JSON.parse,k.nodeName=A,k.isFunction=m,k.isWindow=x,k.camelCase=V,k.type=w,k.now=Date.now,k.isNumeric=function(e){var t=k.type(e);return(\"number\"===t||\"string\"===t)&&!isNaN(e-parseFloat(e))},\"function\"==typeof define&&define.amd&&define(\"jquery\",[],function(){return k});var Qt=C.jQuery,Jt=C.$;return k.noConflict=function(e){return C.$===k&&(C.$=Jt),e&&C.jQuery===k&&(C.jQuery=Qt),k},e||(C.jQuery=C.$=k),k});\n\n/*!\n  * Bootstrap v5.1.3 (https://getbootstrap.com/)\n  * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)\n  */\n!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){\"use strict\";const t=\"transitionend\",e=t=>{let e=t.getAttribute(\"data-bs-target\");if(!e||\"#\"===e){let i=t.getAttribute(\"href\");if(!i||!i.includes(\"#\")&&!i.startsWith(\".\"))return null;i.includes(\"#\")&&!i.startsWith(\"#\")&&(i=`#${i.split(\"#\")[1]}`),e=i&&\"#\"!==i?i.trim():null}return e},i=t=>{const i=e(t);return i&&document.querySelector(i)?i:null},n=t=>{const i=e(t);return i?document.querySelector(i):null},s=e=>{e.dispatchEvent(new Event(t))},o=t=>!(!t||\"object\"!=typeof t)&&(void 0!==t.jquery&&(t=t[0]),void 0!==t.nodeType),r=t=>o(t)?t.jquery?t[0]:t:\"string\"==typeof t&&t.length>0?document.querySelector(t):null,a=(t,e,i)=>{Object.keys(i).forEach((n=>{const s=i[n],r=e[n],a=r&&o(r)?\"element\":null==(l=r)?`${l}`:{}.toString.call(l).match(/\\s([a-z]+)/i)[1].toLowerCase();var l;if(!new RegExp(s).test(a))throw new TypeError(`${t.toUpperCase()}: Option \"${n}\" provided type \"${a}\" but expected type \"${s}\".`)}))},l=t=>!(!o(t)||0===t.getClientRects().length)&&\"visible\"===getComputedStyle(t).getPropertyValue(\"visibility\"),c=t=>!t||t.nodeType!==Node.ELEMENT_NODE||!!t.classList.contains(\"disabled\")||(void 0!==t.disabled?t.disabled:t.hasAttribute(\"disabled\")&&\"false\"!==t.getAttribute(\"disabled\")),h=t=>{if(!document.documentElement.attachShadow)return null;if(\"function\"==typeof t.getRootNode){const e=t.getRootNode();return e instanceof ShadowRoot?e:null}return t instanceof ShadowRoot?t:t.parentNode?h(t.parentNode):null},d=()=>{},u=t=>{t.offsetHeight},f=()=>{const{jQuery:t}=window;return t&&!document.body.hasAttribute(\"data-bs-no-jquery\")?t:null},p=[],m=()=>\"rtl\"===document.documentElement.dir,g=t=>{var e;e=()=>{const e=f();if(e){const i=t.NAME,n=e.fn[i];e.fn[i]=t.jQueryInterface,e.fn[i].Constructor=t,e.fn[i].noConflict=()=>(e.fn[i]=n,t.jQueryInterface)}},\"loading\"===document.readyState?(p.length||document.addEventListener(\"DOMContentLoaded\",(()=>{p.forEach((t=>t()))})),p.push(e)):e()},_=t=>{\"function\"==typeof t&&t()},b=(e,i,n=!0)=>{if(!n)return void _(e);const o=(t=>{if(!t)return 0;let{transitionDuration:e,transitionDelay:i}=window.getComputedStyle(t);const n=Number.parseFloat(e),s=Number.parseFloat(i);return n||s?(e=e.split(\",\")[0],i=i.split(\",\")[0],1e3*(Number.parseFloat(e)+Number.parseFloat(i))):0})(i)+5;let r=!1;const a=({target:n})=>{n===i&&(r=!0,i.removeEventListener(t,a),_(e))};i.addEventListener(t,a),setTimeout((()=>{r||s(i)}),o)},v=(t,e,i,n)=>{let s=t.indexOf(e);if(-1===s)return t[!i&&n?t.length-1:0];const o=t.length;return s+=i?1:-1,n&&(s=(s+o)%o),t[Math.max(0,Math.min(s,o-1))]},y=/[^.]*(?=\\..*)\\.|.*/,w=/\\..*/,E=/::\\d+$/,A={};let T=1;const O={mouseenter:\"mouseover\",mouseleave:\"mouseout\"},C=/^(mouseenter|mouseleave)/i,k=new Set([\"click\",\"dblclick\",\"mouseup\",\"mousedown\",\"contextmenu\",\"mousewheel\",\"DOMMouseScroll\",\"mouseover\",\"mouseout\",\"mousemove\",\"selectstart\",\"selectend\",\"keydown\",\"keypress\",\"keyup\",\"orientationchange\",\"touchstart\",\"touchmove\",\"touchend\",\"touchcancel\",\"pointerdown\",\"pointermove\",\"pointerup\",\"pointerleave\",\"pointercancel\",\"gesturestart\",\"gesturechange\",\"gestureend\",\"focus\",\"blur\",\"change\",\"reset\",\"select\",\"submit\",\"focusin\",\"focusout\",\"load\",\"unload\",\"beforeunload\",\"resize\",\"move\",\"DOMContentLoaded\",\"readystatechange\",\"error\",\"abort\",\"scroll\"]);function L(t,e){return e&&`${e}::${T++}`||t.uidEvent||T++}function x(t){const e=L(t);return t.uidEvent=e,A[e]=A[e]||{},A[e]}function D(t,e,i=null){const n=Object.keys(t);for(let s=0,o=n.length;s<o;s++){const o=t[n[s]];if(o.originalHandler===e&&o.delegationSelector===i)return o}return null}function S(t,e,i){const n=\"string\"==typeof e,s=n?i:e;let o=P(t);return k.has(o)||(o=t),[n,s,o]}function N(t,e,i,n,s){if(\"string\"!=typeof e||!t)return;if(i||(i=n,n=null),C.test(e)){const t=t=>function(e){if(!e.relatedTarget||e.relatedTarget!==e.delegateTarget&&!e.delegateTarget.contains(e.relatedTarget))return t.call(this,e)};n?n=t(n):i=t(i)}const[o,r,a]=S(e,i,n),l=x(t),c=l[a]||(l[a]={}),h=D(c,r,o?i:null);if(h)return void(h.oneOff=h.oneOff&&s);const d=L(r,e.replace(y,\"\")),u=o?function(t,e,i){return function n(s){const o=t.querySelectorAll(e);for(let{target:r}=s;r&&r!==this;r=r.parentNode)for(let a=o.length;a--;)if(o[a]===r)return s.delegateTarget=r,n.oneOff&&j.off(t,s.type,e,i),i.apply(r,[s]);return null}}(t,i,n):function(t,e){return function i(n){return n.delegateTarget=t,i.oneOff&&j.off(t,n.type,e),e.apply(t,[n])}}(t,i);u.delegationSelector=o?i:null,u.originalHandler=r,u.oneOff=s,u.uidEvent=d,c[d]=u,t.addEventListener(a,u,o)}function I(t,e,i,n,s){const o=D(e[i],n,s);o&&(t.removeEventListener(i,o,Boolean(s)),delete e[i][o.uidEvent])}function P(t){return t=t.replace(w,\"\"),O[t]||t}const j={on(t,e,i,n){N(t,e,i,n,!1)},one(t,e,i,n){N(t,e,i,n,!0)},off(t,e,i,n){if(\"string\"!=typeof e||!t)return;const[s,o,r]=S(e,i,n),a=r!==e,l=x(t),c=e.startsWith(\".\");if(void 0!==o){if(!l||!l[r])return;return void I(t,l,r,o,s?i:null)}c&&Object.keys(l).forEach((i=>{!function(t,e,i,n){const s=e[i]||{};Object.keys(s).forEach((o=>{if(o.includes(n)){const n=s[o];I(t,e,i,n.originalHandler,n.delegationSelector)}}))}(t,l,i,e.slice(1))}));const h=l[r]||{};Object.keys(h).forEach((i=>{const n=i.replace(E,\"\");if(!a||e.includes(n)){const e=h[i];I(t,l,r,e.originalHandler,e.delegationSelector)}}))},trigger(t,e,i){if(\"string\"!=typeof e||!t)return null;const n=f(),s=P(e),o=e!==s,r=k.has(s);let a,l=!0,c=!0,h=!1,d=null;return o&&n&&(a=n.Event(e,i),n(t).trigger(a),l=!a.isPropagationStopped(),c=!a.isImmediatePropagationStopped(),h=a.isDefaultPrevented()),r?(d=document.createEvent(\"HTMLEvents\"),d.initEvent(s,l,!0)):d=new CustomEvent(e,{bubbles:l,cancelable:!0}),void 0!==i&&Object.keys(i).forEach((t=>{Object.defineProperty(d,t,{get:()=>i[t]})})),h&&d.preventDefault(),c&&t.dispatchEvent(d),d.defaultPrevented&&void 0!==a&&a.preventDefault(),d}},M=new Map,H={set(t,e,i){M.has(t)||M.set(t,new Map);const n=M.get(t);n.has(e)||0===n.size?n.set(e,i):console.error(`Bootstrap doesn't allow more than one instance per element. Bound instance: ${Array.from(n.keys())[0]}.`)},get:(t,e)=>M.has(t)&&M.get(t).get(e)||null,remove(t,e){if(!M.has(t))return;const i=M.get(t);i.delete(e),0===i.size&&M.delete(t)}};class B{constructor(t){(t=r(t))&&(this._element=t,H.set(this._element,this.constructor.DATA_KEY,this))}dispose(){H.remove(this._element,this.constructor.DATA_KEY),j.off(this._element,this.constructor.EVENT_KEY),Object.getOwnPropertyNames(this).forEach((t=>{this[t]=null}))}_queueCallback(t,e,i=!0){b(t,e,i)}static getInstance(t){return H.get(r(t),this.DATA_KEY)}static getOrCreateInstance(t,e={}){return this.getInstance(t)||new this(t,\"object\"==typeof e?e:null)}static get VERSION(){return\"5.1.3\"}static get NAME(){throw new Error('You have to implement the static method \"NAME\", for each component!')}static get DATA_KEY(){return`bs.${this.NAME}`}static get EVENT_KEY(){return`.${this.DATA_KEY}`}}const R=(t,e=\"hide\")=>{const i=`click.dismiss${t.EVENT_KEY}`,s=t.NAME;j.on(document,i,`[data-bs-dismiss=\"${s}\"]`,(function(i){if([\"A\",\"AREA\"].includes(this.tagName)&&i.preventDefault(),c(this))return;const o=n(this)||this.closest(`.${s}`);t.getOrCreateInstance(o)[e]()}))};class W extends B{static get NAME(){return\"alert\"}close(){if(j.trigger(this._element,\"close.bs.alert\").defaultPrevented)return;this._element.classList.remove(\"show\");const t=this._element.classList.contains(\"fade\");this._queueCallback((()=>this._destroyElement()),this._element,t)}_destroyElement(){this._element.remove(),j.trigger(this._element,\"closed.bs.alert\"),this.dispose()}static jQueryInterface(t){return this.each((function(){const e=W.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}R(W,\"close\"),g(W);const $='[data-bs-toggle=\"button\"]';class z extends B{static get NAME(){return\"button\"}toggle(){this._element.setAttribute(\"aria-pressed\",this._element.classList.toggle(\"active\"))}static jQueryInterface(t){return this.each((function(){const e=z.getOrCreateInstance(this);\"toggle\"===t&&e[t]()}))}}function q(t){return\"true\"===t||\"false\"!==t&&(t===Number(t).toString()?Number(t):\"\"===t||\"null\"===t?null:t)}function F(t){return t.replace(/[A-Z]/g,(t=>`-${t.toLowerCase()}`))}j.on(document,\"click.bs.button.data-api\",$,(t=>{t.preventDefault();const e=t.target.closest($);z.getOrCreateInstance(e).toggle()})),g(z);const U={setDataAttribute(t,e,i){t.setAttribute(`data-bs-${F(e)}`,i)},removeDataAttribute(t,e){t.removeAttribute(`data-bs-${F(e)}`)},getDataAttributes(t){if(!t)return{};const e={};return Object.keys(t.dataset).filter((t=>t.startsWith(\"bs\"))).forEach((i=>{let n=i.replace(/^bs/,\"\");n=n.charAt(0).toLowerCase()+n.slice(1,n.length),e[n]=q(t.dataset[i])})),e},getDataAttribute:(t,e)=>q(t.getAttribute(`data-bs-${F(e)}`)),offset(t){const e=t.getBoundingClientRect();return{top:e.top+window.pageYOffset,left:e.left+window.pageXOffset}},position:t=>({top:t.offsetTop,left:t.offsetLeft})},V={find:(t,e=document.documentElement)=>[].concat(...Element.prototype.querySelectorAll.call(e,t)),findOne:(t,e=document.documentElement)=>Element.prototype.querySelector.call(e,t),children:(t,e)=>[].concat(...t.children).filter((t=>t.matches(e))),parents(t,e){const i=[];let n=t.parentNode;for(;n&&n.nodeType===Node.ELEMENT_NODE&&3!==n.nodeType;)n.matches(e)&&i.push(n),n=n.parentNode;return i},prev(t,e){let i=t.previousElementSibling;for(;i;){if(i.matches(e))return[i];i=i.previousElementSibling}return[]},next(t,e){let i=t.nextElementSibling;for(;i;){if(i.matches(e))return[i];i=i.nextElementSibling}return[]},focusableChildren(t){const e=[\"a\",\"button\",\"input\",\"textarea\",\"select\",\"details\",\"[tabindex]\",'[contenteditable=\"true\"]'].map((t=>`${t}:not([tabindex^=\"-\"])`)).join(\", \");return this.find(e,t).filter((t=>!c(t)&&l(t)))}},K=\"carousel\",X={interval:5e3,keyboard:!0,slide:!1,pause:\"hover\",wrap:!0,touch:!0},Y={interval:\"(number|boolean)\",keyboard:\"boolean\",slide:\"(boolean|string)\",pause:\"(string|boolean)\",wrap:\"boolean\",touch:\"boolean\"},Q=\"next\",G=\"prev\",Z=\"left\",J=\"right\",tt={ArrowLeft:J,ArrowRight:Z},et=\"slid.bs.carousel\",it=\"active\",nt=\".active.carousel-item\";class st extends B{constructor(t,e){super(t),this._items=null,this._interval=null,this._activeElement=null,this._isPaused=!1,this._isSliding=!1,this.touchTimeout=null,this.touchStartX=0,this.touchDeltaX=0,this._config=this._getConfig(e),this._indicatorsElement=V.findOne(\".carousel-indicators\",this._element),this._touchSupported=\"ontouchstart\"in document.documentElement||navigator.maxTouchPoints>0,this._pointerEvent=Boolean(window.PointerEvent),this._addEventListeners()}static get Default(){return X}static get NAME(){return K}next(){this._slide(Q)}nextWhenVisible(){!document.hidden&&l(this._element)&&this.next()}prev(){this._slide(G)}pause(t){t||(this._isPaused=!0),V.findOne(\".carousel-item-next, .carousel-item-prev\",this._element)&&(s(this._element),this.cycle(!0)),clearInterval(this._interval),this._interval=null}cycle(t){t||(this._isPaused=!1),this._interval&&(clearInterval(this._interval),this._interval=null),this._config&&this._config.interval&&!this._isPaused&&(this._updateInterval(),this._interval=setInterval((document.visibilityState?this.nextWhenVisible:this.next).bind(this),this._config.interval))}to(t){this._activeElement=V.findOne(nt,this._element);const e=this._getItemIndex(this._activeElement);if(t>this._items.length-1||t<0)return;if(this._isSliding)return void j.one(this._element,et,(()=>this.to(t)));if(e===t)return this.pause(),void this.cycle();const i=t>e?Q:G;this._slide(i,this._items[t])}_getConfig(t){return t={...X,...U.getDataAttributes(this._element),...\"object\"==typeof t?t:{}},a(K,t,Y),t}_handleSwipe(){const t=Math.abs(this.touchDeltaX);if(t<=40)return;const e=t/this.touchDeltaX;this.touchDeltaX=0,e&&this._slide(e>0?J:Z)}_addEventListeners(){this._config.keyboard&&j.on(this._element,\"keydown.bs.carousel\",(t=>this._keydown(t))),\"hover\"===this._config.pause&&(j.on(this._element,\"mouseenter.bs.carousel\",(t=>this.pause(t))),j.on(this._element,\"mouseleave.bs.carousel\",(t=>this.cycle(t)))),this._config.touch&&this._touchSupported&&this._addTouchEventListeners()}_addTouchEventListeners(){const t=t=>this._pointerEvent&&(\"pen\"===t.pointerType||\"touch\"===t.pointerType),e=e=>{t(e)?this.touchStartX=e.clientX:this._pointerEvent||(this.touchStartX=e.touches[0].clientX)},i=t=>{this.touchDeltaX=t.touches&&t.touches.length>1?0:t.touches[0].clientX-this.touchStartX},n=e=>{t(e)&&(this.touchDeltaX=e.clientX-this.touchStartX),this._handleSwipe(),\"hover\"===this._config.pause&&(this.pause(),this.touchTimeout&&clearTimeout(this.touchTimeout),this.touchTimeout=setTimeout((t=>this.cycle(t)),500+this._config.interval))};V.find(\".carousel-item img\",this._element).forEach((t=>{j.on(t,\"dragstart.bs.carousel\",(t=>t.preventDefault()))})),this._pointerEvent?(j.on(this._element,\"pointerdown.bs.carousel\",(t=>e(t))),j.on(this._element,\"pointerup.bs.carousel\",(t=>n(t))),this._element.classList.add(\"pointer-event\")):(j.on(this._element,\"touchstart.bs.carousel\",(t=>e(t))),j.on(this._element,\"touchmove.bs.carousel\",(t=>i(t))),j.on(this._element,\"touchend.bs.carousel\",(t=>n(t))))}_keydown(t){if(/input|textarea/i.test(t.target.tagName))return;const e=tt[t.key];e&&(t.preventDefault(),this._slide(e))}_getItemIndex(t){return this._items=t&&t.parentNode?V.find(\".carousel-item\",t.parentNode):[],this._items.indexOf(t)}_getItemByOrder(t,e){const i=t===Q;return v(this._items,e,i,this._config.wrap)}_triggerSlideEvent(t,e){const i=this._getItemIndex(t),n=this._getItemIndex(V.findOne(nt,this._element));return j.trigger(this._element,\"slide.bs.carousel\",{relatedTarget:t,direction:e,from:n,to:i})}_setActiveIndicatorElement(t){if(this._indicatorsElement){const e=V.findOne(\".active\",this._indicatorsElement);e.classList.remove(it),e.removeAttribute(\"aria-current\");const i=V.find(\"[data-bs-target]\",this._indicatorsElement);for(let e=0;e<i.length;e++)if(Number.parseInt(i[e].getAttribute(\"data-bs-slide-to\"),10)===this._getItemIndex(t)){i[e].classList.add(it),i[e].setAttribute(\"aria-current\",\"true\");break}}}_updateInterval(){const t=this._activeElement||V.findOne(nt,this._element);if(!t)return;const e=Number.parseInt(t.getAttribute(\"data-bs-interval\"),10);e?(this._config.defaultInterval=this._config.defaultInterval||this._config.interval,this._config.interval=e):this._config.interval=this._config.defaultInterval||this._config.interval}_slide(t,e){const i=this._directionToOrder(t),n=V.findOne(nt,this._element),s=this._getItemIndex(n),o=e||this._getItemByOrder(i,n),r=this._getItemIndex(o),a=Boolean(this._interval),l=i===Q,c=l?\"carousel-item-start\":\"carousel-item-end\",h=l?\"carousel-item-next\":\"carousel-item-prev\",d=this._orderToDirection(i);if(o&&o.classList.contains(it))return void(this._isSliding=!1);if(this._isSliding)return;if(this._triggerSlideEvent(o,d).defaultPrevented)return;if(!n||!o)return;this._isSliding=!0,a&&this.pause(),this._setActiveIndicatorElement(o),this._activeElement=o;const f=()=>{j.trigger(this._element,et,{relatedTarget:o,direction:d,from:s,to:r})};if(this._element.classList.contains(\"slide\")){o.classList.add(h),u(o),n.classList.add(c),o.classList.add(c);const t=()=>{o.classList.remove(c,h),o.classList.add(it),n.classList.remove(it,h,c),this._isSliding=!1,setTimeout(f,0)};this._queueCallback(t,n,!0)}else n.classList.remove(it),o.classList.add(it),this._isSliding=!1,f();a&&this.cycle()}_directionToOrder(t){return[J,Z].includes(t)?m()?t===Z?G:Q:t===Z?Q:G:t}_orderToDirection(t){return[Q,G].includes(t)?m()?t===G?Z:J:t===G?J:Z:t}static carouselInterface(t,e){const i=st.getOrCreateInstance(t,e);let{_config:n}=i;\"object\"==typeof e&&(n={...n,...e});const s=\"string\"==typeof e?e:n.slide;if(\"number\"==typeof e)i.to(e);else if(\"string\"==typeof s){if(void 0===i[s])throw new TypeError(`No method named \"${s}\"`);i[s]()}else n.interval&&n.ride&&(i.pause(),i.cycle())}static jQueryInterface(t){return this.each((function(){st.carouselInterface(this,t)}))}static dataApiClickHandler(t){const e=n(this);if(!e||!e.classList.contains(\"carousel\"))return;const i={...U.getDataAttributes(e),...U.getDataAttributes(this)},s=this.getAttribute(\"data-bs-slide-to\");s&&(i.interval=!1),st.carouselInterface(e,i),s&&st.getInstance(e).to(s),t.preventDefault()}}j.on(document,\"click.bs.carousel.data-api\",\"[data-bs-slide], [data-bs-slide-to]\",st.dataApiClickHandler),j.on(window,\"load.bs.carousel.data-api\",(()=>{const t=V.find('[data-bs-ride=\"carousel\"]');for(let e=0,i=t.length;e<i;e++)st.carouselInterface(t[e],st.getInstance(t[e]))})),g(st);const ot=\"collapse\",rt={toggle:!0,parent:null},at={toggle:\"boolean\",parent:\"(null|element)\"},lt=\"show\",ct=\"collapse\",ht=\"collapsing\",dt=\"collapsed\",ut=\":scope .collapse .collapse\",ft='[data-bs-toggle=\"collapse\"]';class pt extends B{constructor(t,e){super(t),this._isTransitioning=!1,this._config=this._getConfig(e),this._triggerArray=[];const n=V.find(ft);for(let t=0,e=n.length;t<e;t++){const e=n[t],s=i(e),o=V.find(s).filter((t=>t===this._element));null!==s&&o.length&&(this._selector=s,this._triggerArray.push(e))}this._initializeChildren(),this._config.parent||this._addAriaAndCollapsedClass(this._triggerArray,this._isShown()),this._config.toggle&&this.toggle()}static get Default(){return rt}static get NAME(){return ot}toggle(){this._isShown()?this.hide():this.show()}show(){if(this._isTransitioning||this._isShown())return;let t,e=[];if(this._config.parent){const t=V.find(ut,this._config.parent);e=V.find(\".collapse.show, .collapse.collapsing\",this._config.parent).filter((e=>!t.includes(e)))}const i=V.findOne(this._selector);if(e.length){const n=e.find((t=>i!==t));if(t=n?pt.getInstance(n):null,t&&t._isTransitioning)return}if(j.trigger(this._element,\"show.bs.collapse\").defaultPrevented)return;e.forEach((e=>{i!==e&&pt.getOrCreateInstance(e,{toggle:!1}).hide(),t||H.set(e,\"bs.collapse\",null)}));const n=this._getDimension();this._element.classList.remove(ct),this._element.classList.add(ht),this._element.style[n]=0,this._addAriaAndCollapsedClass(this._triggerArray,!0),this._isTransitioning=!0;const s=`scroll${n[0].toUpperCase()+n.slice(1)}`;this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct,lt),this._element.style[n]=\"\",j.trigger(this._element,\"shown.bs.collapse\")}),this._element,!0),this._element.style[n]=`${this._element[s]}px`}hide(){if(this._isTransitioning||!this._isShown())return;if(j.trigger(this._element,\"hide.bs.collapse\").defaultPrevented)return;const t=this._getDimension();this._element.style[t]=`${this._element.getBoundingClientRect()[t]}px`,u(this._element),this._element.classList.add(ht),this._element.classList.remove(ct,lt);const e=this._triggerArray.length;for(let t=0;t<e;t++){const e=this._triggerArray[t],i=n(e);i&&!this._isShown(i)&&this._addAriaAndCollapsedClass([e],!1)}this._isTransitioning=!0,this._element.style[t]=\"\",this._queueCallback((()=>{this._isTransitioning=!1,this._element.classList.remove(ht),this._element.classList.add(ct),j.trigger(this._element,\"hidden.bs.collapse\")}),this._element,!0)}_isShown(t=this._element){return t.classList.contains(lt)}_getConfig(t){return(t={...rt,...U.getDataAttributes(this._element),...t}).toggle=Boolean(t.toggle),t.parent=r(t.parent),a(ot,t,at),t}_getDimension(){return this._element.classList.contains(\"collapse-horizontal\")?\"width\":\"height\"}_initializeChildren(){if(!this._config.parent)return;const t=V.find(ut,this._config.parent);V.find(ft,this._config.parent).filter((e=>!t.includes(e))).forEach((t=>{const e=n(t);e&&this._addAriaAndCollapsedClass([t],this._isShown(e))}))}_addAriaAndCollapsedClass(t,e){t.length&&t.forEach((t=>{e?t.classList.remove(dt):t.classList.add(dt),t.setAttribute(\"aria-expanded\",e)}))}static jQueryInterface(t){return this.each((function(){const e={};\"string\"==typeof t&&/show|hide/.test(t)&&(e.toggle=!1);const i=pt.getOrCreateInstance(this,e);if(\"string\"==typeof t){if(void 0===i[t])throw new TypeError(`No method named \"${t}\"`);i[t]()}}))}}j.on(document,\"click.bs.collapse.data-api\",ft,(function(t){(\"A\"===t.target.tagName||t.delegateTarget&&\"A\"===t.delegateTarget.tagName)&&t.preventDefault();const e=i(this);V.find(e).forEach((t=>{pt.getOrCreateInstance(t,{toggle:!1}).toggle()}))})),g(pt);var mt=\"top\",gt=\"bottom\",_t=\"right\",bt=\"left\",vt=\"auto\",yt=[mt,gt,_t,bt],wt=\"start\",Et=\"end\",At=\"clippingParents\",Tt=\"viewport\",Ot=\"popper\",Ct=\"reference\",kt=yt.reduce((function(t,e){return t.concat([e+\"-\"+wt,e+\"-\"+Et])}),[]),Lt=[].concat(yt,[vt]).reduce((function(t,e){return t.concat([e,e+\"-\"+wt,e+\"-\"+Et])}),[]),xt=\"beforeRead\",Dt=\"read\",St=\"afterRead\",Nt=\"beforeMain\",It=\"main\",Pt=\"afterMain\",jt=\"beforeWrite\",Mt=\"write\",Ht=\"afterWrite\",Bt=[xt,Dt,St,Nt,It,Pt,jt,Mt,Ht];function Rt(t){return t?(t.nodeName||\"\").toLowerCase():null}function Wt(t){if(null==t)return window;if(\"[object Window]\"!==t.toString()){var e=t.ownerDocument;return e&&e.defaultView||window}return t}function $t(t){return t instanceof Wt(t).Element||t instanceof Element}function zt(t){return t instanceof Wt(t).HTMLElement||t instanceof HTMLElement}function qt(t){return\"undefined\"!=typeof ShadowRoot&&(t instanceof Wt(t).ShadowRoot||t instanceof ShadowRoot)}const Ft={name:\"applyStyles\",enabled:!0,phase:\"write\",fn:function(t){var e=t.state;Object.keys(e.elements).forEach((function(t){var i=e.styles[t]||{},n=e.attributes[t]||{},s=e.elements[t];zt(s)&&Rt(s)&&(Object.assign(s.style,i),Object.keys(n).forEach((function(t){var e=n[t];!1===e?s.removeAttribute(t):s.setAttribute(t,!0===e?\"\":e)})))}))},effect:function(t){var e=t.state,i={popper:{position:e.options.strategy,left:\"0\",top:\"0\",margin:\"0\"},arrow:{position:\"absolute\"},reference:{}};return Object.assign(e.elements.popper.style,i.popper),e.styles=i,e.elements.arrow&&Object.assign(e.elements.arrow.style,i.arrow),function(){Object.keys(e.elements).forEach((function(t){var n=e.elements[t],s=e.attributes[t]||{},o=Object.keys(e.styles.hasOwnProperty(t)?e.styles[t]:i[t]).reduce((function(t,e){return t[e]=\"\",t}),{});zt(n)&&Rt(n)&&(Object.assign(n.style,o),Object.keys(s).forEach((function(t){n.removeAttribute(t)})))}))}},requires:[\"computeStyles\"]};function Ut(t){return t.split(\"-\")[0]}function Vt(t,e){var i=t.getBoundingClientRect();return{width:i.width/1,height:i.height/1,top:i.top/1,right:i.right/1,bottom:i.bottom/1,left:i.left/1,x:i.left/1,y:i.top/1}}function Kt(t){var e=Vt(t),i=t.offsetWidth,n=t.offsetHeight;return Math.abs(e.width-i)<=1&&(i=e.width),Math.abs(e.height-n)<=1&&(n=e.height),{x:t.offsetLeft,y:t.offsetTop,width:i,height:n}}function Xt(t,e){var i=e.getRootNode&&e.getRootNode();if(t.contains(e))return!0;if(i&&qt(i)){var n=e;do{if(n&&t.isSameNode(n))return!0;n=n.parentNode||n.host}while(n)}return!1}function Yt(t){return Wt(t).getComputedStyle(t)}function Qt(t){return[\"table\",\"td\",\"th\"].indexOf(Rt(t))>=0}function Gt(t){return(($t(t)?t.ownerDocument:t.document)||window.document).documentElement}function Zt(t){return\"html\"===Rt(t)?t:t.assignedSlot||t.parentNode||(qt(t)?t.host:null)||Gt(t)}function Jt(t){return zt(t)&&\"fixed\"!==Yt(t).position?t.offsetParent:null}function te(t){for(var e=Wt(t),i=Jt(t);i&&Qt(i)&&\"static\"===Yt(i).position;)i=Jt(i);return i&&(\"html\"===Rt(i)||\"body\"===Rt(i)&&\"static\"===Yt(i).position)?e:i||function(t){var e=-1!==navigator.userAgent.toLowerCase().indexOf(\"firefox\");if(-1!==navigator.userAgent.indexOf(\"Trident\")&&zt(t)&&\"fixed\"===Yt(t).position)return null;for(var i=Zt(t);zt(i)&&[\"html\",\"body\"].indexOf(Rt(i))<0;){var n=Yt(i);if(\"none\"!==n.transform||\"none\"!==n.perspective||\"paint\"===n.contain||-1!==[\"transform\",\"perspective\"].indexOf(n.willChange)||e&&\"filter\"===n.willChange||e&&n.filter&&\"none\"!==n.filter)return i;i=i.parentNode}return null}(t)||e}function ee(t){return[\"top\",\"bottom\"].indexOf(t)>=0?\"x\":\"y\"}var ie=Math.max,ne=Math.min,se=Math.round;function oe(t,e,i){return ie(t,ne(e,i))}function re(t){return Object.assign({},{top:0,right:0,bottom:0,left:0},t)}function ae(t,e){return e.reduce((function(e,i){return e[i]=t,e}),{})}const le={name:\"arrow\",enabled:!0,phase:\"main\",fn:function(t){var e,i=t.state,n=t.name,s=t.options,o=i.elements.arrow,r=i.modifiersData.popperOffsets,a=Ut(i.placement),l=ee(a),c=[bt,_t].indexOf(a)>=0?\"height\":\"width\";if(o&&r){var h=function(t,e){return re(\"number\"!=typeof(t=\"function\"==typeof t?t(Object.assign({},e.rects,{placement:e.placement})):t)?t:ae(t,yt))}(s.padding,i),d=Kt(o),u=\"y\"===l?mt:bt,f=\"y\"===l?gt:_t,p=i.rects.reference[c]+i.rects.reference[l]-r[l]-i.rects.popper[c],m=r[l]-i.rects.reference[l],g=te(o),_=g?\"y\"===l?g.clientHeight||0:g.clientWidth||0:0,b=p/2-m/2,v=h[u],y=_-d[c]-h[f],w=_/2-d[c]/2+b,E=oe(v,w,y),A=l;i.modifiersData[n]=((e={})[A]=E,e.centerOffset=E-w,e)}},effect:function(t){var e=t.state,i=t.options.element,n=void 0===i?\"[data-popper-arrow]\":i;null!=n&&(\"string\"!=typeof n||(n=e.elements.popper.querySelector(n)))&&Xt(e.elements.popper,n)&&(e.elements.arrow=n)},requires:[\"popperOffsets\"],requiresIfExists:[\"preventOverflow\"]};function ce(t){return t.split(\"-\")[1]}var he={top:\"auto\",right:\"auto\",bottom:\"auto\",left:\"auto\"};function de(t){var e,i=t.popper,n=t.popperRect,s=t.placement,o=t.variation,r=t.offsets,a=t.position,l=t.gpuAcceleration,c=t.adaptive,h=t.roundOffsets,d=!0===h?function(t){var e=t.x,i=t.y,n=window.devicePixelRatio||1;return{x:se(se(e*n)/n)||0,y:se(se(i*n)/n)||0}}(r):\"function\"==typeof h?h(r):r,u=d.x,f=void 0===u?0:u,p=d.y,m=void 0===p?0:p,g=r.hasOwnProperty(\"x\"),_=r.hasOwnProperty(\"y\"),b=bt,v=mt,y=window;if(c){var w=te(i),E=\"clientHeight\",A=\"clientWidth\";w===Wt(i)&&\"static\"!==Yt(w=Gt(i)).position&&\"absolute\"===a&&(E=\"scrollHeight\",A=\"scrollWidth\"),w=w,s!==mt&&(s!==bt&&s!==_t||o!==Et)||(v=gt,m-=w[E]-n.height,m*=l?1:-1),s!==bt&&(s!==mt&&s!==gt||o!==Et)||(b=_t,f-=w[A]-n.width,f*=l?1:-1)}var T,O=Object.assign({position:a},c&&he);return l?Object.assign({},O,((T={})[v]=_?\"0\":\"\",T[b]=g?\"0\":\"\",T.transform=(y.devicePixelRatio||1)<=1?\"translate(\"+f+\"px, \"+m+\"px)\":\"translate3d(\"+f+\"px, \"+m+\"px, 0)\",T)):Object.assign({},O,((e={})[v]=_?m+\"px\":\"\",e[b]=g?f+\"px\":\"\",e.transform=\"\",e))}const ue={name:\"computeStyles\",enabled:!0,phase:\"beforeWrite\",fn:function(t){var e=t.state,i=t.options,n=i.gpuAcceleration,s=void 0===n||n,o=i.adaptive,r=void 0===o||o,a=i.roundOffsets,l=void 0===a||a,c={placement:Ut(e.placement),variation:ce(e.placement),popper:e.elements.popper,popperRect:e.rects.popper,gpuAcceleration:s};null!=e.modifiersData.popperOffsets&&(e.styles.popper=Object.assign({},e.styles.popper,de(Object.assign({},c,{offsets:e.modifiersData.popperOffsets,position:e.options.strategy,adaptive:r,roundOffsets:l})))),null!=e.modifiersData.arrow&&(e.styles.arrow=Object.assign({},e.styles.arrow,de(Object.assign({},c,{offsets:e.modifiersData.arrow,position:\"absolute\",adaptive:!1,roundOffsets:l})))),e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-placement\":e.placement})},data:{}};var fe={passive:!0};const pe={name:\"eventListeners\",enabled:!0,phase:\"write\",fn:function(){},effect:function(t){var e=t.state,i=t.instance,n=t.options,s=n.scroll,o=void 0===s||s,r=n.resize,a=void 0===r||r,l=Wt(e.elements.popper),c=[].concat(e.scrollParents.reference,e.scrollParents.popper);return o&&c.forEach((function(t){t.addEventListener(\"scroll\",i.update,fe)})),a&&l.addEventListener(\"resize\",i.update,fe),function(){o&&c.forEach((function(t){t.removeEventListener(\"scroll\",i.update,fe)})),a&&l.removeEventListener(\"resize\",i.update,fe)}},data:{}};var me={left:\"right\",right:\"left\",bottom:\"top\",top:\"bottom\"};function ge(t){return t.replace(/left|right|bottom|top/g,(function(t){return me[t]}))}var _e={start:\"end\",end:\"start\"};function be(t){return t.replace(/start|end/g,(function(t){return _e[t]}))}function ve(t){var e=Wt(t);return{scrollLeft:e.pageXOffset,scrollTop:e.pageYOffset}}function ye(t){return Vt(Gt(t)).left+ve(t).scrollLeft}function we(t){var e=Yt(t),i=e.overflow,n=e.overflowX,s=e.overflowY;return/auto|scroll|overlay|hidden/.test(i+s+n)}function Ee(t){return[\"html\",\"body\",\"#document\"].indexOf(Rt(t))>=0?t.ownerDocument.body:zt(t)&&we(t)?t:Ee(Zt(t))}function Ae(t,e){var i;void 0===e&&(e=[]);var n=Ee(t),s=n===(null==(i=t.ownerDocument)?void 0:i.body),o=Wt(n),r=s?[o].concat(o.visualViewport||[],we(n)?n:[]):n,a=e.concat(r);return s?a:a.concat(Ae(Zt(r)))}function Te(t){return Object.assign({},t,{left:t.x,top:t.y,right:t.x+t.width,bottom:t.y+t.height})}function Oe(t,e){return e===Tt?Te(function(t){var e=Wt(t),i=Gt(t),n=e.visualViewport,s=i.clientWidth,o=i.clientHeight,r=0,a=0;return n&&(s=n.width,o=n.height,/^((?!chrome|android).)*safari/i.test(navigator.userAgent)||(r=n.offsetLeft,a=n.offsetTop)),{width:s,height:o,x:r+ye(t),y:a}}(t)):zt(e)?function(t){var e=Vt(t);return e.top=e.top+t.clientTop,e.left=e.left+t.clientLeft,e.bottom=e.top+t.clientHeight,e.right=e.left+t.clientWidth,e.width=t.clientWidth,e.height=t.clientHeight,e.x=e.left,e.y=e.top,e}(e):Te(function(t){var e,i=Gt(t),n=ve(t),s=null==(e=t.ownerDocument)?void 0:e.body,o=ie(i.scrollWidth,i.clientWidth,s?s.scrollWidth:0,s?s.clientWidth:0),r=ie(i.scrollHeight,i.clientHeight,s?s.scrollHeight:0,s?s.clientHeight:0),a=-n.scrollLeft+ye(t),l=-n.scrollTop;return\"rtl\"===Yt(s||i).direction&&(a+=ie(i.clientWidth,s?s.clientWidth:0)-o),{width:o,height:r,x:a,y:l}}(Gt(t)))}function Ce(t){var e,i=t.reference,n=t.element,s=t.placement,o=s?Ut(s):null,r=s?ce(s):null,a=i.x+i.width/2-n.width/2,l=i.y+i.height/2-n.height/2;switch(o){case mt:e={x:a,y:i.y-n.height};break;case gt:e={x:a,y:i.y+i.height};break;case _t:e={x:i.x+i.width,y:l};break;case bt:e={x:i.x-n.width,y:l};break;default:e={x:i.x,y:i.y}}var c=o?ee(o):null;if(null!=c){var h=\"y\"===c?\"height\":\"width\";switch(r){case wt:e[c]=e[c]-(i[h]/2-n[h]/2);break;case Et:e[c]=e[c]+(i[h]/2-n[h]/2)}}return e}function ke(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=void 0===n?t.placement:n,o=i.boundary,r=void 0===o?At:o,a=i.rootBoundary,l=void 0===a?Tt:a,c=i.elementContext,h=void 0===c?Ot:c,d=i.altBoundary,u=void 0!==d&&d,f=i.padding,p=void 0===f?0:f,m=re(\"number\"!=typeof p?p:ae(p,yt)),g=h===Ot?Ct:Ot,_=t.rects.popper,b=t.elements[u?g:h],v=function(t,e,i){var n=\"clippingParents\"===e?function(t){var e=Ae(Zt(t)),i=[\"absolute\",\"fixed\"].indexOf(Yt(t).position)>=0&&zt(t)?te(t):t;return $t(i)?e.filter((function(t){return $t(t)&&Xt(t,i)&&\"body\"!==Rt(t)})):[]}(t):[].concat(e),s=[].concat(n,[i]),o=s[0],r=s.reduce((function(e,i){var n=Oe(t,i);return e.top=ie(n.top,e.top),e.right=ne(n.right,e.right),e.bottom=ne(n.bottom,e.bottom),e.left=ie(n.left,e.left),e}),Oe(t,o));return r.width=r.right-r.left,r.height=r.bottom-r.top,r.x=r.left,r.y=r.top,r}($t(b)?b:b.contextElement||Gt(t.elements.popper),r,l),y=Vt(t.elements.reference),w=Ce({reference:y,element:_,strategy:\"absolute\",placement:s}),E=Te(Object.assign({},_,w)),A=h===Ot?E:y,T={top:v.top-A.top+m.top,bottom:A.bottom-v.bottom+m.bottom,left:v.left-A.left+m.left,right:A.right-v.right+m.right},O=t.modifiersData.offset;if(h===Ot&&O){var C=O[s];Object.keys(T).forEach((function(t){var e=[_t,gt].indexOf(t)>=0?1:-1,i=[mt,gt].indexOf(t)>=0?\"y\":\"x\";T[t]+=C[i]*e}))}return T}function Le(t,e){void 0===e&&(e={});var i=e,n=i.placement,s=i.boundary,o=i.rootBoundary,r=i.padding,a=i.flipVariations,l=i.allowedAutoPlacements,c=void 0===l?Lt:l,h=ce(n),d=h?a?kt:kt.filter((function(t){return ce(t)===h})):yt,u=d.filter((function(t){return c.indexOf(t)>=0}));0===u.length&&(u=d);var f=u.reduce((function(e,i){return e[i]=ke(t,{placement:i,boundary:s,rootBoundary:o,padding:r})[Ut(i)],e}),{});return Object.keys(f).sort((function(t,e){return f[t]-f[e]}))}const xe={name:\"flip\",enabled:!0,phase:\"main\",fn:function(t){var e=t.state,i=t.options,n=t.name;if(!e.modifiersData[n]._skip){for(var s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0===r||r,l=i.fallbackPlacements,c=i.padding,h=i.boundary,d=i.rootBoundary,u=i.altBoundary,f=i.flipVariations,p=void 0===f||f,m=i.allowedAutoPlacements,g=e.options.placement,_=Ut(g),b=l||(_!==g&&p?function(t){if(Ut(t)===vt)return[];var e=ge(t);return[be(t),e,be(e)]}(g):[ge(g)]),v=[g].concat(b).reduce((function(t,i){return t.concat(Ut(i)===vt?Le(e,{placement:i,boundary:h,rootBoundary:d,padding:c,flipVariations:p,allowedAutoPlacements:m}):i)}),[]),y=e.rects.reference,w=e.rects.popper,E=new Map,A=!0,T=v[0],O=0;O<v.length;O++){var C=v[O],k=Ut(C),L=ce(C)===wt,x=[mt,gt].indexOf(k)>=0,D=x?\"width\":\"height\",S=ke(e,{placement:C,boundary:h,rootBoundary:d,altBoundary:u,padding:c}),N=x?L?_t:bt:L?gt:mt;y[D]>w[D]&&(N=ge(N));var I=ge(N),P=[];if(o&&P.push(S[k]<=0),a&&P.push(S[N]<=0,S[I]<=0),P.every((function(t){return t}))){T=C,A=!1;break}E.set(C,P)}if(A)for(var j=function(t){var e=v.find((function(e){var i=E.get(e);if(i)return i.slice(0,t).every((function(t){return t}))}));if(e)return T=e,\"break\"},M=p?3:1;M>0&&\"break\"!==j(M);M--);e.placement!==T&&(e.modifiersData[n]._skip=!0,e.placement=T,e.reset=!0)}},requiresIfExists:[\"offset\"],data:{_skip:!1}};function De(t,e,i){return void 0===i&&(i={x:0,y:0}),{top:t.top-e.height-i.y,right:t.right-e.width+i.x,bottom:t.bottom-e.height+i.y,left:t.left-e.width-i.x}}function Se(t){return[mt,_t,gt,bt].some((function(e){return t[e]>=0}))}const Ne={name:\"hide\",enabled:!0,phase:\"main\",requiresIfExists:[\"preventOverflow\"],fn:function(t){var e=t.state,i=t.name,n=e.rects.reference,s=e.rects.popper,o=e.modifiersData.preventOverflow,r=ke(e,{elementContext:\"reference\"}),a=ke(e,{altBoundary:!0}),l=De(r,n),c=De(a,s,o),h=Se(l),d=Se(c);e.modifiersData[i]={referenceClippingOffsets:l,popperEscapeOffsets:c,isReferenceHidden:h,hasPopperEscaped:d},e.attributes.popper=Object.assign({},e.attributes.popper,{\"data-popper-reference-hidden\":h,\"data-popper-escaped\":d})}},Ie={name:\"offset\",enabled:!0,phase:\"main\",requires:[\"popperOffsets\"],fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.offset,o=void 0===s?[0,0]:s,r=Lt.reduce((function(t,i){return t[i]=function(t,e,i){var n=Ut(t),s=[bt,mt].indexOf(n)>=0?-1:1,o=\"function\"==typeof i?i(Object.assign({},e,{placement:t})):i,r=o[0],a=o[1];return r=r||0,a=(a||0)*s,[bt,_t].indexOf(n)>=0?{x:a,y:r}:{x:r,y:a}}(i,e.rects,o),t}),{}),a=r[e.placement],l=a.x,c=a.y;null!=e.modifiersData.popperOffsets&&(e.modifiersData.popperOffsets.x+=l,e.modifiersData.popperOffsets.y+=c),e.modifiersData[n]=r}},Pe={name:\"popperOffsets\",enabled:!0,phase:\"read\",fn:function(t){var e=t.state,i=t.name;e.modifiersData[i]=Ce({reference:e.rects.reference,element:e.rects.popper,strategy:\"absolute\",placement:e.placement})},data:{}},je={name:\"preventOverflow\",enabled:!0,phase:\"main\",fn:function(t){var e=t.state,i=t.options,n=t.name,s=i.mainAxis,o=void 0===s||s,r=i.altAxis,a=void 0!==r&&r,l=i.boundary,c=i.rootBoundary,h=i.altBoundary,d=i.padding,u=i.tether,f=void 0===u||u,p=i.tetherOffset,m=void 0===p?0:p,g=ke(e,{boundary:l,rootBoundary:c,padding:d,altBoundary:h}),_=Ut(e.placement),b=ce(e.placement),v=!b,y=ee(_),w=\"x\"===y?\"y\":\"x\",E=e.modifiersData.popperOffsets,A=e.rects.reference,T=e.rects.popper,O=\"function\"==typeof m?m(Object.assign({},e.rects,{placement:e.placement})):m,C={x:0,y:0};if(E){if(o||a){var k=\"y\"===y?mt:bt,L=\"y\"===y?gt:_t,x=\"y\"===y?\"height\":\"width\",D=E[y],S=E[y]+g[k],N=E[y]-g[L],I=f?-T[x]/2:0,P=b===wt?A[x]:T[x],j=b===wt?-T[x]:-A[x],M=e.elements.arrow,H=f&&M?Kt(M):{width:0,height:0},B=e.modifiersData[\"arrow#persistent\"]?e.modifiersData[\"arrow#persistent\"].padding:{top:0,right:0,bottom:0,left:0},R=B[k],W=B[L],$=oe(0,A[x],H[x]),z=v?A[x]/2-I-$-R-O:P-$-R-O,q=v?-A[x]/2+I+$+W+O:j+$+W+O,F=e.elements.arrow&&te(e.elements.arrow),U=F?\"y\"===y?F.clientTop||0:F.clientLeft||0:0,V=e.modifiersData.offset?e.modifiersData.offset[e.placement][y]:0,K=E[y]+z-V-U,X=E[y]+q-V;if(o){var Y=oe(f?ne(S,K):S,D,f?ie(N,X):N);E[y]=Y,C[y]=Y-D}if(a){var Q=\"x\"===y?mt:bt,G=\"x\"===y?gt:_t,Z=E[w],J=Z+g[Q],tt=Z-g[G],et=oe(f?ne(J,K):J,Z,f?ie(tt,X):tt);E[w]=et,C[w]=et-Z}}e.modifiersData[n]=C}},requiresIfExists:[\"offset\"]};function Me(t,e,i){void 0===i&&(i=!1);var n=zt(e);zt(e)&&function(t){var e=t.getBoundingClientRect();e.width,t.offsetWidth,e.height,t.offsetHeight}(e);var s,o,r=Gt(e),a=Vt(t),l={scrollLeft:0,scrollTop:0},c={x:0,y:0};return(n||!n&&!i)&&((\"body\"!==Rt(e)||we(r))&&(l=(s=e)!==Wt(s)&&zt(s)?{scrollLeft:(o=s).scrollLeft,scrollTop:o.scrollTop}:ve(s)),zt(e)?((c=Vt(e)).x+=e.clientLeft,c.y+=e.clientTop):r&&(c.x=ye(r))),{x:a.left+l.scrollLeft-c.x,y:a.top+l.scrollTop-c.y,width:a.width,height:a.height}}function He(t){var e=new Map,i=new Set,n=[];function s(t){i.add(t.name),[].concat(t.requires||[],t.requiresIfExists||[]).forEach((function(t){if(!i.has(t)){var n=e.get(t);n&&s(n)}})),n.push(t)}return t.forEach((function(t){e.set(t.name,t)})),t.forEach((function(t){i.has(t.name)||s(t)})),n}var Be={placement:\"bottom\",modifiers:[],strategy:\"absolute\"};function Re(){for(var t=arguments.length,e=new Array(t),i=0;i<t;i++)e[i]=arguments[i];return!e.some((function(t){return!(t&&\"function\"==typeof t.getBoundingClientRect)}))}function We(t){void 0===t&&(t={});var e=t,i=e.defaultModifiers,n=void 0===i?[]:i,s=e.defaultOptions,o=void 0===s?Be:s;return function(t,e,i){void 0===i&&(i=o);var s,r,a={placement:\"bottom\",orderedModifiers:[],options:Object.assign({},Be,o),modifiersData:{},elements:{reference:t,popper:e},attributes:{},styles:{}},l=[],c=!1,h={state:a,setOptions:function(i){var s=\"function\"==typeof i?i(a.options):i;d(),a.options=Object.assign({},o,a.options,s),a.scrollParents={reference:$t(t)?Ae(t):t.contextElement?Ae(t.contextElement):[],popper:Ae(e)};var r,c,u=function(t){var e=He(t);return Bt.reduce((function(t,i){return t.concat(e.filter((function(t){return t.phase===i})))}),[])}((r=[].concat(n,a.options.modifiers),c=r.reduce((function(t,e){var i=t[e.name];return t[e.name]=i?Object.assign({},i,e,{options:Object.assign({},i.options,e.options),data:Object.assign({},i.data,e.data)}):e,t}),{}),Object.keys(c).map((function(t){return c[t]}))));return a.orderedModifiers=u.filter((function(t){return t.enabled})),a.orderedModifiers.forEach((function(t){var e=t.name,i=t.options,n=void 0===i?{}:i,s=t.effect;if(\"function\"==typeof s){var o=s({state:a,name:e,instance:h,options:n});l.push(o||function(){})}})),h.update()},forceUpdate:function(){if(!c){var t=a.elements,e=t.reference,i=t.popper;if(Re(e,i)){a.rects={reference:Me(e,te(i),\"fixed\"===a.options.strategy),popper:Kt(i)},a.reset=!1,a.placement=a.options.placement,a.orderedModifiers.forEach((function(t){return a.modifiersData[t.name]=Object.assign({},t.data)}));for(var n=0;n<a.orderedModifiers.length;n++)if(!0!==a.reset){var s=a.orderedModifiers[n],o=s.fn,r=s.options,l=void 0===r?{}:r,d=s.name;\"function\"==typeof o&&(a=o({state:a,options:l,name:d,instance:h})||a)}else a.reset=!1,n=-1}}},update:(s=function(){return new Promise((function(t){h.forceUpdate(),t(a)}))},function(){return r||(r=new Promise((function(t){Promise.resolve().then((function(){r=void 0,t(s())}))}))),r}),destroy:function(){d(),c=!0}};if(!Re(t,e))return h;function d(){l.forEach((function(t){return t()})),l=[]}return h.setOptions(i).then((function(t){!c&&i.onFirstUpdate&&i.onFirstUpdate(t)})),h}}var $e=We(),ze=We({defaultModifiers:[pe,Pe,ue,Ft]}),qe=We({defaultModifiers:[pe,Pe,ue,Ft,Ie,xe,je,le,Ne]});const Fe=Object.freeze({__proto__:null,popperGenerator:We,detectOverflow:ke,createPopperBase:$e,createPopper:qe,createPopperLite:ze,top:mt,bottom:gt,right:_t,left:bt,auto:vt,basePlacements:yt,start:wt,end:Et,clippingParents:At,viewport:Tt,popper:Ot,reference:Ct,variationPlacements:kt,placements:Lt,beforeRead:xt,read:Dt,afterRead:St,beforeMain:Nt,main:It,afterMain:Pt,beforeWrite:jt,write:Mt,afterWrite:Ht,modifierPhases:Bt,applyStyles:Ft,arrow:le,computeStyles:ue,eventListeners:pe,flip:xe,hide:Ne,offset:Ie,popperOffsets:Pe,preventOverflow:je}),Ue=\"dropdown\",Ve=\"Escape\",Ke=\"Space\",Xe=\"ArrowUp\",Ye=\"ArrowDown\",Qe=new RegExp(\"ArrowUp|ArrowDown|Escape\"),Ge=\"click.bs.dropdown.data-api\",Ze=\"keydown.bs.dropdown.data-api\",Je=\"show\",ti='[data-bs-toggle=\"dropdown\"]',ei=\".dropdown-menu\",ii=m()?\"top-end\":\"top-start\",ni=m()?\"top-start\":\"top-end\",si=m()?\"bottom-end\":\"bottom-start\",oi=m()?\"bottom-start\":\"bottom-end\",ri=m()?\"left-start\":\"right-start\",ai=m()?\"right-start\":\"left-start\",li={offset:[0,2],boundary:\"clippingParents\",reference:\"toggle\",display:\"dynamic\",popperConfig:null,autoClose:!0},ci={offset:\"(array|string|function)\",boundary:\"(string|element)\",reference:\"(string|element|object)\",display:\"string\",popperConfig:\"(null|object|function)\",autoClose:\"(boolean|string)\"};class hi extends B{constructor(t,e){super(t),this._popper=null,this._config=this._getConfig(e),this._menu=this._getMenuElement(),this._inNavbar=this._detectNavbar()}static get Default(){return li}static get DefaultType(){return ci}static get NAME(){return Ue}toggle(){return this._isShown()?this.hide():this.show()}show(){if(c(this._element)||this._isShown(this._menu))return;const t={relatedTarget:this._element};if(j.trigger(this._element,\"show.bs.dropdown\",t).defaultPrevented)return;const e=hi.getParentFromElement(this._element);this._inNavbar?U.setDataAttribute(this._menu,\"popper\",\"none\"):this._createPopper(e),\"ontouchstart\"in document.documentElement&&!e.closest(\".navbar-nav\")&&[].concat(...document.body.children).forEach((t=>j.on(t,\"mouseover\",d))),this._element.focus(),this._element.setAttribute(\"aria-expanded\",!0),this._menu.classList.add(Je),this._element.classList.add(Je),j.trigger(this._element,\"shown.bs.dropdown\",t)}hide(){if(c(this._element)||!this._isShown(this._menu))return;const t={relatedTarget:this._element};this._completeHide(t)}dispose(){this._popper&&this._popper.destroy(),super.dispose()}update(){this._inNavbar=this._detectNavbar(),this._popper&&this._popper.update()}_completeHide(t){j.trigger(this._element,\"hide.bs.dropdown\",t).defaultPrevented||(\"ontouchstart\"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,\"mouseover\",d))),this._popper&&this._popper.destroy(),this._menu.classList.remove(Je),this._element.classList.remove(Je),this._element.setAttribute(\"aria-expanded\",\"false\"),U.removeDataAttribute(this._menu,\"popper\"),j.trigger(this._element,\"hidden.bs.dropdown\",t))}_getConfig(t){if(t={...this.constructor.Default,...U.getDataAttributes(this._element),...t},a(Ue,t,this.constructor.DefaultType),\"object\"==typeof t.reference&&!o(t.reference)&&\"function\"!=typeof t.reference.getBoundingClientRect)throw new TypeError(`${Ue.toUpperCase()}: Option \"reference\" provided type \"object\" without a required \"getBoundingClientRect\" method.`);return t}_createPopper(t){if(void 0===Fe)throw new TypeError(\"Bootstrap's dropdowns require Popper (https://popper.js.org)\");let e=this._element;\"parent\"===this._config.reference?e=t:o(this._config.reference)?e=r(this._config.reference):\"object\"==typeof this._config.reference&&(e=this._config.reference);const i=this._getPopperConfig(),n=i.modifiers.find((t=>\"applyStyles\"===t.name&&!1===t.enabled));this._popper=qe(e,this._menu,i),n&&U.setDataAttribute(this._menu,\"popper\",\"static\")}_isShown(t=this._element){return t.classList.contains(Je)}_getMenuElement(){return V.next(this._element,ei)[0]}_getPlacement(){const t=this._element.parentNode;if(t.classList.contains(\"dropend\"))return ri;if(t.classList.contains(\"dropstart\"))return ai;const e=\"end\"===getComputedStyle(this._menu).getPropertyValue(\"--bs-position\").trim();return t.classList.contains(\"dropup\")?e?ni:ii:e?oi:si}_detectNavbar(){return null!==this._element.closest(\".navbar\")}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map((t=>Number.parseInt(t,10))):\"function\"==typeof t?e=>t(e,this._element):t}_getPopperConfig(){const t={placement:this._getPlacement(),modifiers:[{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"offset\",options:{offset:this._getOffset()}}]};return\"static\"===this._config.display&&(t.modifiers=[{name:\"applyStyles\",enabled:!1}]),{...t,...\"function\"==typeof this._config.popperConfig?this._config.popperConfig(t):this._config.popperConfig}}_selectMenuItem({key:t,target:e}){const i=V.find(\".dropdown-menu .dropdown-item:not(.disabled):not(:disabled)\",this._menu).filter(l);i.length&&v(i,e,t===Ye,!i.includes(e)).focus()}static jQueryInterface(t){return this.each((function(){const e=hi.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}static clearMenus(t){if(t&&(2===t.button||\"keyup\"===t.type&&\"Tab\"!==t.key))return;const e=V.find(ti);for(let i=0,n=e.length;i<n;i++){const n=hi.getInstance(e[i]);if(!n||!1===n._config.autoClose)continue;if(!n._isShown())continue;const s={relatedTarget:n._element};if(t){const e=t.composedPath(),i=e.includes(n._menu);if(e.includes(n._element)||\"inside\"===n._config.autoClose&&!i||\"outside\"===n._config.autoClose&&i)continue;if(n._menu.contains(t.target)&&(\"keyup\"===t.type&&\"Tab\"===t.key||/input|select|option|textarea|form/i.test(t.target.tagName)))continue;\"click\"===t.type&&(s.clickEvent=t)}n._completeHide(s)}}static getParentFromElement(t){return n(t)||t.parentNode}static dataApiKeydownHandler(t){if(/input|textarea/i.test(t.target.tagName)?t.key===Ke||t.key!==Ve&&(t.key!==Ye&&t.key!==Xe||t.target.closest(ei)):!Qe.test(t.key))return;const e=this.classList.contains(Je);if(!e&&t.key===Ve)return;if(t.preventDefault(),t.stopPropagation(),c(this))return;const i=this.matches(ti)?this:V.prev(this,ti)[0],n=hi.getOrCreateInstance(i);if(t.key!==Ve)return t.key===Xe||t.key===Ye?(e||n.show(),void n._selectMenuItem(t)):void(e&&t.key!==Ke||hi.clearMenus());n.hide()}}j.on(document,Ze,ti,hi.dataApiKeydownHandler),j.on(document,Ze,ei,hi.dataApiKeydownHandler),j.on(document,Ge,hi.clearMenus),j.on(document,\"keyup.bs.dropdown.data-api\",hi.clearMenus),j.on(document,Ge,ti,(function(t){t.preventDefault(),hi.getOrCreateInstance(this).toggle()})),g(hi);const di=\".fixed-top, .fixed-bottom, .is-fixed, .sticky-top\",ui=\".sticky-top\";class fi{constructor(){this._element=document.body}getWidth(){const t=document.documentElement.clientWidth;return Math.abs(window.innerWidth-t)}hide(){const t=this.getWidth();this._disableOverFlow(),this._setElementAttributes(this._element,\"paddingRight\",(e=>e+t)),this._setElementAttributes(di,\"paddingRight\",(e=>e+t)),this._setElementAttributes(ui,\"marginRight\",(e=>e-t))}_disableOverFlow(){this._saveInitialAttribute(this._element,\"overflow\"),this._element.style.overflow=\"hidden\"}_setElementAttributes(t,e,i){const n=this.getWidth();this._applyManipulationCallback(t,(t=>{if(t!==this._element&&window.innerWidth>t.clientWidth+n)return;this._saveInitialAttribute(t,e);const s=window.getComputedStyle(t)[e];t.style[e]=`${i(Number.parseFloat(s))}px`}))}reset(){this._resetElementAttributes(this._element,\"overflow\"),this._resetElementAttributes(this._element,\"paddingRight\"),this._resetElementAttributes(di,\"paddingRight\"),this._resetElementAttributes(ui,\"marginRight\")}_saveInitialAttribute(t,e){const i=t.style[e];i&&U.setDataAttribute(t,e,i)}_resetElementAttributes(t,e){this._applyManipulationCallback(t,(t=>{const i=U.getDataAttribute(t,e);void 0===i?t.style.removeProperty(e):(U.removeDataAttribute(t,e),t.style[e]=i)}))}_applyManipulationCallback(t,e){o(t)?e(t):V.find(t,this._element).forEach(e)}isOverflowing(){return this.getWidth()>0}}const pi={className:\"modal-backdrop\",isVisible:!0,isAnimated:!1,rootElement:\"body\",clickCallback:null},mi={className:\"string\",isVisible:\"boolean\",isAnimated:\"boolean\",rootElement:\"(element|string)\",clickCallback:\"(function|null)\"},gi=\"show\",_i=\"mousedown.bs.backdrop\";class bi{constructor(t){this._config=this._getConfig(t),this._isAppended=!1,this._element=null}show(t){this._config.isVisible?(this._append(),this._config.isAnimated&&u(this._getElement()),this._getElement().classList.add(gi),this._emulateAnimation((()=>{_(t)}))):_(t)}hide(t){this._config.isVisible?(this._getElement().classList.remove(gi),this._emulateAnimation((()=>{this.dispose(),_(t)}))):_(t)}_getElement(){if(!this._element){const t=document.createElement(\"div\");t.className=this._config.className,this._config.isAnimated&&t.classList.add(\"fade\"),this._element=t}return this._element}_getConfig(t){return(t={...pi,...\"object\"==typeof t?t:{}}).rootElement=r(t.rootElement),a(\"backdrop\",t,mi),t}_append(){this._isAppended||(this._config.rootElement.append(this._getElement()),j.on(this._getElement(),_i,(()=>{_(this._config.clickCallback)})),this._isAppended=!0)}dispose(){this._isAppended&&(j.off(this._element,_i),this._element.remove(),this._isAppended=!1)}_emulateAnimation(t){b(t,this._getElement(),this._config.isAnimated)}}const vi={trapElement:null,autofocus:!0},yi={trapElement:\"element\",autofocus:\"boolean\"},wi=\".bs.focustrap\",Ei=\"backward\";class Ai{constructor(t){this._config=this._getConfig(t),this._isActive=!1,this._lastTabNavDirection=null}activate(){const{trapElement:t,autofocus:e}=this._config;this._isActive||(e&&t.focus(),j.off(document,wi),j.on(document,\"focusin.bs.focustrap\",(t=>this._handleFocusin(t))),j.on(document,\"keydown.tab.bs.focustrap\",(t=>this._handleKeydown(t))),this._isActive=!0)}deactivate(){this._isActive&&(this._isActive=!1,j.off(document,wi))}_handleFocusin(t){const{target:e}=t,{trapElement:i}=this._config;if(e===document||e===i||i.contains(e))return;const n=V.focusableChildren(i);0===n.length?i.focus():this._lastTabNavDirection===Ei?n[n.length-1].focus():n[0].focus()}_handleKeydown(t){\"Tab\"===t.key&&(this._lastTabNavDirection=t.shiftKey?Ei:\"forward\")}_getConfig(t){return t={...vi,...\"object\"==typeof t?t:{}},a(\"focustrap\",t,yi),t}}const Ti=\"modal\",Oi=\"Escape\",Ci={backdrop:!0,keyboard:!0,focus:!0},ki={backdrop:\"(boolean|string)\",keyboard:\"boolean\",focus:\"boolean\"},Li=\"hidden.bs.modal\",xi=\"show.bs.modal\",Di=\"resize.bs.modal\",Si=\"click.dismiss.bs.modal\",Ni=\"keydown.dismiss.bs.modal\",Ii=\"mousedown.dismiss.bs.modal\",Pi=\"modal-open\",ji=\"show\",Mi=\"modal-static\";class Hi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._dialog=V.findOne(\".modal-dialog\",this._element),this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._isShown=!1,this._ignoreBackdropClick=!1,this._isTransitioning=!1,this._scrollBar=new fi}static get Default(){return Ci}static get NAME(){return Ti}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||this._isTransitioning||j.trigger(this._element,xi,{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._isAnimated()&&(this._isTransitioning=!0),this._scrollBar.hide(),document.body.classList.add(Pi),this._adjustDialog(),this._setEscapeEvent(),this._setResizeEvent(),j.on(this._dialog,Ii,(()=>{j.one(this._element,\"mouseup.dismiss.bs.modal\",(t=>{t.target===this._element&&(this._ignoreBackdropClick=!0)}))})),this._showBackdrop((()=>this._showElement(t))))}hide(){if(!this._isShown||this._isTransitioning)return;if(j.trigger(this._element,\"hide.bs.modal\").defaultPrevented)return;this._isShown=!1;const t=this._isAnimated();t&&(this._isTransitioning=!0),this._setEscapeEvent(),this._setResizeEvent(),this._focustrap.deactivate(),this._element.classList.remove(ji),j.off(this._element,Si),j.off(this._dialog,Ii),this._queueCallback((()=>this._hideModal()),this._element,t)}dispose(){[window,this._dialog].forEach((t=>j.off(t,\".bs.modal\"))),this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}handleUpdate(){this._adjustDialog()}_initializeBackDrop(){return new bi({isVisible:Boolean(this._config.backdrop),isAnimated:this._isAnimated()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_getConfig(t){return t={...Ci,...U.getDataAttributes(this._element),...\"object\"==typeof t?t:{}},a(Ti,t,ki),t}_showElement(t){const e=this._isAnimated(),i=V.findOne(\".modal-body\",this._dialog);this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE||document.body.append(this._element),this._element.style.display=\"block\",this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.scrollTop=0,i&&(i.scrollTop=0),e&&u(this._element),this._element.classList.add(ji),this._queueCallback((()=>{this._config.focus&&this._focustrap.activate(),this._isTransitioning=!1,j.trigger(this._element,\"shown.bs.modal\",{relatedTarget:t})}),this._dialog,e)}_setEscapeEvent(){this._isShown?j.on(this._element,Ni,(t=>{this._config.keyboard&&t.key===Oi?(t.preventDefault(),this.hide()):this._config.keyboard||t.key!==Oi||this._triggerBackdropTransition()})):j.off(this._element,Ni)}_setResizeEvent(){this._isShown?j.on(window,Di,(()=>this._adjustDialog())):j.off(window,Di)}_hideModal(){this._element.style.display=\"none\",this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._isTransitioning=!1,this._backdrop.hide((()=>{document.body.classList.remove(Pi),this._resetAdjustments(),this._scrollBar.reset(),j.trigger(this._element,Li)}))}_showBackdrop(t){j.on(this._element,Si,(t=>{this._ignoreBackdropClick?this._ignoreBackdropClick=!1:t.target===t.currentTarget&&(!0===this._config.backdrop?this.hide():\"static\"===this._config.backdrop&&this._triggerBackdropTransition())})),this._backdrop.show(t)}_isAnimated(){return this._element.classList.contains(\"fade\")}_triggerBackdropTransition(){if(j.trigger(this._element,\"hidePrevented.bs.modal\").defaultPrevented)return;const{classList:t,scrollHeight:e,style:i}=this._element,n=e>document.documentElement.clientHeight;!n&&\"hidden\"===i.overflowY||t.contains(Mi)||(n||(i.overflowY=\"hidden\"),t.add(Mi),this._queueCallback((()=>{t.remove(Mi),n||this._queueCallback((()=>{i.overflowY=\"\"}),this._dialog)}),this._dialog),this._element.focus())}_adjustDialog(){const t=this._element.scrollHeight>document.documentElement.clientHeight,e=this._scrollBar.getWidth(),i=e>0;(!i&&t&&!m()||i&&!t&&m())&&(this._element.style.paddingLeft=`${e}px`),(i&&!t&&!m()||!i&&t&&m())&&(this._element.style.paddingRight=`${e}px`)}_resetAdjustments(){this._element.style.paddingLeft=\"\",this._element.style.paddingRight=\"\"}static jQueryInterface(t,e){return this.each((function(){const i=Hi.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===i[t])throw new TypeError(`No method named \"${t}\"`);i[t](e)}}))}}j.on(document,\"click.bs.modal.data-api\",'[data-bs-toggle=\"modal\"]',(function(t){const e=n(this);[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),j.one(e,xi,(t=>{t.defaultPrevented||j.one(e,Li,(()=>{l(this)&&this.focus()}))}));const i=V.findOne(\".modal.show\");i&&Hi.getInstance(i).hide(),Hi.getOrCreateInstance(e).toggle(this)})),R(Hi),g(Hi);const Bi=\"offcanvas\",Ri={backdrop:!0,keyboard:!0,scroll:!1},Wi={backdrop:\"boolean\",keyboard:\"boolean\",scroll:\"boolean\"},$i=\"show\",zi=\".offcanvas.show\",qi=\"hidden.bs.offcanvas\";class Fi extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._isShown=!1,this._backdrop=this._initializeBackDrop(),this._focustrap=this._initializeFocusTrap(),this._addEventListeners()}static get NAME(){return Bi}static get Default(){return Ri}toggle(t){return this._isShown?this.hide():this.show(t)}show(t){this._isShown||j.trigger(this._element,\"show.bs.offcanvas\",{relatedTarget:t}).defaultPrevented||(this._isShown=!0,this._element.style.visibility=\"visible\",this._backdrop.show(),this._config.scroll||(new fi).hide(),this._element.removeAttribute(\"aria-hidden\"),this._element.setAttribute(\"aria-modal\",!0),this._element.setAttribute(\"role\",\"dialog\"),this._element.classList.add($i),this._queueCallback((()=>{this._config.scroll||this._focustrap.activate(),j.trigger(this._element,\"shown.bs.offcanvas\",{relatedTarget:t})}),this._element,!0))}hide(){this._isShown&&(j.trigger(this._element,\"hide.bs.offcanvas\").defaultPrevented||(this._focustrap.deactivate(),this._element.blur(),this._isShown=!1,this._element.classList.remove($i),this._backdrop.hide(),this._queueCallback((()=>{this._element.setAttribute(\"aria-hidden\",!0),this._element.removeAttribute(\"aria-modal\"),this._element.removeAttribute(\"role\"),this._element.style.visibility=\"hidden\",this._config.scroll||(new fi).reset(),j.trigger(this._element,qi)}),this._element,!0)))}dispose(){this._backdrop.dispose(),this._focustrap.deactivate(),super.dispose()}_getConfig(t){return t={...Ri,...U.getDataAttributes(this._element),...\"object\"==typeof t?t:{}},a(Bi,t,Wi),t}_initializeBackDrop(){return new bi({className:\"offcanvas-backdrop\",isVisible:this._config.backdrop,isAnimated:!0,rootElement:this._element.parentNode,clickCallback:()=>this.hide()})}_initializeFocusTrap(){return new Ai({trapElement:this._element})}_addEventListeners(){j.on(this._element,\"keydown.dismiss.bs.offcanvas\",(t=>{this._config.keyboard&&\"Escape\"===t.key&&this.hide()}))}static jQueryInterface(t){return this.each((function(){const e=Fi.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t]||t.startsWith(\"_\")||\"constructor\"===t)throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}j.on(document,\"click.bs.offcanvas.data-api\",'[data-bs-toggle=\"offcanvas\"]',(function(t){const e=n(this);if([\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),c(this))return;j.one(e,qi,(()=>{l(this)&&this.focus()}));const i=V.findOne(zi);i&&i!==e&&Fi.getInstance(i).hide(),Fi.getOrCreateInstance(e).toggle(this)})),j.on(window,\"load.bs.offcanvas.data-api\",(()=>V.find(zi).forEach((t=>Fi.getOrCreateInstance(t).show())))),R(Fi),g(Fi);const Ui=new Set([\"background\",\"cite\",\"href\",\"itemtype\",\"longdesc\",\"poster\",\"src\",\"xlink:href\"]),Vi=/^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i,Ki=/^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[\\d+/a-z]+=*$/i,Xi=(t,e)=>{const i=t.nodeName.toLowerCase();if(e.includes(i))return!Ui.has(i)||Boolean(Vi.test(t.nodeValue)||Ki.test(t.nodeValue));const n=e.filter((t=>t instanceof RegExp));for(let t=0,e=n.length;t<e;t++)if(n[t].test(i))return!0;return!1};function Yi(t,e,i){if(!t.length)return t;if(i&&\"function\"==typeof i)return i(t);const n=(new window.DOMParser).parseFromString(t,\"text/html\"),s=[].concat(...n.body.querySelectorAll(\"*\"));for(let t=0,i=s.length;t<i;t++){const i=s[t],n=i.nodeName.toLowerCase();if(!Object.keys(e).includes(n)){i.remove();continue}const o=[].concat(...i.attributes),r=[].concat(e[\"*\"]||[],e[n]||[]);o.forEach((t=>{Xi(t,r)||i.removeAttribute(t.nodeName)}))}return n.body.innerHTML}const Qi=\"tooltip\",Gi=new Set([\"sanitize\",\"allowList\",\"sanitizeFn\"]),Zi={animation:\"boolean\",template:\"string\",title:\"(string|element|function)\",trigger:\"string\",delay:\"(number|object)\",html:\"boolean\",selector:\"(string|boolean)\",placement:\"(string|function)\",offset:\"(array|string|function)\",container:\"(string|element|boolean)\",fallbackPlacements:\"array\",boundary:\"(string|element)\",customClass:\"(string|function)\",sanitize:\"boolean\",sanitizeFn:\"(null|function)\",allowList:\"object\",popperConfig:\"(null|object|function)\"},Ji={AUTO:\"auto\",TOP:\"top\",RIGHT:m()?\"left\":\"right\",BOTTOM:\"bottom\",LEFT:m()?\"right\":\"left\"},tn={animation:!0,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,selector:!1,placement:\"top\",offset:[0,0],container:!1,fallbackPlacements:[\"top\",\"right\",\"bottom\",\"left\"],boundary:\"clippingParents\",customClass:\"\",sanitize:!0,sanitizeFn:null,allowList:{\"*\":[\"class\",\"dir\",\"id\",\"lang\",\"role\",/^aria-[\\w-]*$/i],a:[\"target\",\"href\",\"title\",\"rel\"],area:[],b:[],br:[],col:[],code:[],div:[],em:[],hr:[],h1:[],h2:[],h3:[],h4:[],h5:[],h6:[],i:[],img:[\"src\",\"srcset\",\"alt\",\"title\",\"width\",\"height\"],li:[],ol:[],p:[],pre:[],s:[],small:[],span:[],sub:[],sup:[],strong:[],u:[],ul:[]},popperConfig:null},en={HIDE:\"hide.bs.tooltip\",HIDDEN:\"hidden.bs.tooltip\",SHOW:\"show.bs.tooltip\",SHOWN:\"shown.bs.tooltip\",INSERTED:\"inserted.bs.tooltip\",CLICK:\"click.bs.tooltip\",FOCUSIN:\"focusin.bs.tooltip\",FOCUSOUT:\"focusout.bs.tooltip\",MOUSEENTER:\"mouseenter.bs.tooltip\",MOUSELEAVE:\"mouseleave.bs.tooltip\"},nn=\"fade\",sn=\"show\",on=\"show\",rn=\"out\",an=\".tooltip-inner\",ln=\".modal\",cn=\"hide.bs.modal\",hn=\"hover\",dn=\"focus\";class un extends B{constructor(t,e){if(void 0===Fe)throw new TypeError(\"Bootstrap's tooltips require Popper (https://popper.js.org)\");super(t),this._isEnabled=!0,this._timeout=0,this._hoverState=\"\",this._activeTrigger={},this._popper=null,this._config=this._getConfig(e),this.tip=null,this._setListeners()}static get Default(){return tn}static get NAME(){return Qi}static get Event(){return en}static get DefaultType(){return Zi}enable(){this._isEnabled=!0}disable(){this._isEnabled=!1}toggleEnabled(){this._isEnabled=!this._isEnabled}toggle(t){if(this._isEnabled)if(t){const e=this._initializeOnDelegatedTarget(t);e._activeTrigger.click=!e._activeTrigger.click,e._isWithActiveTrigger()?e._enter(null,e):e._leave(null,e)}else{if(this.getTipElement().classList.contains(sn))return void this._leave(null,this);this._enter(null,this)}}dispose(){clearTimeout(this._timeout),j.off(this._element.closest(ln),cn,this._hideModalHandler),this.tip&&this.tip.remove(),this._disposePopper(),super.dispose()}show(){if(\"none\"===this._element.style.display)throw new Error(\"Please use show on visible elements\");if(!this.isWithContent()||!this._isEnabled)return;const t=j.trigger(this._element,this.constructor.Event.SHOW),e=h(this._element),i=null===e?this._element.ownerDocument.documentElement.contains(this._element):e.contains(this._element);if(t.defaultPrevented||!i)return;\"tooltip\"===this.constructor.NAME&&this.tip&&this.getTitle()!==this.tip.querySelector(an).innerHTML&&(this._disposePopper(),this.tip.remove(),this.tip=null);const n=this.getTipElement(),s=(t=>{do{t+=Math.floor(1e6*Math.random())}while(document.getElementById(t));return t})(this.constructor.NAME);n.setAttribute(\"id\",s),this._element.setAttribute(\"aria-describedby\",s),this._config.animation&&n.classList.add(nn);const o=\"function\"==typeof this._config.placement?this._config.placement.call(this,n,this._element):this._config.placement,r=this._getAttachment(o);this._addAttachmentClass(r);const{container:a}=this._config;H.set(n,this.constructor.DATA_KEY,this),this._element.ownerDocument.documentElement.contains(this.tip)||(a.append(n),j.trigger(this._element,this.constructor.Event.INSERTED)),this._popper?this._popper.update():this._popper=qe(this._element,n,this._getPopperConfig(r)),n.classList.add(sn);const l=this._resolvePossibleFunction(this._config.customClass);l&&n.classList.add(...l.split(\" \")),\"ontouchstart\"in document.documentElement&&[].concat(...document.body.children).forEach((t=>{j.on(t,\"mouseover\",d)}));const c=this.tip.classList.contains(nn);this._queueCallback((()=>{const t=this._hoverState;this._hoverState=null,j.trigger(this._element,this.constructor.Event.SHOWN),t===rn&&this._leave(null,this)}),this.tip,c)}hide(){if(!this._popper)return;const t=this.getTipElement();if(j.trigger(this._element,this.constructor.Event.HIDE).defaultPrevented)return;t.classList.remove(sn),\"ontouchstart\"in document.documentElement&&[].concat(...document.body.children).forEach((t=>j.off(t,\"mouseover\",d))),this._activeTrigger.click=!1,this._activeTrigger.focus=!1,this._activeTrigger.hover=!1;const e=this.tip.classList.contains(nn);this._queueCallback((()=>{this._isWithActiveTrigger()||(this._hoverState!==on&&t.remove(),this._cleanTipClass(),this._element.removeAttribute(\"aria-describedby\"),j.trigger(this._element,this.constructor.Event.HIDDEN),this._disposePopper())}),this.tip,e),this._hoverState=\"\"}update(){null!==this._popper&&this._popper.update()}isWithContent(){return Boolean(this.getTitle())}getTipElement(){if(this.tip)return this.tip;const t=document.createElement(\"div\");t.innerHTML=this._config.template;const e=t.children[0];return this.setContent(e),e.classList.remove(nn,sn),this.tip=e,this.tip}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),an)}_sanitizeAndSetContent(t,e,i){const n=V.findOne(i,t);e||!n?this.setElementContent(n,e):n.remove()}setElementContent(t,e){if(null!==t)return o(e)?(e=r(e),void(this._config.html?e.parentNode!==t&&(t.innerHTML=\"\",t.append(e)):t.textContent=e.textContent)):void(this._config.html?(this._config.sanitize&&(e=Yi(e,this._config.allowList,this._config.sanitizeFn)),t.innerHTML=e):t.textContent=e)}getTitle(){const t=this._element.getAttribute(\"data-bs-original-title\")||this._config.title;return this._resolvePossibleFunction(t)}updateAttachment(t){return\"right\"===t?\"end\":\"left\"===t?\"start\":t}_initializeOnDelegatedTarget(t,e){return e||this.constructor.getOrCreateInstance(t.delegateTarget,this._getDelegateConfig())}_getOffset(){const{offset:t}=this._config;return\"string\"==typeof t?t.split(\",\").map((t=>Number.parseInt(t,10))):\"function\"==typeof t?e=>t(e,this._element):t}_resolvePossibleFunction(t){return\"function\"==typeof t?t.call(this._element):t}_getPopperConfig(t){const e={placement:t,modifiers:[{name:\"flip\",options:{fallbackPlacements:this._config.fallbackPlacements}},{name:\"offset\",options:{offset:this._getOffset()}},{name:\"preventOverflow\",options:{boundary:this._config.boundary}},{name:\"arrow\",options:{element:`.${this.constructor.NAME}-arrow`}},{name:\"onChange\",enabled:!0,phase:\"afterWrite\",fn:t=>this._handlePopperPlacementChange(t)}],onFirstUpdate:t=>{t.options.placement!==t.placement&&this._handlePopperPlacementChange(t)}};return{...e,...\"function\"==typeof this._config.popperConfig?this._config.popperConfig(e):this._config.popperConfig}}_addAttachmentClass(t){this.getTipElement().classList.add(`${this._getBasicClassPrefix()}-${this.updateAttachment(t)}`)}_getAttachment(t){return Ji[t.toUpperCase()]}_setListeners(){this._config.trigger.split(\" \").forEach((t=>{if(\"click\"===t)j.on(this._element,this.constructor.Event.CLICK,this._config.selector,(t=>this.toggle(t)));else if(\"manual\"!==t){const e=t===hn?this.constructor.Event.MOUSEENTER:this.constructor.Event.FOCUSIN,i=t===hn?this.constructor.Event.MOUSELEAVE:this.constructor.Event.FOCUSOUT;j.on(this._element,e,this._config.selector,(t=>this._enter(t))),j.on(this._element,i,this._config.selector,(t=>this._leave(t)))}})),this._hideModalHandler=()=>{this._element&&this.hide()},j.on(this._element.closest(ln),cn,this._hideModalHandler),this._config.selector?this._config={...this._config,trigger:\"manual\",selector:\"\"}:this._fixTitle()}_fixTitle(){const t=this._element.getAttribute(\"title\"),e=typeof this._element.getAttribute(\"data-bs-original-title\");(t||\"string\"!==e)&&(this._element.setAttribute(\"data-bs-original-title\",t||\"\"),!t||this._element.getAttribute(\"aria-label\")||this._element.textContent||this._element.setAttribute(\"aria-label\",t),this._element.setAttribute(\"title\",\"\"))}_enter(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[\"focusin\"===t.type?dn:hn]=!0),e.getTipElement().classList.contains(sn)||e._hoverState===on?e._hoverState=on:(clearTimeout(e._timeout),e._hoverState=on,e._config.delay&&e._config.delay.show?e._timeout=setTimeout((()=>{e._hoverState===on&&e.show()}),e._config.delay.show):e.show())}_leave(t,e){e=this._initializeOnDelegatedTarget(t,e),t&&(e._activeTrigger[\"focusout\"===t.type?dn:hn]=e._element.contains(t.relatedTarget)),e._isWithActiveTrigger()||(clearTimeout(e._timeout),e._hoverState=rn,e._config.delay&&e._config.delay.hide?e._timeout=setTimeout((()=>{e._hoverState===rn&&e.hide()}),e._config.delay.hide):e.hide())}_isWithActiveTrigger(){for(const t in this._activeTrigger)if(this._activeTrigger[t])return!0;return!1}_getConfig(t){const e=U.getDataAttributes(this._element);return Object.keys(e).forEach((t=>{Gi.has(t)&&delete e[t]})),(t={...this.constructor.Default,...e,...\"object\"==typeof t&&t?t:{}}).container=!1===t.container?document.body:r(t.container),\"number\"==typeof t.delay&&(t.delay={show:t.delay,hide:t.delay}),\"number\"==typeof t.title&&(t.title=t.title.toString()),\"number\"==typeof t.content&&(t.content=t.content.toString()),a(Qi,t,this.constructor.DefaultType),t.sanitize&&(t.template=Yi(t.template,t.allowList,t.sanitizeFn)),t}_getDelegateConfig(){const t={};for(const e in this._config)this.constructor.Default[e]!==this._config[e]&&(t[e]=this._config[e]);return t}_cleanTipClass(){const t=this.getTipElement(),e=new RegExp(`(^|\\\\s)${this._getBasicClassPrefix()}\\\\S+`,\"g\"),i=t.getAttribute(\"class\").match(e);null!==i&&i.length>0&&i.map((t=>t.trim())).forEach((e=>t.classList.remove(e)))}_getBasicClassPrefix(){return\"bs-tooltip\"}_handlePopperPlacementChange(t){const{state:e}=t;e&&(this.tip=e.elements.popper,this._cleanTipClass(),this._addAttachmentClass(this._getAttachment(e.placement)))}_disposePopper(){this._popper&&(this._popper.destroy(),this._popper=null)}static jQueryInterface(t){return this.each((function(){const e=un.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(un);const fn={...un.Default,placement:\"right\",offset:[0,8],trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"popover-arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>'},pn={...un.DefaultType,content:\"(string|element|function)\"},mn={HIDE:\"hide.bs.popover\",HIDDEN:\"hidden.bs.popover\",SHOW:\"show.bs.popover\",SHOWN:\"shown.bs.popover\",INSERTED:\"inserted.bs.popover\",CLICK:\"click.bs.popover\",FOCUSIN:\"focusin.bs.popover\",FOCUSOUT:\"focusout.bs.popover\",MOUSEENTER:\"mouseenter.bs.popover\",MOUSELEAVE:\"mouseleave.bs.popover\"};class gn extends un{static get Default(){return fn}static get NAME(){return\"popover\"}static get Event(){return mn}static get DefaultType(){return pn}isWithContent(){return this.getTitle()||this._getContent()}setContent(t){this._sanitizeAndSetContent(t,this.getTitle(),\".popover-header\"),this._sanitizeAndSetContent(t,this._getContent(),\".popover-body\")}_getContent(){return this._resolvePossibleFunction(this._config.content)}_getBasicClassPrefix(){return\"bs-popover\"}static jQueryInterface(t){return this.each((function(){const e=gn.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}g(gn);const _n=\"scrollspy\",bn={offset:10,method:\"auto\",target:\"\"},vn={offset:\"number\",method:\"string\",target:\"(string|element)\"},yn=\"active\",wn=\".nav-link, .list-group-item, .dropdown-item\",En=\"position\";class An extends B{constructor(t,e){super(t),this._scrollElement=\"BODY\"===this._element.tagName?window:this._element,this._config=this._getConfig(e),this._offsets=[],this._targets=[],this._activeTarget=null,this._scrollHeight=0,j.on(this._scrollElement,\"scroll.bs.scrollspy\",(()=>this._process())),this.refresh(),this._process()}static get Default(){return bn}static get NAME(){return _n}refresh(){const t=this._scrollElement===this._scrollElement.window?\"offset\":En,e=\"auto\"===this._config.method?t:this._config.method,n=e===En?this._getScrollTop():0;this._offsets=[],this._targets=[],this._scrollHeight=this._getScrollHeight(),V.find(wn,this._config.target).map((t=>{const s=i(t),o=s?V.findOne(s):null;if(o){const t=o.getBoundingClientRect();if(t.width||t.height)return[U[e](o).top+n,s]}return null})).filter((t=>t)).sort(((t,e)=>t[0]-e[0])).forEach((t=>{this._offsets.push(t[0]),this._targets.push(t[1])}))}dispose(){j.off(this._scrollElement,\".bs.scrollspy\"),super.dispose()}_getConfig(t){return(t={...bn,...U.getDataAttributes(this._element),...\"object\"==typeof t&&t?t:{}}).target=r(t.target)||document.documentElement,a(_n,t,vn),t}_getScrollTop(){return this._scrollElement===window?this._scrollElement.pageYOffset:this._scrollElement.scrollTop}_getScrollHeight(){return this._scrollElement.scrollHeight||Math.max(document.body.scrollHeight,document.documentElement.scrollHeight)}_getOffsetHeight(){return this._scrollElement===window?window.innerHeight:this._scrollElement.getBoundingClientRect().height}_process(){const t=this._getScrollTop()+this._config.offset,e=this._getScrollHeight(),i=this._config.offset+e-this._getOffsetHeight();if(this._scrollHeight!==e&&this.refresh(),t>=i){const t=this._targets[this._targets.length-1];this._activeTarget!==t&&this._activate(t)}else{if(this._activeTarget&&t<this._offsets[0]&&this._offsets[0]>0)return this._activeTarget=null,void this._clear();for(let e=this._offsets.length;e--;)this._activeTarget!==this._targets[e]&&t>=this._offsets[e]&&(void 0===this._offsets[e+1]||t<this._offsets[e+1])&&this._activate(this._targets[e])}}_activate(t){this._activeTarget=t,this._clear();const e=wn.split(\",\").map((e=>`${e}[data-bs-target=\"${t}\"],${e}[href=\"${t}\"]`)),i=V.findOne(e.join(\",\"),this._config.target);i.classList.add(yn),i.classList.contains(\"dropdown-item\")?V.findOne(\".dropdown-toggle\",i.closest(\".dropdown\")).classList.add(yn):V.parents(i,\".nav, .list-group\").forEach((t=>{V.prev(t,\".nav-link, .list-group-item\").forEach((t=>t.classList.add(yn))),V.prev(t,\".nav-item\").forEach((t=>{V.children(t,\".nav-link\").forEach((t=>t.classList.add(yn)))}))})),j.trigger(this._scrollElement,\"activate.bs.scrollspy\",{relatedTarget:t})}_clear(){V.find(wn,this._config.target).filter((t=>t.classList.contains(yn))).forEach((t=>t.classList.remove(yn)))}static jQueryInterface(t){return this.each((function(){const e=An.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(window,\"load.bs.scrollspy.data-api\",(()=>{V.find('[data-bs-spy=\"scroll\"]').forEach((t=>new An(t)))})),g(An);const Tn=\"active\",On=\"fade\",Cn=\"show\",kn=\".active\",Ln=\":scope > li > .active\";class xn extends B{static get NAME(){return\"tab\"}show(){if(this._element.parentNode&&this._element.parentNode.nodeType===Node.ELEMENT_NODE&&this._element.classList.contains(Tn))return;let t;const e=n(this._element),i=this._element.closest(\".nav, .list-group\");if(i){const e=\"UL\"===i.nodeName||\"OL\"===i.nodeName?Ln:kn;t=V.find(e,i),t=t[t.length-1]}const s=t?j.trigger(t,\"hide.bs.tab\",{relatedTarget:this._element}):null;if(j.trigger(this._element,\"show.bs.tab\",{relatedTarget:t}).defaultPrevented||null!==s&&s.defaultPrevented)return;this._activate(this._element,i);const o=()=>{j.trigger(t,\"hidden.bs.tab\",{relatedTarget:this._element}),j.trigger(this._element,\"shown.bs.tab\",{relatedTarget:t})};e?this._activate(e,e.parentNode,o):o()}_activate(t,e,i){const n=(!e||\"UL\"!==e.nodeName&&\"OL\"!==e.nodeName?V.children(e,kn):V.find(Ln,e))[0],s=i&&n&&n.classList.contains(On),o=()=>this._transitionComplete(t,n,i);n&&s?(n.classList.remove(Cn),this._queueCallback(o,t,!0)):o()}_transitionComplete(t,e,i){if(e){e.classList.remove(Tn);const t=V.findOne(\":scope > .dropdown-menu .active\",e.parentNode);t&&t.classList.remove(Tn),\"tab\"===e.getAttribute(\"role\")&&e.setAttribute(\"aria-selected\",!1)}t.classList.add(Tn),\"tab\"===t.getAttribute(\"role\")&&t.setAttribute(\"aria-selected\",!0),u(t),t.classList.contains(On)&&t.classList.add(Cn);let n=t.parentNode;if(n&&\"LI\"===n.nodeName&&(n=n.parentNode),n&&n.classList.contains(\"dropdown-menu\")){const e=t.closest(\".dropdown\");e&&V.find(\".dropdown-toggle\",e).forEach((t=>t.classList.add(Tn))),t.setAttribute(\"aria-expanded\",!0)}i&&i()}static jQueryInterface(t){return this.each((function(){const e=xn.getOrCreateInstance(this);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t]()}}))}}j.on(document,\"click.bs.tab.data-api\",'[data-bs-toggle=\"tab\"], [data-bs-toggle=\"pill\"], [data-bs-toggle=\"list\"]',(function(t){[\"A\",\"AREA\"].includes(this.tagName)&&t.preventDefault(),c(this)||xn.getOrCreateInstance(this).show()})),g(xn);const Dn=\"toast\",Sn=\"hide\",Nn=\"show\",In=\"showing\",Pn={animation:\"boolean\",autohide:\"boolean\",delay:\"number\"},jn={animation:!0,autohide:!0,delay:5e3};class Mn extends B{constructor(t,e){super(t),this._config=this._getConfig(e),this._timeout=null,this._hasMouseInteraction=!1,this._hasKeyboardInteraction=!1,this._setListeners()}static get DefaultType(){return Pn}static get Default(){return jn}static get NAME(){return Dn}show(){j.trigger(this._element,\"show.bs.toast\").defaultPrevented||(this._clearTimeout(),this._config.animation&&this._element.classList.add(\"fade\"),this._element.classList.remove(Sn),u(this._element),this._element.classList.add(Nn),this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.remove(In),j.trigger(this._element,\"shown.bs.toast\"),this._maybeScheduleHide()}),this._element,this._config.animation))}hide(){this._element.classList.contains(Nn)&&(j.trigger(this._element,\"hide.bs.toast\").defaultPrevented||(this._element.classList.add(In),this._queueCallback((()=>{this._element.classList.add(Sn),this._element.classList.remove(In),this._element.classList.remove(Nn),j.trigger(this._element,\"hidden.bs.toast\")}),this._element,this._config.animation)))}dispose(){this._clearTimeout(),this._element.classList.contains(Nn)&&this._element.classList.remove(Nn),super.dispose()}_getConfig(t){return t={...jn,...U.getDataAttributes(this._element),...\"object\"==typeof t&&t?t:{}},a(Dn,t,this.constructor.DefaultType),t}_maybeScheduleHide(){this._config.autohide&&(this._hasMouseInteraction||this._hasKeyboardInteraction||(this._timeout=setTimeout((()=>{this.hide()}),this._config.delay)))}_onInteraction(t,e){switch(t.type){case\"mouseover\":case\"mouseout\":this._hasMouseInteraction=e;break;case\"focusin\":case\"focusout\":this._hasKeyboardInteraction=e}if(e)return void this._clearTimeout();const i=t.relatedTarget;this._element===i||this._element.contains(i)||this._maybeScheduleHide()}_setListeners(){j.on(this._element,\"mouseover.bs.toast\",(t=>this._onInteraction(t,!0))),j.on(this._element,\"mouseout.bs.toast\",(t=>this._onInteraction(t,!1))),j.on(this._element,\"focusin.bs.toast\",(t=>this._onInteraction(t,!0))),j.on(this._element,\"focusout.bs.toast\",(t=>this._onInteraction(t,!1)))}_clearTimeout(){clearTimeout(this._timeout),this._timeout=null}static jQueryInterface(t){return this.each((function(){const e=Mn.getOrCreateInstance(this,t);if(\"string\"==typeof t){if(void 0===e[t])throw new TypeError(`No method named \"${t}\"`);e[t](this)}}))}}return R(Mn),g(Mn),{Alert:W,Button:z,Carousel:st,Collapse:pt,Dropdown:hi,Modal:Hi,Offcanvas:Fi,Popover:gn,ScrollSpy:An,Tab:xn,Toast:Mn,Tooltip:un}}));\n//# sourceMappingURL=bootstrap.bundle.min.js.map\n/*!\n * perfect-scrollbar v1.5.3\n * Copyright 2021 Hyunje Jun, MDBootstrap and Contributors\n * Licensed under MIT\n */(function(a,b){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=b():\"function\"==typeof define&&define.amd?define(b):(a=a||self,a.PerfectScrollbar=b())})(this,function(){'use strict';var u=Math.abs,v=Math.floor;function a(a){return getComputedStyle(a)}function b(a,b){for(var c in b){var d=b[c];\"number\"==typeof d&&(d+=\"px\"),a.style[c]=d}return a}function c(a){var b=document.createElement(\"div\");return b.className=a,b}function d(a,b){if(!w)throw new Error(\"No element matching method supported\");return w.call(a,b)}function e(a){a.remove?a.remove():a.parentNode&&a.parentNode.removeChild(a)}function f(a,b){return Array.prototype.filter.call(a.children,function(a){return d(a,b)})}function g(a,b){var c=a.element.classList,d=z.state.scrolling(b);c.contains(d)?clearTimeout(A[b]):c.add(d)}function h(a,b){A[b]=setTimeout(function(){return a.isAlive&&a.element.classList.remove(z.state.scrolling(b))},a.settings.scrollingThreshold)}function j(a,b){g(a,b),h(a,b)}function k(a){if(\"function\"==typeof window.CustomEvent)return new CustomEvent(a);var b=document.createEvent(\"CustomEvent\");return b.initCustomEvent(a,!1,!1,void 0),b}function l(a,b,c,d,e){void 0===d&&(d=!0),void 0===e&&(e=!1);var f;if(\"top\"===b)f=[\"contentHeight\",\"containerHeight\",\"scrollTop\",\"y\",\"up\",\"down\"];else if(\"left\"===b)f=[\"contentWidth\",\"containerWidth\",\"scrollLeft\",\"x\",\"left\",\"right\"];else throw new Error(\"A proper axis should be provided\");m(a,c,f,d,e)}function m(a,b,c,d,e){var f=c[0],g=c[1],h=c[2],i=c[3],l=c[4],m=c[5];void 0===d&&(d=!0),void 0===e&&(e=!1);var n=a.element;// reset reach\na.reach[i]=null,1>n[h]&&(a.reach[i]=\"start\"),n[h]>a[f]-a[g]-1&&(a.reach[i]=\"end\"),b&&(n.dispatchEvent(k(\"ps-scroll-\"+i)),0>b?n.dispatchEvent(k(\"ps-scroll-\"+l)):0<b&&n.dispatchEvent(k(\"ps-scroll-\"+m)),d&&j(a,i)),a.reach[i]&&(b||e)&&n.dispatchEvent(k(\"ps-\"+i+\"-reach-\"+a.reach[i]))}function n(a){return parseInt(a,10)||0}function o(a){return d(a,\"input,[contenteditable]\")||d(a,\"select,[contenteditable]\")||d(a,\"textarea,[contenteditable]\")||d(a,\"button,[contenteditable]\")}function p(b){var c=a(b);return n(c.width)+n(c.paddingLeft)+n(c.paddingRight)+n(c.borderLeftWidth)+n(c.borderRightWidth)}function q(a){var b=Math.round,c=a.element,d=v(c.scrollTop),g=c.getBoundingClientRect();a.containerWidth=b(g.width),a.containerHeight=b(g.height),a.contentWidth=c.scrollWidth,a.contentHeight=c.scrollHeight,c.contains(a.scrollbarXRail)||(f(c,z.element.rail(\"x\")).forEach(function(a){return e(a)}),c.appendChild(a.scrollbarXRail)),c.contains(a.scrollbarYRail)||(f(c,z.element.rail(\"y\")).forEach(function(a){return e(a)}),c.appendChild(a.scrollbarYRail)),!a.settings.suppressScrollX&&a.containerWidth+a.settings.scrollXMarginOffset<a.contentWidth?(a.scrollbarXActive=!0,a.railXWidth=a.containerWidth-a.railXMarginWidth,a.railXRatio=a.containerWidth/a.railXWidth,a.scrollbarXWidth=r(a,n(a.railXWidth*a.containerWidth/a.contentWidth)),a.scrollbarXLeft=n((a.negativeScrollAdjustment+c.scrollLeft)*(a.railXWidth-a.scrollbarXWidth)/(a.contentWidth-a.containerWidth))):a.scrollbarXActive=!1,!a.settings.suppressScrollY&&a.containerHeight+a.settings.scrollYMarginOffset<a.contentHeight?(a.scrollbarYActive=!0,a.railYHeight=a.containerHeight-a.railYMarginHeight,a.railYRatio=a.containerHeight/a.railYHeight,a.scrollbarYHeight=r(a,n(a.railYHeight*a.containerHeight/a.contentHeight)),a.scrollbarYTop=n(d*(a.railYHeight-a.scrollbarYHeight)/(a.contentHeight-a.containerHeight))):a.scrollbarYActive=!1,a.scrollbarXLeft>=a.railXWidth-a.scrollbarXWidth&&(a.scrollbarXLeft=a.railXWidth-a.scrollbarXWidth),a.scrollbarYTop>=a.railYHeight-a.scrollbarYHeight&&(a.scrollbarYTop=a.railYHeight-a.scrollbarYHeight),s(c,a),a.scrollbarXActive?c.classList.add(z.state.active(\"x\")):(c.classList.remove(z.state.active(\"x\")),a.scrollbarXWidth=0,a.scrollbarXLeft=0,c.scrollLeft=!0===a.isRtl?a.contentWidth:0),a.scrollbarYActive?c.classList.add(z.state.active(\"y\")):(c.classList.remove(z.state.active(\"y\")),a.scrollbarYHeight=0,a.scrollbarYTop=0,c.scrollTop=0)}function r(a,b){var c=Math.min,d=Math.max;return a.settings.minScrollbarLength&&(b=d(b,a.settings.minScrollbarLength)),a.settings.maxScrollbarLength&&(b=c(b,a.settings.maxScrollbarLength)),b}function s(a,c){var d={width:c.railXWidth},e=v(a.scrollTop);d.left=c.isRtl?c.negativeScrollAdjustment+a.scrollLeft+c.containerWidth-c.contentWidth:a.scrollLeft,c.isScrollbarXUsingBottom?d.bottom=c.scrollbarXBottom-e:d.top=c.scrollbarXTop+e,b(c.scrollbarXRail,d);var f={top:e,height:c.railYHeight};c.isScrollbarYUsingRight?c.isRtl?f.right=c.contentWidth-(c.negativeScrollAdjustment+a.scrollLeft)-c.scrollbarYRight-c.scrollbarYOuterWidth-9:f.right=c.scrollbarYRight-a.scrollLeft:c.isRtl?f.left=c.negativeScrollAdjustment+a.scrollLeft+2*c.containerWidth-c.contentWidth-c.scrollbarYLeft-c.scrollbarYOuterWidth:f.left=c.scrollbarYLeft+a.scrollLeft,b(c.scrollbarYRail,f),b(c.scrollbarX,{left:c.scrollbarXLeft,width:c.scrollbarXWidth-c.railBorderXWidth}),b(c.scrollbarY,{top:c.scrollbarYTop,height:c.scrollbarYHeight-c.railBorderYWidth})}function t(a,b){function c(b){b.touches&&b.touches[0]&&(b[k]=b.touches[0].pageY),s[o]=t+v*(b[k]-u),g(a,p),q(a),b.stopPropagation(),b.type.startsWith(\"touch\")&&1<b.changedTouches.length&&b.preventDefault()}function d(){h(a,p),a[r].classList.remove(z.state.clicking),a.event.unbind(a.ownerDocument,\"mousemove\",c)}function f(b,e){t=s[o],e&&b.touches&&(b[k]=b.touches[0].pageY),u=b[k],v=(a[j]-a[i])/(a[l]-a[n]),e?a.event.bind(a.ownerDocument,\"touchmove\",c):(a.event.bind(a.ownerDocument,\"mousemove\",c),a.event.once(a.ownerDocument,\"mouseup\",d),b.preventDefault()),a[r].classList.add(z.state.clicking),b.stopPropagation()}var i=b[0],j=b[1],k=b[2],l=b[3],m=b[4],n=b[5],o=b[6],p=b[7],r=b[8],s=a.element,t=null,u=null,v=null;a.event.bind(a[m],\"mousedown\",function(a){f(a)}),a.event.bind(a[m],\"touchstart\",function(a){f(a,!0)})}var w=\"undefined\"!=typeof Element&&(Element.prototype.matches||Element.prototype.webkitMatchesSelector||Element.prototype.mozMatchesSelector||Element.prototype.msMatchesSelector),z={main:\"ps\",rtl:\"ps__rtl\",element:{thumb:function(a){return\"ps__thumb-\"+a},rail:function(a){return\"ps__rail-\"+a},consuming:\"ps__child--consume\"},state:{focus:\"ps--focus\",clicking:\"ps--clicking\",active:function(a){return\"ps--active-\"+a},scrolling:function(a){return\"ps--scrolling-\"+a}}},A={x:null,y:null},B=function(a){this.element=a,this.handlers={}},C={isEmpty:{configurable:!0}};B.prototype.bind=function(a,b){\"undefined\"==typeof this.handlers[a]&&(this.handlers[a]=[]),this.handlers[a].push(b),this.element.addEventListener(a,b,!1)},B.prototype.unbind=function(a,b){var c=this;this.handlers[a]=this.handlers[a].filter(function(d){return!!(b&&d!==b)||(c.element.removeEventListener(a,d,!1),!1)})},B.prototype.unbindAll=function(){for(var a in this.handlers)this.unbind(a)},C.isEmpty.get=function(){var a=this;return Object.keys(this.handlers).every(function(b){return 0===a.handlers[b].length})},Object.defineProperties(B.prototype,C);var D=function(){this.eventElements=[]};D.prototype.eventElement=function(a){var b=this.eventElements.filter(function(b){return b.element===a})[0];return b||(b=new B(a),this.eventElements.push(b)),b},D.prototype.bind=function(a,b,c){this.eventElement(a).bind(b,c)},D.prototype.unbind=function(a,b,c){var d=this.eventElement(a);d.unbind(b,c),d.isEmpty&&this.eventElements.splice(this.eventElements.indexOf(d),1)},D.prototype.unbindAll=function(){this.eventElements.forEach(function(a){return a.unbindAll()}),this.eventElements=[]},D.prototype.once=function(a,b,c){var d=this.eventElement(a),e=function(a){d.unbind(b,e),c(a)};d.bind(b,e)};var E={isWebKit:\"undefined\"!=typeof document&&\"WebkitAppearance\"in document.documentElement.style,supportsTouch:\"undefined\"!=typeof window&&(\"ontouchstart\"in window||\"maxTouchPoints\"in window.navigator&&0<window.navigator.maxTouchPoints||window.DocumentTouch&&document instanceof window.DocumentTouch),supportsIePointer:\"undefined\"!=typeof navigator&&navigator.msMaxTouchPoints,isChrome:\"undefined\"!=typeof navigator&&/Chrome/i.test(navigator&&navigator.userAgent)},F=function(){return{handlers:[\"click-rail\",\"drag-thumb\",\"keyboard\",\"wheel\",\"touch\"],maxScrollbarLength:null,minScrollbarLength:null,scrollingThreshold:1e3,scrollXMarginOffset:0,scrollYMarginOffset:0,suppressScrollX:!1,suppressScrollY:!1,swipeEasing:!0,useBothWheelAxes:!1,wheelPropagation:!0,wheelSpeed:1}},G={\"click-rail\":function(a){a.element;a.event.bind(a.scrollbarY,\"mousedown\",function(a){return a.stopPropagation()}),a.event.bind(a.scrollbarYRail,\"mousedown\",function(b){var c=b.pageY-window.pageYOffset-a.scrollbarYRail.getBoundingClientRect().top,d=c>a.scrollbarYTop?1:-1;a.element.scrollTop+=d*a.containerHeight,q(a),b.stopPropagation()}),a.event.bind(a.scrollbarX,\"mousedown\",function(a){return a.stopPropagation()}),a.event.bind(a.scrollbarXRail,\"mousedown\",function(b){var c=b.pageX-window.pageXOffset-a.scrollbarXRail.getBoundingClientRect().left,d=c>a.scrollbarXLeft?1:-1;a.element.scrollLeft+=d*a.containerWidth,q(a),b.stopPropagation()})},\"drag-thumb\":function(a){t(a,[\"containerWidth\",\"contentWidth\",\"pageX\",\"railXWidth\",\"scrollbarX\",\"scrollbarXWidth\",\"scrollLeft\",\"x\",\"scrollbarXRail\"]),t(a,[\"containerHeight\",\"contentHeight\",\"pageY\",\"railYHeight\",\"scrollbarY\",\"scrollbarYHeight\",\"scrollTop\",\"y\",\"scrollbarYRail\"])},keyboard:function(a){function b(b,d){var e=v(c.scrollTop);if(0===b){if(!a.scrollbarYActive)return!1;if(0===e&&0<d||e>=a.contentHeight-a.containerHeight&&0>d)return!a.settings.wheelPropagation}var f=c.scrollLeft;if(0===d){if(!a.scrollbarXActive)return!1;if(0===f&&0>b||f>=a.contentWidth-a.containerWidth&&0<b)return!a.settings.wheelPropagation}return!0}var c=a.element,f=function(){return d(c,\":hover\")},g=function(){return d(a.scrollbarX,\":focus\")||d(a.scrollbarY,\":focus\")};a.event.bind(a.ownerDocument,\"keydown\",function(d){if(!(d.isDefaultPrevented&&d.isDefaultPrevented()||d.defaultPrevented)&&(f()||g())){var e=document.activeElement?document.activeElement:a.ownerDocument.activeElement;if(e){if(\"IFRAME\"===e.tagName)e=e.contentDocument.activeElement;else// go deeper if element is a webcomponent\nfor(;e.shadowRoot;)e=e.shadowRoot.activeElement;if(o(e))return}var h=0,i=0;switch(d.which){case 37:h=d.metaKey?-a.contentWidth:d.altKey?-a.containerWidth:-30;break;case 38:i=d.metaKey?a.contentHeight:d.altKey?a.containerHeight:30;break;case 39:h=d.metaKey?a.contentWidth:d.altKey?a.containerWidth:30;break;case 40:i=d.metaKey?-a.contentHeight:d.altKey?-a.containerHeight:-30;break;case 32:i=d.shiftKey?a.containerHeight:-a.containerHeight;break;case 33:i=a.containerHeight;break;case 34:i=-a.containerHeight;break;case 36:i=a.contentHeight;break;case 35:i=-a.contentHeight;break;default:return;}a.settings.suppressScrollX&&0!==h||a.settings.suppressScrollY&&0!==i||(c.scrollTop-=i,c.scrollLeft+=h,q(a),b(h,i)&&d.preventDefault())}})},wheel:function(b){function c(a,c){var d,e=v(h.scrollTop),f=0===h.scrollTop,g=e+h.offsetHeight===h.scrollHeight,i=0===h.scrollLeft,j=h.scrollLeft+h.offsetWidth===h.scrollWidth;return d=u(c)>u(a)?f||g:i||j,!d||!b.settings.wheelPropagation}function d(a){var b=a.deltaX,c=-1*a.deltaY;return(\"undefined\"==typeof b||\"undefined\"==typeof c)&&(b=-1*a.wheelDeltaX/6,c=a.wheelDeltaY/6),a.deltaMode&&1===a.deltaMode&&(b*=10,c*=10),b!==b&&c!==c/* NaN checks */&&(b=0,c=a.wheelDelta),a.shiftKey?[-c,-b]:[b,c]}function f(b,c,d){// FIXME: this is a workaround for <select> issue in FF and IE #571\nif(!E.isWebKit&&h.querySelector(\"select:focus\"))return!0;if(!h.contains(b))return!1;for(var e=b;e&&e!==h;){if(e.classList.contains(z.element.consuming))return!0;var f=a(e);// if deltaY && vertical scrollable\nif(d&&f.overflowY.match(/(scroll|auto)/)){var g=e.scrollHeight-e.clientHeight;if(0<g&&(0<e.scrollTop&&0>d||e.scrollTop<g&&0<d))return!0}// if deltaX && horizontal scrollable\nif(c&&f.overflowX.match(/(scroll|auto)/)){var i=e.scrollWidth-e.clientWidth;if(0<i&&(0<e.scrollLeft&&0>c||e.scrollLeft<i&&0<c))return!0}e=e.parentNode}return!1}function g(a){var e=d(a),g=e[0],i=e[1];if(!f(a.target,g,i)){var j=!1;b.settings.useBothWheelAxes?b.scrollbarYActive&&!b.scrollbarXActive?(i?h.scrollTop-=i*b.settings.wheelSpeed:h.scrollTop+=g*b.settings.wheelSpeed,j=!0):b.scrollbarXActive&&!b.scrollbarYActive&&(g?h.scrollLeft+=g*b.settings.wheelSpeed:h.scrollLeft-=i*b.settings.wheelSpeed,j=!0):(h.scrollTop-=i*b.settings.wheelSpeed,h.scrollLeft+=g*b.settings.wheelSpeed),q(b),j=j||c(g,i),j&&!a.ctrlKey&&(a.stopPropagation(),a.preventDefault())}}var h=b.element;\"undefined\"==typeof window.onwheel?\"undefined\"!=typeof window.onmousewheel&&b.event.bind(h,\"mousewheel\",g):b.event.bind(h,\"wheel\",g)},touch:function(b){function c(a,c){var d=v(l.scrollTop),e=l.scrollLeft,f=u(a),g=u(c);if(g>f){// user is perhaps trying to swipe up/down the page\nif(0>c&&d===b.contentHeight-b.containerHeight||0<c&&0===d)// set prevent for mobile Chrome refresh\nreturn 0===window.scrollY&&0<c&&E.isChrome;}else if(f>g&&(0>a&&e===b.contentWidth-b.containerWidth||0<a&&0===e))// user is perhaps trying to swipe left/right across the page\nreturn!0;return!0}function d(a,c){l.scrollTop-=c,l.scrollLeft-=a,q(b)}function f(a){return a.targetTouches?a.targetTouches[0]:a}function g(a){return!(a.pointerType&&\"pen\"===a.pointerType&&0===a.buttons)&&(!!(a.targetTouches&&1===a.targetTouches.length)||!!(a.pointerType&&\"mouse\"!==a.pointerType&&a.pointerType!==a.MSPOINTER_TYPE_MOUSE))}function h(a){if(g(a)){var b=f(a);m.pageX=b.pageX,m.pageY=b.pageY,n=new Date().getTime(),null!==p&&clearInterval(p)}}function i(b,c,d){if(!l.contains(b))return!1;for(var e=b;e&&e!==l;){if(e.classList.contains(z.element.consuming))return!0;var f=a(e);// if deltaY && vertical scrollable\nif(d&&f.overflowY.match(/(scroll|auto)/)){var g=e.scrollHeight-e.clientHeight;if(0<g&&(0<e.scrollTop&&0>d||e.scrollTop<g&&0<d))return!0}// if deltaX && horizontal scrollable\nif(c&&f.overflowX.match(/(scroll|auto)/)){var h=e.scrollWidth-e.clientWidth;if(0<h&&(0<e.scrollLeft&&0>c||e.scrollLeft<h&&0<c))return!0}e=e.parentNode}return!1}function j(a){if(g(a)){var b=f(a),e={pageX:b.pageX,pageY:b.pageY},h=e.pageX-m.pageX,j=e.pageY-m.pageY;if(i(a.target,h,j))return;d(h,j),m=e;var k=new Date().getTime(),l=k-n;0<l&&(o.x=h/l,o.y=j/l,n=k),c(h,j)&&a.preventDefault()}}function k(){b.settings.swipeEasing&&(clearInterval(p),p=setInterval(function(){return b.isInitialized?void clearInterval(p):o.x||o.y?.01>u(o.x)&&.01>u(o.y)?void clearInterval(p):b.element?void(d(30*o.x,30*o.y),o.x*=.8,o.y*=.8):void clearInterval(p):void clearInterval(p)},10))}if(E.supportsTouch||E.supportsIePointer){var l=b.element,m={},n=0,o={},p=null;E.supportsTouch?(b.event.bind(l,\"touchstart\",h),b.event.bind(l,\"touchmove\",j),b.event.bind(l,\"touchend\",k)):E.supportsIePointer&&(window.PointerEvent?(b.event.bind(l,\"pointerdown\",h),b.event.bind(l,\"pointermove\",j),b.event.bind(l,\"pointerup\",k)):window.MSPointerEvent&&(b.event.bind(l,\"MSPointerDown\",h),b.event.bind(l,\"MSPointerMove\",j),b.event.bind(l,\"MSPointerUp\",k)))}}},H=function(d,e){var f=this;if(void 0===e&&(e={}),\"string\"==typeof d&&(d=document.querySelector(d)),!d||!d.nodeName)throw new Error(\"no element is specified to initialize PerfectScrollbar\");for(var g in this.element=d,d.classList.add(z.main),this.settings=F(),e)this.settings[g]=e[g];this.containerWidth=null,this.containerHeight=null,this.contentWidth=null,this.contentHeight=null;var h=function(){return d.classList.add(z.state.focus)},i=function(){return d.classList.remove(z.state.focus)};this.isRtl=\"rtl\"===a(d).direction,!0===this.isRtl&&d.classList.add(z.rtl),this.isNegativeScroll=function(){var a=d.scrollLeft,b=null;return d.scrollLeft=-1,b=0>d.scrollLeft,d.scrollLeft=a,b}(),this.negativeScrollAdjustment=this.isNegativeScroll?d.scrollWidth-d.clientWidth:0,this.event=new D,this.ownerDocument=d.ownerDocument||document,this.scrollbarXRail=c(z.element.rail(\"x\")),d.appendChild(this.scrollbarXRail),this.scrollbarX=c(z.element.thumb(\"x\")),this.scrollbarXRail.appendChild(this.scrollbarX),this.scrollbarX.setAttribute(\"tabindex\",0),this.event.bind(this.scrollbarX,\"focus\",h),this.event.bind(this.scrollbarX,\"blur\",i),this.scrollbarXActive=null,this.scrollbarXWidth=null,this.scrollbarXLeft=null;var j=a(this.scrollbarXRail);this.scrollbarXBottom=parseInt(j.bottom,10),isNaN(this.scrollbarXBottom)?(this.isScrollbarXUsingBottom=!1,this.scrollbarXTop=n(j.top)):this.isScrollbarXUsingBottom=!0,this.railBorderXWidth=n(j.borderLeftWidth)+n(j.borderRightWidth),b(this.scrollbarXRail,{display:\"block\"}),this.railXMarginWidth=n(j.marginLeft)+n(j.marginRight),b(this.scrollbarXRail,{display:\"\"}),this.railXWidth=null,this.railXRatio=null,this.scrollbarYRail=c(z.element.rail(\"y\")),d.appendChild(this.scrollbarYRail),this.scrollbarY=c(z.element.thumb(\"y\")),this.scrollbarYRail.appendChild(this.scrollbarY),this.scrollbarY.setAttribute(\"tabindex\",0),this.event.bind(this.scrollbarY,\"focus\",h),this.event.bind(this.scrollbarY,\"blur\",i),this.scrollbarYActive=null,this.scrollbarYHeight=null,this.scrollbarYTop=null;var k=a(this.scrollbarYRail);this.scrollbarYRight=parseInt(k.right,10),isNaN(this.scrollbarYRight)?(this.isScrollbarYUsingRight=!1,this.scrollbarYLeft=n(k.left)):this.isScrollbarYUsingRight=!0,this.scrollbarYOuterWidth=this.isRtl?p(this.scrollbarY):null,this.railBorderYWidth=n(k.borderTopWidth)+n(k.borderBottomWidth),b(this.scrollbarYRail,{display:\"block\"}),this.railYMarginHeight=n(k.marginTop)+n(k.marginBottom),b(this.scrollbarYRail,{display:\"\"}),this.railYHeight=null,this.railYRatio=null,this.reach={x:0>=d.scrollLeft?\"start\":d.scrollLeft>=this.contentWidth-this.containerWidth?\"end\":null,y:0>=d.scrollTop?\"start\":d.scrollTop>=this.contentHeight-this.containerHeight?\"end\":null},this.isAlive=!0,this.settings.handlers.forEach(function(a){return G[a](f)}),this.lastScrollTop=v(d.scrollTop),this.lastScrollLeft=d.scrollLeft,this.event.bind(this.element,\"scroll\",function(a){return f.onScroll(a)}),q(this)};return H.prototype.update=function(){this.isAlive&&(// Recalcuate negative scrollLeft adjustment\n// Recalculate rail margins\n// Hide scrollbars not to affect scrollWidth and scrollHeight\nthis.negativeScrollAdjustment=this.isNegativeScroll?this.element.scrollWidth-this.element.clientWidth:0,b(this.scrollbarXRail,{display:\"block\"}),b(this.scrollbarYRail,{display:\"block\"}),this.railXMarginWidth=n(a(this.scrollbarXRail).marginLeft)+n(a(this.scrollbarXRail).marginRight),this.railYMarginHeight=n(a(this.scrollbarYRail).marginTop)+n(a(this.scrollbarYRail).marginBottom),b(this.scrollbarXRail,{display:\"none\"}),b(this.scrollbarYRail,{display:\"none\"}),q(this),l(this,\"top\",0,!1,!0),l(this,\"left\",0,!1,!0),b(this.scrollbarXRail,{display:\"\"}),b(this.scrollbarYRail,{display:\"\"}))},H.prototype.onScroll=function(){this.isAlive&&(q(this),l(this,\"top\",this.element.scrollTop-this.lastScrollTop),l(this,\"left\",this.element.scrollLeft-this.lastScrollLeft),this.lastScrollTop=v(this.element.scrollTop),this.lastScrollLeft=this.element.scrollLeft)},H.prototype.destroy=function(){this.isAlive&&(// unset elements\nthis.event.unbindAll(),e(this.scrollbarX),e(this.scrollbarY),e(this.scrollbarXRail),e(this.scrollbarYRail),this.removePsClasses(),this.element=null,this.scrollbarX=null,this.scrollbarY=null,this.scrollbarXRail=null,this.scrollbarYRail=null,this.isAlive=!1)},H.prototype.removePsClasses=function(){this.element.className=this.element.className.split(\" \").filter(function(a){return!a.match(/^ps([-_].+|)$/)}).join(\" \")},H});\n//# sourceMappingURL=perfect-scrollbar.min.js.map\n"
  },
  {
    "path": "BlackStone/assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js",
    "content": "jQuery.fn.vectorMap('addMap', 'world_mill_en',{\"insets\": [{\"width\": 900, \"top\": 0, \"height\": 440.70631074413296, \"bbox\": [{\"y\": -12671671.123330014, \"x\": -20004297.151525836}, {\"y\": 6930392.025135122, \"x\": 20026572.39474939}], \"left\": 0}], \"paths\": {\"BD\": {\"path\": \"M651.84,230.21l-0.6,-2.0l-1.36,-1.71l-2.31,-0.11l-0.41,0.48l0.2,0.94l-0.53,0.99l-0.72,-0.36l-0.68,0.35l-1.2,-0.36l-0.37,-2.0l-0.81,-1.86l0.39,-1.46l-0.22,-0.47l-1.14,-0.53l0.29,-0.5l1.48,-0.94l0.03,-0.65l-1.55,-1.22l0.55,-1.14l1.61,0.94l1.04,0.15l0.18,1.54l0.34,0.35l5.64,0.63l-0.84,1.64l-1.22,0.34l-0.77,1.51l0.07,0.47l1.37,1.37l0.67,-0.19l0.42,-1.39l1.21,3.84l-0.03,1.21l-0.33,-0.15l-0.4,0.28Z\", \"name\": \"Bangladesh\"}, \"BE\": {\"path\": \"M429.29,144.05l1.91,0.24l2.1,-0.63l2.63,1.99l-0.21,1.66l-0.69,0.4l-0.18,1.2l-1.66,-1.13l-1.39,0.15l-2.73,-2.7l-1.17,-0.18l-0.16,-0.52l1.54,-0.5Z\", \"name\": \"Belgium\"}, \"BF\": {\"path\": \"M421.42,247.64l-0.11,0.95l0.34,1.16l1.4,1.71l0.07,1.1l0.32,0.37l2.55,0.51l-0.04,1.28l-0.38,0.53l-1.07,0.21l-0.72,1.18l-0.63,0.21l-3.22,-0.25l-0.94,0.39l-5.4,-0.05l-0.39,0.38l0.16,2.73l-1.23,-0.43l-1.17,0.1l-0.89,0.57l-2.27,-1.72l-0.13,-1.11l0.61,-0.96l0.02,-0.93l1.87,-1.98l0.44,-1.81l0.43,-0.39l1.28,0.26l1.05,-0.52l0.47,-0.73l1.84,-1.09l0.55,-0.83l2.2,-1.0l1.15,-0.3l0.72,0.45l1.13,-0.01Z\", \"name\": \"Burkina Faso\"}, \"BG\": {\"path\": \"M491.65,168.18l-0.86,0.88l-0.91,2.17l0.48,1.34l-1.6,-0.24l-2.55,0.95l-0.28,1.51l-1.8,0.22l-2.0,-1.0l-1.92,0.79l-1.42,-0.07l-0.15,-1.63l-1.05,-0.97l0.0,-0.8l1.2,-1.57l0.01,-0.56l-1.14,-1.23l-0.05,-0.94l0.88,0.97l0.88,-0.2l1.91,0.47l3.68,0.16l1.42,-0.81l2.72,-0.66l2.55,1.24Z\", \"name\": \"Bulgaria\"}, \"BA\": {\"path\": \"M463.49,163.65l2.1,0.5l1.72,-0.03l1.52,0.68l-0.36,0.78l0.08,0.45l1.04,1.02l-0.25,0.98l-1.81,1.15l-0.38,1.38l-1.67,-0.87l-0.89,-1.2l-2.11,-1.83l-1.63,-2.22l0.23,-0.57l0.48,0.38l0.55,-0.06l0.43,-0.51l0.94,-0.06Z\", \"name\": \"Bosnia and Herz.\"}, \"BN\": {\"path\": \"M707.48,273.58l0.68,-0.65l1.41,-0.91l-0.15,1.63l-0.81,-0.05l-0.61,0.58l-0.53,-0.6Z\", \"name\": \"Brunei\"}, \"BO\": {\"path\": \"M263.83,340.69l-3.09,-0.23l-0.38,0.23l-0.7,1.52l-1.31,-1.53l-3.28,-0.64l-2.37,2.4l-1.31,0.26l-0.88,-3.26l-1.3,-2.86l0.74,-2.37l-0.13,-0.43l-1.2,-1.01l-0.37,-1.89l-1.08,-1.55l1.45,-2.56l-0.96,-2.33l0.47,-1.06l-0.34,-0.73l0.91,-1.32l0.16,-3.84l0.5,-1.18l-1.81,-3.41l2.46,0.07l0.8,-0.85l3.4,-1.91l2.66,-0.35l-0.19,1.38l0.3,1.07l-0.05,1.97l2.72,2.27l2.88,0.49l0.89,0.86l1.79,0.58l0.98,0.7l1.71,0.05l1.17,0.61l0.6,2.7l-0.7,0.54l0.96,2.99l0.37,0.28l4.3,0.1l-0.25,1.2l0.27,1.02l1.43,0.9l0.5,1.35l-0.41,1.86l-0.65,1.08l0.12,1.35l-2.69,-1.65l-2.4,-0.03l-4.36,0.76l-1.49,2.5l-0.11,1.52l-0.75,2.37Z\", \"name\": \"Bolivia\"}, \"JP\": {\"path\": \"M781.12,166.87l1.81,0.68l1.62,-0.97l0.39,2.42l-3.35,0.75l-2.23,2.88l-3.63,-1.9l-0.56,0.2l-1.26,3.05l-2.16,0.03l-0.29,-2.51l1.08,-2.03l2.45,-0.16l0.37,-0.33l1.25,-5.94l2.47,2.71l2.03,1.12ZM773.56,187.34l-0.91,2.22l0.37,1.52l-1.14,1.75l-3.02,1.26l-4.58,0.27l-3.34,3.01l-1.25,-0.8l-0.09,-1.9l-0.46,-0.38l-4.35,0.62l-3.0,1.32l-2.85,0.05l-0.37,0.27l0.13,0.44l2.32,1.89l-1.54,4.34l-1.26,0.9l-0.79,-0.7l0.56,-2.27l-0.21,-0.45l-1.47,-0.75l-0.74,-1.4l2.12,-0.84l1.26,-1.7l2.45,-1.42l1.83,-1.91l4.78,-0.81l2.6,0.57l0.44,-0.21l2.39,-4.66l1.29,1.06l0.5,0.01l5.1,-4.02l1.69,-3.73l-0.38,-3.4l0.9,-1.61l2.14,-0.44l1.23,3.72l-0.07,2.18l-2.23,2.84l-0.04,3.16ZM757.78,196.26l0.19,0.56l-1.01,1.21l-1.16,-0.68l-1.28,0.65l-0.69,1.45l-1.02,-0.5l0.01,-0.93l1.14,-1.38l1.57,0.14l0.85,-0.98l1.4,0.46Z\", \"name\": \"Japan\"}, \"BI\": {\"path\": \"M495.45,295.49l-1.08,-2.99l1.14,-0.11l0.64,-1.19l0.76,0.09l0.65,1.83l-2.1,2.36Z\", \"name\": \"Burundi\"}, \"BJ\": {\"path\": \"M429.57,255.75l-0.05,0.8l0.5,1.34l-0.42,0.86l0.17,0.79l-1.81,2.12l-0.57,1.76l-0.08,5.42l-1.41,0.2l-0.48,-1.36l0.11,-5.71l-0.52,-0.7l-0.2,-1.35l-1.48,-1.48l0.21,-0.9l0.89,-0.43l0.42,-0.92l1.27,-0.36l1.22,-1.34l0.61,-0.0l1.62,1.24Z\", \"name\": \"Benin\"}, \"BT\": {\"path\": \"M650.32,213.86l0.84,0.71l-0.12,1.1l-3.76,-0.11l-1.57,0.4l-1.93,-0.87l1.48,-1.96l1.13,-0.57l1.63,0.57l1.33,0.08l0.99,0.65Z\", \"name\": \"Bhutan\"}, \"JM\": {\"path\": \"M228.38,239.28l-0.8,0.4l-2.26,-1.06l0.84,-0.23l2.14,0.3l1.17,0.56l-1.08,0.03Z\", \"name\": \"Jamaica\"}, \"BW\": {\"path\": \"M483.92,330.07l2.27,4.01l2.83,2.86l0.96,0.31l0.78,2.43l2.13,0.61l1.02,0.76l-3.0,1.64l-2.32,2.02l-1.54,2.69l-1.52,0.45l-0.64,1.94l-1.34,0.52l-1.85,-0.12l-1.21,-0.74l-1.35,-0.3l-1.22,0.62l-0.75,1.37l-2.31,1.9l-1.4,0.21l-0.35,-0.59l0.16,-1.75l-1.48,-2.54l-0.62,-0.43l-0.0,-7.1l2.08,-0.08l0.39,-0.4l0.07,-8.9l5.19,-0.93l0.8,0.89l0.51,0.07l1.5,-0.95l2.21,-0.49Z\", \"name\": \"Botswana\"}, \"BR\": {\"path\": \"M259.98,275.05l3.24,0.7l0.65,-0.53l4.55,-1.32l1.08,-1.06l-0.02,-0.63l0.55,-0.05l0.28,0.28l-0.26,0.87l0.22,0.48l0.73,0.32l0.4,0.81l-0.62,0.86l-0.4,2.13l0.82,2.56l1.69,1.43l1.43,0.2l3.17,-1.68l3.18,0.3l0.65,-0.75l-0.27,-0.92l1.9,-0.09l2.39,0.99l1.06,-0.61l0.84,0.78l1.2,-0.18l1.18,-1.06l0.84,-1.94l1.36,-2.11l0.37,-0.05l1.89,5.45l1.33,0.59l0.05,1.28l-1.77,1.94l0.02,0.56l1.02,0.87l4.07,0.36l0.08,2.16l0.66,0.29l1.74,-1.5l6.97,2.32l1.02,1.22l-0.35,1.18l0.49,0.5l2.81,-0.74l4.77,1.3l3.75,-0.08l3.57,2.0l3.29,2.86l1.93,0.72l2.12,0.12l0.71,0.62l1.21,4.51l-0.95,3.98l-4.72,5.06l-1.64,2.92l-1.72,2.05l-0.8,0.3l-0.72,2.03l0.18,4.75l-0.94,5.53l-0.81,1.13l-0.43,3.36l-2.55,3.5l-0.4,2.51l-1.86,1.04l-0.67,1.53l-2.54,0.01l-3.94,1.01l-1.83,1.2l-2.87,0.82l-3.03,2.19l-2.2,2.83l-0.36,2.0l0.4,1.58l-0.44,2.6l-0.51,1.2l-1.77,1.54l-2.75,4.78l-3.83,3.42l-1.24,2.74l-1.18,1.15l-0.36,-0.83l0.95,-1.14l0.01,-0.5l-1.52,-1.97l-4.56,-3.32l-1.03,-0.0l-2.38,-2.02l-0.81,-0.0l5.34,-5.45l3.77,-2.58l0.22,-2.46l-1.35,-1.81l-0.91,0.07l0.58,-2.33l0.01,-1.54l-1.11,-0.83l-1.75,0.3l-0.44,-3.11l-0.52,-0.95l-1.88,-0.88l-1.24,0.47l-2.17,-0.41l0.15,-3.21l-0.62,-1.34l0.66,-0.73l-0.22,-1.34l0.66,-1.13l0.44,-2.04l-0.61,-1.83l-1.4,-0.86l-0.2,-0.75l0.34,-1.39l-0.38,-0.5l-4.52,-0.1l-0.72,-2.22l0.59,-0.42l-0.03,-1.1l-0.5,-0.87l-0.32,-1.7l-1.45,-0.76l-1.63,-0.02l-1.05,-0.72l-1.6,-0.48l-1.13,-0.99l-2.69,-0.4l-2.47,-2.06l0.13,-4.35l-0.45,-0.45l-3.46,0.5l-3.44,1.94l-0.6,0.74l-2.9,-0.17l-1.47,0.42l-0.72,-0.18l0.15,-3.52l-0.63,-0.34l-1.94,1.41l-1.87,-0.06l-0.83,-1.18l-1.37,-0.26l0.21,-1.01l-1.35,-1.49l-0.88,-1.91l0.56,-0.6l-0.0,-0.81l1.29,-0.62l0.22,-0.43l-0.22,-1.19l0.61,-0.91l0.15,-0.99l2.65,-1.58l1.99,-0.47l0.42,-0.36l2.06,0.11l0.42,-0.33l1.19,-8.0l-0.41,-1.56l-1.1,-1.0l0.01,-1.33l1.91,-0.42l0.08,-0.96l-0.33,-0.43l-1.14,-0.2l-0.02,-0.83l4.47,0.05l0.82,-0.67l0.82,1.81l0.8,0.07l1.15,1.1l2.26,-0.05l0.71,-0.83l2.78,-0.96l0.48,-1.13l1.6,-0.64l0.24,-0.47l-0.48,-0.82l-1.83,-0.19l-0.36,-3.22Z\", \"name\": \"Brazil\"}, \"BS\": {\"path\": \"M226.4,223.87l-0.48,-1.15l-0.84,-0.75l0.36,-1.11l0.95,1.95l0.01,1.06ZM225.56,216.43l-1.87,0.29l-0.04,-0.22l0.74,-0.14l1.17,0.06Z\", \"name\": \"Bahamas\"}, \"BY\": {\"path\": \"M493.84,128.32l0.29,0.7l0.49,0.23l1.19,-0.38l2.09,0.72l0.19,1.26l-0.45,1.24l1.57,2.26l0.89,0.59l0.17,0.81l1.58,0.56l0.4,0.5l-0.53,0.41l-1.87,-0.11l-0.73,0.38l-0.13,0.52l1.04,2.74l-1.91,0.26l-0.89,0.99l-0.11,1.18l-2.73,-0.04l-0.53,-0.62l-0.52,-0.08l-0.75,0.46l-0.91,-0.42l-1.92,-0.07l-2.75,-0.79l-2.6,-0.28l-2.0,0.07l-1.5,0.92l-0.67,0.07l-0.08,-1.22l-0.59,-1.19l1.36,-0.88l0.01,-1.35l-0.7,-1.41l-0.07,-1.0l2.16,-0.02l2.72,-1.3l0.75,-2.04l1.91,-1.04l0.2,-0.41l-0.19,-1.25l3.8,-1.78l2.3,0.77Z\", \"name\": \"Belarus\"}, \"BZ\": {\"path\": \"M198.03,244.38l0.1,-4.49l0.69,-0.06l0.74,-1.3l0.34,0.28l-0.4,1.3l0.17,0.58l-0.34,2.25l-1.3,1.42Z\", \"name\": \"Belize\"}, \"RU\": {\"path\": \"M491.55,115.25l2.55,-1.85l-0.01,-0.65l-2.2,-1.5l7.32,-6.76l1.03,-2.11l-0.13,-0.49l-3.46,-2.52l0.86,-2.7l-2.11,-2.81l1.56,-3.67l-2.77,-4.52l2.15,-2.99l-0.08,-0.55l-3.65,-2.73l0.3,-2.54l1.81,-0.37l4.26,-1.77l2.42,-1.45l4.06,2.61l6.79,1.04l9.34,4.85l1.78,1.88l0.14,2.46l-2.55,2.02l-3.9,1.06l-11.07,-3.14l-2.06,0.53l-0.13,0.7l3.94,2.94l0.31,5.86l0.26,0.36l5.14,2.24l0.58,-0.29l0.32,-1.94l-1.35,-1.78l1.13,-1.09l6.13,2.42l2.11,-0.98l0.18,-0.56l-1.51,-2.67l5.41,-3.76l2.07,0.22l2.26,1.41l0.57,-0.16l1.46,-2.87l-0.05,-0.44l-1.92,-2.32l1.12,-2.32l-1.32,-2.27l5.87,1.16l1.04,1.75l-2.59,0.43l-0.33,0.4l0.02,2.36l2.46,1.83l3.87,-0.91l0.86,-2.8l13.69,-5.65l0.99,0.11l-1.92,2.06l0.23,0.67l3.11,0.45l2.0,-1.48l4.56,-0.12l3.64,-1.73l2.65,2.44l0.56,-0.01l2.85,-2.88l-0.01,-0.57l-2.35,-2.29l0.9,-1.01l7.14,1.3l3.41,1.36l9.05,4.97l0.51,-0.11l1.67,-2.27l-0.05,-0.53l-2.43,-2.21l-0.06,-0.78l-0.34,-0.36l-2.52,-0.36l0.64,-1.93l-1.32,-3.46l-0.06,-1.21l4.48,-4.06l1.69,-4.29l1.6,-0.81l6.23,1.18l0.44,2.21l-2.29,3.64l0.06,0.5l1.47,1.39l0.76,3.0l-0.56,6.03l2.69,2.82l-0.96,2.57l-4.86,5.95l0.23,0.64l2.86,0.61l0.42,-0.17l0.93,-1.4l2.64,-1.03l0.87,-2.24l2.09,-1.96l0.07,-0.5l-1.36,-2.28l1.09,-2.69l-0.32,-0.55l-2.47,-0.33l-0.5,-2.06l1.94,-4.38l-0.06,-0.42l-2.96,-3.4l4.12,-2.88l0.16,-0.4l-0.51,-2.93l0.54,-0.05l1.13,2.25l-0.96,4.35l0.27,0.47l2.68,0.84l0.5,-0.51l-1.02,-2.99l3.79,-1.66l5.01,-0.24l4.53,2.61l0.48,-0.06l0.07,-0.48l-2.18,-3.82l-0.23,-4.67l3.98,-0.9l5.97,0.21l5.49,-0.64l0.27,-0.65l-1.83,-2.31l2.56,-2.9l2.87,-0.17l4.8,-2.47l6.54,-0.67l1.03,-1.42l6.25,-0.45l2.32,1.11l5.53,-2.7l4.5,0.08l0.39,-0.28l0.66,-2.15l2.26,-2.12l5.69,-2.11l3.21,1.29l-2.46,0.94l-0.25,0.42l0.34,0.35l5.41,0.77l0.61,2.33l0.58,0.25l2.2,-1.22l7.13,0.07l5.51,2.47l1.79,1.72l-0.53,2.24l-9.16,4.15l-1.97,1.52l0.16,0.71l6.77,1.91l2.16,-0.78l1.13,2.74l0.67,0.11l1.01,-1.15l3.81,-0.73l7.7,0.77l0.54,1.99l0.36,0.29l10.47,0.71l0.43,-0.38l0.13,-3.23l4.87,0.78l3.95,-0.02l3.83,2.4l1.03,2.71l-1.35,1.79l0.02,0.5l3.15,3.64l4.07,1.96l0.53,-0.18l2.23,-4.47l3.95,1.93l4.16,-1.21l4.73,1.39l2.05,-1.26l3.94,0.62l0.43,-0.55l-1.68,-4.02l2.89,-1.8l22.31,3.03l2.16,2.75l6.55,3.51l10.29,-0.81l4.82,0.73l1.85,1.66l-0.29,3.08l0.25,0.41l3.08,1.26l3.56,-0.88l4.35,-0.11l4.8,0.87l4.57,-0.47l4.23,3.79l0.43,0.07l3.1,-1.4l0.16,-0.6l-1.88,-2.62l0.85,-1.52l7.71,1.21l5.22,-0.26l7.09,2.09l9.59,5.22l6.35,4.11l-0.2,2.38l1.88,1.41l0.6,-0.42l-0.48,-2.53l6.15,0.57l4.4,3.51l-1.97,1.43l-4.0,0.41l-0.36,0.39l-0.06,3.79l-0.74,0.62l-2.07,-0.11l-1.91,-1.39l-3.14,-1.11l-0.78,-1.85l-2.72,-0.68l-2.63,0.49l-1.04,-1.1l0.46,-1.31l-0.5,-0.51l-3.0,0.98l-0.22,0.58l0.99,1.7l-1.21,1.48l-3.04,1.68l-3.12,-0.28l-0.4,0.23l0.09,0.46l2.2,2.09l1.46,3.2l1.15,1.1l0.24,1.33l-0.42,0.67l-4.63,-0.77l-6.96,2.9l-2.19,0.44l-7.6,5.06l-0.84,1.45l-3.61,-2.37l-6.24,2.82l-0.94,-1.15l-0.53,-0.08l-2.28,1.52l-3.2,-0.49l-0.44,0.27l-0.78,2.37l-3.05,3.78l0.09,1.47l0.29,0.36l2.54,0.72l-0.29,4.53l-1.97,0.11l-0.35,0.26l-1.07,2.94l0.8,1.45l-3.91,1.58l-1.05,3.95l-3.48,0.77l-0.3,0.3l-0.72,3.29l-3.09,2.65l-0.7,-1.74l-2.44,-12.44l1.16,-4.71l2.04,-2.06l0.22,-1.64l3.8,-0.86l4.46,-4.61l4.28,-3.81l4.48,-3.01l2.17,-5.63l-0.42,-0.54l-3.04,0.33l-1.77,3.31l-5.86,3.86l-1.86,-4.25l-0.45,-0.23l-6.46,1.3l-6.47,6.44l-0.01,0.55l1.58,1.74l-8.24,1.17l0.15,-2.2l-0.34,-0.42l-3.89,-0.56l-3.25,1.81l-7.62,-0.62l-8.45,1.19l-17.71,15.41l0.22,0.7l3.74,0.41l1.36,2.17l2.43,0.76l1.88,-1.68l2.4,0.2l3.4,3.54l0.08,2.6l-1.95,3.42l-0.21,3.9l-1.1,5.06l-3.71,4.54l-0.87,2.21l-8.29,8.89l-3.19,1.7l-1.32,0.03l-1.45,-1.36l-0.49,-0.04l-2.27,1.5l0.41,-3.65l-0.59,-2.47l1.75,-0.89l2.91,0.53l0.42,-0.2l1.68,-3.03l0.87,-3.46l0.97,-1.18l1.32,-2.88l-0.45,-0.56l-4.14,0.95l-2.19,1.25l-3.41,-0.0l-1.06,-2.93l-2.97,-2.3l-4.28,-1.06l-1.75,-5.07l-2.66,-5.01l-2.29,-1.29l-3.75,-1.01l-3.44,0.08l-3.18,0.62l-2.24,1.77l0.05,0.66l1.18,0.69l0.02,1.43l-1.33,1.05l-2.26,3.51l-0.04,1.43l-3.16,1.84l-2.82,-1.16l-3.01,0.23l-1.35,-1.07l-1.5,-0.35l-3.9,2.31l-3.22,0.52l-2.27,0.79l-3.05,-0.51l-2.21,0.03l-1.48,-1.6l-2.6,-1.63l-2.63,-0.43l-5.46,1.01l-3.23,-1.25l-0.72,-2.57l-5.2,-1.24l-2.75,-1.36l-0.5,0.12l-2.59,3.45l0.84,2.1l-2.06,1.93l-3.41,-0.77l-2.42,-0.12l-1.83,-1.54l-2.53,-0.05l-2.42,-0.98l-3.86,1.57l-4.72,2.78l-3.3,0.75l-1.55,-1.92l-3.0,0.41l-1.11,-1.33l-1.62,-0.59l-1.31,-1.94l-1.38,-0.6l-3.7,0.79l-3.31,-1.83l-0.51,0.11l-0.99,1.29l-5.29,-8.05l-2.96,-2.48l0.65,-0.77l0.01,-0.51l-0.5,-0.11l-6.2,3.21l-1.84,0.15l0.15,-1.39l-0.26,-0.42l-3.22,-1.17l-2.46,0.7l-0.69,-3.16l-0.32,-0.31l-4.5,-0.75l-2.47,1.47l-6.19,1.27l-1.29,0.86l-9.51,1.3l-1.15,1.17l-0.03,0.53l1.47,1.9l-1.89,0.69l-0.22,0.56l0.31,0.6l-2.11,1.44l0.03,0.68l3.75,2.12l-0.39,0.98l-3.23,-0.13l-0.86,0.86l-3.09,-1.59l-3.97,0.07l-2.66,1.35l-8.32,-3.56l-4.07,0.06l-5.39,3.68l-0.39,2.0l-2.03,-1.5l-0.59,0.13l-2.0,3.59l0.57,0.93l-1.28,2.16l0.06,0.48l2.13,2.17l1.95,0.04l1.37,1.82l-0.23,1.46l0.25,0.43l0.83,0.33l-0.8,1.31l-2.49,0.62l-2.49,3.2l0.0,0.49l2.17,2.78l-0.15,2.18l2.5,3.24l-1.58,1.59l-0.7,-0.13l-1.63,-1.72l-2.29,-0.84l-0.94,-1.31l-2.34,-0.63l-1.48,0.4l-0.43,-0.47l-3.51,-1.48l-5.76,-1.01l-0.45,0.19l-2.89,-2.34l-2.9,-1.2l-1.53,-1.29l1.29,-0.43l2.08,-2.61l-0.05,-0.55l-0.89,-0.79l3.05,-1.06l0.27,-0.42l-0.07,-0.69l-0.49,-0.35l-1.73,0.39l0.04,-0.68l1.04,-0.72l2.66,-0.48l0.4,-1.32l-0.5,-1.6l0.92,-1.54l0.03,-1.17l-0.29,-0.37l-3.69,-1.06l-1.41,0.02l-1.42,-1.41l-2.19,0.38l-2.77,-1.01l-0.03,-0.59l-0.89,-1.43l-2.0,-0.32l-0.11,-0.54l0.49,-0.53l0.01,-0.53l-1.6,-1.9l-3.58,0.02l-0.88,0.73l-0.46,-0.07l-1.0,-2.79l2.22,-0.02l0.97,-0.74l0.07,-0.57l-0.9,-1.04l-1.35,-0.48l-0.11,-0.7l-0.95,-0.58l-1.38,-1.99l0.46,-0.98l-0.51,-1.96l-2.45,-0.84l-1.21,0.3l-0.46,-0.76l-2.46,-0.83l-0.72,-1.87l-0.21,-1.69l-0.99,-0.85l0.85,-1.17l-0.7,-3.21l1.66,-1.97l-0.16,-0.79ZM749.2,170.72l-0.6,0.4l-0.13,0.16l-0.01,-0.51l0.74,-0.05ZM874.85,67.94l-5.63,0.48l-0.26,-0.84l3.15,-1.89l1.94,0.01l3.19,1.16l-2.39,1.09ZM797.39,48.49l-2.0,1.36l-3.8,-0.42l-4.25,-1.8l0.35,-0.97l9.69,1.83ZM783.67,46.12l-1.63,3.09l-8.98,-0.13l-4.09,1.14l-4.54,-2.97l1.16,-3.01l3.05,-0.89l6.5,0.22l8.54,2.56ZM778.2,134.98l-0.56,-0.9l0.27,-0.12l0.29,1.01ZM778.34,135.48l0.94,3.53l-0.05,3.38l1.05,3.39l2.18,5.0l-2.89,-0.83l-0.49,0.26l-1.54,4.65l2.42,3.5l-0.04,1.13l-1.24,-1.24l-0.61,0.06l-1.09,1.61l-0.28,-1.61l0.27,-3.1l-0.28,-3.4l0.58,-2.47l0.11,-4.39l-1.46,-3.36l0.21,-4.32l2.15,-1.46l0.07,-0.34ZM771.95,56.61l1.76,-1.42l2.89,-0.42l3.28,1.71l0.14,0.6l-3.27,0.03l-4.81,-0.5ZM683.76,31.09l-13.01,1.93l4.03,-6.35l1.82,-0.56l1.73,0.34l5.99,2.98l-0.56,1.66ZM670.85,27.93l-5.08,0.64l-6.86,-1.57l-3.99,-2.05l-2.1,-4.16l-2.6,-0.87l5.72,-3.5l5.2,-1.28l4.69,2.85l5.59,5.4l-0.56,4.53ZM564.15,68.94l-0.64,0.17l-7.85,-0.57l-0.86,-2.04l-4.28,-1.17l-0.28,-1.94l2.27,-0.89l0.25,-0.39l-0.08,-2.38l4.81,-3.97l-0.15,-0.7l-1.47,-0.38l5.3,-3.81l0.15,-0.44l-0.58,-1.94l5.28,-2.51l8.21,-3.27l8.28,-0.96l4.35,-1.94l4.6,-0.64l1.36,1.61l-1.34,1.28l-16.43,4.94l-7.97,4.88l-7.74,9.63l0.66,4.14l4.16,3.27ZM548.81,18.48l-5.5,1.18l-0.58,1.02l-2.59,0.84l-2.13,-1.07l1.12,-1.42l-0.3,-0.65l-2.33,-0.07l1.68,-0.36l3.47,-0.06l0.42,1.29l0.66,0.16l1.38,-1.34l2.15,-0.88l2.94,1.01l-0.39,0.36ZM477.37,133.15l-4.08,0.05l-2.56,-0.32l0.33,-0.87l3.17,-1.03l3.24,0.96l-0.09,1.23Z\", \"name\": \"Russia\"}, \"RW\": {\"path\": \"M497.0,288.25l0.71,1.01l-0.11,1.09l-1.63,0.03l-1.04,1.39l-0.83,-0.11l0.51,-1.2l0.08,-1.34l0.42,-0.41l0.7,0.14l1.19,-0.61Z\", \"name\": \"Rwanda\"}, \"RS\": {\"path\": \"M469.4,163.99l0.42,-0.5l-0.01,-0.52l-1.15,-1.63l1.43,-0.62l1.33,0.12l1.17,1.06l0.46,1.13l1.34,0.64l0.35,1.35l1.46,0.9l0.76,-0.29l0.2,0.69l-0.48,0.78l0.22,1.12l1.05,1.22l-0.77,0.8l-0.37,1.52l-1.21,0.08l0.24,-0.64l-0.39,-0.54l-2.08,-1.64l-0.9,0.05l-0.48,0.94l-2.12,-1.37l0.53,-1.6l-1.11,-1.37l0.51,-1.1l-0.41,-0.57Z\", \"name\": \"Serbia\"}, \"LT\": {\"path\": \"M486.93,129.3l0.17,1.12l-1.81,0.98l-0.72,2.02l-2.47,1.18l-2.1,-0.02l-0.73,-1.05l-1.06,-0.3l-0.09,-1.87l-3.56,-1.13l-0.43,-2.36l2.48,-0.94l4.12,0.22l2.25,-0.31l0.52,0.69l1.24,0.21l2.19,1.56Z\", \"name\": \"Lithuania\"}, \"LU\": {\"path\": \"M436.08,149.45l-0.48,-0.07l0.3,-1.28l0.27,0.4l-0.09,0.96Z\", \"name\": \"Luxembourg\"}, \"LR\": {\"path\": \"M399.36,265.97l0.18,1.54l-0.48,0.99l0.08,0.47l2.47,1.8l-0.33,2.8l-2.65,-1.13l-5.78,-4.61l0.58,-1.32l2.1,-2.33l0.86,-0.22l0.77,1.14l-0.14,0.85l0.59,0.87l1.0,0.14l0.76,-0.99Z\", \"name\": \"Liberia\"}, \"RO\": {\"path\": \"M487.53,154.23l0.6,0.24l2.87,3.98l-0.17,2.69l0.45,1.42l1.32,0.81l1.35,-0.42l0.76,0.36l0.02,0.31l-0.83,0.45l-0.59,-0.22l-0.54,0.3l-0.62,3.3l-1.0,-0.22l-2.07,-1.13l-2.95,0.71l-1.25,0.76l-3.51,-0.15l-1.89,-0.47l-0.87,0.16l-0.82,-1.3l0.29,-0.26l-0.06,-0.64l-1.09,-0.34l-0.56,0.5l-1.05,-0.64l-0.39,-1.39l-1.36,-0.65l-0.35,-1.0l-0.83,-0.75l1.54,-0.54l2.66,-4.21l2.4,-1.24l2.96,0.34l1.48,0.73l0.79,-0.45l1.78,-0.3l0.75,-0.74l0.79,0.0Z\", \"name\": \"Romania\"}, \"GW\": {\"path\": \"M386.23,253.6l-0.29,0.84l0.15,0.6l-2.21,0.59l-0.86,0.96l-1.04,-0.83l-1.09,-0.23l-0.54,-1.06l-0.66,-0.49l2.41,-0.48l4.13,0.1Z\", \"name\": \"Guinea-Bissau\"}, \"GT\": {\"path\": \"M195.08,249.77l-2.48,-0.37l-1.03,-0.45l-1.14,-0.89l0.3,-0.99l-0.24,-0.68l0.96,-1.66l2.98,-0.01l0.4,-0.37l-0.19,-1.28l-1.67,-1.4l0.51,-0.4l0.0,-1.05l3.85,0.02l-0.21,4.53l0.4,0.43l1.46,0.38l-1.48,0.98l-0.35,0.7l0.12,0.57l-2.2,1.96Z\", \"name\": \"Guatemala\"}, \"GR\": {\"path\": \"M487.07,174.59l-0.59,1.43l-0.37,0.21l-2.84,-0.35l-3.03,0.77l-0.18,0.68l1.28,1.23l-0.61,0.23l-1.14,0.0l-1.2,-1.39l-0.63,0.03l-0.53,1.01l0.56,1.76l1.03,1.19l-0.56,0.38l-0.05,0.62l2.52,2.12l0.02,0.87l-1.78,-0.59l-0.48,0.56l0.5,1.0l-1.07,0.2l-0.3,0.53l0.75,2.01l-0.98,0.02l-1.84,-1.12l-1.37,-4.2l-2.21,-2.95l-0.11,-0.56l1.04,-1.28l0.2,-0.95l0.85,-0.66l0.03,-0.46l1.32,-0.21l1.01,-0.64l1.22,0.05l0.65,-0.56l2.26,-0.0l1.82,-0.75l1.85,1.0l2.28,-0.28l0.35,-0.39l0.01,-0.77l0.34,0.22ZM480.49,192.16l0.58,0.4l-0.68,-0.12l0.11,-0.28ZM482.52,192.82l2.51,0.06l0.24,0.32l-1.99,0.13l-0.77,-0.51Z\", \"name\": \"Greece\"}, \"GQ\": {\"path\": \"M448.79,279.62l0.02,2.22l-4.09,0.0l0.69,-2.27l3.38,0.05Z\", \"name\": \"Eq. Guinea\"}, \"GY\": {\"path\": \"M277.42,270.07l-0.32,1.83l-1.32,0.57l-0.23,0.46l-0.28,2.0l1.11,1.82l0.83,0.19l0.32,1.25l1.13,1.62l-1.21,-0.19l-1.08,0.71l-1.77,0.5l-0.44,0.46l-0.86,-0.09l-1.32,-1.01l-0.77,-2.27l0.36,-1.9l0.68,-1.23l-0.57,-1.17l-0.74,-0.43l0.12,-1.16l-0.9,-0.69l-1.1,0.09l-1.31,-1.48l0.53,-0.72l-0.04,-0.84l1.99,-0.86l0.05,-0.59l-0.71,-0.78l0.14,-0.57l1.66,-1.24l1.36,0.77l1.41,1.49l0.06,1.15l0.37,0.38l0.8,0.05l2.06,1.86Z\", \"name\": \"Guyana\"}, \"GE\": {\"path\": \"M521.71,168.93l5.29,0.89l4.07,2.01l1.41,-0.44l2.07,0.56l0.68,1.1l1.07,0.55l-0.12,0.59l0.98,1.29l-1.01,-0.13l-1.81,-0.83l-0.94,0.47l-3.23,0.43l-2.29,-1.39l-2.33,0.05l0.21,-0.97l-0.76,-2.26l-1.45,-1.12l-1.43,-0.39l-0.41,-0.42Z\", \"name\": \"Georgia\"}, \"GB\": {\"path\": \"M412.61,118.72l-2.19,3.22l-0.0,0.45l5.13,-0.3l-0.53,2.37l-2.2,3.12l0.29,0.63l2.37,0.21l2.33,4.3l1.76,0.69l2.2,5.12l2.94,0.77l-0.23,1.62l-1.15,0.88l-0.1,0.52l0.82,1.42l-1.86,1.43l-3.3,-0.02l-4.12,0.87l-1.04,-0.58l-0.47,0.06l-1.51,1.41l-2.12,-0.34l-1.86,1.18l-0.6,-0.29l3.19,-3.0l2.16,-0.69l0.28,-0.41l-0.34,-0.36l-3.73,-0.53l-0.4,-0.76l2.2,-0.87l0.17,-0.61l-1.26,-1.67l0.36,-1.7l3.38,0.28l0.43,-0.33l0.37,-1.99l-1.79,-2.49l-3.11,-0.72l-0.38,-0.59l0.79,-1.35l-0.04,-0.46l-0.82,-0.97l-0.61,0.01l-0.68,0.84l-0.1,-2.34l-1.23,-1.88l0.85,-3.47l1.77,-2.68l1.85,0.26l2.17,-0.22ZM406.26,132.86l-1.01,1.77l-1.57,-0.59l-1.16,0.01l0.37,-1.54l-0.39,-1.39l1.45,-0.1l2.3,1.84Z\", \"name\": \"United Kingdom\"}, \"GA\": {\"path\": \"M453.24,279.52l-0.08,0.98l0.7,1.29l2.36,0.24l-0.98,2.63l1.18,1.79l0.25,1.78l-0.29,1.52l-0.6,0.93l-1.84,-0.09l-1.23,-1.11l-0.66,0.23l-0.15,0.84l-1.42,0.26l-1.02,0.7l-0.11,0.52l0.77,1.35l-1.34,0.97l-3.94,-4.3l-1.44,-2.45l0.06,-0.6l0.54,-0.81l1.05,-3.46l4.17,-0.07l0.4,-0.4l-0.02,-2.66l2.39,0.21l1.25,-0.27Z\", \"name\": \"Gabon\"}, \"GN\": {\"path\": \"M391.8,254.11l0.47,0.8l1.11,-0.32l0.98,0.7l1.07,0.2l2.26,-1.22l0.64,0.44l1.13,1.56l-0.48,1.4l0.8,0.3l-0.08,0.48l0.46,0.68l-0.35,1.36l1.05,2.61l-1.0,0.69l0.03,1.41l-0.72,-0.06l-1.08,1.0l-0.24,-0.27l0.07,-1.11l-1.05,-1.54l-1.79,0.21l-0.35,-2.01l-1.6,-2.18l-2.0,-0.0l-1.31,0.54l-1.95,2.18l-1.86,-2.19l-1.2,-0.78l-0.3,-1.11l-0.8,-0.85l0.65,-0.72l0.81,-0.03l1.64,-0.8l0.23,-1.87l2.67,0.64l0.89,-0.3l1.21,0.15Z\", \"name\": \"Guinea\"}, \"GM\": {\"path\": \"M379.31,251.39l0.1,-0.35l2.43,-0.07l0.74,-0.61l0.51,-0.03l0.77,0.49l-1.03,-0.3l-1.87,0.9l-1.65,-0.04ZM384.03,250.91l0.91,0.05l0.75,-0.24l-0.59,0.31l-1.08,-0.13Z\", \"name\": \"Gambia\"}, \"GL\": {\"path\": \"M353.02,1.2l14.69,4.67l-3.68,1.89l-22.97,0.86l-0.36,0.27l0.12,0.43l1.55,1.18l8.79,-0.66l7.48,2.07l4.86,-1.77l1.66,1.73l-2.53,3.19l-0.01,0.48l0.46,0.15l6.35,-2.2l12.06,-2.31l7.24,1.13l1.09,1.99l-9.79,4.01l-1.44,1.32l-7.87,0.98l-0.35,0.41l0.38,0.38l5.07,0.24l-2.53,3.58l-2.07,3.81l0.08,6.05l2.57,3.11l-3.22,0.2l-4.12,1.66l-0.05,0.72l4.45,2.65l0.51,3.75l-2.3,0.4l-0.25,0.64l2.79,3.69l-4.82,0.31l-0.36,0.29l0.16,0.44l2.62,1.8l-0.59,1.22l-3.3,0.7l-3.45,0.01l-0.29,0.68l3.03,3.12l0.02,1.34l-4.4,-1.73l-1.72,1.35l0.15,0.66l3.31,1.15l3.13,2.71l0.81,3.16l-3.85,0.75l-4.89,-4.26l-0.47,-0.03l-0.17,0.44l0.79,2.86l-2.71,2.21l-0.13,0.44l0.37,0.27l8.73,0.34l-12.32,6.64l-7.24,1.48l-2.94,0.08l-2.69,1.75l-3.43,4.41l-5.24,2.84l-1.73,0.18l-7.12,2.1l-2.15,2.52l-0.13,2.99l-1.19,2.45l-4.01,3.09l-0.14,0.44l0.97,2.9l-2.28,6.48l-3.1,0.2l-3.83,-3.07l-4.86,-0.02l-2.25,-1.93l-1.7,-3.79l-4.3,-4.84l-1.21,-2.49l-0.44,-3.8l-3.32,-3.63l0.84,-2.86l-1.56,-1.7l2.28,-4.6l3.83,-1.74l1.03,-1.96l0.52,-3.47l-0.59,-0.41l-4.17,2.21l-2.07,0.58l-2.72,-1.28l-0.15,-2.71l0.85,-2.09l2.01,-0.06l5.06,1.2l0.46,-0.23l-0.14,-0.49l-6.54,-4.47l-2.67,0.55l-1.58,-0.86l2.56,-4.01l-0.03,-0.48l-1.5,-1.74l-4.98,-8.5l-3.13,-1.96l0.03,-1.88l-0.24,-0.37l-6.85,-3.02l-5.36,-0.38l-12.7,0.58l-2.78,-1.57l-3.66,-2.77l5.73,-1.45l5.0,-0.28l0.38,-0.38l-0.35,-0.41l-10.67,-1.38l-5.3,-2.06l0.25,-1.54l18.41,-5.26l1.22,-2.27l-0.25,-0.55l-6.14,-1.86l1.68,-1.77l8.55,-4.03l3.59,-0.63l0.3,-0.54l-0.88,-2.27l5.47,-1.47l7.65,-0.95l7.55,-0.05l3.04,1.85l6.48,-3.27l5.81,2.22l3.56,0.5l5.16,1.94l0.5,-0.21l-0.17,-0.52l-5.71,-3.13l0.28,-2.13l8.12,-3.6l8.7,0.28l3.35,-2.34l8.71,-0.6l19.93,0.8Z\", \"name\": \"Greenland\"}, \"KW\": {\"path\": \"M540.81,207.91l0.37,0.86l-0.17,0.76l0.6,1.53l-0.95,0.04l-0.82,-1.28l-1.57,-0.18l1.31,-1.88l1.22,0.17Z\", \"name\": \"Kuwait\"}, \"GH\": {\"path\": \"M420.53,257.51l-0.01,0.72l0.96,1.2l0.24,3.73l0.59,0.95l-0.51,2.1l0.19,1.41l1.02,2.21l-6.97,2.84l-1.8,-0.57l0.04,-0.89l-1.02,-2.04l0.61,-2.65l1.07,-2.32l-0.96,-6.47l5.01,0.07l0.94,-0.39l0.61,0.11Z\", \"name\": \"Ghana\"}, \"OM\": {\"path\": \"M568.09,230.93l-0.91,1.67l-1.22,0.04l-0.6,0.76l-0.41,1.51l0.27,1.58l-1.16,0.05l-1.56,0.97l-0.76,1.74l-1.62,0.05l-0.98,0.65l-0.17,1.15l-0.89,0.52l-1.49,-0.18l-2.4,0.94l-2.47,-5.4l7.35,-2.71l1.67,-5.23l-1.12,-2.09l0.05,-0.83l0.67,-1.0l0.07,-1.05l0.9,-0.42l-0.05,-2.07l0.7,-0.01l1.0,1.62l1.51,1.08l3.3,0.84l1.73,2.29l0.81,0.37l-1.23,2.35l-0.99,0.79Z\", \"name\": \"Oman\"}, \"_2\": {\"path\": \"M531.15,258.94l1.51,0.12l5.13,-0.95l5.3,-1.48l-0.01,4.4l-2.67,3.39l-1.85,0.01l-8.04,-2.94l-2.55,-3.17l1.12,-1.71l2.04,2.34Z\", \"name\": \"Somaliland\"}, \"_1\": {\"path\": \"M472.77,172.64l-1.08,-1.29l0.96,-0.77l0.29,-0.83l1.98,1.64l-0.36,0.67l-1.79,0.58Z\", \"name\": \"Kosovo\"}, \"_0\": {\"path\": \"M504.91,192.87l0.34,0.01l0.27,-0.07l-0.29,0.26l-0.31,-0.2Z\", \"name\": \"N. Cyprus\"}, \"JO\": {\"path\": \"M518.64,201.38l-5.14,1.56l-0.19,0.65l2.16,2.39l-0.89,1.14l-1.71,0.34l-1.71,1.8l-2.34,-0.37l1.21,-4.32l0.56,-4.07l2.8,0.94l4.46,-2.71l0.79,2.66Z\", \"name\": \"Jordan\"}, \"HR\": {\"path\": \"M455.59,162.84l1.09,0.07l-0.82,0.94l-0.27,-1.01ZM456.96,162.92l0.62,-0.41l1.73,0.45l0.42,-0.4l-0.01,-0.59l0.86,-0.52l0.2,-1.05l1.63,-0.68l2.57,1.68l2.07,0.6l0.87,-0.31l1.05,1.57l-0.52,0.63l-1.05,-0.56l-1.68,0.04l-2.1,-0.5l-1.29,0.06l-0.57,0.49l-0.59,-0.47l-0.62,0.16l-0.46,1.7l1.79,2.42l2.79,2.75l-1.18,-0.87l-2.21,-0.87l-1.67,-1.78l0.13,-0.63l-1.05,-1.19l-0.32,-1.27l-1.42,-0.43Z\", \"name\": \"Croatia\"}, \"HT\": {\"path\": \"M237.05,238.38l-1.16,0.43l-0.91,-0.55l0.05,-0.2l2.02,0.31ZM237.53,238.43l1.06,0.12l-0.05,0.01l-1.01,-0.12ZM239.25,238.45l0.79,-0.51l0.06,-0.62l-1.02,-1.0l0.02,-0.82l-0.3,-0.4l-0.93,-0.32l3.16,0.45l0.02,1.84l-0.48,0.34l-0.08,0.58l0.54,0.72l-1.78,-0.26Z\", \"name\": \"Haiti\"}, \"HU\": {\"path\": \"M462.08,157.89l0.65,-1.59l-0.09,-0.44l0.64,-0.0l0.39,-0.34l0.1,-0.69l1.75,0.87l2.32,-0.37l0.43,-0.66l3.49,-0.78l0.69,-0.78l0.57,-0.14l2.57,0.93l0.67,-0.23l1.03,0.65l0.08,0.37l-1.42,0.71l-2.59,4.14l-1.8,0.53l-1.68,-0.1l-2.74,1.23l-1.85,-0.54l-2.54,-1.66l-0.66,-1.1Z\", \"name\": \"Hungary\"}, \"HN\": {\"path\": \"M199.6,249.52l-1.7,-1.21l0.06,-0.94l3.04,-2.14l2.37,0.28l1.27,-0.09l1.1,-0.52l1.3,0.28l1.14,-0.25l1.38,0.37l2.23,1.37l-2.36,0.93l-1.23,-0.39l-0.88,1.3l-1.28,0.99l-0.98,-0.22l-0.42,0.52l-0.96,0.05l-0.36,0.41l0.04,0.88l-0.52,0.6l-0.3,0.04l-0.3,-0.55l-0.66,-0.31l0.11,-0.67l-0.48,-0.65l-0.87,-0.26l-0.73,0.2Z\", \"name\": \"Honduras\"}, \"PR\": {\"path\": \"M256.17,238.73l-0.26,0.27l-2.83,0.05l-0.07,-0.55l1.95,-0.1l1.22,0.33Z\", \"name\": \"Puerto Rico\"}, \"PS\": {\"path\": \"M509.21,203.07l0.1,-0.06l-0.02,0.03l-0.09,0.03ZM509.36,202.91l-0.02,-0.63l-0.33,-0.16l0.31,-1.09l0.24,0.1l-0.2,1.78Z\", \"name\": \"Palestine\"}, \"PT\": {\"path\": \"M401.84,187.38l-0.64,0.47l-1.13,-0.35l-0.91,0.17l0.28,-1.78l-0.24,-1.78l-1.25,-0.56l-0.45,-0.84l0.17,-1.66l1.01,-1.18l0.69,-2.92l-0.04,-1.39l-0.59,-1.9l1.3,-0.85l0.84,1.35l3.1,-0.3l0.46,0.99l-1.05,0.94l-0.03,2.16l-0.41,0.57l-0.08,1.1l-0.79,0.18l-0.26,0.59l0.91,1.6l-0.63,1.75l0.76,1.09l-1.1,1.52l0.07,1.05Z\", \"name\": \"Portugal\"}, \"PY\": {\"path\": \"M274.9,336.12l0.74,1.52l-0.16,3.45l0.32,0.41l2.64,0.5l1.11,-0.47l1.4,0.59l0.36,0.6l0.53,3.42l1.27,0.4l0.98,-0.38l0.51,0.27l-0.0,1.18l-1.21,5.32l-2.09,1.9l-1.8,0.4l-4.71,-0.98l2.2,-3.63l-0.32,-1.5l-2.78,-1.28l-3.03,-1.94l-2.07,-0.44l-4.34,-4.06l0.91,-2.9l0.08,-1.42l1.07,-2.04l4.13,-0.72l2.18,0.03l2.05,1.17l0.03,0.59Z\", \"name\": \"Paraguay\"}, \"PA\": {\"path\": \"M213.8,263.68l0.26,-1.52l-0.36,-0.26l-0.01,-0.49l0.44,-0.1l0.93,1.4l1.26,0.03l0.77,0.49l1.38,-0.23l2.51,-1.11l0.86,-0.72l3.45,0.85l1.4,1.18l0.41,1.74l-0.21,0.34l-0.53,-0.12l-0.47,0.29l-0.16,0.6l-0.68,-1.28l0.45,-0.49l-0.19,-0.66l-0.47,-0.13l-0.54,-0.84l-1.5,-0.75l-1.1,0.16l-0.75,0.99l-1.62,0.84l-0.18,0.96l0.85,0.97l-0.58,0.45l-0.69,0.08l-0.34,-1.18l-1.27,0.03l-0.71,-1.05l-2.59,-0.46Z\", \"name\": \"Panama\"}, \"PG\": {\"path\": \"M808.58,298.86l2.54,2.56l-0.13,0.26l-0.33,0.12l-0.87,-0.78l-1.22,-2.16ZM801.41,293.04l0.5,0.29l0.26,0.27l-0.49,-0.35l-0.27,-0.21ZM803.17,294.58l0.59,0.5l0.08,1.06l-0.29,-0.91l-0.38,-0.65ZM796.68,298.41l0.52,0.75l1.43,-0.19l2.27,-1.81l-0.01,-1.43l1.12,0.16l-0.04,1.1l-0.7,1.28l-1.12,0.18l-0.62,0.79l-2.46,1.11l-1.17,-0.0l-3.08,-1.25l3.41,0.0l0.45,-0.68ZM789.15,303.55l2.31,1.8l1.59,2.61l1.34,0.13l-0.06,0.66l0.31,0.43l1.06,0.24l0.06,0.65l2.25,1.05l-1.22,0.13l-0.72,-0.63l-4.56,-0.65l-3.22,-2.87l-1.49,-2.34l-3.27,-1.1l-2.38,0.72l-1.59,0.86l-0.2,0.42l0.27,1.55l-1.55,0.68l-1.36,-0.4l-2.21,-0.09l-0.08,-15.41l8.39,2.93l2.95,2.4l0.6,1.64l4.02,1.49l0.31,0.68l-1.76,0.21l-0.33,0.52l0.55,1.68Z\", \"name\": \"Papua New Guinea\"}, \"PE\": {\"path\": \"M244.96,295.21l-1.26,-0.07l-0.57,0.42l-1.93,0.45l-2.98,1.75l-0.36,1.36l-0.58,0.8l0.12,1.37l-1.24,0.59l-0.22,1.22l-0.62,0.84l1.04,2.27l1.28,1.44l-0.41,0.84l0.32,0.57l1.48,0.13l1.16,1.37l2.21,0.07l1.63,-1.08l-0.13,3.02l0.3,0.4l1.14,0.29l1.31,-0.34l1.9,3.59l-0.48,0.85l-0.17,3.85l-0.94,1.59l0.35,0.75l-0.47,1.07l0.98,1.97l-2.1,3.82l-0.98,0.5l-2.17,-1.28l-0.39,-1.16l-4.95,-2.58l-4.46,-2.79l-1.84,-1.51l-0.91,-1.84l0.3,-0.96l-2.11,-3.33l-4.82,-9.68l-1.04,-1.2l-0.87,-1.94l-3.4,-2.48l0.58,-1.18l-1.13,-2.23l0.66,-1.49l1.45,-1.15l-0.6,0.98l0.07,0.92l0.47,0.36l1.74,0.03l0.97,1.17l0.54,0.07l1.42,-1.03l0.6,-1.84l1.42,-2.02l3.04,-1.04l2.73,-2.62l0.86,-1.74l-0.1,-1.87l1.44,1.02l0.9,1.25l1.06,0.59l1.7,2.73l1.86,0.31l1.45,-0.61l0.96,0.39l1.36,-0.19l1.45,0.89l-1.4,2.21l0.31,0.61l0.59,0.05l0.47,0.5Z\", \"name\": \"Peru\"}, \"PK\": {\"path\": \"M615.09,192.34l-1.83,1.81l-2.6,0.39l-3.73,-0.68l-1.58,1.33l-0.09,0.42l1.77,4.39l1.7,1.23l-1.69,1.27l-0.12,2.14l-2.33,2.64l-1.6,2.8l-2.46,2.67l-3.03,-0.07l-2.76,2.83l0.05,0.6l1.5,1.11l0.26,1.9l1.44,1.5l0.37,1.68l-5.01,-0.01l-1.78,1.7l-1.42,-0.52l-0.76,-1.87l-2.27,-2.15l-11.61,0.86l0.71,-2.34l3.43,-1.32l0.25,-0.44l-0.21,-1.24l-1.2,-0.65l-0.28,-2.46l-2.29,-1.14l-1.28,-1.94l2.82,0.94l2.62,-0.38l1.42,0.33l0.76,-0.56l1.71,0.19l3.25,-1.14l0.27,-0.36l0.08,-2.19l1.18,-1.32l1.68,0.0l0.58,-0.82l1.6,-0.3l1.19,0.16l0.98,-0.78l0.02,-1.88l0.93,-1.47l1.48,-0.66l0.19,-0.55l-0.66,-1.25l2.04,-0.11l0.69,-1.01l-0.02,-1.16l1.11,-1.06l-0.17,-1.78l-0.49,-1.03l1.15,-0.98l5.42,-0.91l2.6,-0.82l1.6,1.16l0.97,2.34l3.45,0.97Z\", \"name\": \"Pakistan\"}, \"PH\": {\"path\": \"M737.01,263.84l0.39,2.97l-0.44,1.18l-0.55,-1.53l-0.67,-0.14l-1.17,1.28l0.65,2.09l-0.42,0.69l-2.48,-1.23l-0.57,-1.49l0.65,-1.03l-0.1,-0.54l-1.59,-1.19l-0.56,0.08l-0.65,0.87l-1.23,0.0l-1.58,0.97l0.83,-1.8l2.56,-1.42l0.65,0.84l0.45,0.13l1.9,-0.69l0.56,-1.11l1.5,-0.06l0.38,-0.43l-0.09,-1.19l1.21,0.71l0.36,2.02ZM733.59,256.58l0.05,0.75l0.08,0.26l-0.8,-0.42l-0.18,-0.71l0.85,0.12ZM734.08,256.1l-0.12,-1.12l-1.0,-1.27l1.36,0.03l0.53,0.73l0.51,2.04l-1.27,-0.4ZM733.76,257.68l0.38,0.98l-0.32,0.15l-0.07,-1.13ZM724.65,238.43l1.46,0.7l0.72,-0.31l-0.32,1.17l0.79,1.71l-0.57,1.84l-1.53,1.04l-0.39,2.25l0.56,2.04l1.63,0.57l1.16,-0.27l2.71,1.23l-0.19,1.08l0.76,0.84l-0.08,0.36l-1.4,-0.9l-0.88,-1.27l-0.66,0.0l-0.38,0.55l-1.6,-1.31l-2.15,0.36l-0.87,-0.39l0.07,-0.61l0.66,-0.55l-0.01,-0.62l-0.75,-0.59l-0.72,0.44l-0.74,-0.87l-0.39,-2.49l0.32,0.27l0.66,-0.28l0.26,-3.97l0.7,-2.02l1.14,0.0ZM731.03,258.87l-0.88,0.85l-1.19,1.94l-1.05,-1.19l0.93,-1.1l0.32,-1.47l0.52,-0.06l-0.27,1.15l0.22,0.45l0.49,-0.12l1.0,-1.32l-0.08,0.85ZM726.83,255.78l0.83,0.38l1.17,-0.0l-0.02,0.48l-2.0,1.4l0.03,-2.26ZM724.81,252.09l-0.38,1.27l-1.42,-1.95l1.2,0.05l0.6,0.63ZM716.55,261.82l1.1,-0.95l0.03,-0.03l-0.28,0.36l-0.85,0.61ZM719.22,259.06l0.04,-0.06l0.8,-1.53l0.16,0.75l-1.0,0.84Z\", \"name\": \"Philippines\"}, \"PL\": {\"path\": \"M468.44,149.42l-1.11,-1.54l-1.86,-0.33l-0.48,-1.05l-1.72,-0.37l-0.65,0.69l-0.72,-0.36l0.11,-0.61l-0.33,-0.46l-1.75,-0.27l-1.04,-0.93l-0.94,-1.94l0.16,-1.22l-0.62,-1.8l-0.78,-1.07l0.57,-1.04l-0.48,-1.43l1.41,-0.83l6.91,-2.71l2.14,0.5l0.52,0.91l5.51,0.44l4.55,-0.05l1.07,0.31l0.48,0.84l0.15,1.58l0.65,1.2l-0.01,0.99l-1.27,0.58l-0.19,0.54l0.73,1.48l0.08,1.55l1.2,2.76l-0.17,0.58l-1.23,0.44l-2.27,2.72l0.18,0.95l-1.97,-1.03l-1.98,0.4l-1.36,-0.28l-1.24,0.58l-1.07,-0.97l-1.16,0.24Z\", \"name\": \"Poland\"}, \"ZM\": {\"path\": \"M481.47,313.3l0.39,0.31l2.52,0.14l0.99,1.17l2.01,0.35l1.4,-0.64l0.69,1.17l1.78,0.33l1.84,2.35l2.23,0.18l0.4,-0.43l-0.21,-2.74l-0.62,-0.3l-0.48,0.32l-1.98,-1.17l0.72,-5.29l-0.51,-1.18l0.57,-1.3l3.68,-0.62l0.26,0.63l1.21,0.63l0.9,-0.22l2.16,0.67l1.33,0.71l1.07,1.02l0.56,1.87l-0.88,2.7l0.43,2.09l-0.73,0.87l-0.76,2.37l0.59,0.68l-6.6,1.83l-0.29,0.44l0.19,1.45l-1.68,0.35l-1.43,1.02l-0.38,0.87l-0.87,0.26l-3.48,3.69l-4.16,-0.53l-1.52,-1.0l-1.77,-0.13l-1.83,0.52l-3.04,-3.4l0.11,-7.59l4.82,0.03l0.39,-0.49l-0.18,-0.76l0.33,-0.83l-0.4,-1.36l0.24,-1.05Z\", \"name\": \"Zambia\"}, \"EH\": {\"path\": \"M384.42,230.28l0.25,-0.79l1.06,-1.29l0.8,-3.51l3.38,-2.78l0.7,-1.81l0.06,4.84l-1.98,0.2l-0.94,1.59l0.39,3.56l-3.7,-0.01ZM392.01,218.1l0.7,-1.8l1.77,-0.24l2.09,0.34l0.95,-0.62l1.28,-0.07l-0.0,2.51l-6.79,-0.12Z\", \"name\": \"W. Sahara\"}, \"EE\": {\"path\": \"M485.71,115.04l2.64,0.6l2.56,0.11l-1.6,1.91l0.61,3.54l-0.81,0.87l-1.78,-0.01l-3.22,-1.76l-1.8,0.45l0.21,-1.53l-0.58,-0.41l-0.69,0.34l-1.26,-1.03l-0.17,-1.63l2.83,-0.92l3.05,-0.52Z\", \"name\": \"Estonia\"}, \"EG\": {\"path\": \"M492.06,205.03l1.46,0.42l2.95,-1.64l2.04,-0.21l1.53,0.3l0.59,1.19l0.69,0.04l0.41,-0.64l1.81,0.58l1.95,0.16l1.04,-0.51l1.42,4.08l-2.03,4.54l-1.66,-1.77l-1.76,-3.85l-0.64,-0.12l-0.36,0.67l1.04,2.88l3.44,6.95l1.78,3.04l2.03,2.65l-0.36,0.53l0.23,2.01l2.7,2.19l-28.41,0.0l0.0,-18.96l-0.73,-2.2l0.59,-1.56l-0.32,-1.26l0.68,-0.99l3.06,-0.04l4.82,1.52Z\", \"name\": \"Egypt\"}, \"ZA\": {\"path\": \"M467.14,373.21l-0.13,-1.96l-0.68,-1.56l0.7,-0.68l-0.13,-2.33l-4.56,-8.19l0.77,-0.86l0.6,0.45l0.69,1.31l2.83,0.72l1.5,-0.26l2.24,-1.39l0.19,-9.55l1.35,2.3l-0.21,1.5l0.61,1.2l0.4,0.19l1.79,-0.27l2.6,-2.07l0.69,-1.32l0.96,-0.48l2.19,1.04l2.04,0.13l1.77,-0.65l0.85,-2.12l1.38,-0.33l1.59,-2.76l2.15,-1.89l3.41,-1.87l2.0,0.45l1.02,-0.28l0.99,0.2l1.75,5.29l-0.38,3.25l-0.81,-0.23l-1.0,0.46l-0.87,1.68l-0.05,1.16l1.97,1.84l1.47,-0.29l0.69,-1.18l1.09,0.01l-0.76,3.69l-0.58,1.09l-2.2,1.79l-3.17,4.76l-2.8,2.83l-3.57,2.88l-2.53,1.05l-1.22,0.14l-0.51,0.7l-1.18,-0.32l-1.39,0.5l-2.59,-0.52l-1.61,0.33l-1.18,-0.11l-2.55,1.1l-2.1,0.44l-1.6,1.07l-0.85,0.05l-0.93,-0.89l-0.93,-0.15l-0.97,-1.13l-0.25,0.05ZM491.45,364.19l0.62,-0.93l1.48,-0.59l1.18,-2.19l-0.07,-0.49l-1.99,-1.69l-1.66,0.56l-1.43,1.14l-1.34,1.73l0.02,0.51l1.88,2.11l1.31,-0.16Z\", \"name\": \"South Africa\"}, \"EC\": {\"path\": \"M231.86,285.53l0.29,1.59l-0.69,1.45l-2.61,2.51l-3.13,1.11l-1.53,2.18l-0.49,1.68l-1.0,0.73l-1.02,-1.11l-1.78,-0.16l0.67,-1.15l-0.24,-0.86l1.25,-2.13l-0.54,-1.09l-0.67,-0.08l-0.72,0.87l-0.87,-0.64l0.35,-0.69l-0.36,-1.96l0.81,-0.51l0.45,-1.51l0.92,-1.57l-0.07,-0.97l2.65,-1.33l2.75,1.35l0.77,1.05l2.12,0.35l0.76,-0.32l1.96,1.21Z\", \"name\": \"Ecuador\"}, \"AL\": {\"path\": \"M470.32,171.8l0.74,0.03l0.92,0.89l-0.17,1.95l0.36,1.28l1.01,0.82l-1.82,2.83l-0.19,-0.61l-1.25,-0.89l-0.18,-1.2l0.53,-2.82l-0.54,-1.47l0.6,-0.83Z\", \"name\": \"Albania\"}, \"AO\": {\"path\": \"M461.55,300.03l1.26,3.15l1.94,2.36l2.47,-0.53l1.25,0.32l0.44,-0.18l0.93,-1.92l1.31,-0.08l0.41,-0.44l0.47,-0.0l-0.1,0.41l0.39,0.49l2.65,-0.02l0.03,1.19l0.48,1.01l-0.34,1.52l0.18,1.55l0.83,1.04l-0.13,2.85l0.54,0.39l3.96,-0.41l-0.1,1.79l0.39,1.05l-0.24,1.43l-4.7,-0.03l-0.4,0.39l-0.12,8.13l2.92,3.49l-3.83,0.88l-5.89,-0.36l-1.88,-1.24l-10.47,0.22l-1.3,-1.01l-1.85,-0.16l-2.4,0.77l-0.15,-1.06l0.33,-2.16l1.0,-3.45l1.35,-3.2l2.24,-2.8l0.33,-2.06l-0.13,-1.53l-0.8,-1.08l-1.21,-2.87l0.87,-1.62l-1.27,-4.12l-1.17,-1.53l2.47,-0.63l7.03,0.03ZM451.71,298.87l-0.47,-1.25l1.25,-1.11l0.32,0.3l-0.99,1.03l-0.12,1.03Z\", \"name\": \"Angola\"}, \"KZ\": {\"path\": \"M552.8,172.89l0.46,-1.27l-0.48,-1.05l-2.96,-1.19l-1.06,-2.58l-1.37,-0.87l-0.03,-0.3l1.95,0.23l0.45,-0.38l0.08,-1.96l1.75,-0.41l2.1,0.45l0.48,-0.33l0.45,-3.04l-0.45,-2.09l-0.41,-0.31l-2.42,0.15l-2.36,-0.73l-2.87,1.37l-2.17,0.61l-0.85,-0.34l0.13,-1.61l-1.6,-2.12l-2.02,-0.08l-1.78,-1.82l1.29,-2.18l-0.57,-0.95l1.62,-2.91l2.21,1.63l0.63,-0.27l0.29,-2.22l4.92,-3.43l3.71,-0.08l8.4,3.6l2.92,-1.36l3.77,-0.06l3.11,1.66l0.51,-0.11l0.6,-0.81l3.31,0.13l0.39,-0.25l0.63,-1.57l-0.17,-0.5l-3.5,-1.98l1.87,-1.27l-0.13,-1.03l1.98,-0.72l0.18,-0.62l-1.59,-2.06l0.81,-0.82l9.23,-1.18l1.33,-0.88l6.18,-1.26l2.26,-1.42l4.08,0.68l0.73,3.33l0.51,0.3l2.48,-0.8l2.79,1.02l-0.17,1.56l0.43,0.44l2.55,-0.24l4.89,-2.53l0.03,0.32l3.15,2.61l5.56,8.47l0.65,0.02l1.12,-1.46l3.15,1.74l3.76,-0.78l1.15,0.49l1.14,1.8l1.84,0.76l0.99,1.29l3.35,-0.25l1.02,1.52l-1.6,1.81l-1.93,0.28l-0.34,0.38l-0.11,3.05l-1.13,1.16l-4.75,-1.0l-0.46,0.27l-1.76,5.47l-1.1,0.59l-4.91,1.23l-0.27,0.54l2.1,4.97l-1.37,0.63l-0.23,0.41l0.13,1.13l-0.88,-0.25l-1.42,-1.13l-7.89,-0.4l-0.92,0.31l-3.73,-1.22l-1.42,0.63l-0.53,1.66l-3.72,-0.94l-1.85,0.43l-0.76,1.4l-4.65,2.62l-1.13,2.08l-0.44,0.01l-0.92,-1.4l-2.87,-0.09l-0.45,-2.14l-0.38,-0.32l-0.8,-0.01l0.0,-2.96l-3.0,-2.22l-7.31,0.58l-2.35,-2.68l-6.71,-3.69l-6.45,1.83l-0.29,0.39l0.1,10.85l-0.7,0.08l-1.62,-2.17l-1.83,-0.96l-3.11,0.59l-0.64,0.51Z\", \"name\": \"Kazakhstan\"}, \"ET\": {\"path\": \"M516.04,247.79l1.1,0.84l1.63,-0.45l0.68,0.47l1.63,0.03l2.01,0.94l1.73,1.66l1.64,2.07l-1.52,2.04l0.16,1.72l0.39,0.38l2.05,0.0l-0.36,1.03l2.86,3.58l8.32,3.08l1.31,0.02l-6.32,6.75l-3.1,0.11l-2.36,1.77l-1.47,0.04l-0.86,0.79l-1.38,-0.0l-1.32,-0.81l-2.29,1.05l-0.76,0.98l-3.29,-0.41l-3.07,-2.07l-1.8,-0.07l-0.62,-0.6l0.0,-1.24l-0.28,-0.38l-1.15,-0.37l-1.4,-2.59l-1.19,-0.68l-0.47,-1.0l-1.27,-1.23l-1.16,-0.22l0.43,-0.72l1.45,-0.28l0.41,-0.95l-0.03,-2.21l0.68,-2.44l1.05,-0.63l1.43,-3.06l1.57,-1.37l1.02,-2.51l0.35,-1.88l2.52,0.46l0.44,-0.24l0.58,-1.43Z\", \"name\": \"Ethiopia\"}, \"ZW\": {\"path\": \"M498.91,341.09l-1.11,-0.22l-0.92,0.28l-2.09,-0.44l-1.5,-1.11l-1.89,-0.43l-0.62,-1.4l-0.01,-0.84l-0.3,-0.38l-0.97,-0.25l-2.71,-2.74l-1.92,-3.32l3.83,0.45l3.73,-3.82l1.08,-0.44l0.26,-0.77l1.25,-0.9l1.41,-0.26l0.5,0.89l1.99,-0.05l1.72,1.17l1.11,0.17l1.05,0.66l0.01,2.99l-0.59,3.76l0.38,0.86l-0.23,1.23l-0.39,0.35l-0.63,1.81l-2.43,2.75Z\", \"name\": \"Zimbabwe\"}, \"ES\": {\"path\": \"M416.0,169.21l1.07,1.17l4.61,1.38l1.06,-0.57l2.6,1.26l2.71,-0.3l0.09,1.12l-2.14,1.8l-3.11,0.61l-0.31,0.31l-0.2,0.89l-1.54,1.69l-0.97,2.4l0.84,1.74l-1.32,1.27l-0.48,1.68l-1.88,0.65l-1.66,2.07l-5.36,-0.01l-1.79,1.08l-0.89,0.98l-0.88,-0.17l-0.79,-0.82l-0.68,-1.59l-2.37,-0.63l-0.11,-0.5l1.21,-1.82l-0.77,-1.13l0.61,-1.68l-0.76,-1.62l0.87,-0.49l0.09,-1.25l0.42,-0.6l0.03,-2.11l0.99,-0.69l0.13,-0.5l-1.03,-1.73l-1.46,-0.11l-0.61,0.38l-1.06,0.0l-0.52,-1.23l-0.53,-0.21l-1.32,0.67l-0.01,-1.49l-0.75,-0.96l3.03,-1.88l2.99,0.53l3.32,-0.02l2.63,0.51l6.01,-0.06Z\", \"name\": \"Spain\"}, \"ER\": {\"path\": \"M520.38,246.23l3.42,2.43l3.5,3.77l0.84,0.54l-0.95,-0.01l-3.51,-3.89l-2.33,-1.15l-1.73,-0.07l-0.91,-0.51l-1.26,0.51l-1.34,-1.02l-0.61,0.17l-0.66,1.61l-2.35,-0.43l-0.17,-0.67l1.29,-5.29l0.61,-0.61l1.95,-0.53l0.87,-1.01l1.17,2.41l0.68,2.33l1.49,1.43Z\", \"name\": \"Eritrea\"}, \"ME\": {\"path\": \"M468.91,172.53l-1.22,-1.02l0.47,-1.81l0.89,-0.72l2.26,1.51l-0.5,0.57l-0.75,-0.27l-1.14,1.73Z\", \"name\": \"Montenegro\"}, \"MD\": {\"path\": \"M488.41,153.73l1.4,-0.27l1.72,0.93l1.07,0.15l0.85,0.65l-0.14,0.84l0.96,0.85l1.12,2.47l-1.15,-0.07l-0.66,-0.41l-0.52,0.25l-0.09,0.86l-1.08,1.89l-0.27,-0.86l0.25,-1.34l-0.16,-1.6l-3.29,-4.34Z\", \"name\": \"Moldova\"}, \"MG\": {\"path\": \"M545.91,319.14l0.4,3.03l0.62,1.21l-0.21,1.02l-0.57,-0.8l-0.69,-0.01l-0.47,0.76l0.41,2.12l-0.18,0.87l-0.73,0.78l-0.15,2.14l-4.71,15.2l-1.06,2.88l-3.92,1.64l-3.12,-1.49l-0.6,-1.21l-0.19,-2.4l-0.86,-2.05l-0.21,-1.77l0.38,-1.62l1.21,-0.75l0.01,-0.76l1.19,-2.04l0.23,-1.66l-1.06,-2.99l-0.19,-2.21l0.81,-1.33l0.32,-1.46l4.63,-1.22l3.44,-3.0l0.85,-1.4l-0.08,-0.7l0.78,-0.04l1.38,-1.77l0.13,-1.64l0.45,-0.61l1.16,1.69l0.59,1.6Z\", \"name\": \"Madagascar\"}, \"MA\": {\"path\": \"M378.78,230.02l0.06,-0.59l0.92,-0.73l0.82,-1.37l-0.09,-1.04l0.79,-1.7l1.31,-1.58l0.96,-0.59l0.66,-1.55l0.09,-1.47l0.81,-1.48l1.72,-1.07l1.55,-2.69l1.16,-0.96l2.44,-0.39l1.94,-1.82l1.31,-0.78l2.09,-2.28l-0.51,-3.65l1.24,-3.7l1.5,-1.75l4.46,-2.57l2.37,-4.47l1.44,0.01l1.68,1.21l2.32,-0.19l3.47,0.65l0.8,1.54l0.16,1.71l0.86,2.96l0.56,0.59l-0.26,0.61l-3.05,0.44l-1.26,1.05l-1.33,0.22l-0.33,0.37l-0.09,1.78l-2.68,1.0l-1.07,1.42l-4.47,1.13l-4.04,2.01l-0.54,4.64l-1.15,0.06l-0.92,0.61l-1.96,-0.35l-2.42,0.54l-0.74,1.9l-0.86,0.4l-1.14,3.26l-3.53,3.01l-0.8,3.55l-0.96,1.1l-0.29,0.82l-4.95,0.18Z\", \"name\": \"Morocco\"}, \"UZ\": {\"path\": \"M598.64,172.75l-1.63,1.52l0.06,0.64l1.85,1.12l1.97,-0.64l2.21,1.17l-2.52,1.68l-2.59,-0.22l-0.18,-0.41l0.46,-1.23l-0.45,-0.53l-3.35,0.69l-2.1,3.51l-1.87,-0.12l-1.03,1.51l0.22,0.55l1.64,0.62l0.46,1.83l-1.19,2.49l-2.66,-0.53l0.05,-1.36l-0.26,-0.39l-3.3,-1.23l-2.56,-1.4l-4.4,-3.34l-1.34,-3.14l-1.08,-0.6l-2.58,0.13l-0.69,-0.44l-0.47,-2.52l-3.37,-1.6l-0.43,0.05l-2.07,1.72l-2.1,1.01l-0.21,0.47l0.28,1.01l-1.91,0.03l-0.09,-10.5l5.99,-1.7l6.19,3.54l2.71,2.84l7.05,-0.67l2.71,2.01l-0.17,2.81l0.39,0.42l0.9,0.02l0.44,2.14l0.38,0.32l2.94,0.09l0.95,1.42l1.28,-0.24l1.05,-2.04l4.43,-2.5Z\", \"name\": \"Uzbekistan\"}, \"MM\": {\"path\": \"M673.9,230.21l-1.97,1.57l-0.57,0.96l-1.4,0.6l-1.36,1.05l-1.99,0.36l-1.08,2.66l-0.91,0.4l-0.19,0.55l1.21,2.27l2.52,3.43l-0.79,1.91l-0.74,0.41l-0.17,0.52l0.65,1.37l1.61,1.95l0.25,2.58l0.9,2.13l-1.92,3.57l0.68,-2.25l-0.81,-1.74l0.19,-2.65l-1.05,-1.53l-1.24,-6.17l-1.12,-2.26l-0.6,-0.13l-4.34,3.02l-2.39,-0.65l0.77,-2.84l-0.52,-2.61l-1.91,-2.96l0.25,-0.75l-0.29,-0.51l-1.33,-0.3l-1.61,-1.93l-0.1,-1.3l0.82,-0.24l0.04,-1.64l1.02,-0.52l0.21,-0.45l-0.23,-0.95l0.54,-0.96l0.08,-2.22l1.46,0.45l0.47,-0.2l1.12,-2.19l0.16,-1.35l1.33,-2.16l-0.0,-1.52l2.89,-1.66l1.63,0.44l0.5,-0.44l-0.17,-1.4l0.64,-0.36l0.08,-1.04l0.77,-0.11l0.71,1.35l1.06,0.69l-0.03,3.86l-2.38,2.37l-0.3,3.15l0.46,0.43l2.28,-0.38l0.51,2.08l1.47,0.67l-0.6,1.8l0.19,0.48l2.97,1.48l1.64,-0.55l0.02,0.32Z\", \"name\": \"Myanmar\"}, \"ML\": {\"path\": \"M392.61,254.08l-0.19,-2.37l-0.99,-0.87l-0.44,-1.3l-0.09,-1.28l0.81,-0.58l0.35,-1.24l2.37,0.65l1.31,-0.47l0.86,0.15l0.66,-0.56l9.83,-0.04l0.38,-0.28l0.56,-1.8l-0.44,-0.65l-2.35,-21.95l3.27,-0.04l16.7,11.38l0.74,1.31l2.5,1.09l0.02,1.38l0.44,0.39l2.34,-0.21l0.01,5.38l-1.28,1.61l-0.26,1.49l-5.31,0.57l-1.07,0.92l-2.9,0.1l-0.86,-0.48l-1.38,0.36l-2.4,1.08l-0.6,0.87l-1.85,1.09l-0.43,0.7l-0.79,0.39l-1.44,-0.21l-0.81,0.84l-0.34,1.64l-1.91,2.02l-0.06,1.03l-0.67,1.22l0.13,1.16l-0.97,0.39l-0.23,-0.64l-0.52,-0.24l-1.35,0.4l-0.34,0.55l-2.69,-0.28l-0.37,-0.35l-0.02,-0.9l-0.65,-0.35l0.45,-0.64l-0.03,-0.53l-2.12,-2.44l-0.76,-0.01l-2.0,1.16l-0.78,-0.15l-0.8,-0.67l-1.21,0.23Z\", \"name\": \"Mali\"}, \"MN\": {\"path\": \"M676.61,146.48l3.81,1.68l5.67,-1.0l2.37,0.41l2.34,1.5l1.79,1.75l2.29,-0.03l3.12,0.52l2.47,-0.81l3.41,-0.59l3.53,-2.21l1.25,0.29l1.53,1.13l2.27,-0.21l-2.66,5.01l0.64,1.68l0.47,0.21l1.32,-0.38l2.38,0.48l2.02,-1.11l1.76,0.89l2.06,2.02l-0.13,0.53l-1.72,-0.29l-3.77,0.46l-1.88,0.99l-1.76,1.99l-3.71,1.17l-2.45,1.6l-3.83,-0.87l-0.41,0.17l-1.31,1.99l1.04,2.24l-1.52,0.9l-1.74,1.57l-2.79,1.02l-3.78,0.13l-4.05,1.05l-2.77,1.52l-1.16,-0.85l-2.94,0.0l-3.62,-1.79l-2.58,-0.49l-3.4,0.41l-5.12,-0.67l-2.63,0.06l-1.31,-1.6l-1.4,-3.0l-1.48,-0.33l-3.13,-1.94l-6.16,-0.93l-0.71,-1.06l0.86,-3.82l-1.93,-2.71l-3.5,-1.18l-1.95,-1.58l-0.5,-1.72l2.34,-0.52l4.75,-2.8l3.62,-1.47l2.18,0.97l2.46,0.05l1.81,1.53l2.46,0.12l3.95,0.71l2.43,-2.28l0.08,-0.48l-0.9,-1.72l2.24,-2.98l2.62,1.27l4.94,1.17l0.43,2.24Z\", \"name\": \"Mongolia\"}, \"MK\": {\"path\": \"M472.8,173.98l0.49,-0.71l3.57,-0.71l1.0,0.77l0.13,1.45l-0.65,0.53l-1.15,-0.05l-1.12,0.67l-1.39,0.22l-0.79,-0.55l-0.29,-1.03l0.19,-0.6Z\", \"name\": \"Macedonia\"}, \"MW\": {\"path\": \"M505.5,309.31l0.85,1.95l0.15,2.86l-0.69,1.65l0.71,1.8l0.06,1.28l0.49,0.64l0.07,1.06l0.4,0.55l0.8,-0.23l0.55,0.61l0.69,-0.21l0.34,0.6l0.19,2.94l-1.04,0.62l-0.54,1.25l-1.11,-1.08l-0.16,-1.56l0.51,-1.31l-0.32,-1.3l-0.99,-0.65l-0.82,0.12l-2.36,-1.64l0.63,-1.96l0.82,-1.18l-0.46,-2.01l0.9,-2.86l-0.94,-2.51l0.96,0.18l0.29,0.4Z\", \"name\": \"Malawi\"}, \"MR\": {\"path\": \"M407.36,220.66l-2.58,0.03l-0.39,0.44l2.42,22.56l0.36,0.43l-0.39,1.24l-9.75,0.04l-0.56,0.53l-0.91,-0.11l-1.27,0.45l-1.61,-0.66l-0.97,0.03l-0.36,0.29l-0.38,1.35l-0.42,0.23l-2.93,-3.4l-2.96,-1.52l-1.62,-0.03l-1.27,0.54l-1.12,-0.2l-0.65,0.4l-0.08,-0.49l0.68,-1.29l0.31,-2.43l-0.57,-3.91l0.23,-1.21l-0.69,-1.5l-1.15,-1.02l0.25,-0.39l9.58,0.02l0.4,-0.45l-0.46,-3.68l0.47,-1.04l2.12,-0.21l0.36,-0.4l-0.08,-6.4l7.81,0.13l0.41,-0.4l0.01,-3.31l7.76,5.35Z\", \"name\": \"Mauritania\"}, \"UG\": {\"path\": \"M498.55,276.32l0.7,-0.46l1.65,0.5l1.96,-0.57l1.7,0.01l1.45,-0.98l0.91,1.33l1.33,3.95l-2.57,4.03l-1.46,-0.4l-2.54,0.91l-1.37,1.61l-0.01,0.81l-2.42,-0.01l-2.26,1.01l-0.17,-1.59l0.58,-1.04l0.14,-1.94l1.37,-2.28l1.78,-1.58l-0.17,-0.65l-0.72,-0.24l0.13,-2.43Z\", \"name\": \"Uganda\"}, \"MY\": {\"path\": \"M717.47,273.46l-1.39,0.65l-2.12,-0.41l-2.88,-0.0l-0.38,0.28l-0.84,2.75l-0.99,0.96l-1.21,3.29l-1.73,0.45l-2.45,-0.68l-1.39,0.31l-1.33,1.15l-1.59,-0.14l-1.41,0.44l-1.44,-1.19l-0.18,-0.73l1.34,0.53l1.93,-0.47l0.75,-2.22l4.02,-1.03l2.75,-3.21l0.82,0.94l0.64,-0.05l0.4,-0.65l0.96,0.06l0.42,-0.36l0.24,-2.68l1.81,-1.64l1.21,-1.86l0.63,-0.01l1.07,1.05l0.34,1.28l3.44,1.35l-0.06,0.35l-1.37,0.1l-0.35,0.54l0.32,0.88ZM673.68,269.59l0.17,1.09l0.47,0.33l1.65,-0.3l0.87,-0.94l1.61,1.52l0.98,1.56l-0.12,2.81l0.41,2.29l0.95,0.9l0.88,2.44l-1.27,0.12l-5.1,-3.67l-0.34,-1.29l-1.37,-1.59l-0.33,-1.97l-0.88,-1.4l0.25,-1.68l-0.46,-1.05l1.63,0.84Z\", \"name\": \"Malaysia\"}, \"MX\": {\"path\": \"M133.12,200.41l0.2,0.47l9.63,3.33l6.96,-0.02l0.4,-0.4l0.0,-0.74l3.77,0.0l3.55,2.93l1.39,2.83l1.52,1.04l2.08,0.82l0.47,-0.14l1.46,-2.0l1.73,-0.04l1.59,0.98l2.05,3.35l1.47,1.56l1.26,3.14l2.18,1.02l2.26,0.58l-1.18,3.72l-0.42,5.04l1.79,4.89l1.62,1.89l0.61,1.52l1.2,1.42l2.55,0.66l1.37,1.1l7.54,-1.89l1.86,-1.3l1.14,-4.3l4.1,-1.21l3.57,-0.11l0.32,0.3l-0.06,0.94l-1.26,1.45l-0.67,1.71l0.38,0.7l-0.72,2.27l-0.49,-0.3l-1.0,0.08l-1.0,1.39l-0.47,-0.11l-0.53,0.47l-4.26,-0.02l-0.4,0.4l-0.0,1.06l-1.1,0.26l0.1,0.44l1.82,1.44l0.56,0.91l-3.19,0.21l-1.21,2.09l0.24,0.72l-0.2,0.44l-2.24,-2.18l-1.45,-0.93l-2.22,-0.69l-1.52,0.22l-3.07,1.16l-10.55,-3.85l-2.86,-1.96l-3.78,-0.92l-1.08,-1.19l-2.62,-1.43l-1.18,-1.54l-0.38,-0.81l0.66,-0.63l-0.18,-0.53l0.52,-0.76l0.01,-0.91l-2.0,-3.82l-2.21,-2.63l-2.53,-2.09l-1.19,-1.62l-2.2,-1.17l-0.3,-0.43l0.34,-1.48l-0.21,-0.45l-1.23,-0.6l-1.36,-1.2l-0.59,-1.78l-1.54,-0.47l-2.44,-2.55l-0.16,-0.9l-1.33,-2.03l-0.84,-1.99l-0.16,-1.33l-1.81,-1.1l-0.97,0.05l-1.31,-0.7l-0.57,0.22l-0.4,1.12l0.72,3.77l3.51,3.89l0.28,0.78l0.53,0.26l0.41,1.43l1.33,1.73l1.58,1.41l0.8,2.39l1.43,2.41l0.13,1.32l0.37,0.36l1.04,0.08l1.67,2.28l-0.85,0.76l-0.66,-1.51l-1.68,-1.54l-2.91,-1.87l0.06,-1.82l-0.54,-1.68l-2.91,-2.03l-0.55,0.09l-1.95,-1.1l-0.88,-0.94l0.68,-0.08l0.93,-1.01l0.08,-1.78l-1.93,-1.94l-1.46,-0.77l-3.75,-7.56l4.88,-0.42Z\", \"name\": \"Mexico\"}, \"VU\": {\"path\": \"M839.04,322.8l0.22,1.14l-0.44,0.03l-0.2,-1.45l0.42,0.27Z\", \"name\": \"Vanuatu\"}, \"FR\": {\"path\": \"M444.48,172.62l-0.64,1.78l-0.58,-0.31l-0.49,-1.72l0.4,-0.89l1.0,-0.72l0.3,1.85ZM429.64,147.1l1.78,1.58l1.46,-0.13l2.1,1.42l1.35,0.27l1.23,0.83l3.04,0.5l-1.03,1.85l-0.3,2.12l-0.41,0.32l-0.95,-0.24l-0.5,0.43l0.06,0.61l-1.81,1.92l-0.04,1.42l0.55,0.38l0.88,-0.36l0.61,0.97l-0.03,1.0l0.57,0.91l-0.75,1.09l0.65,2.39l1.27,0.57l-0.18,0.82l-2.01,1.53l-4.77,-0.8l-3.82,1.0l-0.53,1.85l-2.49,0.34l-2.71,-1.31l-1.16,0.57l-4.31,-1.29l-0.72,-0.86l1.19,-1.78l0.39,-6.45l-2.58,-3.3l-1.9,-1.66l-3.72,-1.23l-0.19,-1.72l2.81,-0.61l4.12,0.81l0.47,-0.48l-0.6,-2.77l1.94,0.95l5.83,-2.54l0.92,-2.74l1.6,-0.49l0.24,0.78l1.36,0.33l1.05,1.19ZM289.01,278.39l-0.81,0.8l-0.78,0.12l-0.5,-0.66l-0.56,-0.1l-0.91,0.6l-0.46,-0.22l1.09,-2.96l-0.96,-1.77l-0.17,-1.49l1.07,-1.77l2.32,0.75l2.51,2.01l0.3,0.74l-2.14,3.96Z\", \"name\": \"France\"}, \"FI\": {\"path\": \"M492.17,76.39l-0.23,3.5l3.52,2.63l-2.08,2.88l-0.02,0.44l2.8,4.56l-1.59,3.31l2.16,3.24l-0.94,2.39l0.14,0.47l3.44,2.51l-0.77,1.62l-7.52,6.95l-4.5,0.31l-4.38,1.37l-3.8,0.74l-1.44,-1.96l-2.17,-1.11l0.5,-3.66l-1.16,-3.33l1.09,-2.08l2.21,-2.42l5.67,-4.32l1.64,-0.83l0.21,-0.42l-0.46,-2.02l-3.38,-1.89l-0.75,-1.43l-0.22,-6.74l-6.79,-4.8l0.8,-0.62l2.54,2.12l3.46,-0.12l3.0,0.96l2.51,-2.11l1.17,-3.08l3.55,-1.38l2.76,1.53l-0.95,2.79Z\", \"name\": \"Finland\"}, \"FJ\": {\"path\": \"M871.53,326.34l-2.8,1.05l-0.08,-0.23l2.97,-1.21l-0.1,0.39ZM867.58,329.25l0.43,0.37l-0.27,0.88l-1.24,0.28l-1.04,-0.24l-0.14,-0.66l0.63,-0.58l0.92,0.26l0.7,-0.31Z\", \"name\": \"Fiji\"}, \"FK\": {\"path\": \"M274.36,425.85l1.44,1.08l-0.47,0.73l-3.0,0.89l-0.96,-1.0l-0.52,-0.05l-1.83,1.29l-0.73,-0.88l2.46,-1.64l1.93,0.76l1.67,-1.19Z\", \"name\": \"Falkland Is.\"}, \"NI\": {\"path\": \"M202.33,252.67l0.81,-0.18l1.03,-1.02l-0.04,-0.88l0.68,-0.0l0.63,-0.54l0.97,0.22l1.53,-1.26l0.58,-0.99l1.17,0.34l2.41,-0.94l0.13,1.32l-0.81,1.94l0.1,2.74l-0.36,0.37l-0.11,1.75l-0.47,0.81l0.18,1.14l-1.73,-0.85l-0.71,0.27l-1.47,-0.6l-0.52,0.16l-4.01,-3.81Z\", \"name\": \"Nicaragua\"}, \"NL\": {\"path\": \"M430.31,143.39l0.6,-0.5l2.13,-4.8l3.2,-1.33l1.74,0.08l0.33,0.8l-0.59,2.92l-0.5,0.99l-1.26,0.0l-0.4,0.45l0.33,2.7l-2.2,-1.78l-2.62,0.58l-0.75,-0.11Z\", \"name\": \"Netherlands\"}, \"NO\": {\"path\": \"M491.44,67.41l6.8,2.89l-2.29,0.86l-0.15,0.65l2.33,2.38l-4.98,1.79l0.84,-2.45l-0.18,-0.48l-3.55,-1.8l-3.89,1.52l-1.42,3.38l-2.12,1.72l-2.64,-1.0l-3.11,0.21l-2.66,-2.22l-0.5,-0.01l-1.41,1.1l-1.44,0.17l-0.35,0.35l-0.32,2.47l-4.32,-0.64l-0.44,0.29l-0.58,2.11l-2.45,0.2l-4.15,7.68l-3.88,5.76l0.78,1.62l-0.64,1.16l-2.24,-0.06l-0.38,0.24l-1.66,3.89l0.15,5.17l1.57,2.04l-0.78,4.16l-2.02,2.48l-0.85,1.63l-1.3,-1.75l-0.58,-0.07l-4.87,4.19l-3.1,0.79l-3.16,-1.7l-0.85,-3.77l-0.77,-8.55l2.14,-2.31l6.55,-3.27l5.02,-4.17l10.63,-13.84l10.98,-8.7l5.35,-1.91l4.34,0.12l3.69,-3.64l4.49,0.19l4.37,-0.89ZM484.55,20.04l4.26,1.75l-3.1,2.55l-7.1,0.65l-7.08,-0.9l-0.37,-1.31l-0.37,-0.29l-3.44,-0.1l-2.08,-2.0l6.87,-1.44l3.9,1.31l2.39,-1.64l6.13,1.4ZM481.69,33.93l-4.45,1.74l-3.54,-0.99l1.12,-0.9l0.05,-0.58l-1.06,-1.22l4.22,-0.89l1.09,1.97l2.57,0.87ZM466.44,24.04l7.43,3.77l-5.41,1.86l-1.58,4.08l-2.26,1.2l-1.12,4.11l-2.61,0.18l-4.79,-2.86l1.84,-1.54l-0.1,-0.68l-3.69,-1.53l-4.77,-4.51l-1.73,-3.89l6.11,-1.82l1.54,1.92l3.57,-0.08l1.2,-1.96l3.32,-0.18l3.05,1.92Z\", \"name\": \"Norway\"}, \"NA\": {\"path\": \"M474.26,330.66l-0.97,0.04l-0.38,0.4l-0.07,8.9l-2.09,0.08l-0.39,0.4l-0.0,17.42l-1.98,1.23l-1.17,0.17l-2.44,-0.66l-0.48,-1.13l-0.99,-0.74l-0.54,0.05l-0.9,1.01l-1.53,-1.68l-0.93,-1.88l-1.99,-8.56l-0.06,-3.12l-0.33,-1.52l-2.3,-3.34l-1.91,-4.83l-1.96,-2.43l-0.12,-1.57l2.33,-0.79l1.43,0.07l1.81,1.13l10.23,-0.25l1.84,1.23l5.87,0.35ZM474.66,330.64l6.51,-1.6l1.9,0.39l-1.69,0.4l-1.31,0.83l-1.12,-0.94l-4.29,0.92Z\", \"name\": \"Namibia\"}, \"NC\": {\"path\": \"M838.78,341.24l-0.33,0.22l-2.9,-1.75l-3.26,-3.37l1.65,0.83l4.85,4.07Z\", \"name\": \"New Caledonia\"}, \"NE\": {\"path\": \"M454.75,226.53l1.33,1.37l0.48,0.07l1.27,-0.7l0.53,3.52l0.94,0.83l0.17,0.92l0.81,0.69l-0.44,0.95l-0.96,5.26l-0.13,3.22l-3.04,2.31l-1.22,3.57l1.02,1.24l-0.0,1.46l0.39,0.4l1.13,0.04l-0.9,1.25l-1.47,-2.42l-0.86,-0.29l-2.09,1.37l-1.74,-0.67l-1.45,-0.17l-0.85,0.35l-1.36,-0.07l-1.64,1.09l-1.06,0.05l-2.94,-1.28l-1.44,0.59l-1.01,-0.03l-0.97,-0.94l-2.7,-0.98l-2.69,0.3l-0.87,0.64l-0.47,1.6l-0.75,1.16l-0.12,1.53l-1.57,-1.1l-1.31,0.24l0.03,-0.81l-0.32,-0.41l-2.59,-0.52l-0.15,-1.16l-1.35,-1.6l-0.29,-1.0l0.13,-0.84l1.29,-0.08l1.08,-0.92l3.31,-0.22l2.22,-0.41l0.32,-0.34l0.2,-1.47l1.39,-1.88l-0.01,-5.66l3.36,-1.12l7.24,-5.12l8.42,-4.92l3.69,1.06Z\", \"name\": \"Niger\"}, \"NG\": {\"path\": \"M456.32,253.89l0.64,0.65l-0.28,1.04l-2.11,2.01l-2.03,5.18l-1.37,1.16l-1.15,3.18l-1.33,0.66l-1.46,-0.97l-1.21,0.16l-1.38,1.36l-0.91,0.24l-1.79,4.06l-2.33,0.81l-1.11,-0.07l-0.86,0.5l-1.71,-0.05l-1.19,-1.39l-0.89,-1.89l-1.77,-1.66l-3.95,-0.08l0.07,-5.21l0.42,-1.43l1.95,-2.3l-0.14,-0.91l0.43,-1.18l-0.53,-1.41l0.25,-2.92l0.72,-1.07l0.32,-1.34l0.46,-0.39l2.47,-0.28l2.34,0.89l1.15,1.02l1.28,0.04l1.22,-0.58l3.03,1.27l1.49,-0.14l1.36,-1.0l1.33,0.07l0.82,-0.35l3.45,0.8l1.82,-1.32l1.84,2.67l0.66,0.16Z\", \"name\": \"Nigeria\"}, \"NZ\": {\"path\": \"M857.8,379.65l1.86,3.12l0.44,0.18l0.3,-0.38l0.03,-1.23l0.38,0.27l0.57,2.31l2.02,0.94l1.81,0.27l1.57,-1.06l0.7,0.18l-1.15,3.59l-1.98,0.11l-0.74,1.2l0.2,1.11l-2.42,3.98l-1.49,0.92l-1.04,-0.85l1.21,-2.05l-0.81,-2.01l-2.63,-1.25l0.04,-0.57l1.82,-1.19l0.43,-2.34l-0.16,-2.03l-0.95,-1.82l-0.06,-0.72l-3.11,-3.64l-0.79,-1.52l1.56,1.45l1.76,0.66l0.65,2.34ZM853.83,393.59l0.57,1.24l0.59,0.16l1.42,-0.97l0.46,0.79l0.0,1.03l-2.47,3.48l-1.26,1.2l-0.06,0.5l0.55,0.87l-1.41,0.07l-2.33,1.38l-2.03,5.02l-3.02,2.16l-2.06,-0.06l-1.71,-1.04l-2.47,-0.2l-0.27,-0.73l1.22,-2.1l3.05,-2.94l1.62,-0.59l4.02,-2.82l1.57,-1.67l1.07,-2.16l0.88,-0.7l0.48,-1.75l1.24,-0.97l0.35,0.79Z\", \"name\": \"New Zealand\"}, \"NP\": {\"path\": \"M641.14,213.62l0.01,3.19l-1.74,0.04l-4.8,-0.86l-1.58,-1.39l-3.37,-0.34l-7.65,-3.7l0.8,-2.09l2.33,-1.7l1.77,0.75l2.49,1.76l1.38,0.41l0.99,1.35l1.9,0.52l1.99,1.17l5.49,0.9Z\", \"name\": \"Nepal\"}, \"CI\": {\"path\": \"M407.4,259.27l0.86,0.42l0.56,0.9l1.13,0.53l1.19,-0.61l0.97,-0.08l1.42,0.54l0.6,3.24l-1.03,2.08l-0.65,2.84l1.06,2.33l-0.06,0.53l-2.54,-0.47l-1.66,0.03l-3.06,0.46l-4.11,1.6l0.32,-3.06l-1.18,-1.31l-1.32,-0.66l0.42,-0.85l-0.2,-1.4l0.5,-0.67l0.01,-1.59l0.84,-0.32l0.26,-0.5l-1.15,-3.01l0.12,-0.5l0.51,-0.25l0.66,0.31l1.93,0.02l0.67,-0.71l0.71,-0.14l0.25,0.69l0.57,0.22l1.4,-0.61Z\", \"name\": \"C\\u00c3\\u00b4te d'Ivoire\"}, \"CH\": {\"path\": \"M444.62,156.35l-0.29,0.87l0.18,0.53l1.13,0.58l1.0,0.1l-0.1,0.65l-0.79,0.38l-1.72,-0.37l-0.45,0.23l-0.45,1.04l-0.75,0.06l-0.84,-0.4l-1.32,1.0l-0.96,0.12l-0.88,-0.55l-0.81,-1.3l-0.49,-0.16l-0.63,0.26l0.02,-0.65l1.71,-1.66l0.1,-0.56l0.93,0.08l0.58,-0.46l1.99,0.02l0.66,-0.61l2.19,0.79Z\", \"name\": \"Switzerland\"}, \"CO\": {\"path\": \"M242.07,254.93l-1.7,0.59l-0.59,1.18l-1.7,1.69l-0.38,1.93l-0.67,1.43l0.31,0.57l1.03,0.13l0.25,0.9l0.57,0.64l-0.04,2.34l1.64,1.42l3.16,-0.24l1.26,0.28l1.67,2.06l0.41,0.13l4.09,-0.39l0.45,0.22l-0.92,1.95l-0.2,1.8l0.52,1.83l0.75,1.05l-1.12,1.1l0.07,0.63l0.84,0.51l0.74,1.29l-0.39,-0.45l-0.59,-0.01l-0.71,0.74l-4.71,-0.05l-0.4,0.41l0.03,1.57l0.33,0.39l1.11,0.2l-1.68,0.4l-0.29,0.38l-0.01,1.82l1.16,1.14l0.34,1.25l-1.05,7.05l-1.04,-0.87l1.26,-1.99l-0.13,-0.56l-2.18,-1.23l-1.38,0.2l-1.14,-0.38l-1.27,0.61l-1.55,-0.26l-1.38,-2.46l-1.23,-0.75l-0.85,-1.2l-1.67,-1.19l-0.86,0.13l-2.11,-1.32l-1.01,0.31l-1.8,-0.29l-0.52,-0.91l-3.09,-1.68l0.77,-0.52l-0.1,-1.12l0.41,-0.64l1.34,-0.32l2.0,-2.88l-0.11,-0.57l-0.66,-0.43l0.39,-1.38l-0.52,-2.1l0.49,-0.83l-0.4,-2.13l-0.97,-1.35l0.17,-0.66l0.86,-0.08l0.47,-0.75l-0.46,-1.63l1.41,-0.07l1.8,-1.69l0.93,-0.24l0.3,-0.38l0.45,-2.76l1.22,-1.0l1.44,-0.04l0.45,-0.5l1.91,0.12l2.93,-1.84l1.15,-1.14l0.91,0.46l-0.25,0.45Z\", \"name\": \"Colombia\"}, \"CN\": {\"path\": \"M740.23,148.97l4.57,1.3l2.8,2.17l0.98,2.9l0.38,0.27l3.8,0.0l2.32,-1.28l3.29,-0.75l-0.96,2.09l-1.02,1.28l-0.85,3.4l-1.52,2.73l-2.76,-0.5l-2.4,1.13l-0.21,0.45l0.64,2.57l-0.32,3.2l-0.94,0.06l-0.37,0.89l-0.91,-1.01l-0.64,0.07l-0.92,1.57l-3.73,1.25l-0.26,0.48l0.26,1.06l-1.5,-0.08l-1.09,-0.86l-0.56,0.06l-1.67,2.06l-2.7,1.56l-2.03,1.88l-3.4,0.83l-1.93,1.4l-1.15,0.34l0.33,-0.7l-0.41,-0.89l1.79,-1.79l0.02,-0.54l-1.32,-1.56l-0.48,-0.1l-2.24,1.09l-2.83,2.06l-1.51,1.83l-2.28,0.13l-1.55,1.49l-0.04,0.5l1.32,1.97l2.0,0.58l0.31,1.35l1.98,0.84l3.0,-1.96l2.0,1.02l1.49,0.11l0.22,0.83l-3.37,0.86l-1.12,1.48l-2.5,1.52l-1.29,1.99l0.14,0.56l2.57,1.48l0.97,2.7l3.17,4.63l-0.03,1.66l-1.35,0.65l-0.2,0.51l0.6,1.47l1.4,0.91l-0.89,3.82l-1.43,0.38l-3.85,6.44l-2.27,3.11l-6.78,4.57l-2.73,0.29l-1.45,1.04l-0.62,-0.61l-0.55,-0.01l-1.36,1.25l-3.39,1.27l-2.61,0.4l-1.1,2.79l-0.81,0.09l-0.49,-1.42l0.5,-0.85l-0.25,-0.59l-3.36,-0.84l-1.3,0.4l-2.31,-0.62l-0.94,-0.84l0.33,-1.28l-0.3,-0.49l-2.19,-0.46l-1.13,-0.93l-0.47,-0.02l-2.06,1.36l-4.29,0.28l-2.76,1.05l-0.28,0.43l0.32,2.53l-0.59,-0.03l-0.19,-1.34l-0.55,-0.34l-1.68,0.7l-2.46,-1.23l0.62,-1.87l-0.26,-0.51l-1.37,-0.44l-0.54,-2.22l-0.45,-0.3l-2.13,0.35l0.24,-2.48l2.39,-2.4l0.03,-4.31l-1.19,-0.92l-0.78,-1.49l-0.41,-0.21l-1.41,0.19l-1.98,-0.3l0.46,-1.07l-1.17,-1.7l-0.55,-0.11l-1.63,1.05l-2.25,-0.57l-2.89,1.73l-2.25,1.98l-1.75,0.29l-1.17,-0.71l-3.31,-0.65l-1.48,0.79l-1.04,1.27l-0.12,-1.17l-0.54,-0.34l-1.44,0.54l-5.55,-0.86l-1.98,-1.16l-1.89,-0.54l-0.99,-1.35l-1.34,-0.37l-2.55,-1.79l-2.01,-0.84l-1.21,0.56l-5.57,-3.45l-0.53,-2.31l1.19,0.25l0.48,-0.37l0.08,-1.42l-0.98,-1.56l0.15,-2.44l-2.69,-3.32l-4.12,-1.23l-0.67,-2.0l-1.92,-1.48l-0.38,-0.7l-0.51,-3.01l-1.52,-0.66l-0.7,0.13l-0.48,-2.05l0.55,-0.51l-0.09,-0.82l2.03,-1.19l1.6,-0.54l2.56,0.38l0.42,-0.22l0.85,-1.7l3.0,-0.33l1.1,-1.26l4.05,-1.77l0.39,-0.91l-0.17,-1.44l1.45,-0.67l0.2,-0.52l-2.07,-4.9l4.51,-1.12l1.37,-0.73l1.89,-5.51l4.98,0.86l1.51,-1.7l0.11,-2.87l1.99,-0.38l1.83,-2.06l0.49,-0.13l0.68,2.08l2.23,1.77l3.44,1.16l1.55,2.29l-0.92,3.49l0.96,1.67l6.54,1.13l2.95,1.87l1.47,0.35l1.06,2.62l1.53,1.91l3.05,0.08l5.14,0.67l3.37,-0.41l2.36,0.43l3.65,1.8l3.06,0.04l1.45,0.88l2.87,-1.59l3.95,-1.02l3.83,-0.14l3.06,-1.14l1.77,-1.6l1.72,-1.01l0.17,-0.49l-1.1,-2.05l1.02,-1.54l4.02,0.8l2.45,-1.61l3.76,-1.19l1.96,-2.13l1.63,-0.83l3.51,-0.4l1.92,0.34l0.46,-0.3l0.17,-1.5l-2.27,-2.22l-2.11,-1.09l-2.18,1.11l-2.32,-0.47l-1.29,0.32l-0.4,-0.82l2.73,-5.16l3.02,1.06l3.53,-2.06l0.18,-1.68l2.16,-3.35l1.49,-1.35l-0.03,-1.85l-1.07,-0.85l1.54,-1.26l2.98,-0.59l3.23,-0.09l3.64,0.99l2.04,1.16l3.29,6.71l0.92,3.19ZM696.92,237.31l-1.87,1.08l-1.63,-0.64l-0.06,-1.79l1.03,-0.98l2.58,-0.69l1.16,0.05l0.3,0.54l-0.98,1.06l-0.53,1.37Z\", \"name\": \"China\"}, \"CM\": {\"path\": \"M457.92,257.49l1.05,1.91l-1.4,0.16l-1.05,-0.23l-0.45,0.22l-0.54,1.19l0.08,0.45l1.48,1.47l1.05,0.45l1.01,2.46l-1.52,2.99l-0.68,0.68l-0.13,3.69l2.38,3.84l1.09,0.8l0.24,2.48l-3.67,-1.14l-11.27,-0.13l0.23,-1.79l-0.98,-1.66l-1.19,-0.54l-0.44,-0.97l-0.6,-0.42l1.71,-4.27l0.75,-0.13l1.38,-1.36l0.65,-0.03l1.71,0.99l1.93,-1.12l1.14,-3.18l1.38,-1.17l2.0,-5.14l2.17,-2.13l0.3,-1.64l-0.86,-0.88l0.03,-0.33l0.94,1.28l0.07,3.22Z\", \"name\": \"Cameroon\"}, \"CL\": {\"path\": \"M246.5,429.18l-3.14,1.83l-0.57,3.16l-0.64,0.05l-2.68,-1.06l-2.82,-2.33l-3.04,-1.89l-0.69,-1.85l0.63,-2.14l-1.21,-2.11l-0.31,-5.37l1.01,-2.91l2.57,-2.38l-0.18,-0.68l-3.16,-0.77l2.05,-2.47l0.77,-4.65l2.32,0.9l0.54,-0.29l1.31,-6.31l-0.22,-0.44l-1.68,-0.8l-0.56,0.28l-0.7,3.36l-0.81,-0.22l1.56,-9.41l1.15,-2.24l-0.71,-2.82l-0.18,-2.84l1.01,-0.33l3.26,-9.14l1.07,-4.22l-0.56,-4.21l0.74,-2.34l-0.29,-3.27l1.46,-3.34l2.04,-16.59l-0.66,-7.76l1.03,-0.53l0.54,-0.9l0.79,1.14l0.32,1.78l1.25,1.16l-0.69,2.55l1.33,2.9l0.97,3.59l0.46,0.29l1.5,-0.3l0.11,0.23l-0.76,2.44l-2.57,1.23l-0.23,0.37l0.08,4.33l-0.46,0.77l0.56,1.21l-1.58,1.51l-1.68,2.62l-0.89,2.47l0.2,2.7l-1.48,2.73l1.12,5.09l0.64,0.61l-0.01,2.29l-1.38,2.68l0.01,2.4l-1.89,2.04l0.02,2.75l0.69,2.57l-1.43,1.13l-1.26,5.68l0.39,3.51l-0.97,0.89l0.58,3.5l1.02,1.14l-0.65,1.02l0.15,0.57l1.0,0.53l0.16,0.69l-1.03,0.85l0.26,1.75l-0.89,4.03l-1.31,2.66l0.24,1.75l-0.71,1.83l-1.99,1.7l0.3,3.67l0.88,1.19l1.58,0.01l0.01,2.21l1.04,1.95l5.98,0.63ZM248.69,430.79l0.0,7.33l0.4,0.4l3.52,0.05l-0.44,0.75l-1.94,0.98l-2.49,-0.37l-1.88,-1.06l-2.55,-0.49l-5.59,-3.71l-2.38,-2.63l4.1,2.48l3.32,1.23l0.45,-0.12l1.29,-1.57l0.83,-2.32l2.05,-1.24l1.31,0.29Z\", \"name\": \"Chile\"}, \"CA\": {\"path\": \"M280.06,145.6l-1.67,2.88l0.07,0.49l0.5,0.04l1.46,-0.98l1.0,0.42l-0.56,0.72l0.17,0.62l2.22,0.89l1.35,-0.71l1.95,0.78l-0.66,2.01l0.5,0.51l1.32,-0.42l0.98,3.17l-0.91,2.41l-0.8,0.08l-1.23,-0.45l0.47,-2.25l-0.89,-0.83l-0.48,0.06l-2.78,2.63l-0.34,-0.02l1.02,-0.85l-0.14,-0.69l-2.4,-0.77l-7.4,0.08l-0.17,-0.41l1.3,-0.94l0.02,-0.64l-0.73,-0.58l1.85,-1.74l2.57,-5.16l1.47,-1.79l1.99,-1.05l0.46,0.06l-1.53,2.45ZM68.32,74.16l4.13,0.95l4.02,2.14l2.61,0.4l2.47,-1.89l2.88,-1.31l3.85,0.48l3.71,-1.94l3.82,-1.04l1.56,1.68l0.49,0.08l1.87,-1.04l0.65,-1.98l1.24,0.35l4.16,3.94l0.54,0.01l2.75,-2.49l0.26,2.59l0.49,0.35l3.08,-0.73l1.04,-1.27l2.73,0.23l3.83,1.86l5.86,1.61l3.47,0.75l2.44,-0.26l2.73,1.78l-2.98,1.81l-0.19,0.41l0.31,0.32l4.53,0.92l6.87,-0.5l2.0,-0.69l2.49,2.39l0.53,0.02l2.72,-2.16l-0.02,-0.64l-2.16,-1.54l1.15,-1.06l4.83,-0.61l1.84,0.95l2.48,2.31l3.01,-0.23l4.55,1.92l3.85,-0.67l3.61,0.1l0.41,-0.44l-0.25,-2.36l1.79,-0.61l3.49,1.32l-0.01,3.77l0.31,0.39l0.45,-0.22l1.48,-3.16l1.74,0.1l0.41,-0.3l1.13,-4.37l-2.78,-3.11l-2.8,-1.74l0.19,-4.64l2.71,-3.07l2.98,0.67l2.41,1.95l3.19,4.8l-1.99,1.97l0.21,0.68l4.33,0.84l-0.01,4.15l0.25,0.37l0.44,-0.09l3.07,-3.15l2.54,2.39l-0.61,3.33l2.42,2.88l0.61,0.0l2.61,-3.08l1.88,-3.82l0.17,-4.58l6.72,0.94l3.13,2.04l0.13,1.82l-1.76,2.19l-0.01,0.49l1.66,2.16l-0.26,1.71l-4.68,2.8l-3.28,0.61l-2.47,-1.2l-0.55,0.23l-0.73,2.04l-2.38,3.43l-0.74,1.77l-2.74,2.57l-3.44,0.25l-2.21,1.78l-0.28,2.53l-2.82,0.55l-3.12,3.22l-2.72,4.31l-1.03,3.17l-0.14,4.31l0.33,0.41l3.44,0.57l2.24,5.95l0.45,0.23l3.4,-0.69l4.52,1.51l2.43,1.31l1.91,1.73l3.1,0.96l2.62,1.46l6.6,0.54l-0.35,2.74l0.81,3.53l1.81,3.78l3.83,3.3l0.45,0.04l2.1,-1.28l1.37,-3.69l-1.31,-5.38l-1.45,-1.58l3.57,-1.47l2.84,-2.46l1.52,-2.8l-0.25,-2.55l-1.7,-3.07l-2.85,-2.61l2.8,-3.95l-1.08,-3.37l-0.79,-5.67l1.36,-0.7l6.76,1.41l2.12,-0.96l5.12,3.36l1.05,1.61l4.08,0.26l-0.06,2.87l0.83,4.7l0.3,0.32l2.16,0.54l1.73,2.06l0.5,0.09l3.63,-2.03l2.52,-4.19l1.26,-1.32l7.6,11.72l-0.92,2.04l0.16,0.51l3.3,1.97l2.22,1.98l4.1,0.98l1.43,0.99l0.95,2.79l2.1,0.68l0.84,1.08l0.17,3.45l-3.37,2.26l-4.22,1.24l-3.06,2.63l-4.06,0.51l-5.35,-0.69l-6.39,0.2l-2.3,2.41l-3.26,1.51l-6.47,7.15l-0.06,0.48l0.44,0.19l2.13,-0.52l4.17,-4.24l5.12,-2.62l3.52,-0.3l1.69,1.21l-2.12,2.21l0.81,3.47l1.02,2.61l3.47,1.6l4.14,-0.45l2.15,-2.8l0.26,1.48l1.14,0.8l-2.56,1.69l-5.5,1.82l-2.54,1.27l-2.74,2.15l-1.4,-0.16l-0.07,-2.01l4.14,-2.44l0.18,-0.45l-0.39,-0.29l-6.63,0.45l-1.39,-1.49l-0.14,-4.43l-1.11,-0.91l-1.82,0.39l-0.66,-0.66l-0.6,0.03l-1.91,2.39l-0.82,2.52l-0.8,1.27l-1.67,0.56l-0.46,0.76l-8.31,0.07l-1.21,0.62l-2.35,1.97l-0.71,-0.14l-1.37,0.96l-1.12,-0.48l-4.74,1.26l-0.9,1.17l0.21,0.62l1.73,0.3l-1.81,0.31l-1.85,0.81l-2.11,-0.13l-2.95,1.78l-0.69,-0.09l1.39,-2.1l1.73,-1.21l0.1,-2.29l1.16,-1.99l0.49,0.53l2.03,0.42l1.2,-1.16l0.02,-0.47l-2.66,-3.51l-2.28,-0.61l-5.64,-0.71l-0.4,-0.57l-0.79,0.13l0.2,-0.41l-0.22,-0.55l-0.68,-0.26l0.19,-1.26l-0.78,-0.73l0.31,-0.64l-0.29,-0.57l-2.6,-0.44l-0.75,-1.63l-0.94,-0.66l-4.31,-0.65l-1.13,1.19l-1.48,0.59l-0.85,1.06l-2.83,-0.76l-2.09,0.39l-2.39,-0.97l-4.24,-0.7l-0.57,-0.4l-0.41,-1.63l-0.4,-0.3l-0.85,0.02l-0.39,0.4l-0.01,0.85l-69.13,-0.01l-6.51,-4.52l-4.5,-1.38l-1.26,-2.66l0.33,-1.93l-0.23,-0.43l-3.01,-1.35l-0.55,-2.77l-2.89,-2.38l-0.04,-1.45l1.39,-1.83l-0.28,-2.55l-4.16,-2.2l-4.07,-6.6l-4.02,-3.22l-1.3,-1.88l-0.5,-0.13l-2.51,1.21l-2.23,1.87l-3.85,-3.88l-2.44,-1.04l-2.22,-0.13l0.03,-37.49ZM260.37,148.65l3.04,0.76l2.26,1.2l-3.78,-0.95l-1.53,-1.01ZM249.4,3.81l6.68,0.49l5.32,0.79l4.26,1.57l-0.07,1.1l-5.85,2.53l-6.02,1.21l-2.39,1.39l-0.18,0.45l0.39,0.29l4.01,-0.02l-4.65,2.82l-4.2,1.74l-4.19,4.59l-5.03,0.92l-1.67,1.15l-7.47,0.59l-0.37,0.37l0.32,0.42l2.41,0.49l-0.81,0.47l-0.12,0.59l1.83,2.41l-2.02,1.59l-3.81,1.51l-1.32,2.16l-3.38,1.53l-0.22,0.48l0.35,1.19l0.4,0.29l3.88,-0.18l0.03,0.61l-6.33,2.95l-6.41,-1.4l-7.43,0.79l-3.72,-0.62l-4.4,-0.25l-0.23,-1.83l4.29,-1.11l0.28,-0.51l-1.1,-3.45l1.0,-0.25l6.58,2.28l0.47,-0.16l-0.05,-0.49l-3.41,-3.45l-3.58,-0.98l1.48,-1.55l4.34,-1.29l0.97,-2.19l-0.16,-0.48l-3.42,-2.13l-0.81,-2.26l6.2,0.22l2.24,0.58l3.91,-2.1l0.2,-0.43l-0.35,-0.32l-5.64,-0.67l-8.73,0.36l-4.26,-1.9l-2.12,-2.4l-2.78,-1.66l-0.41,-1.52l3.31,-1.03l2.93,-0.2l4.91,-0.99l3.7,-2.27l2.87,0.3l2.62,1.67l0.56,-0.14l1.82,-3.2l3.13,-0.94l4.44,-0.69l7.53,-0.26l1.48,0.67l7.19,-1.06l10.8,0.79ZM203.85,57.54l0.01,0.42l1.97,2.97l0.68,-0.02l2.24,-3.72l5.95,-1.86l4.01,4.64l-0.35,2.91l0.5,0.43l4.95,-1.36l2.32,-1.8l5.31,2.28l3.27,2.11l0.3,1.84l0.48,0.33l4.42,-0.99l2.64,2.87l5.97,1.77l2.06,1.72l2.11,3.71l-4.19,1.86l-0.01,0.73l5.9,2.83l3.94,0.94l3.78,3.95l3.46,0.25l-0.63,2.37l-4.11,4.47l-2.76,-1.56l-3.9,-3.94l-3.59,0.41l-0.33,0.34l-0.19,2.72l2.63,2.38l3.42,1.89l0.94,0.97l1.55,3.75l-0.7,2.29l-2.74,-0.92l-6.25,-3.15l-0.51,0.13l0.05,0.52l6.07,5.69l0.18,0.59l-6.09,-1.39l-5.31,-2.24l-2.63,-1.66l0.6,-0.77l-0.12,-0.6l-7.39,-4.01l-0.59,0.37l0.03,0.79l-6.73,0.6l-1.69,-1.1l1.36,-2.46l4.51,-0.07l5.15,-0.52l0.31,-0.6l-0.74,-1.3l0.78,-1.84l3.21,-4.05l-0.67,-2.35l-1.11,-1.6l-3.84,-2.1l-4.35,-1.28l0.91,-0.63l0.06,-0.61l-2.65,-2.75l-2.34,-0.36l-1.89,-1.46l-0.53,0.03l-1.24,1.23l-4.36,0.55l-9.04,-0.99l-9.26,-1.98l-1.6,-1.22l2.22,-1.77l0.13,-0.44l-0.38,-0.27l-3.22,-0.02l-0.72,-4.25l1.83,-4.04l2.42,-1.85l5.5,-1.1l-1.39,2.35ZM261.19,159.33l2.07,0.61l1.44,-0.04l-1.15,0.63l-2.94,-1.23l-0.4,-0.68l0.36,-0.37l0.61,1.07ZM230.83,84.39l-2.37,0.18l-0.49,-1.63l0.93,-2.09l1.94,-0.51l1.62,0.99l0.02,1.52l-1.66,1.54ZM229.43,58.25l0.11,0.65l-4.87,-0.21l-2.72,0.62l-3.1,-2.57l0.08,-1.26l0.86,-0.23l5.57,0.51l4.08,2.5ZM222.0,105.02l-0.72,1.49l-0.63,-0.19l-0.48,-0.84l0.81,-0.99l0.65,0.05l0.37,0.46ZM183.74,38.32l2.9,1.7l4.79,-0.01l1.84,1.46l-0.49,1.68l0.23,0.48l2.82,1.14l1.76,1.26l7.01,0.65l4.1,-1.1l5.03,-0.43l3.93,0.35l2.48,1.77l0.46,1.7l-1.3,1.1l-3.56,1.01l-3.23,-0.59l-7.17,0.76l-5.09,0.09l-3.99,-0.6l-6.42,-1.54l-0.79,-2.51l-0.3,-2.49l-2.64,-2.5l-5.32,-0.72l-2.52,-1.4l0.68,-1.57l4.78,0.31ZM207.38,91.35l0.4,1.56l0.56,0.26l1.06,-0.52l1.32,0.96l5.42,2.57l0.2,1.68l0.46,0.35l1.68,-0.28l1.15,0.85l-1.55,0.87l-3.61,-0.88l-1.32,-1.69l-0.57,-0.06l-2.45,2.1l-3.12,1.79l-0.7,-1.87l-0.42,-0.26l-2.16,0.24l1.39,-1.39l0.32,-3.14l0.76,-3.35l1.18,0.22ZM215.49,102.6l-2.67,1.95l-1.4,-0.07l-0.3,-0.58l1.53,-1.48l2.84,0.18ZM202.7,24.12l2.53,1.59l-2.87,1.4l-4.53,4.05l-4.25,0.38l-5.03,-0.68l-2.45,-2.04l0.03,-1.62l1.82,-1.37l0.14,-0.45l-0.38,-0.27l-4.45,0.04l-2.59,-1.76l-1.41,-2.29l1.57,-2.32l1.62,-1.66l2.44,-0.39l0.25,-0.65l-0.6,-0.74l4.86,-0.25l3.24,3.11l8.16,2.3l1.9,3.61ZM187.47,59.2l-2.76,3.49l-2.38,-0.15l-1.44,-3.84l0.04,-2.2l1.19,-1.88l2.3,-1.23l5.07,0.17l4.11,1.02l-3.24,3.72l-2.88,0.89ZM186.07,48.79l-1.08,1.53l-3.34,-0.34l-2.56,-1.1l1.03,-1.75l3.25,-1.23l1.95,1.58l0.75,1.3ZM185.71,35.32l-5.3,-0.2l-0.32,-0.71l4.31,0.07l1.3,0.84ZM180.68,32.48l-3.34,1.0l-1.79,-1.1l-0.98,-1.87l-0.15,-1.73l4.1,0.53l2.67,1.7l-0.51,1.47ZM180.9,76.31l-1.1,1.08l-3.13,-1.23l-2.12,0.43l-2.71,-1.57l1.72,-1.09l1.55,-1.72l3.81,1.9l1.98,2.2ZM169.74,54.87l2.96,0.97l4.17,-0.57l0.41,0.88l-2.14,2.11l0.09,0.64l3.55,1.92l-0.4,3.72l-3.79,1.65l-2.17,-0.35l-1.72,-1.74l-6.02,-3.5l0.03,-0.85l4.68,0.54l0.4,-0.21l-0.05,-0.45l-2.48,-2.81l2.46,-1.95ZM174.45,40.74l1.37,1.73l0.07,2.44l-1.05,3.45l-3.79,0.47l-2.32,-0.69l0.05,-2.64l-0.44,-0.41l-3.68,0.35l-0.12,-3.1l2.45,0.1l3.67,-1.73l3.41,0.29l0.37,-0.26ZM170.05,31.55l0.67,1.56l-3.33,-0.49l-4.22,-1.77l-4.35,-0.16l1.4,-0.94l-0.06,-0.7l-2.81,-1.23l-0.12,-1.39l4.39,0.68l6.62,1.98l1.81,2.47ZM134.5,58.13l-1.02,1.82l0.45,0.58l5.4,-1.39l3.33,2.29l0.49,-0.03l2.6,-2.23l1.94,1.32l2.0,4.5l0.7,0.06l1.3,-2.29l-1.63,-4.46l1.69,-0.54l2.31,0.71l2.65,1.81l2.49,7.92l8.48,4.27l-0.19,1.35l-3.79,0.33l-0.26,0.67l1.4,1.49l-0.58,1.1l-4.23,-0.64l-4.43,-1.19l-3.0,0.28l-4.66,1.47l-10.52,1.04l-1.43,-2.02l-3.42,-1.2l-2.21,0.43l-2.51,-2.86l4.84,-1.05l3.6,0.19l3.27,-0.78l0.31,-0.39l-0.31,-0.39l-4.84,-1.06l-8.79,0.27l-0.85,-1.07l5.26,-1.66l0.27,-0.45l-0.4,-0.34l-3.8,0.06l-3.81,-1.06l1.81,-3.01l1.66,-1.79l6.48,-2.81l1.97,0.71ZM158.7,56.61l-1.7,2.44l-3.2,-2.75l0.37,-0.3l3.11,-0.18l1.42,0.79ZM149.61,42.73l1.01,1.89l0.5,0.18l2.14,-0.82l2.23,0.19l0.36,2.04l-1.33,2.09l-8.28,0.76l-6.35,2.15l-3.41,0.1l-0.19,-0.96l4.9,-2.08l0.23,-0.46l-0.41,-0.31l-11.25,0.59l-2.89,-0.74l3.04,-4.44l2.14,-1.32l6.81,1.69l4.58,3.06l4.37,0.39l0.36,-0.63l-3.36,-4.6l1.85,-1.53l2.18,0.51l0.77,2.26ZM144.76,34.41l-4.36,1.44l-3.0,-1.4l1.46,-1.24l3.47,-0.52l2.96,0.71l-0.52,1.01ZM145.13,29.83l-1.9,0.66l-3.67,-0.0l2.27,-1.61l3.3,0.95ZM118.92,65.79l-6.03,2.02l-1.33,-1.9l-5.38,-2.28l2.59,-5.05l2.16,-3.14l-0.02,-0.48l-1.97,-2.41l7.64,-0.7l3.6,1.02l6.3,0.27l4.42,2.95l-2.53,0.98l-6.24,3.43l-3.1,3.28l-0.11,2.01ZM129.54,35.53l-0.28,3.37l-1.72,1.62l-2.33,0.28l-4.61,2.19l-3.86,0.76l-2.64,-0.87l3.72,-3.4l5.01,-3.34l3.72,0.07l3.0,-0.67ZM111.09,152.69l-0.67,0.24l-3.85,-1.37l-0.83,-1.17l-2.12,-1.07l-0.66,-1.02l-2.4,-0.55l-0.74,-1.71l6.02,1.45l2.0,2.55l2.52,1.39l0.73,1.27ZM87.8,134.64l0.89,0.29l1.86,-0.21l-0.65,3.34l1.69,2.33l-1.31,-1.33l-0.99,-1.62l-1.17,-0.98l-0.33,-1.82Z\", \"name\": \"Canada\"}, \"CG\": {\"path\": \"M466.72,276.48l-0.1,1.03l-1.25,2.97l-0.19,3.62l-0.46,1.78l-0.23,0.63l-1.61,1.19l-1.21,1.39l-1.09,2.43l0.04,2.09l-3.25,3.24l-0.5,-0.24l-0.5,-0.83l-1.36,-0.02l-0.98,0.89l-1.68,-0.99l-1.54,1.24l-1.52,-1.96l1.57,-1.14l0.11,-0.52l-0.77,-1.35l2.1,-0.66l0.39,-0.73l1.05,0.82l2.21,0.11l1.12,-1.37l0.37,-1.81l-0.27,-2.09l-1.13,-1.5l1.0,-2.69l-0.13,-0.45l-0.92,-0.58l-1.6,0.17l-0.51,-0.94l0.1,-0.61l2.75,0.09l3.97,1.24l0.51,-0.33l0.17,-1.28l1.24,-2.21l1.28,-1.14l2.76,0.49Z\", \"name\": \"Congo\"}, \"CF\": {\"path\": \"M461.16,278.2l-0.26,-1.19l-1.09,-0.77l-0.84,-1.17l-0.29,-1.0l-1.04,-1.15l0.08,-3.43l0.58,-0.49l1.16,-2.35l1.85,-0.17l0.61,-0.62l0.97,0.58l3.15,-0.96l2.48,-1.92l0.02,-0.96l2.81,0.02l2.36,-1.17l1.93,-2.85l1.16,-0.93l1.11,-0.3l0.27,0.86l1.34,1.47l-0.39,2.01l0.3,1.01l4.01,2.75l0.17,0.93l2.63,2.31l0.6,1.44l2.08,1.4l-3.84,-0.21l-1.94,0.88l-1.23,-0.49l-2.67,1.2l-1.29,-0.18l-0.51,0.36l-0.6,1.22l-3.35,-0.65l-1.57,-0.91l-2.42,-0.83l-1.45,0.91l-0.97,1.27l-0.26,1.56l-3.22,-0.43l-1.49,1.33l-0.94,1.62Z\", \"name\": \"Central African Rep.\"}, \"CD\": {\"path\": \"M487.01,272.38l2.34,-0.14l1.35,1.84l1.34,0.45l0.86,-0.39l1.21,0.12l1.07,-0.41l0.54,0.89l2.04,1.54l-0.14,2.72l0.7,0.54l-1.38,1.13l-1.53,2.54l-0.17,2.05l-0.59,1.08l-0.02,1.72l-0.72,0.84l-0.66,3.01l0.63,1.32l-0.44,4.26l0.64,1.47l-0.37,1.22l0.86,1.8l1.53,1.41l0.3,1.26l0.44,0.5l-4.08,0.75l-0.92,1.81l0.51,1.34l-0.74,5.43l0.17,0.38l2.45,1.46l0.54,-0.1l0.12,1.62l-1.28,-0.01l-1.85,-2.35l-1.94,-0.45l-0.48,-1.13l-0.55,-0.2l-1.41,0.74l-1.71,-0.3l-1.01,-1.18l-2.49,-0.19l-0.44,-0.77l-1.98,-0.21l-2.88,0.36l0.11,-2.41l-0.85,-1.13l-0.16,-1.36l0.32,-1.73l-0.46,-0.89l-0.04,-1.49l-0.4,-0.39l-2.53,0.02l0.1,-0.41l-0.39,-0.49l-1.28,0.01l-0.43,0.45l-1.62,0.32l-0.83,1.79l-1.09,-0.28l-2.4,0.52l-1.37,-1.91l-1.3,-3.3l-0.38,-0.27l-7.39,-0.03l-2.46,0.42l0.5,-0.45l0.37,-1.47l0.66,-0.38l0.92,0.08l0.73,-0.82l0.87,0.02l0.31,0.68l1.4,0.36l3.59,-3.63l0.01,-2.23l1.02,-2.29l2.69,-2.39l0.43,-0.99l0.49,-1.96l0.17,-3.51l1.25,-2.95l0.36,-3.14l0.86,-1.13l1.1,-0.66l3.57,1.73l3.65,0.73l0.46,-0.21l0.8,-1.46l1.24,0.19l2.61,-1.17l0.81,0.44l1.04,-0.03l0.59,-0.66l0.7,-0.16l1.81,0.25Z\", \"name\": \"Dem. Rep. Congo\"}, \"CZ\": {\"path\": \"M458.46,144.88l1.22,1.01l1.47,0.23l0.13,0.93l1.36,0.68l0.54,-0.2l0.24,-0.55l1.15,0.25l0.53,1.09l1.68,0.18l0.6,0.84l-1.04,0.73l-0.96,1.28l-1.6,0.17l-0.55,0.56l-1.04,-0.46l-1.05,0.15l-2.12,-0.96l-1.05,0.34l-1.2,1.12l-1.56,-0.87l-2.57,-2.1l-0.53,-1.88l4.7,-2.52l0.71,0.26l0.9,-0.28Z\", \"name\": \"Czech Rep.\"}, \"CY\": {\"path\": \"M504.36,193.47l0.43,0.28l-1.28,0.57l-0.92,-0.28l-0.24,-0.46l2.01,-0.13Z\", \"name\": \"Cyprus\"}, \"CR\": {\"path\": \"M211.34,258.05l0.48,0.99l1.6,1.6l-0.54,0.45l0.29,1.42l-0.25,1.19l-1.09,-0.59l-0.05,-1.25l-2.46,-1.42l-0.28,-0.77l-0.66,-0.45l-0.45,-0.0l-0.11,1.04l-1.32,-0.95l0.31,-1.3l-0.36,-0.6l0.31,-0.27l1.42,0.58l1.29,-0.14l0.56,0.56l0.74,0.17l0.55,-0.27Z\", \"name\": \"Costa Rica\"}, \"CU\": {\"path\": \"M221.21,227.25l1.27,1.02l2.19,-0.28l4.43,3.33l2.08,0.43l-0.1,0.38l0.36,0.5l1.75,0.1l1.48,0.84l-3.11,0.51l-4.15,-0.03l0.77,-0.67l-0.04,-0.64l-1.2,-0.74l-1.49,-0.16l-0.7,-0.61l-0.56,-1.4l-0.4,-0.25l-1.34,0.1l-2.2,-0.66l-0.88,-0.58l-3.18,-0.4l-0.27,-0.16l0.58,-0.74l-0.36,-0.29l-2.72,-0.05l-1.7,1.29l-0.91,0.03l-0.61,0.69l-1.01,0.22l1.11,-1.29l1.01,-0.52l3.69,-1.01l3.98,0.21l2.21,0.84Z\", \"name\": \"Cuba\"}, \"SZ\": {\"path\": \"M500.35,351.36l0.5,2.04l-0.38,0.89l-1.05,0.21l-1.23,-1.2l-0.02,-0.64l0.83,-1.57l1.34,0.27Z\", \"name\": \"Swaziland\"}, \"SY\": {\"path\": \"M511.0,199.79l0.05,-1.33l0.54,-1.36l1.28,-0.99l0.13,-0.45l-0.41,-1.11l-1.14,-0.36l-0.19,-1.74l0.52,-1.0l1.29,-1.21l0.2,-1.18l0.59,0.23l2.62,-0.76l1.36,0.52l2.06,-0.01l2.95,-1.08l3.25,-0.26l-0.67,0.94l-1.28,0.66l-0.21,0.4l0.23,2.01l-0.88,3.19l-10.15,5.73l-2.15,-0.85Z\", \"name\": \"Syria\"}, \"KG\": {\"path\": \"M621.35,172.32l-3.87,1.69l-0.96,1.18l-3.04,0.34l-1.13,1.86l-2.36,-0.35l-1.99,0.63l-2.39,1.4l0.06,0.95l-0.4,0.37l-4.52,0.43l-3.02,-0.93l-2.37,0.17l0.11,-0.79l2.32,0.42l1.13,-0.88l1.99,0.2l3.21,-2.14l-0.03,-0.69l-2.97,-1.57l-1.94,0.65l-1.22,-0.74l1.71,-1.58l-0.12,-0.67l-0.36,-0.15l0.32,-0.77l1.36,-0.35l4.02,1.02l0.49,-0.3l0.35,-1.59l1.09,-0.48l3.42,1.22l1.11,-0.31l7.64,0.39l1.16,1.0l1.23,0.39Z\", \"name\": \"Kyrgyzstan\"}, \"KE\": {\"path\": \"M506.26,284.69l1.87,-2.56l0.93,-2.15l-1.38,-4.08l-1.06,-1.6l2.82,-2.75l0.79,0.26l0.12,1.41l0.86,0.83l1.9,0.11l3.28,2.13l3.57,0.44l1.05,-1.12l1.96,-0.9l0.82,0.68l1.16,0.09l-1.78,2.45l0.03,9.12l1.3,1.94l-1.37,0.78l-0.67,1.03l-1.08,0.46l-0.34,1.67l-0.81,1.07l-0.45,1.55l-0.68,0.56l-3.2,-2.23l-0.35,-1.58l-8.86,-4.98l0.14,-1.6l-0.57,-1.04Z\", \"name\": \"Kenya\"}, \"SS\": {\"path\": \"M481.71,263.34l1.07,-0.72l1.2,-3.18l1.36,-0.26l1.61,1.99l0.87,0.34l1.1,-0.41l1.5,0.07l0.57,0.53l2.49,0.0l0.44,-0.63l1.07,-0.4l0.45,-0.84l0.59,-0.33l1.9,1.33l1.6,-0.2l2.83,-3.33l-0.32,-2.21l1.59,-0.52l-0.24,1.6l0.3,1.83l1.35,1.18l0.2,1.87l0.35,0.41l0.02,1.53l-0.23,0.47l-1.42,0.25l-0.85,1.44l0.3,0.6l1.4,0.16l1.11,1.08l0.59,1.13l1.03,0.53l1.28,2.36l-4.41,3.98l-1.74,0.01l-1.89,0.55l-1.47,-0.52l-1.15,0.57l-2.96,-2.62l-1.3,0.49l-1.06,-0.15l-0.79,0.39l-0.82,-0.22l-1.8,-2.7l-1.91,-1.1l-0.66,-1.5l-2.62,-2.32l-0.18,-0.94l-2.37,-1.6Z\", \"name\": \"S. Sudan\"}, \"SR\": {\"path\": \"M283.12,270.19l2.1,0.53l-1.08,1.95l0.2,1.72l0.93,1.49l-0.59,2.03l-0.43,0.71l-1.12,-0.42l-1.32,0.22l-0.93,-0.2l-0.46,0.26l-0.25,0.73l0.33,0.7l-0.89,-0.13l-1.39,-1.97l-0.31,-1.34l-0.97,-0.31l-0.89,-1.47l0.35,-1.61l1.45,-0.82l0.33,-1.87l2.61,0.44l0.57,-0.47l1.75,-0.16Z\", \"name\": \"Suriname\"}, \"KH\": {\"path\": \"M689.52,249.39l0.49,1.45l-0.28,2.74l-4.0,1.86l-0.16,0.6l0.68,0.95l-2.06,0.17l-2.05,0.97l-1.82,-0.32l-2.12,-3.7l-0.55,-2.85l1.4,-1.85l3.02,-0.45l2.23,0.35l2.01,0.98l0.51,-0.14l0.95,-1.48l1.74,0.74Z\", \"name\": \"Cambodia\"}, \"SV\": {\"path\": \"M195.8,250.13l1.4,-1.19l2.24,1.45l0.98,-0.27l0.44,0.2l-0.27,1.05l-1.14,-0.03l-3.64,-1.21Z\", \"name\": \"El Salvador\"}, \"SK\": {\"path\": \"M476.82,151.17l-1.14,1.9l-2.73,-0.92l-0.82,0.2l-0.74,0.8l-3.46,0.73l-0.47,0.69l-1.76,0.33l-1.88,-1.0l-0.18,-0.81l0.38,-0.75l1.87,-0.32l1.74,-1.89l0.83,0.16l0.79,-0.34l1.51,1.04l1.34,-0.63l1.25,0.3l1.65,-0.42l1.81,0.95Z\", \"name\": \"Slovakia\"}, \"KR\": {\"path\": \"M737.51,185.84l0.98,-0.1l0.87,-1.17l2.69,-0.32l0.33,-0.29l1.76,2.79l0.58,1.76l0.02,3.12l-0.8,1.32l-2.21,0.55l-1.93,1.13l-1.8,0.19l-0.2,-1.1l0.43,-2.28l-0.95,-2.56l1.43,-0.37l0.23,-0.62l-1.43,-2.06Z\", \"name\": \"Korea\"}, \"SI\": {\"path\": \"M456.18,162.07l-0.51,-1.32l0.18,-1.05l1.69,0.2l1.42,-0.71l2.09,-0.07l0.62,-0.51l0.21,0.47l-1.61,0.67l-0.44,1.34l-0.66,0.24l-0.26,0.82l-1.22,-0.49l-0.84,0.46l-0.69,-0.04Z\", \"name\": \"Slovenia\"}, \"KP\": {\"path\": \"M736.77,185.16l-0.92,-0.42l-0.88,0.62l-1.21,-0.88l0.96,-1.15l0.59,-2.59l-0.46,-0.74l-2.09,-0.77l1.64,-1.52l2.72,-1.58l1.58,-1.91l1.11,0.78l2.17,0.11l0.41,-0.5l-0.3,-1.22l3.52,-1.18l0.94,-1.4l0.98,1.08l-2.19,2.18l0.01,2.14l-1.06,0.54l-1.41,1.4l-1.7,0.52l-1.25,1.09l-0.14,1.98l0.94,0.45l1.15,1.04l-0.13,0.26l-2.6,0.29l-1.13,1.29l-1.22,0.08Z\", \"name\": \"Dem. Rep. Korea\"}, \"SO\": {\"path\": \"M525.13,288.48l-1.13,-1.57l-0.03,-8.86l2.66,-3.38l1.67,-0.13l2.13,-1.69l3.41,-0.23l7.08,-7.55l2.91,-3.69l0.08,-4.82l2.98,-0.67l1.24,-0.86l0.45,-0.0l-0.2,3.0l-1.21,3.62l-2.73,5.97l-2.13,3.65l-5.03,6.16l-8.56,6.4l-2.78,3.08l-0.8,1.56Z\", \"name\": \"Somalia\"}, \"SN\": {\"path\": \"M390.09,248.21l0.12,1.55l0.49,1.46l0.96,0.82l0.05,1.28l-1.26,-0.19l-0.75,0.33l-1.84,-0.61l-5.84,-0.13l-2.54,0.51l-0.22,-1.03l1.77,0.04l2.01,-0.91l1.03,0.48l1.09,0.04l1.29,-0.62l0.14,-0.58l-0.51,-0.74l-1.81,0.25l-1.13,-0.63l-0.79,0.04l-0.72,0.61l-2.31,0.06l-0.92,-1.77l-0.81,-0.64l0.64,-0.35l2.46,-3.74l1.04,0.19l1.38,-0.56l1.19,-0.02l2.72,1.37l3.03,3.48Z\", \"name\": \"Senegal\"}, \"SL\": {\"path\": \"M394.46,264.11l-1.73,1.98l-0.58,1.33l-2.07,-1.06l-1.22,-1.26l-0.65,-2.39l1.16,-0.96l0.67,-1.17l1.21,-0.52l1.66,0.0l1.03,1.64l0.52,2.41Z\", \"name\": \"Sierra Leone\"}, \"SB\": {\"path\": \"M826.69,311.6l-0.61,0.09l-0.2,-0.33l0.37,0.15l0.44,0.09ZM824.18,307.38l-0.26,-0.3l-0.31,-0.91l0.03,0.0l0.54,1.21ZM823.04,309.33l-1.66,-0.22l-0.2,-0.52l1.16,0.28l0.69,0.46ZM819.28,304.68l1.14,0.65l0.02,0.03l-0.81,-0.44l-0.35,-0.23Z\", \"name\": \"Solomon Is.\"}, \"SA\": {\"path\": \"M537.53,210.34l2.0,0.24l0.9,1.32l1.49,-0.06l0.87,2.08l1.29,0.76l0.51,0.99l1.56,1.03l-0.1,1.9l0.32,0.9l1.58,2.47l0.76,0.53l0.7,-0.04l1.68,4.23l7.53,1.33l0.51,-0.29l0.77,1.25l-1.55,4.87l-7.29,2.52l-7.3,1.03l-2.34,1.17l-1.88,2.74l-0.76,0.28l-0.82,-0.78l-0.91,0.12l-2.88,-0.51l-3.51,0.25l-0.86,-0.56l-0.57,0.15l-0.66,1.27l0.16,1.11l-0.43,0.32l-0.93,-1.4l-0.33,-1.16l-1.23,-0.88l-1.27,-2.06l-0.78,-2.22l-1.73,-1.79l-1.14,-0.48l-1.54,-2.31l-0.21,-3.41l-1.44,-2.93l-1.27,-1.16l-1.33,-0.57l-1.31,-3.37l-0.77,-0.67l-0.97,-1.97l-2.8,-4.03l-1.06,-0.17l0.37,-1.96l0.2,-0.72l2.74,0.3l1.08,-0.84l0.6,-0.94l1.74,-0.35l0.65,-1.03l0.71,-0.4l0.1,-0.62l-2.06,-2.28l4.39,-1.22l0.48,-0.37l2.77,0.69l3.66,1.9l7.03,5.5l4.87,0.3Z\", \"name\": \"Saudi Arabia\"}, \"SE\": {\"path\": \"M480.22,89.3l-4.03,1.17l-2.43,2.86l0.26,2.57l-8.77,6.64l-1.78,5.79l1.78,2.68l2.22,1.96l-2.07,3.77l-2.72,1.13l-0.95,6.04l-1.29,3.01l-2.74,-0.31l-0.4,0.22l-1.31,2.59l-2.34,0.13l-0.75,-3.09l-2.08,-4.03l-1.83,-4.96l1.0,-1.93l2.14,-2.7l0.83,-4.45l-1.6,-2.17l-0.15,-4.94l1.48,-3.39l2.58,-0.15l0.87,-1.59l-0.78,-1.57l3.76,-5.59l4.04,-7.48l2.17,0.01l0.39,-0.29l0.57,-2.07l4.37,0.64l0.46,-0.34l0.33,-2.56l1.1,-0.13l6.94,4.87l0.06,6.32l0.66,1.36Z\", \"name\": \"Sweden\"}, \"SD\": {\"path\": \"M505.98,259.4l-0.34,-0.77l-1.17,-0.9l-0.26,-1.61l0.29,-1.81l-0.34,-0.46l-1.16,-0.17l-0.54,0.59l-1.23,0.11l-0.28,0.65l0.53,0.65l0.17,1.22l-2.44,3.0l-0.96,0.19l-2.39,-1.4l-0.95,0.52l-0.38,0.78l-1.11,0.41l-0.29,0.5l-1.94,0.0l-0.54,-0.52l-1.81,-0.09l-0.95,0.4l-2.45,-2.35l-2.07,0.54l-0.73,1.26l-0.6,2.1l-1.25,0.58l-0.75,-0.62l0.27,-2.65l-1.48,-1.78l-0.22,-1.48l-0.92,-0.96l-0.02,-1.29l-0.57,-1.16l-0.68,-0.16l0.69,-1.29l-0.18,-1.14l0.65,-0.62l0.03,-0.55l-0.36,-0.41l1.55,-2.97l1.91,0.16l0.43,-0.4l-0.1,-10.94l2.49,-0.01l0.4,-0.4l-0.0,-4.82l29.02,0.0l0.64,2.04l-0.49,0.66l0.36,2.69l0.93,3.16l2.12,1.55l-0.89,1.04l-1.72,0.39l-0.98,0.9l-1.43,5.65l0.24,1.15l-0.38,2.06l-0.96,2.38l-1.53,1.31l-1.32,2.91l-1.22,0.86l-0.37,1.34Z\", \"name\": \"Sudan\"}, \"DO\": {\"path\": \"M241.8,239.2l0.05,-0.65l-0.46,-0.73l0.42,-0.44l0.19,-1.0l-0.09,-1.53l1.66,0.01l1.99,0.63l0.33,0.67l1.28,0.19l0.33,0.76l1.0,0.08l0.8,0.62l-0.45,0.51l-1.13,-0.47l-1.88,-0.01l-1.27,0.59l-0.75,-0.55l-1.01,0.54l-0.79,1.4l-0.23,-0.61Z\", \"name\": \"Dominican Rep.\"}, \"DJ\": {\"path\": \"M528.43,256.18l-0.45,0.66l-0.58,-0.25l-1.51,0.13l-0.18,-1.01l1.45,-1.95l0.83,0.17l0.77,-0.44l0.2,1.0l-1.2,0.51l-0.06,0.7l0.73,0.47Z\", \"name\": \"Djibouti\"}, \"DK\": {\"path\": \"M452.28,129.07l-1.19,2.24l-2.13,-1.6l-0.23,-0.95l2.98,-0.95l0.57,1.26ZM447.74,126.31l-0.26,0.57l-0.88,-0.07l-1.8,2.53l0.48,1.69l-1.09,0.36l-1.61,-0.39l-0.89,-1.69l-0.07,-3.43l0.96,-1.73l2.02,-0.2l1.09,-1.07l1.33,-0.67l-0.05,1.06l-0.73,1.41l0.3,1.0l1.2,0.64Z\", \"name\": \"Denmark\"}, \"DE\": {\"path\": \"M453.14,155.55l-0.55,-0.36l-1.2,-0.1l-1.87,0.57l-2.13,-0.13l-0.56,0.63l-0.86,-0.6l-0.96,0.09l-2.57,-0.93l-0.85,0.67l-1.47,-0.02l0.24,-1.75l1.23,-2.14l-0.28,-0.59l-3.52,-0.58l-0.92,-0.66l0.12,-1.2l-0.48,-0.88l0.27,-2.17l-0.37,-3.03l1.41,-0.22l0.63,-1.26l0.66,-3.19l-0.41,-1.18l0.26,-0.39l1.66,-0.15l0.33,0.54l0.62,0.07l1.7,-1.69l-0.54,-3.02l1.37,0.33l1.31,-0.37l0.31,1.18l2.25,0.71l-0.02,0.92l0.5,0.4l2.55,-0.65l1.34,-0.87l2.57,1.24l1.06,0.98l0.48,1.44l-0.57,0.74l-0.0,0.48l0.87,1.15l0.57,1.64l-0.14,1.29l0.82,1.7l-1.5,-0.07l-0.56,0.57l-4.47,2.15l-0.22,0.54l0.68,2.26l2.58,2.16l-0.66,1.11l-0.79,0.36l-0.23,0.43l0.32,1.87Z\", \"name\": \"Germany\"}, \"YE\": {\"path\": \"M528.27,246.72l0.26,-0.42l-0.22,-1.01l0.19,-1.5l0.92,-0.69l-0.07,-1.35l0.39,-0.75l1.01,0.47l3.34,-0.27l3.76,0.41l0.95,0.81l1.36,-0.58l1.74,-2.62l2.18,-1.09l6.86,-0.94l2.48,5.41l-1.64,0.76l-0.56,1.9l-6.23,2.16l-2.29,1.8l-1.93,0.05l-1.41,1.02l-4.24,0.74l-1.72,1.49l-3.28,0.19l-0.52,-1.18l0.02,-1.51l-1.34,-3.29Z\", \"name\": \"Yemen\"}, \"AT\": {\"path\": \"M462.89,152.8l0.04,2.25l-1.07,0.0l-0.33,0.63l0.36,0.51l-1.04,2.13l-2.02,0.07l-1.33,0.7l-5.29,-0.99l-0.47,-0.93l-0.44,-0.21l-2.47,0.55l-0.42,0.51l-3.18,-0.81l0.43,-0.91l1.12,0.78l0.6,-0.17l0.25,-0.58l1.93,0.12l1.86,-0.56l1.0,0.08l0.68,0.57l0.62,-0.15l0.26,-0.77l-0.3,-1.78l0.8,-0.44l0.68,-1.15l1.52,0.85l0.47,-0.06l1.34,-1.25l0.64,-0.17l1.81,0.92l1.28,-0.11l0.7,0.37Z\", \"name\": \"Austria\"}, \"DZ\": {\"path\": \"M441.46,188.44l-0.32,1.07l0.39,2.64l-0.54,2.16l-1.58,1.82l0.37,2.39l1.91,1.55l0.18,0.8l1.42,1.03l1.84,7.23l0.12,1.16l-0.57,5.0l0.2,1.51l-0.87,0.99l-0.02,0.51l1.41,1.86l0.14,1.2l0.89,1.48l0.5,0.16l0.98,-0.41l1.73,1.08l0.82,1.23l-8.22,4.81l-7.23,5.11l-3.43,1.13l-2.3,0.21l-0.28,-1.59l-2.56,-1.09l-0.67,-1.25l-26.12,-17.86l0.01,-3.47l3.77,-1.88l2.44,-0.41l2.12,-0.75l1.08,-1.42l2.81,-1.05l0.35,-2.08l1.33,-0.29l1.04,-0.94l3.47,-0.69l0.46,-1.08l-0.1,-0.45l-0.58,-0.52l-0.82,-2.81l-0.19,-1.83l-0.78,-1.49l2.03,-1.31l2.63,-0.48l1.7,-1.22l2.31,-0.84l8.24,-0.73l1.49,0.38l2.28,-1.1l2.46,-0.02l0.92,0.6l1.35,-0.05Z\", \"name\": \"Algeria\"}, \"US\": {\"path\": \"M892.72,99.2l1.31,0.53l1.41,-0.37l1.89,0.98l1.89,0.42l-1.32,0.58l-2.9,-1.53l-2.08,0.22l-0.26,-0.15l0.07,-0.67ZM183.22,150.47l0.37,1.47l1.12,0.85l4.23,0.7l2.39,0.98l2.17,-0.38l1.85,0.5l-1.55,0.65l-3.49,2.61l-0.16,0.77l0.5,0.39l2.33,-0.61l1.77,1.02l5.15,-2.4l-0.31,0.65l0.25,0.56l1.36,0.38l1.71,1.16l4.7,-0.88l0.67,0.85l1.31,0.21l0.58,0.58l-1.34,0.17l-2.18,-0.32l-3.6,0.89l-2.71,3.25l0.35,0.9l0.59,-0.0l0.55,-0.6l-1.36,4.65l0.29,3.09l0.67,1.58l0.61,0.45l1.77,-0.44l1.6,-1.96l0.14,-2.21l-0.82,-1.96l0.11,-1.13l1.19,-2.37l0.44,-0.33l0.48,0.75l0.4,-0.29l0.4,-1.37l0.6,-0.47l0.24,-0.8l1.69,0.49l1.65,1.08l-0.03,2.37l-1.27,1.13l-0.0,1.13l0.87,0.36l1.66,-1.29l0.5,0.17l0.5,2.6l-2.49,3.75l0.17,0.61l1.54,0.62l1.48,0.17l1.92,-0.44l4.72,-2.15l2.16,-1.8l-0.05,-1.24l0.75,-0.22l3.92,0.36l2.12,-1.05l0.21,-0.4l-0.28,-1.48l3.27,-2.4l8.32,-0.02l0.56,-0.82l1.9,-0.77l0.93,-1.51l0.74,-2.37l1.58,-1.98l0.92,0.62l1.47,-0.47l0.8,0.66l-0.0,4.09l1.96,2.6l-2.34,1.31l-5.37,2.09l-1.83,2.72l0.02,1.79l0.83,1.59l0.54,0.23l-6.19,0.94l-2.2,0.89l-0.23,0.48l0.45,0.29l2.99,-0.46l-2.19,0.56l-1.13,0.0l-0.15,-0.32l-0.48,0.08l-0.76,0.82l0.22,0.67l0.32,0.06l-0.41,1.62l-1.27,1.58l-1.48,-1.07l-0.49,-0.04l-0.16,0.46l0.52,1.58l0.61,0.59l0.03,0.79l-0.95,1.38l-1.21,-1.22l-0.27,-2.27l-0.35,-0.35l-0.42,0.25l-0.48,1.27l0.33,1.41l-0.97,-0.27l-0.48,0.24l0.18,0.5l1.52,0.83l0.1,2.52l0.79,0.51l0.52,3.42l-1.42,1.88l-2.47,0.8l-1.71,1.66l-1.31,0.25l-1.27,1.03l-0.43,0.99l-2.69,1.78l-2.64,3.03l-0.45,2.12l0.45,2.08l0.85,2.38l1.09,1.9l0.04,1.2l1.16,3.06l-0.18,2.69l-0.55,1.43l-0.47,0.21l-0.89,-0.23l-0.49,-1.18l-0.87,-0.56l-2.75,-5.16l0.48,-1.68l-0.72,-1.78l-2.01,-2.38l-1.12,-0.53l-2.72,1.18l-1.47,-1.35l-1.57,-0.68l-2.99,0.31l-2.17,-0.3l-2.0,0.19l-1.15,0.46l-0.19,0.58l0.39,0.63l0.14,1.34l-0.84,-0.2l-0.84,0.46l-1.58,-0.07l-2.08,-1.44l-2.09,0.33l-1.91,-0.62l-3.73,0.84l-2.39,2.07l-2.54,1.22l-1.45,1.41l-0.61,1.38l0.34,3.71l-0.29,0.02l-3.5,-1.33l-1.25,-3.11l-1.44,-1.5l-2.24,-3.56l-1.76,-1.09l-2.27,-0.01l-1.71,2.07l-1.76,-0.69l-1.16,-0.74l-1.52,-2.98l-3.93,-3.16l-4.34,-0.0l-0.4,0.4l-0.0,0.74l-6.5,0.02l-9.02,-3.14l-0.34,-0.71l-5.7,0.49l-0.43,-1.29l-1.62,-1.61l-1.14,-0.38l-0.55,-0.88l-1.28,-0.13l-1.01,-0.77l-2.22,-0.27l-0.43,-0.3l-0.36,-1.58l-2.4,-2.83l-2.01,-3.85l-0.06,-0.9l-2.92,-3.26l-0.33,-2.29l-1.3,-1.66l0.52,-2.37l-0.09,-2.57l-0.78,-2.3l0.95,-2.82l0.61,-5.68l-0.47,-4.27l-1.46,-4.08l3.19,0.79l1.26,2.83l0.69,0.08l0.69,-1.14l-1.1,-4.79l68.76,-0.0l0.4,-0.4l0.14,-0.86ZM32.44,67.52l1.73,1.97l0.55,0.05l0.99,-0.79l3.65,0.24l-0.09,0.62l0.32,0.45l3.83,0.77l2.61,-0.43l5.19,1.4l4.84,0.43l1.89,0.57l3.42,-0.7l6.14,1.87l-0.03,38.06l0.38,0.4l2.39,0.11l2.31,0.98l3.9,3.99l0.55,0.04l2.4,-2.03l2.16,-1.04l1.2,1.71l3.95,3.14l4.09,6.63l4.2,2.29l0.06,1.83l-1.02,1.23l-1.16,-1.08l-2.04,-1.03l-0.67,-2.89l-3.28,-3.03l-1.65,-3.57l-6.35,-0.32l-2.82,-1.01l-5.26,-3.85l-6.77,-2.04l-3.53,0.3l-4.81,-1.69l-3.25,-1.63l-2.78,0.8l-0.28,0.46l0.44,2.21l-3.91,0.96l-2.26,1.27l-2.3,0.65l-0.27,-1.65l1.05,-3.42l2.49,-1.09l0.16,-0.6l-0.69,-0.96l-0.55,-0.1l-3.19,2.12l-1.78,2.56l-3.55,2.61l-0.04,0.61l1.56,1.52l-2.07,2.29l-5.11,2.57l-0.77,1.66l-3.76,1.77l-0.92,1.73l-2.69,1.38l-1.81,-0.22l-6.95,3.32l-3.97,0.91l4.85,-2.5l2.59,-1.86l3.26,-0.52l1.19,-1.4l3.42,-2.1l2.59,-2.27l0.42,-2.68l1.23,-2.1l-0.04,-0.46l-0.45,-0.11l-2.68,1.03l-0.63,-0.49l-0.53,0.03l-1.05,1.04l-1.36,-1.54l-0.66,0.08l-0.32,0.62l-0.58,-1.14l-0.56,-0.16l-2.41,1.42l-1.07,-0.0l-0.17,-1.75l0.3,-1.71l-1.61,-1.33l-3.41,0.59l-1.96,-1.63l-1.57,-0.84l-0.15,-2.21l-1.7,-1.43l0.82,-1.88l1.99,-2.12l0.88,-1.92l1.71,-0.24l2.04,0.51l1.87,-1.77l1.91,0.25l1.91,-1.23l0.17,-0.43l-0.47,-1.82l-1.07,-0.7l1.39,-1.17l0.12,-0.45l-0.39,-0.26l-1.65,0.07l-2.66,0.88l-0.75,0.78l-1.92,-0.8l-3.46,0.44l-3.44,-0.91l-1.06,-1.61l-2.65,-1.99l2.91,-1.43l5.5,-2.0l1.52,0.0l-0.26,1.62l0.41,0.46l5.29,-0.16l0.3,-0.65l-2.03,-2.59l-3.14,-1.68l-1.79,-2.12l-2.4,-1.83l-3.09,-1.24l1.04,-1.69l4.23,-0.14l3.36,-2.07l0.73,-2.27l2.39,-1.99l2.42,-0.52l4.65,-1.97l2.46,0.23l3.71,-2.35l3.5,0.89ZM37.6,123.41l-2.25,1.23l-0.95,-0.69l-0.29,-1.24l3.21,-1.63l1.42,0.21l0.67,0.7l-1.8,1.42ZM31.06,234.03l0.98,0.47l0.74,0.87l-1.77,1.07l-0.44,-1.53l0.49,-0.89ZM29.34,232.07l0.18,0.05l0.08,0.05l-0.16,0.03l-0.11,-0.14ZM25.16,230.17l0.05,-0.03l0.18,0.22l-0.13,-0.01l-0.1,-0.18ZM5.89,113.26l-1.08,0.41l-2.21,-1.12l1.53,-0.4l1.62,0.28l0.14,0.83Z\", \"name\": \"United States\"}, \"LV\": {\"path\": \"M489.16,122.85l0.96,0.66l0.22,1.65l0.68,1.76l-3.65,1.7l-2.23,-1.58l-1.29,-0.26l-0.68,-0.77l-2.42,0.34l-4.16,-0.23l-2.47,0.9l0.06,-1.98l1.13,-2.06l1.95,-1.02l2.12,2.58l2.01,-0.07l0.38,-0.33l0.44,-2.52l1.76,-0.53l3.06,1.7l2.15,0.07Z\", \"name\": \"Latvia\"}, \"UY\": {\"path\": \"M286.85,372.74l-0.92,1.5l-2.59,1.44l-1.69,-0.52l-1.42,0.26l-2.39,-1.19l-1.52,0.08l-1.27,-1.3l0.16,-1.5l0.56,-0.79l-0.02,-2.73l1.21,-4.74l1.19,-0.21l2.37,2.0l1.08,0.03l4.36,3.17l1.22,1.6l-0.96,1.5l0.61,1.4Z\", \"name\": \"Uruguay\"}, \"LB\": {\"path\": \"M510.37,198.01l-0.88,0.51l1.82,-3.54l0.62,0.08l0.22,0.61l-1.13,0.88l-0.65,1.47Z\", \"name\": \"Lebanon\"}, \"LA\": {\"path\": \"M689.54,248.53l-1.76,-0.74l-0.49,0.15l-0.94,1.46l-1.32,-0.64l0.62,-0.98l0.11,-2.17l-2.04,-2.42l-0.25,-2.65l-1.9,-2.1l-2.15,-0.31l-0.78,0.91l-1.12,0.06l-1.05,-0.4l-2.06,1.2l-0.04,-1.59l0.61,-2.68l-0.36,-0.49l-1.35,-0.1l-0.11,-1.23l-0.96,-0.88l1.96,-1.89l0.39,0.36l1.33,0.07l0.42,-0.45l-0.34,-2.66l0.7,-0.21l1.28,1.81l1.11,2.35l0.36,0.23l2.82,0.02l0.71,1.67l-1.39,0.65l-0.72,0.93l0.13,0.6l2.91,1.51l3.6,5.25l1.88,1.78l0.56,1.62l-0.35,1.96Z\", \"name\": \"Lao PDR\"}, \"TW\": {\"path\": \"M724.01,226.68l-0.74,1.48l-0.9,-1.52l-0.25,-1.74l1.38,-2.44l1.73,-1.74l0.64,0.44l-1.85,5.52Z\", \"name\": \"Taiwan\"}, \"TT\": {\"path\": \"M266.64,259.32l0.28,-1.16l1.13,-0.22l-0.06,1.2l-1.35,0.18Z\", \"name\": \"Trinidad and Tobago\"}, \"TR\": {\"path\": \"M513.21,175.47l3.64,1.17l3.05,-0.44l2.1,0.26l3.11,-1.56l2.46,-0.13l2.19,1.33l0.33,0.82l-0.22,1.33l0.25,0.44l2.28,1.13l-1.17,0.57l-0.21,0.45l0.75,3.2l-0.41,1.16l1.13,1.92l-0.55,0.22l-0.9,-0.67l-2.91,-0.37l-1.24,0.46l-4.23,0.41l-2.81,1.05l-1.91,0.01l-1.52,-0.53l-2.58,0.75l-0.66,-0.45l-0.62,0.3l-0.12,1.45l-0.89,0.84l-0.47,-0.67l0.79,-1.3l-0.41,-0.2l-1.43,0.23l-2.0,-0.63l-2.02,1.65l-3.51,0.3l-2.13,-1.53l-2.7,-0.1l-0.86,1.24l-1.38,0.27l-2.29,-1.44l-2.71,-0.01l-1.37,-2.65l-1.68,-1.52l1.07,-1.99l-0.09,-0.49l-1.27,-1.12l2.37,-2.41l3.7,-0.11l1.28,-2.24l4.49,0.37l3.21,-1.97l2.81,-0.82l3.99,-0.06l4.29,2.07ZM488.79,176.72l-1.72,1.31l-0.5,-0.88l1.37,-2.57l-0.7,-0.85l1.7,-0.63l1.8,0.34l0.46,1.17l1.76,0.78l-2.87,0.32l-1.3,1.01Z\", \"name\": \"Turkey\"}, \"LK\": {\"path\": \"M624.16,268.99l-1.82,0.48l-0.99,-1.67l-0.42,-3.46l0.95,-3.43l1.21,0.98l2.26,4.19l-0.34,2.33l-0.85,0.58Z\", \"name\": \"Sri Lanka\"}, \"TN\": {\"path\": \"M448.1,188.24l-1.0,1.27l-0.02,1.32l0.84,0.88l-0.28,2.09l-1.53,1.32l-0.12,0.42l0.48,1.54l1.42,0.32l0.53,1.11l0.9,0.52l-0.11,1.67l-3.54,2.64l-0.1,2.38l-0.58,0.3l-0.96,-4.45l-1.54,-1.25l-0.16,-0.78l-1.92,-1.56l-0.18,-1.76l1.51,-1.62l0.59,-2.34l-0.38,-2.78l0.42,-1.21l2.45,-1.05l1.29,0.26l-0.06,1.11l0.58,0.38l1.47,-0.73Z\", \"name\": \"Tunisia\"}, \"TL\": {\"path\": \"M734.55,307.93l-0.1,-0.97l4.5,-0.86l-2.82,1.28l-1.59,0.55Z\", \"name\": \"Timor-Leste\"}, \"TM\": {\"path\": \"M553.03,173.76l-0.04,0.34l-0.09,-0.22l0.13,-0.12ZM555.87,172.66l0.45,-0.1l1.48,0.74l2.06,2.43l4.07,-0.18l0.38,-0.51l-0.32,-1.19l1.92,-0.94l1.91,-1.59l2.94,1.39l0.43,2.47l1.19,0.67l2.58,-0.13l0.62,0.4l1.32,3.12l4.54,3.44l2.67,1.45l3.06,1.14l-0.04,1.05l-1.33,-0.75l-0.59,0.19l-0.32,0.84l-2.2,0.81l-0.46,2.13l-1.21,0.74l-1.91,0.42l-0.73,1.33l-1.56,0.31l-2.22,-0.94l-0.2,-2.17l-0.38,-0.36l-1.73,-0.09l-2.76,-2.46l-2.14,-0.4l-2.84,-1.48l-1.78,-0.27l-1.24,0.53l-1.57,-0.08l-2.0,1.69l-1.7,0.43l-0.36,-1.58l0.36,-2.98l-0.22,-0.4l-1.65,-0.84l0.54,-1.69l-0.34,-0.52l-1.22,-0.13l0.36,-1.64l2.22,0.59l2.2,-0.95l0.12,-0.65l-1.77,-1.74l-0.66,-1.57Z\", \"name\": \"Turkmenistan\"}, \"TJ\": {\"path\": \"M597.75,178.82l-2.54,-0.44l-0.47,0.34l-0.24,1.7l0.43,0.45l2.64,-0.22l3.18,0.95l4.39,-0.41l0.56,2.37l0.52,0.29l0.67,-0.24l1.11,0.49l0.21,2.13l-3.76,-0.21l-1.8,1.32l-1.76,0.74l-0.61,-0.58l0.21,-2.23l-0.64,-0.49l-0.07,-0.93l-1.36,-0.66l-0.45,0.07l-1.08,1.01l-0.55,1.48l-1.31,-0.05l-0.95,1.16l-0.9,-0.35l-1.86,0.74l1.26,-2.83l-0.54,-2.17l-1.67,-0.82l0.33,-0.66l2.18,-0.04l1.19,-1.63l0.76,-1.79l2.43,-0.5l-0.26,1.0l0.73,1.05Z\", \"name\": \"Tajikistan\"}, \"LS\": {\"path\": \"M491.06,363.48l-0.49,0.15l-1.49,-1.67l1.1,-1.43l2.19,-1.44l1.51,1.27l-0.98,1.82l-1.23,0.38l-0.62,0.93Z\", \"name\": \"Lesotho\"}, \"TH\": {\"path\": \"M670.27,255.86l-1.41,3.87l0.15,2.0l0.38,0.36l1.38,0.07l0.9,2.04l0.55,2.34l1.4,1.44l1.61,0.38l0.96,0.97l-0.5,0.64l-1.1,0.2l-0.34,-1.18l-2.04,-1.1l-0.63,0.23l-0.63,-0.62l-0.48,-1.3l-2.56,-2.63l-0.73,0.41l0.95,-3.89l2.16,-4.22ZM670.67,254.77l-0.92,-2.18l-0.26,-2.61l-2.14,-3.06l0.71,-0.49l0.89,-2.59l-3.61,-5.45l0.87,-0.51l1.05,-2.58l1.74,-0.18l2.6,-1.59l0.76,0.56l0.13,1.39l0.37,0.36l1.23,0.09l-0.51,2.28l0.05,2.42l0.6,0.34l2.43,-1.42l0.77,0.39l1.47,-0.07l0.71,-0.88l1.48,0.14l1.71,1.88l0.25,2.65l1.92,2.11l-0.1,1.89l-0.61,0.86l-2.22,-0.33l-3.5,0.64l-1.6,2.12l0.36,2.58l-1.51,-0.79l-1.84,-0.01l0.28,-1.52l-0.4,-0.47l-2.21,0.01l-0.4,0.37l-0.19,2.74l-0.34,0.93Z\", \"name\": \"Thailand\"}, \"TF\": {\"path\": \"M596.68,420.38l-3.2,0.18l-0.05,-1.26l0.39,-1.41l1.3,0.78l2.08,0.35l-0.52,1.36Z\", \"name\": \"Fr. S. Antarctic Lands\"}, \"TG\": {\"path\": \"M422.7,257.63l-0.09,1.23l1.53,1.52l0.08,1.09l0.5,0.65l-0.11,5.62l0.49,1.47l-1.31,0.35l-1.02,-2.13l-0.18,-1.12l0.53,-2.19l-0.63,-1.16l-0.22,-3.68l-1.01,-1.4l0.07,-0.28l1.37,0.03Z\", \"name\": \"Togo\"}, \"TD\": {\"path\": \"M480.25,235.49l0.12,9.57l-2.1,0.05l-1.14,1.89l-0.69,1.63l0.34,0.73l-0.66,0.91l0.24,0.89l-0.86,1.95l0.45,0.5l0.6,-0.1l0.34,0.64l0.03,1.38l0.9,1.04l-1.45,0.43l-1.27,1.03l-1.83,2.76l-2.16,1.07l-2.31,-0.15l-0.86,0.25l-0.26,0.49l0.17,0.61l-2.11,1.68l-2.85,0.87l-1.09,-0.57l-0.73,0.66l-1.12,0.1l-1.1,-3.12l-1.25,-0.64l-1.22,-1.22l0.29,-0.64l3.01,0.04l0.35,-0.6l-1.3,-2.2l-0.08,-3.31l-0.97,-1.66l0.22,-1.04l-0.38,-0.48l-1.22,-0.04l0.0,-1.25l-0.98,-1.07l0.96,-3.01l3.25,-2.65l0.13,-3.33l0.95,-5.18l0.52,-1.07l-0.1,-0.48l-0.91,-0.78l-0.2,-0.96l-0.8,-0.58l-0.55,-3.65l2.1,-1.2l19.57,9.83Z\", \"name\": \"Chad\"}, \"LY\": {\"path\": \"M483.48,203.15l-0.75,1.1l0.29,1.39l-0.6,1.83l0.73,2.14l0.0,24.12l-2.48,0.01l-0.41,0.85l-19.41,-9.76l-4.41,2.28l-1.37,-1.33l-3.82,-1.1l-1.14,-1.65l-1.98,-1.23l-1.22,0.32l-0.66,-1.11l-0.17,-1.26l-1.28,-1.69l0.87,-1.19l-0.07,-4.34l0.43,-2.27l-0.86,-3.45l1.13,-0.76l0.22,-1.16l-0.2,-1.03l3.48,-2.61l0.29,-1.94l2.45,0.8l1.18,-0.21l1.98,0.44l3.15,1.18l1.37,2.54l5.72,1.67l2.64,1.35l1.61,-0.72l1.29,-1.34l-0.44,-2.34l0.66,-1.13l1.67,-1.21l1.57,-0.35l3.14,0.53l1.08,1.28l3.99,0.78l0.36,0.54Z\", \"name\": \"Libya\"}, \"AE\": {\"path\": \"M550.76,223.97l1.88,-0.4l3.84,0.02l4.78,-4.75l0.19,0.36l0.26,1.58l-0.81,0.01l-0.39,0.35l-0.08,2.04l-0.81,0.63l-0.01,0.96l-0.66,0.99l-0.39,1.41l-7.08,-1.25l-0.7,-1.96Z\", \"name\": \"United Arab Emirates\"}, \"VE\": {\"path\": \"M240.68,256.69l0.53,0.75l-0.02,1.06l-1.07,1.78l0.95,2.0l0.42,0.22l1.4,-0.44l0.56,-1.83l-0.77,-1.17l-0.1,-1.47l2.82,-0.93l0.26,-0.49l-0.28,-0.96l0.3,-0.28l0.66,1.31l1.96,0.26l1.4,1.22l0.08,0.68l0.39,0.35l4.81,-0.22l1.49,1.11l1.92,0.31l1.67,-0.84l0.22,-0.6l3.44,-0.14l-0.17,0.55l0.86,1.19l2.19,0.35l1.67,1.1l0.37,1.86l0.41,0.32l1.55,0.17l-1.66,1.35l-0.22,0.92l0.65,0.97l-1.67,0.54l-0.3,0.4l0.04,0.99l-0.56,0.57l-0.01,0.55l1.85,2.27l-0.66,0.69l-4.47,1.29l-0.72,0.54l-3.69,-0.9l-0.71,0.27l-0.02,0.7l0.91,0.53l-0.08,1.54l0.35,1.58l0.35,0.31l1.66,0.17l-1.3,0.52l-0.48,1.13l-2.68,0.91l-0.6,0.77l-1.57,0.13l-1.17,-1.13l-0.8,-2.52l-1.25,-1.26l1.02,-1.23l-1.29,-2.95l0.18,-1.62l1.0,-2.21l-0.2,-0.49l-1.14,-0.46l-4.02,0.36l-1.82,-2.1l-1.57,-0.33l-2.99,0.22l-1.06,-0.97l0.25,-1.23l-0.2,-1.01l-0.59,-0.69l-0.29,-1.06l-1.08,-0.39l0.78,-2.79l1.9,-2.11Z\", \"name\": \"Venezuela\"}, \"AF\": {\"path\": \"M600.7,188.88l-1.57,1.3l-0.1,0.48l0.8,2.31l-1.09,1.04l-0.03,1.27l-0.48,0.71l-2.16,-0.08l-0.37,0.59l0.78,1.48l-1.38,0.69l-1.06,1.69l0.06,1.7l-0.65,0.52l-0.91,-0.21l-1.91,0.36l-0.48,0.77l-1.88,0.13l-1.4,1.56l-0.18,2.32l-2.91,1.02l-1.65,-0.23l-0.71,0.55l-1.41,-0.3l-2.41,0.39l-3.52,-1.17l1.96,-2.35l-0.21,-1.78l-0.3,-0.34l-1.63,-0.4l-0.19,-1.58l-0.75,-2.03l0.95,-1.36l-0.19,-0.6l-0.73,-0.28l1.47,-4.8l2.14,0.9l2.12,-0.36l0.74,-1.34l1.77,-0.39l1.54,-0.92l0.63,-2.31l1.87,-0.5l0.49,-0.81l0.94,0.56l2.13,0.11l2.55,0.92l1.95,-0.83l0.65,0.43l0.56,-0.13l0.69,-1.12l1.57,-0.08l0.72,-1.66l0.79,-0.74l0.8,0.39l-0.17,0.56l0.71,0.58l-0.08,2.39l1.11,0.95ZM601.37,188.71l1.73,-0.71l1.43,-1.18l4.03,0.35l-2.23,0.74l-4.95,0.8Z\", \"name\": \"Afghanistan\"}, \"IQ\": {\"path\": \"M530.82,187.47l0.79,0.66l1.26,-0.28l1.46,3.08l1.63,0.94l0.14,1.23l-1.22,1.05l-0.53,2.52l1.73,2.67l3.12,1.62l1.15,1.88l-0.38,1.85l0.39,0.48l0.41,-0.0l0.02,1.07l0.76,0.94l-2.47,-0.1l-1.71,2.44l-4.31,-0.2l-7.02,-5.48l-3.73,-1.94l-2.88,-0.73l-0.85,-2.87l5.45,-3.02l0.95,-3.43l-0.19,-1.96l1.27,-0.7l1.22,-1.7l0.87,-0.36l2.69,0.34Z\", \"name\": \"Iraq\"}, \"IS\": {\"path\": \"M384.14,88.06l-0.37,2.61l2.54,2.51l-2.9,2.75l-9.19,3.4l-9.25,-1.66l1.7,-1.22l-0.1,-0.7l-4.05,-1.47l2.96,-0.53l0.33,-0.43l-0.11,-1.2l-0.33,-0.36l-4.67,-0.85l1.28,-2.04l3.45,-0.56l3.77,2.72l0.44,0.02l3.64,-2.16l3.3,1.08l3.98,-2.16l3.58,0.26Z\", \"name\": \"Iceland\"}, \"IR\": {\"path\": \"M533.43,187.16l-1.27,-2.15l0.42,-0.98l-0.71,-3.04l1.03,-0.5l0.33,0.83l1.26,1.35l2.05,0.51l1.11,-0.16l2.89,-2.11l0.62,-0.14l0.39,0.46l-0.72,1.2l0.06,0.49l1.56,1.53l0.65,0.04l0.67,1.81l2.56,0.83l1.87,1.48l3.69,0.49l3.91,-0.76l0.47,-0.73l2.17,-0.6l1.66,-1.54l1.51,0.08l1.18,-0.53l1.59,0.24l2.83,1.48l1.88,0.3l2.77,2.47l1.77,0.18l0.18,1.99l-1.68,5.49l0.24,0.5l0.61,0.23l-0.82,1.48l0.8,2.18l0.19,1.71l0.3,0.34l1.63,0.4l0.15,1.32l-2.15,2.35l-0.01,0.53l2.21,3.03l2.34,1.24l0.06,2.14l1.24,0.72l0.11,0.69l-3.31,1.27l-1.08,3.03l-9.68,-1.68l-0.99,-3.05l-1.43,-0.73l-2.17,0.46l-2.47,1.26l-2.83,-0.82l-2.46,-2.02l-2.41,-0.8l-3.42,-6.06l-0.48,-0.2l-1.18,0.39l-1.44,-0.82l-0.5,0.08l-0.65,0.74l-0.97,-1.01l-0.02,-1.31l-0.71,-0.39l0.26,-1.81l-1.29,-2.11l-3.13,-1.63l-1.58,-2.43l0.5,-1.9l1.31,-1.26l-0.19,-1.66l-1.74,-1.1l-1.57,-3.3Z\", \"name\": \"Iran\"}, \"AM\": {\"path\": \"M536.99,182.33l-0.28,0.03l-1.23,-2.13l-0.93,0.01l-0.62,-0.66l-0.69,-0.07l-0.96,-0.81l-1.56,-0.62l0.19,-1.12l-0.26,-0.79l2.72,-0.36l1.09,1.01l-0.17,0.92l1.02,0.78l-0.47,0.62l0.08,0.56l2.04,1.23l0.04,1.4Z\", \"name\": \"Armenia\"}, \"IT\": {\"path\": \"M451.59,158.63l3.48,0.94l-0.21,1.17l0.3,0.83l-1.49,-0.24l-2.04,1.1l-0.21,0.39l0.13,1.45l-0.25,1.12l0.82,1.57l2.39,1.63l1.31,2.54l2.79,2.43l2.05,0.08l0.21,0.23l-0.39,0.33l0.09,0.67l4.05,1.97l2.17,1.76l-0.16,0.36l-1.17,-1.08l-2.18,-0.49l-0.44,0.2l-1.05,1.91l0.14,0.54l1.57,0.95l-0.19,0.98l-1.06,0.33l-1.25,2.34l-0.37,0.08l0.0,-0.33l1.0,-2.45l-1.73,-3.17l-1.12,-0.51l-0.88,-1.33l-1.51,-0.51l-1.27,-1.25l-1.75,-0.18l-4.12,-3.21l-1.62,-1.65l-1.03,-3.19l-3.53,-1.36l-1.3,0.51l-1.69,1.41l0.16,-0.72l-0.28,-0.47l-1.14,-0.33l-0.53,-1.96l0.72,-0.78l0.04,-0.48l-0.65,-1.17l0.8,0.39l1.4,-0.23l1.11,-0.84l0.52,0.35l1.19,-0.1l0.75,-1.2l1.53,0.33l1.36,-0.56l0.35,-1.14l1.08,0.32l0.68,-0.64l1.98,-0.44l0.42,0.82ZM459.19,184.75l-0.65,1.65l0.32,1.05l-0.31,0.89l-1.5,-0.85l-4.5,-1.67l0.19,-0.82l2.67,0.23l3.78,-0.48ZM443.93,176.05l1.18,1.66l-0.3,3.32l-1.06,-0.01l-0.77,0.73l-0.53,-0.44l-0.1,-3.37l-0.39,-1.22l1.04,0.01l0.92,-0.68Z\", \"name\": \"Italy\"}, \"VN\": {\"path\": \"M690.56,230.25l-2.7,1.82l-2.09,2.46l-0.63,1.95l4.31,6.45l2.32,1.65l1.43,1.94l1.11,4.59l-0.32,4.24l-1.93,1.54l-2.84,1.61l-2.11,2.15l-2.73,2.06l-0.59,-1.05l0.63,-1.53l-0.13,-0.47l-1.34,-1.04l1.51,-0.71l2.55,-0.18l0.3,-0.63l-0.82,-1.14l4.0,-2.07l0.31,-3.05l-0.57,-1.77l0.42,-2.66l-0.73,-1.97l-1.86,-1.76l-3.63,-5.29l-2.72,-1.46l0.36,-0.47l1.5,-0.64l0.21,-0.52l-0.97,-2.27l-0.37,-0.24l-2.83,-0.02l-2.24,-3.9l0.83,-0.4l4.39,-0.29l2.06,-1.31l1.15,0.89l1.88,0.4l-0.17,1.51l1.35,1.16l1.67,0.45Z\", \"name\": \"Vietnam\"}, \"AR\": {\"path\": \"M249.29,428.93l-2.33,-0.52l-5.83,-0.43l-0.89,-1.66l0.05,-2.37l-0.45,-0.4l-1.43,0.18l-0.67,-0.91l-0.2,-3.13l1.88,-1.47l0.79,-2.04l-0.25,-1.7l1.3,-2.68l0.91,-4.15l-0.22,-1.69l0.85,-0.45l0.2,-0.44l-0.27,-1.16l-0.98,-0.68l0.59,-0.92l-0.05,-0.5l-1.04,-1.07l-0.52,-3.1l0.97,-0.86l-0.42,-3.58l1.2,-5.43l1.38,-0.98l0.16,-0.43l-0.75,-2.79l-0.01,-2.43l1.78,-1.75l0.06,-2.57l1.43,-2.85l0.01,-2.58l-0.69,-0.74l-1.09,-4.52l1.47,-2.7l-0.18,-2.79l0.85,-2.35l1.59,-2.46l1.73,-1.64l0.05,-0.52l-0.6,-0.84l0.44,-0.85l-0.07,-4.19l2.7,-1.44l0.86,-2.75l-0.21,-0.71l1.76,-2.01l2.9,0.57l1.38,1.78l0.68,-0.08l0.87,-1.87l2.39,0.09l4.95,4.77l2.17,0.49l3.0,1.92l2.47,1.0l0.25,0.82l-2.37,3.93l0.23,0.59l5.39,1.16l2.12,-0.44l2.45,-2.16l0.5,-2.38l0.76,-0.31l0.98,1.2l-0.04,1.8l-3.67,2.51l-2.85,2.66l-3.43,3.88l-1.3,5.07l0.01,2.72l-0.54,0.73l-0.36,3.28l3.14,2.64l-0.16,2.11l1.4,1.11l-0.1,1.09l-2.29,3.52l-3.55,1.49l-4.92,0.6l-2.71,-0.29l-0.43,0.51l0.5,1.65l-0.49,2.1l0.38,1.42l-1.19,0.83l-2.36,0.38l-2.3,-1.04l-1.38,0.83l0.41,3.64l1.69,0.91l1.4,-0.71l0.36,0.76l-2.04,0.86l-2.01,1.89l-0.97,4.63l-2.34,0.1l-2.09,1.78l-0.61,2.75l2.46,2.31l2.17,0.63l-0.7,2.32l-2.83,1.73l-1.73,3.86l-2.17,1.22l-1.16,1.67l0.75,3.76l1.04,1.28ZM256.71,438.88l-2.0,0.15l-1.4,-1.22l-3.82,-0.1l-0.0,-5.83l1.6,3.05l3.26,2.07l3.08,0.78l-0.71,1.1Z\", \"name\": \"Argentina\"}, \"AU\": {\"path\": \"M705.8,353.26l0.26,0.04l0.17,-0.47l-0.48,-1.42l0.92,1.11l0.45,0.15l0.27,-0.39l-0.1,-1.56l-1.98,-3.63l1.09,-3.31l-0.24,-1.57l0.34,-0.62l0.38,1.06l0.43,-0.19l0.99,-1.7l1.91,-0.83l1.29,-1.15l1.81,-0.91l0.96,-0.17l0.92,0.26l1.92,-0.95l1.47,-0.28l1.03,-0.8l1.43,0.04l2.78,-0.84l1.36,-1.15l0.71,-1.45l1.41,-1.26l0.3,-2.58l1.27,-1.59l0.78,1.65l0.54,0.19l1.07,-0.51l0.15,-0.6l-0.73,-1.0l0.45,-0.71l0.78,0.39l0.58,-0.3l0.28,-1.82l1.87,-2.14l1.12,-0.39l0.28,-0.58l0.62,0.17l0.53,-0.73l1.87,-0.57l1.65,1.05l1.35,1.48l3.39,0.38l0.43,-0.54l-0.46,-1.23l1.05,-1.79l1.04,-0.61l0.14,-0.55l-0.25,-0.41l0.88,-1.17l1.31,-0.77l1.3,0.27l2.1,-0.48l0.31,-0.4l-0.05,-1.3l-0.92,-0.77l1.48,0.56l1.41,1.07l2.11,0.65l0.81,-0.2l1.4,0.7l1.69,-0.66l0.8,0.19l0.64,-0.33l0.71,0.77l-1.33,1.94l-0.71,0.07l-0.35,0.51l0.24,0.86l-1.52,2.35l0.12,1.05l2.15,1.65l1.97,0.85l3.04,2.36l1.97,0.65l0.55,0.88l2.72,0.85l1.84,-1.1l2.07,-5.97l-0.42,-3.59l0.3,-1.73l0.47,-0.87l-0.31,-0.68l1.09,-3.28l0.46,-0.47l0.4,0.71l0.16,1.51l0.65,0.52l0.16,1.04l0.85,1.21l0.12,2.38l0.9,2.0l0.57,0.18l1.3,-0.78l1.69,1.7l-0.2,1.08l0.53,2.2l0.39,1.3l0.68,0.48l0.6,1.95l-0.19,1.48l0.81,1.76l6.01,3.69l-0.11,0.76l1.38,1.58l0.95,2.77l0.58,0.22l0.72,-0.41l0.8,0.9l0.61,0.01l0.46,2.41l4.81,4.71l0.66,2.02l-0.07,3.31l1.14,2.2l-0.13,2.24l-1.1,3.68l0.03,1.64l-0.47,1.89l-1.05,2.4l-1.9,1.47l-1.72,3.51l-2.38,6.09l-0.24,2.82l-1.14,0.8l-2.85,0.15l-2.31,1.19l-2.51,2.25l-3.09,-1.57l0.3,-1.15l-0.54,-0.47l-1.5,0.63l-2.01,1.94l-7.12,-2.18l-1.48,-1.63l-1.14,-3.74l-1.45,-1.26l-1.81,-0.26l0.56,-1.18l-0.61,-2.1l-0.72,-0.1l-1.14,1.82l-0.9,0.21l0.63,-0.82l0.36,-1.55l0.92,-1.31l-0.13,-2.34l-0.7,-0.22l-2.0,2.34l-1.51,0.93l-0.94,2.01l-1.35,-0.81l-0.02,-1.52l-1.57,-2.04l-1.09,-0.88l0.24,-0.33l-0.14,-0.59l-3.21,-1.69l-1.83,-0.12l-2.54,-1.35l-4.58,0.28l-6.02,1.9l-2.53,-0.13l-2.62,1.41l-2.13,0.63l-1.49,2.6l-3.49,0.31l-2.29,-0.5l-3.48,0.43l-1.6,1.47l-0.81,-0.04l-2.37,1.63l-3.26,-0.1l-3.72,-2.21l0.04,-1.05l1.19,-0.46l0.49,-0.89l0.21,-2.97l-0.28,-1.64l-1.34,-2.86l-0.38,-1.47l0.05,-1.72l-0.95,-1.7l-0.18,-0.97l-1.01,-0.99l-0.29,-1.98l-1.13,-1.75ZM784.92,393.44l2.65,1.02l3.23,-0.96l1.09,0.14l0.15,3.06l-0.85,1.13l-0.17,1.63l-0.87,-0.24l-1.57,1.91l-1.68,-0.18l-1.4,-2.36l-0.37,-2.04l-1.39,-2.51l0.04,-0.8l1.15,0.18Z\", \"name\": \"Australia\"}, \"IL\": {\"path\": \"M507.76,203.05l0.4,-0.78l0.18,0.4l-0.33,1.03l0.52,0.44l0.68,-0.22l-0.86,3.6l-1.16,-3.32l0.59,-0.74l-0.03,-0.41ZM508.73,200.34l0.37,-1.02l0.64,0.0l0.52,-0.51l-0.49,1.53l-0.56,-0.24l-0.48,0.23Z\", \"name\": \"Israel\"}, \"IN\": {\"path\": \"M623.34,207.03l-1.24,1.04l-0.97,2.55l0.22,0.51l8.04,3.87l3.42,0.37l1.57,1.38l4.92,0.88l2.18,-0.04l0.38,-0.3l0.29,-1.24l-0.32,-1.64l0.14,-0.87l0.82,-0.31l0.45,2.48l2.28,1.02l1.77,-0.38l4.14,0.1l0.38,-0.36l0.18,-1.66l-0.5,-0.65l1.37,-0.29l2.25,-1.99l2.7,-1.62l1.93,0.62l1.8,-0.98l0.79,1.14l-0.68,0.91l0.26,0.63l2.42,0.36l0.09,0.47l-0.83,0.75l0.13,1.07l-1.52,-0.29l-3.24,1.86l-0.13,1.78l-1.32,2.14l-0.18,1.39l-0.93,1.82l-1.64,-0.5l-0.52,0.37l-0.09,2.63l-0.56,1.11l0.19,0.81l-0.53,0.27l-1.18,-3.73l-1.08,-0.27l-0.38,0.31l-0.24,1.0l-0.66,-0.66l0.54,-1.06l1.22,-0.34l1.15,-2.25l-0.24,-0.56l-1.57,-0.47l-4.34,-0.28l-0.18,-1.56l-0.35,-0.35l-1.11,-0.12l-1.91,-1.12l-0.56,0.17l-0.88,1.82l0.11,0.49l1.36,1.07l-1.09,0.69l-0.69,1.11l0.18,0.56l1.24,0.57l-0.32,1.54l0.85,1.94l0.36,2.01l-0.22,0.59l-4.58,0.52l-0.33,0.42l0.13,1.8l-1.17,1.36l-3.65,1.81l-2.79,3.03l-4.32,3.28l-0.18,1.27l-4.65,1.79l-0.77,2.16l0.64,5.3l-1.06,2.49l-0.01,3.94l-1.24,0.28l-1.14,1.93l0.39,0.84l-1.68,0.53l-1.04,1.83l-0.65,0.47l-2.06,-2.05l-2.1,-6.02l-2.2,-3.64l-1.05,-4.75l-2.29,-3.57l-1.76,-8.2l0.01,-3.11l-0.49,-2.53l-0.55,-0.29l-3.53,1.52l-1.53,-0.27l-2.86,-2.77l0.85,-0.67l0.08,-0.55l-0.74,-1.03l-2.67,-2.06l1.24,-1.32l5.34,0.01l0.39,-0.49l-0.5,-2.29l-1.42,-1.46l-0.27,-1.93l-1.43,-1.2l2.31,-2.37l3.05,0.06l2.62,-2.85l1.6,-2.81l2.4,-2.73l0.07,-2.04l1.97,-1.48l-0.02,-0.65l-1.93,-1.31l-0.82,-1.78l-0.8,-2.21l0.9,-0.89l3.59,0.65l2.92,-0.42l2.33,-2.19l2.31,2.85l-0.24,2.13l0.99,1.59l-0.05,0.82l-1.34,-0.28l-0.47,0.48l0.7,3.06l2.62,1.99l2.99,1.65Z\", \"name\": \"India\"}, \"TZ\": {\"path\": \"M495.56,296.42l2.8,-3.12l-0.02,-0.81l-0.64,-1.3l0.68,-0.52l0.14,-1.47l-0.76,-1.25l0.31,-0.11l2.26,0.03l-0.51,2.76l0.76,1.3l0.5,0.12l1.05,-0.53l1.19,-0.12l0.61,0.24l1.43,-0.62l0.1,-0.67l-0.71,-0.62l1.57,-1.7l8.65,4.86l0.32,1.53l3.34,2.33l-1.05,2.8l0.13,1.61l1.63,1.12l-0.6,1.76l-0.01,2.33l1.89,4.03l0.57,0.43l-1.46,1.08l-2.61,0.94l-1.43,-0.04l-1.06,0.77l-2.29,0.36l-2.87,-0.68l-0.83,0.07l-0.63,-0.75l-0.31,-2.78l-1.32,-1.35l-3.25,-0.77l-3.96,-1.58l-1.18,-2.41l-0.32,-1.75l-1.76,-1.49l0.42,-1.05l-0.44,-0.89l0.08,-0.96l-0.46,-0.58l0.06,-0.56Z\", \"name\": \"Tanzania\"}, \"AZ\": {\"path\": \"M539.29,175.73l1.33,0.32l1.94,-1.8l2.3,3.34l1.43,0.43l-1.26,0.15l-0.35,0.32l-0.8,3.14l-0.99,0.96l0.05,1.11l-1.26,-1.13l0.7,-1.18l-0.04,-0.47l-0.74,-0.86l-1.48,0.15l-2.34,1.71l-0.03,-1.27l-2.03,-1.35l0.47,-0.62l-0.08,-0.56l-1.03,-0.79l0.29,-0.43l-0.14,-0.58l-1.13,-0.86l1.89,0.68l1.69,0.06l0.37,-0.87l-0.81,-1.37l0.42,0.06l1.63,1.72ZM533.78,180.57l0.61,0.46l0.69,-0.0l0.59,1.15l-0.68,-0.15l-1.21,-1.45Z\", \"name\": \"Azerbaijan\"}, \"IE\": {\"path\": \"M405.08,135.42l0.35,2.06l-1.75,2.78l-4.22,1.88l-2.84,-0.4l1.73,-3.0l-1.18,-3.53l4.6,-3.74l0.32,1.15l-0.49,1.74l0.4,0.51l1.47,-0.04l1.6,0.6Z\", \"name\": \"Ireland\"}, \"ID\": {\"path\": \"M756.47,287.89l0.69,4.01l2.79,1.78l0.51,-0.1l2.04,-2.59l2.71,-1.43l2.05,-0.0l3.9,1.73l2.46,0.45l0.08,15.12l-1.75,-1.54l-2.54,-0.51l-0.88,0.71l-2.32,0.06l0.69,-1.33l1.45,-0.64l0.23,-0.46l-0.65,-2.74l-1.24,-2.21l-5.04,-2.29l-2.09,-0.23l-3.68,-2.27l-0.55,0.13l-0.65,1.07l-0.52,0.12l-0.55,-1.89l-1.21,-0.78l1.84,-0.62l1.72,0.05l0.39,-0.52l-0.21,-0.66l-0.38,-0.28l-3.45,-0.0l-1.13,-1.48l-2.1,-0.43l-0.52,-0.6l2.69,-0.48l1.28,-0.78l3.66,0.94l0.3,0.71ZM757.91,300.34l-0.62,0.82l-0.1,-0.8l0.59,-1.12l0.13,1.1ZM747.38,292.98l0.34,0.72l-1.22,-0.57l-4.68,-0.1l0.27,-0.62l2.78,-0.09l2.52,0.67ZM741.05,285.25l-0.67,-2.88l0.64,-2.01l0.41,0.86l1.21,0.18l0.16,0.7l-0.1,1.68l-0.84,-0.16l-0.46,0.3l-0.34,1.34ZM739.05,293.5l-0.5,0.44l-1.34,-0.36l-0.17,-0.37l1.73,-0.08l0.27,0.36ZM721.45,284.51l-0.19,1.97l2.24,2.23l0.54,0.02l1.27,-1.07l2.75,-0.5l-0.9,1.21l-2.11,0.93l-0.16,0.6l2.22,3.01l-0.3,1.07l1.36,1.74l-2.26,0.85l-0.28,-0.31l0.12,-1.19l-1.64,-1.34l0.17,-2.23l-0.56,-0.39l-1.67,0.76l-0.23,0.39l0.3,6.17l-1.1,0.25l-0.69,-0.47l0.64,-2.21l-0.39,-2.42l-0.39,-0.34l-0.8,-0.01l-0.58,-1.29l0.98,-1.6l0.35,-1.96l1.32,-3.87ZM728.59,296.27l0.38,0.49l-0.02,1.28l-0.88,0.49l-0.53,-0.47l1.04,-1.79ZM729.04,286.98l0.27,-0.05l-0.02,0.13l-0.24,-0.08ZM721.68,284.05l0.16,-0.32l1.89,-1.65l1.83,0.68l3.16,0.35l2.94,-0.1l2.39,-1.66l-1.73,2.13l-1.66,0.43l-2.41,-0.48l-4.17,0.13l-2.39,0.51ZM730.55,310.47l1.11,-1.93l2.03,-0.82l0.08,0.62l-1.45,1.67l-1.77,0.46ZM728.12,305.88l-0.1,0.38l-3.46,0.66l-2.91,-0.27l-0.0,-0.25l1.54,-0.41l1.66,0.73l1.67,-0.19l1.61,-0.65ZM722.9,310.24l-0.64,0.03l-2.26,-1.2l1.11,-0.24l1.78,1.41ZM716.26,305.77l0.88,0.51l1.28,-0.17l0.2,0.35l-4.65,0.73l0.39,-0.67l1.15,-0.02l0.75,-0.73ZM711.66,293.84l-0.38,-0.16l-2.54,1.01l-1.12,-1.44l-1.69,-0.13l-1.16,-0.75l-3.04,0.77l-1.1,-1.15l-3.31,-0.11l-0.35,-3.05l-1.35,-0.95l-1.11,-1.98l-0.33,-2.06l0.27,-2.14l0.9,-1.01l0.37,1.15l2.09,1.49l1.53,-0.48l1.82,0.08l1.38,-1.19l1.0,-0.18l2.28,0.67l2.26,-0.53l1.52,-3.64l1.01,-0.99l0.78,-2.57l4.1,0.3l-1.11,1.77l0.02,0.46l1.7,2.2l-0.23,1.39l2.07,1.71l-2.33,0.42l-0.88,1.9l0.1,2.05l-2.4,1.9l-0.06,2.45l-0.7,2.79ZM692.58,302.03l0.35,0.26l4.8,0.25l0.78,-0.97l4.17,1.09l1.13,1.68l3.69,0.45l2.13,1.04l-1.8,0.6l-2.77,-0.99l-4.8,-0.12l-5.24,-1.41l-1.84,-0.25l-1.11,0.3l-4.26,-0.97l-0.7,-1.14l-1.59,-0.13l1.18,-1.65l2.74,0.13l2.87,1.13l0.26,0.68ZM685.53,299.17l-2.22,0.04l-2.06,-2.03l-3.15,-2.01l-2.93,-3.51l-3.11,-5.33l-2.2,-2.12l-1.64,-4.06l-2.32,-1.69l-1.27,-2.07l-1.96,-1.5l-2.51,-2.65l-0.11,-0.66l4.81,0.53l2.15,2.38l3.31,2.74l2.35,2.66l2.7,0.17l1.95,1.59l1.54,2.17l1.59,0.95l-0.84,1.71l0.15,0.52l1.44,0.87l0.79,0.1l0.4,1.58l0.87,1.4l1.96,0.39l1.0,1.31l-0.6,3.01l-0.09,3.5Z\", \"name\": \"Indonesia\"}, \"UA\": {\"path\": \"M492.5,162.44l1.28,-2.49l1.82,0.19l0.66,-0.23l0.09,-0.71l-0.25,-0.75l-0.79,-0.72l-0.33,-1.21l-0.86,-0.62l-0.02,-1.19l-1.13,-0.86l-1.15,-0.19l-2.04,-1.0l-1.66,0.32l-0.66,0.47l-0.92,-0.0l-0.84,0.78l-2.48,0.7l-1.18,-0.71l-3.07,-0.36l-0.89,0.43l-0.24,-0.55l-1.11,-0.7l0.35,-0.93l1.26,-1.02l-0.54,-1.23l2.04,-2.43l1.4,-0.62l0.25,-1.19l-1.04,-2.39l0.83,-0.13l1.28,-0.84l1.8,-0.07l2.47,0.26l2.86,0.81l1.88,0.06l0.86,0.44l1.04,-0.41l0.77,0.66l2.18,-0.15l0.92,0.3l0.52,-0.34l0.15,-1.53l0.56,-0.54l2.85,-0.05l0.84,-0.72l3.04,-0.18l1.23,1.46l-0.48,0.77l0.21,1.03l0.36,0.32l1.8,0.14l0.93,2.08l3.18,1.15l1.94,-0.45l1.67,1.49l1.4,-0.03l3.35,0.96l0.02,0.54l-0.96,1.59l0.47,1.97l-0.26,0.7l-2.36,0.28l-1.29,0.89l-0.23,1.38l-1.83,0.27l-1.58,0.97l-2.41,0.21l-2.16,1.17l-0.21,0.38l0.34,2.26l1.23,0.75l2.13,-0.08l-0.14,0.31l-2.65,0.53l-3.23,1.69l-0.87,-0.39l0.42,-1.1l-0.25,-0.52l-2.21,-0.73l2.35,-1.06l0.12,-0.65l-0.93,-0.82l-3.62,-0.74l-0.13,-0.89l-0.46,-0.34l-2.61,0.59l-0.91,1.69l-1.71,2.04l-0.86,-0.4l-1.62,0.27Z\", \"name\": \"Ukraine\"}, \"QA\": {\"path\": \"M549.33,221.64l-0.76,-0.23l-0.14,-1.64l0.84,-1.29l0.47,0.52l0.04,1.34l-0.45,1.3Z\", \"name\": \"Qatar\"}, \"MZ\": {\"path\": \"M508.58,318.75l-0.34,-2.57l0.51,-2.05l3.55,0.63l2.5,-0.38l1.02,-0.76l1.49,0.01l2.74,-0.98l1.66,-1.2l0.5,9.24l0.41,1.23l-0.68,1.67l-0.93,1.71l-1.5,1.5l-5.16,2.28l-2.78,2.73l-1.02,0.53l-1.71,1.8l-0.98,0.57l-0.35,2.41l1.16,1.94l0.49,2.17l0.43,0.31l-0.06,2.06l-0.39,1.17l0.5,0.72l-0.25,0.73l-0.92,0.83l-5.12,2.39l-1.22,1.36l0.21,1.13l0.58,0.39l-0.11,0.72l-1.22,-0.01l-0.73,-2.97l0.42,-3.09l-1.78,-5.37l2.49,-2.81l0.69,-1.89l0.44,-0.43l0.28,-1.53l-0.39,-0.93l0.59,-3.65l-0.01,-3.26l-1.49,-1.16l-1.2,-0.22l-1.74,-1.17l-1.92,0.01l-0.29,-2.08l7.06,-1.96l1.28,1.09l0.89,-0.1l0.67,0.44l0.1,0.73l-0.51,1.29l0.19,1.81l1.75,1.83l0.65,-0.13l0.71,-1.65l1.17,-0.86l-0.26,-3.47l-1.05,-1.85l-1.04,-0.94Z\", \"name\": \"Mozambique\"}}, \"height\": 440.70631074413296, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 11.5}, \"width\": 900.0});"
  },
  {
    "path": "BlackStone/assets/vendors/jvectormap/jquery-jvectormap.css",
    "content": "svg {\n    touch-action: none;\n}\n\n.jvectormap-container {\n    width: 100%;\n    height: 100%;\n    position: relative;\n    overflow: hidden;\n    touch-action: none;\n}\n\n.jvectormap-tip {\n    position: absolute;\n    display: none;\n    border: solid 1px #CDCDCD;\n    border-radius: 3px;\n    background: #292929;\n    color: white;\n    font-family: sans-serif, Verdana;\n    font-size: smaller;\n    padding: 3px;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout, .jvectormap-goback {\n    position: absolute;\n    left: 10px;\n    border-radius: 3px;\n    background: #292929;\n    padding: 3px;\n    color: white;\n    cursor: pointer;\n    line-height: 10px;\n    text-align: center;\n    box-sizing: content-box;\n}\n\n.jvectormap-zoomin, .jvectormap-zoomout {\n    width: 10px;\n    height: 10px;\n}\n\n.jvectormap-zoomin {\n    top: 10px;\n}\n\n.jvectormap-zoomout {\n    top: 30px;\n}\n\n.jvectormap-goback {\n    bottom: 10px;\n    z-index: 1000;\n    padding: 6px;\n}\n\n.jvectormap-spinner {\n    position: absolute;\n    left: 0;\n    top: 0;\n    right: 0;\n    bottom: 0;\n    background: center no-repeat url(data:image/gif;base64,R0lGODlhIAAgAPMAAP///wAAAMbGxoSEhLa2tpqamjY2NlZWVtjY2OTk5Ly8vB4eHgQEBAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAIAAgAAAE5xDISWlhperN52JLhSSdRgwVo1ICQZRUsiwHpTJT4iowNS8vyW2icCF6k8HMMBkCEDskxTBDAZwuAkkqIfxIQyhBQBFvAQSDITM5VDW6XNE4KagNh6Bgwe60smQUB3d4Rz1ZBApnFASDd0hihh12BkE9kjAJVlycXIg7CQIFA6SlnJ87paqbSKiKoqusnbMdmDC2tXQlkUhziYtyWTxIfy6BE8WJt5YJvpJivxNaGmLHT0VnOgSYf0dZXS7APdpB309RnHOG5gDqXGLDaC457D1zZ/V/nmOM82XiHRLYKhKP1oZmADdEAAAh+QQJCgAAACwAAAAAIAAgAAAE6hDISWlZpOrNp1lGNRSdRpDUolIGw5RUYhhHukqFu8DsrEyqnWThGvAmhVlteBvojpTDDBUEIFwMFBRAmBkSgOrBFZogCASwBDEY/CZSg7GSE0gSCjQBMVG023xWBhklAnoEdhQEfyNqMIcKjhRsjEdnezB+A4k8gTwJhFuiW4dokXiloUepBAp5qaKpp6+Ho7aWW54wl7obvEe0kRuoplCGepwSx2jJvqHEmGt6whJpGpfJCHmOoNHKaHx61WiSR92E4lbFoq+B6QDtuetcaBPnW6+O7wDHpIiK9SaVK5GgV543tzjgGcghAgAh+QQJCgAAACwAAAAAIAAgAAAE7hDISSkxpOrN5zFHNWRdhSiVoVLHspRUMoyUakyEe8PTPCATW9A14E0UvuAKMNAZKYUZCiBMuBakSQKG8G2FzUWox2AUtAQFcBKlVQoLgQReZhQlCIJesQXI5B0CBnUMOxMCenoCfTCEWBsJColTMANldx15BGs8B5wlCZ9Po6OJkwmRpnqkqnuSrayqfKmqpLajoiW5HJq7FL1Gr2mMMcKUMIiJgIemy7xZtJsTmsM4xHiKv5KMCXqfyUCJEonXPN2rAOIAmsfB3uPoAK++G+w48edZPK+M6hLJpQg484enXIdQFSS1u6UhksENEQAAIfkECQoAAAAsAAAAACAAIAAABOcQyEmpGKLqzWcZRVUQnZYg1aBSh2GUVEIQ2aQOE+G+cD4ntpWkZQj1JIiZIogDFFyHI0UxQwFugMSOFIPJftfVAEoZLBbcLEFhlQiqGp1Vd140AUklUN3eCA51C1EWMzMCezCBBmkxVIVHBWd3HHl9JQOIJSdSnJ0TDKChCwUJjoWMPaGqDKannasMo6WnM562R5YluZRwur0wpgqZE7NKUm+FNRPIhjBJxKZteWuIBMN4zRMIVIhffcgojwCF117i4nlLnY5ztRLsnOk+aV+oJY7V7m76PdkS4trKcdg0Zc0tTcKkRAAAIfkECQoAAAAsAAAAACAAIAAABO4QyEkpKqjqzScpRaVkXZWQEximw1BSCUEIlDohrft6cpKCk5xid5MNJTaAIkekKGQkWyKHkvhKsR7ARmitkAYDYRIbUQRQjWBwJRzChi9CRlBcY1UN4g0/VNB0AlcvcAYHRyZPdEQFYV8ccwR5HWxEJ02YmRMLnJ1xCYp0Y5idpQuhopmmC2KgojKasUQDk5BNAwwMOh2RtRq5uQuPZKGIJQIGwAwGf6I0JXMpC8C7kXWDBINFMxS4DKMAWVWAGYsAdNqW5uaRxkSKJOZKaU3tPOBZ4DuK2LATgJhkPJMgTwKCdFjyPHEnKxFCDhEAACH5BAkKAAAALAAAAAAgACAAAATzEMhJaVKp6s2nIkolIJ2WkBShpkVRWqqQrhLSEu9MZJKK9y1ZrqYK9WiClmvoUaF8gIQSNeF1Er4MNFn4SRSDARWroAIETg1iVwuHjYB1kYc1mwruwXKC9gmsJXliGxc+XiUCby9ydh1sOSdMkpMTBpaXBzsfhoc5l58Gm5yToAaZhaOUqjkDgCWNHAULCwOLaTmzswadEqggQwgHuQsHIoZCHQMMQgQGubVEcxOPFAcMDAYUA85eWARmfSRQCdcMe0zeP1AAygwLlJtPNAAL19DARdPzBOWSm1brJBi45soRAWQAAkrQIykShQ9wVhHCwCQCACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiRMDjI0Fd30/iI2UA5GSS5UDj2l6NoqgOgN4gksEBgYFf0FDqKgHnyZ9OX8HrgYHdHpcHQULXAS2qKpENRg7eAMLC7kTBaixUYFkKAzWAAnLC7FLVxLWDBLKCwaKTULgEwbLA4hJtOkSBNqITT3xEgfLpBtzE/jiuL04RGEBgwWhShRgQExHBAAh+QQJCgAAACwAAAAAIAAgAAAE7xDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfZiCqGk5dTESJeaOAlClzsJsqwiJwiqnFrb2nS9kmIcgEsjQydLiIlHehhpejaIjzh9eomSjZR+ipslWIRLAgMDOR2DOqKogTB9pCUJBagDBXR6XB0EBkIIsaRsGGMMAxoDBgYHTKJiUYEGDAzHC9EACcUGkIgFzgwZ0QsSBcXHiQvOwgDdEwfFs0sDzt4S6BK4xYjkDOzn0unFeBzOBijIm1Dgmg5YFQwsCMjp1oJ8LyIAACH5BAkKAAAALAAAAAAgACAAAATwEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GGl6NoiPOH16iZKNlH6KmyWFOggHhEEvAwwMA0N9GBsEC6amhnVcEwavDAazGwIDaH1ipaYLBUTCGgQDA8NdHz0FpqgTBwsLqAbWAAnIA4FWKdMLGdYGEgraigbT0OITBcg5QwPT4xLrROZL6AuQAPUS7bxLpoWidY0JtxLHKhwwMJBTHgPKdEQAACH5BAkKAAAALAAAAAAgACAAAATrEMhJaVKp6s2nIkqFZF2VIBWhUsJaTokqUCoBq+E71SRQeyqUToLA7VxF0JDyIQh/MVVPMt1ECZlfcjZJ9mIKoaTl1MRIl5o4CUKXOwmyrCInCKqcWtvadL2SYhyASyNDJ0uIiUd6GAULDJCRiXo1CpGXDJOUjY+Yip9DhToJA4RBLwMLCwVDfRgbBAaqqoZ1XBMHswsHtxtFaH1iqaoGNgAIxRpbFAgfPQSqpbgGBqUD1wBXeCYp1AYZ19JJOYgH1KwA4UBvQwXUBxPqVD9L3sbp2BNk2xvvFPJd+MFCN6HAAIKgNggY0KtEBAAh+QQJCgAAACwAAAAAIAAgAAAE6BDISWlSqerNpyJKhWRdlSAVoVLCWk6JKlAqAavhO9UkUHsqlE6CwO1cRdCQ8iEIfzFVTzLdRAmZX3I2SfYIDMaAFdTESJeaEDAIMxYFqrOUaNW4E4ObYcCXaiBVEgULe0NJaxxtYksjh2NLkZISgDgJhHthkpU4mW6blRiYmZOlh4JWkDqILwUGBnE6TYEbCgevr0N1gH4At7gHiRpFaLNrrq8HNgAJA70AWxQIH1+vsYMDAzZQPC9VCNkDWUhGkuE5PxJNwiUK4UfLzOlD4WvzAHaoG9nxPi5d+jYUqfAhhykOFwJWiAAAIfkECQoAAAAsAAAAACAAIAAABPAQyElpUqnqzaciSoVkXVUMFaFSwlpOCcMYlErAavhOMnNLNo8KsZsMZItJEIDIFSkLGQoQTNhIsFehRww2CQLKF0tYGKYSg+ygsZIuNqJksKgbfgIGepNo2cIUB3V1B3IvNiBYNQaDSTtfhhx0CwVPI0UJe0+bm4g5VgcGoqOcnjmjqDSdnhgEoamcsZuXO1aWQy8KAwOAuTYYGwi7w5h+Kr0SJ8MFihpNbx+4Erq7BYBuzsdiH1jCAzoSfl0rVirNbRXlBBlLX+BP0XJLAPGzTkAuAOqb0WT5AH7OcdCm5B8TgRwSRKIHQtaLCwg1RAAAOwAAAAAAAAAAAA==);\n}\n\n.jvectormap-legend-title {\n    font-weight: bold;\n    font-size: 14px;\n    text-align: center;\n}\n\n.jvectormap-legend-cnt {\n    position: absolute;\n}\n\n.jvectormap-legend-cnt-h {\n    bottom: 0;\n    right: 0;\n}\n\n.jvectormap-legend-cnt-v {\n    top: 0;\n    right: 0;\n}\n\n.jvectormap-legend {\n    background: black;\n    color: white;\n    border-radius: 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend {\n    float: left;\n    margin: 0 10px 10px 0;\n    padding: 3px 3px 1px 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend .jvectormap-legend-tick {\n    float: left;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend {\n    margin: 10px 10px 0 0;\n    padding: 3px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick {\n    width: 40px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick-sample {\n    height: 15px;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend-tick-sample {\n    height: 20px;\n    width: 20px;\n    display: inline-block;\n    vertical-align: middle;\n}\n\n.jvectormap-legend-tick-text {\n    font-size: 12px;\n}\n\n.jvectormap-legend-cnt-h .jvectormap-legend-tick-text {\n    text-align: center;\n}\n\n.jvectormap-legend-cnt-v .jvectormap-legend-tick-text {\n    display: inline-block;\n    vertical-align: middle;\n    line-height: 20px;\n    padding-left: 3px;\n}"
  },
  {
    "path": "BlackStone/binarios/discovery.sh",
    "content": "# Definir la URL de la página web\n$1 2>/dev/null\n\n# Buscar direcciones IP\necho \"Direcciones IP:\"\ndig +short $1\n\n# Buscar subdominios\necho \"Subdominios:\"\nhost -t ns $1 | awk '{print $NF}' | sed 's/\\.$//'\n\necho \"hecho\" > /clientes/$.txt\n"
  },
  {
    "path": "BlackStone/calculadora_nist/README.md",
    "content": "#CVSSjs\n\nCVSS (Common Vulnerability Scoring System) Calculator\n\n<a href=\"http://cvssjs.github.io/cvssjs\">Standalone Calculator</a>\n\nCVSSjs Version 0.2 beta\n\nUsage:\n\n    //include the cvss.js script \n    <script src=\"http://cvssjs.github.io/cvssjs/cvss.js\"></script>\n    \n    craete an HTML element with an id for eg.,\n    <div id=\"cvssboard\"/>\n    \n    // create a new instance of CVSS calculator:\n    var c = new CVSS(\"cvssboard\");\n\n    // create a new instance of CVSS calculator with some event handler callbacks\n    var c = new CVSS(\"cvssboard\", {\n                onchange: function() {....} //optional\n                onsubmit: function() {....} //optional\n                }\n                \n    // set a vector\n    c.set('CVSS:3.0/AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:L');\n    \n    // it is also backwards compatible with CVSS v2 vectors, \n    // buts only sets the parameters that can be set without ambiguity.\n    c.set('AV:L/AC:L/Au:N/C:P/I:P/A:C');\n    \n    //get the value\n    c.get() returns an object like:\n      {\n        score: 4.3,\n        vector: 'CVSS:3.0/AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:L'\n      }\n\n\nCopyright (c) 2015-2016, Chandan B.N.\n\nCopyright (c) 2015, FIRST.ORG, INC\n"
  },
  {
    "path": "BlackStone/calculadora_nist/cvss.css",
    "content": "/* Copyright (c) 2015, Chandan B.N\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the\n * following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following\n *    disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the\n *    following disclaimer in the documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote\n *    products derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n.cvssjs i {\n    width: 1em;\n    height: 1em;\n    display: inline-block;\n    background: url(\"cvssicons.png\") 0 0 no-repeat;\n    vertical-align: middle;\n    background-size: cover;\n    margin-right: 4px;\n    margin: 2px;\n    font-size: 40px;\n}\n\n.cvssjs i.AVN {\n    background-position: -3em 0;\n}\n\n.cvssjs i.AVA {\n    background-position: -2em 0;\n}\n\n.cvssjs i.AVL {\n    background-position: -1em 0;\n}\n\n.cvssjs i.AVP {\n    background-position: 0 0;\n}\n\n.cvssjs i.ACL {\n    background-position: -4em 0;\n}\n\n.cvssjs i.ACH {\n    background-position: -5em 0;\n}\n\n.cvssjs i.PRN {\n    background-position: -6em 0;\n}\n\n.cvssjs i.PRL {\n    background-position: -7em 0;\n}\n\n.cvssjs i.PRH {\n    background-position: -8em 0;\n}\n\n.cvssjs i.UIN {\n    background-position: -10em 0;\n}\n\n.cvssjs i.UIR {\n    background-position: -9em 0;\n}\n\n.cvssjs i.SC {\n    background-position: -11em 0;\n}\n\n.cvssjs i.SU {\n    background-position: -10em 0;\n}\n\n.cvssjs i.CH {\n    background-position: -14em 0;\n}\n\n.cvssjs i.CL {\n    background-position: -13em 0;\n}\n\n.cvssjs i.CN {\n    background-position: -12em 0;\n}\n\n.cvssjs i.IH {\n    background-position: -16em 0;\n}\n\n.cvssjs i.IL {\n    background-position: -17em 0;\n}\n\n.cvssjs i.IN {\n    background-position: -15em 0;\n}\n\n.cvssjs i.AH {\n    background-position: -20em 0;\n}\n\n.cvssjs i.AL {\n    background-position: -19em 0;\n}\n\n.cvssjs i.AN {\n    background-position: -18em 0;\n}\n\n.cvssjs a {\n    color: #489;\n    text-decoration: none;\n}\n\n.cvssjs dl {\n    display: inline-block;\n    vertical-align: top;\n    background-color: #424a40;\n    margin-top: 2px;\n    margin-bottom: 2px;\n    margin: 2px;\n    border-radius: 4px;\n    box-shadow: 0px 0px 5px #bbb;\n    transition: background-color 0.3s ease-in-out;\n}\n.cvssjs dt {\n    color: #EEEEEE;\n    padding: 5px;\n    font-size: 60%;\n    overflow-x: hidden;\n    text-transform: uppercase;\n    letter-spacing: .5px;\n}\n.cvssjs dl:hover, .cvssjs dl:focus {\n    background-color: #676a60;\n    box-shadow: 0px 0px 5px #aaa;\n}\n.cvssjs dl:hover dt, .cvssjs dl:focus dt {\n    color: #ffffff;\n}\n.cvssjs dd {\n    margin: 0px;\n    padding: 0px;\n    text-align: left;\n}\n\n.cvssjs dd label,\n#predef span {\n    min-width: 7.5em;\n    padding: 0px 2px 0px 2px;\n    display: block;\n    margin: 1px;\n    margin-top: 0px;\n    background-color: #f7f7f4;\n    vertical-align: middle;\n    transition: background-color 0.3s ease-in-out;\n}\n\n.cvssjs dd:last-child label,\n#predef span:last-child {\n    border-bottom-left-radius: 3px;\n    border-bottom-right-radius: 3px;\n}\n\n.cvssjs dd small {\n    display: none;\n}\n\n.cvssjs dd:hover small {\n    position: absolute;\n    max-width: 220px;\n    border: solid 1px #333;\n    display: block;\n    color: black;\n    background-color: #FFFFC1;\n    border-radius: 5px;\n    padding: 5px;\n    margin-top: .7em;\n    margin-left: 5em;\n    box-shadow: 2px 2px 5px #333;\n    z-index: 1;\n}\n\n#predef span:hover:before {\n    content: \"<\";\n    display: block;\n    position: absolute;\n    margin-top: 0px;\n    margin-left: -2px;\n    color: #424a40;\n}\n\n.cvssjs dd > input {\n    border: 0;\n    clip: rect(0 0 0 0);\n    height: 1px;\n    margin: -1px;\n    overflow: hidden;\n    padding: 0;\n    position: absolute;\n    width: 1px;\n}\n\n.cvssjs dd:nth-child(2) input:checked + label,\n.cvssjs .Critical {\n    background-color: rgb(240, 130, 120);\n}\n\n.cvssjs dd input:checked + label,\n.cvssjs .High {\n    background-color: rgb(240, 170, 83);\n    transition: background-color 0.1s ease-in-out;\n}\n\n.cvssjs dd:last-child input:checked + label,\n.cvssjs dl.AV dd:nth-child(4) input:checked + label,\n.cvssjs .Medium {\n    background-color: rgb(250, 230, 120);\n}\n\n.cvssjs .Low {\n    background-color: rgb(208, 212, 134)\n}\n\n.cvssjs dl.C dd:last-child input:checked + label,\n.cvssjs dl.I dd:last-child input:checked + label,\n.cvssjs dl.A dd:last-child input:checked + label,\n.cvssjs .None {\n    background-color: rgb(162, 213, 114);\n}\n\n.cvssjs dd:nth-child(2) label:hover {\n    background-color: rgb(250, 140, 130);\n}\n\n.cvssjs dd label:hover {\n    background-color: rgb(250, 180, 93);\n    transition: background-color 0.1s ease-in-out;\n}\n\n.cvssjs dl.PR dd:last-child label:hover,\n.cvssjs dd:last-child label:hover,\n.cvssjs dl.AV dd:nth-child(4) label:hover {\n    background-color: rgb(255, 240, 130);\n}\n\n.cvssjs dl.C dd:last-child label:hover,\n.cvssjs dl.I dd:last-child label:hover,\n.cvssjs dl.A dd:last-child label:hover {\n    background-color: rgb(172, 223, 124);\n}\n\n.cvssjs hr {\n    border-style: dashed;\n    color: #949ca0;\n}\n\n.cvssjs .score,\n.cvssjs .vector,\n.cvssjs .severity {\n    margin: 2px;\n    display: inline-block;\n}\n\n.cvssjs .score {\n    width: 1.5em;\n}\n\n.cvssjs .severity {\n    width: 5em;\n    border-radius: 4px;\n    padding: 5px;\n    text-align: center;\n    transition: background-color 0.1s ease-out;\n}\n\n.cvssjs .results {\n    padding: 7px;\n}\n\n.cvssjs dl dd label.results:hover {\n    background-color: white;\n}\n\n.cvssjs .results sub {\n    display: none;\n    font-size: x-small;\n}"
  },
  {
    "path": "BlackStone/calculadora_nist/cvss.js",
    "content": "/* Copyright (c) 2015, Chandan B.N.\n *\n * Copyright (c) 2015, FIRST.ORG, INC\n *\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification, are permitted provided that the\n * following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following\n *    disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the\n *    following disclaimer in the documentation and/or other materials provided with the distribution.\n * 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote\n *    products derived from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES,\n * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\n * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\n/*\n\nCVSSjs Version 0.1 beta\n\nUsage:\n    craete an html element with an id for eg.,\n    <div id=\"cvssboard\"></div>\n\n    // create a new instance of CVSS calculator:\n    var c = new CVSS(\"cvssboard\");\n\n    // create a new instance of CVSS calculator with some event handler callbacks\n    var c = new CVSS(\"cvssboard\", {\n                onchange: function() {....} //optional\n                onsubmit: function() {....} //optional\n                }\n                \n    // set a vector\n    c.set('AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:L');\n    \n    //get the value\n    c.get() returns an object like:\n\n    {\n        score: 4.3,\n        vector: 'AV:L/AC:L/PR:N/UI:N/S:C/C:N/I:N/A:L'\n    }\n    \n*/\n\nvar CVSS = function (id, options) {\n    this.options = options;\n    this.wId = id;\n    var e = function (tag) {\n        return document.createElement(tag);\n    };\n\n    // Base Group\n    this.bg = {\n        AV: 'Attack Vector',\n        AC: 'Attack Complexity',\n        PR: 'Privileges Required',\n        UI: 'User Interaction',\n        S: 'Scope',\n        C: 'Confidentiality',\n        I: 'Integrity',\n        A: 'Availability'\n    };\n\n    // Base Metrics\n    this.bm = {\n        AV: {\n            N: {\n                l: 'Network',\n                d: \"<b>Worst:</b> A vulnerability exploitable with network access means the vulnerable authorization scope is bound to the network stack and the attacker's path to the vulnerable system is at the network layer. Such a vulnerability is often termed 'remotely exploitable'.\"\n            },\n            A: {\n                l: 'Adjacent',\n                d: \"<b>Worse:</b> A vulnerability exploitable with adjacent network access means the vulnerable authorization scope is bound to the network stack and the attacker's path to the vulnerable system is at the data link layer. Examples include local IP subnet, Bluetooth, IEEE 802.11, and local Ethernet segment.\"\n            },\n            L: {\n                l: 'Local',\n                d: \"<b>Bad:</b> A vulnerability exploitable with local access means the vulnerable authorization scope is not bound to the network stack and the attacker's path to the vulnerable authorization scope is via read / write / execute capabilities. If the attacker has the necessary Privileges Required to interact with the vulnerable authorization scope, they may be logged in locally; otherwise, they may deliver an exploit to a user and rely on User Interaction\"\n            },\n            P: {\n                l: 'Physical',\n                d: \"<b>Bad:</b> A vulnerability exploitable with physical access requires the ability to physically touch or manipulate a vulnerable authorization scope. Physical interaction may be brief (evil maid attack) or persistent.\"\n            }\n        },\n        AC: {\n            L: {\n                l: 'Low',\n                d: \"<b>Worst:</b> Specialized access conditions or extenuating circumstances do not exist. An attacker can expect repeatable exploit success against a vulnerable target.\"\n            },\n            H: {\n                l: 'High',\n                d: \"<b>Bad:</b> A successful attack depends on conditions outside the attacker's control. That is, a successful attack cannot be accomplished at-will, but requires the attacker to invest in some measurable amount of effort in preparation or execution against a specific target before successful attack can be expected. A successful attack depends on attackers overcoming one OR both of the following conditions: the attacker must gather target-specific reconnaissance; or the attacker must prepare the target environment to improve exploit reliability.\"\n            }\n        },\n        PR: {\n            N: {\n                l: 'None',\n                d: \"<b>Worst:</b> The attacker is unprivileged or unauthenticated.\"\n            },\n            L: {\n                l: 'Low',\n                d: \"<b>Worse</b> The attacker is authenticated with privileges that provide basic, low-impact capabilities. With these starting privileges an attacker is able to cause a Partial impact to one or more of: Confidentiality, Integrity, or Availability. Alternatively, an attacker with Low privileges may have the ability to cause an impact only to non-sensitive resources.\"\n            },\n            H: {\n                l: 'High',\n                d: \"<b>Bad:</b> The attacker is authenticated with privileges that provide significant control over component resources. With these starting privileges an attacker can cause a Complete impact to one or more of: Confidentiality, Integrity, or Availability. Alternatively, an attacker with High privileges may have the ability to cause a Partial impact to sensitive resources.\"\n            }\n        },\n        UI: {\n            N: {\n                l: 'None',\n                d: \"<b>Worst:</b> The vulnerable system can be exploited without any interaction from any user.\"\n            },\n            R: {\n                l: 'Required',\n                d: \"<b>Bad:</b> Successful exploitation of this vulnerability requires a user to take one or more actions that may or may not be expected in a scenario involving no exploitation, or a scenario involving content provided by a seemingly trustworthy source.\"\n            }\n        },\n\n        S: {\n            C: {\n                l: 'Changed',\n                d: \"<b>Worst:</b> The attacker attacks the vulnerable authorization scope and has an impact to its environment. This causes a direct impact to another scope. Score Impact relative to the Changed Scope.\"\n            },\n            U: {\n                l: 'Unchanged',\n                d: \"<b>Bad:</b> The attacker attacks and impacts the environment that authorizes actions taken by the vulnerable authorization scope. Score Impact relative to the original authorization authority.\"\n            }\n        },\n        C: {\n            H: {\n                l: 'High',\n                d: \"<b>Worst:</b> There is total information disclosure, resulting in all resources in the affected scope being divulged to the attacker. Alternatively, access to only some restricted information is obtained, but the disclosed information presents a direct, serious impact to the affected scope (e.g. the attacker can read the administrator's password, or private keys in memory are disclosed to the attacker).\"\n            },\n            L: {\n                l: 'Low',\n                d: \"<b>Bad:</b> There is informational disclosure or a bypass of access controls. Access to some restricted information is obtained, but the attacker does not have control over what is obtained, or the scope of the loss is constrained. The information disclosure does not have a direct, serious impact on the affected scope.\"\n            },\n            N: {\n                l: 'None',\n                d: \"<b>Good:</b> There is no impact to confidentiality within the affected scope.\"\n            }\n        },\n        I: {\n            H: {\n                l: 'High',\n                d: \"<b>Worst:</b> There is a total compromise of system integrity. There is a complete loss of system protection, resulting in the entire system being compromised. The attacker is able to modify any files on the target system.\"\n            },\n            L: {\n                l: 'Low',\n                d: \"<b>Bad:</b> Modification of data is possible, but the attacker does not have control over the end result of a modification, or the scope of modification is constrained. The data modification does not have a direct, serious impact on the affected scope.\"\n            },\n            N: {\n                l: 'None',\n                d: \"<b>Good:</b> There is no impact to integrity within the affected scope.\"\n            }\n        },\n        A: {\n            H: {\n                l: 'High',\n                d: \"<b>Worst:</b> There is total loss of availability, resulting in the attacker being able to fully deny access to resources in the affected scope; this loss is either sustained (while the attacker continues to deliver the attack) or persistent (the condition persists even after the attack has completed). Alternatively, the attacker has the ability to deny some availability, but the loss of availability presents a direct, serious impact to the affected scope (e.g. the attacker cannot disrupt existing connections, but can prevent new connections; the attacker can repeatedly exploit a vulnerability that, in each instance of a successful attack, leaks a only small amount of memory, but after repeated exploitation causes a service to become completely unavailable).\"\n            },\n            L: {\n                l: 'Low',\n                d: \"<b>Bad:</b> There is reduced performance or interruptions in resource availability. The attacker does not have the ability to completely deny service to legitimate users, even through repeated exploitation of the vulnerability. The resources in the affected scope are either partially available all of the time, or fully available only some of the time, but the overall there is no direct, serious impact to the affected scope.\"\n            },\n            N: {\n                l: 'None',\n                d: \"<b>Good:</b> There is no impact to availability within the affected scope.\"\n            }\n        }\n    };\n    \n    this.bme = {};\n    this.bmgReg = {\n        AV: 'NALP',\n        AC: 'LH',\n        PR: 'NLH',\n        UI: 'NR',\n        S: 'CU',\n        C: 'HLN',\n        I: 'HLN',\n        A: 'HLN'\n    };\n    this.bmoReg = {\n        AV: 'NALP',\n        AC: 'LH',\n        C: 'C',\n        I: 'C',\n        A: 'C'\n    };\n    var s, f, dl, g, dd, l;\n    this.el = document.getElementById(id);\n    this.el.appendChild(s = e('style'));\n    s.innerHTML = '';\n    this.el.appendChild(f = e('form'));\n    f.className = 'cvssjs';\n    this.calc = f;\n    for (g in this.bg) {\n        f.appendChild(dl = e('dl'));\n        dl.setAttribute('class', g);\n        var dt = e('dt');\n        dt.innerHTML = this.bg[g];\n        dl.appendChild(dt);\n        for (s in this.bm[g]) {\n            dd = e('dd');\n            dl.appendChild(dd);\n            var inp = e('input');\n            inp.setAttribute('name', g);\n            inp.setAttribute('value', s);\n            inp.setAttribute('id', id + g + s);\n            inp.setAttribute('class', g + s);\n            inp.setAttribute('type', 'radio');\n            this.bme[g + s] = inp;\n            var me = this;\n            inp.onchange = function () {\n                me.setMetric(this);\n            };\n            dd.appendChild(inp);\n            l = e('label');\n            dd.appendChild(l);\n            l.setAttribute('for', id + g + s);\n            l.appendChild(e('i')).setAttribute('class', g + s);\n            l.appendChild(document.createTextNode(this.bm[g][s].l + ' '));\n            dd.appendChild(e('small')).innerHTML = this.bm[g][s].d;\n        }\n    }\n    f.appendChild(e('p'));\n    f.appendChild(dl = e('dl'));\n    dl.innerHTML = '<dt>Severity&sdot;Score&sdot;Vector</dt>';\n    dd = e('dd');\n    dl.appendChild(dd);\n    l = dd.appendChild(e('label'));\n    l.className = 'results';\n    l.appendChild(this.severity = e('span'));\n    this.severity.className = 'severity';\n    l.appendChild(this.score = e('span'));\n    this.score.className = 'score';\n    l.appendChild(document.createTextNode(' '));\n    l.appendChild(this.vector = e('a'));\n    this.vector.className = 'vector';\n    this.vector.innerHTML = 'CVSS:3.0/AV:_/AC:_/PR:_/UI:_/S:_/C:_/I:_/A:_';\n    \n    if (options.onsubmit) {\n        f.appendChild(e('hr'));\n        this.submitButton = f.appendChild(e('input'));\n        this.submitButton.setAttribute('type', 'submit');\n        this.submitButton.onclick = options.onsubmit;\n    }\n};\n\nCVSS.prototype.severityRatings = [{\n    name: \"None\",\n    bottom: 0.0,\n    top: 0.0\n}, {\n    name: \"Low\",\n    bottom: 0.1,\n    top: 3.9\n}, {\n    name: \"Medium\",\n    bottom: 4.0,\n    top: 6.9\n}, {\n    name: \"High\",\n    bottom: 7.0,\n    top: 8.9\n}, {\n    name: \"Critical\",\n    bottom: 9.0,\n    top: 10.0\n}];\n\nCVSS.prototype.severityRating = function (score) {\n    var i;\n    var severityRatingLength = this.severityRatings.length;\n    for (i = 0; i < severityRatingLength; i++) {\n        if (score >= this.severityRatings[i].bottom && score <= this.severityRatings[i].top) {\n            return this.severityRatings[i];\n        }\n    }\n    return {\n        name: \"?\",\n        bottom: 'Not',\n        top: 'defined'\n    };\n};\n\nCVSS.prototype.valueofradio = function(e) {\n    for(var i = 0; i < e.length; i++) {\n        if (e[i].checked) {\n            return e[i].value;\n        }\n    }\n    return null;\n};\n\n\nCVSS.prototype.calculate = function () {\n\n    var cvssVersion = \"3.0\";\n    var exploitabilityCoefficient = 8.22;\n    var scopeCoefficient = 1.08;\n\n    // Define associative arrays mapping each metric value to the constant used in the CVSS scoring formula.\n    var Weight = {\n        AV: {\n            N: 0.85,\n            A: 0.62,\n            L: 0.55,\n            P: 0.2\n        },\n        AC: {\n            H: 0.44,\n            L: 0.77\n        },\n        PR: {\n            U: {\n                N: 0.85,\n                L: 0.62,\n                H: 0.27\n            },\n            // These values are used if  is Unchanged\n            C: {\n                N: 0.85,\n                L: 0.68,\n                H: 0.5\n            }\n        },\n        // These values are used if Scope is Changed\n        UI: {\n            N: 0.85,\n            R: 0.62\n        },\n        S: {\n            U: 6.42,\n            C: 7.52\n        },\n        C: {\n            N: 0,\n            L: 0.22,\n            H: 0.56\n        },\n        I: {\n            N: 0,\n            L: 0.22,\n            H: 0.56\n        },\n        A: {\n            N: 0,\n            L: 0.22,\n            H: 0.56\n        }\n        // C, I and A have the same weights\n\n    };\n\n    var p;\n    var val = {}, metricWeight = {};\n    try {\n        for (p in this.bg) {\n            val[p] = this.valueofradio(this.calc.elements[p]);\n            if (typeof val[p] === \"undefined\" || val[p] === null) {\n                return \"?\";\n            }\n            metricWeight[p] = Weight[p][val[p]];\n        }\n    } catch (err) {\n        return err; // TODO: need to catch and return sensible error value & do a better job of specifying *which* parm is at fault.\n    }\n    metricWeight.PR = Weight.PR[val.S][val.PR];\n    //\n    // CALCULATE THE CVSS BASE SCORE\n    //\n    try {\n    var baseScore;\n    var impactSubScore;\n    var exploitabalitySubScore = exploitabilityCoefficient * metricWeight.AV * metricWeight.AC * metricWeight.PR * metricWeight.UI;\n    var impactSubScoreMultiplier = (1 - ((1 - metricWeight.C) * (1 - metricWeight.I) * (1 - metricWeight.A)));\n    if (val.S === 'U') {\n        impactSubScore = metricWeight.S * impactSubScoreMultiplier;\n    } else {\n        impactSubScore = metricWeight.S * (impactSubScoreMultiplier - 0.029) - 3.25 * Math.pow(impactSubScoreMultiplier - 0.02, 15);\n    }\n\n\n    if (impactSubScore <= 0) {\n        baseScore = 0;\n    } else {\n        if (val.S === 'U') {\n            baseScore = Math.min((exploitabalitySubScore + impactSubScore), 10);\n        } else {\n            baseScore = Math.min((exploitabalitySubScore + impactSubScore) * scopeCoefficient, 10);\n        }\n    }\n\n    baseScore = Math.ceil(baseScore * 10) / 10;\n    return baseScore;\n    } catch (err) {\n        return err;\n    }\n};\n\nCVSS.prototype.get = function() {\n    return {\n        score: this.score.innerHTML,\n        vector: this.vector.innerHTML\n    };\n};\n\nCVSS.prototype.setMetric = function(a) {\n    var vectorString = this.vector.innerHTML;\n    if (/AV:.\\/AC:.\\/PR:.\\/UI:.\\/S:.\\/C:.\\/I:.\\/A:./.test(vectorString)) {} else {\n        vectorString = 'AV:_/AC:_/PR:_/UI:_/S:_/C:_/I:_/A:_';\n    }\n    //e(\"E\" + a.id).checked = true;\n    var newVec = vectorString.replace(new RegExp('\\\\b' + a.name + ':.'), a.name + ':' + a.value);\n    this.set(newVec);\n};\n\nCVSS.prototype.set = function(vec) {\n    var newVec = 'CVSS:3.0/';\n    var sep = '';\n    for (var m in this.bm) {\n        var match = (new RegExp('\\\\b(' + m + ':[' + this.bmgReg[m] + '])')).exec(vec);\n        if (match !== null) {\n            var check = match[0].replace(':', '');\n            this.bme[check].checked = true;\n            newVec = newVec + sep + match[0];\n        } else if ((m in {C:'', I:'', A:''}) && (match = (new RegExp('\\\\b(' + m + ':C)')).exec(vec)) !== null) {\n            // compatibility with v2 only for CIA:C\n            this.bme[m + 'H'].checked = true;\n            newVec = newVec + sep + m + ':H';\n        } else {\n            newVec = newVec + sep + m + ':_';\n            for (var j in this.bm[m]) {\n                this.bme[m + j].checked = false;\n            }\n        }\n        sep = '/';\n    }\n    this.update(newVec);\n};\n\nCVSS.prototype.update = function(newVec) {\n    this.vector.innerHTML = newVec;\n    var s = this.calculate();\n    this.score.innerHTML = s;\n    var rating = this.severityRating(s);\n    this.severity.className = rating.name + ' severity';\n    this.severity.innerHTML = rating.name + '<sub>' + rating.bottom + ' - ' + rating.top + '</sub>';\n    this.severity.title = rating.bottom + ' - ' + rating.top;\n    if (this.options !== undefined && this.options.onchange !== undefined) {\n        this.options.onchange();\n    }\n};\n"
  },
  {
    "path": "BlackStone/calculadora_nist/index.html",
    "content": "<html>\n\n<head>\n\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <link rel=\"stylesheet\" type=\"text/css\" media=\"all\" href=\"cvss.css\">\n    <script src=\"cvss.js\"></script>\n    <style>\n        body {  \n            font-family: arial;\n            padding: 1em;\n        }\n        #footer {\n            font-size: x-small;\n        }\n\n        #footer, sH3 {\n            color: gray;\n        }\n@media screen and (min-width: 720px) {\n        #cvssboard {\n            width: 640px;\n        }\n}\n    </style>\n</head>\n\n<body>\n    <div id=\"cvssboard\"></div>\n    <script>\n        var c = new CVSS(\"cvssboard\", {\n            onchange: function() {\n                window.location.hash = c.get().vector;\n                c.vector.setAttribute('href', '#' + c.get().vector)\n            }\n        });\n        if (window.location.hash.substring(1).length > 0) {\n            c.set(decodeURIComponent(window.location.hash.substring(1)));\n        }\n    </script>\n\n</body>\n\n</html>"
  },
  {
    "path": "BlackStone/cerrar_sesion.php",
    "content": "<?php\n\n// Destruir todas las variables de sesión.\n$_SESSION = array();\n\n// Si se desea destruir la sesión completamente, borre también la cookie de sesión.\n// Nota: ¡Esto destruirá la sesión, y no la información de la sesión!\nif (ini_get(\"session.use_cookies\")) {\n    $params = session_get_cookie_params();\n    setcookie(session_name(), '', time() - 42000,\n        $params[\"path\"], $params[\"domain\"],\n        $params[\"secure\"], $params[\"httponly\"]\n    );\n}\n\n// Finalmente, destruir la sesión.\nsession_destroy();\n\nheader(\"Location: login.php\"); \n\n\n?>"
  },
  {
    "path": "BlackStone/clientes.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"client\";\n?>\n\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Customers\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown d-none d-lg-block\">\n                <a class=\"nav-link btn btn-success create-new-button\" id=\"createbuttonDropdown\" aria-expanded=\"false\" href=\"insertar_clientes.php\">+ <?php echo lang(\"Add client\");?> </a>\n              </li>\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"List of customers\");?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"#\"><?php echo lang(\"Customers\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"List\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <div class=\"row\" style=\"--bs-gutter-x: 1.9rem !important;\">\n              <form class=\"nav-link mt-md-0 d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" id=\"busqueda\" placeholder=\"<?php echo lang(\"Search customers\"); ?>\" style=\"color:white;\">\n              </form>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-lg-12 grid-margin stretch-card\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <h4 class=\"card-title\"><?php echo lang(\"Customers\");?></h4>\n                    </p>\n                    <div class=\"table-responsive\">\n                      <table class=\"table\" id=\"tabla_listado_cve\">\n                        <thead>\n                          <tr>\n                            <th><center><?php echo lang(\"Logo\");?></center></th>\n                            <th><?php echo lang(\"Name\");?></th>\n                            <th><?php echo lang(\"Web page\");?></th>\n                            <th></th>\n                            <th></th>\n                            <th></th>\n                          </tr>\n                        </thead>\n\n                        <?php\n\n                        $sentencia = \"select * from empresas order by id desc\";    \n                        $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de conexión en tabla empresas\");\n\n                        //vamos a recorrer la consulta y guardar los datos \n                        while($fila= mysqli_fetch_array($consulta)){\n                                $id=$fila['id'];\n                                $nombre=htmlspecialchars($fila['nombre'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                                $web=htmlspecialchars($fila['web'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                                $dominio_correo=htmlspecialchars($fila['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                                $logo=$fila['logo'];\n\n                                if($logo > ''){\n                                  $logo_listado = \"<img src='\".$logo.\"'>\";\n                                }else{\n                                  $logo_listado = \"<img src='logos_clientes/bksnologo.jpg'>\";\n                                }\n\n                                if($logo == \"logos_clientes/\"){\n                                  $logo_listado = \"<img src='logos_clientes/bksnologo.jpg'>\";\n                                }\n                         \n                        ?>\n\n                        <tbody>\n                          <tr>\n                            <td><center><?php echo $logo_listado ?></center></td>\n                            <td><?php echo $nombre ?></td>\n                            <td><?php echo $web ?></td>\n                            <td><?php echo $dominio_correo ?></td>\n                            <td><a href=\"editar_clientes.php?id=<?php echo $id ?>\"><i class=\"mdi mdi-eye\" style=\"font-size:20px\"></i></a></td>\n                            <td><a href=\"eliminar_cliente.php?id=<?php echo $id ?>\"><i class=\"mdi mdi-close-circle-outline\" style=\"color:red; font-size:20px\"></i></a></td>\n                          </tr>\n                          <?php\n                            }\n                          ?>\n                        </tbody>\n                      </table>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            \n          </div>\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/conexion.php",
    "content": "<?php\n\n$host = \"localhost\";\n$user = \"root\";\n$pass = \"\";\n$basedatos = \"blackstone\";\n$conexion = mysqli_connect($host, $user, $pass, $basedatos)\nor die(\"Error al conectar a la base de datos\");\n// UTF-8 conjunto de caracteres por defecto para conexión MySQL\nmysqli_query ($conexion, \"SET NAMES 'utf8'\");\n  \n?>\n"
  },
  {
    "path": "BlackStone/control_sesion/control_usuarios.php",
    "content": "<?php\n\ninclude(\"../conexion.php\");\n\n$usuario = $_POST['usuario'];\n$password = $_POST['pass'];\n$idioma = $_POST['idioma'];\n\n$usuario_scaped = htmlspecialchars($usuario, ENT_QUOTES, 'UTF-8');\n$password_scaped = htmlspecialchars($password, ENT_QUOTES, 'UTF-8');\n\n//vamos a sacar la contraseña de usuario\n$sentencia_user = \"SELECT * FROM `usuarios` WHERE nombre='\".$usuario_scaped.\"'\";   \n\n$consulta = mysqli_query($conexion, $sentencia_user) or die(\"Error de Consulta\");\n\n//vamos a recorrer la consulta y guardar los datos \nwhile($fila= mysqli_fetch_array($consulta)){\n\n    $contra=$fila['contra'];\n\n    //comprobamos si el usuario exsite y si existe que tenga esa contraseña\n    if(password_verify($password_scaped,$contra)){\n        session_start();\n        $_SESSION['login']=\"SI\";\n        $_SESSION['acceso']= time();\n        $_SESSION['idioma'] = $idioma;\n\n        header(\"Location: ../index.php\");\n    }else {\n        header(\"Location: ../login.php?err=si\");\n    }\n}\n\nif($usuario == \"\" || $password == \"\"){\n\n    header(\"Location: ../login.php?err=si\");\n}\n\n?>      \n"
  },
  {
    "path": "BlackStone/control_sesion/seguridad.php",
    "content": "<?php\n   \n\n    session_start();\n    if($_SESSION['login'] != \"SI\"){\n\n        header(\"Location: login.php\"); \n \n    }else{\n\n        $fechaguardada = $_SESSION['acceso'];\n        $ahora = time();\n        $tiempotranscurrido = $ahora-$fechaguardada;\n\n    if ($tiempotranscurrido >= 3000) {//tiempo de sesión de 5 minutos\n            session_destroy();\n            header(\"Location: login.php\");\n        }else{\n            $_SESSION['acceso'] = $ahora;\n        }\n    }\n?>  \n"
  },
  {
    "path": "BlackStone/editar_clientes.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"vulnerabilidades\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Companies\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n          <?php\n\n              $sentencia = \"select * from empresas where id=\".$id_url;    \n              $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n              //vamos a recorrer la consulta y guardar los datos \n              while($fila= mysqli_fetch_array($consulta)){\n                $id=$fila['id'];\n                $nombre=htmlspecialchars($fila['nombre'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                $web=htmlspecialchars($fila['web'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                $logo=$fila['logo'];\n                $logo_last=$fila['logo'];\n\n                if($logo > ''){\n                  \n                }else{\n                  $logo = \"logos_clientes/bksnologo.jpg\";\n                }\n\n                if($logo == \"logos_clientes/\"){\n                  $logo = \"logos_clientes/bksnologo.jpg\";\n                }\n\n              }\n              \n            ?>  \n\n            <div class=\"page-header\">\n              <?php echo $wich; ?>\n              <h3 class=\"page-title\"> <?php echo lang(\"Edit company\"); echo \" '\".$nombre.\"'\"?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"clientes.php\"><?php echo lang(\"Companies\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Edit company\");?></li>\n                </ol>\n              </nav>\n            </div>  \n\n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n\n                    <form class=\"form-sample\" form action=\"\" method=\"post\" enctype=\"multipart/form-data\">\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Name\");?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"nombre\" name=\"nombre\" placeholder=\"<?php echo lang(\"Name\");?>\" value=\"<?php echo $nombre?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\">Web</label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"web\" name=\"web\" placeholder=\"Web\" value=\"<?php echo $web?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n\n                        <div class=\"col-sm-12\">\n                          <h2>Logo</h2>\n                            <div class=\"form-group\">\n                                <img src=\"<?php echo $logo ?>\" style=\"width:250px; border-radius: 15px;\">\n                            </div>\n                        </div>\n                        <div class=\"col-sm-9\">\n                            <div class=\"form-group\">\n                                <input id=\"imagen\" name=\"imagen\" size=\"30\" type=\"file\">\n                            </div>\n                        </div>\n                        \n                      </div>\n                      \n                      <input type=\"submit\" class=\"btn btn-block bg-gradient-success mb-2 col-lg-1 float-right\" id=\"boton2\" name=\"boton2\" value=\"<?php echo lang('Save'); ?>\" style=\"background-color: #4CAF50; color: white; border: none; padding: 10px 20px; font-size: 16px; border-radius: 5px; cursor: pointer; transition: background-color 0.3s ease;\">\n                    </form>\n\n                  </div>\n                </div>\n              </div>\n            </div>\n                      \n            </div>\n\n            <?php\n    \n            if (filter_input(INPUT_POST, 'boton2')) {\n    \t      \n              $nombre = htmlspecialchars($_POST['nombre'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              $web = htmlspecialchars($_POST['web'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              $nombre = $_POST['nombre'];\n              $nombre_img = $_FILES['imagen']['name'];\n\t      $nombreOriginal = $_FILES['imagen']['name'];\n              $nombreTemporal = $_FILES['imagen']['tmp_name'];\n              \n              \n              $file_extension = pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION);\n\n            //si tenemos una foto ya insertada la eliminamos\n            if ($logo_last > '' && $nombreOriginal > '') {\n            \n            // Comprobar si la extensión es xml\n            if (strtolower($file_extension) == 'png') {\n                \n                //echo \"Image ok.\";\n            } else {\n                \n                echo \"<script>alert('Only PNG images.')</script>\";\n                exit;\n            }\n            \n            unlink($logo_last);   \n            \n                \n            // Obtener la extensión del archivo\n            $extension = pathinfo($nombreOriginal, PATHINFO_EXTENSION);\n\n            // Generar un nuevo nombre para la imagen\n            $nuevoNombre = uniqid(bin2hex(openssl_random_pseudo_bytes(10)), true).\".\".$extension;\n            \n            // Ruta donde se guardará la imagen\n            $rutaDestino = 'logos_clientes/';\n\n            // Mover la imagen al directorio de destino con el nuevo nombre\n            //move_uploaded_file($nombreTemporal, $rutaDestino);\n            move_uploaded_file($_FILES['imagen']['tmp_name'],$rutaDestino.$nuevoNombre);\n        }\n\n\t      $logo = $rutaDestino.$nuevoNombre;\n\n              //en el caso de que no se inserte una foto nueva que no se altere el parametro en la BBBDD\n              if($nombre_img == \"\" || $nombre_img == \"null\"){\n\n              $sentencia = \"UPDATE `empresas` SET `nombre`='$nombre',`web`='$web' WHERE id=\".$id_url.\";\";\n              $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n\n              }else{\n                $sentencia = \"UPDATE `empresas` SET `nombre`='$nombre',`web`='$web', `logo`='$logo' WHERE id=\".$id_url.\";\";\n                $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n              }\n\n              if (mysqli_affected_rows($conexion)!=0) {\n                  echo \"<script>alert('Saved')</script>\";\n                 \n              }\n               echo '<script type=\"text/javascript\">\n\t\twindow.location.href = \"clientes.php\";\n\t      </script>';\n\n            }\n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/editar_informe.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"reports\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Reports\");?></title>\n    <style>\n        .contenedor {\n          width: 300px;\n          margin: 20px auto;\n          border: 1px solid #ccc;\n          padding: 10px;\n        }\n\n        #mostrar {\n          display: none;\n        }\n\n        #contenido {\n          display: none;\n        }\n\n        #mostrar:checked ~ #contenido {\n          display: block;\n        }\n    </style>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n          <?php\n                $sentencia = \"select * from informes where id=\".$id_url;    \n                $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n                //vamos a recorrer la consulta y guardar los datos \n                while($fila= mysqli_fetch_array($consulta)){\n                  $id=$fila['id'];\n                  $nombre_doc=$fila['nombre_doc'];\n                  $id_empresa_auditada=$fila['id_empresa_auditada'];\n                  $vulnerabilidades=$fila['vulnerabilidades'];\n                  $estado=$fila['estado'];\n                  $fecha=$fila['fecha'];\n                  $recomendaciones=$fila['recomendaciones'];\n                  $propuestas=$fila['propuestas'];\n                  $conclusiones0=$fila['conclusiones'];\n\n                  $sentencia_empresa = \"select * from empresas where id=\".$id_empresa_auditada;\n                  $consulta_empresa = mysqli_query($conexion, $sentencia_empresa) or die(\"Error de Consulta empresas\");\n\n                  //vamos a recorrer la consulta y guardar los datos\n                  while($fila= mysqli_fetch_array($consulta_empresa)){\n                      $id_empresa=$fila['id'];\n                      $nombre_empresa=$fila['nombre'];\n                      \n                      $empresa_auditada_seleccionada= \"<option value=\".$id_empresa.\">\".$nombre_empresa.\"</option>\";\n                  }\n                }\n            ?> \n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Edit report\"); echo \" \".\"'\".$nombre_doc.\"'\"?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"informes.php\"><?php echo lang(\"Reports\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Edit report\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <div class=\"row\">\n              \n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <form class=\"form-sample\" form action=\"\" method=\"post\">\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Document name\"); ?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"nombre_doc\" name=\"nombre_doc\" value=\"<?php echo $nombre_doc ?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Customer name\");?></label> \n                            <div class=\"col-sm-8 col-8\">\n                              <select class=\"form-control\" id=\"id_empresa_auditada\" style=\"color:white\" name=\"id_empresa_auditada\" required>\n                                <?php echo $empresa_auditada_seleccionada ?>\n                                <?php \n                        \n                                  $sentencia_empresa = \"select * from empresas\";\n                                  $consulta_empresa = mysqli_query($conexion, $sentencia_empresa) or die(\"Error de Consulta empresas\");\n\n                                  //vamos a recorrer la consulta y guardar los datos\n                                  while($fila= mysqli_fetch_array($consulta_empresa)){\n                                      $id=$fila['id'];\n                                      $nombre=$fila['nombre'];\n                                      \n                                      echo \"<option value=\".$id.\">\".$nombre.\"</option>\";\n                                  }\n                                ?>\n                              </select>\n                            </div>\n                            <label class=\"col-sm-1 col-1 col-form-label\"><i class=\"mdi mdi-format-line-spacing fs-5\"></i></label> \n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\" style=\"color:white;\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Deadline\"); ?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"date\" class=\"form-control\" id=\"fecha\" name=\"fecha\" style=\"color:white;\" value=\"<?php echo $fecha?>\">\n                            </div>\n                          </div>\n                        </div>\n\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"State\");?></label> \n                            <div class=\"col-sm-8 col-8\">\n                              <select class=\"form-control\" id=\"estado\" style=\"color:white\" name=\"estado\">\n                                <option value=\"<?php echo $estado ?>\"><?php echo lang($estado); ?></option>\n                                <option value=\"Terminado\"><?php echo lang(\"Terminado\"); ?></option>\n                                <option value=\"En proceso\"><?php echo lang(\"En proceso\"); ?></option>\n                              </select>\n                            </div>\n                            <label class=\"col-sm-1 col-1 col-form-label\"><i class=\"mdi mdi-format-line-spacing fs-5\"></i></label> \n                          </div>\n                        </div>\n\n                        <div class=\"col-md-12\" style=\"width:97%\">\n                          <div class=\"form-group row\">\n                            <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Conclusions\");?></label>\n                            <textarea class=\"form-control m-3 text-white\" name=\"conclusiones\" id=\"conclusiones\" style=\"height:200px;\"><?php echo $conclusiones0 ?></textarea>\n                          </div>\n                        </div>\n\n                      </div>\n                      <button type=\"submit\" name=\"guardar_cambios_informe\" id=\"guardar_cambios_informe\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                      <a type=\"button\" href=\"gen_word_tecnico.php?id=<?php echo $id_url ?>\" target=\"_blank\" class=\"btn btn-info me-2\"><?php echo lang(\"Overview report\"); ?>&nbsp;<i class=\"mdi mdi-file-word-box\" style=\"font-size:13px\"></i></a>\n                    </form>\n                    <hr>\n                    \n                    <!--AÑADIMOS LOS OBJETIVOS DE LA AUDITORÍA-->\n                    <div class=\"row\">\n                      <div class=\"col-md-12\">\n                      <label class=\"page-title pb-3\"><?php echo lang(\"Objectives\"); ?></label>\n                      <form id=\"form_interna\" action=\"\" method=\"post\">\n\n                        <div class=\"row\">\n\n                        <?php\n                          $sentencia = \"select * from scope where id_informe=\".$id_url;    \n                          $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n                          $contador_java = 0;\n\n                          //vamos a recorrer la consulta y guardar los datos \n                          while($fila= mysqli_fetch_array($consulta)){\n\n                            $id_scope=$fila['id'];\n                            $url_scope=$fila['url'];\n                            $orden_scope=$fila['orden'];\n                            $texto_vulns= lang(\"Vulnerabilities associated with\");\n                            \n                            echo '<style> #mostrar'.$contador_java.' {display: none;} #contenido'.$contador_java.' {display: none;} #mostrar'.$contador_java.':checked ~ #contenido'.$contador_java.' {display: block;} </style>';\n                            \n                            echo '\n                                <div class=\"col-sm-1 d-none\">\n                                    <div class=\"form-group\">\n                                        <input type=\"text\" class=\"form-control\" value=\"'.$id_scope.'\" name=\"id\">\n                                    </div>\n                                </div>\n                                <div class=\"col-sm-4\">\n                                    <div class=\"form-group\">\n                                        <span type=\"text\" class=\"form-control\" style=\"color:white; font-size: 17px;\">'.$url_scope.'</span>\n                                    </div>\n                                </div>\n                                <div class=\"col-sm-3\">\n                                  <div class=\"form-group d-flex\">\n                                      <a type=\"submit\" class=\"btn btn-success\" href=\"editar_scope.php?id='.$id_url.'\" style=\"padding-top: 10px;\">'.lang(\"Edit\").'</a>\n                                      &nbsp;&nbsp;  \n                                      <button type=\"submit\" class=\"btn btn-danger\" name=\"eliminar_objetivo\" value=\"'.$id_scope.'\" style=\"height:38px;\">'.lang(\"Remove\").'</button>\n                                  </div>\n                                </div>\n                                 \n                                <div class=\"col-sm-12\">\n                                  \n                                    <input type=\"checkbox\" id=\"mostrar'.$contador_java.'\">\n                                    <label for=\"mostrar'.$contador_java.'\" style=\"border: 1px white solid; padding: 10px; border-radius: 7px;\">\n                                      <span style=\"font-size:15px;\">'.lang(\"Manage vulnerabilities\").'</span>\n                                    </label>\n\n                                    <div class=\"col-sm-12\" id=\"contenido'.$contador_java.'\" style=\"background-color:#0f1015; border-radius:10px; padding:15px; margin-top: 15px;\">\n                                      \n                                    <div class=\"row\">\n                                      <div class=\"col-md-12\">\n                                        <label class=\"page-title pb-3\">'.$texto_vulns.' '.$url_scope.':</label>\n                                      </div>\n\n                                      <center>\n                                      <table class=\"table table-bordered\" style=\"width:700px;\">\n                                      \n                                      </tbody>';\n\n                                      $sentencia_vulns_asset = \"select * from scope_vulnerabilidades where id_scope=\".$id_scope;    \n                                      $consulta_vulns_asset = mysqli_query($conexion, $sentencia_vulns_asset) or die(\"Error de Consulta\");\n\n                                      //vamos a recorrer la consulta y guardar los datos \n                                      while($fila_vulns_asset = mysqli_fetch_array($consulta_vulns_asset)){\n\n                                        $id_vuln_scope = $fila_vulns_asset['id'];\n                                        $nombre=$fila_vulns_asset['nombre'];\n                                        $descripcion=htmlspecialchars($fila_vulns_asset['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                                        $nivel=$fila_vulns_asset['nivel'];\n        \n                                        if($nivel == 1){\n                                            $nivel = '<label class=\"badge badge-success\">'.lang('Low').'</label>';\n                                        }else if ($nivel == 2){\n                                          $nivel = '<label class=\"badge badge-warning\">'.lang('Medium').'</label>';\n                                        }else if ($nivel == 3){\n                                          $nivel = '<label class=\"badge badge-danger\">'.lang('High').'</label>';\n                                        }else if ($nivel == 4){\n                                          $nivel = '<label class=\"badge badge-info\">'.lang('Very High').'</label>';\n                                        }\n                                        $descripcion = substr($descripcion, 0, 90);\n\n                                        echo'\n                                          <tr>\n                                            <td class=\"col-md-1\">'.$nombre.'</td>\n                                            <td>'.$descripcion.'...</td>\n                                            <td><center>'.$nivel.'</center></td>\n                                            <td><a href=\"editar_vulnerabilidad_scope.php?id='.$id_vuln_scope.'\" target=\"_blank\"><i class=\"mdi mdi-border-color\" style=\"font-size:20px\"></i></a></td>\n                                            <td><a href=\"eliminar_vulnerabilidad_scope.php?id='.$id_vuln_scope.'='.$id_url.'\"><i class=\"mdi mdi-close-circle-outline\" style=\"color:red; font-size:20px\"></i></a></td>\n                                          </tr>';\n                                      }\n\n                                        echo'\n                                          </tbody>\n                                        </table>\n                                      </center>\n                                    </div>\n\n                                    <div class=\"row\">\n                                      <div class=\"col-md-12\">\n                                          <label class=\"page-title pb-3\">';\n\n                                          echo lang('Vulnerabilities');\n                                          \n                                          echo'\n                                            </label>\n                                            <input type=\"text\" class=\"form-control\" id=\"busqueda_'.$id_scope.'\" placeholder=\"'.lang(\"Search Vulnerabilities...\").'\" style=\"color:white;\">\n                                          <br>\n                                        <div class=\"card\" style=\"overflow:scroll; height:420px\">';\n                                        ?>\n                                        \n                                            <table class=\"table table-bordered\" id=\"tabla_listado_<?php echo $id_scope; ?>\">\n                                              <thead>\n                                                <tr>\n                                                  <th><center><?php echo lang(\"Add\"); ?></center></th>\n                                                  <th><?php echo lang(\"Name\"); ?></th>\n                                                  <th><?php echo lang(\"Description\"); ?></th>\n                                                  <th><center><?php echo lang(\"Criticality\");?></center></th>\n                                                </tr>\n                                              </thead>\n                                            \n                                            <?php\n\n                                              $sentencia_vulns = \"select * from vulnerabilidades\";    \n                                              $consulta_vulns = mysqli_query($conexion, $sentencia_vulns) or die(\"Error de Consulta\");\n\n                                              //vamos a recorrer la consulta y guardar los datos \n                                              while($fila_vulns = mysqli_fetch_array($consulta_vulns)){\n\n                                                    $id=$fila_vulns['id'];\n                                                    $nombre=$fila_vulns['nombre'];\n                                                    $descripcion=htmlspecialchars($fila_vulns['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                                                    $nivel=$fila_vulns['nivel'];\n                    \n                                                    if($nivel == 1){\n                                                        $nivel = '<label class=\"badge badge-success\">'.lang('Low').'</label>';\n                                                    }else if ($nivel == 2){\n                                                      $nivel = '<label class=\"badge badge-warning\">'.lang('Medium').'</label>';\n                                                    }else if ($nivel == 3){\n                                                      $nivel = '<label class=\"badge badge-danger\">'.lang('High').'</label>';\n                                                    }else if ($nivel == 4){\n                                                      $nivel = '<label class=\"badge badge-info\">'.lang('Very High').'</label>';\n                                                    }\n\n                                                ?>\n                                              <tbody>\n                                                <tr>\n                                                  <td><center><input type=\"checkbox\" name=\"vuln[]\" value=\"<?php echo $id; ?>\"></input></center></td>\n                                                  <td class=\"col-md-1\"><?php echo $nombre;?></td>\n                                                  <td><?php echo substr($descripcion, 0, 120);?></td>\n                                                  <td><center><?php echo $nivel;?></center></td>\n                                                </tr>\n                                                <?php\n                                                  }\n                                                ?>\n                                              </tbody>\n                                            </table>\n                                     \n                                      <?php \n\n                                      $insertar_vulns = lang(\"Add vulns\");\n\n                                        echo '\n                                        </div>\n                                        <br><button type=\"submit\" class=\"btn btn-success\" id=\"insertar_vuln_scope\" name=\"insertar_vuln_scope\" value=\"'.$id_scope.'\">'.$insertar_vulns.'</button>\n                                      </div>\n                                    </div>\n                                    </div><br><br>\n                                </div>\n                                ';\n\n                                $contador_java ++;\n\n                          }\n                        ?>\n                            <hr>\n                            <label class=\"page-title pb-3\"><?php echo lang(\"Add objectives\"); ?></label>\n\n                            <div class=\"col-sm-4\">\n                                <div class=\"form-group\">\n                                    <input type=\"text\" class=\"form-control\" value=\"https://www.example.com\" name=\"url\" style=\"color:white\">\n                                </div>\n                            </div>\n                            <div class=\"col-sm-3\">\n                                <div class=\"form-group d-flex\">\n                                    <input type=\"submit\" class=\"btn btn-primary\" name=\"añadir_objetivo\" value=\"<?php echo lang(\"Add objective\"); ?>\" style=\"height: 38px;\">\n                                </div>\n                            </div>\n                        </div>\n\n                      </form>\n                      </div>\n                    </div>\n\n                     <div class=\"row\">\n                        <div class=\"col-md-12\">\n                      </div>\n                    </div> \n                    \n                  </div>\n                </div>\n\n              </div>\n            </div>\n          \n            <?php\n\n                if (isset($_POST['guardar_cambios_informe'])){\n                    \n                  $nombre_doc = $_POST['nombre_doc'];\n                  $id_empresa_auditada = $_POST['id_empresa_auditada'];\n                  $fecha = $_POST['fecha'];\n                  $estado = $_POST['estado'];\n                  $conclusiones = $_POST['conclusiones'];\n\n                  $sentencia = \"UPDATE `informes` set `nombre_doc`='$nombre_doc',\";\n                  $sentencia .=\"`id_empresa_auditada`='$id_empresa_auditada',\";\n                  $sentencia .=\"`estado`='$estado', `fecha`='$fecha',`conclusiones`='$conclusiones' WHERE id=\".$id_url.\";\";\n\n                  $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de Consulta\");\n\n                  if (mysqli_affected_rows($conexion)!=0) {\n\n                    echo '<script type=\"text/JavaScript\"> location.reload(); </script>';\n                  } \n                }\n\n                if (isset($_POST['insertar_vuln_scope'])){\n\n                  $id_scope = $_POST['insertar_vuln_scope'];\n\n                   foreach($_POST['vuln'] as $selected){\n                       $vulnerabilidades .= $selected.\",\";\n\n                       //vamos a comprobar que tipo de vulnerabilidad es y a insertarla en la tabla (la zona del informe, si es interna, externa, wifi...)\n                       $sentencia_vuln_1 = \"select * from vulnerabilidades where id=\".$selected;\n\n                       \n                       $consulta_vuln_1 = mysqli_query($conexion, $sentencia_vuln_1) or die(\"Error de Consulta\");\n          \n                       //vamos a recorrer la consulta y guardar los datos\n                       while($fila_vuln_asset = mysqli_fetch_array($consulta_vuln_1)){\n                           $id_vulnerabilidad=$fila_vuln_asset['id'];\n                           $nombre=$fila_vuln_asset['nombre'];\n                           $descripcion=$fila_vuln_asset['descripcion'];\n                           $solucion=$fila_vuln_asset['solucion'];\n                           $nivel=$fila_vuln_asset['nivel'];\n                       }\n\n                       //sacamos el último orden de la tabla de este tipo de auditoría\n                        $sentencia_ultimo_id = \"SELECT id FROM scope_vulnerabilidades ORDER BY id DESC LIMIT 1;\" ;\n                        $consulta_ultimo_id = mysqli_query($conexion, $sentencia_ultimo_id)or die($sentencia);\n\n                        while($fila_id = mysqli_fetch_array($consulta_ultimo_id)) {\n                            $ultimo_id = $fila_id['id'];\n                        }\n\n                        $ultimo_id_scope = $ultimo_id +=1;\n          \n                       $sentencia_insertar_vuln_asset = \"INSERT INTO `scope_vulnerabilidades`(`id`, `id_vulnerabilidad`, `nombre`, `descripcion`, `nivel`, `id_scope`, `solucion`)\";\n                       $sentencia_insertar_vuln_asset .= \"VALUES ('$ultimo_id_scope','$id_vulnerabilidad','$nombre','$descripcion','$nivel', '$id_scope', '$solucion')\";\n          \n                       $consulta = mysqli_query($conexion, $sentencia_insertar_vuln_asset)or die(\"Error de Consulta\");\n          \n                       if (mysqli_affected_rows($conexion)!=0) {\n                           echo '<script>window.location.href = \"editar_informe.php?id='.$id_url.'\";</script>';\n                       }\n                       \n                   }\n               }\n\n                //Añadir nuevos scopes al informe\n                if (isset($_POST['añadir_objetivo'])){\n\n                  $url = $_POST['url'];\n\n                  //sacamos el último orden de la tabla de este tipo de auditoría\n                  $sentencia_ultimo_orden = \"SELECT orden FROM scope ORDER BY orden DESC LIMIT 1;\" ;\n                  $consulta_ultimo_orden = mysqli_query($conexion, $sentencia_ultimo_orden)or die($sentencia);\n\n                  while($fila_orden = mysqli_fetch_array($consulta_ultimo_orden)) {\n                      $orden = $fila_orden['orden'];\n                  }\n\n                  $ultimo_orden = $orden +=1;\n\n                  //insertamos datos en scope\n                  $sentencia_scope = \"INSERT INTO `scope` (`url`, `id_informe`, `orden`)\";\n                  $sentencia_scope .= \" VALUES ('$url', '$id_url', '$ultimo_orden')\";\n\n                  $consulta_scope = mysqli_query($conexion, $sentencia_scope) or die(\"error\");\n\n                  if (mysqli_affected_rows($conexion)!=0) {\n                      echo \"<script>alert('Saved')</script>\";\n                      echo '<script>window.location.href = \"editar_informe.php?id='.$id_url.'\";</script>';\n                  }\n              }\n\n              //Editar scopes al informe\n              if (isset($_POST['eliminar_objetivo'])){\n\n                  $id_scope = $_POST['eliminar_objetivo'];\n          \n                  $sentencia = \"DELETE FROM scope WHERE id=\".$id_scope;\n                  $consulta = mysqli_query($conexion, $sentencia)or die($sentencia);\n\n                  $sentencia = \"DELETE FROM scope_vulnerabilidades WHERE id_scope=\".$id_scope;\n                  $consulta = mysqli_query($conexion, $sentencia)or die($sentencia);\n\n                  echo \"<script>alert('Saved')</script>\";\n                  echo '<script>window.location.href = \"editar_informe.php?id='.$id_url.'\";</script>';\n              }\n    \n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <?php\n          $sentencia = \"select * from scope where id_informe=\".$id_url;    \n          $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n          //vamos a recorrer la consulta y guardar los datos \n          while($fila= mysqli_fetch_array($consulta)){\n\n            $id_scope=$fila['id'];\n            \n            echo '\n                \n                <script>\n\n                $(document).ready(function(){\n                $(\"#busqueda_'.$id_scope.'\").keyup(function(){\n                _this = this;\n\n                $.each($(\"#tabla_listado_'.$id_scope.' tbody tr\"), function() {\n\n                    if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n                    $(this).hide();\n                    else\n                        $(this).show();\n                      });\n                  });\n                });\n                </script>\n\n                ';\n              }\n                ?>\n\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/editar_perfil.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"perfil\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Profile\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <?php include(\"nav_top.php\"); ?>\n\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Edit profile\"); ?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"vulnerabilidades.php\"><?php echo lang(\"Profile\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Edit profile\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            \n\n            <div class=\"row\">\n              \n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                  <form class=\"form-sample\" form action=\"\" method=\"post\" enctype=\"multipart/form-data\">\n                      <div class=\"row\">\n\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Change password\");?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"pass\" name=\"pass\"  value=\"\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n\n                      </div>\n                      <button type=\"submit\" name=\"submit\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                    </form>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <?php\n    \n            if (isset($_POST['submit'])){\n\n              $pass = htmlspecialchars($_POST['pass'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              $contra_hash = password_hash($pass, PASSWORD_DEFAULT);\n\n              $sentencia = \"UPDATE `usuarios` SET `contra`='$contra_hash' WHERE id=1\";\n              $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n\n              echo \"<script>alert('Saved')</script>\";\n            }\n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/editar_poc.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"reports\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n          <?php \n            $sentencia = \"select * from scope_vulnerabilidades where id=\".$id_url;    \n            $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n            //vamos a recorrer la consulta y guardar los datos \n            while($fila= mysqli_fetch_array($consulta)){\n              \n              $nombre=$fila['nombre'];\n            }\n          ?>\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Edit Vulnerability\"); echo \" '\".$nombre.\"'\"?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"vulnerabilidades.php\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Edit Vulnerability\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <?php\n                $sentencia_fotos = \"select * from pocs where id=\".$id_url;    \n                $consulta_fotos = mysqli_query($conexion, $sentencia_fotos) or die(\"Error de Consulta\");\n\n                //vamos a recorrer la consulta y guardar los datos \n                while($fila_fotos = mysqli_fetch_array($consulta_fotos)){\n\n                    $id_imagen=$fila_fotos['id'];\n                    $url_imagen=$fila_fotos['ruta'];\n                    $descripcion_imagen=$fila_fotos['descripcion'];\n                }\n            ?>    \n\n            <div class=\"row\">\n\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <form class=\"form-sample\" form action=\"\" method=\"post\">\n\n                    <div class=\"row\">\n                          <div class=\"col-sm-4\">\n                              <div class=\"form-group\">\n                                  <img src=\"<?php echo $url_imagen; ?>\" style=\"width:350px;\">\n                              </div>\n                          </div>\n                    </div><br>\n\n                      <div class=\"row\">\n                        <div class=\"form-group row\">\n                          <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Description\");?></label>\n                          <textarea class=\"form-control m-3 text-white\" name=\"descripcion\" id=\"descripcion\" required style=\"height:150px;\"><?php echo $descripcion_imagen; ?></textarea>\n                        </div>\n                      </div>\n                      \n                      <button type=\"submit\" name=\"submit\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                    </form>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n            <?php\n              if (isset($_POST['submit'])){\n                      \n                $descripcion = htmlspecialchars($_POST['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8'); \n              \n                $sentencia = \"UPDATE `pocs` SET `descripcion`='$descripcion'\";\n                $sentencia .= \"WHERE id=\".$id_url.\";\";\n            \n                $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n\n                if (mysqli_affected_rows($conexion)!=0) {\n                    echo \"<script>alert('Saved')</script>\";\n                    echo '<script type=\"text/JavaScript\"> location.reload(); </script>';\n                }\n              }\n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/editar_scope.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"reports\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Scope\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <?php include(\"nav_top.php\"); ?>\n\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Edit asset\"); ?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"editar_informe.php?id=<?php echo $id_url ?>\"><?php echo lang(\"Report\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Edit asset\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n\n                    <?php\n                        $sentencia = \"select * from scope where id_informe=\".$id_url.\" order by orden\";    \n                        $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n                            //vamos a recorrer la consulta y guardar los datos \n                            while($fila= mysqli_fetch_array($consulta)){\n\n                                $id_scope=$fila['id'];\n                                $url_scope=$fila['url'];\n                                $orden_scope=$fila['orden'];\n                                \n                                $nombre= lang(\"Name\");\n                                $orden= lang(\"Order\");\n\n                                echo '\n                                <form action=\"\" method=\"post\">\n                                    <div class=\"row\">\n                                        <div class=\"col-sm-1 d-none\">\n                                            <div class=\"form-group\">\n                                                <input type=\"text\" class=\"form-control\" value=\"'.$id_scope.'\" name=\"id\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"col-sm-3\">\n                                            <div class=\"form-group\">\n                                                <label class=\"col-sm-3 col-form-label\">'.$nombre.'</label>\n                                                <input type=\"text\" class=\"form-control\" value=\"'.$url_scope.'\" name=\"url\" style=\"color:white\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"col-sm-2\">\n                                            <div class=\"form-group\">\n                                                <label class=\"col-sm-3 col-form-label\">'.$orden.'</label>\n                                                <input type=\"text\" class=\"form-control\" value=\"'.$orden_scope.'\" name=\"orden\" style=\"color:white\">\n                                            </div>\n                                        </div>\n\n                                        <div class=\"col-sm-3\">\n                                            <div class=\"form-group d-flex\">\n                                                <button type=\"submit\" class=\"btn btn-success\" name=\"boton\" style=\"padding-top: 10px; margin-top: 35px;\">'.lang(\"Save\").'</button> \n                                            </div>\n                                        </div>\n                                    </div>\n                                </form>\n                                ';\n                            }\n                    ?>\n                        <a class=\"btn btn-primary\" href=\"editar_informe.php?id=<?php echo $id_url ?>\" name=\"boton\" style=\"padding-top: 10px; margin-top: 35px;\"><?php echo lang(\"Return\"); ?></a> \n                    </div>\n                </div>\n            </div>\n        </div>\n                        \n\n                    \n          <?php\n\n            if (isset($_POST['boton'])){\n\n                $id = $_POST['id'];\n                $url = $_POST['url'];\n                $orden = $_POST['orden'];\n\n                $sentencia = \"UPDATE `scope` SET `url`='$url', `orden`='$orden' WHERE id=\".$id;\n\n                $consulta = mysqli_query($conexion, $sentencia)or die($sentencia);\n\n                if (mysqli_affected_rows($conexion)!=0) {\n                    echo '<script>location.reload();</script>';\n                }\n            }\n\n          ?>\n            \n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/editar_vulnerabilidad_scope.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"reports\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n          <?php \n            $sentencia = \"select * from scope_vulnerabilidades where id=\".$id_url;    \n            $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n            //vamos a recorrer la consulta y guardar los datos \n            while($fila= mysqli_fetch_array($consulta)){\n              \n              $nombre=$fila['nombre'];\n            }\n          ?>\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Edit Vulnerability\"); echo \" '\".$nombre.\"'\"?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"vulnerabilidades.php\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Edit Vulnerability\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <?php\n                $sentencia = \"select * from scope_vulnerabilidades where id=\".$id_url;    \n                $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n                //vamos a recorrer la consulta y guardar los datos \n                while($fila= mysqli_fetch_array($consulta)){\n                  $id=$fila['id'];\n                  $nombre=$fila['nombre'];\n                  $descripcion=$fila['descripcion'];\n                  $solucion=$fila['solucion'];\n                  $nivel_num=$fila['nivel'];\n                  $esfuerzo=$fila['esfuerzo'];\n                  $seccion_auditoria=$fila['seccion_auditoria'];\n                  $recomendacion=$fila['recomendacion'];\n\n                  if($nivel_num == 1){\n                      $nivel = 'Low';\n                  }else if ($nivel_num == 2){\n                      $nivel = 'Medium';\n                  }else if ($nivel_num == 3){\n                      $nivel = 'High';\n                  }else if ($nivel_num == 4){\n                  $nivel = 'Very High';\n                  }\n\n                  if($esfuerzo == 1){\n                      $esfuerzo_desc = 'Quick Win';\n                  }else if($esfuerzo == 2){\n                      $esfuerzo_desc = 'Low';\n                  }else if($esfuerzo == 3){\n                    $esfuerzo_desc = 'Medium';\n                  }else if($esfuerzo == 4){\n                    $esfuerzo_desc = 'High';\n                  }else if($esfuerzo == 5){\n                    $esfuerzo_desc = 'Very High';\n                  }\n                  \n                }\n            ?>    \n\n            <div class=\"row\">\n              \n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <form class=\"form-sample\" form action=\"\" method=\"post\">\n\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Name\");?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"nombre\" name=\"nombre\" placeholder=\"<?php echo lang(\"Name\");?>\" value=\"<?php echo $nombre?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Criticality\");?></label> \n                            <div class=\"col-sm-8 col-8\">\n                              <select class=\"form-control\" id=\"exampleSelectGender\" style=\"color:white\" name=\"nivel\" required>\n                                <option value=\"<?php echo $nivel_num ?>\"><?php echo lang($nivel)?></option>\n                                <option value=\"1\"><?php echo lang(\"Low\");?></option>\n                                <option value=\"2\"><?php echo lang(\"Medium\");?></option>\n                                <option value=\"3\"><?php echo lang(\"High\");?></option>\n                                <option value=\"4\"><?php echo lang(\"Very High\");?></option>\n                              </select>\n                            </div>\n                            <label class=\"col-sm-1 col-1 col-form-label\"><i class=\"mdi mdi-format-line-spacing fs-5\"></i></label> \n                          </div>\n                        </div>\n                      </div>\n\n                      <br>\n                      <div class=\"row\">\n                        <div class=\"form-group row\">\n                          <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Description\");?></label>\n                          <textarea class=\"form-control m-3 text-white\" name=\"descripcion\" id=\"descripcion\" required style=\"height:150px;\"><?php echo $descripcion ?></textarea>\n                        </div>\n                      </div>\n                      <div class=\"row\">\n                        <div class=\"form-group row\">\n                          <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Solution\");?></label>\n                          <textarea class=\"form-control m-3 text-white\" name=\"solucion\" id=\"solucion\" required style=\"height:150px;\"><?php echo $solucion ?></textarea>\n                        </div>\n                      </div>\n                      <button type=\"submit\" name=\"submit\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                    </form>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n            <div class=\"row\">\n              \n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <form class=\"form-sample\" form action=\"\" method=\"post\" enctype=\"multipart/form-data\">\n                    <h3 class=\"page-title pb-5\"> <?php echo lang(\"Vulnerability images\"); ?> </h3>\n\n                    <?php\n                        $sentencia_fotos = \"select * from pocs where id_scope_vulnerabilidad=\".$id_url;    \n                        $consulta_fotos = mysqli_query($conexion, $sentencia_fotos) or die(\"Error de Consulta\");\n\n                        //vamos a recorrer la consulta y guardar los datos \n                        while($fila_fotos = mysqli_fetch_array($consulta_fotos)){\n\n                            $id_imagen=$fila_fotos['id'];\n                            $url_imagen=$fila_fotos['ruta'];\n                            $descripcion_imagen=$fila_fotos['descripcion'];\n                            $texto_boton=lang(\"Delete\");\n                            $texto_descripcion=lang(\"Description\");\n                            $texto_orden=lang(\"Order\");\n                            $orden_imagen=$fila_fotos['orden'];\n\n\n                            echo '\n                            <div class=\"row\">\n                                <div class=\"col-sm-4\">\n                                    <div class=\"form-group\">\n                                        <img src=\"'.$url_imagen.'\" style=\"width:350px;\">\n                                    </div>\n                                </div>\n\n                                <div class=\"col-sm-8\">\n                                  <textarea class=\"form-control text-white\" name=\"descripcion_poc\" id=\"descripcion_poc\" style=\"height:150px;\">'.$descripcion_imagen.'</textarea>\n                                </div>\n                            </div> \n                            <div class=\"row\">\n                                <div class=\"col-sm-3\">\n                                    <a href=\"editar_poc.php?id='.$id_imagen.'\" style=\"text-decoration: none;\" target=\"_blank\"> \n                                      <i class=\"mdi mdi-lead-pencil\" style=\"background-color: green; color: white; padding: 10px 20px; border: none; border-radius: 5px; text-align: center; font-size: 14px; cursor: pointer;\"></i>\n                                    </a>\n                                    <button type=\"submit\" class=\"btn btn-danger\" name=\"eliminar\" value=\"'.$id_imagen.'\" style=\"height: 35px;\">'.$texto_boton.'</button>\n                                </div>\n                            </div><br>\n                            ';\n                        }\n                    ?>\n                        <div class=\"row\">\n                            <hr>\n                            <form class=\"form-sample\" form action=\"\" method=\"post\" enctype=\"multipart/form-data\">\n                                <div class=\"col-sm-4 pt-5\">\n                                    <div class=\"form-group\">\n                                        <input id=\"imagen\" name=\"imagen\" type=\"file\">\n                                    </div>\n                                </div>\n                               \n                              <div class=\"form-group row\">\n                                <label for=\"col-sm-7 col-form-label\"><?php echo lang(\"Description\");?></label>\n                                <textarea class=\"form-control m-3 text-white\" name=\"descripcion_poc\" id=\"descripcion_poc\" style=\"height:150px;\"></textarea>\n                              </div>\n                      \n                                <div class=\"col-sm-3 pt-5\">\n                                    <div class=\"form-group d-flex\">\n                                        <button type=\"submit\" class=\"btn btn-success\" name=\"boton\" value=\"Añadir\" style=\"height: 35px;\"><?php echo lang(\"Add image\");?></button>\n                                    </div>\n                                </div>\n                            </form>\n                        </div>\n\n                    </form>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <?php\n    \n            if (isset($_POST['submit'])){\n              \n              $nombre = htmlspecialchars($_POST['nombre'], ENT_QUOTES | ENT_HTML5, 'UTF-8');       \n              $nivel = htmlspecialchars($_POST['nivel'], ENT_QUOTES | ENT_HTML5, 'UTF-8');      \n              $descripcion = htmlspecialchars($_POST['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8'); \n              $solucion = htmlspecialchars($_POST['solucion'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n            \n              $sentencia = \"UPDATE `scope_vulnerabilidades` SET `nombre`='$nombre',`descripcion`='$descripcion',`solucion`='$solucion',\";\n              $sentencia .= \" `nivel`='$nivel' WHERE id=\".$id_url.\";\";\n          \n              $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n\n              if (mysqli_affected_rows($conexion)!=0) {\n                  echo \"<script>alert('Saved')</script>\";\n                  echo '<script type=\"text/JavaScript\"> location.reload(); </script>';\n              }\n            }\n\n            if (isset($_POST['eliminar'])){\n\n                $id_imagen = $_POST['eliminar'];\n\n                //sacamos la url de la imagen para eliminarla\n                $sentencia_url_imagen = \"SELECT * FROM pocs where id=\".$id_imagen;\n                $consulta_url_imagen = mysqli_query($conexion, $sentencia_url_imagen)or die($sentencia);\n\n                while($fila_url_imagen = mysqli_fetch_array($consulta_url_imagen)) {\n                    $ruta_url_imagen = $fila_url_imagen['ruta'];\n                }\n\n                //eliminamos la imagen\n                unlink($ruta_url_imagen);\n\n                //eliminamos el registro de la base de datos\n                $sentencia = \"DELETE FROM pocs WHERE id=\".$id_imagen;\n                $consulta = mysqli_query($conexion, $sentencia)or die($sentencia);\n        \n                if (mysqli_affected_rows($conexion)!=0) {\n                    echo '<script>location.reload();</script>';\n                }\n            }\n\n            //funcionalidad para añadir nuevos scopes en cada sección de la auditoría.\n            if (isset($_POST['boton']) && ($_POST['boton'] == 'Añadir')){\n\n                $nombreOriginal = $_FILES['imagen']['name'];\n                $nombreTemporal = $_FILES['imagen']['tmp_name'];\n                $descripcion_poc = htmlspecialchars($_POST['descripcion_poc'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                \n                $file_extension = pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION);\n\t      \n\t        // Comprobar si la extensión es png\n\t\tif (strtolower($file_extension) == 'png') {\n\t\t  \n\t\t  echo \"Archivo subido correctamente.\";\n\t\t} else {\n\t\t    \n\t\t    echo \"<script>alert('Only PNG images.')</script>\";\n\t\t    exit;\n\t\t}\n\n                // Obtener la extensión del archivo\n                $extension = pathinfo($nombreOriginal, PATHINFO_EXTENSION);\n\n                // Generar un nuevo nombre para la imagen\n                $nuevoNombre = uniqid().'_'.$id_url.'.'.$extension;\n\n                // Ruta donde se guardará la imagen\n                $rutaDestino = 'elementos_poc/'.$nuevoNombre;\n\n                // Mover la imagen al directorio de destino con el nuevo nombre\n                move_uploaded_file($nombreTemporal, $rutaDestino);\n\n                //sacamos el último orden de la tabla de este tipo de auditoría\n                $sentencia_ultimo_orden = \"SELECT orden FROM pocs where id_scope_vulnerabilidad=\".$id_url.\" ORDER BY orden DESC LIMIT 1;\" ;\n                $consulta_ultimo_orden = mysqli_query($conexion, $sentencia_ultimo_orden)or die($sentencia);\n\n                while($fila_orden = mysqli_fetch_array($consulta_ultimo_orden)) {\n                    $orden = $fila_orden['orden'];\n                }\n\n                $ultimo_orden = $orden +=1; \n\n                //insertamos datos en scope\n                $sentencia_externa = \"INSERT INTO `pocs` (`ruta`, `id_scope_vulnerabilidad`, `orden`, `descripcion`)\";\n                $sentencia_externa .= \" VALUES ('$rutaDestino', '$id_url', '$ultimo_orden', '$descripcion_poc')\";\n\n                $consulta_externa = mysqli_query($conexion, $sentencia_externa) or die(\"error\");\n\n                echo \"<sript>alert('Saved')</script>\";\n                echo '<script>window.location.href = \"editar_vulnerabilidad_scope.php?id='.$id_url.'\";</script>';\n            }\n\n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/editar_vulnerabilidades.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"vulnerabilidades\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n          <?php \n            $sentencia = \"select * from vulnerabilidades where id=\".$id_url;    \n            $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n            //vamos a recorrer la consulta y guardar los datos \n            while($fila= mysqli_fetch_array($consulta)){\n              \n              $nombre=$fila['nombre'];\n            }\n          ?>\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Edit Vulnerability\"); echo \" '\".$nombre.\"'\"?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"vulnerabilidades.php\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Edit Vulnerability\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <?php\n                $sentencia = \"select * from vulnerabilidades where id=\".$id_url;    \n                $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n                //vamos a recorrer la consulta y guardar los datos \n                while($fila= mysqli_fetch_array($consulta)){\n                  $id=$fila['id'];\n                  $nombre=$fila['nombre'];\n                  $descripcion=$fila['descripcion'];\n                  $solucion=$fila['solucion'];\n                  $nivel_num=$fila['nivel'];\n                  $esfuerzo=$fila['esfuerzo'];\n                  $seccion_auditoria=$fila['seccion_auditoria'];\n                  $recomendacion=$fila['recomendacion'];\n\n                  if($nivel_num == 1){\n                      $nivel = 'Low';\n                  }else if ($nivel_num == 2){\n                      $nivel = 'Medium';\n                  }else if ($nivel_num == 3){\n                      $nivel = 'High';\n                  }else if ($nivel_num == 4){\n                  $nivel = 'Very High';\n                  }\n\n                  if($esfuerzo == 1){\n                      $esfuerzo_desc = 'Quick Win';\n                  }else if($esfuerzo == 2){\n                      $esfuerzo_desc = 'Low';\n                  }else if($esfuerzo == 3){\n                    $esfuerzo_desc = 'Medium';\n                  }else if($esfuerzo == 4){\n                    $esfuerzo_desc = 'High';\n                  }else if($esfuerzo == 5){\n                    $esfuerzo_desc = 'Very High';\n                  }\n                  \n                }\n            ?>    \n\n            <div class=\"row\">\n              \n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <form class=\"form-sample\" form action=\"\" method=\"post\">\n\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Name\");?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"nombre\" name=\"nombre\" placeholder=\"<?php echo lang(\"Name\");?>\" value=\"<?php echo $nombre?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Criticality\");?></label> \n                            <div class=\"col-sm-8 col-8\">\n                              <select class=\"form-control\" id=\"exampleSelectGender\" style=\"color:white\" name=\"nivel\" required>\n                                <option value=\"<?php echo $nivel_num ?>\"><?php echo lang($nivel)?></option>\n                                <option value=\"1\"><?php echo lang(\"Low\");?></option>\n                                <option value=\"2\"><?php echo lang(\"Medium\");?></option>\n                                <option value=\"3\"><?php echo lang(\"High\");?></option>\n                                <option value=\"4\"><?php echo lang(\"Very High\");?></option>\n                              </select>\n                            </div>\n                            <label class=\"col-sm-1 col-1 col-form-label\"><i class=\"mdi mdi-format-line-spacing fs-5\"></i></label> \n                          </div>\n                        </div>\n                      </div>\n\n                      <br>\n                      <div class=\"row\">\n                        <div class=\"form-group row\">\n                          <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Description\");?></label>\n                          <textarea class=\"form-control m-3 text-white\" name=\"descripcion\" id=\"descripcion\" required style=\"height:150px;\"><?php echo $descripcion ?></textarea>\n                        </div>\n                      </div>\n                      <div class=\"row\">\n                        <div class=\"form-group row\">\n                          <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Solution\");?></label>\n                          <textarea class=\"form-control m-3 text-white\" name=\"solucion\" id=\"solucion\" required style=\"height:150px;\"><?php echo $solucion ?></textarea>\n                        </div>\n                      </div>\n                      <button type=\"submit\" name=\"submit\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                    </form>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n            <?php\n    \n            if (isset($_POST['submit'])){\n              \n              $nombre = htmlspecialchars($_POST['nombre'], ENT_QUOTES | ENT_HTML5, 'UTF-8');       \n              $nivel = htmlspecialchars($_POST['nivel'], ENT_QUOTES | ENT_HTML5, 'UTF-8');      \n              $descripcion = htmlspecialchars($_POST['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8'); \n              $solucion = htmlspecialchars($_POST['solucion'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              \n              $sentencia = \"UPDATE `vulnerabilidades` SET `nombre`='$nombre',`descripcion`='$descripcion',`solucion`='$solucion',\";\n              $sentencia .= \" `nivel`='$nivel' WHERE id=\".$id_url.\";\";\n          \n              $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n\n              if (mysqli_affected_rows($conexion)!=0) {\n                  echo \"<script>alert('Saved')</script>\";\n                  echo '<script type=\"text/JavaScript\"> location.reload(); </script>';\n              }\n            }\n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/eliminar_cliente.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"client\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Companies\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Delete company\"); echo \" \".$id_url?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"clientes.php\"><?php echo lang(\"Companies\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Delete company\");?></li>\n                </ol>\n              </nav>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <?php\n                    \n                    $sentencia = \"select * from empresas where id=\".$id_url;    \n      \t\t    $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n\t\t      //vamos a recorrer la consulta y guardar los datos \n\t\t      while($fila= mysqli_fetch_array($consulta)){\n\t\t\t $logo=$fila['logo'];\n\t\t      }\n                \n                      $sentencia = \"DELETE FROM `empresas` WHERE id=\".$id_url;    \n                      $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n                      \n                      unlink($logo);\n                      \n                    ?>\n                    <h1><?php echo lang(\"Company removed from the system\")?></h1>\n                    <a class=\"nav-link btn btn-info col-lg-1 col-12 create-new-button\" aria-expanded=\"false\" href=\"clientes.php\"><?php echo lang(\"Return\");?></a>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/eliminar_informe.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"reports\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Delete report\"); ?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"informes.php\"><?php echo lang(\"Reports\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Delete report\");?></li>\n                </ol>\n              </nav>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n\n                    <?php\n\n                      $sentencia_cantidad = \"SELECT * FROM scope WHERE id_informe=\".$id_url;\n                      $consulta_cantidad = mysqli_query($conexion, $sentencia_cantidad) or die(\"Error de Consulta\");\n\n                      $numero = 0;\n\n                      while($fila_cantidad = mysqli_fetch_array($consulta_cantidad)){\n\n                        $id_scope = $fila_cantidad['id'];\n                        $numero = $numero +1;\n                      }\n\n                      if($numero >= 1){\n                        \n                        echo \"<script>alert('Delete objectives from this report')</script>\";\n\n                      }else{\n\n                        $sentencia = \"DELETE FROM `informes` WHERE id=\".$id_url;    \n                        $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n                        echo '<h1>';\n                        echo lang(\"Report removed from the system\"); \n                        echo'</h1>';\n                      }\n\n                      \n                    ?>\n\n                    \n                    <a class=\"nav-link btn btn-info col-lg-1 col-12 create-new-button\" aria-expanded=\"false\" href=\"informes.php\"><?php echo lang(\"Return\");?></a>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/eliminar_vulnerabilidad_scope.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"vulnerabilidades\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n$id_informe = $urlArray[2];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Delete vulnerability\");?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"vulnerabilidades.php\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Delete Vulnerability\");?></li>\n                </ol>\n              </nav>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n\n                    <?php\n                      $sentencia = \"DELETE FROM `scope_vulnerabilidades` WHERE id=\".$id_url;    \n                      $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\"); \n                    ?>\n\n                    <h1><?php echo lang(\"Vulnerability removed from the system\")?></h1>\n                    <a class=\"nav-link btn btn-info col-lg-1 col-12 create-new-button\" aria-expanded=\"false\" href=\"editar_informe.php?id=<?php echo $id_informe?>\"><?php echo lang(\"Return\");?></a>\n\n                    <?php\n                        //sacamos la url de la imagen para eliminarla\n                        $sentencia_url_imagen = \"SELECT * FROM pocs where id_scope_vulnerabilidad=\".$id_url;\n                        $consulta_url_imagen = mysqli_query($conexion, $sentencia_url_imagen)or die($sentencia);\n\n                        while($fila_url_imagen = mysqli_fetch_array($consulta_url_imagen)) {\n                            $ruta_url_imagen = $fila_url_imagen['ruta'];\n\n                            //eliminamos la imagen\n                            unlink($ruta_url_imagen);\n                        }\n\n                        //eliminamos el registro de la base de datos\n                        $sentencia = \"DELETE FROM pocs WHERE id_scope_vulnerabilidad=\".$id_url;\n                        $consulta = mysqli_query($conexion, $sentencia)or die($sentencia);\n                    ?>\n\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/eliminar_vulnerabilidades.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"vulnerabilidades\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Delete vulnerability\"); echo \" \".$id_url?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"vulnerabilidades.php\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Delete Vulnerability\");?></li>\n                </ol>\n              </nav>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <?php\n                      $sentencia = \"DELETE FROM `vulnerabilidades` WHERE id=\".$id_url;    \n                      $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n                    ?>\n                    <h1><?php echo lang(\"Vulnerability removed from the system\")?></h1>\n                    <a class=\"nav-link btn btn-info col-lg-1 col-12 create-new-button\" aria-expanded=\"false\" href=\"vulnerabilidades.php\"><?php echo lang(\"Return\");?></a>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/estilos/estilos_informes.css",
    "content": ".portada{\n  margin-top:0cm;\n  margin-right:23.05pt;\n  margin-bottom:0cm;\n  margin-left:-10.5pt;\n  margin-bottom:.0001pt;\n  text-align:justify;\n  font-family:Verdana;\n  font-size: 18pt;\n}\n\nh1{\n  margin-top:0cm;\n  margin-right:23.05pt;\n  margin-bottom:0cm;\n  margin-left:-10.5pt;\n  margin-bottom:.0001pt;\n  text-align:justify;\n  font-family:Verdana;\n  font-size: 18pt;\n}\nh2{\n  margin-top:0cm;\n  margin-right:23.05pt;\n  margin-bottom:0cm;\n  margin-left:-10.5pt;\n  margin-bottom:.0001pt;\n  text-align:justify;\n  font-family:Verdana;\n  font-size: 14pt;\n}\n\nh3{\n  margin-top:0cm;\n  margin-right:23.05pt;\n  margin-bottom:0cm;\n  margin-left:-10.5pt;\n  margin-bottom:.0001pt;\n  text-align:justify;\n  font-family:Verdana;\n  font-size: 12pt;\n}\n\nh4{\n  margin-top:0cm;\n  margin-right:23.05pt;\n  margin-bottom:0cm;\n  margin-left:-10.5pt;\n  margin-bottom:.0001pt;\n  text-align:justify; \n  font-family:Verdana;\n  font-size:11pt;\n}\n\np{\n  margin-top:.05pt;\n  margin-bottom:0cm;\n  margin-left:-10.5pt;\n  margin-right:-15px;\n  margin-bottom:.0001pt;\n  text-align:justify; \n  font-family:Verdana;\n  font-size:11pt;\n}\n\ntable{\n  width:460.0pt;\n  margin-left: 10px;\n  border-collapse:collapse;\n  align-content: center;\n  margin: 0 auto;\n}"
  },
  {
    "path": "BlackStone/functions/traductor.php",
    "content": "\n<?php\n\nfunction lang($sentencia){\n\n    //SYSTEM    if($sentencia == \"Saved vulnerability\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidad guardada\";};\n    if($sentencia == \"Edit asset\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Editar objetivo\";};\n    if($sentencia == \"Objectives details\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Detalles de los objetivos\";};\n    if($sentencia == \"At the moment we will have to manually insert a graphic or image.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Por el momento deberemos insertar manualmente un gráfico o imagen.\";};\n    if($sentencia == \"Delete\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Eliminar\";};\n    if($sentencia == \"Vulnerability images\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Imágenes de vulnerabilidad\";};\n    if($sentencia == \"Manage vulnerabilities\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Gestionar vulnerabilidades\";};\n    if($sentencia == \"Search Vulnerabilities...\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Buscar Vulnerabilidades...\";};\n    if($sentencia == \"Order\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Orden\";};\n    if($sentencia == \"Add vulns\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir vulns\";};\n    if($sentencia == \"Add image\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir imagen\";};\n    if($sentencia == \"Edit values\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Editar valores\";};\n    if($sentencia == \"Vulnerabilities associated with\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidades asociadas a\";};\n    if($sentencia == \"Are you interested in cybersecurity?\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Estás interesado en ciberseguridad?\";};\n    if($sentencia == \"Go now\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Ver ahora\";};\n    if($sentencia == \"Visit all my links!\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Visita todos mis links!\";};\n    if($sentencia == \"Report Objectives\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Objetivos de la auditoría\";};\n    if($sentencia == \"Add objective\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir objetivo\";};\n    if($sentencia == \"Add objectives\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir objetivos\";};\n    if($sentencia == \"Objectives\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Objetivos\";};\n    if($sentencia == \"Deadline\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Fecha de entrega\";};\n    if($sentencia == \"Saved vulnerability\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidad guardada\";};\n    if($sentencia == \"Account settings\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Ajustes de cuenta\";};\n    if($sentencia == \"System Member\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Usuario de sistema\";};\n    if($sentencia == \"Dashboard\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Dashboard\";};\n    if($sentencia == \"Navigation\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Navegación\";};\n    if($sentencia == \"Search Reports\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Buscar Informes\";};\n    if($sentencia == \"Profile\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Perfil\";};\n    if($sentencia == \"Log out\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Cerrar sesión\";};\n    if($sentencia == \"Settings\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Ajustes\";};\n    if($sentencia == \"Messages\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Mensajes\";};\n    if($sentencia == \"Now\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Ahora\";};\n    if($sentencia == \"Create New Report\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Crear Nuevo Informe\";};\n    if($sentencia == \"Vulnerabilities\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidades\";};\n    if($sentencia == \"Audited Client\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Clientes registrados\";};\n    if($sentencia == \"Auditors\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Auditores\";};\n    if($sentencia == \"Report\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Informe\";};\n    if($sentencia == \"Reports\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Informes\";};\n    if($sentencia == \"Report Vulnerabilities\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidades reportadas\";};\n    if($sentencia == \"Vulns in database\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulns en base de datos\";};\n    if($sentencia == \"Free Hacking reporting tool from \" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Herramienta gratuita de reporting, creada por: \";};\n    if($sentencia == \"List of vulnerabilities\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Listado de vulnerabilidades\";};\n    if($sentencia == \"List\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Listado\";};\n    if($sentencia == \"Description\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Descripción\";};\n    if($sentencia == \"Description image\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Descripción de la imágen\";};\n    if($sentencia == \"Criticality\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Criticidad\";};\n    if($sentencia == \"Low\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Baja\";};\n    if($sentencia == \"Medium\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Media\";};\n    if($sentencia == \"High\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Alta\";};\n    if($sentencia == \"Very High\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Muy Alta\";};\n    if($sentencia == \"Edit\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Editar\";};\n    if($sentencia == \"Remove\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Eliminar\";};\n    if($sentencia == \"Search vulnerabilities\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Buscar vulnerabilidades\";};\n    if($sentencia == \"NIST calculator\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Calculadora NIST\";};\n    if($sentencia == \"Edit Vulnerability\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Editar vulnerabilidad\";};\n    if($sentencia == \"Effort\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Esfuerzo\";};\n    if($sentencia == \"Audit section\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Sección auditoria\";};\n    if($sentencia == \"Internal audit\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Auditoría interna\";};\n    if($sentencia == \"External audit\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Auditoría externa\";};\n    if($sentencia == \"Wifi audit\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Auditoría wifi\";};\n    if($sentencia == \"Solution\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Solución\";};\n    if($sentencia == \"Recommendation for criticality table\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Recomendación para tabla de criticidad\";};\n    if($sentencia == \"Add vulnerability\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir vulnerabilidad\";};\n    if($sentencia == \"Delete vulnerability\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Eliminar vulnerabilidad\";};\n    if($sentencia == \"Vulnerability removed from the system\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidad eliminada del sistema\";};\n    if($sentencia == \"Return\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Volver\";};\n    if($sentencia == \"Customers\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Clientes\";};\n    if($sentencia == \"List of customers\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Listado de clientes\";};\n    if($sentencia == \"Search customers\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Buscar clientes\";};\n    if($sentencia == \"Name\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Nombre\";};\n    if($sentencia == \"Web page\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Página web\";};\n    if($sentencia == \"Logo\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Logo\";};\n    if($sentencia == \"Edit company\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Editar empresa\";};\n    if($sentencia == \"Links and subdomains\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Links y subdominios\";};\n    if($sentencia == \"Domain\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Dominio\";};\n    if($sentencia == \"Email\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Correo\";};\n    if($sentencia == \"Name and surname\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Nombre y apellidos\";};\n    if($sentencia == \"Phone\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Teléfono\";};\n    if($sentencia == \"Owner data\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Datos del propietario\";};\n    if($sentencia == \"Organization\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Organización\";};\n    if($sentencia == \"Employee emails\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Correos de empleados\";};\n    if($sentencia == \"MX Records\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Registros MX\";};\n    if($sentencia == \"Edit profile\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Editar perfil\";};\n    if($sentencia == \"You have reached the search limit on your hunter.io plan\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Ha alcanzado el límite de búsquedas en su plan de hunter.io\";};\n    if($sentencia == \"Add client\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir cliente\";};\n    if($sentencia == \"Your clients\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Tus clientes\";};\n    if($sentencia == \"List of reports\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Lista de informes\";};\n    if($sentencia == \"Search reports\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Buscar informes\";};\n    if($sentencia == \"Report name\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Nombre del informe\";};\n    if($sentencia == \"State\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Estado\";};\n    if($sentencia == \"Date\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Fecha\";};\n    if($sentencia == \"Finalized\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Terminado\";};\n    if($sentencia == \"In process\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"En proceso\";};\n    if($sentencia == \"En proceso\" && $_SESSION['idioma'] == \"EN\"){ $sentencia = \"In process\";};\n    if($sentencia == \"Terminado\" && $_SESSION['idioma'] == \"EN\"){ $sentencia = \"Finalized\";};\n    if($sentencia == \"Add report\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir informe\";};\n    if($sentencia == \"Delete company\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Eliminar empresa\";};\n    if($sentencia == \"Company removed from the system\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Empresa eliminada del sistema\";};\n    if($sentencia == \"Save this web in .mhtml format and open it in Word to edit the report!!\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Guarda esta web en formato .mhtml y abrela en Word para editar el informe!!\";};\n    if($sentencia == \"Document name\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Nombre del documento\";};\n    if($sentencia == \"Customer name\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Nombre cliente\";};\n    if($sentencia == \"Discharge date\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Fecha de alta\";};\n    if($sentencia == \"Edit report\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Editar informe\";};\n    if($sentencia == \"State\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Estado\";};\n    if($sentencia == \"Recommendations\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Recomendaciones\";};\n    if($sentencia == \"Recommendation\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Recomendación\";};\n    if($sentencia == \"Conclusions\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Conclusiones\";};\n    if($sentencia == \"Proposals\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Propuestas\";};\n    if($sentencia == \"Add\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Añadir\";};\n    if($sentencia == \"Description\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Descripción\";};\n    if($sentencia == \"Section\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Sección\";};\n    if($sentencia == \"Save\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Guardar\";};\n    if($sentencia == \"Client name\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Nombre de cliente\";};\n    if($sentencia == \"Overview report\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Generar informe\";};\n    if($sentencia == \"Delete report\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Eliminar informe\";};\n    if($sentencia == \"Report removed from the system\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Informe eliminado del sistema\";};\n    if($sentencia == \"Recorded vulnerabilities\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidades registradas\";};\n    if($sentencia == \"Registered companies\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Clientes dados de alta\";};\n    if($sentencia == \"Reports made\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Informes realizados\";};\n    if($sentencia == \"Last two reports\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Dos últimos informes\";};\n    if($sentencia == \"Date:\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Fecha:\";};\n    if($sentencia == \"Vulnerabilities found\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Vulnerabilidades encontradas\";};\n\n\n    //REPORT\n    if($sentencia == \"LEGAL WARNING\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"AVISO LEGAL\";};\n    if($sentencia == \"This document contains confidential and proprietary information which is for the exclusive use of \" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Este documento contiene información confidencial y propietaria la cual es de uso exclusivo de \";};\n    if($sentencia == \"Unauthorized reproduction or use of this document is strictly prohibited.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"La reproducción o uso no autorizado de este documento está totalmente prohibido.\";};\n    if($sentencia == \"CONTROL DOCUMENT\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"CONTROL DE DOCUMENTO\";};\n    if($sentencia == \"DOCUMENT:\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"DOCUMENTO:\";};\n    if($sentencia == \"NAME\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"NOMBRE\";};\n    if($sentencia == \"AUTHOR:\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"AUTOR:\";};\n    if($sentencia == \"CUSTOMER:\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"CLIENTE:\";};\n    if($sentencia == \"CONFIDENTIALITY STATEMENT\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"DECLARACIÓN DE CONFIDENCIALIDAD\";};\n    if($sentencia == \"This report contains information regarding possible security breaches of \" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Este informe contiene la información relativa a las posibles brechas de seguridad de \";};\n    if($sentencia == \"and their systems.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"y sus sistemas.\";};\n    if($sentencia == \"recommends that special precautions be taken to\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"recomienda que sean tomadas precauciones especiales para\";};\n    if($sentencia == \" protect the confidentiality of this document and the information contained in it.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \" proteger la confidencialidad de este documento y de la información contenida en él.\";};\n    if($sentencia == \"has maintained and secured a copy of this report for consultation by the\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"ha mantenido y asegurado una copia de este informe para consulta por parte del\";};\n    if($sentencia == \"All other copies of the report have been delivered to \" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Todas las demás copias del informe se han entregado a \";};\n    if($sentencia == \"The security assessment\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"La evaluación de la seguridad\";};\n    if($sentencia == \"it is an uncertain process, based on experiences, currently available information and known threats.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"es un proceso incierto, basado en las experiencias, la información actualmente disponible y las amenazas conocidas.\";};\n    if($sentencia == \"It must be understood that all information systems, by their nature, depend on human beings and are vulnerable in some degree.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Se debe entender que todos los sistemas de información, por su naturaleza dependen de los seres humanos y son vulnerables en cierto grado.\";};\n    if($sentencia == \"This report\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Este informe\";};\n    if($sentencia == \"may recommend that\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"podrá recomendar que\";};\n    if($sentencia == \"use certain software or hardware products manufactured\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"utilice ciertos productos de software o hardware fabricados\";};\n    if($sentencia == \"or maintained by other providers. BlackStone bases these recommendations on of your previous experience with the capabilities of these products. However, Blackstone cannot and should not guarantee that any particular product will perform as advertised by the seller.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"o mantenidas por otros proveedores. BlackStone  basa estas recomendaciones a partir de su experiencia previa con las capacidades de estos productos. Sin embargo, BlackStone no puede y no debe garantizar que un determinado producto funcionará según lo anunciado por el vendedor. \";};\n    if($sentencia == \"INDEX\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"ÍNDICE\";};\n    if($sentencia == \"(GENERATE INDEX WITH WORD)\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"(GENERAR INDICE CON WORD)\";};\n    if($sentencia == \"INTRODUCTION\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"INTRODUCCIÓN\";};\n    if($sentencia == \"During the tests, the activities that a real attacker would carry out are simulated, discovering the vulnerabilities, their level of risk, and generating recommendations that allow the client to carry out the remediation of these. Each section of this report details important aspects of how an attacker could use the vulnerability to compromise and gain unauthorized access to sensitive information. Are included In addition, guidelines that, when applied, will improve the levels of confidentiality, integrity and availability of the analyzed systems.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Durante las pruebas se simulan las actividades que realizaría un atacante real, descubriendo las vulnerabilidades, su nivel de riesgo, y generando recomendaciones que permitan al cliente realizar la remediación de estas. En cada sección de este informe se detallan los aspectos importantes de la forma en que un atacante podría utilizar la vulnerabilidad para comprometer y obtener acceso no autorizado a información sensible. Se incluyen además directrices que al ser aplicadas mejoraran los niveles de confidencialidad, integridad y disponibilidad de los sistemas analizados.\";};\n    if($sentencia == \"Vulnerability scans and ethical hacking tests were conducted by BlackStone's Red Team during the approved dates. The ethical hacking tests did not explicitly attempt to execute denial-of-service exploits and all of them were carried out without knowledge of users or passwords on the network.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Los análisis de vulnerabilidades y pruebas de hacking ético fueron realizados por el equipo de Red Team de BlackStone  durante las fechas aprobadas. Las pruebas de hacking ético no intentaron explícitamente la ejecución de exploits que implicaran denegación de servicio y todas ellas se realizaron sin conocimiento de usuarios o contraseñas en la red.\";};\n    if($sentencia == \"OBJECTIVE\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"OBJETIVO\";};\n    if($sentencia == \"The objective of the security evaluation is to detect the existing security vulnerabilities in the analyzed systems in order to subsequently generate a report with the findings and recommendations that allow their remediation.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"El objetivo de la evaluación de seguridad es detectar las vulnerabilidades de seguridad existentes en los sistemas analizados para posteriormente generar un informe con los hallazgos y recomendaciones que permitan la remediación de estas.\";};\n    if($sentencia == \"SCOPE\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"ALCANCE\";};\n    if($sentencia == \"The evaluation carried out has focused on the objectives approved in the scope of the contract, which establishes:\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"La evaluación realizada se ha centrado en los objetivos aprobados en el alcance del contrato, en el cual se establece:\";};\n    if($sentencia == \"Description activities\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Descripción de actividades\";};\n    if($sentencia == \"EXECUTIVE SUMMARY\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"RESUMEN EJECUTIVO\";};\n    if($sentencia == \"TEST RESULTS\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"RESULTADO DE LAS PRUEBAS\";};\n    if($sentencia == \"CONCLUSIONS\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"CONCLUSIONES\";};\n    if($sentencia == \"RECOMMENDATIONS\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"RECOMENDACIONES\";};\n    if($sentencia == \"Infrastructure improvement proposals\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Propuestas de mejora sobre la infraestructura\";};\n    if($sentencia == \"Criticality table\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Tabla de criticidad\";};\n    if($sentencia == \"Recommendation\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Recomendación\";};\n    if($sentencia == \"DOCUMENT CONTROL\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"CONTROL DE DOCUMENTO\";};\n    if($sentencia == \"Vulnerability\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"vulnerabilidad\";};\n    if($sentencia == \"Amount\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Cantidad\";};\n    if($sentencia == \"Percentage\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Porcentaje\";};\n    if($sentencia == \"Critics\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Críticas\";};\n    if($sentencia == \"Penetration Test Report for\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Informe de Pentesting para\";};\n    if($sentencia == \"YOU CAN MAKE REPORTS ON AUDITS AND CERTIFICATION EXAMS WITH THE FREE REPORTING TOOL FOR KALI AND PARROT\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"PUEDES REALIZAR INFORMES DE AUDITORÍAS Y EXÁMENES DE CERTIFICACIONES CON LA HERRAMIENTA GRATUITA DE REPORTING PARA KALI Y PARROT\";};\n\n\n    if($sentencia == \"You have to capture a screenshot of this graphic to insert it into Word.\" && $_SESSION['idioma'] == \"ES\"){ $sentencia = \"Tienes que capturar pantalla de este gráfico para insertarlo dentro del Word.\";};\n\n    return $sentencia;\n};\n\n?>\n"
  },
  {
    "path": "BlackStone/future_news.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Companies\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Seguimos mejorando BlackStone\"); ?> </h3>\n              <nav aria-label=\"breadcrumb\">\n              </nav>\n            </div>  \n\n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <h3> Nuevas funcionalidades y mejoras </h3>\n                    <ul>\n                      <li>Instalador propio y automatizado para despliegue de BlackStone en Kali Linux</li>\n                      <li>Reemplazar resultados de Hunter.io por resultados similaes nativos en la app.</li>\n                      <li>Solucionados numerosos campos sensibles a XSS almacenado.</li>\n                      <li>Limitación de acceso a la app BlackStone únicamente al equipo que la ejecuta (nadie en tu red que detecte tu puerto 80 levantado podrá acceder a esta app).</li>\n                      <li>Insertar imagen de logo para cada uno de los clientes, en vez de logo automático por favicon (no se conseguían buenos resultados).</li>\n                      <li>Búsqueda de subdominios automática en la ficha de cliente, dicha funcionalidad es nativa del propio código de BlackStone).</li>\n                      <li>Solucionadas diversas traducciones español/inglés.</li>\n                      <li>Integración de icono del sistema para BlackStone, se añade la aplicación en Kali como una aplicación nativa con su propio lancuher.</li>\n                      <li>Rediseño de informe técnico.</li>\n                      <li>Implantación de un nuevo informe ejecutivo.</li>\n                      <li>Ahora se pueden añadir descripciones a las imágenes de las evidencias.</li>\n\n\n\n                    </ul>\n                    <br>\n                    \n                    <hr>\n\n                    <button type=\"button\" class=\"btn btn-social-icon-text btn-youtube\"><a href=\"https://www.youtube.com/c/MicroJoan\" class=\"text-white text-decoration-none\"><i class=\"mdi mdi-youtube\"></i>YouTube</a></button>\n                    <button type=\"button\" class=\"btn btn-social-icon-text btn-twitter\"><a href=\"https://twitter.com/joan_micro\" class=\"text-white text-decoration-none\"><i class=\"mdi mdi-twitter\"></i>Twitter</a></button>\n                    <button type=\"button\" class=\"btn btn-social-icon-text btn-linkedin\"><a href=\"https://www.linkedin.com/in/joan-moya-torremocha/\" class=\"text-white text-decoration-none\"><i class=\"mdi mdi-linkedin\"></i>LinkedIn</a></button>\n                    <button type=\"button\" class=\"btn btn-social-icon-text btn-dribbble\"><a href=\"https://www.instagram.com/microjoan_youtube/?hl=es\" class=\"text-white text-decoration-none\"><i class=\"mdi mdi-instagram\"></i>Instagram</a></button>\n                    <button type=\"button\" class=\"btn btn-social-icon-text btn-github\"><a href=\"https://github.com/micro-joan\" class=\"text-white text-decoration-none\"><i class=\"mdi mdi-git\"></i>GitHub</a></button>\n\n                  </div>\n                </div>\n              </div>\n            </div>\n\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/gen_word_tecnico.php",
    "content": "<?php \n\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\n\n$frase_inicial = lang(\"Guarda esta web en formato .mhtml y abrela en Word para editar el informe!!\");\necho \"<script>alert('$frase_inicial')</script>\";\n\n$uri = $_SERVER[\"REQUEST_URI\"];\n$uriArray = explode('=', $uri);\n\n$id_url = $uriArray[1];\n\nif (is_numeric($id_url)) {\n  // Aquí puedes continuar con el procesamiento si $id_url es numérico\n  //\"OK\";\n} else {\n  // Mostrar un mensaje si $id_url no es numérico\n  echo \"<script>alert('The value entered is not correct.')</script>\";\n  exit;\n}\n\ninclude(\"conexion.php\");\n$sentencia = \"select * from informes where id=\".$id_url;\n$consulta = mysqli_query($conexion, $sentencia) or die(\"Error de Consulta\");\n\n//vamos a recorrer la consulta y guardar los datos\nwhile($fila= mysqli_fetch_array($consulta)){\n\n  $nombre_doc=$fila['nombre_doc'];\n  $id_empresa_auditada = $fila['id_empresa_auditada'];\n  $fecha = $fila['fecha'];\n  $estado = $fila['estado'];\n  $recomendaciones = $fila['recomendaciones'];\n  $conclusiones = $fila['conclusiones'];\n\n}\n\n//sacamos da de la empresa auditada\n$sentencia_empresa_auditada = \"select * from empresas where id=\".$id_empresa_auditada; \n$consulta_empresa_auditada = mysqli_query($conexion, $sentencia_empresa_auditada) or die(\"Error de Consulta\");\n\n//vamos a recorrer la consulta y guardar los datos\nwhile($fila= mysqli_fetch_array($consulta_empresa_auditada)){\n    $id_empresa_audit=$fila['id'];\n    $nombre_empresa_auditada=$fila['nombre'];   \n    $logo_empresa=$fila['logo']; \n}\n\n?>\n\n<html>\n  <head>\n    <meta http-equiv=Content-Type content=\"text/html; charset=utf-8\">\n    <meta name=Generator content=\"Microsoft Word 15 (filtered)\">\n    <link rel=\"stylesheet\" href=\"estilos/estilos_informes.css\">\n    <title> <?php echo $nombre_doc; ?></title>\n  </head>\n\n\n  <style>\n\n      body{\n          max-width: 750px;\n          margin: 0 auto;\n          padding: 20px;\n          background-color:#444d55;\n      }\n\n      .contenedor{\n          background-color:white;\n          padding:70px;\n      }\n  </style>\n  \n<body lang=ES link=\"#0563C1\" vlink=\"#954F72\" style='word-wrap:break-word'>\n<div class=\"contenedor\">\n  <div class=WordSection1>\n    \n    <p class=MsoBodyText >\n      <center><img src=\"assets/images/report/top-banner.jpg\"></center>\n    </p>\n          \n          <p style=\"margin-left:-3.0cm;text-align:center;font-size:25px;\">\n              &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\n              <?php echo lang(\"Penetration Test Report for\");?> \n                \n                <br>\n                <center>\n                  <span style=\"font-family:'Verdana',sans-serif; font-size: 20px;\">\n                    <b><?php echo $nombre_empresa_auditada; ?></b>\n                  </span>\n                </center>\n                <br>\n                <hr>\n                <br>\n                <span style=\"font-family:'Verdana',sans-serif;\"><?php echo lang(\"Date\");?>: <?php echo $fecha ?></span><br>\n                <span style=\"font-family:'Verdana',sans-serif;\"><?php echo lang(\"Document name\");?>: <?php echo $nombre_doc ?></span>\n                <br><br><br><br>\n          </p>\n\n    <p class=MsoBodyText align=center style='margin-top:0cm;margin-right:23.05pt; margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:center'>\n      <img width=200 height=200 id=image1.jpeg src=\"<?php echo $logo_empresa?>\" style=\"border-radius:100px;\">\n      <img width=100 height=100 id=image1.jpeg src=\"assets/images/report/logo_portada2.png\" style=\"margin-left:-75px;\">\n      <br><br><br>\n    </p>\n    <center>\n    <?php $anioActual = date(\"Y\"); ?>\n\n    <span style=\"font-family:'Verdana',sans-serif; font-size: 12px;\">\n      Copyright &copy; <?php echo $anioActual; ?> BlackStone Project. All rights reserved.\n    </span>\n    </center>\n\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:10.0pt;font-family:\"Times New Roman\",serif'>&nbsp;</span></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:10.0pt;font-family:\"Times New Roman\",serif'>&nbsp;</span></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:10.0pt;font-family:\"Times New Roman\",serif'>&nbsp;</span></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:10.0pt;font-family:\"Times New Roman\",serif'>&nbsp;</span></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:10.0pt;font-family:\"Times New Roman\",serif'>&nbsp;</span></p>\n    </div>\n  <span style='font-size:12.0pt;font-family:\"Times New Roman\",serif'><br clear=all style='page-break-before:auto'></span>\n\n  <!-- TITULO DEL INFORME -->\n  <div class=WordSection2>\n    \n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    \n    <p class=TableParagraph style='margin-top:0cm;margin-right:23.05pt; margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'> \n    <img width=220 height=67 id=image2.jpeg src=\"assets/images/report/banner-mini.png\">\n  </p>\n  </td>\n  </div>\n\n  <span style='font-size:12.0pt;font-family:\"Times New Roman\",serif'>\n    <br clear=all style='page-break-before:always'>\n  </span>\n\n\n  <div style=\"height: 10px; background-color: #444d55; margin-left: -75px; margin-right: -75px;\"></div>\n\n\n  <!--SE AÑADE PUBLICIDAD DE LA HERRAMIENTA-->\n  <span style='font-size:12.0pt;font-family:\"Times New Roman\",serif'><br clear=all style='page-break-before:auto'></span>\n\n  <p style='margin-top:0cm;margin-right:23.05pt; margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:center'>\n      <img width=200 height=200 id=image1.jpeg src=\"assets/images/report/logo_portada2.png\" style=\"margin-left:-75px;\">\n      <br><br><br>\n  </p>\n\n  <p style='margin-top:0cm;margin-right:23.05pt; margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:center'>\n      <?php echo lang(\"YOU CAN MAKE REPORTS ON AUDITS AND CERTIFICATION EXAMS WITH THE FREE REPORTING TOOL FOR KALI AND PARROT\");?> \"<b>BLACKSTONE</b>\"\n      <br><br>\n  </p>\n\n  <p style='margin-top:0cm;margin-right:23.05pt; margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:center'>\n      <img width=600 height=330 id=image1.jpeg src=\"assets/images/report/example_interface.png\" style=\"margin-left:-75px;\">\n      <br><br><br>\n  </p>\n\n  <p style='margin-top:0cm;margin-right:23.05pt; margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:center'>\n      <a href=\"https://github.com/micro-joan/BlackStone\" style=\"color:blue;\">https://github.com/micro-joan/BlackStone</a>\n      <br><br>\n  </p>\n  \n  <span style='font-size:12.0pt;font-family:\"Times New Roman\",serif'>\n    <br clear=all style='page-break-before:always'>\n  </span>\n\n\n  <div class=WordSection3>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n\n    <h4 style=\"color:<?php echo $color;?> !important;\">\n      <?php echo lang(\"LEGAL WARNING\");?>\n    </h4>\n\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n\n    <p>\n        <?php echo lang(\"This document contains confidential and proprietary information which is for the exclusive use of \");?><?php echo $nombre_empresa_auditada?>. <?php echo lang(\"Unauthorized reproduction or use of this document is strictly prohibited.\");?>\n    </p>\n\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n\n    <h4 style=\"color:<?php echo $color;?> !important;\">\n        <?php echo lang(\"DOCUMENT CONTROL\");?>\n    </h4>\n\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n\n    <table>\n      <!--NOMBRE DOCUMENTO-->\n      <tr style='height:35.0pt'>\n        <td width=122 valign=top style='width:91.8pt;border:solid black 1.0pt;background:#191c24;padding:0cm 5.4pt 0cm 5.4pt;height:35.0pt'>\n          <p class=TableParagraph style='margin-top:6.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b>\n              <span style='font-size:10.0pt;font-family:\"Verdana\",sans-serif;color:white'><?php echo lang(\"NAME\");?><span style='letter-spacing:.05pt'> \n              </span><?php echo lang(\"DOCUMENT:\");?></span>\n            </b>\n          </p>\n        </td>\n        <td width=523 valign=top style='width:392.2pt;border:solid black 1.0pt;border-left:none;padding:0cm 5.4pt 0cm 5.4pt;height:35.0pt'>\n          <p class=TableParagraph style='margin-top:.25pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b> <span style='font-size:9.5pt'>&nbsp;</span> </b>\n          </p>\n          <p class=TableParagraph style='margin-top:.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b>\n              <span style='font-size:10.0pt;font-family:\"Verdana\",sans-serif'><?php echo $nombre_doc; ?><span style='letter-spacing:-.05pt'> \n            </b>\n          </p>\n        </td>\n      </tr>\n\n      <!--AUTOR-->\n      <tr style='height:35.0pt'>\n        <td width=122 valign=top style='width:91.8pt;border:solid black 1.0pt;background:#191c24;padding:0cm 5.4pt 0cm 5.4pt;height:35.0pt'>\n          <p class=TableParagraph style='margin-top:11.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b>\n              <span style='font-size:10.0pt;font-family:\"Verdana\",sans-serif;color:white;'><?php echo lang(\"AUTHOR:\");?><span style='letter-spacing:-.05pt'> \n            </b>\n          </p>\n        </td>\n        <td width=523 valign=top style='width:392.2pt;border:solid black 1.0pt;border-left:none;padding:0cm 5.4pt 0cm 5.4pt;height:35.0pt'>\n          <p class=TableParagraph style='margin-top:.25pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b> <span style='font-size:9.5pt'>&nbsp;</span> </b>\n          </p>\n          <p class=TableParagraph style='margin-top:.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b>\n              <span style='font-size:10.0pt;font-family:\"Verdana\",sans-serif'>BlackStone<span style='letter-spacing:-.05pt'> \n            </b>\n          </p>\n        </td>\n      </tr>\n\n      <!--CLIENTE-->\n      <tr style='height:35.0pt'>\n        <td width=122 valign=top style='width:91.8pt;border:solid black 1.0pt;background:#191c24;padding:0cm 5.4pt 0cm 5.4pt;height:35.0pt'>\n          <p class=TableParagraph style='margin-top:11.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b>\n              <span style='font-size:10.0pt;font-family:\"Verdana\",sans-serif;color:white'><?php echo lang(\"CUSTOMER:\");?><span style='letter-spacing:.05pt'> \n            </b>\n          </p>\n        </td>\n        <td width=523 valign=top style='width:392.2pt;border:solid black 1.0pt;border-left:none;padding:0cm 5.4pt 0cm 5.4pt;height:35.0pt'>\n          <p class=TableParagraph style='margin-top:.25pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b> <span style='font-size:9.5pt'>&nbsp;</span> </b>\n          </p>\n          <p class=TableParagraph style='margin-top:.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n            <b>\n              <span style='font-size:10.0pt;font-family:\"Verdana\",sans-serif'><?php echo $nombre_empresa_auditada; ?><span style='letter-spacing:-.05pt'> \n            </b>\n          </p>\n        </td>\n      </tr>\n    </table>\n\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n\n    <h4 style=\"color:<?php echo $color;?> !important;\">\n        <?php echo lang(\"CONFIDENTIALITY STATEMENT\");?>\n    </h4>\n\n    <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:13.0pt'>&nbsp;</span></b></p>\n\n    <p>\n        <?php echo lang(\"This report contains information regarding possible security breaches of \");?><?php echo $nombre_empresa_auditada?>\n        <?php echo lang(\"and their systems.\");?> BlackStone  <?php echo lang(\"recommends that special precautions be taken to\");?>\n        <?php echo lang(\" protect the confidentiality of this document and the information contained in it.\");?> \n        <?php echo lang(\"All other copies of the report have been delivered to \");?><?php echo $nombre_empresa_auditada?>. <?php echo lang(\"The security assessment\");?> \n        <?php echo lang(\"it is an uncertain process, based on experiences, currently available information and known threats.\");?>\n        <?php echo lang(\"It must be understood that all information systems, by their nature, depend on human beings and are vulnerable in some degree.\");?>\n    </p>\n    \n    <p class=MsoBodyText style='margin-top:.4pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>&nbsp;</p>\n\n    <p>\n      <?php echo lang(\"This report\");?>\n      <?php echo lang(\"may recommend that\");?> <?php echo $nombre_empresa_auditada?> <?php echo lang(\"use certain software or hardware products manufactured\");?>\n      <?php echo lang(\"or maintained by other providers. BlackStone bases these recommendations on of your previous experience with the capabilities of these products. However, Blackstone cannot and should not guarantee that any particular product will perform as advertised by the seller.\");?>\n    </p>\n</div>\n\n<span style='font-size:11.0pt;font-family:\"Verdana\",sans-serif'><br clear=all style='page-break-before:always'></span>\n\n<div class=WordSection4>\n\n\n<p class=MsoBodyText style='margin-top:.4pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>&nbsp;</p>\n\n</div>\n\n<div class=WordSection5>\n  <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b><span style='font-size:10.0pt'>&nbsp;</span></b></p>\n  <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b>&nbsp;</b></p>\n\n  <h4 style=\"color:<?php echo $color;?> !important; text-align: center;\">\n    <?php echo lang(\"INDEX\");?>\n  </h4>\n  \n  <br><br>\n  <h4 style=\"color:<?php echo $color;?> !important; text-align: center;\">\n    <?php echo lang(\"(GENERATE INDEX WITH WORD)\");?>\n  </h4>\n</div>\n\n<span style='font-size:12.0pt;font-family:\"Verdana\",sans-serif'><br clear=all style='page-break-before:always'></span>\n\n<div class=WordSection6>\n\n<p class=MsoBodyText style='margin-top:.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:21.0pt'>&nbsp;</span></p>\n\n  <h1 style=\"color:<?php echo $color; ?>\" >\n      1&nbsp;<?php echo lang(\"INTRODUCTION\");?>\n  </h1><br>\n\n  <p>\n    <?php echo lang(\"During the tests, the activities that a real attacker would carry out are simulated, discovering the vulnerabilities, their level of risk, and generating recommendations that allow the client to carry out the remediation of these. Each section of this report details important aspects of how an attacker could use the vulnerability to compromise and gain unauthorized access to sensitive information. Are included In addition, guidelines that, when applied, will improve the levels of confidentiality, integrity and availability of the analyzed systems.\");?>\n  </p><br>\n\n  <p class=MsoBodyText style='margin-top:.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:21.0pt'>&nbsp;</span></p>\n \n  <h2 style=\"color:<?php echo $color; ?>\" >\n      1.1&nbsp;<?php echo lang(\"OBJECTIVE\");?>\n  </h2><br>\n\n  <p>\n    <?php echo lang(\"The objective of the security evaluation is to detect the existing security vulnerabilities in the analyzed systems in order to subsequently generate a report with the findings and recommendations that allow their remediation.\");?>\n  </p>  \n\n  <p class=MsoBodyText style='margin-top:.05pt;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:21.0pt'>&nbsp;</span></p>\n\n  <h2 style=\"color:<?php echo $color; ?>\" >\n    1.2&nbsp;<?php echo lang(\"SCOPE\");?>\n  </h2><br>\n\n  <p>\n    <?php echo lang(\"The evaluation carried out has focused on the objectives approved in the scope of the contract, which establishes:\");?>\n  </p> <br>\n\n\n<table>\n  <tr style='height:23.9pt'>\n    <td width=70 nowrap style='width:52.75pt;border:solid windowtext 1.0pt; background:#191c24;padding:0cm 3.5pt 0cm 3.5pt;height:23.9pt'>\n      <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b>\n        <span style='font-family:\"Calibri\",sans-serif;color:white'>No.</span></b></p>\n    </td>\n    <td width=380 nowrap style='width:284.7pt;border:solid windowtext 1.0pt;border-left:none;background:#191c24;padding:0cm 3.5pt 0cm 3.5pt;height:23.9pt'>\n      <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><b>\n        <span style='font-family:\"Calibri\",sans-serif;color:white'><?php echo lang(\"Objectives\");?></span></b></p>\n    </td>\n  </tr>\n\n  <?php \n  \n        $cantidad_objetivos_informe = \"select * from scope where id_informe=\".$id_url;  \n        $consulta_objetivos_informe = mysqli_query($conexion, $cantidad_objetivos_informe) or die(\"Error de conexión\");\n        \n        $contador_scope = 1;\n\n        while($fila_scope = mysqli_fetch_array($consulta_objetivos_informe)){\n            $id_scope=$fila_scope['id'];\n            $url_scope=$fila_scope['url'];\n\n            echo\"\n            \n            <tr style='height:23.9pt'>\n              <td width=70 nowrap style='width:52.75pt;border:solid windowtext 1.0pt;border-top:none;padding:0cm 3.5pt 0cm 3.5pt;height:23.9pt'>\n                <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n                  <span style='font-family:'Calibri',sans-serif;color:black'>$contador_scope</span>\n                </p>\n              </td>\n              <td width=380 nowrap style='width:284.7pt;border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 3.5pt 0cm 3.5pt;height:23.9pt'>\n                <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'>\n                  <span style='font-family:'Calibri',sans-serif;color:black'>$url_scope</span>\n                </p>\n              </td>\n            </tr>\n            \";\n\n            $contador_scope ++;\n        }\n  \n  ?>\n\n</table>\n\n</div>\n\n<span style='font-size:11.0pt;font-family:\"Verdana\",sans-serif'><br clear=all style='page-break-before:always'></span>\n\n<div class=WordSection9>\n  <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:10.0pt'>&nbsp;</span></p>\n  \n  <h1 style=\"color:<?php echo $color; ?>\" >\n    2&nbsp;<?php echo lang(\"EXECUTIVE SUMMARY\");?>\n  </h1><br>\n\n  <!--DESARROLLO DE GRAFICO EJECUTIVO--->\n  <?php\n  ini_set('display_errors', 1);\n  ini_set('display_startup_errors', 1);\n  error_reporting(E_ALL);\n\n      $cantidad_criticas = 0;\n      $cantidad_altas = 0;\n      $cantidad_medias = 0;\n      $cantidad_bajas = 0;\n      $total_vulnerabilidades = 0;\n\n      $cantidad_objetivos_informe = \"select * from scope where id_informe=\".$id_url;  \n      $consulta_objetivos_informe = mysqli_query($conexion, $cantidad_objetivos_informe) or die(\"Error de conexión\");\n      \n      \n      while($fila_scope = mysqli_fetch_array($consulta_objetivos_informe)){\n\n          $id_scope=$fila_scope['id'];\n          $nombre_scope=$fila_scope['url'];\n\n          $cantidad_vulns_scope = \"select * from scope_vulnerabilidades where id_scope=\".$id_scope.\" order by nivel desc\";  \n          $consulta_vulns_scope = mysqli_query($conexion, $cantidad_vulns_scope) or die(\"Error de conexión\");\n      \n          while($fila_vulns_scope = mysqli_fetch_array($consulta_vulns_scope)){\n\n            $nivel_scope=$fila_vulns_scope['nivel'];\n           \n            if($nivel_scope == 0){\n              $total_vulnerabilidades ++;\n            }\n\n            if($nivel_scope == 1){\n              $cantidad_bajas ++;\n            }else if ($nivel_scope == 2){\n              $cantidad_medias ++;\n            }else if ($nivel_scope == 3){\n              $cantidad_altas ++;\n            }else if ($nivel_scope == 4){\n              $cantidad_criticas ++;\n            }\n          }\n      }\n\n      $total_vulnerabilidades = $cantidad_altas + $cantidad_bajas + $cantidad_medias + $cantidad_criticas;\n\n      if($cantidad_altas > 0 || $cantidad_criticas > 0 || $cantidad_medias > 0 || $cantidad_bajas > 0){\n\n        $porcentaje_criticas = $cantidad_criticas * 100 / $total_vulnerabilidades;\n        $porcentaje_altas = $cantidad_altas * 100 / $total_vulnerabilidades;\n        $porcentaje_medias = $cantidad_medias * 100 / $total_vulnerabilidades;\n        $porcentaje_bajas = $cantidad_bajas * 100 / $total_vulnerabilidades;\n\n        $porcentaje_criticas = round($porcentaje_criticas, 1);\n        $porcentaje_altas = round($porcentaje_altas, 1);\n        $porcentaje_medias = round($porcentaje_medias, 1);\n        $porcentaje_bajas = round($porcentaje_bajas, 1);\n\n      }else{\n        $porcentaje_criticas = 0;\n        $porcentaje_altas = 0;\n        $porcentaje_medias = 0;\n        $porcentaje_bajas = 0;\n      }\n      \n    ?>\n\n  <span style='font-size:11.0pt;font-family:\"Verdana\",sans-serif'>\n    <?php echo lang(\"You have to capture a screenshot of this graphic to insert it into Word.\");?>\n  </span>\n  <br><br>\n\n  <script src=\"https://cdn.jsdelivr.net/npm/chart.js\"></script>\n  <style>td{border: 1px black solid} th{border: 1px black solid; background-color:black; color:white;}</style>\n  <center><canvas id=\"grafico\" width=\"400\" height=\"300\"></canvas></center>\n  <br>\n  <table id=\"tabla\" style='font-size:11.0pt;font-family:\"Verdana\",sans-serif;'>\n    <tr>\n      <th><center><?php echo lang(\"Vulnerability\");?></center></th>\n      <th><center><?php echo lang(\"Amount\");?></center></th>\n      <th><center><?php echo lang(\"Percentage\");?></center></th>\n    </tr>\n    <tr>\n      <td><center><?php echo lang(\"Very High\");?></center></td>\n      <td id=\"cantidad-criticas\"><center><?php echo $cantidad_criticas;?></center></td>\n      <td id=\"porcentaje-criticas\"><center><?php echo $porcentaje_criticas;?>%</center></td>\n    </tr>\n    <tr>\n      <td><center><?php echo lang(\"High\");?></center></td>\n      <td id=\"cantidad-altas\"><center><?php echo $cantidad_altas;?></center></td>\n      <td id=\"porcentaje-altas\"><center><?php echo $porcentaje_altas;?>%</center></td>\n    </tr>\n    <tr>\n      <td><center><?php echo lang(\"Medium\");?></center></td>\n      <td id=\"cantidad-medias\"><center><?php echo $cantidad_medias;?></center></td>\n      <td id=\"porcentaje-medias\"><center><?php echo $porcentaje_medias;?>%</center></td>\n    </tr>\n    <tr>\n      <td><center><?php echo lang(\"Low\");?></center></td>\n      <td id=\"cantidad-bajas\"><center><?php echo $cantidad_bajas;?></center></td>\n      <td id=\"porcentaje-bajas\"><center><?php echo $porcentaje_bajas;?></center></td>\n    </tr>\n  </table>\n\n<script>\n  const datos = {\n    labels: ['<?php echo lang(\"Very High\");?>', '<?php echo lang(\"High\");?>', '<?php echo lang(\"Medium\");?>', '<?php echo lang(\"Low\");?>'],\n    datasets: [{\n      data: [<?php echo $cantidad_criticas;?>, <?php echo $cantidad_altas;?>, <?php echo $cantidad_medias;?>, <?php echo $cantidad_bajas;?>], // Reemplaza estos valores con tus datos reales\n      backgroundColor: ['#ff1e16', '#ff8018', '#faef22', '#00a933']\n    }]\n  };\n\n  const ctx = document.getElementById('grafico').getContext('2d');\n  const myChart = new Chart(ctx, {\n    type: 'doughnut',\n    data: datos,\n    options: {\n      responsive: false,\n      maintainAspectRatio: false\n    }\n  });\n\n  // Función para calcular y mostrar porcentajes en la tabla\n  function mostrarPorcentajes() {\n    const cantidadTotal = datos.datasets[0].data.reduce((acc, val) => acc + val, 0);\n    datos.labels.forEach((label, index) => {\n      const cantidad = datos.datasets[0].data[index];\n      const porcentaje = ((cantidad / cantidadTotal) * 100).toFixed(2) + '%';\n      document.getElementById(`cantidad-${label.toLowerCase()}`).innerText = cantidad;\n      document.getElementById(`porcentaje-${label.toLowerCase()}`).innerText = porcentaje;\n    });\n  }\n\n  // Mostrar porcentajes al cargar la página\n  mostrarPorcentajes();\n</script>\n\n\n<!--###############################################-->\n\n<span style='font-size:12.0pt;font-family:\"Times New Roman\",serif'><br clear=all style='page-break-before:always'></span>\n\n<div class=WordSection10>\n\n  <p class=MsoBodyText style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:justify'><span style='font-size:10.0pt'>&nbsp;</span></p>\n\n  <h1 style=\"color:<?php echo $color; ?>\" >\n    3&nbsp;<?php echo lang(\"TEST RESULTS\");?>\n  </h2><br>\n\n  <h2 style=\"color:<?php echo $color; ?>\" >\n    3.1&nbsp;<?php echo lang(\"Objectives details\");?>\n  </h2><br>\n\n<?php \n\n      $cantidad_objetivos_informe = \"select * from scope where id_informe=\".$id_url;  \n      $consulta_objetivos_informe = mysqli_query($conexion, $cantidad_objetivos_informe) or die(\"Error de conexión\");\n      \n      while($fila_scope = mysqli_fetch_array($consulta_objetivos_informe)){\n          $id_scope=$fila_scope['id'];\n          $nombre_scope=$fila_scope['url'];\n\n          echo \"<h3><u>$nombre_scope</u></h3><br>\";\n\n          $cantidad_vulns_scope = \"select * from scope_vulnerabilidades where id_scope=\".$id_scope.\" order by nivel desc\";  \n          $consulta_vulns_scope = mysqli_query($conexion, $cantidad_vulns_scope) or die(\"Error de conexión\");\n      \n          while($fila_vulns_scope = mysqli_fetch_array($consulta_vulns_scope)){\n\n            $desc_nombre  = lang(\"Name\");\n            $criticidad_nivel  = lang(\"Criticality\");\n            $desc_descripcion = lang(\"Description\");\n            $desc_recomendacion  = lang(\"Recommendation\");\n\n            $id_scope=$fila_vulns_scope['id'];\n            $nivel_scope0=$fila_vulns_scope['nivel'];\n            $nivel_scope=$fila_vulns_scope['nivel'];\n            $nombre_scope=$fila_vulns_scope['nombre'];\n            $descripcion_scope=$fila_vulns_scope['descripcion'];\n            $recomendacion_scope=$fila_vulns_scope['solucion'];\n\n            if($nivel_scope == 1){\n              $nivel_scope = '<label>'.lang('Low').'</label>';\n            }else if ($nivel_scope == 2){\n              $nivel_scope = '<label>'.lang('Medium').'</label>';\n            }else if ($nivel_scope == 3){\n              $nivel_scope = '<label>'.lang('High').'</label>';\n            }else if ($nivel_scope == 4){\n              $nivel_scope = '<label>'.lang('Very High').'</label>';\n            }\n\n            echo \n            \"<br>\n            <p style='text-align:justify !important;'>\n              <b>$desc_nombre:</b> \".$nombre_scope.\"<br>\n            </p>\";\n\n            echo\n            \"<p style='text-align:justify !important; '>\n              <b>$criticidad_nivel:</b> \".$nivel_scope.\"<br>\n            </p><br>\";\n\n            echo \n            \"<p style='text-align:justify !important; '>\n              <b>$desc_descripcion</b><br><br>\".$descripcion_scope.\"\n            </p><br><br>\";\n            \n            $cantidad_vulns_imagen = \"select * from pocs where id_scope_vulnerabilidad=\".$id_scope;  \n            $consulta_vulns_imagen = mysqli_query($conexion, $cantidad_vulns_imagen) or die(\"Error de conexión\");\n      \n            while($fila_vulns_imagen = mysqli_fetch_array($consulta_vulns_imagen)){\n              $scope_imagen=$fila_vulns_imagen['ruta'];\n              $descripcion_imagen=$fila_vulns_imagen['descripcion'];\n            \n              if($scope_imagen > ''){\n                  echo \"<center><img src='$scope_imagen' width=436 height=300 ><br></center>\";\n                  echo \"<br><p>$descripcion_imagen</p><br>\";\n              }\n            }\n\n            echo\n            \"<br><p style='text-align:justify !important;'>\n              <b>$desc_recomendacion:</b> \".$recomendacion_scope.\"<br><br>\n            </p>\";\n\n            echo \"<hr>\";\n          }\n      }\n  \n?>\n\n  <span style='font-size:12.0pt;font-family:\"Times New Roman\",serif'><br clear=all style='page-break-before:always'></span>\n\n  <!--RECOMENDACIONES-->\n  <h1 style=\"color:<?php echo $color; ?>\" >\n    4&nbsp;<?php echo lang(\"Criticality table\");?>\n  </h1><br>\n  \n<?php \n\n      $cantidad_objetivos_informe = \"select * from scope where id_informe=\".$id_url;  \n      $consulta_objetivos_informe = mysqli_query($conexion, $cantidad_objetivos_informe) or die(\"Error de conexión\");\n      \n      while($fila_scope = mysqli_fetch_array($consulta_objetivos_informe)){\n          $id_scope=$fila_scope['id'];\n          $nombre_scope=$fila_scope['url'];\n\n          echo \"<br><h3>$nombre_scope</h3><br>\";\n\n          echo\"\n          \n          <table>\n            <tr style='height:14.8pt'>\n\n              <!--CABECERAS-->\n                <td width=175 nowrap valign=bottom style='width:300.1pt;border:solid windowtext 1.0pt; background:#191c24;padding:0cm 3.5pt 0cm 3.5pt;height:14.8pt;color:white;'>\n                  <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:3.5pt;margin-bottom:.0001pt;'>\n                    <b>\n                      <span style='font-family:'Calibri',sans-serif;color:white'>$desc_nombre</span>\n                    </b>\n                  </p>\n                </td>\n                <td width=165 nowrap valign=bottom style='width:7.55pt;border:solid windowtext 1.0pt;border-left:none;background:#191c24;padding:0cm 3.5pt 0cm 3.5pt;height:14.8pt;color:white;'>\n                  <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-left:14.2pt;margin-bottom:.0001pt;text-align:center'>\n                    <b>\n                      <span style='font-family:'Calibri',sans-serif;color:white'>$criticidad_nivel</span>\n                    </b>\n                  </p>\n                </td>\n              </tr>\n          \";\n\n          $cantidad_vulns_scope = \"select * from scope_vulnerabilidades where id_scope=\".$id_scope.\" order by nivel desc\";  \n          $consulta_vulns_scope = mysqli_query($conexion, $cantidad_vulns_scope) or die(\"Error de conexión\");\n      \n          while($fila_vulns_scope = mysqli_fetch_array($consulta_vulns_scope)){\n\n            $desc_nombre  = lang(\"Name\");\n            $criticidad_nivel  = lang(\"Criticality\");\n            $desc_descripcion = lang(\"Description\");\n            $desc_recomendacion  = lang(\"Recommendation\");\n\n            $id_scope=$fila_vulns_scope['id'];\n            $nivel_scope0=$fila_vulns_scope['nivel'];\n            $nivel_scope=$fila_vulns_scope['nivel'];\n            $nombre_scope=$fila_vulns_scope['nombre'];\n            $descripcion_scope=$fila_vulns_scope['descripcion'];\n            $recomendacion_scope=$fila_vulns_scope['solucion'];\n\n            if($nivel_scope == 1){\n              $nivel_scope = '<label>'.lang('Low').'</label>';\n            }else if ($nivel_scope == 2){\n              $nivel_scope = '<label>'.lang('Medium').'</label>';\n            }else if ($nivel_scope == 3){\n              $nivel_scope = '<label>'.lang('High').'</label>';\n            }else if ($nivel_scope == 4){\n              $nivel_scope = '<label>'.lang('Very High').'</label>';\n            }\n\n            echo \"\n            \n            <tr>\n              <td width=175 nowrap style='width:300.1pt;border:solid windowtext 1.0pt;padding:0cm 3.5pt 0cm 3.5pt;height:14.8pt'>\n                <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-bottom:.0001pt;margin-left:3.5pt;'>\n                  <span style='font-size:10.0pt;font-family:'Calibri',sans-serif;color:black'>$nombre_scope</span>\n                </p>\n              </td>\n              \n              <td width=165 nowrap style='width:70.55pt;border:solid windowtext 1.0pt;padding:0cm 3.5pt 0cm 3.5pt;height:14.8pt'>\n                <p class=MsoNormal style='margin-top:0cm;margin-right:23.05pt;margin-bottom:0cm;margin-bottom:.0001pt;margin-left:3.5pt;'>\n                  <span style='font-size:10.0pt;font-family:'Calibri',sans-serif;color:black'><center>$nivel_scope</center></span>\n                </p>\n              </td>\n            </tr>\n            \";\n          }\n          echo \"</table>\";\n      }\n  \n?>\n\n\n\n<span style='font-size:11.0pt;font-family:\"Verdana\",sans-serif'><br clear=all style='page-break-before:always'></span>\n\n  <!--CONCLUSIONES-->\n  <h1 style=\"color:<?php echo $color; ?>\" >\n    5&nbsp;<?php echo lang(\"Conclusions\");?>\n  </h1><br>\n  <p>\n      <?php echo $conclusiones; ?>\n  </p>\n\n<p class=Cabeceraypie>&nbsp;</p>\n\n</div>\n\n</body>\n\n</html>\n"
  },
  {
    "path": "BlackStone/gulp-tasks/inject.js",
    "content": "'use strict'\nvar gulp = require('gulp');\nvar injectPartials = require('gulp-inject-partials');\nvar inject = require('gulp-inject');\nvar rename = require('gulp-rename');\nvar prettify = require('gulp-prettify');\nvar replace = require('gulp-replace');\nvar merge = require('merge-stream');\n\n\n\n\n/* inject partials like sidebar and navbar */\ngulp.task('injectPartial', function () {\n    return gulp.src([\"./pages/*/*.html\", \"./index.html\"], {\n            base: \"./\"\n        })\n        .pipe(injectPartials())\n        .pipe(gulp.dest(\".\"));\n});\n\n\n\n/* inject Js and CCS assets into HTML */\ngulp.task('injectAssets', function () {\n    return gulp.src([\"./**/*.html\"])\n        .pipe(inject(gulp.src([\n            './assets/vendors/mdi/css/materialdesignicons.min.css',\n            './assets/vendors/css/vendor.bundle.base.css',\n            './assets/vendors/js/vendor.bundle.base.js',\n        ], {\n            read: false\n        }), {\n            name: 'plugins',\n            relative: true\n        }))\n        .pipe(inject(gulp.src([\n            './assets/js/off-canvas.js',\n            './assets/js/hoverable-collapse.js',\n            './assets/js/misc.js',\n            './assets/js/settings.js',\n            './assets/js/todolist.js'\n        ], {\n            read: false\n        }), {\n            relative: true\n        }))\n        .pipe(gulp.dest('.'));\n});\n\n\n\n/*replace image path and linking after injection*/\ngulp.task('replacePath', function () {\n    var replacePath1 = gulp.src('./pages/**/*.html', {\n            base: \"./\"\n        })\n        .pipe(replace('src=\"assets/images/', 'src=\"../../assets/images/'))\n        .pipe(replace('href=\"pages/', 'href=\"../../pages/'))\n        .pipe(replace('href=\"documentation\"', 'href=\"http://www.bootstrapdash.com/demo/corona-free/jquery/documentation/documentation.html\"'))\n        .pipe(replace('href=\"index.html\"', 'href=\"../../index.html\"'))\n        .pipe(gulp.dest('.'));\n    var replacePath2 = gulp.src('./**/index.html', {\n            base: \"./\"\n        })\n        .pipe(replace('href=\"documentation\"', 'href=\"http://www.bootstrapdash.com/demo/corona-free/jquery/documentation/documentation.html\"'))\n        .pipe(gulp.dest('.'));\n    return merge(replacePath1, replacePath2);\n});\n\n\n\ngulp.task('html-beautify', function () {\n    return gulp.src(['./**/*.html', '!node_modules/**/*.html'])\n        .pipe(prettify({\n            unformatted: ['pre', 'code', 'textarea']\n        }))\n        .pipe(gulp.dest(function (file) {\n            return file.base;\n        }));\n});\n\n/*sequence for injecting partials and replacing paths*/\ngulp.task('inject', gulp.series('injectPartial', 'injectAssets', 'html-beautify', 'replacePath'));"
  },
  {
    "path": "BlackStone/gulp-tasks/serve.js",
    "content": "'use strict'\nvar gulp = require('gulp');\nvar browserSync = require('browser-sync').create();\nvar sass = require('gulp-sass');\nvar gutil = require('gulp-util');\nvar plumber = require('gulp-plumber');\nvar notify = require('gulp-notify');\nvar sourcemaps = require('gulp-sourcemaps');\nvar autoprefixer = require('gulp-autoprefixer');\n// const del = require('del');\n\n\ngulp.task('sass', function () {\n    return gulp.src('./assets/scss/**/*.scss')\n        .pipe(sourcemaps.init())\n        .pipe(plumber({\n            errorHandler: function (err) {\n                notify.onError({\n                    title: \"Gulp error in \" + err.plugin,\n                    message: err.toString()\n                })(err);\n                gutil.beep();\n            }\n        }))\n        .pipe(sass())\n        // .pipe(autoprefixer({\n        //     overrideBrowserslist: ['last 2 versions'],\n        //     cascade: false\n        // }))\n        .pipe(sourcemaps.write('./maps'))\n        .pipe(gulp.dest('./assets/css'))\n        .pipe(browserSync.stream());\n});\n\n// Static Server + watching scss/html files\ngulp.task('serve', gulp.series('sass', function () {\n\n    browserSync.init({\n        port: 3000,\n        server: \"./\",\n        ghostMode: false,\n        notify: false\n    });\n\n    gulp.watch('./assets/scss/**/*.scss', gulp.series('sass'));\n    gulp.watch(['./assets/js/**/*.js', './**/*.html', './assets/css/**/*.css']).on('change', browserSync.reload);\n\n}));\n\n\n\ngulp.task('sass:watch', function () {\n    gulp.watch('./assets/scss/**/*.scss');\n});\n\n\n\n// Static Server without watching scss files\ngulp.task('serve:lite', function () {\n\n    browserSync.init({\n        server: \"./\",\n        ghostMode: false,\n        notify: false\n    });\n\n    gulp.watch('**/*.css').on('change', browserSync.reload);\n    gulp.watch('**/*.html').on('change', browserSync.reload);\n    gulp.watch('**/*.js').on('change', browserSync.reload);\n\n});"
  },
  {
    "path": "BlackStone/gulp-tasks/vendors.js",
    "content": "'use strict'\nvar gulp = require('gulp');\nvar concat = require('gulp-concat');\nvar merge = require('merge-stream');\nconst del = require('del');\n\n\ngulp.task('clean:vendors', function () {\n    return del([\n      './assets/vendors/**/*'\n    ]);\n});\n\n/*Building vendor scripts needed for basic template rendering*/\ngulp.task('buildBaseVendorScripts', function() {\n    return gulp.src([\n        './node_modules/jquery/dist/jquery.min.js', \n        // './node_modules/popper.js/dist/umd/popper.min.js',\n        './node_modules/bootstrap/dist/js/bootstrap.bundle.min.js', \n        './node_modules/perfect-scrollbar/dist/perfect-scrollbar.min.js'\n    ])\n      .pipe(concat('vendor.bundle.base.js'))\n      .pipe(gulp.dest('./assets/vendors/js'));\n});\n\n/*Building vendor styles needed for basic template rendering*/\ngulp.task('buildBaseVendorStyles', function() {\n    return gulp.src(['./node_modules/perfect-scrollbar/css/perfect-scrollbar.css'])\n      .pipe(concat('vendor.bundle.base.css'))\n      .pipe(gulp.dest('./assets/vendors/css'));\n});\n\n/*Scripts for addons*/\ngulp.task('buildOptionalVendorScripts', function() {\n    var aScript1 = gulp.src(['node_modules/chart.js/dist/Chart.min.js'])\n        .pipe(gulp.dest('./assets/vendors/chart.js'));\n    var aScript2 = gulp.src(['node_modules/progressbar.js/dist/progressbar.min.js'])\n        .pipe(gulp.dest('./assets/vendors/progressbar.js'));\n    var aScript3 = gulp.src(['node_modules/typeahead.js/dist/typeahead.bundle.min.js'])\n        .pipe(gulp.dest('./assets/vendors/typeahead.js'));\n    var aScript4 = gulp.src(['node_modules/select2/dist/js/select2.min.js'])\n        .pipe(gulp.dest('./assets/vendors/select2'));\n    var aScript5 = gulp.src(['node_modules/jvectormap/jquery-jvectormap.min.js'])\n        .pipe(gulp.dest('./assets/vendors/jvectormap'));\n    var aScript6 = gulp.src(['node_modules/jvectormap/tests/assets/jquery-jvectormap-world-mill-en.js'])\n        .pipe(gulp.dest('./assets/vendors/jvectormap'));\n    var aScript7 = gulp.src(['node_modules/jvectormap/tests/assets/jquery-jvectormap-world-mill-en.js'])\n        .pipe(gulp.dest('./assets/vendors/jvectormap'));\n    var aScript8 = gulp.src(['node_modules/owl.carousel/dist/owl.carousel.min.js'])\n        .pipe(gulp.dest('./assets/vendors/owl-carousel-2'));\n    var aScript9 = gulp.src(['node_modules/codemirror/lib/codemirror.js'])\n        .pipe(gulp.dest('./assets/vendors/codemirror'));\n    var aScript10 = gulp.src(['node_modules/codemirror/mode/javascript/javascript.js'])\n        .pipe(gulp.dest('./assets/vendors/codemirror'));\n    var aScript11 = gulp.src(['node_modules/codemirror/mode/shell/shell.js'])\n        .pipe(gulp.dest('./assets/vendors/codemirror'));\n    var aScript12 = gulp.src(['node_modules/pwstabs/assets/jquery.pwstabs.min.js'])\n        .pipe(gulp.dest('./assets/vendors/pwstabs'));\n    return merge(aScript1, aScript2, aScript3, aScript4, aScript5, aScript6,  aScript7, aScript7, aScript8, aScript9, aScript10, aScript11, aScript12);\n});\n\n\n/*Styles for addons*/\ngulp.task('buildOptionalVendorStyles', function() {\n    var aStyle1 = gulp.src(['./node_modules/@mdi/font/css/materialdesignicons.min.css'])\n        .pipe(gulp.dest('./assets/vendors/mdi/css'));\n    var aStyle2 = gulp.src(['./node_modules/@mdi/font/fonts/*'])\n        .pipe(gulp.dest('./assets/vendors/mdi/fonts'));\n    var aStyle3 = gulp.src(['./node_modules/flag-icon-css/css/flag-icon.min.css'])\n        .pipe(gulp.dest('./assets/vendors/flag-icon-css/css'));\n    var aStyle4 = gulp.src(['./node_modules/flag-icon-css/flags/**/*'])\n        .pipe(gulp.dest('./assets/vendors/flag-icon-css/flags'));\n    var aStyle5 = gulp.src(['node_modules/select2/dist/css/select2.min.css'])\n        .pipe(gulp.dest('./assets/vendors/select2')); \n    var aStyle6 = gulp.src(['node_modules/select2-bootstrap-theme/dist/select2-bootstrap.min.css'])\n        .pipe(gulp.dest('./assets/vendors/select2-bootstrap-theme'));\n    var aStyle7 = gulp.src(['node_modules/jvectormap/jquery-jvectormap.css'])\n        .pipe(gulp.dest('./assets/vendors/jvectormap')); \n    var aStyle8 = gulp.src(['node_modules/owl.carousel/dist/assets/owl.carousel.min.css'])\n        .pipe(gulp.dest('./assets/vendors/owl-carousel-2'));\n    var aStyle9 = gulp.src(['node_modules/owl.carousel/dist/assets/owl.theme.default.min.css'])\n        .pipe(gulp.dest('./assets/vendors/owl-carousel-2'));\n    var aStyle10 = gulp.src(['node_modules/owl.carousel/dist/assets/owl.video.play.png'])\n        .pipe(gulp.dest('./assets/vendors/owl-carousel-2'));\n    var aStyle11 = gulp.src(['node_modules/codemirror/lib/codemirror.css'])\n        .pipe(gulp.dest('./assets/vendors/codemirror'));\n    var aStyle12 = gulp.src(['node_modules/codemirror/theme/ambiance.css'])\n        .pipe(gulp.dest('./assets/vendors/codemirror'));\n    var aStyle13 = gulp.src(['node_modules/pwstabs/assets/jquery.pwstabs.min.css'])\n        .pipe(gulp.dest('./assets/vendors/pwstabs'));\n    return merge(aStyle1, aStyle2, aStyle3, aStyle4, aStyle5, aStyle6, aStyle7, aStyle8, aStyle9, aStyle10, aStyle11, aStyle12, aStyle13);\n});\n\n//Copy essential map files\ngulp.task('copyMapFiles', function() {\n    var map1 = gulp.src('node_modules/bootstrap/dist/js/bootstrap.min.js.map')\n        .pipe(gulp.dest('./assets/vendors/js'));\n    var map2 = gulp.src('node_modules/@mdi/font/css/materialdesignicons.min.css.map')\n        .pipe(gulp.dest('./assets/vendors/mdi/css'));\n    return merge(map1, map2);\n});\n\n/*sequence for building vendor scripts and styles*/\ngulp.task('bundleVendors', gulp.series('clean:vendors', 'buildBaseVendorStyles','buildBaseVendorScripts', 'buildOptionalVendorStyles', 'buildOptionalVendorScripts', 'copyMapFiles'));"
  },
  {
    "path": "BlackStone/index.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"dashboard\";\n?>\n\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BackStone - Dashboard</title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n  <body>\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n\n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/bs.png\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown d-none d-lg-block\">\n                <a class=\"nav-link btn btn-success create-new-button\" id=\"createbuttonDropdown\" aria-expanded=\"false\" href=\"insertar_informe.php\">+ <?php echo lang(\"Create New Report\");?> </a>\n              </li>\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"row\">\n              <div class=\"col-sm-4 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <h5><?php echo lang(\"Recorded vulnerabilities\"); ?></h5>\n                    <div class=\"row\">\n                      <div class=\"col-8 col-sm-12 col-xl-8 my-auto\">\n                        <div class=\"d-flex d-sm-block d-md-flex align-items-center\">\n                        <?php\n\n                          $sentencia = \"select * from vulnerabilidades\";    \n                          $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de conexión en tabla vulnerabilidades\");\n                          $filas_vulnerabilidades = 0;\n                          //vamos a recorrer la consulta y guardar los datos \n                          while($fila2= mysqli_fetch_array($consulta)){\n                              $filas_vulnerabilidades ++;\n                          }\n\n                          ?>\n                          <h2 class=\"mb-0\"><?php echo $filas_vulnerabilidades;?></h2>\n                        </div>\n                      </div>\n                      <div class=\"col-4 col-sm-12 col-xl-4 text-center text-xl-right\">\n                        <i class=\"icon-lg mdi mdi-bug text-primary ms-auto\"></i>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"col-sm-4 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <h5><?php echo lang(\"Registered companies\"); ?></h5>\n                    <div class=\"row\">\n\n                    <?php\n\n                      $sentencia = \"select * from empresas\";    \n                      $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de conexión\");\n                      $filas_empresas = 0;\n                      //vamos a recorrer la consulta y guardar los datos \n                      while($fila3= mysqli_fetch_array($consulta)){\n                          $filas_empresas ++;\n                      }\n                    ?>\n\n                      <div class=\"col-8 col-sm-12 col-xl-8 my-auto\">\n                        <div class=\"d-flex d-sm-block d-md-flex align-items-center\">\n                          <h2 class=\"mb-0\"><?php echo $filas_empresas; ?></h2>\n                        </div>\n                      </div>\n                      <div class=\"col-4 col-sm-12 col-xl-4 text-center text-xl-right\">\n                        <i class=\"icon-lg mdi mdi-account-card-details text-danger ms-auto\"></i>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div class=\"col-sm-4 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n\n                    <?php\n\n                      $sentencia = \"select * from informes\";    \n                      $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de conexión\");\n                      $filas_informes = 0;\n                      //vamos a recorrer la consulta y guardar los datos \n                      while($fila3= mysqli_fetch_array($consulta)){\n                          $filas_informes ++;\n                      }\n                    ?>\n\n                    <h5><?php echo lang(\"Reports made\"); ?></h5>\n                    <div class=\"row\">\n                      <div class=\"col-8 col-sm-12 col-xl-8 my-auto\">\n                        <div class=\"d-flex d-sm-block d-md-flex align-items-center\">\n                          <h2 class=\"mb-0\"><?php echo $filas_informes; ?></h2>\n                        </div>\n                      </div>\n                      <div class=\"col-4 col-sm-12 col-xl-4 text-center text-xl-right\">\n                        <i class=\"icon-lg mdi mdi-file-document-box text-success ms-auto\"></i>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n\n            <div class=\"row\">\n              <div class=\"col-md-4 grid-margin stretch-card\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <h4 class=\"card-title\"><?php echo lang(\"Vulns in database\");?></h4>\n                    <canvas id=\"transaction-history\" class=\"transaction-chart\"></canvas>\n                    <h4 class=\"card-title pt-5\"><?php echo lang(\"Last two reports\");?></h4>\n                    <?php\n\n                      $sentencia_infor = \"select * from informes order by fecha limit 2\";  \n                      $consulta_infor = mysqli_query($conexion, $sentencia_infor) or die(\"Error de conexión\");\n                      \n                      $cantidad_informes = 0;\n                      $cantidad_vulnerabilidades_informe = 0;\n\n                      while($fila_infor = mysqli_fetch_array($consulta_infor)){\n\n                        $id_infor=$fila_infor['id'];\n                        $vulnerabilidades=$fila_infor['vulnerabilidades'];\n                        $nombre_doc=$fila_infor['nombre_doc'];\n                        $fecha_proy=$fila_infor['fecha'];\n                        \n                        $separador = \",\";\n                        $vulns_separadas = explode($separador, $vulnerabilidades);//aqui obtenemos los id de cada una de las vulns del informe\n            \n                        foreach ($vulns_separadas as $vuln){//obtenemos el id de la vulnerabilidad\n\n                          $cantidad_vulnerabilidades_informe ++;\n                        }\n                        \n                        $fecha_texto = lang('Date:');\n                        \n                        echo \"\n                          <center>\n                            <div class='d-flex d-md-block d-xl-flex flex-row py-3 px-4 px-md-3 px-xl-4 rounded mt-3' style='background: #12151e; width:350px'>\n                              <div class='text-md-center text-xl-left'>\n                                <h6 class='mb-1'><a class='text-decoration-none text-white' href='editar_informe.php?id=\".$id_infor.\"'>\".$nombre_doc.\"</a></h6>\n                                <p class='text-muted mb-0'>\".$fecha_texto.\" \".$fecha_proy.\"</p>\n                              </div>\n                              <div class='align-self-center flex-grow text-right text-md-center text-xl-right py-md-2 py-xl-0'>\n                                <h6 class='font-weight-bold mb-0'><i class='mdi mdi-file-document-box' style='font-size: 15pt; color: #ffab00;' ></i></h6>\n                              </div>\n                            </div>\n                          </center>\";\n                      }\n                    ?>\n                  \n                  </div>\n                </div>\n              </div>\n\n              <div class=\"col-md-8 grid-margin stretch-card\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <div class=\"d-flex flex-row justify-content-between\">\n                      <h4 class=\"card-title mb-1\"><?php echo lang(\"Your clients\"); ?></h4>\n                    </div>\n                    <div class=\"row\">\n                      <div class=\"col-12\">\n                        <div class=\"preview-list\">\n\n\n                            <?php\n                              $sentencia = \"select * from empresas order by id\";    \n                              $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de conexión en tabla clientes\");\n\n                              //vamos a recorrer la consulta y guardar los datos \n                              while($fila3= mysqli_fetch_array($consulta)){\n\n                                  $id_empresa=$fila3['id'];\n                                  $nombre=$fila3['nombre'];\n                                  $web=$fila3['web'];\n                                  $logo=$fila3['logo'];\n                                \n                                  if($logo > ''){\n                                    $logo_listado = \"<img src='\".$logo.\"' style='border-radius:30px'>\";\n                                  }else{\n                                    $logo_listado = \"<img src='logos_clientes/bksnologo.jpg' style='border-radius:30px'>\";\n                                  }\n\n                                  if($logo == \"logos_clientes/\"){\n                                    $logo_listado = \"<img src='logos_clientes/bksnologo.jpg' style='border-radius:30px'>\";\n                                  }\n\n                                  \n                                  $sentencia_infor = \"select * from informes where id_empresa_auditada=\".$id_empresa;  \n                                  $consulta_infor = mysqli_query($conexion, $sentencia_infor) or die(\"Error de conexión\");\n                                  \n                                  $vulnerabilidades_scopes = 0;\n                                  $cantidad_informes = 0;\n\n                                  while($fila_infor = mysqli_fetch_array($consulta_infor)){\n                                    $id_informe=$fila_infor['id'];\n                                    $cantidad_informes ++;\n                                    \n                                    $cantidad_objetivos_informe = \"select * from scope where id_informe=\".$id_informe;  \n                                    $consulta_objetivos_informe = mysqli_query($conexion, $cantidad_objetivos_informe) or die(\"Error de conexión\");\n                                    \n                                    while($fila_scope = mysqli_fetch_array($consulta_objetivos_informe)){\n                                        $id_scope=$fila_scope['id'];\n\n                                        $cantidad_vulns_scope = \"select * from scope_vulnerabilidades where id_scope=\".$id_scope;  \n                                        $consulta_vulns_scope = mysqli_query($conexion, $cantidad_vulns_scope) or die(\"Error de conexión\");\n                                    \n                                        while($fila_vulns_scope = mysqli_fetch_array($consulta_vulns_scope)){\n                                          $id_scope=$fila_vulns_scope['id'];\n\n                                          $vulnerabilidades_scopes ++;\n                                        }\n                                    }\n                                  }\n\n                                \n                                  \n                                  $vulnerabilidades_encontradas = lang(\"Vulnerabilities found\");\n\n                                  echo $listado_clientes =\"<div class='preview-item border-bottom'>\n                                            <div class='preview-thumbnail'>\n                                              <div class='preview-icon'>\n                                                \".$logo_listado.\"\n                                              </div>\n                                            </div>\n                                            <div class='preview-item-content d-sm-flex flex-grow'>\n                                              <div class='flex-grow'>\n                                                <h6 class='preview-subject'><a class='text-decoration-none text-white' href='editar_clientes.php?id=\".$id_empresa.\"'>\".$nombre.\"</a></h6>\n                                                <p class='text-muted mb-0'>\".$web.\"</p>\n                                              </div>\n                                              <div class='me-auto text-sm-right pt-2 pt-sm-0'>\n                                                <p class='text-muted'>\".$cantidad_informes.\" \".lang(\"Reports made\").\"</p>\n                                                <p class='text-muted mb-0'>\".$vulnerabilidades_scopes.\" \".$vulnerabilidades_encontradas.\"</p>\n                                              </div>\n                                            </div>\n                                          </div>\";\n                              }\n\n                            ?>\n                          \n                        </div>\n                      </div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n          </div>\n\n          \n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <?php\n\n            $sentencia_vulns = \"select * from vulnerabilidades\";  \n            $consulta_vulns = mysqli_query($conexion, $sentencia_vulns) or die(\"Error de conexión\");\n\n            $total_vulns = 0;\n            $total_bajas = 0;\n            $total_medias = 0;\n            $total_altas = 0;\n            $total_muy_altas = 0;\n\n            while($fila_vulns = mysqli_fetch_array($consulta_vulns)){\n                $total_vulns ++;\n\n                $gravedad_vuln = $fila_vulns['nivel'];\n\n                if($gravedad_vuln == 1){\n                  $total_bajas ++;\n                }\n\n                if($gravedad_vuln == 2){\n                  $total_medias ++;\n                }\n\n                if($gravedad_vuln == 3){\n                  $total_altas ++;\n                }\n\n                if($gravedad_vuln == 4){\n                  $total_muy_altas ++;\n                }\n                \n            }\n\n            function obtenerPorcentaje($cantidad, $total) {\n              $porcentaje = ((float)$cantidad * 100) / $total; // Regla de tres\n              $porcentaje = round($porcentaje, 0);  // Quitar los decimales\n              return $porcentaje;\n            }\n\n            $cantidad_bajas = obtenerPorcentaje($total_bajas, $total_vulns);\n            $cantidad_medias = obtenerPorcentaje($total_medias, $total_vulns);\n            $cantidad_altas = obtenerPorcentaje($total_altas, $total_vulns);\n            $cantidad_muy_altas = obtenerPorcentaje($total_muy_altas, $total_vulns);\n\n            echo \"\n            <script>\n                    if ($('#transaction-history').length) {\n                      var areaData = {\n                        labels: ['\".lang(\"Low\").\"', '\".lang(\"Medium\").\"','\".lang(\"High\").\"', '\".lang(\"Very High\").\"'],\n                        datasets: [{\n                            data: [\".$cantidad_bajas.\", \".$cantidad_medias.\", \".$cantidad_altas.\", \".$cantidad_muy_altas.\"],\n                            backgroundColor: [\n                              '#0090e7','#00d25b','#ffab00', '#8f5fe8'\n                            ]\n                          }\n                        ]\n                      };\n                      var areaOptions = {\n                        responsive: true,\n                        maintainAspectRatio: true,\n                        segmentShowStroke: false,\n                        cutoutPercentage: 70,\n                        elements: {\n                          arc: {\n                              borderWidth: 0\n                          }\n                        },      \n                        legend: {\n                          display: false\n                        },\n                        tooltips: {\n                          enabled: true\n                        }\n                      }\n                      var transactionhistoryChartPlugins = {\n                        beforeDraw: function(chart) {\n                          var width = chart.chart.width,\n                              height = chart.chart.height,\n                              ctx = chart.chart.ctx;\n                      \n                          ctx.restore();\n                          var fontSize = 1;\n                          ctx.font = fontSize + 'rem sans-serif';\n                          ctx.textAlign = 'left';\n                          ctx.textBaseline = 'middle';\n                          ctx.fillStyle = '#ffffff';\n                      \n                          var text = '', \n                              textX = Math.round((width - ctx.measureText(text).width) / 2),\n                              textY = height / 2;\n                      \n                          ctx.fillText(text, textX, textY);\n\n                          ctx.restore();\n                          var fontSize = 0.75;\n                          ctx.font = fontSize + 'rem sans-serif';\n                          ctx.textAlign = 'left';\n                          ctx.textBaseline = 'middle';\n                          ctx.fillStyle = '#6c7293';\n\n                          var texts = '', \n                              textsX = Math.round((width - ctx.measureText(text).width) / 1.92),\n                              textsY = height / 1.7;\n                      \n                          ctx.fillText(texts, textsX, textsY);\n                          ctx.save();\n                        }\n                      }\n                      var transactionhistoryChartCanvas = $('#transaction-history').get(0).getContext('2d');\n                      var transactionhistoryChart = new Chart(transactionhistoryChartCanvas, {\n                        type: 'doughnut',\n                        data: areaData,\n                        options: areaOptions,\n                        plugins: transactionhistoryChartPlugins\n                      });\n                    }\n            </script>\";\n\n        \n        ?>\n  </body>\n</html>"
  },
  {
    "path": "BlackStone/informes.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"reports\";\n?>\n\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Reports\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown d-none d-lg-block\">\n                <a class=\"nav-link btn btn-success create-new-button\" id=\"createbuttonDropdown\" aria-expanded=\"false\" href=\"insertar_informe.php\">+ <?php echo lang(\"Add report\");?> </a>\n              </li>\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"List of reports\");?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"#\"><?php echo lang(\"Reports\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"List\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <div class=\"row\" style=\"--bs-gutter-x: 1.9rem !important;\">\n              <form class=\"nav-link mt-md-0 d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" id=\"busqueda\" placeholder=\"<?php echo lang(\"Search reports\"); ?>\" style=\"color:white;\">\n              </form>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-lg-12 grid-margin stretch-card\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <h4 class=\"card-title\"><?php echo lang(\"Reports\");?></h4>\n                    </p>\n                    <div class=\"table-responsive\">\n                      <table class=\"table\" id=\"tabla_listado_cve\">\n                        <thead>\n                          <tr>\n                            <th><?php echo lang(\"Report name\"); ?></th>\n                            <th><?php echo lang(\"Client name\");?></th>\n                            <th><center><?php echo lang(\"Deadline\");?></center></th>\n                            <th><center><?php echo lang(\"State\");?></center></th>\n                            <th></th>\n                            <th></th>\n                          </tr>\n                        </thead>\n\n                        <?php\n\n                        $sentencia = \"select * from informes order by id\";    \n                        $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de conexión en tabla vulnerabilidades\");\n\n                        //vamos a recorrer la consulta y guardar los datos \n                        while($fila= mysqli_fetch_array($consulta)){\n                                $id=$fila['id'];\n                                $nombre_doc=$fila['nombre_doc'];\n                                $id_empresa_auditada=$fila['id_empresa_auditada'];\n                                $vulnerabilidades=$fila['vulnerabilidades'];\n                                $estado=$fila['estado'];\n                                $fecha=$fila['fecha'];\n\n                                $sentencia_empresa = \"select * from empresas where id=\".$id_empresa_auditada;    \n                                $consulta_empresa = mysqli_query($conexion, $sentencia_empresa) or die(\"Error de conexión en tabla vulnerabilidades\");\n\n                                while($fila_empresa= mysqli_fetch_array($consulta_empresa)){\n                                  $nombre_empresa_auditada=$fila_empresa['nombre'];\n                                }\n\n                                if($estado == \"Terminado\"){\n                                    $estado = '<label class=\"badge badge-success\">'.lang('Finalized').'</label>';\n                                }else if ($estado == \"En proceso\"){\n                                  $estado = '<label class=\"badge badge-warning\">'.lang('In process').'</label>';\n                                }\n                        ?>\n\n                        <tbody>\n                          <tr>\n                            <td><?php echo $nombre_doc ?></td>\n                            <td><?php echo $nombre_empresa_auditada?></td>\n                            <td><center><?php echo $fecha?></center></td>\n                            <td><center><?php echo $estado ?></center></td>\n                            <td><a href=\"editar_informe.php?id=<?php echo $id ?>\"><i class=\"mdi mdi-border-color\" style=\"font-size:20px\"></i></a></td>\n                            <td><a href=\"eliminar_informe.php?id=<?php echo $id ?>\"><i class=\"mdi mdi-close-circle-outline\" style=\"color:red; font-size:20px\"></i></a></td>\n                          </tr>\n                          <?php\n                            }\n                          ?>\n                        </tbody>\n                      </table>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            \n          </div>\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>"
  },
  {
    "path": "BlackStone/insertar_clientes.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"vulnerabilidades\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Customers\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Add client\"); echo \" \".$id_url?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"clientes.php\"><?php echo lang(\"Companies\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Add client\");?></li>\n                </ol>\n              </nav>\n            </div>\n\n            <div class=\"row\">\n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n\n                    <form class=\"form-sample\" form action=\"\" method=\"post\" enctype=\"multipart/form-data\">\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Name\");?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"nombre\" name=\"nombre\" placeholder=\"<?php echo lang(\"Name\");?>\" value=\"<?php echo $nombre?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\">Web</label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"web\" name=\"web\" placeholder=\"Web\" value=\"<?php echo $web?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n                         <div class=\"row\">\n                        <div class=\"col-sm-12\">\n                            <div class=\"form-group\">\n                            <h2>Logo</h2>\n                                <input id=\"imagen\" name=\"imagen\" size=\"30\" type=\"file\">\n                            </div>\n                        </div>\n                    </div>\n                        \n                      </div>\n                      <button type=\"submit\" name=\"submit\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                    </form>\n\n                  </div>\n                </div>\n              </div>\n            </div>\n\n          \n            <?php\n    \n            if (isset($_POST['submit'])){\n              \n              /*error_reporting(E_ALL);\n              ini_set('display_errors', 1);*/\n\n              $nombre = htmlspecialchars($_POST['nombre'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              $web = htmlspecialchars($_POST['web'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              $nombre_img = $_FILES['imagen']['name'];\n              $nombreOriginal = $_FILES['imagen']['name'];\n\t      $nombreTemporal = $_FILES['imagen']['tmp_name'];\n\n\t      $file_extension = pathinfo($_FILES['imagen']['name'], PATHINFO_EXTENSION);\n\t      \n\t      // Comprobar si la extensión es png\n\t\tif (strtolower($file_extension) == 'png') {\n\t\t  \n\t\t  echo \"Archivo subido correctamente.\";\n\t\t} else {\n\t\t    \n\t\t    echo \"<script>alert('Only PNG images.')</script>\";\n\t\t    exit;\n\t\t}\n\n\t\t//=============================================================\n        \t// Obtener la extensión del archivo\n\t      $extension = pathinfo($nombreOriginal, PATHINFO_EXTENSION);\n        \n                // Generar un nuevo nombre para la imagen\n\t      $nuevoNombre = uniqid(bin2hex(openssl_random_pseudo_bytes(10)), true).\".\".$extension;\n\t\t\n\t\t// Ruta donde se guardará la imagen\n\t      $rutaDestino = 'logos_clientes/';\n\n\t\t// Mover la imagen al directorio de destino con el nuevo nombre\n\t      move_uploaded_file($_FILES['imagen']['tmp_name'],$rutaDestino.$nuevoNombre);\n\t\t\n\t      $logo = $rutaDestino.$nuevoNombre;\n              \n              $ultimo_id = \"SELECT * FROM `empresas` ORDER BY id DESC LIMIT 1\";\n              $consulta_ultimo_id = mysqli_query($conexion, $ultimo_id)or die(\"Error al conseguir el ultimo id\");\n\n              while($fila= mysqli_fetch_array($consulta_ultimo_id)){\n                $id=$fila['id'];\n              }\n              $id = $id + 1;\n              \n              $sentencia = \"INSERT INTO `empresas`(`id`, `nombre`, `web`, `logo`)\";\n              $sentencia .=\" VALUES ($id, '$nombre','$web', '$logo')\";\n\n              $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n\n              echo \"<script>alert('Saved')</script>\";\n\n              if (mysqli_affected_rows($conexion)!=0) {\n                header('Location: clientes.php');\n              }\n            }\n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/insertar_informe.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"reports\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Reports\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Add report\"); echo \" \".$id_url?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"informes.php\"><?php echo lang(\"Reports\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Add report\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n\n            <div class=\"row\">\n              \n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <form class=\"form-sample\" form action=\"\" method=\"post\">\n\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Document name\"); ?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"nombre_doc\" name=\"nombre_doc\" placeholder=\"<?php echo lang(\"Document name\"); ?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Customer name\");?></label> \n                            <div class=\"col-sm-8 col-8\">\n                              <select class=\"form-control\" id=\"empresa\" style=\"color:white\" name=\"empresa\" required>\n                                <option value=\"\"></option>\n\n                                <?php \n                        \n                                  $sentencia_empresa = \"select * from empresas\";\n                                  $consulta_empresa = mysqli_query($conexion, $sentencia_empresa) or die(\"Error de Consulta empresas\");\n\n                                  //vamos a recorrer la consulta y guardar los datos\n                                  while($fila= mysqli_fetch_array($consulta_empresa)){\n                                      $id=$fila['id'];\n                                      $nombre=$fila['nombre'];\n                                      \n                                      echo \"<option value=\".$id.\">\".$nombre.\"</option>\";\n                                  }\n                              ?>\n                              </select>\n                            </div>\n                            <label class=\"col-sm-1 col-1 col-form-label\"><i class=\"mdi mdi-format-line-spacing fs-5\"></i></label> \n                          </div>\n                        </div>\n                      </div>\n\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\" style=\"color:white;\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Discharge date\"); ?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"date\" class=\"form-control\" id=\"date\" name=\"date\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n                      </div>\n\n                      <button type=\"submit\" name=\"submit\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                    </form>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n            <?php\n\n            if (isset($_POST['submit'])){\n\n              $ultimo_id = \"SELECT * FROM `informes` ORDER BY id DESC LIMIT 1\";\n              $consulta_ultimo_id = mysqli_query($conexion, $ultimo_id)or die(\"Error al conseguir el ultimo id\");\n\n              while($fila= mysqli_fetch_array($consulta_ultimo_id)){\n                $id=$fila['id'];\n              }\n\n              $id = $id + 1;\n              $nombre_doc = htmlspecialchars($_POST['nombre_doc'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              $empresa = $_POST['empresa'];\n              $fecha = $_POST['date'];\n\n              $sentencia = \"INSERT INTO `informes`(`id`, `nombre_doc`, `id_empresa_auditada`, `fecha`, `estado`)\";\n              $sentencia .=\" VALUES ($id, '$nombre_doc','$empresa', '$fecha', 'En proceso')\";\n\n              $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de Consulta\".$sentencia);\n\n              if (mysqli_affected_rows($conexion)!=0){}\n\n              echo \"<script>alert('Saved')</script>\";\n            }   \n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n  </body>\n</html>"
  },
  {
    "path": "BlackStone/insertar_vulnerabilidades.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"vulnerabilidades\";\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$id_url = $urlArray[1];\n\n?>\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"Add vulnerability\"); echo \" \".$id_url?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"vulnerabilidades.php\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"Add vulnerability\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <div class=\"row\">\n              \n              <div class=\"col-12 grid-margin\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <form class=\"form-sample\" form action=\"\" method=\"post\">\n                      <div class=\"row\">\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Name\");?></label>\n                            <div class=\"col-sm-9\">\n                              <input type=\"text\" class=\"form-control\" id=\"nombre\" name=\"nombre\" placeholder=\"<?php echo lang(\"Name\");?>\" style=\"color:white;\">\n                            </div>\n                          </div>\n                        </div>\n                        <div class=\"col-md-6\">\n                          <div class=\"form-group row\">\n                            <label class=\"col-sm-3 col-form-label\"><?php echo lang(\"Criticality\");?></label> \n                            <div class=\"col-sm-8 col-8\">\n                              <select class=\"form-control\" id=\"exampleSelectGender\" style=\"color:white\" name=\"nivel\" required>\n                                <option value=\"1\"><?php echo lang(\"Low\");?></option>\n                                <option value=\"2\"><?php echo lang(\"Medium\");?></option>\n                                <option value=\"3\"><?php echo lang(\"High\");?></option>\n                                <option value=\"4\"><?php echo lang(\"Very High\");?></option>\n                              </select>\n                            </div>\n                            <label class=\"col-sm-1 col-1 col-form-label\"><i class=\"mdi mdi-format-line-spacing fs-5\"></i></label> \n                          </div>\n                        </div>\n                      </div>\n\n                      <br>\n                      <div class=\"row\">\n                        <div class=\"form-group row\">\n                          <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Description\");?></label>\n                          <textarea class=\"form-control m-3 text-white\" name=\"descripcion\" id=\"descripcion\" required style=\"height:150px;\"></textarea>\n                        </div>\n                      </div>\n                      <div class=\"row\">\n                        <div class=\"form-group row\">\n                          <label for=\"col-sm-3 col-form-label\"><?php echo lang(\"Solution\");?></label>\n                          <textarea class=\"form-control m-3 text-white\" name=\"solucion\" id=\"solucion\" required style=\"height:150px;\"></textarea>\n                        </div>\n                      </div>\n                      <button type=\"submit\" name=\"submit\" class=\"btn btn-primary me-2\"><?php echo lang(\"Save\"); ?></button>\n                    </form>\n                  </div>\n                </div>\n              </div>\n            </div>\n          \n            <?php\n    \n            if (isset($_POST['submit'])){\n\n              $nombre = htmlspecialchars($_POST['nombre'], ENT_QUOTES | ENT_HTML5, 'UTF-8');      \n              $nivel = htmlspecialchars($_POST['nivel'], ENT_QUOTES | ENT_HTML5, 'UTF-8');      \n              $descripcion = htmlspecialchars($_POST['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8'); \n              $solucion = htmlspecialchars($_POST['solucion'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n              $esfuerzo = htmlspecialchars($_POST['esfuerzo'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n\n              $ultimo_id = \"SELECT * FROM `vulnerabilidades` ORDER BY id DESC LIMIT 1\";\n              $consulta_ultimo_id = mysqli_query($conexion, $ultimo_id)or die(\"Error al conseguir el ultimo id\");\n\n              while($fila= mysqli_fetch_array($consulta_ultimo_id)){\n                $id=$fila['id'];\n              }\n\n              $id = $id + 1;\n              \n              $sentencia = \"INSERT INTO `vulnerabilidades`(`id`, `nombre`, `nivel`, `descripcion`, `solucion`)\";\n              $sentencia .=\" VALUES ($id, '$nombre', '$nivel', '$descripcion', '$solucion')\";\n          \n              $consulta = mysqli_query($conexion, $sentencia)or die(\"Error de consulta\");\n\n              echo \"<script>alert('Saved')</script>\";\n\n              if (mysqli_affected_rows($conexion)!=0) {\n              }\n            }\n            ?>\n\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>"
  },
  {
    "path": "BlackStone/login.php",
    "content": "<?php\n\n$url = $_SERVER[\"REQUEST_URI\"];\n$urlArray = explode('=', $url);\n$error = $urlArray[1];\n\nif($error == \"si\"){\n\n  echo \"<script> alert('Invalid User and Password') </script>\";\n}\n\n?>\n<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone Login</title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n  <body>\n    <div class=\"container-scroller\">\n      <div class=\"container-fluid page-body-wrapper full-page-wrapper\">\n        <div class=\"row w-100 m-0\">\n          <div class=\"content-wrapper full-page-wrapper d-flex align-items-center auth login-bg\">\n            <div class=\"card col-lg-4 mx-auto\">\n              <div class=\"card-body px-5 py-5\">\n              <center>\n                <div>\n                  <img src=\"assets/images/faces/proyect_logo.png\" width=\"50%\">\n                </div>\n              </center>\n                <form action=\"control_sesion/control_usuarios.php\" method=\"post\">\n                  <div class=\"form-group\">\n                    <label>Username</label>\n                    <input type=\"text\" name=\"usuario\" class=\"form-control p_input\" style=\"color:white;\">\n                  </div>\n                  <div class=\"form-group\">\n                    <label>Password</label>\n                    <input type=\"password\" name=\"pass\" class=\"form-control p_input\" style=\"color:white;\">\n                  </div>\n                  <div class=\"form-group\">\n                      <label>Select languaje</label>\n                      <select class=\"js-example-basic-single\" style=\"width:100%\" name=\"idioma\">\n                        <option value=\"EN\">English</option>\n                        <option value=\"ES\">Spanish</option>\n                      </select>\n                    </div>\n                  <div class=\"text-center\">\n                    <button type=\"submit\" class=\"btn btn-primary btn-block enter-btn\">Login</button>\n                  </div>\n                </form>\n              </div>\n            </div>\n          </div>\n          <!-- content-wrapper ends -->\n        </div>\n        <!-- row ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n  </body>\n</html>\n"
  },
  {
    "path": "BlackStone/logos_clientes/index.php",
    "content": ""
  },
  {
    "path": "BlackStone/nav.php",
    "content": "    <!-- partial:partials/_sidebar.html -->\n    <nav class=\"sidebar sidebar-offcanvas\" id=\"sidebar\">\n        <div class=\"sidebar-brand-wrapper d-none d-lg-flex align-items-center justify-content-center fixed-top\">\n          <a class=\"sidebar-brand brand-logo\" href=\"index.php\"><img src=\"assets/images/bs.png\" alt=\"logo\" style=\"height:10%; width:85%\"/></a>\n          <a class=\"sidebar-brand brand-logo-mini\" href=\"index.php\"><center><img src=\"assets/images/b_mini.png\" alt=\"logo\" style=\" width: 100%; height: 10%; margin-left: -40%;\" /></center></a>\n        </div>\n        <ul class=\"nav\">\n        <li class=\"nav-item profile\">\n            <div class=\"profile-desc\">\n              <div class=\"profile-pic\">\n                <div class=\"count-indicator\">\n                  <img class=\"img-xs rounded-circle \" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                  <span class=\"count bg-success\"></span>\n                </div>\n                <div class=\"profile-name\">\n                  <h5 class=\"mb-0 font-weight-normal\">BlackStone</h5>\n                  <span>System user</span>\n                </div>\n              </div>           \n            </div>\n          </li>\n\n          <li class=\"nav-item menu-items <?php if($section == \"dashboard\"){echo \"active\";}?>\">\n            <a class=\"nav-link\" href=\"index.php\">\n              <span class=\"menu-icon\">\n                <i class=\"mdi mdi-speedometer\"></i>\n              </span>\n              <span class=\"menu-title\"><?php echo lang(\"Dashboard\");?></span>\n            </a>\n          </li>\n\n          <li class=\"nav-item menu-items <?php if($section == \"vulnerabilities\"){echo \"active\";}?>\">\n            <a class=\"nav-link\" href=\"vulnerabilidades.php\">\n              <span class=\"menu-icon\">\n                <i class=\"mdi mdi-bug\"></i>\n              </span>\n              <span class=\"menu-title\"><?php echo lang(\"Vulnerabilities\");?></span>\n            </a>\n          </li>\n          <li class=\"nav-item menu-items <?php if($section == \"client\"){echo \"active\";}?>\">\n            <a class=\"nav-link\" href=\"clientes.php\">\n              <span class=\"menu-icon\">\n                <i class=\"mdi mdi-account-card-details\"></i>\n              </span>\n              <span class=\"menu-title\"><?php echo lang(\"Audited Client\");?></span>\n            </a>\n          </li>\n          <li class=\"nav-item menu-items <?php if($section == \"reports\"){echo \"active\";}?>\">\n            <a class=\"nav-link\" href=\"informes.php\">\n              <span class=\"menu-icon\">\n                <i class=\"mdi mdi-file-document-box\"></i>\n              </span>\n              <span class=\"menu-title\"><?php echo lang(\"Reports\");?></span>\n            </a>\n          </li>\n          <li class=\"nav-item menu-items <?php if($section == \"nist\"){echo \"active\";}?>\">\n            <a class=\"nav-link\" href=\"nist.php\">\n              <span class=\"menu-icon\">\n                <i class=\"mdi mdi-calculator\"></i>\n              </span>\n              <span class=\"menu-title\"><?php echo lang(\"NIST\");?></span>\n            </a>\n          </li>\n        </ul>\n      </nav>"
  },
  {
    "path": "BlackStone/nav_top.php",
    "content": "<nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>"
  },
  {
    "path": "BlackStone/nist.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"nist\";\n?>\n\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"NIST\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n    \n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              \n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"NIST calculator\");?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"#\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"List\");?></li>\n                </ol>\n              </nav>\n            </div>\n          \n            <div class=\"row\">\n              <div class=\"col-lg-12 grid-margin stretch-card\">\n                <div class=\"card\" style=\"height: 570px;\">\n                  <div class=\"card-body\">\n                    \n                    <iframe src=\"calculadora_nist/index.html\" width=\"100%\" height=\"100%\" sandbox=\"allow-scripts\">\n\n                  </div>\n                </div>\n              </div>\n            \n          </div>\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    \n  </body>\n</html>"
  },
  {
    "path": "BlackStone/vulnerabilidades.php",
    "content": "<!DOCTYPE html>\n<?php\n\ninclude(\"control_sesion/seguridad.php\");\ninclude(\"functions/traductor.php\");\ninclude(\"conexion.php\");\n\n$section = \"vulnerabilidades\";\n?>\n\n<html>\n  <head>\n    <!-- Required meta tags -->\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n    <title>BlackStone - <?php echo lang(\"Vulnerabilities\");?></title>\n    <!-- plugins:css -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/mdi/css/materialdesignicons.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/css/vendor.bundle.base.css\">\n    <!-- endinject -->\n    <!-- Plugin css for this page -->\n    <link rel=\"stylesheet\" href=\"assets/vendors/jvectormap/jquery-jvectormap.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/flag-icon-css/css/flag-icon.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.carousel.min.css\">\n    <link rel=\"stylesheet\" href=\"assets/vendors/owl-carousel-2/owl.theme.default.min.css\">\n    <!-- End plugin css for this page -->\n    <!-- inject:css -->\n    <!-- endinject -->\n    <!-- Layout styles -->\n    <link rel=\"stylesheet\" href=\"assets/css/style.css\">\n    <!-- End layout styles -->\n    <link rel=\"shortcut icon\" href=\"assets/images/faces/black-stone-transaprent.png\" />\n  </head>\n\n  <body class=\"sidebar-icon-only\">\n\n\n    <div class=\"container-scroller\">\n\n    <?php\n      include(\"nav.php\");\n    ?>\n      \n      <!-- partial -->\n      <div class=\"container-fluid page-body-wrapper\">\n        \n        <!-- partial:partials/_navbar.html -->\n        <nav class=\"navbar p-0 fixed-top d-flex flex-row\">\n          <div class=\"navbar-brand-wrapper d-flex d-lg-none align-items-center justify-content-center\">\n            <a class=\"navbar-brand brand-logo-mini\" href=\"index.html\"><img src=\"assets/images/logo-mini.svg\" alt=\"logo\" /></a>\n          </div>\n          <div class=\"navbar-menu-wrapper flex-grow d-flex align-items-stretch\">\n            <button class=\"navbar-toggler navbar-toggler align-self-center\" type=\"button\" data-toggle=\"minimize\">\n              <span class=\"mdi mdi-menu\"></span>\n            </button>\n            <ul class=\"navbar-nav w-100\">\n              <li class=\"nav-item w-100\">\n                <form class=\"nav-link mt-2 mt-md-0 d-none d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lang(\"Search Reports\"); ?>\">\n                </form>\n              </li>\n            </ul>\n            <ul class=\"navbar-nav navbar-nav-right\">\n              <li class=\"nav-item dropdown d-none d-lg-block\">\n                <a class=\"nav-link btn btn-success create-new-button\" id=\"createbuttonDropdown\" aria-expanded=\"false\" href=\"insertar_vulnerabilidades.php\">+ <?php echo lang(\"Add vulnerability\");?> </a>\n              </li>\n              <li class=\"nav-item dropdown border-left\">\n                <a class=\"nav-link count-indicator dropdown-toggle\" id=\"messageDropdown\" href=\"#\" data-bs-toggle=\"dropdown\" aria-expanded=\"false\">\n                  <i class=\"mdi mdi-email\"></i>\n                  <span class=\"count bg-success\"></span>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"messageDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Messages\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"https://microjoan.com/\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/microjoan.png\" href=\"https://microjoan.com/\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">MicroJoan</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                  <a class=\"dropdown-item preview-item\" href=\"future_news.php\" target=\"_blank\">\n                    <div class=\"preview-thumbnail\">\n                      <img src=\"assets/images/faces/news.png\" href=\"future_news.php\" alt=\"image\" class=\"rounded-circle profile-pic\">\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject ellipsis mb-1\">System</p>\n                      <p class=\"text-muted mb-0\">  <?php echo lang(\"Now\");?> </p>\n                    </div>\n                  </a>\n                </div>\n              </li>\n              <li class=\"nav-item dropdown\">\n                <a class=\"nav-link\" id=\"profileDropdown\" href=\"#\" data-bs-toggle=\"dropdown\">\n                  <div class=\"navbar-profile\">\n                    <img class=\"img-xs rounded-circle\" src=\"assets/images/faces/black-stone.png\" alt=\"\">\n                    <p class=\"mb-0 d-none d-sm-block navbar-profile-name\">BlackStone</p>\n                    <i class=\"mdi mdi-menu-down d-none d-sm-block\"></i>\n                  </div>\n                </a>\n                <div class=\"dropdown-menu dropdown-menu-right navbar-dropdown preview-list\" aria-labelledby=\"profileDropdown\">\n                  <h6 class=\"p-3 mb-0\"><?php echo lang(\"Profile\");?></h6>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"editar_perfil.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-settings text-success\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Settings\"); ?></p>\n                    </div>\n                  </a>\n                  <div class=\"dropdown-divider\"></div>\n                  <a class=\"dropdown-item preview-item\" href=\"cerrar_sesion.php\">\n                    <div class=\"preview-thumbnail\">\n                      <div class=\"preview-icon bg-dark rounded-circle\">\n                        <i class=\"mdi mdi-logout text-danger\"></i>\n                      </div>\n                    </div>\n                    <div class=\"preview-item-content\">\n                      <p class=\"preview-subject mb-1\"><?php echo lang(\"Log out\"); ?></p>\n                    </div>\n                  </a>\n              </li>\n            </ul>\n            <button class=\"navbar-toggler navbar-toggler-right d-lg-none align-self-center\" type=\"button\" data-toggle=\"offcanvas\">\n              <span class=\"mdi mdi-format-line-spacing\"></span>\n            </button>\n          </div>\n        </nav>\n        <!-- partial -->\n        <div class=\"main-panel\">\n          <div class=\"content-wrapper\">\n\n            <div class=\"page-header\">\n              <h3 class=\"page-title\"> <?php echo lang(\"List of vulnerabilities\");?> </h3>\n              <nav aria-label=\"breadcrumb\">\n                <ol class=\"breadcrumb\">\n                  <li class=\"breadcrumb-item\"><a href=\"#\"><?php echo lang(\"Vulnerabilities\");?></a></li>\n                  <li class=\"breadcrumb-item active\" aria-current=\"page\"><?php echo lang(\"List\");?></li>\n                </ol>\n              </nav>\n            </div>\n            \n            <div class=\"row\" style=\"--bs-gutter-x: 1.9rem !important;\">\n              <form class=\"nav-link mt-md-0 d-lg-flex search\">\n                  <input type=\"text\" class=\"form-control\" id=\"busqueda\" placeholder=\"<?php echo lang(\"Search vulnerabilities\"); ?>\" style=\"color:white;\">\n              </form>\n            </div>\n            <div class=\"row\">\n              <div class=\"col-lg-12 grid-margin stretch-card\">\n                <div class=\"card\">\n                  <div class=\"card-body\">\n                    <h4 class=\"card-title\"><?php echo lang(\"Vulnerabilities\");?></h4>\n                    </p>\n                    <div class=\"table-responsive\">\n                      <table class=\"table\" id=\"tabla_listado_cve\">\n                        <thead>\n                          <tr>\n                            <th><?php echo lang(\"Name\");?></th>\n                            <th><?php echo lang(\"Description\");?></th>\n                            <th><center><?php echo lang(\"Criticality\");?></center></th>\n                            <th></th>\n                            <th></th>\n                          </tr>\n                        </thead>\n\n                        <?php\n\n                          $sentencia = \"select * from vulnerabilidades order by id\";    \n                          $consulta = mysqli_query($conexion, $sentencia) or die(\"Error de conexión en tabla vulnerabilidades\");\n\n                            //vamos a recorrer la consulta y guardar los datos \n                            while($fila= mysqli_fetch_array($consulta)){\n                                $id=$fila['id'];\n                                $nombre=$fila['nombre'];\n                                $descripcion=htmlspecialchars($fila['descripcion'], ENT_QUOTES | ENT_HTML5, 'UTF-8');\n                                $nivel=$fila['nivel'];\n\n                                if($nivel == 1){\n                                    $nivel = '<label class=\"badge badge-success\">'.lang('Low').'</label>';\n                                }else if ($nivel == 2){\n                                  $nivel = '<label class=\"badge badge-warning\">'.lang('Medium').'</label>';\n                                }else if ($nivel == 3){\n                                  $nivel = '<label class=\"badge badge-danger\">'.lang('High').'</label>';\n                                }else if ($nivel == 4){\n                                  $nivel = '<label class=\"badge badge-info\">'.lang('Very High').'</label>';\n                                }\n                        ?>\n\n                        <tbody>\n                          <tr>\n                            <td><i class=\"mdi mdi-bug\" style=\"color:#8f5fe8\"></i> &nbsp; <?php echo $nombre ?></td>\n                            <td><?php echo substr($descripcion, 0, 50); ?>...</td>\n                            <td><center><?php echo $nivel ?></center></td>\n                            <td><a href=\"editar_vulnerabilidades.php?id=<?php echo $id ?>\"><i class=\"mdi mdi-border-color\" style=\"font-size:20px\"></i></a></td>\n                            <td><a href=\"eliminar_vulnerabilidades.php?id=<?php echo $id ?>\"><i class=\"mdi mdi-close-circle-outline\" style=\"color:red; font-size:20px\"></i></a></td>\n                          </tr>\n                          <?php\n                            }\n                          ?>\n                        </tbody>\n                      </table>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            \n          </div>\n          <!-- content-wrapper ends -->\n          <!-- partial:partials/_footer.html -->\n          <footer class=\"footer\">\n            <div class=\"d-sm-flex justify-content-center justify-content-sm-between\">\n              <span class=\"float-none float-sm-right d-block mt-1 mt-sm-0 text-center\"> <?php echo lang(\"Free Hacking reporting tool from \");?> <a href=\"https://microjoan.com/\" target=\"_blank\">MicroJoan</a></span>\n            </div>\n          </footer>\n          <!-- partial -->\n        </div>\n        <!-- main-panel ends -->\n      </div>\n      <!-- page-body-wrapper ends -->\n    </div>\n    <!-- container-scroller -->\n    <!-- plugins:js -->\n    <script src=\"assets/vendors/js/vendor.bundle.base.js\"></script>\n    <!-- endinject -->\n    <!-- Plugin js for this page -->\n    <script src=\"assets/vendors/chart.js/Chart.min.js\"></script>\n    <script src=\"assets/vendors/progressbar.js/progressbar.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap.min.js\"></script>\n    <script src=\"assets/vendors/jvectormap/jquery-jvectormap-world-mill-en.js\"></script>\n    <script src=\"assets/vendors/owl-carousel-2/owl.carousel.min.js\"></script>\n    <script src=\"assets/js/jquery.cookie.js\" type=\"text/javascript\"></script>\n    <!-- End plugin js for this page -->\n    <!-- inject:js -->\n    <script src=\"assets/js/off-canvas.js\"></script>\n    <script src=\"assets/js/hoverable-collapse.js\"></script>\n    <script src=\"assets/js/misc.js\"></script>\n    <script src=\"assets/js/settings.js\"></script>\n    <script src=\"assets/js/todolist.js\"></script>\n    <!-- endinject -->\n    <!-- Custom js for this page -->\n    <script src=\"assets/js/dashboard.js\"></script>\n    <!-- End custom js for this page -->\n\n    <script>\n      // Write on keyup event of keyword input element\n      $(document).ready(function(){\n      $(\"#busqueda\").keyup(function(){\n      _this = this;\n      // Show only matching TR, hide rest of them\n      $.each($(\"#tabla_listado_cve tbody tr\"), function() {\n\n          if($(this).text().toLowerCase().indexOf($(_this).val().toLowerCase()) === -1)\n          $(this).hide();\n          else\n              $(this).show();\n            });\n        });\n      });\n      </script>\n  </body>\n</html>"
  },
  {
    "path": "README.md",
    "content": "\n<div align=\"center\"> \n\n![Untitled Project](https://user-images.githubusercontent.com/55983491/182498046-639e515c-8de0-4804-959b-b53145e79109.gif)\n\nMy website: https://microjoan.com <br>\nMy blog: https://darkhacking.es/ <br>\nUse and installation video: https://youtu.be/qasPlaaYxiU <br>\nBuy me a coffee: https://www.buymeacoffee.com/microjoan\n\n</div>\n<hr>\n\n# BlackStone Project 2.0 (For Kali Linux)\n\nBlackStone project or \"BlackStone Project\" is a tool created in order to automate the work of drafting and submitting a report on audits of\nethical hacking or pentesting.\n\nIn this tool we can register in the database the vulnerabilities that we find in the audit, classifying them by internal, external audit\nor wifi, in addition, we can put your description and recommendation, as well as the level of severity and effort for its correction. This information will then help us generate\nin the report a criticality table as a global summary of the vulnerabilities found.\n\nWe can also register a company and, just by adding its web page, the tool will be able to find subdomains, telephone numbers, social networks,\nemployee emails...\n\n<div align=\"center\"> \n\n\n![BlackStone - Logo](https://user-images.githubusercontent.com/55983491/182504746-26c636f4-fe4f-410d-9898-e51f4ae35e6d.png)\n\n\n</div>\n\n### Install BlackStone\n\n#### Step 1\n\n```\ncd /opt\ngit clone https://github.com/micro-joan/BlackStone\ncd BlackStone\nchmod +x installer.sh\n./installer.sh\n```\nThe application will start automatically but if you log in you will get the 500 error so you must reboot the system and run the installer a second time (this is normal)\n\n#### Step 2\n\n```\n(reboot system)\ncd /opt/BlackStone\n./installer.sh\n```\n\n## USE\n\nOnce the installation is complete you can use blackstone from the terminal (with root):\n```\nblackstone\n```\n\nOr you can also look for the icon in the system:\n\n<div align=\"center\" width=\"200\" height=\"150\"> \n  \n  <!--![launcher](https://github.com/micro-joan/BlackStone/assets/55983491/87611bbf-f87d-4c41-8bc1-1c1f3a28080a)-->\n  \n  <img src=\"https://github.com/micro-joan/BlackStone/assets/55983491/87611bbf-f87d-4c41-8bc1-1c1f3a28080a\" width=\"500\">\n  \n</div>\n\n## LOGIN\n<h4>User: blackstone</h4>\n<h4>Password: blackstone</h4>\n\n## Latest news\n\n<ul>\n  <li>Own and automated installer for deployment of BlackStone in Kali Linux.</li>\n  <li>Replace Hunter.io results with similar results native to the app.</li>\n  <li>Fixed numerous fields sensitive to stored XSS.</li>\n  <li>Limitation of access to the BlackStone app only to the computer that runs it (no one on your network that detects your port 80 raised will be able to access this app).</li>\n  <li>Insert logo image for each of the clients, instead of automatic logo by favicon (good results were not achieved).</li>\n  <li>Automatic subdomain search in the client file, this functionality is native to the BlackStone code itself).</li>\n  <li>Fixed various Spanish/English translations.</li>\n  <li>System icon integration for BlackStone, the app is added in Kali as a native app with its own launcher.</li>\n</ul>\n\n# Use\n\nAfter having vulnerabilities in the database, we will go to the audited client and we will register a client along with their web page, once registered we can go\nto customer details and we can see the following information:\n\n\n<div align=\"center\">\n  THE USE OF THIS APPLICATION IS FOR PROFESSIONAL USE, THE AUTHOR IS NOT RESPONSIBLE FOR A MISUSE EMPLOYED\n</div>\n<br>\n<ul>\n<li>Subdomains of the website as well as information of interest found in google</li>\n<li>Emails of company workers or SMTP servers</li>\n</ul>\n\n![Untitled Project](https://user-images.githubusercontent.com/55983491/182502564-02929088-2584-4cd9-9d1a-52ce6cb69f17.gif)\n\nOnce we have the company that we are going to audit registered in the database, we will create a report, adding the date, name of the report and the company to which\nwill be audited. When we register the report, we will give it edit and then we will select the vulnerabilities that we want to appear\nin the report:\n\n![Untitled Project](https://user-images.githubusercontent.com/55983491/182503343-c1990024-83f2-4c4b-b524-08719d775cac.gif)\n\nFinally, we will generate the report by clicking on the \"overview report\" button, and later we will save the page that is generated as \".mht\", then we will open it with Word to be able to work on the generated report:\n\n![Untitled Project](https://user-images.githubusercontent.com/55983491/182504065-2a55fac4-b961-4cd8-8d38-1f02c98123fb.gif)\n\n<h1>Support Blackstone</h1>\n<a href=\"https://www.buymeacoffee.com/microjoan\" target=\"_blank\"><img src=\"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png\" alt=\"Buy Me A Coffee\" style=\"height: 60px !important;width: 217px !important;\" ></a>\n\n"
  },
  {
    "path": "installer.sh",
    "content": "exec 2>/dev/null\n\n#COLORES\ngreen='\\033[1;32m'\nred='\\e[;31m'\nendcolor='\\033[0m'\ninstall_library='\\033[1;31m'\n\nPWD=`pwd`\n\n#LIBRERIAS\nxampp_blackstone=`ls /opt/BlackStone/xampp_installer/xampp-installer.run`\nxampp_installed=`ls /opt/lampp/xampp`\nblackstone_installed=`ls /opt/lampp/htdocs/BlackStone`\nbbdd_installed=`ls $PWD/xampp_installer/db_installed.txt`\npython3_installed=`which python3`\ncreated_icon=`ls /usr/share/applications/blackstone.desktop`\n\nchmod 777 /opt/blackstone/xampp_installer/icon/blackstone.png\nchmod 777 /opt/blackstone/xampp_installer/icon/blackstone.desktop\n\necho \"\"\necho \"▄▄▄▄· ▄▄▌   ▄▄▄·  ▄▄· ▄ •▄ .▄▄ · ▄▄▄▄▄       ▐ ▄ ▄▄▄ . \"\necho \"▐█ ▀█▪██•  ▐█ ▀█ ▐█ ▌▪█▌▄▌▪▐█ ▀. •██  ▪     •█▌▐█▀▄.▀· \"\necho \"▐█▀▀█▄██▪  ▄█▀▀█ ██ ▄▄▐▀▀▄·▄▀▀▀█▄ ▐█.▪ ▄█▀▄ ▐█▐▐▌▐▀▀▪▄ \"\necho \"██▄▪▐█▐█▌▐▌▐█ ▪▐▌▐███▌▐█.█▌▐█▄▪▐█ ▐█▌·▐█▌.▐▌██▐█▌▐█▄▄▌ \"\necho \"·▀▀▀▀ .▀▀▀  ▀  ▀ ·▀▀▀ ·▀  ▀ ▀▀▀▀  ▀▀▀  ▀█▄▀▪▀▀ █▪ ▀▀▀  \"\necho \"\"\necho \"Created by Joan Moya (Aka. MicroJoan)\"\nsleep 3\n\necho \" \"\necho \" \"\necho \"Checking components for BLACKSTONE\"\necho \"===================================\"\necho \"\"\n\nsleep 0.5\n\n#Check as ROOT\nif ! [ $(id -u) = 0 ]; \n    then \n        echo \"\"\n        echo \" ${red} EXECUTE AS ROOT!! ${endcolor}\" \n        exit  \nfi\n\n#Check xampp installer binarie\nif [ -z $xampp_blackstone ] #si xampp_installed es vacío..\n    then\n        echo \"XAMP INSTALLER ${red} KO ${endcolor}\"\n        echo \"\"\n        sleep 1\n        echo \"Downloading Xampp installer on BlackStone...\"\n        echo \"\"\n        wget https://github.com/micro-joan/BlackStone/releases/download/installer/xampp-installer.run -P /opt/BlackStone/xampp_installer &\n        pid_descarga=$!\n\n        while kill -0 $pid_descarga 2>/dev/null; do\n            sleep 1\n        done # Continuar con la siguiente acción después de que la descarga haya finalizado\n\n    else\n        echo \"XAMPP INSTALLER ${green} OK ${endcolor}\"\nfi\n\nsleep 1\n\n#Check xampp\nif [ -z $xampp_installed ] #si xampp_installed es vacío..\n    then\n        echo \"XAMP ${red} KO ${endcolor}\"\n        echo \"\"\n        sleep 1\n        echo \"Installing Xampp...\"\n        echo \"\"\n        chmod 777 /opt/BlackStone/xampp_installer/xampp-installer.run\n        chmod +x /opt/BlackStone/xampp_installer/xampp-installer.run & ./xampp_installer/xampp-installer.run\n        clear\n    else\n        echo \"XAMPP ${green} OK ${endcolor}\"\nfi\n\nsudo /opt/lampp/lampp start\n\nsleep 1\n\n#Check blackstone\nif [ -z $blackstone_installed ] #si blackstone_installed es vacío..\n    then\n        echo \"\"\n        echo \"${red} Installing BlackStone core${endcolor}\"\n        echo \"\"\n        sleep 1\n        chmod /opt/lampp/htdocs\n        cp -r BlackStone/ /opt/lampp/htdocs #copiamos todos los archivos al nuevo directorio\n        chmod -R 777 /opt/lampp/htdocs/BlackStone/\n        sleep 1\n    else\n        echo \"BlackStone core ${green} OK ${endcolor}\"\nfi\n\nsleep 1\n\necho \"Installing DB on BlackStone...\"\nsleep 1\n\n# Configuración de la base de datos\nDB_USER=\"root\"\nDB_PASS=\"\"\nDB_NAME=\"blackstone\"\n\n# Ruta del archivo SQL a importar\nPWD=`pwd`\nSQL_FILE=\"blackstone.sql\"\nROUTE_FILE=\"$PWD/xampp_installer/$SQL_FILE\"\n\n# Comando para importar el archivo SQL en la base de datos\n/opt/lampp/bin/mysql -u${USER} -e \"CREATE DATABASE $DB_NAME;\" \n/opt/lampp/bin/mysql -u${USER} $DB_NAME < $ROUTE_FILE\n\necho \"\"\necho \"¡Database is installed now!\"\nsleep 2\nclear\n\n/opt/lampp/xampp restart > /dev/null\n\n#Check DB installed\nif [ -z $bbdd_installed ] #si bbdd_installed es vacío..\n    then\n        echo \"Database ${red} not installed ${endcolor}\"\n        echo \"\"\n        sleep 1\n        echo \"Installing DB on BlackStone...\"\n        sleep 1\n\n        # Configuración de la base de datos\n        DB_USER=\"root\"\n        DB_PASS=\"\"\n        DB_NAME=\"blackstone\"\n\n        # Ruta del archivo SQL a importar\n        PWD=`pwd`\n        SQL_FILE=\"blackstone.sql\"\n        ROUTE_FILE=\"$PWD/xampp_installer/$SQL_FILE\"\n\n        # Comando para importar el archivo SQL en la base de datos\n        /opt/lampp/bin/mysql -u${USER} -e \"DROP DATABASE $DB_NAME;\"\n        /opt/lampp/bin/mysql -u${USER} -e \"CREATE DATABASE $DB_NAME;\" \n        /opt/lampp/bin/mysql -u${USER} $DB_NAME < $ROUTE_FILE\n\n        sleep 2\n        # echo \"database installed\" > xampp_installer/db_installed.txt #creamos archivo para verificar que se ha instalado la db\n        echo \"\"\n        clear\n        echo \"\"\n        echo \"¡Database is installed now!\"\n        sleep 2\n        clear\n    else\n        echo \"BlackStone DB ${green} OK ${endcolor}\"\nfi\n\nsleep 1\n\n#creamos alias en sistema\ncp /opt/BlackStone/xampp_installer/icon/blackstone /usr/local/bin/blackstone\nchmod +x /usr/local/bin/blackstone\n\n#copiamos el icono en sistema\ncp /opt/BlackStone/xampp_installer/icon/blackstone.desktop /usr/share/applications/blackstone.desktop\nchmod +x /usr/share/applications/blackstone.desktop\n\n#configuramos arranque desde alias/icono\nchmod +x /opt/BlackStone/xampp_installer/icon/simple_launch.sh\n\necho \" \"\necho \"Launching BlackStone...\"\necho \"\"\nsleep2\n\nxdg-open \"http://localhost/BlackStone/\"\n\nexit\n\n\n\n"
  },
  {
    "path": "unistall.txt",
    "content": "To uninstall BlackStone completely you must perform the following steps:\n\n-Delete the \"blakstone\" folder found in /opt/lampp/htdocs.\n\n-Delete the database, which you can find in the browser in the following path: \"http://localhost/phpmyadmin/index.php?route=/database/structure&db=blackstone\"\n\n-Delete the BlackStone icon found in the \"/usr/local/bin/blackstone\" directory\n"
  },
  {
    "path": "xampp_installer/blackstone.sql",
    "content": "-- phpMyAdmin SQL Dump\n-- version 5.2.1\n-- https://www.phpmyadmin.net/\n--\n-- Host: localhost\n-- Generation Time: Oct 18, 2024 at 01:16 PM\n-- Server version: 10.4.28-MariaDB\n-- PHP Version: 8.1.17\n\nSET SQL_MODE = \"NO_AUTO_VALUE_ON_ZERO\";\nSTART TRANSACTION;\nSET time_zone = \"+00:00\";\n\n\n/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;\n/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;\n/*!40101 SET NAMES utf8mb4 */;\n\n--\n-- Database: `blackstone`\n--\n\n-- --------------------------------------------------------\n\n--\n-- Table structure for table `empresas`\n--\n\nCREATE TABLE `empresas` (\n  `id` int(11) NOT NULL,\n  `nombre` text DEFAULT NULL,\n  `web` text DEFAULT NULL,\n  `dominio_correo` text DEFAULT NULL,\n  `logo` text NOT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;\n\n--\n-- Dumping data for table `empresas`\n--\n\nINSERT INTO `empresas` (`id`, `nombre`, `web`, `dominio_correo`, `logo`) VALUES\n(1, 'Royal Tech', 'https://royaltech.com', NULL, 'logos_clientes/logo_example.png');\n\n-- --------------------------------------------------------\n\n--\n-- Table structure for table `informes`\n--\n\nCREATE TABLE `informes` (\n  `id` int(11) NOT NULL,\n  `nombre_doc` varchar(255) DEFAULT NULL,\n  `id_empresa_auditada` int(11) DEFAULT NULL,\n  `vulnerabilidades` text DEFAULT NULL,\n  `estado` text DEFAULT NULL,\n  `fecha` date DEFAULT NULL,\n  `recomendaciones` text DEFAULT NULL,\n  `propuestas` text DEFAULT NULL,\n  `conclusiones` text DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;\n\n--\n-- Dumping data for table `informes`\n--\n\nINSERT INTO `informes` (`id`, `nombre_doc`, `id_empresa_auditada`, `vulnerabilidades`, `estado`, `fecha`, `recomendaciones`, `propuestas`, `conclusiones`) VALUES\n(2, 'Pentesting Royal Tech', 1, NULL, 'En proceso', '2023-08-03', NULL, NULL, 'Lorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal manera que logró hacer un libro de textos especimen. No sólo sobrevivió 500 años, sino que tambien ingresó como texto de relleno en documentos electrónicos, quedando esencialmente igual al original. Fue popularizado en los 60s con la creación de las hojas \\\"Letraset\\\", las cuales contenian pasajes de Lorem Ipsum, y más recientemente con software de autoedición, como por ejemplo Aldus PageMaker, el cual incluye versiones de Lorem Ipsum.\\r\\n\\r\\n<br><br>\\r\\n\\r\\nLorem Ipsum es simplemente el texto de relleno de las imprentas y archivos de texto. Lorem Ipsum ha sido el texto de relleno estándar de las industrias desde el año 1500, cuando un impresor (N. del T. persona que se dedica a la imprenta) desconocido usó una galería de textos y los mezcló de tal manera que logró hacer un libro de textos especimen. No sólo sobrevivió 500 años, sino que tambien ingresó como texto de relleno en documentos electrónicos, quedando esencialmente igual al original. Fue popularizado en los 60s con la creación de las hojas \\\"Letraset\\\", las cuales contenian pasajes de Lorem Ipsum, y más recientemente con software de autoedición, como por ejemplo Aldus PageMaker, el cual incluye versiones de Lorem Ipsum.');\n\n-- --------------------------------------------------------\n\n--\n-- Table structure for table `pocs`\n--\n\nCREATE TABLE `pocs` (\n  `id` int(11) NOT NULL,\n  `ruta` text DEFAULT NULL,\n  `descripcion` text DEFAULT NULL,\n  `id_scope_vulnerabilidad` int(11) DEFAULT NULL,\n  `orden` int(11) NOT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;\n\n--\n-- Dumping data for table `pocs`\n--\n\nINSERT INTO `pocs` (`id`, `ruta`, `descripcion`, `id_scope_vulnerabilidad`, `orden`) VALUES\n(2, 'elementos_poc/64cbe79c76423_5.png', NULL, 5, 1),\n(3, 'elementos_poc/64cbe8e4a4794_6.png', NULL, 6, 1),\n(4, 'elementos_poc/64cbe922de8b3_7.png', NULL, 7, 1),\n(5, 'elementos_poc/64cbe987605b2_8.png', NULL, 8, 1),\n(6, 'elementos_poc/64cbe9c2806e9_9.png', NULL, 9, 1),\n(7, 'elementos_poc/64cbea32237a6_12.png', NULL, 12, 1),\n(8, 'elementos_poc/64cbea5b4736f_13.png', NULL, 13, 1),\n(9, 'elementos_poc/64cbeb0591386_17.png', NULL, 17, 1),\n(10, 'elementos_poc/64cbfc357495b_10.webp', NULL, 10, 1),\n(11, 'elementos_poc/64cbfc68a1091_14.png', NULL, 14, 1),\n(12, 'elementos_poc/64cbfcc8c3603_15.png', NULL, 15, 1),\n(17, 'elementos_poc/656e31a8e4ad3_4.png', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 4, 1),\n(18, 'elementos_poc/656e3dfa6c473_4.png', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.', 4, 2);\n\n-- --------------------------------------------------------\n\n--\n-- Table structure for table `scope`\n--\n\nCREATE TABLE `scope` (\n  `id` int(11) NOT NULL,\n  `url` text NOT NULL,\n  `id_informe` int(11) NOT NULL,\n  `orden` int(11) NOT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;\n\n--\n-- Dumping data for table `scope`\n--\n\nINSERT INTO `scope` (`id`, `url`, `id_informe`, `orden`) VALUES\n(15, 'royaltech.com', 2, 1),\n(16, 'subdomain.royaltech.com', 2, 2),\n(17, '192.168.0.1 - DC', 2, 3),\n(18, '192.168.0.15 - Server', 2, 4);\n\n-- --------------------------------------------------------\n\n--\n-- Table structure for table `scope_vulnerabilidades`\n--\n\nCREATE TABLE `scope_vulnerabilidades` (\n  `id_vulnerabilidad` int(11) NOT NULL,\n  `descripcion` text NOT NULL,\n  `nivel` double(10,1) NOT NULL,\n  `id` int(11) NOT NULL,\n  `nombre` text NOT NULL,\n  `id_scope` int(11) NOT NULL,\n  `solucion` text NOT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;\n\n--\n-- Dumping data for table `scope_vulnerabilidades`\n--\n\nINSERT INTO `scope_vulnerabilidades` (`id_vulnerabilidad`, `descripcion`, `nivel`, `id`, `nombre`, `id_scope`, `solucion`) VALUES\n(5, 'Allows attackers to execute malicious SQL queries.', 4.0, 1, 'SQL Injection', 5, 'Use prepared statements and parameterized queries.'),\n(5, 'Allows attackers to execute malicious SQL queries.', 4.0, 2, 'SQL Injection', 11, 'Use prepared statements and parameterized queries.'),\n(5, 'Allows attackers to execute malicious SQL queries.', 4.0, 3, 'SQL Injection', 12, 'Use prepared statements and parameterized queries.'),\n(5, 'Allows attackers to execute malicious SQL queries.', 4.0, 4, 'SQL Injection', 15, 'Use prepared statements and parameterized queries.'),\n(6, 'Enables attackers to inject malicious scripts into web pages.', 3.0, 5, 'Cross-Site Scripting (XSS)', 15, 'Implement proper input validation and output encoding.'),\n(10, 'Tricks users into unknowingly executing unwanted actions.', 3.0, 6, 'Cross-Site Request Forgery (CSRF)', 15, 'Use CSRF tokens and implement the PRG pattern.'),\n(14, 'Enables attackers to include and execute arbitrary files.', 3.0, 7, 'File Inclusion Vulnerabilities', 15, 'Avoid using user-supplied input in file inclusion paths.'),\n(18, 'Enables attackers to execute arbitrary system commands.', 3.0, 8, 'Command Injection', 16, 'Implement proper input validation and use safe APIs to execute commands.'),\n(22, 'Weak authentication mechanisms that can be easily bypassed.', 3.0, 9, 'Insecure Authentication', 16, 'Use strong password policies, implement multi-factor authentication.'),\n(26, 'Allows attackers to include and execute remote files.', 4.0, 10, 'Remote File Inclusion (RFI)', 16, 'Avoid using user-supplied input in file inclusion paths.'),\n(97, 'Allows attackers to extract service account hashes from the domain controller.', 4.0, 12, 'Kerberoasting', 17, 'Limit user and service accounts with sensitive privileges, and use strong service account passwords.'),\n(98, 'Allows attackers to use stolen Kerberos tickets to gain unauthorized access.', 4.0, 13, 'Pass-the-Ticket (PtT) Attack', 17, 'Regularly rotate Kerberos tickets, limit user privileges, and implement account logon restrictions.'),\n(99, 'Allows attackers to forge Kerberos tickets to gain unauthorized access.', 4.0, 14, 'Golden Ticket Attack', 17, 'Regularly rotate domain controller KRBTGT password and monitor for suspicious activity.'),\n(82, 'Allows unauthorized access to certain functionalities or resources.', 2.0, 15, 'Insufficient Authorization', 18, 'Implement proper access controls and authorization mechanisms.'),\n(137, 'Exposes sensitive information about AD objects.', 3.0, 17, 'Active Directory Information Disclosure', 18, 'Control access to AD information and limit the information exposed to users.');\n\n-- --------------------------------------------------------\n\n--\n-- Table structure for table `usuarios`\n--\n\nCREATE TABLE `usuarios` (\n  `id` int(11) NOT NULL,\n  `nombre` varchar(255) DEFAULT NULL,\n  `contra` varchar(255) DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;\n\n--\n-- Dumping data for table `usuarios`\n--\n\nINSERT INTO `usuarios` (`id`, `nombre`, `contra`) VALUES\n(1, 'blackstone', '$2y$10$eWlAFAHveUj4.WGy/2xCuOWXYAaVHe6PU3C8PN/reEdKQU69QRDlC');\n\n-- --------------------------------------------------------\n\n--\n-- Table structure for table `vulnerabilidades`\n--\n\nCREATE TABLE `vulnerabilidades` (\n  `id` int(11) NOT NULL,\n  `descripcion` text DEFAULT NULL,\n  `solucion` text DEFAULT NULL,\n  `nivel` int(11) DEFAULT NULL,\n  `nombre` text NOT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci;\n\n--\n-- Dumping data for table `vulnerabilidades`\n--\n\nINSERT INTO `vulnerabilidades` (`id`, `descripcion`, `solucion`, `nivel`, `nombre`) VALUES\n(5, 'Allows attackers to execute malicious SQL queries.', 'Use prepared statements and parameterized queries.', 4, 'SQL Injection'),\n(6, 'Enables attackers to inject malicious scripts into web pages.', 'Implement proper input validation and output encoding.', 3, 'Cross-Site Scripting (XSS)'),\n(7, 'Allows attackers to execute code on a remote server.', 'Keep software and libraries up-to-date, use a Web Application Firewall.', 4, 'Remote Code Execution (RCE)'),\n(8, 'Exposes sensitive information like passwords or credit card details.', 'Encrypt sensitive data, use secure communication protocols.', 2, 'Sensitive Data Exposure'),\n(9, 'Allows attackers to access unauthorized resources.', 'Implement proper access controls and authentication mechanisms.', 2, 'Insecure Direct Object References'),\n(10, 'Tricks users into unknowingly executing unwanted actions.', 'Use CSRF tokens and implement the PRG pattern.', 3, 'Cross-Site Request Forgery (CSRF)'),\n(11, 'Allows attackers to make requests from the server to internal resources.', 'Validate and sanitize user-supplied URLs, restrict access to trusted domains.', 4, 'Server-Side Request Forgery (SSRF)'),\n(12, 'Attempts to guess passwords or encryption keys.', 'Enforce account lockouts, use strong and complex passwords.', 2, 'Brute Force Attack'),\n(13, 'Allows attackers to redirect users to malicious websites.', 'Avoid using user-supplied input in redirect URLs.', 3, 'Unvalidated Redirects and Forwards'),\n(14, 'Enables attackers to include and execute arbitrary files.', 'Avoid using user-supplied input in file inclusion paths.', 3, 'File Inclusion Vulnerabilities'),\n(15, 'Allows attackers to execute arbitrary code during deserialization.', 'Validate and sanitize serialized data, use secure serialization formats.', 4, 'Insecure Deserialization'),\n(16, 'Enables attackers to execute malicious code within server-side templates.', 'Avoid using user input directly in templates, sanitize and validate template data.', 4, 'Server-Side Template Injection (SSTI)'),\n(17, 'Allows attackers to read sensitive data and perform denial-of-service attacks.', 'Disable external entity parsing, use safer data formats like JSON.', 3, 'XML External Entity (XXE) Injection'),\n(18, 'Enables attackers to execute arbitrary system commands.', 'Implement proper input validation and use safe APIs to execute commands.', 3, 'Command Injection'),\n(19, 'Occurs when security settings are not properly configured.', 'Follow security best practices, keep software and services up-to-date.', 2, 'Security Misconfiguration'),\n(20, 'Exposes sensitive data and allows unauthorized access.', 'Use authentication and authorization mechanisms for APIs.', 2, 'Unsecured APIs'),\n(21, 'Allows unauthorized websites to make requests to a server.', 'Configure CORS headers properly to restrict cross-origin requests.', 2, 'Cross-Origin Resource Sharing (CORS) Misconfiguration'),\n(22, 'Weak authentication mechanisms that can be easily bypassed.', 'Use strong password policies, implement multi-factor authentication.', 3, 'Insecure Authentication'),\n(23, 'Allows attackers to access unauthorized resources by manipulating object references.', 'Use indirect object references and implement proper access controls.', 3, 'Insecure Direct Object References (IDOR)'),\n(26, 'Allows attackers to include and execute remote files.', 'Avoid using user-supplied input in file inclusion paths.', 4, 'Remote File Inclusion (RFI)'),\n(27, 'Tricks users into clicking on hidden malicious elements.', 'Implement X-Frame-Options or Content Security Policy (CSP) headers.', 3, 'Clickjacking'),\n(28, 'Exposes sensitive data due to weak encryption or configuration.', 'Use strong TLS versions and cipher suites, obtain SSL certificates from trusted sources.', 3, 'Insufficient Transport Layer Security (TLS)'),\n(30, 'Allows attackers to set a user\\'s session ID and hijack their session.', 'Generate a new session ID on login and invalidate the old one.', 3, 'Session Fixation'),\n(31, 'Stores sensitive data with weak or no encryption.', 'Use strong encryption algorithms and salt passwords before hashing.', 3, 'Insecure Cryptographic Storage'),\n(32, 'Allows attackers to inject malicious headers in requests.', 'Sanitize user-supplied input and validate HTTP headers.', 2, 'HTTP Header Injection'),\n(33, 'Enables attackers to manipulate LDAP queries.', 'Use parameterized LDAP queries and escape user input.', 3, 'LDAP Injection'),\n(65, 'Allows attackers to include external scripts in a victim\\'s page.', 'Sanitize and validate untrusted data before including scripts.', 3, 'Cross-Site Script Inclusion (XSSI)'),\n(66, 'Enables attackers to execute commands on the server through SSI directives.', 'Avoid using user-supplied input in SSI directives.', 3, 'Server-Side Include (SSI) Injection'),\n(67, 'Allows attackers to upload malicious files to a server.', 'Implement file type validation and use secure file upload mechanisms.', 3, 'Remote File Upload Vulnerability'),\n(68, 'Exploits flaws in the application\\'s logic to perform unauthorized actions.', 'Implement proper access controls and validation in business logic.', 2, 'Business Logic Vulnerabilities'),\n(69, 'Occurs when multiple processes access shared resources concurrently.', 'Use locks and synchronization mechanisms to prevent race conditions.', 3, 'Race Condition Vulnerability'),\n(70, 'Allows attackers to access files outside the intended directory.', 'Sanitize and validate user input to prevent directory traversal.', 3, 'Directory Traversal'),\n(71, 'Allows attackers to manipulate serialized objects to execute code.', 'Use secure serialization methods and validate serialized data.', 4, 'Insecure Object Serialization'),\n(72, 'Enables attackers to inject and execute malicious code within an application.', 'Avoid executing user-supplied code and validate input thoroughly.', 4, 'Code Injection'),\n(73, 'Allows attackers to take over a user\\'s session.', 'Use secure session management techniques and enforce secure cookie attributes.', 4, 'Session Hijacking'),\n(74, 'Overwhelms a system or service to make it unavailable to users.', 'Implement rate limiting, input validation, and monitoring to prevent DoS attacks.', 4, 'Denial-of-Service (DoS)'),\n(75, 'Refers to an unknown and unpatched vulnerability exploited by attackers.', 'Stay updated with security patches and monitor security communities for emerging threats.', 4, 'Zero-Day Vulnerability'),\n(76, 'Allows attackers to access files and directories outside the web root.', 'Sanitize and validate user input to prevent path traversal attacks.', 3, 'Path Traversal'),\n(78, 'Enables attackers to bypass security restrictions in web browsers.', 'Properly configure CORS headers and validate user input.', 3, 'Insecure Cross-Origin Resource Sharing (CORS)'),\n(79, 'Intercepts and alters communication between two parties.', 'Use secure communication protocols like HTTPS and SSL/TLS certificates.', 4, 'Man-in-the-Middle (MitM) Attack'),\n(80, 'Exploits weaknesses in OAuth and OpenID Connect implementations.', 'Follow security best practices for OAuth and OpenID Connect integration.', 3, 'OAuth and OpenID Connect Vulnerabilities'),\n(81, 'Allows attackers to overwrite adjacent memory areas.', 'Use secure coding practices and bounds-checking to prevent buffer overflow.', 4, 'Buffer Overflow'),\n(82, 'Allows unauthorized access to certain functionalities or resources.', 'Implement proper access controls and authorization mechanisms.', 2, 'Insufficient Authorization'),\n(83, 'Allows attackers to execute unintended searches on a website.', 'Sanitize user search queries and use safe search APIs.', 2, 'Insecure Cross-Site Search (XS-Search)'),\n(84, 'Enables attackers to upload and execute malicious files on a server.', 'Use secure file upload mechanisms and scan uploaded files for malware.', 4, 'Malicious File Execution'),\n(85, 'Allows attackers to hijack an active session after a user logs out.', 'Set a short and properly configured session timeout period.', 2, 'Session Timeout Vulnerability'),\n(86, 'Enables attackers to make requests from the server to internal resources.', 'Validate and sanitize user-supplied URLs, restrict access to trusted domains.', 4, 'Server-Side Requess Forgery (SSRF)'),\n(87, 'Allows attackers to inject and execute JavaScript code in a victim\\'s browser.', 'Sanitize and validate untrusted data before executing JavaScript code.', 3, 'JavaScript Code Injection'),\n(89, 'Allows attackers to inject malicious content into email headers.', 'Sanitize and validate user-supplied input before adding to email headers.', 3, 'Email Header Injection'),\n(91, 'Exposes sensitive information to unauthorized users.', 'Ensure error messages and logs don\\'t reveal sensitive data.', 2, 'Information Leakage'),\n(92, 'Allows attackers to manipulate URL or POST parameters.', 'Validate and sanitize input, and prevent duplicate parameters.', 3, 'HTTP Parameter Pollution (HPP)'),\n(96, 'Allows attackers to easily guess or brute-force passwords.', 'Enforce strong password policies and implement multi-factor authentication.', 3, 'Weak Password Policy'),\n(97, 'Allows attackers to extract service account hashes from the domain controller.', 'Limit user and service accounts with sensitive privileges, and use strong service account passwords.', 4, 'Kerberoasting'),\n(98, 'Allows attackers to use stolen Kerberos tickets to gain unauthorized access.', 'Regularly rotate Kerberos tickets, limit user privileges, and implement account logon restrictions.', 4, 'Pass-the-Ticket (PtT) Attack'),\n(99, 'Allows attackers to forge Kerberos tickets to gain unauthorized access.', 'Regularly rotate domain controller KRBTGT password and monitor for suspicious activity.', 4, 'Golden Ticket Attack'),\n(100, 'Allows attackers to forge service tickets to gain unauthorized access.', 'Monitor for unusual service ticket usage and limit unnecessary user privileges.', 4, 'Silver Ticket Attack'),\n(101, 'Allows attackers to use stolen password hashes to access network resources.', 'Implement Credential Guard and use strong encryption algorithms for password storage.', 4, 'Overpass-the-Hash (Pass-the-Key) Attack'),\n(102, 'Allows unauthorized users to access sensitive objects in AD.', 'Regularly review and tighten ACLs to enforce least privilege.', 3, 'Weak ACLs (Access Control Lists)'),\n(103, 'Exploits known security flaws in AD components.', 'Stay up-to-date with security patches and follow best practices for patch management.', 3, 'Unpatched Vulnerabilities'),\n(104, 'Allows attackers to gain higher privileges than assigned.', 'Regularly review and audit privileged user accounts and groups.', 3, 'Privilege Escalation'),\n(105, 'Overwhelms domain controllers to disrupt AD services.', 'Implement network and system monitoring to detect DoS attacks and mitigate them.', 4, 'Domain Controller DoS Attack'),\n(106, 'Allows attackers from one domain to access resources in another.', 'Regularly review and validate trust relationships between domains.', 3, 'Insecure Trust Relationships'),\n(107, 'Allows unauthorized access to AD backup files.', 'Securely store and restrict access to AD backup files and follow proper backup procedures.', 2, 'Backup Data Exposure'),\n(108, 'Exposes sensitive AD information to unauthorized users.', 'Ensure error messages and logs don\\'t reveal sensitive data, and restrict access to sensitive information.', 3, 'Sensitive Information Leakage'),\n(109, 'Allows unauthorized access to DNS zone data.', 'Limit zone transfer permissions and configure firewalls to block unauthorized requests.', 3, 'DNS Zone Transfer Vulnerability'),\n(110, 'Abuse of privileged accounts for unauthorized activities.', 'Monitor and audit privileged user activities and enforce least privilege.', 4, 'Privileged User Account Misuse'),\n(111, 'Allows users to join unauthorized groups and escalate privileges.', 'Control group membership and enforce separation of duties.', 3, 'Unrestricted Group Membership'),\n(112, 'Allows attackers to use accounts of former employees or inactive users.', 'Implement an account lifecycle management process and disable or delete stale accounts.', 2, 'Stale User Accounts'),\n(113, 'Causes inconsistencies and data corruption between domain controllers.', 'Monitor and maintain AD replication health, and ensure network connectivity between DCs.', 3, 'AD Replication Issues'),\n(114, 'Allows attackers to retain access rights from previous domains.', 'Limit SID history usage and carefully manage cross-forest trusts.', 4, 'Security Identifier (SID) History Vulnerability'),\n(115, 'Allows unauthorized changes to AD settings through GPOs.', 'Audit and secure GPO settings and restrict access to GPO management.', 3, 'Group Policy Object (GPO) Misconfiguration'),\n(116, 'Allows unauthorized users to modify AD objects through incorrect delegation settings.', 'Review and enforce proper delegation settings and limit excessive permissions.', 3, 'AD Delegation Misconfiguration'),\n(117, 'Exposes sensitive AD data during LDAP communication.', 'Enable LDAPS (LDAP over SSL/TLS) and use trusted certificates.', 3, 'Insecure LDAPS Configuration'),\n(118, 'Allows attackers to discover valid AD accounts through enumeration.', 'Implement account lockout policies and avoid revealing account existence in login error messages.', 2, 'AD Account Enumeration'),\n(119, 'Allows unauthorized access to AD database files.', 'Encrypt AD database files and ensure secure file permissions.', 3, 'AD Database Encryption Misconfiguration'),\n(120, 'Allows unauthorized SID spoofing from trusted domains.', 'Enable SID filtering on trust relationships to prevent SID spoofing.', 3, 'SID Filtering Vulnerability'),\n(121, 'Allows unauthorized access to AD LDS data.', 'Securely configure AD LDS instances and restrict access to sensitive data.', 3, 'AD Lightweight Directory Services (AD LDS) Misconfiguration'),\n(122, 'Allows attackers to forge authentication tokens for unauthorized access.', 'Use secure token generation mechanisms and implement token expiration.', 3, 'Forged Authentication Tokens'),\n(123, 'Exploits weaknesses in AD FS implementations.', 'Stay updated with AD FS patches and follow security best practices.', 3, 'AD Federated Services (AD FS) Vulnerabilities'),\n(124, 'Allows attackers to impersonate network printers.', 'Securely configure network printers and restrict access to trusted users.', 3, 'Printer Spoofing'),\n(125, 'Allows attackers to reuse cached AD credentials for unauthorized access.', 'Use Credential Guard and enforce regular password changes.', 4, 'Pass-the-Cache (PtC) Attack'),\n(126, 'Allows recovery of deleted objects by unauthorized users.', 'Enable and properly configure the AD Recycle Bin feature.', 3, 'AD Recycle Bin Misconfiguration'),\n(127, 'Allows unauthorized access to AD administration.', 'Use strong passwords for administrative accounts and limit their usage.', 3, 'Unsecured Active Directory Administrative Accounts'),\n(128, 'Allows unauthorized users to gain excessive privileges.', 'Review and control memberships in privileged groups regularly.', 3, 'Privileged Group Mismanagement'),\n(129, 'Exposes sensitive information and services on domain controllers.', 'Limit exposure of sensitive services on domain controllers.', 3, 'Unprotected Domain Controller Services'),\n(130, 'Allows unauthorized modification of AD schema objects.', 'Restrict schema modification to authorized personnel only.', 4, 'Weak AD Schema Security'),\n(131, 'Exposes sensitive data like passwords in GPO settings.', 'Remove sensitive information from Group Policy Preferences and use Group Policy Security Filtering.', 3, 'Insecure Group Policy Preferences'),\n(132, 'Allows attackers to redirect DNS queries to malicious addresses.', 'Implement DNSSEC and regularly monitor DNS cache health.', 4, 'DNS Cache Poisoning'),\n(133, 'Allows unauthorized access to remote systems.', 'Enable WinRM securely and limit access to trusted hosts.', 3, 'Windows Remote Management (WinRM) Misconfiguration'),\n(134, 'Allows unauthorized access between trusting domains.', 'Regularly review and secure trust relationships between domains.', 3, 'Insecure AD Trust Relationships'),\n(135, 'Allows attackers to gather sensitive AD data.', 'Limit access to LDAP queries and implement filters.', 3, 'Unrestricted LDAP Queries'),\n(136, 'Allows unauthorized modification of DNS records.', 'Restrict access to DNS management and monitor DNS changes.', 3, 'AD Integrated DNS Misconfiguration'),\n(137, 'Exposes sensitive information about AD objects.', 'Control access to AD information and limit the information exposed to users.', 3, 'Active Directory Information Disclosure'),\n(138, 'Allows attackers to brute-force Kerberos tickets.', 'Enable Kerberos pre-authentication and enforce strong passwords.', 4, 'Kerberos Pre-Authentication Vulnerabilities'),\n(139, 'Allows attackers to extract password hashes from memory.', 'Implement Credential Guard and protect sensitive memory areas.', 4, 'Password Hash Overpassing'),\n(140, 'Allows attackers to use inactive accounts for malicious purposes.', 'Regularly perform AD cleanup and disable or delete unused accounts.', 2, 'Stale or Unused AD Objects'),\n(141, 'Exposes AD data during backup and restore operations.', 'Securely handle AD backup files and ensure proper encryption.', 3, 'Insecure Backup and Restore Processes'),\n(142, 'Allows attackers to gather information about trusted domains.', 'Minimize trust relationships and limit information exposure.', 2, 'AD Trust Enumeration'),\n(143, 'Allows attackers to abuse GPO settings for unauthorized changes.', 'Secure GPOs and enforce strong password policies on GPO accounts.', 3, 'Group Policy Vulnerabilities'),\n(144, 'Allows attackers to reuse intercepted Kerberos tickets.', 'Use time constraints on Kerberos tickets to limit their validity period.', 4, 'Kerberos Ticket Replay Attack'),\n(145, 'Allows unauthorized access to AD data without authentication.', 'Require authentication for LDAP binding to AD.', 3, 'Unauthenticated LDAP Binding'),\n(146, 'Allows attackers to sniff credentials in the network.', 'Encrypt network traffic and use secure protocols for authentication.', 4, 'Remote Credential Sniffing'),\n(147, 'Allows unauthorized users to modify or delete AD objects.', 'Regularly review and tighten permissions on AD objects.', 3, 'Insecure AD Object Permissions'),\n(148, 'Causes replication inconsistencies between domain controllers.', 'Monitor and maintain AD replication health and resolve synchronization issues.', 3, 'Domain Controller Synchronization Issues'),\n(149, 'Allows unauthorized issuance of digital certificates.', 'Secure and monitor Certificate Authority services and maintain strong certificate policies.', 4, 'Certificate Authority Vulnerabilities'),\n(150, 'Allows unauthorized access to AD partitions.', 'Control access to AD partitions and implement proper partition security.', 3, 'AD Partition Misconfiguration'),\n(151, 'Allows unauthorized or unmanaged AD deployments.', 'Enforce policies for AD deployments and monitor for shadow IT.', 2, 'Shadow IT in AD'),\n(152, 'Allows attackers to impersonate other users or applications.', 'Implement proper token security and validate token authenticity.', 4, 'Token Impersonation Vulnerability'),\n(153, 'Allows attackers to evade detection by tampering with audit logs.', 'Securely configure and protect AD audit settings.', 3, 'Abuse of Privileged Auditing'),\n(154, 'Allows unauthorized modifications of DNS records.', 'Restrict dynamic DNS updates and monitor DNS changes.', 3, 'DNS Dynamic Update Vulnerability'),\n(155, 'Allows attackers to access and manipulate AD data offline.', 'Secure physical access to domain controllers and encrypt sensitive data.', 4, 'Domain Controller Theft'),\n(156, 'Allows attackers to steal and abuse stored credentials.', 'Securely store credentials and use secure credential management solutions.', 3, 'Untrusted Credential Storage'),\n(157, 'Permite a los atacantes ejecutar consultas SQL maliciosas.', 'Usar declaraciones preparadas y consultas parametrizadas.', 4, 'Inyección SQL'),\n(158, 'Permite a los atacantes inyectar scripts maliciosos dentro de páginas web.', 'Implementar una validación de entrada y codificación de salida adecuada.', 3, 'Cross-Site Scripting (XSS)'),\n(159, 'Permite a los atacantes ejecutar código en un servidor remoto.', 'Mantener el software y las bibliotecas actualizadas, usar un cortafuegos para las aplicaciones web.', 4, 'Ejecución remota de código (RCE)'),\n(160, 'Expone información sensible como contraseñas o detalles de las tarjetas de crédito.', 'Encriptar datos sensibles, usar protocolos de comunicación seguros.', 2, 'Exposición de datos sensibles'),\n(161, 'Permite a los atacantes acceder a recursos no autorizados.', 'Implementar mecanismos para el control de accesos y de autenticación adecuados.', 2, 'Referencias a objetos directos inseguros'),\n(162, 'Engaña a los usuarios ejecutando acciones no deseadas sin su conocimiento.', 'Usar tokens CSRF e implementar un patrón PRG.', 3, 'Cross-Site Request Forgery (CSRF)'),\n(163, 'Permite a los atacantes hacer peticiones desde el servidor a recursos internos.', 'Validar y desinfectar URLs proporcionadas por el usuario, restringir el acceso solo a dominios de confianza.', 4, 'Server-Side Request Forgery (SSRF)'),\n(164, 'Intenta adivinar las contraseñas o claves encriptadas.', 'Emplear bloqueos de cuentas, usar contraseñas fuertes y complejas.', 2, 'Ataque de Fuerza Bruta'),\n(165, 'Permite a los atacantes redirigir a los usuarios a sitios web maliciosos.', 'Evitar el uso de entradas proporcionadas por el usuario en las URLs de redireccionamiento.', 3, 'Redireccionamientos y reenvíos no validados'),\n(166, 'Permite a los atacantes incluir y ejecutar archivos arbitrarios.', 'Evitar el uso de entradas proporcionadas por el usuario en las rutas de inclusión de archivos.', 3, 'Vulnerabilidades de inclusión de archivos'),\n(167, 'Permite a los atacantes ejecutar código arbitrario durante la deserialización.', 'Validar y desinfectar datos serializados, usa formatos de serialización seguros.', 4, 'Deserialización insegura'),\n(168, 'Permite a los atacantes ejecutar código malicioso en las plantillas del lado del servidor.', 'Evitar usar directamente la entrada en las plantillas por el usuario, desinfecta y valida los datos de la plantilla.', 4, 'Server-Side Template Inyección (SSTI)'),\n(169, 'Permite a los atacantes leer datos confidenciales y llevar a cabo ataques de denegación de servicio.', 'Deshabilitar el análisis de entidades externas, usar formatos de datos más seguros como JSON', 3, 'XML External Entity (XXE) Inyección'),\n(170, 'Permite a los atacantes ejecutar comandos en el sistema arbitrariamente.', 'Implementar una adecuada validación de entrada y utilizar APIs seguras para ejeutar los comandos.', 3, 'Inyección de comandos'),\n(171, 'Ocurre cuando las opciones de seguridad no han sido correctamente configuradas.', 'Seguir las mejores prácticas de seguridad, mantener el software y los servicios actualizados.', 2, 'Configuración incorrecta de seguridad'),\n(172, 'Expone datos sensibles y permite el acceso no autorizado.', 'Usar mecanismos de autentificación y de autorización para APIs.', 2, 'APIs inseguras'),\n(173, 'Permite que sitios web no autorizados puedan hacer peticiones al servidor.', 'Configurar los envabezados CORS correctamente para restringir peticiones de tipo cross-origin.', 2, 'Configuración incorrecta de Cross-Origin Resource Sharing (CORS)'),\n(174, 'Los mecanismos de autentificación pueden ser facilmente bypaseados.', 'Usar políticas de contraseñas robustas, implementar un sistema de autentificación multi-factor.', 3, 'Autentificación insegura'),\n(175, 'Permite a los atacantes acceder a recursos no autorizados mediante la manipulación de referencias a objetos', 'Usar referencias indirectas a objetos e implementar controles de acceso adecuados', 3, 'Referencias directas a objetos inseguras (IDOR)'),\n(176, 'Permite a los atacantes incluir y ejecutar archivos remotos.', 'Evitar el uso de entradas proporcionadas por el usuario en las rutas de inclusión de archivos.', 4, 'Remote File Inclusion (RFI)'),\n(177, 'Engaña a los usuarios para que hagan clic en elementos maliciosos ocultos.', 'Implementar las opciones de X-Frame-Options or Content Security Policy (CSP) en las cabeceras.', 3, 'Clickjacking'),\n(178, 'Expone datos sensibles como consecuencia de un encriptado y/o configuración débil.', 'Usar versiones fuertes de TLS y conjuntos de cifrado, obtener certificados SSL que provengan de entidades confiables.', 3, 'Seguridad insuficiente en la Capa de Transporte (TLS)'),\n(179, 'Permite a los atacantes configurar y secuestrar la sesión de un usuario.', 'Generar una nueva ID de sesión al iniciar sesión e invalidar la anterior.', 3, 'Fijación de sesión'),\n(180, 'Almacena datos confidenciales con encriptación débil o sin ella', 'Usar algoritmos de encriptación fuertes y contraseñas de bits aleatorios antes del hashing', 3, 'Almacenamiento criptográfico inseguro'),\n(181, 'Permite a los atacantes inyectar encabezados maliciosos en las solicitudes', 'Desinfectar la entrada proporcionada por el usuario y validar previamente los encabezados HTTP', 2, 'Inyección de encabezado HTTP'),\n(182, 'Permite a los atacantes manipular consultas LDAP', 'Usar consultas LDAP parametrizadas y escapar las entradas proporcionadas por el usuario', 3, 'Inyección LDAP'),\n(183, 'Permite a los atacantes incluir secuencias de comandos externas en la página objetivo de la víctima', 'Desinfectar y validar los datos no confiables antes de incluir secuencias de comandos', 3, 'Inclusión de secuencias de comandos entre sitios (XSSI)'),\n(184, 'Permite a los atacantes ejecutar comandos en el servidor a través de las directivas SSI', 'Evitar el uso de entradas proporcionadas por el usuario en directivas SSI', 3, 'Inyección de inclusión del lado del servidor (SSI)'),\n(185, 'Permite que los atacantes carguen archivos maliciosos en un servidor', 'Validar el tipo de archivo cargado y usar mecanismos seguros para la carga de archivos', 3, 'Vulnerabilidad de carga remota de archivos'),\n(186, 'Explota fallas en la lógica de la aplicación para realizar acciones no autorizadas', 'Implementar controles de acceso adecuados y validación en la lógica de negocios', 2, 'Vulnerabilidades de la lógica de negocios'),\n(187, 'Ocurre cuando varios procesos acceden a recursos compartidos simultáneamente', 'Usar bloqueos y mecanismos de sincronización para evitar condiciones de carrera', 3, 'Vulnerabilidad de condición de carrera'),\n(188, 'Permite a los atacantes acceder a archivos fuera del directorio deseado', 'Desinfectar y validar la entrada proporcionada por el usuario para evitar el cruce de directorios', 3, 'Visualización de directorios'),\n(189, 'Permite a los atacantes manipular objetos serializados para ejecutar código', 'Usar métodos de serialización seguros y validar los datos serializados', 4, 'Serialización de objetos inseguros'),\n(190, 'Permite a los atacantes inyectar y ejecutar código malicioso dentro de una aplicación', 'Evitar que se llegue a ejecutar código proporcionado por el usuario y validar la entrada minuciosamente', 4, 'Inyección de código'),\n(191, 'Permite que los atacantes se apoderen de la sesión de un usuario', 'Usar técnicas seguras de administración de sesiones y configurar los atributos para que las cookies sean seguras', 4, 'Secuestro de sesión'),\n(192, 'Sobrecarga un sistema o servicio para que no esté disponible para los demás usuarios', 'Implementar técnicas de limitación de velocidad, validación de entrada y de monitoreo para prevenir ataques DoS', 4, 'Denegación de servicio (DoS)'),\n(193, 'Se refiere a una vulnerabilidad desconocida y sin parches explotada por atacantes', 'Mantener el sistema actualizado con parches de seguridad y monitorear las comunidades y foros de seguridad en busca de amenazas emergentes', 4, 'Vulnerabilidad de día cero'),\n(194, 'Permite a los atacantes acceder a archivos y directorios fuera de la raíz en la web', 'Desinfectar y validar la entrada proporcionada por el usuario para evitar ataques de cruce de ruta', 3, 'Path Traversal'),\n(195, 'Permite a los atacantes eludir las restricciones de seguridad en los navegadores web', 'Configurar correctamente los encabezados CORS y validar la entrada sumistrada por el usuario', 3, 'Compartir recursos de origen cruzado (CORS) inseguro'),\n(196, 'Intercepta y altera la comunicación entre dos partes', 'Utilizar protocolos de comunicación seguros como HTTPS y certificados SSL/TLS', 4, 'Man-in-the-Middle (MitM) Ataque'),\n(197, 'Aprovecha las debilidades en las implementaciones para las conexiones OAuth y OpenID', 'Seguir las mejores prácticas de seguridad para la integración de las conexiones de OAuth y OpenID', 3, 'Vulnerabilidades en las conexiones de OAuth y OpenID'),\n(198, 'Permite a los atacantes sobrescribir áreas de memoria adyacentes', 'Utilizar prácticas de codificación seguras y verificación de límites para evitar el desbordamiento del búfer', 4, 'Desbordamiento del búfer'),\n(199, 'Permite el acceso no autorizado a determinadas funcionalidades o recursos', 'Implementar controles de acceso y mecanismos de autorización adecuados', 2, 'Autorización insuficiente'),\n(200, 'Permite a los atacantes ejecutar búsquedas no deseadas en un sitio web', 'Sanear las consultas de los usuarios en los cuadros de búsqueda y usar una API de búsqueda segura', 2, 'Búsqueda insegura entre sitios (XS-Search)'),\n(201, 'Permite a los atacantes cargar y ejecutar archivos maliciosos en un servidor', 'Usar mecanismos seguros de carga de archivos y escanear los archivos cargados en busca de malware', 4, 'Ejecución de archivos maliciosos'),\n(202, 'Permite a los atacantes secuestrar una sesión activa después de que un usuario haya cerrado la sesión', 'Establecer un período de tiempo de espera de sesión corto y correctamente configurado', 2, 'Vulnerabilidad de tiempo de espera de sesión'),\n(203, 'Permite a los atacantes realizar solicitudes desde el servidor a los recursos internos', 'Validar y sanear las URLs proporcionadas por el usuario, restringir el acceso a dominios de confianza', 4, 'Falsificación de solicitudes del lado del servidor (SSRF)'),\n(204, 'Permite a los atacantes inyectar y ejecutar código JavaScript en el navegador de la víctima', 'Desinfectar y validar datos no confiables antes de ejecutar código JavaScript', 3, 'Inyección de código JavaScript'),\n(205, 'Permite a los atacantes inyectar contenido malicioso en los encabezados de un correo electrónico', 'Desinfectar y validar la entrada proporcionada por el usuario antes de agregarla a los encabezados de correo electrónico', 3, 'Inyección de encabezado de correo electrónico'),\n(206, 'Expone información confidencial a usuarios no autorizados', 'AsegúreseAsegurar que los mensajes de error y los registros no revelen datos confidenciales', 2, 'Fuga de información'),\n(207, 'Permite a los atacantes manipular URL o parámetros POST', 'Validar y desinfectar la entrada y evitar parámetros duplicados', 3, 'Contaminación de parámetros HTTP (HPP)'),\n(208, 'Permite a los atacantes adivinar fácilmente o forzar contraseñas por fuerza bruta', 'Aplicar políticas de contraseñas seguras e implementar un sistema de autenticación multifactor', 3, 'Política de contraseñas débiles'),\n(209, 'Permite a los atacantes extraer hashes de cuentas de servicio del controlador de dominio', 'Limitar las cuentas de usuario y de servicio con privilegios confidenciales y usar contraseñas seguras de cuenta de servicio', 4, 'Kerberoasting'),\n(210, 'Permite a los atacantes usar tickets de Kerberos robados para obtener acceso no autorizado', 'Rotar periódicamente los tickets de Kerberos, limitar los privilegios de los usuarios e implementar restricciones de inicio de sesión en la cuenta', 4, 'Pass-the-Ticket (PtT) Ataque'),\n(211, 'Permite a los atacantes falsificar tickets de Kerberos para obtener acceso no autorizado', 'Alternar regularmente la contraseña KRBTGT del controlador de dominio y monitorear una posible actividad sospechosa', 4, 'Golden Ticket Ataque'),\n(212, 'Permite a los atacantes falsificar tickets de servicio para obtener acceso no autorizado', 'Supervisar el uso inusual de tickets de servicio y limitar los privilegios de usuario innecesarios', 4, 'Ataque de ticket plateado'),\n(213, 'Permite a los atacantes usar hashes de contraseñas robadas para acceder a los recursos de la red', 'Implementar Credential Guard y usar algoritmos de cifrado fuertes para el almacenamiento de contraseñas', 4, 'Overpass-the-Hash (Pass-the-Key) Ataque'),\n(214, 'Permite que los usuarios no autorizados accedan a objetos confidenciales en el Directorio Activo', 'Revise y ajuste periódicamente las ACL para hacer cumplir los privilegios mínimos', 3, 'ACL débiles (Listas de control de acceso)'),\n(215, 'Aprovecha las fallas de seguridad conocidas en los componentes del Directorio Activo', 'Mantener el sistema actualizado con los parches de seguridad y seguir las mejores prácticas para la administración de parches', 3, 'Vulnerabilidades sin parches'),\n(216, 'Permite a los atacantes obtener mayores privilegios que los asignados', 'Revisar y auditar regularmente las cuentas y grupos de usuarios privilegiados', 3, 'Escalada de privilegios'),\n(217, 'Satura los Controladores de Dominio para interrumpir los servicios del Directorio Activo', 'Implementar el monitoreo de redes y sistemas para detectar ataques DoS y mitigarlos', 4, 'Ataque DoS del controlador de dominio'),\n(218, 'Permite que los atacantes de un dominio accedan a los recursos de otro', 'Revisar y validar periódicamente las relaciones de confianza entre los diferentes dominios', 3, 'Relaciones de confianza inseguras'),\n(219, 'Permite el acceso no autorizado a los archivos de copia de seguridad del Directorio Activo', 'Almacenar de forma segura y restringir el acceso a los archivos de copia de seguridad del Directorio Activo y seguir los procedimientos para realizar copias de seguridad adecuadamente', 2, 'Exposición de datos de copia de seguridad'),\n(220, 'Expone información confidencial del Directorio Activo a usuarios no autorizados', 'Asegurar que los mensajes de error y los registros no revelen datos confidenciales y restringir el acceso a información confidencial', 3, 'Fuga de información confidencial'),\n(221, 'Permite el acceso no autorizado a datos de zona DNS', 'Limitar permisos de transferencia de zona y configurar cortafuegos para bloquear solicitudes no autorizadas', 3, 'Vulnerabilidad de transferencia de zona DNS'),\n(222, 'Abuso de cuentas privilegiadas para actividades no autorizadas', 'Supervisar y auditar las actividades de los usuarios privilegiados y hacer cumplir los privilegios mínimos', 4, 'Uso indebido de la cuenta de usuario privilegiado'),\n(223, 'Permite a los usuarios unirse a grupos no autorizados y escalar privilegios', 'Controlar la membresía del grupo y hacer cumplir la separación de funciones', 3, 'Membresía del grupo sin restricciones'),\n(224, 'Permite a los atacantes usar cuentas de trabajadores antiguos o usuarios inactivos', 'Implementar un proceso de administración del ciclo de vida de la cuenta y deshabilitar o eliminar cuentas obsoletas', 2, 'Cuentas de usuario obsoletas'),\n(225, 'Provoca incoherencias y daños en los datos entre los Controladores de Dominio', 'Supervisar y mantener el estado de la replicación del Directorio Activo y garantizar la conectividad de red entre los Controladores de Dominio', 3, 'Problemas de replicación del Directorio Activo'),\n(226, 'Permite a los atacantes conservar los derechos de acceso de dominios anteriores', 'Limitar el uso del historial de del Identificador de Seguridad (SID) y administra cuidadosamente las relaciones de confianza entre bosques', 4, 'Vulnerabilidad del historial del identificador de seguridad (del Identificador de Seguridad (SID))'),\n(227, 'Permite cambios no autorizados en la configuración del Directorio Activo a través de las Políticas de Grupo (GPO)', 'Audita y protege la configuración de las Políticas de Grupo (GPO) y restringe el acceso a la administración de las Políticas de Grupo (GPO)', 3, 'Configuración incorrecta del objeto de directiva de grupo (las Políticas de Grupo (GPO))'),\n(228, 'Permite que los usuarios no autorizados modifiquen objetos del Directorio Activo a través de una configuración de delegación incorrecta', 'Revisar y hacer cumplir la configuración de delegación adecuada y limitar los permisos excesivos', 3, 'Configuración incorrecta de la delegación del Directorio Activo'),\n(229, 'Expone datos confidenciales del Directorio Activo durante la comunicación LDAP', 'Habilitar LDAPS (LDAP sobre SSL/TLS) y usar certificados confiables', 3, 'Configuración LDAPS insegura'),\n(230, 'Permite a los atacantes descubrir cuentas del Directorio Activo válidas a través durante la fase de enumeración', 'Implementar políticas de bloqueo de cuentas y evitar revelar la existencia de la cuenta en los mensajes de error de inicio de sesión', 2, 'Enumeración de cuenta del Directorio Activo'),\n(231, 'Permite el acceso no autorizado a los archivos de la base de datos del Directorio Activo', 'Cifrar los archivos de la base de datos del Directorio Activo y garantizar los permisos de archivos seguros', 3, 'Configuración incorrecta del cifrado de la base de datos del Directorio Activo'),\n(232, 'Permite la suplantación del Identificador de Seguridad (SID) de manera no autorizada en dominios de confianza', 'Habilitar el filtrado del del Identificador de Seguridad (SID) en relaciones de confianza para evitar la suplantación de del Identificador de Seguridad (SID)', 3, 'Vulnerabilidad de filtrado de del Identificador de Seguridad (SID)'),\n(233, 'Permite el acceso no autorizado a los datos de los Servicios de directorio ligero en el Directorio Activo', 'Configura de forma segura las instancias de los Servicios de directorio ligero en el Directorio Activo y restringe el acceso a datos confidenciales', 3, 'Configuración incorrecta de los servicios de directorio ligero del Directorio Activo (AD LDS)'),\n(234, 'Permite a los atacantes falsificar tokens de autenticación para el acceso no autorizado', 'Usar mecanismos seguros de generación de tokens e implementar la caducidad del token', 3, 'Tokens de autenticación falsificados'),\n(235, 'Aprovecha las debilidades en las implementaciones del Servicio de Federación en el Directorio Activo', 'Mantener el sistema actualizado con los parches del Servicio de Federación en el Directorio Activo y seguir las mejores prácticas de seguridad', 3, 'Vulnerabilidades de los servicios federados del Directorio Activo (AD FS)'),\n(236, 'Permite a los atacantes hacerse pasar por impresoras de red', 'Configurar las impresoras de red de forma segura y restringir el acceso solo a usuarios de confianza', 3, 'Suplantación de identidad de impresora'),\n(237, 'Permite a los atacantes reutilizar las credenciales del Directorio Activo almacenadas en la caché para el acceso no autorizado', 'Usar Credential Guard y hacer cumplir los cambios regulares de contraseña', 4, 'Pass-the-Cache (PtC) Attack'),\n(238, 'Permite la recuperación de objetos eliminados por parte de usuarios no autorizados', 'Habilitar y configurar correctamente la función de la papelera de reciclaje em el Directorio Activo', 3, 'Configuración incorrecta de la Papelera de reciclaje del Directorio Activo'),\n(239, 'Permite el acceso no autorizado a la administración del Directorio Activo', 'Usar contraseñas seguras para cuentas administrativas y limitar su uso', 3, 'Cuentas administrativas de Active Directory no seguras'),\n(240, 'Permite que los usuarios no autorizados obtengan privilegios excesivos', 'Revisar y controlar periódicamente la pertenencia a grupos privilegiados', 3, 'Mala gestión de grupos privilegiados'),\n(241, 'Expone información y servicios confidenciales en controladores de dominio', 'Limitar la exposición de servicios confidenciales en controladores de dominio', 3, 'Servicios de controlador de dominio sin protección'),\n(242, 'Permite la modificación no autorizada de objetos del esquema del Directorio Activo', 'Restringir la modificación del esquema solo al personal autorizado', 4, 'Seguridad del esquema del Directorio Activo débil'),\n(243, 'Expone datos confidenciales como contraseñas en la configuración de las Políticas de Grupo (GPO)', 'Eliminar la información confidencial en las preferencias de las directivas de grupo y emplear el filtrado de seguridad de directivas de grupo', 3, 'Preferencias de directivas de grupo inseguras'),\n(244, 'Permite a los atacantes redirigir las consultas del DNS a direcciones maliciosas', 'Implementar DNSSEC y monitorizar regularmente el estado de la caché del DNS', 4, 'Envenenamiento de caché del DNS'),\n(245, 'Permite el acceso no autorizado a sistemas remotos', 'Habilitar WinRM de forma segura y limitar el acceso a hosts de confianza', 3, 'Configuración incorrecta de Windows Remote Management (WinRM)'),\n(246, 'Permite el acceso no autorizado entre dominios de confianza', 'Revisar y asegurar periódicamente las relaciones de confianza entre dominios', 3, 'Relaciones de confianza del Directorio Activo inseguras'),\n(247, 'Permite a los atacantes recopilar datos confidenciales del Directorio Activo', 'Limitar el acceso a consultas LDAP e implementar filtros', 3, 'Consultas LDAP sin restricciones'),\n(248, 'Permite la modificación no autorizada de registros del DNS', 'Restringir el acceso a la administración del DNS y supervisar los cambios del DNS', 3, 'Configuración incorrecta del DNS integrado del Directorio Activo'),\n(249, 'Expone información confidencial sobre objetos del Directorio Activo', 'Controla el acceso a la información del Directorio Activo y limita la información expuesta a los usuarios', 3, 'Divulgación de información de Active Directory'),\n(250, 'Permite a los atacantes usar tickets de fuerza bruta en Kerberos', 'Habilitar la autenticación previa de Kerberos y aplicar contraseñas seguras', 4, 'Vulnerabilidades de autenticación previa de Kerberos'),\n(251, 'Permite a los atacantes extraer hashes de contraseñas de la memoria', 'Implementar Credential Guard y proteger las áreas de memoria que sean confidenciales', 4, 'Password Hash Overpassing'),\n(252, 'Permite que los atacantes utilicen cuentas inactivas con fines maliciosos', 'Realizar una limpieza del Directorio Activo con regularidad y deshabilitar o eliminar las cuentas no utilizadas', 2, 'Objetos del Directorio Activo obsoletos o no utilizados'),\n(253, 'Expone datos del Directorio Activo durante las operaciones de copia de seguridad y restauración', 'Manejar de forma segura las copias de seguridad del Directorio Activo y garantizar un cifrado adecuado', 3, 'Procesos de copia de seguridad y restauración inseguros'),\n(254, 'Permite a los atacantes recopilar información sobre los dominios de confianza', 'Minimizar las relaciones de confianza y limitar la exposición de la información', 2, 'Enumeración de confianza del Directorio Activo'),\n(255, 'Permite a los atacantes abusar de la configuración de GPO para realizar cambios no autorizados', 'Asegurar GPO y hacer cumplir las políticas de contraseñas seguras en cuentas de GPO', 3, 'Vulnerabilidades de políticas de grupo'),\n(256, 'Permite a los atacantes reutilizar los tickets de Kerberos interceptados', 'Usar restricciones de tiempo en los tickets de Kerberos para limitar su período de validez', 4, 'Ataque de repetición de tickets de Kerberos'),\n(257, 'Permite el acceso no autorizado a los datos del Directorio Activo sin autenticación', 'Requerir la autenticación para el enlace LDAP en el Directorio Activo', 3, 'Enlace LDAP no autenticado'),\n(258, 'Permite a los atacantes rastrear las credenciales en la red', 'Cifrar el tráfico de red y usar protocolos seguros para la autenticación', 4, 'Rastreo remoto de credenciales'),\n(259, 'Permite que los usuarios no autorizados modifiquen o eliminen objetos del Directorio Activo', 'Revisar y reajustar periódicamente los permisos de los objetos del Directorio Activo', 3, 'Permisos de objetos del Directorio Activo inseguros'),\n(260, 'Provoca inconsistencias en la replicación entre controladores de dominio', 'Supervisar y mantener el estado de replicación del Directorio Activo y resolver los problemas de sincronización', 3, 'Problemas de sincronización de controlador de dominio'),\n(261, 'Permite la emisión no autorizada de certificados digitales', 'Asegurar y controlar los servicios de la autoridad de certificación y mantenener unas políticas de certificación sólidas', 4, 'Vulnerabilidades de la autoridad de certificación'),\n(262, 'Permite el acceso no autorizado a las particiones del Directorio Activo', 'Controlar el acceso a las particiones del Directorio Activo e implementar una seguridad de partición adecuada', 3, 'Configuración incorrecta de la partición del Directorio Activo'),\n(263, 'Permite implementaciones del Directorio Activo no autorizadas o no administradas', 'Aplicar políticas para implementaciones del Directorio Activo y realizar tareas de monitorización en la sombra', 2, 'TI en la sombra en el Directorio Activo'),\n(264, 'Permite a los atacantes hacerse pasar por otros usuarios o aplicaciones', 'Implementar una seguridad de token adecuada y validar la autenticidad del token', 4, 'Vulnerabilidad de suplantación de token'),\n(265, 'Permite a los atacantes evadir la detección alterando los registros de auditoría', 'Configurar y proteger de forma segura la configuración de auditoría del Directorio Activo', 3, 'Abuso de la auditoría privilegiada'),\n(266, 'Permite modificaciones no autorizadas de registros DNS', 'Restringir las actualizaciones dinámicas del DNS y supervisar los cambios del DNS', 3, 'Vulnerabilidad de actualización dinámica del DNS'),\n(267, 'Permite a los atacantes acceder y manipular datos del Directorio Activo sin conexión', 'Proteger el acceso físico a los controladores de dominio y cifrar los datos confidenciales', 4, 'Robo de controlador de dominio'),\n(268, 'Permite a los atacantes robar y abusar de las credenciales almacenadas', 'Almacenar credenciales de forma segura y usar soluciones de administración de credenciales seguras', 3, 'Almacenamiento de credenciales no confiables'),\n(269, 'Dummy', 'Dummy', 0, 'Example Description');\n\n--\n-- Indexes for dumped tables\n--\n\n--\n-- Indexes for table `empresas`\n--\nALTER TABLE `empresas`\n  ADD PRIMARY KEY (`id`);\n\n--\n-- Indexes for table `informes`\n--\nALTER TABLE `informes`\n  ADD PRIMARY KEY (`id`);\n\n--\n-- Indexes for table `pocs`\n--\nALTER TABLE `pocs`\n  ADD PRIMARY KEY (`id`);\n\n--\n-- Indexes for table `scope`\n--\nALTER TABLE `scope`\n  ADD PRIMARY KEY (`id`);\n\n--\n-- Indexes for table `scope_vulnerabilidades`\n--\nALTER TABLE `scope_vulnerabilidades`\n  ADD PRIMARY KEY (`id`);\n\n--\n-- Indexes for table `vulnerabilidades`\n--\nALTER TABLE `vulnerabilidades`\n  ADD PRIMARY KEY (`id`);\n\n--\n-- AUTO_INCREMENT for dumped tables\n--\n\n--\n-- AUTO_INCREMENT for table `pocs`\n--\nALTER TABLE `pocs`\n  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=19;\n\n--\n-- AUTO_INCREMENT for table `scope`\n--\nALTER TABLE `scope`\n  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=21;\n\n--\n-- AUTO_INCREMENT for table `vulnerabilidades`\n--\nALTER TABLE `vulnerabilidades`\n  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=270;\nCOMMIT;\n\n/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;\n/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n"
  },
  {
    "path": "xampp_installer/icon/blackstone",
    "content": "#!/bin/bash\nexec 2>/dev/null\n\necho \"=======================================================\"\necho \"▄▄▄▄· ▄▄▌   ▄▄▄·  ▄▄· ▄ •▄ .▄▄ · ▄▄▄▄▄       ▐ ▄ ▄▄▄ . \"\necho \"▐█ ▀█▪██•  ▐█ ▀█ ▐█ ▌▪█▌▄▌▪▐█ ▀. •██  ▪     •█▌▐█▀▄.▀· \"\necho \"▐█▀▀█▄██▪  ▄█▀▀█ ██ ▄▄▐▀▀▄·▄▀▀▀█▄ ▐█.▪ ▄█▀▄ ▐█▐▐▌▐▀▀▪▄ \"\necho \"██▄▪▐█▐█▌▐▌▐█ ▪▐▌▐███▌▐█.█▌▐█▄▪▐█ ▐█▌·▐█▌.▐▌██▐█▌▐█▄▄▌ \"\necho \"·▀▀▀▀ .▀▀▀  ▀  ▀ ·▀▀▀ ·▀  ▀ ▀▀▀▀  ▀▀▀  ▀█▄▀▪▀▀ █▪ ▀▀▀  \"\necho \"=======================================================\"\necho \"Created by Joan Moya (Aka. MicroJoan)\"\necho \"\"\nsudo /opt/BlackStone/xampp_installer/icon/simple_launch.sh\n"
  },
  {
    "path": "xampp_installer/icon/blackstone.desktop",
    "content": "[Desktop Entry]\nName=BlackStone\nComment=BlackStone Project\nExec=blackstone\nIcon=/opt/BlackStone/xampp_installer/icon/blackstone.png\nTerminal=true\nType=Application\n"
  },
  {
    "path": "xampp_installer/icon/simple_launch.sh",
    "content": "\n/opt/lampp/xampp start > /dev/null\nsleep 1\nxdg-open \"http://localhost/BlackStone/\""
  }
]