[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n# support simple dooring !\n# weclome to try this repo.\n\nopen_collective: h5-dooring\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/custom.md",
    "content": "---\nname: Custom issue template\nabout: Describe this issue template's purpose here.\ntitle: ''\nlabels: ''\nassignees: ''\n\n---\n\n\n"
  },
  {
    "path": ".gitignore",
    "content": "# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# TypeScript v1 declaration files\ntypings/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variables file\n.env\n.env.test\n\n# parcel-bundler cache (https://parceljs.org/)\n.cache\n\n# Next.js build output\n.next\n\n# Nuxt.js build / generate output\n.nuxt\n\n# Gatsby files\n.cache/\n# Comment in the public line in if your project uses Gatsby and *not* Next.js\n# https://nextjs.org/blog/next-9-1#public-directory-support\n# public\n\n# vuepress build output\n.vuepress/dist\n\n# Serverless directories\n.serverless/\n\n# FuseBox cache\n.fusebox/\n\n# DynamoDB Local files\n.dynamodb/\n\n# TernJS port file\n.tern-port\n\n.umi/\n.umi-production/\n\n# production\n/dist\n/doc-dist\n"
  },
  {
    "path": ".umirc.ts",
    "content": "import path from \"path\";\nimport { defineConfig } from \"umi\";\n\nexport default defineConfig({\n  dynamicImport: {\n    loading: \"@/components/LoadingCp\"\n  },\n  dva: {\n    immer: true\n  },\n  devtool: \"source-map\",\n  antd: {},\n  title: \"趣谈前端-h5-dooring\",\n  // exportStatic: {},\n  base: \"/\",\n  publicPath: \"/\",\n  outputPath: \"dist\",\n  esbuild: {},\n  routes: [\n    {\n      exact: false,\n      path: \"/\",\n      component: \"@/layouts/index\",\n      routes: [\n        {\n          path: \"/\",\n          component: \"../pages/home\"\n        },\n        {\n          path: \"/editor\",\n          component: \"../pages/editor\"\n        },\n        {\n          path: \"/ide\",\n          component: \"../pages/ide\"\n        },\n        {\n          path: \"/help\",\n          component: \"../pages/help\"\n        },\n        {\n          path: \"/login\",\n          component: \"../pages/login\"\n        },\n        {\n          path: \"/mobileTip\",\n          component: \"../pages/mobileTip\"\n        },\n        {\n          path: \"/preview\",\n          component: \"../pages/editor/preview\"\n        }\n      ]\n    }\n  ],\n  theme: {\n    \"primary-color\": \"#2F54EB\"\n    // \"btn-primary-bg\": \"#2F54EB\"\n  },\n  extraBabelPlugins: [[\"import\", { libraryName: \"zarm\", style: true }]],\n  // sass: {},\n  alias: {\n    components: path.resolve(__dirname, \"src/components/\"),\n    utils: path.resolve(__dirname, \"src/utils/\"),\n    assets: path.resolve(__dirname, \"src/assets/\")\n  }\n});\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"workbench.colorCustomizations\": {\n    \"activityBar.background\": \"#152B60\",\n    \"titleBar.activeBackground\": \"#1D3C86\",\n    \"titleBar.activeForeground\": \"#FBFCFE\"\n  },\n  \"editor.snippetSuggestions\": \"bottom\",\n  \"editor.suggest.snippetsPreventQuickSuggestions\": true\n}\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "## 私有化授权版更新日志\n\n[在线地址](http://h5.dooring.cn/h5_plus)\n\n#### 2.50\n\n1. 复制页面添加数量校验\n2. 后台系统模版列表添加“上推荐”按钮\n3. 精选模版支持分类，分页\n4. 编辑器页面我的页面支持分页, 继续编辑, 按钮放到标题右边\n5. 优化前进后退组件配置项文案\n6. 解决画布缩放导致的组件拖拽抖动\n\n#### 2.40\n\n1. 图片组件添加查看大图功能\n2. 添加组件选中状态及样式优化\n3. 添加功能类组件(统计组件)\n4. 右键菜单体验优化\n5. 删除服务端无用路由,降低内耗\n\n#### 2.30\n\n1. 优化用户注册机制\n2. 组件动画添加延迟时间, 添加旋转动画, 优化动画逻辑\n3. 优化用户登录态失效逻辑\n4. 统计组件\n5. 图片库弹窗层级优化\n6. 服务器增加数据访问权限, 保障数据安全\n\n#### 2.15\n\n1. 编辑器支持调试模式(支持本地环境一键debug, 支持真机调试)\n2. Tab组件支持布局(单列 / 双列)\n3. header组件升级, 支持顶部固定, 自定义头部菜单\n4. 添加1个行业模版\n5. 优化登录逻辑, 自动去空格\n6. 编辑器入口页面优化, 重构\n7. 表单组件提交逻辑优化,修复参数错误提示\n8. 支持自定义上传组件, 组件预览, 审批, 组件管理\n\n#### 2.10\n\n1. 添加入口页加群指引动画, 优化左侧界面\n2. 优化拖拽更新算法, 使得拖拽精度达到99.99%, 真正的所搭即所得\n3. 删除模版库无用模版, 创建2个新模版\n4. 编辑器添加智能引导页面\n5. 编辑器支持调试模式(支持本地环境一键debug, 支持真机调试)\n6. Tab组件支持布局(单列 / 双列)\n\n#### 2.01\n\n1. 优化编辑器加载性能\n2. iframe容器组件添加边框等属性\n3. 富文本组件添加背景色配置\n4. 修复真机预览时空数据还能显示二维码bug\n5. 优化页面高度适配问题, 添加高度适配器\n6. 优化组件交互时空链接点击出现message bug\n7. 更新dooring文档\n\n#### 2.0\n\n1. 完善数据源功能\n2. 轮播图/图片列表/List/文字跑马灯/横向滚动组件数据源对接完毕\n3. 组件库支持搜索功能\n4. 组件列表支持分页, 提高渲染性能\n5. 赞助墙交互优化\n6. 界面局部优化\n\n#### 1.99\n\n1. 添加数据源功能\n2. 视频组件支持封面图\n3. 优化页面DSL结构, 降低了jsonSchema体积30%-50%\n4. 官网优化\n5. 管理后台替换logo, 部分文案信息\n6. 添加图片列表组件\n7. 轮播图支持一键绑定数据源\n\n\n#### 1.98\n\n1. 编辑器功能区添加更多折叠下拉框, 优化头部界面\n2. 添加数据源入口和界面\n3. 模版库优化, 剔除无用模版, 累计60+模版\n4. 入口页添加赞助墙\n5. 升级视频组件, 支持弹幕, 截屏, 模式设置等功能\n6. 文件上传路径兼容window服务器本地化部署\n\n#### 1.96\n\n1. 修复首页推荐项目外链地址和站内文案\n2. 替换Dooring网站logo\n3. 优化ios8以下访问H5时可能出现的页面卡顿问题\n4. 图片上传组件添加svg, gif图片格式支持\n5. 后台管理系统添加一键跳编辑器按钮\n6. 服务端编辑侧路由加固\n7. 文件上传组件添加自定义上传文档，支持七牛云，腾讯云，阿里oss等第三方图床方式\n\n#### 1.95\n\n1. dooring文档添加更新日志模块\n2. dooring增报错监控函数, 提供一键清空缓存按钮和自动重载功能\n3. 新增电商商品H5模版\n4. 页面配置增加背景模式和背景重复\n5. 表单添加字段名配置项\n\n#### 1.94\n\n1. 转盘组件支持转盘交互功能(跳转链接/打开弹窗/自定义代码)\n2. 添加网站拦截, 防止页面误关导致页面无法保存\n3. 优化页面控制条组件样式\n4. 按钮组件添加组件动画\n5. 图片组件添加组件动画\n6. 媒体组件icon优化\n7. 全局错误监控组件添加一键清除缓存功能\n\n#### 1.93\n\n1. 上线源码下载功能\n2. 服务端支持下载源码服务和下载次数限制\n3. 界面部分文案优化\n4. 出码基座优化\n5. 抽奖组件支持抽奖后自定义交互(弹窗/链接/自定义代码)\n\n#### 1.92\n\n1. 修复背景图预览适配问题\n2. 转盘组件支持中奖后自定义交互/弹窗/自定义代码\n3. 界面局部调整\n4. 后台管理表单数据支持多键查询\n5. 可视化大屏柱状图组件支持实时数据请求"
  },
  {
    "path": "Dockerfile",
    "content": "FROM nginx:latest\r\nCOPY ./default.conf /etc/nginx/conf.d/default.conf\r\n"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "SECURITY.md",
    "content": "# Security Policy\n\n## Supported Versions\n\nUse this section to tell people about which versions of your project are\ncurrently being supported with security updates.\n\n| Version | Supported          |\n| ------- | ------------------ |\n| 5.1.x   | :white_check_mark: |\n| 5.0.x   | :x:                |\n| 4.0.x   | :white_check_mark: |\n| < 4.0   | :x:                |\n\n## Reporting a Vulnerability\n\nUse this section to tell people how to report a vulnerability.\n\nTell them where to go, how often they can expect to get an update on a\nreported vulnerability, what to expect if the vulnerability is accepted or\ndeclined, etc.\n"
  },
  {
    "path": "doc/.vuepress/config.js",
    "content": "module.exports = {\n  base: \"/doc/\",\n  title: \"h5-dooring\",\n  dest: \"./doc-dist\",\n  themeConfig: {\n    search: false,\n    searchMaxSuggestions: 10,\n    lastUpdated: \"Last Updated\",\n    nav: [\n      { text: \"首页\", link: \"/\" },\n      { text: \"文档\", link: \"/zh/guide/\" },\n      // { text: '1.X', link: '/zh/guide/' },\n      // { text: '语言', link: '/zh/guide/' },\n      { text: \"体验\", link: \"http://h5.dooring.cn\" },\n      { text: \"github\", link: \"https://github.com/MrXujiang/h5-Dooring\" }\n    ],\n    sidebar: [\n      {\n        title: \"基本介绍\",\n        path: \"/zh/guide/\",\n        collapsable: false,\n        sidebarDepth: 1\n      },\n      {\n        title: \"doring如何工作\",\n        path: \"/zh/guide/introduced\",\n        collapsable: false,\n        sidebarDepth: 1\n      },\n      {\n        title: \"快速上手\",\n        path: \"/zh/guide/startedQuickly\",\n        collapsable: false,\n        sidebarDepth: 1\n      },\n      {\n        title: \"目录结构\",\n        path: \"/zh/guide/directoryStructure\",\n        collapsable: false,\n        sidebarDepth: 1\n      },\n      {\n        title: \"组件开发\",\n        collapsable: false,\n        sidebarDepth: 1,\n        type: \"group\",\n        children: [\n          {\n            name: \"componentStructure\",\n            title: \"组件结构\",\n            path: \"/zh/guide/componentDev/componentStructure\",\n            collapsable: false,\n            sidebarDepth: 2\n          },\n          {\n            name: \"DSLAnalysis\",\n            title: \"DSL设计\",\n            path: \"/zh/guide/componentDev/DSLAnalysis\",\n            collapsable: false,\n            sidebarDepth: 2\n          },\n          {\n            name: \"dynamicLoading\",\n            title: \"动态加载\",\n            path: \"/zh/guide/componentDev/dynamicLoading\",\n            collapsable: false,\n            sidebarDepth: 1\n          }\n        ]\n      },\n      {\n        title: \"功能实现\",\n        collapsable: false,\n        sidebarDepth: 1,\n        type: \"group\",\n        children: [\n          {\n            title: \"模板库\",\n            path: \"/zh/guide/functionRealization/templateLibrary\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"保存json\",\n            path: \"/zh/guide/functionRealization/saveJson\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"下载源码\",\n            path: \"/zh/guide/functionRealization/download\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"网页预览\",\n            path: \"/zh/guide/functionRealization/pagePreview\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"真机预览\",\n            path: \"/zh/guide/functionRealization/machinePreview\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"撤销/重做\",\n            path: \"/zh/guide/functionRealization/revocation\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"截图功能\",\n            path: \"/zh/guide/functionRealization/screenshot\",\n            collapsable: false,\n            sidebarDepth: 1\n          }\n        ]\n      },\n      {\n        title: \"私有化部署和二次开发\",\n        collapsable: false,\n        sidebarDepth: 1,\n        type: \"group\",\n        children: [\n          {\n            title: \"私有化部署\",\n            path: \"/zh/guide/deployDev/deploy\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"v6.dooring私有化部署(临时)\",\n            path: \"/zh/guide/deployDev/deploy_v6\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"服务端数据说明\",\n            path: \"/zh/guide/deployDev/dir\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"支持https\",\n            path: \"/zh/guide/deployDev/https\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"接入第三方oss\",\n            path: \"/zh/guide/deployDev/oss\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"获取Form组件的值数据\",\n            path: \"/zh/guide/deployDev/form\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"API接口文档\",\n            path: \"/zh/guide/deployDev/api\",\n            collapsable: false,\n            sidebarDepth: 1\n          },\n          {\n            title: \"更新日志\",\n            path: \"/zh/guide/deployDev/log\",\n            collapsable: false,\n            sidebarDepth: 1\n          }\n        ]\n      }\n    ]\n  }\n};\n"
  },
  {
    "path": "doc/.vuepress/templates/dev.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n    <head>\n        <meta charset=\"utf-8\" />\n        <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n        <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\" />\n        <link rel=\"icon\" href=\"/favcion.png\" rel=\"shortcut icon\" type=\"image/vnd.microsoft.icon\" />\n        <title>dooring-前端开发手册</title>\n    </head>\n    <body>\n        <noscript>\n            <strong\n                >We're sorry but winning-components doesn't work properly without JavaScript\n                enabled. Please enable it to continue.</strong\n            >\n        </noscript>\n        <div id=\"app\"></div>\n        <!-- built files will be auto injected -->\n    </body>\n</html>\n"
  },
  {
    "path": "doc/.vuepress/theme/enhanceApp.js",
    "content": "import \"./styles/main.scss\";\n\n// 使用异步函数也是可以的\nexport default ({\n  Vue, // VuePress 正在使用的 Vue 构造函数\n  options, // 附加到根实例的一些选项\n  router, // 当前应用的路由实例\n  siteData, // 站点元数据\n  isServer // 当前应用配置是处于 服务端渲染 或 客户端\n}) => {\n  // ...做一些其他的应用级别的优化\n  // console.log({ Vue, options, router, siteData, isServer });\n  Vue.config.ignoredElements = [\n    // Use a `RegExp` to ignore all elements that start with \"nova-\"\n    // 2.5+ only\n    //^nova-/,\n    // /img/,\n  ];\n};\n"
  },
  {
    "path": "doc/.vuepress/theme/global-components/Home.vue",
    "content": "<template>\n  <main class=\"home\" :aria-labelledby=\"data.heroText !== null ? 'main-title' : null\">\n    <header class=\"hero\">\n      <h1 v-if=\"data.heroText !== null\" id=\"main-title\">\n        <img src=\"../imgs/common/logo.svg\" :alt=\"data.heroAlt || 'hero'\" /><span>{{\n          data.heroText || $title || \"Hello\"\n        }}</span>\n      </h1>\n    </header>\n\n    <div v-if=\"data.features && data.features.length\" class=\"features\">\n      <div class=\"container\">\n        <div v-for=\"(feature, index) in data.features\" :key=\"index\" class=\"feature\">\n          <div class=\"feature-index\">{{ index + 1 }}</div>\n          <h2>{{ feature.title }}</h2>\n          <p>{{ feature.details }}</p>\n        </div>\n      </div>\n    </div>\n\n    <Content class=\"theme-default-content custom\" />\n\n    <div class=\"hero\">\n      <p v-if=\"data.actionText && data.actionLink\" class=\"action\">\n        <NavLink class=\"action-button\" :item=\"actionLink\" />\n      </p>\n    </div>\n    <div v-if=\"data.footer\" class=\"footer\">\n      {{ data.footer }}\n    </div>\n  </main>\n</template>\n\n<script>\nimport NavLink from \"@vuepress/theme-default/components/NavLink.vue\";\n\nexport default {\n  name: \"Home\",\n\n  components: { NavLink },\n\n  computed: {\n    data() {\n      return this.$page.frontmatter;\n    },\n\n    actionLink() {\n      return {\n        link: this.data.actionLink,\n        text: this.data.actionText,\n      };\n    },\n  },\n};\n</script>\n\n<style lang=\"stylus\">\n$accentColor =#083ac4\n$homePageWidth = 1080px\n.container\n  max-width $homePageWidth\n  margin 0px auto\n  display block\n.home\n  padding $navbarHeight  0\n  display block\n  max-width initial\n  margin initial\n  background-color #f5f8fe\n  .hero\n    text-align center\n    img\n      width: 190px\n      height 50px\n      display inline-block\n      margin initial\n      margin-bottom 0\n      margin-right 20px\n      vertical-align sub\n    h1\n      font-size 1.5rem\n      font-weight 600\n    h1, .description, .action\n      margin 1.8rem auto\n    .description\n      max-width 35rem\n      font-size 1.6rem\n      line-height 1.3\n      color lighten($textColor, 40%)\n    .action-button\n      display inline-block\n      font-size 1rem\n      color #fff\n      background-color $accentColor\n      padding 0.4rem 2rem\n      border-radius 4px\n      transition background-color .1s ease\n      box-sizing border-box\n      border-bottom 1px solid darken($accentColor, 10%)\n      &:hover\n        background-color lighten($accentColor, 10%)\n  .features\n    border-top 1px solid $borderColor\n    padding 80px 0\n    background-color #fff\n    margin-top 2.5rem\n    .container\n      display flex\n      flex-wrap wrap\n      align-items flex-start\n      align-content stretch\n      justify-content space-between\n  .feature\n    flex-grow 1\n    flex-basis 30%\n    max-width 27%\n    border-radius 8px\n    padding 20px 22px\n    box-shadow 0 0 8px rgba(0,0,0,.1)\n    .feature-index\n      border-radius 4px\n      background-color #083ac4\n      width 50px\n      line-height 50px\n      color #fff\n      font-size 20px\n      text-align center\n      margin-bottom 6px\n      box-shadow 1px 0 0 0 rgba(0,0,0,0.1)\n    h2\n      font-size 1.4rem\n      font-weight 500\n      border-bottom none\n      padding-bottom 0\n      color lighten($textColor, 10%)\n    p\n      color lighten($textColor, 25%)\n  .footer\n    padding 2.5rem\n    border-top 1px solid $borderColor\n    text-align center\n    color lighten($textColor, 25%)\n\n@media (max-width: $MQMobile)\n  .home\n    .features\n      flex-direction column\n    .feature\n      max-width 100%\n      padding 0 2.5rem\n\n@media (max-width: $MQMobileNarrow)\n  .home\n    padding-left 1.5rem\n    padding-right 1.5rem\n    .hero\n      img\n        max-height 210px\n        margin 2rem auto 1.2rem\n      h1\n        font-size 2rem\n      h1, .description, .action\n        margin 1.2rem auto\n      .description\n        font-size 1.2rem\n      .action-button\n        font-size 1rem\n        padding 0.6rem 1.2rem\n    .feature\n      h2\n        font-size 1.25rem\n</style>\n"
  },
  {
    "path": "doc/.vuepress/theme/index.js",
    "content": "module.exports = {\n  extend: \"@vuepress/theme-default\"\n};\n"
  },
  {
    "path": "doc/.vuepress/theme/layouts/Layout.vue",
    "content": "<template>\n    <div\n        class=\"theme-container\"\n        :class=\"pageClasses\"\n        @touchstart=\"onTouchStart\"\n        @touchend=\"onTouchEnd\"\n    >\n        <Navbar v-if=\"shouldShowNavbar\" @toggle-sidebar=\"toggleSidebar\" />\n\n        <div class=\"sidebar-mask\" @click=\"toggleSidebar(false)\" />\n\n        <Sidebar :items=\"sidebarItems\" @toggle-sidebar=\"toggleSidebar\">\n            <template #top>\n                <slot name=\"sidebar-top\" />\n            </template>\n            <template #bottom>\n                <slot name=\"sidebar-bottom\" />\n            </template>\n        </Sidebar>\n\n        <Home v-if=\"$page.frontmatter.home\" />\n\n        <Page v-else :sidebar-items=\"sidebarItems\">\n            <template #top>\n                <slot name=\"page-top\" />\n            </template>\n            <template #bottom>\n                <slot name=\"page-bottom\" />\n            </template>\n        </Page>\n    </div>\n</template>\n\n<script>\nimport Navbar from \"@parent-theme/components/Navbar.vue\";\nimport Page from \"@parent-theme/components/Page.vue\";\nimport Sidebar from \"@parent-theme/components/Sidebar.vue\";\nimport { resolveSidebarItems } from \"@parent-theme/util\";\n\nexport default {\n    name: \"Layout\",\n\n    components: {\n        Page,\n        Sidebar,\n        Navbar,\n    },\n\n    data() {\n        return {\n            isSidebarOpen: false,\n        };\n    },\n\n    computed: {\n        shouldShowNavbar() {\n            const { themeConfig } = this.$site;\n            const { frontmatter } = this.$page;\n            if (frontmatter.navbar === false || themeConfig.navbar === false) {\n                return false;\n            }\n            return (\n                this.$title ||\n                themeConfig.logo ||\n                themeConfig.repo ||\n                themeConfig.nav ||\n                this.$themeLocaleConfig.nav\n            );\n        },\n\n        shouldShowSidebar() {\n            const { frontmatter } = this.$page;\n            return !frontmatter.home && frontmatter.sidebar !== false && this.sidebarItems.length;\n        },\n\n        sidebarItems() {\n            return resolveSidebarItems(\n                this.$page,\n                this.$page.regularPath,\n                this.$site,\n                this.$localePath\n            );\n        },\n\n        pageClasses() {\n            const userPageClass = this.$page.frontmatter.pageClass;\n            return [\n                {\n                    \"no-navbar\": !this.shouldShowNavbar,\n                    \"sidebar-open\": this.isSidebarOpen,\n                    \"no-sidebar\": !this.shouldShowSidebar,\n                },\n                userPageClass,\n            ];\n        },\n    },\n\n    mounted() {\n        this.$router.afterEach(() => {\n            this.isSidebarOpen = false;\n        });\n    },\n\n    methods: {\n        toggleSidebar(to) {\n            this.isSidebarOpen = typeof to === \"boolean\" ? to : !this.isSidebarOpen;\n            this.$emit(\"toggle-sidebar\", this.isSidebarOpen);\n        },\n\n        // side swipe\n        onTouchStart(e) {\n            this.touchStart = {\n                x: e.changedTouches[0].clientX,\n                y: e.changedTouches[0].clientY,\n            };\n        },\n\n        onTouchEnd(e) {\n            const dx = e.changedTouches[0].clientX - this.touchStart.x;\n            const dy = e.changedTouches[0].clientY - this.touchStart.y;\n            if (Math.abs(dx) > Math.abs(dy) && Math.abs(dx) > 40) {\n                if (dx > 0 && this.touchStart.x <= 80) {\n                    this.toggleSidebar(true);\n                } else {\n                    this.toggleSidebar(false);\n                }\n            }\n        },\n    },\n};\n</script>\n"
  },
  {
    "path": "doc/.vuepress/theme/styles/_layout.scss",
    "content": "$accentColor: #083ac4;\n\n.nav-link.external {\n    .outbound {\n        display: none;\n    }\n}\n\n.nav-link.external:last-child {\n    color: #fff;\n    background-color: $accentColor;\n    border-color: $accentColor;\n    padding: 6px 14px;\n    border-radius: 4px;\n}\n\n.doc-main {\n    padding-top: 88px;\n    padding-left: 380px;\n}\n"
  },
  {
    "path": "doc/.vuepress/theme/styles/_reset.scss",
    "content": "/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\n//  * {\n//   box-sizing: border-box;\n//   margin: 0;\n//   padding: 0;\n// }\nhtml {\n    line-height: 1.15; /* 1 */\n    -ms-text-size-adjust: 100%; /* 2 */\n    -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n    margin: 0;\n    padding: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n    display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n    margin: 0;\n    padding: 0;\n}\n/**\n * Correct the font size and margin on `p` elements\n */\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain {\n    /* 1 */\n    display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n    margin: 0;\n    padding: 0;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n    box-sizing: content-box; /* 1 */\n    height: 0; /* 1 */\n    overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n    font-family: monospace, monospace; /* 1 */\n    font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n    background-color: transparent; /* 1 */\n    -webkit-text-decoration-skip: objects; /* 2 */\n    color: #329aff;\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n    border-bottom: none; /* 1 */\n    text-decoration: underline; /* 2 */\n    text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n    font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n    font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n    font-family: monospace, monospace; /* 1 */\n    font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n    font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n    background-color: #ff0;\n    color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n    font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n    font-size: 75%;\n    line-height: 0;\n    position: relative;\n    vertical-align: baseline;\n}\n\nsub {\n    bottom: -0.25em;\n}\n\nsup {\n    top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n    display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n    display: none;\n    height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n    border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n    overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n    font-family: sans-serif; /* 1 */\n    font-size: 100%; /* 1 */\n    line-height: 1.15; /* 1 */\n    margin: 0; /* 2 */\n    padding: 0;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n    /* 1 */\n    overflow: visible;\n    outline: none;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n    /* 1 */\n    text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n    -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n    border-style: none;\n    padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n    outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n    padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n    box-sizing: border-box; /* 1 */\n    color: inherit; /* 2 */\n    display: table; /* 1 */\n    max-width: 100%; /* 1 */\n    padding: 0; /* 3 */\n    white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n    display: inline-block; /* 1 */\n    vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n    overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n    box-sizing: border-box; /* 1 */\n    padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n    height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n    -webkit-appearance: textfield; /* 1 */\n    outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n    -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n    -webkit-appearance: button; /* 1 */\n    font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n    display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n    display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n    display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n    display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n    display: none;\n}\ninput {\n    outline: none;\n}\n/*reset browser scroll style*/\nhtml,\nbody {\n    scrollbar-arrow-color: rgba(209, 213, 219, 1); /**/ /*三角箭头的颜色*/\n    scrollbar-face-color: rgba(209, 213, 219, 1); /**/ /*立体滚动条的颜色*/\n    scrollbar-3dlight-color: rgba(209, 213, 219, 1); /**/ /*立体滚动条亮边的颜色*/\n    scrollbar-highlight-color: rgba(209, 213, 219, 1); /**/ /*滚动条空白部分的颜色*/\n    scrollbar-shadow-color: rgba(209, 213, 219, 1); /**/ /*立体滚动条阴影的颜色*/\n    scrollbar-darkshadow-color: rgba(209, 213, 219, 1); /**/ /*立体滚动条强阴影的颜色*/\n    scrollbar-track-color: rgba(209, 213, 219, 1); /**/ /*立体滚动条背景颜色*/\n    scrollbar-base-color: rgba(244, 245, 249, 1); /**/ /*滚动条的基本颜色*/\n}\n/* chrome scroll style */\n/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/\n::-webkit-scrollbar {\n    width: 6px;\n    height: 6px;\n    background-color: transparent;\n}\n\n/*定义滚动条轨道 内阴影+圆角*/\n::-webkit-scrollbar-track {\n    background-color: transparent;\n}\n\n/*定义滑块*/\n::-webkit-scrollbar-thumb {\n    border-radius: 4px;\n    background-color: rgba(209, 213, 219, 1);\n}\nul li {\n    // list-style: none;\n    padding: 0;\n    margin: 0;\n}\ndl,\ndt,\ndd {\n    margin: 0;\n    padding: 0;\n}\nbutton {\n    cursor: pointer;\n    border: none;\n}\nbutton[disabled] {\n    cursor: not-allowed;\n}\n"
  },
  {
    "path": "doc/.vuepress/theme/styles/main.scss",
    "content": "@import 'reset';\n@import 'layout';\n"
  },
  {
    "path": "doc/.vuepress/theme/styles/palette.styl",
    "content": "$accentColor= #083ac4;"
  },
  {
    "path": "doc/README.md",
    "content": "---\ncontent: Home\nhome: true\n#heroImage: ../imgs/common/logo.svg\nheroText: 一款所见即所得的H5编辑器\nfeatures:\n  - title: 简洁方便\n    details: 任何人只需傻瓜式拖拽或进行简单编辑即可生成精美的H5页面\n  - title: 插拔式体验\n    details: 产品以GPL协议开源, 授权后可植入任何系统，并支持二次开发\n  - title: 持续迭代，无限可能\n    details: 目前正在持续迭代中，后续可根据需求开发功能更强大的可视化系统\nactionText: 快速上手 →\nactionLink: /zh/guide/\nfooter: GPL Licensed | Copyright © 2020-present H5-Dooring\n---\n"
  },
  {
    "path": "doc/zh/guide/README.md",
    "content": "<img src=\"../../img/common/logo.svg\" alt=\"foo\">\n\nH5-Dooring 是一款功能强大，高可扩展的 H5 可视化页面配置解决方案，致力于提供一套简单方便、专业可靠、无限可能的 H5 落地页最佳实践。\n\n## 功能特点\n\n🎉 **可扩展，** Dooring 实现了较为完整的业务闭环，并使其模块化，编辑器内部功能接口也全部可以对接不同服务端语言，实现了标准化接口。此外还支持自定义组件，二次开发，设计模板等能力，以满足功能和跨领域的分层需求。\n\n📦 **开箱即用，** Dooring 内置了**表单渲染器、页面渲染器、动态加载内核**等，仅需一套源码即可上手开发。并且还提供针对 React 的定制插件，内涵丰富的功能，可满足日常 80%的页面制作需求。\n\n🚀 **大量自研，** 包含整个编辑器架构、组件设计、文档、请求库封装，后台管理系统等，满足日常项目的周边需求。\n\n🚄 **与时俱进，** 在满足需求的同时，我们也不会停止对新技术的探索。比如更多**营销组件、业务功能，后台管理可视化，PC 页面编辑器，数据大屏定制**等等。\n\n## 为什么选择 Dooring\n\n目前**github**已超过 3000+star，上线 2 个月累计 500+用户使用，解决完善了 100+问题，后续会持续迭代，更新，自研优秀，先进的 lowcode/nocode 解决方案。\n"
  },
  {
    "path": "doc/zh/guide/building.md",
    "content": "正在建设中...\n"
  },
  {
    "path": "doc/zh/guide/componentDev/DSLAnalysis.md",
    "content": "# DSL 设计\n\nDSL 层主要约定了 Dooring 组件的数据协议，包括组件的可编辑属性、编辑类型、初始值等，之所以定义一致的协议层，主要是方便后期的组件扩展，配置后移，有助于不同后端语言开发和数据存储，接下来我们看看 header 组件的 schema。\n\n1.editData 可编辑的属性类型 DSL\n\n2.config 可编辑组件的默认属性\n\n```js\nconst Header: IHeaderSchema = {\n  editData: [\n    {\n      key: \"bgColor\",\n      name: \"背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"height\",\n      name: \"高度\",\n      type: \"Number\"\n    },\n    {\n      key: \"logo\",\n      name: \"logo\",\n      type: \"Upload\",\n      isCrop: true,\n      cropRate: 1000 / 618\n    },\n    {\n      key: \"logoText\",\n      name: \"logo文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    bgColor: \"rgba(245,245,245,1)\",\n    logo: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: `${serverUrl}/uploads/3_1740be8a482.png`\n      }\n    ],\n    logoText: \"页头Header\",\n    fontSize: 20,\n    color: \"rgba(47,84,235,1)\",\n    height: 50\n  }\n};\n```\n\n由以上代码可知，我们可以在 editData 属性中给组件添加可编辑的属性，比如背景图，然后再 component 中接受属性从而设置样式。\n\n在 config 属性中，我们可以设置组件默认属性值，和 editData 中每一项的 key 一一对应。\n"
  },
  {
    "path": "doc/zh/guide/componentDev/componentStructure.md",
    "content": "<!--\n * @Date: 2021-01-17 12:25:33\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 19:42:42\n * @FilePath: /github-h5-Dooring/doc/zh/guide/componentDev/componentStructure.md\n-->\n\n# 组件结构\n\ndooring 的组件设计包含以下 3 个部分组件：\n\n1、component 组件主体\n\n2、schema 组件的 DSL，结构协议层\n\n3、template 定义了组件的类型、外观、从属关系，后期考虑纳入 schema\n\n接下来我会介绍一个基本的组件主体设计，以为 template 设计，在下一章会具体介绍 schema 部分。\n\n## 组件设计\n\n我们这里拿基本的 header 组件来举例，如下是 header 组件的代码：\n\n```jsx\ninterface HeaderPropTypes extends IHeaderConfig {\n  isTpl: boolean;\n}\n\nconst Header = memo((props: HeaderPropTypes) => {\n  const { bgColor, logo, logoText, fontSize, color } = props;\n  return props.isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logos} alt=\"\" />\n    </div>\n  ) : (\n    <header className={styles.header} style={{ backgroundColor: bgColor }}>\n      <div className={styles.logo}>\n        <img src={logo && logo[0].url} alt={logoText} />\n      </div>\n      <div className={styles.title} style={{ fontSize, color }}>\n        {logoText}\n      </div>\n    </header>\n  );\n});\n```\n\n我们只需要按照上面的方式编写组件即可，props 是 DSL 定义的数据层，用来控制组件的 shape，也就是组件的表现。我们看看 header 对应的 template。\n\n## template 设计\n\n```js\nconst template = {\n  type: \"Header\",\n  h: 28,\n  displayName: \"页头组件\"\n};\nexport default template;\n```\n\n以上就是我们 template 的结构，type 用来定义组件的类型，方便渲染器动态查找，h 代表组件的初始化高度，我们可以自由设置。displayName 是组件的中文名，用来在左侧组件面板中展示，方便用户理解，我们可以在 template 中自定义更多辅助信息，方便使用者更高效的使用我们的编辑器。\n\n## schema 设计\n\n开发一个自定义组件需要包含 3 部分, `Component`, `Schema` 和 `Template`. 接下来我们看一下 `Header` 组件的 `Schema`.\n\n```js\nimport {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  IUploadConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType,\n  TUploadDefaultType\n} from \"@/components/FormComponents/types\";\nimport { baseConfig, baseDefault, ICommonBaseType } from \"../../common\";\n\nexport type THeaderEditData = Array<\n  IColorConfigType | INumberConfigType | IUploadConfigType | ITextConfigType\n>;\nexport interface IHeaderConfig extends ICommonBaseType {\n  bgColor: TColorDefaultType;\n  logo: TUploadDefaultType;\n  logoText: TTextDefaultType;\n  fontSize: TNumberDefaultType;\n  color: TColorDefaultType;\n  height: TNumberDefaultType;\n}\n\nexport interface IHeaderSchema {\n  editData: THeaderEditData;\n  config: IHeaderConfig;\n}\n\nconst Header: IHeaderSchema = {\n  editData: [\n    ...baseConfig,\n    {\n      key: \"bgColor\",\n      name: \"背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"height\",\n      name: \"高度\",\n      type: \"Number\"\n    },\n    {\n      key: \"logo\",\n      name: \"logo\",\n      type: \"Upload\",\n      isCrop: true,\n      cropRate: 1000 / 618\n    },\n    {\n      key: \"logoText\",\n      name: \"logo文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    bgColor: \"rgba(0,0,0,1)\",\n    logo: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: \"http://49.234.61.19/uploads/3_1740be8a482.png\"\n      }\n    ],\n    logoText: \"页头Header\",\n    fontSize: 20,\n    color: \"rgba(255,255,255,1)\",\n    height: 50,\n    ...baseDefault\n  }\n};\n\nexport default Header;\n```\n\n`editData`表示组件的可编辑属性, 我们可以自定义哪些组件可编辑. `config`为组件接收的属性, 和`editData`数组项中的`key`一一对应.\n\n### 组件编辑区属性类型\n\n`Dooring`组件编辑面板有如下对应编辑类型:\n\n- Upload 上传组件\n- Text 文本框\n- RichText 富文本\n- TextArea 多行文本\n- Number 数字输入框\n- DataList 列表编辑器\n- FileList 文件列表编辑器\n- InteractionData 交互设置\n- Color 颜色面板\n- MutiText 多文本\n- Select 选择下拉框\n- Radio 单选框\n- Switch 开关切换\n- CardPicker 卡片面板\n- Table 表格编辑器\n- Pos 坐标编辑器\n- FormItems 表单设计器\n"
  },
  {
    "path": "doc/zh/guide/componentDev/dynamicLoading.md",
    "content": "<!--\n * @Date: 2021-01-17 14:24:40\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 19:42:53\n * @FilePath: /github-h5-Dooring/doc/zh/guide/componentDev/dynamicLoading.md\n-->\n\n# 组件动态加载\n\n目前 H5-Dooring 的组件都是通过动态加载的方式引入，好处是我们在页面中只会加载我们需要的组件，不需要的组件不会被加载，这样可以提高页面加载的速度，这样做也会出现一些问题，比如一个长页面，配置了很多组件，那么一个页面加载过程可以会触发多次请求，目前还没有遇到性能问题，但后续会逐渐优化这个问题。\n\n## umi3 提供的 dynamic\n\n目前组件的动态加载我们采用的 umi 的 dynamic 方案，基于它我们上层封装了一个组件动态加载器，原理如下：\n\n<img src=\"../../../img/componentDev/dynamic.png\" alt=\"foo\">\n\n具体代码可以参考 Dooring 的 Github 地址：[https://github.com/MrXujiang/h5-Dooring](https://github.com/MrXujiang/h5-Dooring)\n"
  },
  {
    "path": "doc/zh/guide/deployDev/api.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n**H5-Dooring**后端部分主要使用 `Nodejs` 开发, 为了满足更多定制化需求和服务的可移植性, 特意编写了 API 接口文档,\n方便大家使用不同的后端语言实现服务接入.\n\n- 注意: 接口统一前缀为`/api/v0`\n\n## 用户相关\n\n### 用户登录\n\n用户登录接口\n\n- `POST` /vip/check\n\n| 参数名 | 是否必选 |  类型  |   说明 |\n| ------ | :------: | :----: | -----: |\n| n      |   true   | string | 用户名 |\n| co     |   true   | string |   密码 |\n\n返回示例\n\n```json\n{\n  \"result\": {\n    \"n\": \"test\",\n    \"od\": [],\n    \"h5\": [\n      {\n        \"t\": \"23242ED\",\n        \"n\": \"测试页面\"\n      }\n    ],\n    \"rp\": \"AAAAA\",\n    \"maxage\": 300000\n  }\n}\n```\n\n### 注销登录\n\n注销接口\n\n- `POST` /vip/checkout\n\n返回示例\n\n```json\n{\n  \"result\": null,\n  \"msg\": \"退出成功\"\n}\n```\n\n### 权限控制\n\n不同用户级别所访问的页面权限不同, 这块可结合服务端已有代码设计属于自己的权限字段, 地址为`server/src/router`\n\n### 用户列表\n\n获取用户列表接口\n\n- `GET` /vip/all\n\n获取用户列表需要账号满足以下条件:\n\n- 已登录\n- 为超级管理员\n\n返回示例\n\n```json\n[\n  {\n    \"id\": \"\",\n    \"n\": \"test\",\n    \"co\": \"123456\",\n    \"od\": [],\n    \"h5\": [\n      {\n        \"t\": \"23242ED\",\n        \"n\": \"测试页面\"\n      }\n    ],\n    \"wx\": \"Mr_xuxiaoxi\",\n    \"rp\": \"AAAAA\"\n  }\n]\n```\n\n### 添加用户\n\n添加用户接口\n\n- `POST` /vip/add\n\n先决条件:\n\n- 用户已登陆\n- 为超级管理员\n\n| 参数名   | 是否必选 |  类型  |   说明 |\n| -------- | :------: | :----: | -----: |\n| nickname |   true   | string | 用户名 |\n| wx       |   true   | string | 微信号 |\n| co       |   true   | string |   密码 |\n\n注: co 是由笔者写的`加密算法`实现, 不需要手动填写, 详情见`dooirng`后台管理/用户管理页面.\n\n返回示例\n\n```json\n{\n  \"id\": \"3422EF\",\n  \"n\": \"test\",\n  \"wx\": \"Mr_xuxiaoxi\",\n  \"co\": \"123456\",\n  \"od\": [],\n  \"h5\": [],\n  \"tpl\": [],\n  \"rp\": \"AAAAA\",\n  \"h5Num\": 10,\n  \"tplNum\": 3\n}\n```\n\n### 生成登录码\n\n生成登录码接口\n\n- `GET` /vip/gcode\n\n先决条件:\n\n- 用户已登陆\n- 为超级管理员\n\n注: 生成登录码是由笔者写的`加密算法`实现, 不需要手动实现, 如果有自定义需求, 可以自行二次开发实现.\n\n返回示例\n\n```json\n{\n  \"co\": \"1x2fgggteee3456_zdd4\"\n}\n```\n\n`说明:` 为了保护用户信息安全, 返回的登录码是加密后的密文, 会调用笔者写的`xib.xip`方法进行加密, 如果想看到原始密码, 需要调用`xib.uxip`进行解密.\n\n### 获取用户真实密码\n\n获取用户真实密码接口\n\n- `GET` /vip/gcode/get\n\n先决条件:\n\n- 用户已登陆\n- 为超级管理员\n\n| 参数名 | 是否必选 |  类型  |         说明 |\n| ------ | :------: | :----: | -----------: |\n| co     |   true   | string | 加密后的密码 |\n\n返回示例\n\n```json\n{\n  \"co\": \"12345678\"\n}\n```\n\n### 修改用户信息\n\n修改用户接口\n\n- `POST` /vip/edit\n\n先决条件:\n\n- 用户已登陆\n- 为超级管理员\n\n| 参数名   | 是否必选 |  类型  |    说明 |\n| -------- | :------: | :----: | ------: |\n| id       |  false   | string | 用户 ID |\n| nickname |  false   | string |  用户名 |\n| co       |  false   | string |  登录码 |\n| wx       |  false   | string |  微信号 |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": null,\n  \"msg\": \"修改成功\"\n}\n```\n\n### 删除用户\n\n删除用户接口\n\n- `DELETE` /vip/del\n\n先决条件:\n\n- 用户已登陆\n- 为超级管理员\n\n| 参数名 | 是否必选 |  类型  |    说明 |\n| ------ | :------: | :----: | ------: |\n| id     |   true   | string | 用户 ID |\n| wx     |   true   | string |  微信号 |\n| n      |   true   | string |  用户名 |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": null,\n  \"msg\": \"删除成功\"\n}\n```\n\n## H5 页面管理\n\n### 获取 H5 数据\n\n- `GET` /visible/h5/get\n\n先决条件:\n\n- 用户已登陆\n\n| 参数名 | 是否必选 |  类型  |       说明 |\n| ------ | :------: | :----: | ---------: |\n| tid    |   true   | string | H5 唯一 id |\n\n返回示例\n\n```json\n{\n  \"pageConfig\": {},\n  \"tpl\": [\n    {\n      \"id\": \"879742\",\n      \"item\": {\n        \"type\": \"Carousel\",\n        \"config\": {\n          \"direction\": \"left\",\n          \"swipeable\": false,\n          \"autoPlay\": false,\n          \"imgList\": [\n            {\n              \"id\": \"1\",\n              \"title\": \"趣谈小课1\",\n              \"desc\": \"致力于打造优质小课程\",\n              \"link\": \"xxxxx\",\n              \"imgUrl\": [\n                {\n                  \"uid\": \"001\",\n                  \"name\": \"image.png\",\n                  \"status\": \"done\",\n                  \"url\": \"http://io.nainor.com/uploads/1_1740bd7c3dc.png\"\n                }\n              ]\n            },\n            {\n              \"id\": \"2\",\n              \"title\": \"趣谈小课1\",\n              \"desc\": \"致力于打造优质小课程\",\n              \"link\": \"xxxxx\",\n              \"imgUrl\": [\n                {\n                  \"uid\": \"001\",\n                  \"name\": \"image.png\",\n                  \"status\": \"done\",\n                  \"url\": \"http://io.nainor.com/uploads/2_1740bd8d525.png\"\n                }\n              ]\n            }\n          ],\n          \"tplImg\": \"http://io.nainor.com/uploads/carousal_17442e1420f.png\"\n        },\n        \"h\": 82,\n        \"editableEl\": [\n          {\n            \"key\": \"direction\",\n            \"name\": \"方向\",\n            \"type\": \"Radio\",\n            \"range\": [\n              {\n                \"key\": \"down\",\n                \"text\": \"从上到下\"\n              },\n              {\n                \"key\": \"left\",\n                \"text\": \"从左到右\"\n              }\n            ]\n          },\n          {\n            \"key\": \"swipeable\",\n            \"name\": \"是否可拖拽\",\n            \"type\": \"Switch\"\n          },\n          {\n            \"key\": \"autoPlay\",\n            \"name\": \"是否自动播放\",\n            \"type\": \"Switch\"\n          },\n          {\n            \"key\": \"imgList\",\n            \"name\": \"图片列表\",\n            \"type\": \"DataList\"\n          }\n        ],\n        \"category\": \"base\"\n      },\n      \"point\": {\n        \"i\": \"x-0\",\n        \"x\": 0,\n        \"y\": 13,\n        \"w\": 24,\n        \"h\": 82,\n        \"isBounded\": true\n      },\n      \"status\": \"inToCanvas\"\n    },\n    {\n      \"id\": \"481194\",\n      \"item\": {\n        \"type\": \"Form\",\n        \"config\": {\n          \"title\": \"表单定制组件\",\n          \"fontSize\": 18,\n          \"titColor\": \"rgba(60,60,60,1)\",\n          \"titWeight\": \"400\",\n          \"bgColor\": \"rgba(255,255,255,1)\",\n          \"btnColor\": \"rgba(20,54,226,100)\",\n          \"btnTextColor\": \"rgba(255,255,255,1)\",\n          \"api\": \"\",\n          \"formControls\": [\n            {\n              \"id\": \"1\",\n              \"type\": \"Text\",\n              \"label\": \"姓名\",\n              \"placeholder\": \"请输入姓名\"\n            },\n            {\n              \"id\": \"2\",\n              \"type\": \"Number\",\n              \"label\": \"年龄\",\n              \"placeholder\": \" 请输入年龄\"\n            },\n            {\n              \"id\": \"4\",\n              \"type\": \"MySelect\",\n              \"label\": \"爱好\",\n              \"options\": [\n                {\n                  \"label\": \"选项一\",\n                  \"value\": \"1\"\n                },\n                {\n                  \"label\": \"选项二\",\n                  \"value\": \"2\"\n                },\n                {\n                  \"label\": \"选项三\",\n                  \"value\": \"3\"\n                }\n              ]\n            }\n          ]\n        },\n        \"h\": 172,\n        \"category\": \"base\"\n      },\n      \"point\": {\n        \"i\": \"x-1\",\n        \"x\": 0,\n        \"y\": 98,\n        \"w\": 24,\n        \"h\": 172,\n        \"isBounded\": true\n      },\n      \"status\": \"inToCanvas\"\n    }\n  ]\n}\n```\n\n### 保存 H5 数据\n\n- `POST` /visible/h5/save\n\n先决条件:\n\n- 用户已登陆\n\n| 参数名     | 是否必选 |  类型  |                说明 |\n| ---------- | :------: | :----: | ------------------: |\n| pageConfig |  false   | object |     H5 页面配置数据 |\n| tpl        |   true   | object | H5 页面组件配置数据 |\n| tid        |   true   | string |      H5 页面唯一 id |\n\n参数示例\n\n```json\n{\n  \"pageConfig\": {\n    \"bgColor\": \"rgba(151,25,25,1)\",\n    \"title\": \"医院宣传页\"\n  },\n  \"tpl\": [],\n  \"tid\": \"EF123D3\"\n}\n```\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": {\n    \"tid\": \"EF123D3\"\n  },\n  \"msg\": \"保存成功\"\n}\n```\n\n### 删除 H5 数据\n\n- `DELETE` /visible/h5/del\n\n先决条件:\n\n- 用户已登陆\n\n| 参数名 | 是否必选 |  类型  |           说明 |\n| ------ | :------: | :----: | -------------: |\n| tid    |   true   | string | H5 页面唯一 id |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": [\n    {\n      \"tid\": \"EF123D3\",\n      \"name\": \"test页面\"\n    },\n    {\n      \"tid\": \"EF123D6\",\n      \"name\": \"test2页面\"\n    }\n  ],\n  \"msg\": \"删除成功\"\n}\n```\n\n## H5 表单数据管理\n\n### 保存表单数据\n\n- `POST` /vip/h5/form/post\n\n| 参数名         | 是否必选 |  类型  |            说明 |\n| -------------- | :------: | :----: | --------------: |\n| tid(query)     |   true   | string |  H5 页面唯一 id |\n| formData(body) |   true   | array  | H5 页面表单数据 |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": null,\n  \"msg\": \"表单提交成功\"\n}\n```\n\n### 批量导入表单数据\n\n- `POST` /vip/h5/form/import\n\n| 参数名         | 是否必选 |  类型  |                说明 |\n| -------------- | :------: | :----: | ------------------: |\n| tid(query)     |   true   | string |      H5 页面唯一 id |\n| formData(body) |   true   | array  | H5 页面表单数据集合 |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": null,\n  \"msg\": \"批量导入成功\"\n}\n```\n\n### 删除表单数据\n\n- `DELETE` /vip/h5/form/del\n\n| 参数名 | 是否必选 |  类型  |           说明 |\n| ------ | :------: | :----: | -------------: |\n| tid    |   true   | string | H5 页面唯一 id |\n| ID     |   true   | string |    表单专属 id |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": null,\n  \"msg\": \"删除成功\"\n}\n```\n\n## 模版管理\n\n### 获取模版库\n\n- `GET` /visible/tpls/free\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": [\n    {\n      \"img\": \"http://xxx/uploads/tpl_175adabd8dd.jpg\",\n      \"name\": \"合作模版\",\n      \"tid\": \"B73349B6\"\n    }\n  ]\n}\n```\n\n### 保存模版\n\n- `POST` /visible/tpl/save\n\n先决条件:\n\n- 用户已登陆\n\n| 参数名     | 是否必选 |  类型  |            说明 |\n| ---------- | :------: | :----: | --------------: |\n| name       |   true   | string |     H5 模版名称 |\n| cate       |   true   | string |     H5 模版分类 |\n| img        |  false   | string |   H5 模版封面图 |\n| tpl        |   true   | array  |     H5 模版数据 |\n| pageConfig |  false   | object | H5 模版全局配置 |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": {\n    \"tid\": \"B73349B6\"\n  },\n  \"msg\": \"保存成功\"\n}\n```\n\n### 删除模版\n\n- `DELETE` /visible/tpl/del\n\n先决条件:\n\n- 用户已登陆\n\n| 参数名 | 是否必选 |  类型  |       说明 |\n| ------ | :------: | :----: | ---------: |\n| tid    |   true   | string | H5 模版 id |\n\n返回示例\n\n```json\n{\n  \"state\": 200,\n  \"result\": null,\n  \"msg\": \"删除成功\"\n}\n```\n\n## 文件上传\n\n## 数据统计\n\n### 数据大盘接口\n\n### 页面埋点\n"
  },
  {
    "path": "doc/zh/guide/deployDev/deploy.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n私有化部署需要获取 4 个核心项目包, 包括\n\n- H5 编辑器(h5_plus)\n- H5 基座(h5)\n- Dooring 管理后台(Dooring-Admin)\n- 服务端项目(Server)\n\n获取以上四个核心源码工程需要满足商业授权协议, 具体可联系作者[徐小夕](http://h5.dooring.cn/uploads/WechatIMG3_1758e9753e2.jpeg)\n\n### 部署架构图\n\n<img src=\"../../../img/common/deploy.png\" alt=\"H5-dooring部署\">\n\n部署流程如下:\n\n1. 下载 4 个源码工程, 安装依赖(npm install 或 yarn)\n2. 打包 3 个前端工程至`server`的 static 目录下\n3. 在`server`下本地运行 `yarn start` 或 `npm start` 启动服务端进行本地测试\n4. 打包服务端代码, `yarn build` 生成 `dist` 目录, 建议使用 `pm2` 做`nodejs`服务的负载均衡, 运行 `pm2 start dist/index.js`启动生产环境代码\n\n也可以将以上步骤集成到 gitlab 等 CI, CD 服务中, 进行自动化打包发布, 或者采用`docker`进行容器化部署.\n\n### 步骤 3.4 详细流程\n\n#### 1. 安装项目环境\n\n服务器需提前安装 node 和 pm2, 将本项目上传至服务器指定的目录(如/www/activity), 进入项目目录, 执行:\n\n```\nnpm install\n```\n\n#### 2. 修改项目域名\n\n进入`./src/config/index.js`, 修改`staticPath`变量为当前服务器域名/ip, 如`http://xxx.com`或`http://xxx.com:8080`(如非 80 端口)\n\n#### 3. 编译项目\n\n执行`npm run build`编译项目, 生成`dist`目录\n\n#### 4. 运行项目\n\n在项目根目录执行 `pm2 start dist/index.js`启动项目\n"
  },
  {
    "path": "doc/zh/guide/deployDev/deploy_v6.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n私有化部署需要获取 3 个核心项目包, 包括\n\n- 可视化大屏编辑器(v6.dooring/)\n- v6 管理后台(v6.dooring/manage)\n- 服务端项目(v6.dooring/server)\n\n获取以上三个核心源码工程需要满足商业授权协议, 具体可参考[商业授权方案](http://h5.dooring.cn/h5_plus/price)\n\n### 部署架构图\n\n<img src=\"../../../img/common/v6.deploy.png\" alt=\"H5-dooring部署\">\n\n部署流程如下:\n\n1. 下载 3 个源码工程, 安装依赖(npm install 或 yarn)\n2. 打包 2 个前端工程至`server`的 static 目录下\n3. 在`server`下本地运行 `yarn start` 或 `npm start` 启动服务端进行本地测试\n4. 打包服务端代码, `yarn build` 生成 `dist` 目录, 建议使用 `pm2` 做`nodejs`服务的负载均衡, 运行 `pm2 start dist/index.js`启动生产环境代码\n\n也可以将以上步骤集成到 gitlab 等 CI, CD 服务中, 进行自动化打包发布, 或者采用`docker`进行容器化部署.\n\n### 步骤 3.4 详细流程\n\n#### 1. 安装项目环境\n\n服务器需提前安装 node 和 pm2, 将本项目上传至服务器指定的目录(如/www/activity), 进入项目目录, 执行:\n\n```\nnpm install\n```\n\n#### 2. 修改项目域名\n\n进入`./src/config/index.js`, 修改`staticPath`变量为当前服务器域名/ip, 如`http://xxx.com`或`http://xxx.com:8080`(如非 80 端口)\n\n#### 3. 编译项目\n\n执行`npm run build`编译项目, 生成`dist`目录\n\n#### 4. 运行项目\n\n在项目根目录执行 `pm2 start dist/index.js`启动项目\n"
  },
  {
    "path": "doc/zh/guide/deployDev/dir.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n服务端主要是我们的`server`工程, 数据主要存放在`server/public`下, 具体数据指代含义我们接下来会详细介绍.\n\n- bed 存放图片库中的分类图片, 私有化部署的用户可以直接在此处扩充图片(更好的建议是直接存到第三方图床)\n- h5 用户保存的 h5 数据文件, 一个页面对应一个 json 文件\n- h5_tpl 平台保存的模版数据文件夹\n  - xxx.json 模版页面文件\n  - tpls.json 模版库中的模版列表数据, 可以手动清空\n- h5_vip 会员数据目录\n  - form 会员制作的含表单页面的表单收集数据\n  - view.json 用户浏览量数据\n  - vip.json 会员列表数据\n  - vipCard.json 会员订单数据(暂时无用, 可删除)\n- image.json 图片库, 主要用来渲染页面的图片库数据\n- city.json 省市 3 级联动数据, 为表单组件提供数据支持\n"
  },
  {
    "path": "doc/zh/guide/deployDev/form.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n### 获取 Form 组件的值数据\n\nForm 表单组件在`editor`目录下`src/components/BasicShop/BasicComponents`位置.\n\nForm 组件是`Dooring`的核心组件之一, 内部的值通过 Form 组件内部收集, 当然我们也可以暴露出来让其他交互或者组件消费(需要一定的二次开发), 关键代码如下:\n\n```js\nreq\n  .post(`/vip/h5/form/post${location.search}`, { ...fields, ...formData })\n  .then(res => {\n    if (type === \"link\") {\n      // 解析参数\n      let isPre = content.indexOf(\"?\") < 0;\n      let query = { dr: Date.now(), from: urlParmas.tid };\n      try {\n        query = params ? { ...JSON.parse(params), ...query } : query;\n      } catch (err) {\n        console.log(err);\n      }\n\n      // 跳转\n      if (content.indexOf(\"http\") > -1) {\n        window.location.href = content + urlencode(query, isPre);\n        return;\n      }\n\n      history.push(`/m?tid=${content}&${urlencode(query)}`);\n    } else if (type === \"modal\") {\n      setVisible(true);\n    } else if (type === \"code\") {\n      eval(content);\n    }\n  });\n```\n\n数据收集提交的核心代码在 Form 组件的第 56-149 行, 也就是`submit`方法. 表单组件收集到的数据统一存放在代码中的`formData`字段, 所以要想在其他地方获取用户表单填写的值, 我们只需要手动将`formData`传递出去, 或者挂载到全局(如 window 对象, localStorage, indexedDB 等).\n"
  },
  {
    "path": "doc/zh/guide/deployDev/https.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n目前**H5-Dooring**全面支持 https 部署, 具体方式方案如下.\n\n### 前端工程\n\n我们需要在前端工程中的`src/pages/document.ejs`中的`head`中添加如下代码:\n\n```html\n<meta\n  http-equiv=\"Content-Security-Policy\"\n  content=\"upgrade-insecure-requests\"\n/>\n```\n\n目的是强制将页面中 HTTP 请求转换为 HTTPS.\n\n### 服务器工程\n\n#### 1. 申请 SSL 证书\n\n#### 2. 生成 server.csr+server.key\n\n#### 3. 通过证书链生成.pem 文件\n\n#### 在`server`中的`src/index.js`按如下方式修改\n\n```js\n// 忽略部分无影响代码\nimport https from \"https\";\n\n// 你的ssl存放路径, 建议直接放在server目录下\nconst filePath = path.join(__dirname, \"../ssl\");\n\n// 启动逻辑\nasync function start() {\n  // https配置\n  const httpsOptions = {\n    key: fs.readFileSync(path.join(filePath, \"3536084__doctopia.com.cn.key\")), //ssl文件路径\n    cert: fs.readFileSync(path.join(filePath, \"3536084__doctopia.com.cn.pem\")) //ssl文件路径\n  };\n\n  // https服务\n  const server = https.createServer(httpsOptions, app.callback());\n\n  const io = require(\"socket.io\")(server);\n\n  // 忽略其他无影响代码\n\n  // https默认443, 这里我们可以走公共配置\n  server.listen(443, () => {\n    console.log(`服务器地址:${config.staticPath}`);\n  });\n}\n\nstart();\n```\n"
  },
  {
    "path": "doc/zh/guide/deployDev/log.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n### 更新日志\n\n#### 1.99\n\n1. 添加数据源功能\n2. 视频组件支持封面图\n3. 优化页面 DSL 结构, 降低了 jsonSchema 体积 30%-50%\n4. 官网优化\n5. 管理后台替换 logo, 部分文案信息\n6. 添加图片列表组件\n7. 轮播图支持一键绑定数据源\n\n#### 1.98\n\n1. 编辑器功能区添加更多折叠下拉框, 优化头部界面\n2. 添加数据源入口和界面\n3. 模版库优化, 剔除无用模版, 累计 60+模版\n4. 入口页添加赞助墙\n5. 升级视频组件, 支持弹幕, 截屏, 模式设置等功能\n6. 文件上传路径兼容 window 服务器本地化部署\n\n#### 1.96\n\n1. 修复首页推荐项目外链地址和站内文案\n2. 替换 Dooring 网站 logo\n3. 优化 ios8 以下访问 H5 时可能出现的页面卡顿问题\n4. 图片上传组件添加 svg, gif 图片格式支持\n5. 后台管理系统添加一键跳编辑器按钮\n6. 服务端编辑侧路由加固\n7. 文件上传组件添加自定义上传文档，支持七牛云，腾讯云，阿里 oss 等第三方图床方式\n\n#### 1.95\n\n1. dooring 文档添加更新日志模块\n2. dooring 增报错监控函数, 提供一键清空缓存按钮和自动重载功能\n3. 新增电商商品 H5 模版\n4. 页面配置增加背景模式和背景重复\n5. 表单添加字段名配置项\n\n#### 1.94\n\n1. 转盘组件支持转盘交互功能(跳转链接/打开弹窗/自定义代码)\n2. 添加网站拦截, 防止页面误关导致页面无法保存\n3. 优化页面控制条组件样式\n4. 按钮组件添加组件动画\n5. 图片组件添加组件动画\n6. 媒体组件 icon 优化\n7. 全局错误监控组件添加一键清除缓存功能\n\n#### 1.93\n\n1. 上线源码下载功能\n2. 服务端支持下载源码服务和下载次数限制\n3. 界面部分文案优化\n4. 出码基座优化\n5. 抽奖组件支持抽奖后自定义交互(弹窗/链接/自定义代码)\n\n#### 1.92\n\n1. 修复背景图预览适配问题\n2. 转盘组件支持中奖后自定义交互/弹窗/自定义代码\n3. 界面局部调整\n4. 后台管理表单数据支持多键查询\n5. 可视化大屏柱状图组件支持实时数据请求\n"
  },
  {
    "path": "doc/zh/guide/deployDev/oss.md",
    "content": "<!--\n * @Date: 2021-01-20 23:25:29\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-01-22 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/deployDev/deploy.md\n-->\n\n**H5-Dooring**全面支持第三方对象存储服务, 我们以七牛云对象存储为例.\n\n### 前端上传文件到 oss\n\n首先我们需要在第三方对象储存服务中配置对应的服务和域名. 其次安装对应的 sdk, 如七牛云 sdk:\n\n```js\nimport * as qiniu from \"qiniu-js\";\n```\n\n其次我们修改`h5_plus`工程的`Upload`组件, 详细地址为`src/core/FormComponents/Upload`.\n\n修改内容如下:\n\n```js\nconst fileName = file.name;\nconst suffix = \"自定义文件后缀\";\nconst putExtra = {\n  fname: fileName,\n  params: {}\n};\nconst uid = +new Date() + uuid(16, 8) + suffix;\n// 使用七牛云上传api, 前提是提前在前端拿到对应的ticket, 可以通过请求的方式获取\nconst observe = qiniu.upload(\n  file,\n  uid,\n  this.state.qnToken.ticket,\n  putExtra,\n  {}\n);\nobserve.subscribe(\n  () => {},\n  null,\n  res => {\n    // 拼接路径\n    const url = `${this.state.qnToken.domain}/${res.key}`;\n    // 存库\n    const fileList = [{ uid, name: fileName, status: \"done\", url }];\n    this.setState({\n      curImgUrl: url,\n      fileList\n    });\n    this.props.onChange && this.props.onChange(fileList);\n  }\n);\n```\n\n其他 oss 服务类似, 如果不清楚如何配置, 可以在[H5-Dooring 官网](http://h5.dooring.cn/)中找到我们.\n\n### 如何接入任何第三方上传服务\n\n首先我们的上传组件`Upload`使用内部的服务接口来实现上传功能, 所以需要给组件的`action`赋值, 如下:\n\n```jsx\n<Upload\n  fileList={fileList}\n  onPreview={this.handlePreview}\n  onChange={this.handleChange}\n  onRemove={this.handleRemove}\n  name=\"file\"\n  listType=\"picture-card\"\n  className={styles.avatarUploader}\n  action={sdk_upload_api || action}\n  withCredentials={withCredentials}\n  headers={{\n    \"x-requested-with\": localStorage.getItem(\"user\") || \"\",\n    authorization: localStorage.getItem(\"token\") || \"\",\n    ...headers\n  }}\n  beforeUpload={this.handleBeforeUpload}\n>\n  {fileList.length >= maxLen ? null : uploadButton}\n</Upload>\n```\n\n如果需要集成第三方 oss, 如七牛云, 阿里 oss 等, 我们需要将`Upload`组件的`action`属性设置为空字符串, 其次删除`onChange`属性, 上传操作统一在`beforeUpload`中进行. 案例如下:\n\n```jsx\n<Upload\n  fileList={fileList}\n  action=\"\"\n  onPreview={this.handlePreview}\n  onRemove={this.onRemove}\n  name=\"file\"\n  listType=\"picture-card\"\n  className={styles.avatarUploader}\n  headers={{ ...headers }}\n  beforeUpload={this.handleBeforeUpload}\n>\n  {fileList.length >= maxLen ? null : uploadButton}\n</Upload>\n```\n\n自定义上传的核心逻辑放在了`beforeUpload`上. 我们具体看看`beforeUpload`这个方法如何实现.\n\n```js\nhandleBeforeUpload = (file: RcFile) => {\n  // 1. 限制图片类型\n  const isJpgOrPng =\n    file.type === \"image/jpeg\" ||\n    file.type === \"image/png\" ||\n    file.type === \"image/jpg\" ||\n    file.type === \"image/gif\";\n  if (!isJpgOrPng) {\n    message.error(\"只能上传格式为jpeg/png/gif的图片\");\n  }\n  // 限制上传文件大小\n  const isLt3M = file.size / 1024 / 1024 < 3;\n  if (!isLt3M) {\n    message.error(\"图片必须小于3MB!\");\n  }\n  if (isJpgOrPng && isLt3M) {\n    // 3. 正常上传逻辑\n    const fileName = file.name;\n    // 3.1 调用oss接口, 将图片上传oss\n    // 3.2 将接口返回的url信息, 组装成fileList数据结构, 并更新state\n    const fileList = [{ uid, name: fileName, status: \"done\", url }];\n    this.setState({\n      curImgUrl: url,\n      fileList\n    });\n    // 3.3 将数据传给上层保存\n    this.props.onChange && this.props.onChange(fileList);\n  }\n  return isJpgOrPng && isLt3M;\n};\n```\n"
  },
  {
    "path": "doc/zh/guide/directoryStructure.md",
    "content": "```\nsrc\n├─ assets\n│  ├─ header.png\n│  ├─ form.png\n│  ├─ footer.png\n│  ├─ icon.png\n│  ├─ picture.png\n├─ components\n│  ├─ BackTop\n│  │  └─ index.js\n│  ├─ BasicShop\n│  │  ├─ BasicComponents\n│  │  │  ├─ Card\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Carousel\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Footer\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Form\n│  │  │  │  ├─ BaseForm.tsx\n│  │  │  │  ├─ BasePopoverForm.tsx\n│  │  │  │  ├─ baseForm.less\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Header\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Icon\n│  │  │  │  ├─ icon.ts\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Image\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ LongText\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Nav\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Notice\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Qrcode\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ RichText\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Text\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ WhiteTpl\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ XButton\n│  │  │  │  ├─ Modal.tsx\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ schema.ts\n│  │  │  └─ template.ts\n│  │  ├─ MediaComponents\n│  │  │  ├─ Audio\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Calendar\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Map\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Video\n│  │  │  │  ├─ index.css\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ schema.ts\n│  │  │  └─ template.ts\n│  │  ├─ ShopComponents\n│  │  │  ├─ CardLabel\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Coupons\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ List\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Tab\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ ZhuanLan\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ schema.ts\n│  │  │  └─ template.ts\n│  │  ├─ VisualComponents\n│  │  │  ├─ Area\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Chart\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Funnel\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Line\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Pie\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ Radar\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ WordCloud\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ XProgress\n│  │  │  │  ├─ index.less\n│  │  │  │  ├─ index.tsx\n│  │  │  │  ├─ schema.ts\n│  │  │  │  └─ template.ts\n│  │  │  ├─ schema.ts\n│  │  │  └─ template.ts\n│  │  ├─ common.ts\n│  │  └─ schema.ts\n│  ├─ Calibration\n│  │  ├─ index.less\n│  │  └─ index.tsx\n│  ├─ ErrorBundaries\n│  │  └─ index.tsx\n│  ├─ LoadingCp\n│  │  └─ index.tsx\n│  ├─ ModalTpl\n│  │  ├─ cate.js\n│  │  ├─ index.js\n│  │  └─ index.less\n│  └─ Zan\n│     ├─ index.less\n│     └─ index.tsx\n├─ core\n│  ├─ FormComponents\n│  │  ├─ CardPicker\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ Color\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ DataList\n│  │  │  ├─ editorModal.tsx\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ FormItems\n│  │  │  ├─ EditorModal.tsx\n│  │  │  ├─ FormItems.tsx\n│  │  │  ├─ formItems.less\n│  │  │  └─ index.tsx\n│  │  ├─ InteractionData\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ MutiText\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ Pos\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ Table\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ Upload\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  ├─ XEditor\n│  │  │  ├─ index.less\n│  │  │  └─ index.tsx\n│  │  └─ types.ts\n│  ├─ DynamicEngine.tsx\n│  ├─ FormRender.tsx\n│  ├─ ViewRender.tsx\n│  └─ viewRender.less\n├─ layouts\n│  ├─ __tests__\n│  │  └─ index.test.js\n│  ├─ index.less\n│  └─ index.tsx\n├─ pages\n│  ├─ __tests__\n│  │  └─ index.test.js\n│  ├─ editor\n│  │  ├─ components\n│  │  │  ├─ AvatorGroup\n│  │  │  │  └─ index.tsx\n│  │  │  ├─ CanvasControl\n│  │  │  │  ├─ index.less\n│  │  │  │  └─ index.tsx\n│  │  │  └─ Header\n│  │  │     ├─ index.js\n│  │  │     └─ index.less\n│  │  ├─ models\n│  │  │  └─ editorModal.js\n│  │  ├─ services\n│  │  │  └─ editorService.js\n│  │  ├─ Container.js\n│  │  ├─ SourceBox.tsx\n│  │  ├─ TargetBox.js\n│  │  ├─ index.js\n│  │  ├─ index.less\n│  │  └─ preview.tsx\n│  ├─ help\n│  │  ├─ index.less\n│  │  └─ index.tsx\n│  ├─ home\n│  │  ├─ index.less\n│  │  └─ index.tsx\n│  ├─ ide\n│  │  ├─ _draft.tsx\n│  │  ├─ index.less\n│  │  └─ index.tsx\n│  ├─ login\n│  │  ├─ index.less\n│  │  └─ index.tsx\n│  ├─ document.ejs\n│  └─ mobileTip.js\n├─ utils\n│  ├─ req.ts\n│  └─ tool.ts\n├─ app.tsx\n└─ global.css\n\n```\n"
  },
  {
    "path": "doc/zh/guide/functionRealization/download.md",
    "content": "<!--\n * @Date: 2021-01-17 14:26:00\n * @LastEditors: xuxiaoxi\n * @LastEditTime: 2021-05-17 21:32:58\n * @FilePath: /github-h5-Dooring/doc/zh/guide/functionRealization/saveJson.md\n-->\n\n## 下载源码\n\n目前 Dooring 已支持下载源码功能, 我们可以使用编辑器页面头部的下载按钮来实现下载用户搭建的 H5 源码.\n<img src=\"../../../img/functionRealization/down.png\" alt=\"foo\">\n\n源码下载之后是完整的 React 项目源代码, 开发人员可以直接根据自己的业务需求来二次编写代码来满足不同的业务需求.\n\n在拿到源码之后, 我们需要进入项目, 使用 npm 或者 yarn 安装项目依赖, 如下:\n\n```bash\nnpm install\n// 或者\nyarn\n```\n\n之后我们就可以本地运行项目了:\n\n```bash\nnpm start\n// 或者\nyarn start\n```\n\n因为源码工程采用`umi3.0`搭建, 所以代码配置可以参考`umi3.0`规范, 比如路由配置, `history`模式, 打包路径等, 二次开发完成之后, 我们可以执行:\n\n```bash\nnpm run build\n// 或者\nyarn build\n```\n\n将项目打包成 html, 以便部署到任何服务器中.\n"
  },
  {
    "path": "doc/zh/guide/functionRealization/machinePreview.md",
    "content": "<!--\n * @Date: 2021-01-17 14:27:13\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 21:49:26\n * @FilePath: /github-h5-Dooring/doc/zh/guide/functionRealization/machinePreview.md\n-->\n\n# 真机预览\n\n真机预览和网页预览的流程类似，工作流程如下：\n\n<img src=\"../../../img/functionRealization/preview-machine.png\" alt=\"foo\">\n\n由于不同机型预览的效果有些许不同，最终效果以实际看到的为主。\n"
  },
  {
    "path": "doc/zh/guide/functionRealization/pagePreview.md",
    "content": "<!--\n * @Date: 2021-01-17 14:26:41\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 21:49:18\n * @FilePath: /github-h5-Dooring/doc/zh/guide/functionRealization/pagePreview.md\n-->\n\n# 网页预览\n\n我们看看网页预览的工作流程：\n\n<img src=\"../../../img/functionRealization/preview-flow.png\" alt=\"foo\">\n\n前端预览界面：\n\n<img src=\"../../../img/functionRealization/preview-page.png\" alt=\"foo\">\n"
  },
  {
    "path": "doc/zh/guide/functionRealization/revocation.md",
    "content": "<!--\n * @Date: 2021-01-17 14:27:28\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 21:50:17\n * @FilePath: /github-h5-Dooring/doc/zh/guide/functionRealization/revocation.md\n-->\n\n# 撤销/重做\n\n撤销重做我们主要使用了 redux-undo 这个库，配合 Dva 使用，具体使用方法参考如下操作：\n\n```js\nimport { createLogger } from \"redux-logger\";\nimport { message } from \"antd\";\nimport undoable, { StateWithHistory } from \"redux-undo\";\nimport { Reducer, AnyAction } from \"redux\";\n\nexport const dva = {\n  config: {\n    onAction: createLogger(),\n    onError(e: Error) {\n      message.error(e.message, 3);\n    },\n    onReducer: (reducer: Reducer<any, AnyAction>) => {\n      let undoReducer = undoable(reducer);\n      return function(state: StateWithHistory<any>, action: AnyAction) {\n        let newState = undoReducer(state, action);\n        let router = newState.present.router\n          ? newState.present.router\n          : newState.present.routing;\n        return { ...newState, router: router };\n      };\n    }\n  }\n};\n```\n\n以上我们就实现了全局配置 redux-undo，在撤销重做按钮中我们就可以触发对应的方法来实现撤销重做的功能，其次我们还使用了 redux-logger 来实现 redux 的日志输出。\n"
  },
  {
    "path": "doc/zh/guide/functionRealization/saveJson.md",
    "content": "<!--\n * @Date: 2021-01-17 14:26:00\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 21:32:58\n * @FilePath: /github-h5-Dooring/doc/zh/guide/functionRealization/saveJson.md\n-->\n\n# 保存 json\n\n我们配置好 H5 页面之后，如果希望其他人观看，我们可以保存页面并发送链接。但是如果有多人协作的需求，比如一个 H5 页面可能由多个人完成，这个时候该怎么实现呢？基于已有的方案，我们可以采用 socket 实现多人协同编辑，但是成本比较大，所有这里我们提供了保存 json 的功能。\n\n我们可以将配置好的页面导出为 json，发送给另一个人，这样另一个人通过导入该 json 文件可以实时看到当前的页面，这里还是依靠我们的页面渲染引擎 viewEngine。实现思路也很简单，可以在 github[[https://github.com/MrXujiang/h5-Dooring](https://github.com/MrXujiang/h5-Dooring)]上参考体验。\n"
  },
  {
    "path": "doc/zh/guide/functionRealization/screenshot.md",
    "content": "<!--\n * @Date: 2021-01-17 14:27:49\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 21:49:46\n * @FilePath: /github-h5-Dooring/doc/zh/guide/functionRealization/screenshot.md\n-->\n\n# 截图功能\n\n截图功能这里我们主要使用了 dom-to-image 这个库，来将 html 转化为图片，并进行分享。\n\n<img src=\"../../../img/functionRealization/screenshot.png\" alt=\"foo\">\n"
  },
  {
    "path": "doc/zh/guide/functionRealization/templateLibrary.md",
    "content": "<!--\n * @Date: 2021-01-17 14:25:29\n * @LastEditors: chentianshang\n * @LastEditTime: 2021-01-17 21:48:34\n * @FilePath: /github-h5-Dooring/doc/zh/guide/functionRealization/templateLibrary.md\n-->\n\n## 模板库实现思路\n\n我们目前开放了模板库功能，一方面我们会定期配置行业模板，另一个方面 Dooring 还支持用户自己配置模板，可以一键保存到云端供用户使用。我们也可以将模板变成自己的页面共享给其他人。实现方式本质上是保存用户的配置信息，上传到服务器中做存储，在后台提供了管理模板的模块，可以修改，删除模板。如下图所示：\n\n### 模板前台展示：\n\n<img src=\"../../../img/functionRealization/template-ft.png\" alt=\"foo\">\n\n### 模板后台展示：\n\n<img src=\"../../../img/functionRealization/template-bg.png\" alt=\"foo\">\n"
  },
  {
    "path": "doc/zh/guide/introduced.md",
    "content": "<img src=\"../../img/common/framework.png\" alt=\"foo\">\n\n注：灰色部分还未实现，正在更新中...\n"
  },
  {
    "path": "doc/zh/guide/startedQuickly.md",
    "content": "# 快速上手\n\n## 从零搭建一个 H5 表单页面\n\n<iframe src=\"//player.bilibili.com/player.html?aid=715343955&bvid=BV1QQ4y1Z725&cid=332145157&page=1\" scrolling=\"no\" border=\"0\" frameborder=\"no\" framespacing=\"0\" allowfullscreen=\"true\" style=\"width: 100%;height: 420px; margin-top: 20px\"> </iframe>\n\n## 环境准备\n\n首先得有 node，并确保 node 版本是 `10.13` 或以上，（mac/win 下推荐使用 n 来管理 node 版本）\n\n```\n$ node-v\nv10.13.0\n```\n\n注：推荐使用 yarn 管理 npm 依赖\n\n## 源码工程\n\n| h5_plus(编辑器项目) | admin(管理后台) | Server(服务端项目) |\n| ------------------- | --------------- | ------------------ |\n\n\n本地拿到源码工程之后先安装对应依赖，在对应工程目录里执行 yarn 命令，等待依赖安装完成。\n\n## 本地运行\n\n1.首先本地启动 server，在 src 目录的 index.js 中修改跨域白名单，改为本地的 ip+端口，如http://192.167.0.3:8000\n\n2.其次本地启动 h5_plus,启动完毕在浏览器打开对应的启动地址即可查看，如下：\n\n<img src=\"../../img/common/home.png\" alt=\"foo\">\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"h5-dooring\",\n  \"version\": \"1.3.0\",\n  \"description\": \"H5-Dooring是一款功能强大，开源免费的H5可视化页面配置解决方案，致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。技术栈以react为主， 后台采用nodejs开发。\",\n  \"private\": false,\n  \"author\": {\n    \"name\": \"徐小夕\",\n    \"email\": \"xujiang156@qq.com\",\n    \"url\": \"http://h5.dooring.cn/h5_visible\"\n  },\n  \"keywords\": [\n    \"h5 editor\",\n    \"h5\",\n    \"react\",\n    \"antd\",\n    \"react-dnd\",\n    \"web visible\"\n  ],\n  \"contributors\": [\n    \"徐小夕 <xujiang156@qq.com> (https://github.com/MrXujiang))\",\n    \"mokinzhao <37622852@qq.com> (https://github.com/mokinzhao))\",\n    \"yehuozhili <yehuozhili@outlook.com> (https://github.com/yehuozhili))\"\n  ],\n  \"scripts\": {\n    \"start\": \"export NODE_OPTIONS=--openssl-legacy-provider && umi dev -- editor\",\n    \"start:win\": \"set NODE_OPTIONS=--openssl-legacy-provider && umi dev -- editor\",\n    \"build\": \"export NODE_OPTIONS=--openssl-legacy-provider && umi build\",\n    \"build:win\": \"set NODE_OPTIONS=--openssl-legacy-provider && umi build\",\n    \"server\": \"node server.js\",\n    \"dev\": \"http-server dist\",\n    \"docs:dev\": \"vuepress dev doc\",\n    \"docs:build\": \"vuepress build doc\",\n    \"test-demo\": \"http-server dist\",\n    \"postinstall\": \"umi generate tmp\",\n    \"prettier\": \"prettier --write '**/*.{js,jsx,tsx,ts,less,md,json}'\",\n    \"test\": \"umi-test\",\n    \"test:coverage\": \"umi-test --coverage\",\n    \"nocompress\": \"cross-env RM_TMPDIR=none COMPRESS=none umi build\"\n  },\n  \"gitHooks\": {\n    \"pre-commit\": \"lint-staged\"\n  },\n  \"lint-staged\": {\n    \"*.{js,jsx,less,md,json}\": [\n      \"prettier --write\"\n    ],\n    \"*.ts?(x)\": [\n      \"prettier --parser=typescript --write\"\n    ]\n  },\n  \"homepage\": \"http://h5.dooring.cn\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/MrXujiang/h5-Dooring.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/MrXujiang/h5-Dooring/issues\"\n  },\n  \"dependencies\": {\n    \"@ant-design/icons\": \"^4.2.1\",\n    \"@antv/f2\": \"^3.7.7\",\n    \"@visactor/vchart\": \"^1.12.1\",\n    \"@uiw/react-baidu-map\": \"^1.17.3\",\n    \"@umijs/plugin-esbuild\": \"^1.0.1\",\n    \"@umijs/plugin-sass\": \"^1.1.1\",\n    \"@umijs/preset-react\": \"1.x\",\n    \"@umijs/test\": \"^3.2.19\",\n    \"antd\": \"^4.7.0\",\n    \"antd-img-crop\": \"^3.10.0\",\n    \"axios\": \"^0.19.2\",\n    \"braft-editor\": \"^2.3.9\",\n    \"chatbot-antd\": \"^0.6.0\",\n    \"codemirror\": \"^5.57.0\",\n    \"dom-to-image\": \"^2.6.0\",\n    \"file-saver\": \"^2.0.2\",\n    \"http-server\": \"^0.12.3\",\n    \"keymaster\": \"^1.6.2\",\n    \"qrcode.react\": \"^1.0.0\",\n    \"react\": \"^16.12.0\",\n    \"react-audio-player\": \"^0.14.0\",\n    \"react-codemirror2\": \"^7.2.1\",\n    \"react-color\": \"^2.18.1\",\n    \"react-contexify\": \"^4.1.1\",\n    \"react-dnd\": \"^11.1.3\",\n    \"react-dnd-html5-backend\": \"^11.1.3\",\n    \"react-dom\": \"^16.12.0\",\n    \"react-draggable\": \"^4.4.3\",\n    \"react-draggable-ball\": \"^0.1.0\",\n    \"react-grid-layout\": \"^1.0.0\",\n    \"react-hotkeys-hook\": \"^2.3.1\",\n    \"react-text-loop\": \"^2.3.0\",\n    \"redux-undo\": \"^1.0.1\",\n    \"socket.io-client\": \"^2.3.0\",\n    \"umi\": \"^3.2.19\",\n    \"video-react\": \"^0.14.1\",\n    \"xlsx\": \"^0.16.7\",\n    \"yh-react-popover\": \"^0.3.0\",\n    \"yorkie\": \"^2.0.0\",\n    \"zarm\": \"^2.5.1\"\n  },\n  \"license\": \"GPL-3.0\",\n  \"devDependencies\": {\n    \"@types/classnames\": \"^2.2.10\",\n    \"@types/codemirror\": \"^0.0.98\",\n    \"@types/events\": \"^3.0.0\",\n    \"@types/file-saver\": \"^2.0.1\",\n    \"@types/node\": \"^14.6.2\",\n    \"@types/qrcode.react\": \"^1.0.1\",\n    \"@types/react-color\": \"^3.0.4\",\n    \"@types/react-grid-layout\": \"^1.1.0\",\n    \"@types/redux-logger\": \"^3.0.8\",\n    \"@types/xlsx\": \"^0.0.36\",\n    \"@typescript-eslint/eslint-plugin\": \"4.1.1\",\n    \"@typescript-eslint/parser\": \"4.1.1\",\n    \"babel-eslint\": \"10.x\",\n    \"babel-plugin-import\": \"^1.13.0\",\n    \"cross-env\": \"^7.0.2\",\n    \"eslint\": \"6.x\",\n    \"eslint-config-react-app\": \"^5.2.1\",\n    \"eslint-plugin-flowtype\": \"4.x\",\n    \"eslint-plugin-import\": \"2.x\",\n    \"eslint-plugin-jsx-a11y\": \"6.x\",\n    \"eslint-plugin-react\": \"7.x\",\n    \"eslint-plugin-react-hooks\": \"2.x\",\n    \"koa\": \"^2.13.0\",\n    \"koa-body\": \"^4.2.0\",\n    \"koa-logger\": \"^3.2.1\",\n    \"koa-static\": \"^5.0.0\",\n    \"koa2-cors\": \"^2.0.6\",\n    \"lint-staged\": \"^10.0.7\",\n    \"prettier\": \"^1.19.1\",\n    \"redux-logger\": \"^3.0.6\",\n    \"sass-loader\": \"^9.0.3\",\n    \"typescript\": \"^4.0.2\",\n    \"vuepress\": \"^1.8.0\"\n  }\n}\n"
  },
  {
    "path": "readme.md",
    "content": "> > Make H5 as easy as building blocks!\n\n<p align=\"center\">\n    <img src=\"http://cdn.dooring.cn/dr/logo.ff7fc6bb.png\" width=\"260\" alt=\"H5编辑器,H5制作神器,H5 editor,lowcode\">\n</p>\n<h1 align=\"center\">Welcome to H5-Dooring 👋</h1>\n<p>\n  <img alt=\"Version\" src=\"https://img.shields.io/badge/version-1.2-blue.svg?cacheSeconds=2592000\" />\n  <a href=\"https://juejin.im/post/6864410873709592584/\" target=\"_blank\">\n    <img alt=\"Documentation\" src=\"https://img.shields.io/badge/documentation-yes-brightgreen.svg\" />\n  </a>\n  <a href=\"#\" target=\"_blank\">\n    <img alt=\"license:GPL3.0\" src=\"https://img.shields.io/badge/license-GPL3.0-yellow.svg\" />\n  </a>\n</p>\n\n> H5-Dooring is a powerful, open source, free H5 visual page configuration solution dedicated to providing a simple, convenient, professional and reliable, unlimited set of H5 landing page best practices. The technology stack is mainly react, developed in the background using nodejs.\n\n<img src=\"http://cdn.dooring.cn/dr/123.png\" alt=\"H5-Dooring编辑器预览图\" width=\"100%\" />\n\n| home🏠                          | demo✨                               | doc📦                                | tutorial                                                       | wiki                                                 |\n| ------------------------------- | ------------------------------------ | ------------------------------------ | -------------------------------------------------------------- | ---------------------------------------------------- |\n| [website](https://dooring.vip) | [Demo](https://dooring.vip) | [Document](https://dooring.vip/doc) | [视频&Video](https://www.zhihu.com/zvideo/1406394315950653440) | [wiki](https://github.com/MrXujiang/h5-Dooring/wiki) |\n\n> ✨ note: If the official visit is too slow, visit the [H5-Dooring for Singapore](https://dooring.vip)\n\n🎉福利🎉: 最近基于nextjs实现的多维表格正式上线, 前100名用户仅需399元, 感兴趣可以参考体验一下.\n\n- 多维表格编辑器: http://pxcharts.com\n\nEnglish | [简体中文](./zh.md)\n\nnew doc: [private deployment process](http://h5.dooring.cn/docz/source-list/H5-Dooring/deploy_en)\n\nwebsite: [H5-Dooring](https://dooring.net)\n\ntech blog: [sharing of technology](https://dev.to/alex_xu/we-made-a-page-visualization-to-build-an-open-source-project-1l1p)\n\nRelated products:\n\n- [V6.Dooring | Large screen visual editor](https://github.com/MrXujiang/v6.dooring.public)\n- [dooring-electron-lowcode | Dooring desktop software](https://github.com/MrXujiang/dooring-electron-lowcode)\n- [flowmix/docx | 多模态文档引擎](http://flowmix.tunrtip.cn/docx)\n- [Dooring-Saas](https://dooring.vip)\n- [Dooring 智图](https://magic.dooring.vip)\n\n## Author\n\n👤 **alex_xu**\n\n- Website: http://h5.dooring.cn\n- Github: [@MrXujiang](https://github.com/MrXujiang)\n- new tech share: [Dooring2.7+最新技术分享&复盘](https://github.com/MrXujiang/h5-Dooring/issues/145)\n\n  ## Star History\n\n[![Star History Chart](https://api.star-history.com/svg?repos=MrXujiang/h5-Dooring&type=Date)](https://star-history.com/#MrXujiang/h5-Dooring&Date)\n\n## 🤝 Contributing and support\n\nContributions, issues and feature requests are welcome!<br />Feel free to check [issues page](https://github.com/MrXujiang/h5-Dooring/issues).\n\nGive a ⭐️ if this project helped you!\n\n## Privatization Deployment documentation\n\n- address: http://h5.dooring.cn/docz\n- ⭐️ lowcode component list: http://h5.dooring.cn/docz/components/intro\n- List of answers: http://h5.dooring.cn/docz/source-list/H5-Dooring/guide\n- gitee mini code: https://gitee.com/lowcode-china/h5_-dooring\n\n### Features\n\n1. editor\n   - [x] Guides\n   - [x] The underlying component\n   - [x] Visual components\n   - [x] Media components\n   - [x] Product components\n   - [x] Dragper\n   - [x] Configure the panel\n   - [x] Form designer\n   - [x] (Multi) Page management (copy, edit, delete, new)\n   - [x] Component animation\n   - [x] Component interaction\n   - [x] Data source management\n   - [x] Quick preview\n   - [x] Real machine preview\n   - [x] Undo and redo\n   - [x] WeChat shares\n   - [x] shortcut key\n   - [x] The template library\n   - [x] Desktop software, Dooring-electron, supports offline use\n\n2) Enhanced features\n\n   - [x] Upload json, convert to H5 with one click\n   - [x] Photo gallery\n   - [x] Code capability (download source, download dis package)\n\n3) backend API\n   - [x] Create, save, and update your work\n   - [x] User management, rights management\n   - [x] One-click intelligent analysis\n   - [x] Data look\n   - [x] Form data collection\n   - [x] Form data presentation\n   - [x] Form data analysis, one-click export excel, form multi-condition search\n   - [x] Preview online\n   - [x] QR code preview\n   - [x] Template management\n   - [x] Code interface\n\n## Update the log\n\n1. Whether the video component adds a full-screen configuration item when playing\n2. Fixes a click failure of the icon component\n3. The editor supports multi-size switching and canvas size customization\n4. Fix multilingual issues with background management analytics forms\n5. The component library supports user-defined selection\n\n## Technology Sharing\n\n- [(10 月最新) 前端图形学实战: 从零开发几何画板(vue3 + vite 版](https://github.com/MrXujiang/h5-Dooring/issues/149)\n- [几何学在前端边界计算中的应用和原理分析(一)](https://github.com/MrXujiang/h5-Dooring/issues/148)\n\n### The back-end section\n\nThe back-end part because of the knowledge points involved is more, is not the focus of this article, so here is a few points, you can use completely different technology to achieve back-office services, such as PHP, Java, Python or Egg. The author here is using the \"koa\" .\n\nSpecific code can refer to the full stack development article:\n\n- [基于 Koa + React + TS 从零开发全栈文档编辑器](https://mp.weixin.qq.com/s?__biz=MzU2Mzk1NzkwOA==&mid=2247486910&idx=2&sn=7ce865dd8a8f6769439f0e8eebb72212&chksm=fc531445cb249d534a7d8a362ad40d26bc90f2d2e867385768ee19575e32826fcbe419fcbe0b&token=297396546&lang=zh_CN#rd)\n\n- [Dooring 后台接口文档](http://h5.dooring.cn/doc/zh/guide/deployDev/api.html)\n- [私有化部署](http://h5.dooring.cn/h5_plus/price)\n\n## Install\n\n1. Download the code\n\n```sh\ngit clone https://github.com/MrXujiang/h5-Dooring.git\n```\n\n2. Go to the project catalog\n\n```sh\ncd ./h5-Dooring\n```\n\n3. Install the dependency package\n\n```sh\nyarn pkg\n```\n\n## Usage\n\nLaunch the app locally\n\n```sh\nyarn start\nor\ncnpm run start\n```\n\nlocal visit:\n\n```\nhttp://localhost:port/h5_plus\n```\n\n注意: 如果 window 系统下无法启动, 请移步 [dooring-electron](https://github.com/H5-Dooring/dooring-electron-lowcode)\n\n## How to run the downloaded code ?\n\n1.  The compression package can be unzipped directly to the server root, and access to the root address is sufficient\n2.  'vscode' installs the Live Server plug-in, unzips the downloaded compression package into a folder, opens with 'vscode', clicks on Live Server, and notes that to remove the 'index .html' of the startup path, change it to '/'\n\nIf you find that the local boot component drag and drop encountered strange errors, is the third-party component in the development environment bug, you can take a step to solve:\n\n> If you find that the local start-up component drag encountered strange errors, is a bug that should be a third-party component in the development environment, can be resolved in a way:\n\n```sh\nyarn dev\nor\ncnpm run dev\n```\n\nThe premise is to install the http-server module first.\n\n## Browsers support\n\nModern browsers does not support IE browser\n\n| [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"IE / Edge\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>IEdge | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>Safari |\n| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| Edge                                                                                                                                                                                                         | last 2 versions                                                                                                                                                                                                    | last 2 versions                                                                                                                                                                                                | last 2 versions                                                                                                                                                                                                |\n\n## Contact us\n\n<img src=\"http://next-admin.com/tech.png\" alt=\"line\" width=120 />\n\nTwitter Account：@H5Dooring\n\n## Partner project\n\n- [ react-cropper-pro - 轻量强大的图片上传/裁切/压缩组件](https://github.com/MrXujiang/react-cropper-pro)\n- [mitu-editor - 轻量级且强大的图片编辑器](https://github.com/H5-Dooring/mitu-editor)\n- [powerNice - 一款轻量级文档管理编辑器](http://h5.dooring.cn/powernice/views)\n- [rc-drag - 基于 react 的轻量级拖拽缩放组件](https://github.com/MrXujiang/rc-drag)\n- [ t-nav - 开箱即用的开源导航项目](https://github.com/MrXujiang/t-nav)\n- [Luckysheet - 强大的在线 excel 编辑器](https://github.com/mengshukeji/Luckysheet)\n- [Blink - 一款自定义的生成故障艺术动画的组件库](https://github.com/MrXujiang/blink)\n- [frontend-developer-roadmap | 一个能提高开发者工作效率的前端 js 库汇总](https://github.com/MrXujiang/frontend-developer-roadmap)\n\n* [react-form-simple - 基于 react 开发的高性能表单库](https://github.com/easy-form/react-form-simple)\n* [lucky-canvas 抽奖插件 | 一个支持 H5, 微信小程序, React 的抽奖插件](https://github.com/LuckDraw/lucky-canvas)\n* [vue-admin-box | 免费并且开源的中后台管理系统模板](https://github.com/cmdparkour/vue-admin-box)\n* [基于 antd 开箱即用的后台管理模版 ant-simple-pro](https://github.com/lgf196/ant-simple-pro)\n* [使用 gin+vue 进行极速开发的全栈开发基础平台](https://github.com/flipped-aurora/gin-vue-admin)\n* [DevUI 中后台产品开源前端解决方案](https://github.com/DevCloudFE/ng-devui)\n\n## Sponsored\n\nOpen source is not easy, with your sponsorship, we will do better\n\n<img src=\"http://cdn.dooring.cn/dr/WechatIMG2.jpeg\" width=\"180px\" />\n\n## Technical feedback and communication\n\nwechat：beautifulFront\n\n<img src=\"http://cdn.dooring.cn/dr/qtqd_code.png\" width=\"180px\" />\n"
  },
  {
    "path": "server.js",
    "content": "const Koa = require(\"koa\");\nconst { resolve } = require(\"path\");\nconst staticServer = require(\"koa-static\");\nconst koaBody = require(\"koa-body\");\nconst cors = require(\"koa2-cors\");\nconst logger = require(\"koa-logger\");\n\nconst app = new Koa();\n\napp.use(staticServer(resolve(__dirname, \"./static\")));\napp.use(koaBody());\napp.use(logger());\n\n// 设置跨域\napp.use(\n  cors({\n    origin: function(ctx) {\n      if (ctx.url.indexOf(\"/dooring\") > -1) {\n        return \"*\"; // 允许来自所有域名请求\n      }\n      return \"\";\n    },\n    exposeHeaders: [\"WWW-Authenticate\", \"Server-Authorization\", \"x-test-code\"],\n    maxAge: 5, //  该字段可选，用来指定本次预检请求的有效期，单位为秒\n    credentials: true,\n    allowMethods: [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"OPTIONS\"],\n    allowHeaders: [\n      \"Content-Type\",\n      \"Authorization\",\n      \"Accept\",\n      \"x-requested-with\",\n      \"Content-Encoding\"\n    ]\n  })\n);\n\nlet htmlStr = \"\";\n\napp.use(async (ctx, next) => {\n  console.log(ctx.url);\n  if (ctx.url === \"/dooring/render\") {\n    htmlStr = ctx.request.body;\n    ctx.body = \"success\";\n  } else if (ctx.url.indexOf(\"/html\") === 0) {\n    ctx.type = \"html\";\n    ctx.body = htmlStr;\n  }\n});\n\napp.listen(3000);\n"
  },
  {
    "path": "src/app.tsx",
    "content": "import { createLogger } from \"redux-logger\";\nimport { message } from \"antd\";\nimport undoable, { StateWithHistory } from \"redux-undo\";\nimport { Reducer, AnyAction } from \"redux\";\n\nexport const dva = {\n  config: {\n    [process.env.NODE_ENV === \"development\" ? \"onAction\" : \"\"]: createLogger(),\n    onError(e: Error) {\n      message.error(e.message, 3);\n    },\n    onReducer: (reducer: Reducer<any, AnyAction>) => {\n      let undoReducer = undoable(reducer);\n      return function(state: StateWithHistory<any>, action: AnyAction) {\n        let newState = undoReducer(state, action);\n        let router = newState.present.router\n          ? newState.present.router\n          : newState.present.routing;\n        return { ...newState, router: router };\n      };\n    }\n  }\n};\n"
  },
  {
    "path": "src/components/Calibration/index.less",
    "content": ".calibration {\n  width: calc(200% - 50px);\n  height: 200%;\n  position: relative;\n  white-space: nowrap;\n  pointer-events: none;\n  user-select: none;\n  :global(.calibrationNumber) {\n    font-size: 12px;\n    color: #888;\n  }\n}\n"
  },
  {
    "path": "src/components/Calibration/index.tsx",
    "content": "import React, { useState, useEffect, useRef, useCallback } from \"react\";\n\nimport styles from \"./index.less\";\n\nexport interface calibrationTypes {\n  width: number;\n  height: number;\n}\nexport type CalibrationTypes = {\n  direction: \"up\" | \"left\" | \"right\";\n  multiple: number;\n  id: string;\n};\n\nexport default function Calibration(props: CalibrationTypes) {\n  const { direction, multiple } = props;\n  const [calibrationLength, setCalibration] = useState<calibrationTypes>({\n    width: 0,\n    height: 0\n  });\n  const calibrationRef = useRef<HTMLDivElement>(null);\n\n  const generateElement = useCallback(\n    (item?: boolean, num?: number) => {\n      if (calibrationRef.current) {\n        let createSpan = document.createElement(\"div\");\n        createSpan.className = \"calibrationLine\";\n        createSpan.style.backgroundColor = \"#ccc\";\n        calibrationRef.current.style.display = \"flex\";\n        calibrationRef.current.style.justifyContent = \"space-between\";\n        if (direction === \"up\") {\n          calibrationRef.current.style.marginLeft = \"50px\";\n          createSpan.style.width = \"1px\";\n          createSpan.style.height = \"6px\";\n          createSpan.style.display = \"inline-block\";\n        } else {\n          calibrationRef.current.style.flexDirection = \"column\";\n          createSpan.style.height = \"1px\";\n          createSpan.style.width = \"6px\";\n        }\n        if (item) {\n          let createSpanContent = document.createElement(\"span\");\n          if (direction === \"up\") {\n            createSpan.style.height = \"12px\";\n            createSpanContent.style.transform = \"translate3d(-4px, 20px, 0px)\";\n            createSpan.style.transform = \"translateY(0px)\";\n          } else {\n            createSpan.style.width = \"12px\";\n            createSpanContent.style.paddingLeft = \"20px\";\n          }\n          createSpanContent.style.display = \"block\";\n          createSpanContent.className = \"calibrationNumber\";\n          createSpanContent.innerHTML = num! * 5 + \"\";\n          createSpan.appendChild(createSpanContent);\n        }\n        calibrationRef.current.appendChild(createSpan);\n      }\n    },\n    [direction]\n  );\n\n  useEffect(() => {\n    if (calibrationRef.current) {\n      let calibration = calibrationRef.current.getBoundingClientRect();\n      setCalibration({ width: calibration.width, height: calibration.height });\n      let length = direction === \"up\" ? calibration.width : calibration.height;\n      for (let i = 0; i < length / 5; i++) {\n        if (i % 10 === 0) {\n          generateElement(true, i);\n        } else {\n          generateElement();\n        }\n      }\n    }\n  }, [direction, generateElement]);\n\n  useEffect(() => {\n    if (calibrationRef.current) {\n      let width = calibrationLength.width\n        ? calibrationLength.width\n        : calibrationRef.current.getBoundingClientRect().width;\n      let height = calibrationLength.height\n        ? calibrationLength.height\n        : calibrationRef.current.getBoundingClientRect().height;\n      let arr = [\n        ...Array.from(\n          calibrationRef.current.querySelectorAll(\".calibrationLine\")\n        )\n      ];\n      if (arr.length) {\n        if (direction === \"up\") {\n          calibrationRef.current.style.width =\n            parseFloat(multiple.toFixed(1)) * width + \"px\";\n          arr.forEach(el => {\n            let dom = [\n              ...Array.from(el.querySelectorAll(\".calibrationNumber\"))\n            ][0] as HTMLElement;\n            if (dom) {\n              dom.style.transform = `translate3d(-4px, 16px, 0px) scale(${(\n                multiple + 0.1\n              ).toFixed(1)})`;\n            }\n          });\n        } else {\n          calibrationRef.current.style.height =\n            parseFloat(multiple.toFixed(1)) * height + \"px\";\n          arr.forEach(el => {\n            let dom = [\n              ...Array.from(el.querySelectorAll(\".calibrationNumber\"))\n            ][0] as HTMLElement;\n            if (dom) {\n              dom.style.transform = `translate3d(-4px, -8px, 0px) scale(${(\n                multiple + 0.1\n              ).toFixed(1)})`;\n            }\n          });\n        }\n      }\n    }\n  }, [calibrationLength.height, calibrationLength.width, direction, multiple]);\n\n  return <div className={styles.calibration} ref={calibrationRef}></div>;\n}\n"
  },
  {
    "path": "src/components/ErrorBundaries/index.tsx",
    "content": "import React, { ErrorInfo, PropsWithChildren } from \"react\";\n\ninterface ErrorBoundaryState {\n  hasError: boolean;\n}\n\nclass ErrorBoundary extends React.Component<\n  PropsWithChildren<{}>,\n  ErrorBoundaryState\n> {\n  constructor(props: PropsWithChildren<{}>) {\n    super(props);\n    this.state = { hasError: false };\n  }\n\n  componentDidCatch(_error: Error, _info: ErrorInfo) {\n    // Display fallback UI\n    this.setState({ hasError: true });\n    // You can also log the error to an error reporting service\n    //logErrorToMyService(error, info);\n  }\n\n  render() {\n    if (this.state.hasError) {\n      // You can render any custom fallback UI\n      return <h1>Something went wrong.</h1>;\n    }\n    return this.props.children;\n  }\n}\n\nexport default ErrorBoundary;\n"
  },
  {
    "path": "src/components/FormComponents/CardPicker/index.less",
    "content": ".pickerWrap {\n  display: flex;\n  flex-wrap: wrap;\n  .picker {\n    display: inline-block;\n    padding: 10px;\n    border: 2px solid transparent;\n    cursor: pointer;\n    &:hover {\n      border-color: #4091f7;\n    }\n    &.selected {\n      border-color: #4091f7;\n    }\n  }\n}\n"
  },
  {
    "path": "src/components/FormComponents/CardPicker/index.tsx",
    "content": "import { useState, useEffect, memo } from \"react\";\nimport classnames from \"classnames\";\nimport Icon from \"@/materials/base/Icon\";\nimport styles from \"./index.less\";\nimport React from \"react\";\nimport { IconTypes } from \"@/materials/base/Icon/schema\";\nimport { ICardPickerConfigType } from \"../types\";\n\ninterface CardPickerType\n  extends Omit<ICardPickerConfigType<IconTypes>, \"type\" | \"key\" | \"name\"> {\n  onChange?: (v: string) => void;\n  type: IconTypes;\n}\n\nexport default memo((props: CardPickerType) => {\n  const { type, icons, onChange } = props;\n  const [selected, setSelected] = useState<IconTypes>(type);\n\n  const handlePicker = (v: IconTypes) => {\n    if (onChange) {\n      onChange(v);\n      return;\n    }\n    setSelected(v);\n  };\n\n  useEffect(() => {\n    setSelected(type);\n  }, [type]);\n\n  return (\n    <div className={styles.pickerWrap}>\n      {icons.map((item, i) => {\n        return (\n          <span\n            className={classnames(\n              styles.picker,\n              selected === item ? styles.selected : \"\"\n            )}\n            onClick={() => handlePicker(item)}\n            key={i}\n          >\n            <Icon type={item} size={20} color={\"#4091f7\"} spin={false} />\n          </span>\n        );\n      })}\n    </div>\n  );\n});\n"
  },
  {
    "path": "src/components/FormComponents/Color/index.tsx",
    "content": "import React from \"react\";\nimport { SketchPicker, ColorResult } from \"react-color\";\nimport { rgba2Obj } from \"@/utils/tool\";\n\nexport type ColorConfigType = string;\n\n//value 初始值传来，onchange item给的回调\ninterface ColorProps {\n  value?: ColorConfigType;\n  onChange?: (v: ColorConfigType) => void;\n}\n\nclass colorPicker extends React.Component<ColorProps> {\n  state = {\n    displayColorPicker: false,\n    color: rgba2Obj(this.props.value)\n  };\n\n  handleClick = () => {\n    this.setState({ displayColorPicker: !this.state.displayColorPicker });\n  };\n\n  handleClose = () => {\n    this.setState({ displayColorPicker: false });\n  };\n\n  handleChange = (color: ColorResult) => {\n    this.setState({ color: color.rgb });\n    this.props.onChange &&\n      this.props.onChange(\n        `rgba(${color.rgb.r},${color.rgb.g},${color.rgb.b},${color.rgb.a})`\n      );\n  };\n\n  render() {\n    return (\n      <div>\n        <div\n          style={{\n            // padding: '5px',\n            background: \"#fff\",\n            borderRadius: \"1px\",\n            boxShadow: \"0 0 0 1px rgba(0,0,0,.1)\",\n            display: \"inline-block\",\n            cursor: \"pointer\"\n          }}\n          onClick={this.handleClick}\n        >\n          <div\n            style={{\n              width: \"20px\",\n              height: \"20px\",\n              borderRadius: \"2px\",\n              background: `rgba(${this.state.color.r}, ${this.state.color.g}, ${this.state.color.b}, ${this.state.color.a})`\n            }}\n          />\n        </div>\n        {this.state.displayColorPicker ? (\n          <React.Fragment>\n            <div\n              style={{\n                position: \"absolute\",\n                zIndex: 2000\n              }}\n            >\n              <SketchPicker\n                color={this.state.color}\n                onChange={this.handleChange}\n              />\n            </div>\n            <div\n              style={{\n                position: \"fixed\",\n                top: \"0px\",\n                right: \"0px\",\n                bottom: \"0px\",\n                left: \"0px\",\n                zIndex: 1000\n              }}\n              onClick={this.handleClose}\n            />\n          </React.Fragment>\n        ) : null}\n      </div>\n    );\n  }\n}\n\nexport default colorPicker;\n"
  },
  {
    "path": "src/components/FormComponents/DataList/editorModal.tsx",
    "content": "import React, { memo, useEffect, FC } from \"react\";\nimport { Form, Select, Input, Modal, Button } from \"antd\";\nimport Upload from \"../Upload\";\nimport { Store } from \"antd/lib/form/interface\";\nimport { TDataListDefaultTypeItem } from \"../FormEditor/types\";\n// import styles from './index.less';\nconst normFile = (e: any) => {\n  if (Array.isArray(e)) {\n    return e;\n  }\n  return e && e.fileList;\n};\n\nconst { Option } = Select;\n\nconst formItemLayout = {\n  labelCol: { span: 6 },\n  wrapperCol: { span: 14 }\n};\n\nexport type EditorModalProps = {\n  visible: boolean;\n  onCancel:\n    | ((e: React.MouseEvent<HTMLElement, MouseEvent>) => void)\n    | undefined;\n  item?: TDataListDefaultTypeItem;\n  onSave: Function;\n  cropRate: number;\n};\n\nconst EditorModal: FC<EditorModalProps> = props => {\n  const { item, onSave, visible, onCancel, cropRate } = props;\n  const onFinish = (values: Store) => {\n    console.log(values);\n    onSave && onSave(values);\n  };\n  const handleOk = () => {\n    form\n      .validateFields()\n      .then(values => {\n        if (item) {\n          values.id = item.id;\n          onSave && onSave(values);\n        }\n      })\n      .catch(err => {\n        console.log(err);\n      });\n  };\n\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    if (form && item && visible) {\n      form.resetFields();\n    }\n  }, [form, item, visible]);\n  return (\n    <>\n      {!!item && (\n        <Modal\n          title=\"编辑数据源\"\n          closable={false}\n          visible={visible}\n          onOk={handleOk}\n          okText=\"确定\"\n          forceRender\n          footer={\n            <Button type={\"primary\"} onClick={() => handleOk()}>\n              确定\n            </Button>\n          }\n        >\n          <Form\n            form={form}\n            name={`form_editor_modal`}\n            {...formItemLayout}\n            onFinish={onFinish}\n            initialValues={item}\n          >\n            <Form.Item\n              label=\"标题\"\n              name=\"title\"\n              rules={[{ required: true, message: \"请输入标题!\" }]}\n            >\n              <Input />\n            </Form.Item>\n            <Form.Item label=\"描述\" name=\"desc\">\n              <Input />\n            </Form.Item>\n            <Form.Item label=\"链接地址\" name=\"link\">\n              <Input />\n            </Form.Item>\n            {!!window[\"currentCates\"] && (\n              <Form.Item\n                label=\"分类\"\n                name=\"type\"\n                rules={[{ required: true, message: \"请选择分类!\" }]}\n              >\n                <Select placeholder=\"请选择\">\n                  {window[\"currentCates\"].map((v, i) => {\n                    return (\n                      <Option value={i} key={i}>\n                        {v}\n                      </Option>\n                    );\n                  })}\n                </Select>\n              </Form.Item>\n            )}\n\n            <Form.Item\n              label=\"上传图片\"\n              name=\"imgUrl\"\n              valuePropName=\"fileList\"\n              getValueFromEvent={normFile}\n            >\n              <Upload cropRate={cropRate} isCrop />\n            </Form.Item>\n          </Form>\n        </Modal>\n      )}\n    </>\n  );\n};\n\nexport default memo(EditorModal);\n"
  },
  {
    "path": "src/components/FormComponents/DataList/index.less",
    "content": ".dataList {\n  padding: 6px 10px;\n  border: 1px solid #f0f0f0;\n  text-align: justify;\n  padding-left: 10px;\n  padding-top: 10px;\n}\n.listItem {\n  position: relative;\n  padding-bottom: 6px;\n  margin-bottom: 6px;\n  border-bottom: 1px solid #f0f0f0;\n  &:hover {\n    .actionBar {\n      display: block;\n    }\n  }\n  &:last-child {\n    border-bottom: none;\n    margin-bottom: 0;\n  }\n  .tit {\n    font-weight: bold;\n    padding-bottom: 5px;\n  }\n  .desc {\n    font-size: 12px;\n    color: #ccc;\n  }\n  .actionBar {\n    position: absolute;\n    right: 0;\n    top: 50%;\n    transform: translateY(-50%);\n    display: none;\n    background: #fff;\n    box-shadow: -20px 0 10px 10px #fff;\n    .action {\n      margin-right: 18px;\n      cursor: pointer;\n      &:last-child {\n        cursor: move;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/components/FormComponents/DataList/index.tsx",
    "content": "import React, { memo, useState, useEffect, useCallback } from \"react\";\nimport {\n  EditOutlined,\n  MinusCircleOutlined,\n  MenuOutlined\n} from \"@ant-design/icons\";\nimport { Button } from \"antd\";\nimport {\n  DragSource,\n  DropTarget,\n  DndProvider,\n  ConnectDropTarget,\n  DragSourceSpec,\n  DropTargetConnector,\n  DragSourceMonitor,\n  DragSourceConnector,\n  DropTargetSpec,\n  ConnectDragSource,\n  ConnectDragPreview\n} from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport EditorModal from \"./editorModal\";\nimport { uuid } from \"@/utils/tool\";\nimport styles from \"./index.less\";\nimport { TDataListDefaultType, TDataListDefaultTypeItem } from \"../types\";\n\ntype ListItemProps = DndItemProps & {\n  isDragging: boolean;\n  connectDragSource: ConnectDragSource;\n  connectDragPreview: ConnectDragPreview;\n  connectDropTarget: ConnectDropTarget;\n};\n\nfunction ListItem(props: ListItemProps) {\n  const {\n    title,\n    desc,\n    onDel,\n    onEdit,\n    // 这些 props 由 React DnD注入，参考`collect`函数定义\n    isDragging,\n    connectDragSource,\n    connectDragPreview,\n    connectDropTarget\n  } = props;\n  const opacity = isDragging ? 0.5 : 1;\n  return connectDropTarget(\n    // 列表项本身作为 Drop 对象\n    connectDragPreview(\n      // 整个列表项作为跟随拖动的影像\n      <div className={styles.listItem} style={Object.assign({}, { opacity })}>\n        <div className={styles.tit}>{title}</div>\n        <div className={styles.desc}>{desc}</div>\n        <div className={styles.actionBar}>\n          <span className={styles.action} onClick={() => onEdit()}>\n            <EditOutlined />\n          </span>\n          <span className={styles.action} onClick={() => onDel()}>\n            <MinusCircleOutlined />\n          </span>\n          {connectDragSource(\n            <span className={styles.action}>\n              <MenuOutlined />\n            </span>\n          ) // 拖动图标作为 Drag 对象\n          }\n        </div>\n      </div>\n    )\n  );\n}\n\ntype DndItemProps = TDataListDefaultTypeItem & {\n  onDel: Function;\n  onEdit: Function;\n  key: number;\n  find: Function;\n  move: Function;\n  type?: number;\n};\n\nconst type = \"item\";\ntype DragObject = {\n  id: string;\n  originalIndex: number;\n};\nconst dragSpec: DragSourceSpec<DndItemProps, DragObject> = {\n  // 拖动开始时，返回描述 source 数据。后续通过 monitor.getItem() 获得\n  beginDrag: props => ({\n    id: props.id,\n    originalIndex: props.find(props.id).index\n  }),\n  // 拖动停止时，处理 source 数据\n  endDrag(props, monitor) {\n    const { id: droppedId, originalIndex } = monitor.getItem();\n    const didDrop = monitor.didDrop();\n    // source 是否已经放置在 target\n    if (!didDrop) {\n      return props.move(droppedId, originalIndex);\n    }\n  }\n};\n\nconst dragCollect = (\n  connect: DragSourceConnector,\n  monitor: DragSourceMonitor\n) => ({\n  connectDragSource: connect.dragSource(), // 用于包装需要拖动的组件\n  connectDragPreview: connect.dragPreview(), // 用于包装需要拖动跟随预览的组件\n  isDragging: monitor.isDragging() // 用于判断是否处于拖动状态\n});\n\nconst dropSpec: DropTargetSpec<DndItemProps> = {\n  canDrop: () => false, // item 不处理 drop\n  hover(props, monitor) {\n    const { id: draggedId } = monitor.getItem();\n    const { id: overId } = props;\n    // 如果 source item 与 target item 不同，则交换位置并重新排序\n    if (draggedId !== overId) {\n      const { index: overIndex } = props.find(overId);\n      props.move(draggedId, overIndex);\n    }\n  }\n};\n\nconst dropCollect = (connect: DropTargetConnector) => ({\n  connectDropTarget: connect.dropTarget() // 用于包装需接收拖拽的组件\n});\n\nconst DndItem = DropTarget(\n  type,\n  dropSpec,\n  dropCollect\n)(DragSource(type, dragSpec, dragCollect)(ListItem));\n\nexport type DataListMemo = {\n  onChange?: (v: TDataListDefaultType) => void;\n  value?: TDataListDefaultType;\n  cropRate: number;\n};\n\nexport type DataListType = DataListMemo & {\n  connectDropTarget: ConnectDropTarget;\n};\n\nconst List = function(props: DataListType) {\n  const { onChange, value, connectDropTarget, cropRate } = props;\n  const [list, setList] = useState(value);\n  const [visible, setVisible] = useState(false);\n  const [curItem, setCurItem] = useState<TDataListDefaultTypeItem>();\n\n  const handleDel = (id: string) => {\n    if (value && onChange) {\n      let newVal = value.filter(item => id !== item.id);\n      onChange(newVal);\n    }\n  };\n\n  const find = (id: string) => {\n    const item = list!.find(c => `${c.id}` === id)!;\n    return {\n      item,\n      index: list!.indexOf(item!)\n    };\n  };\n\n  const move = (id: string, toIndex: number) => {\n    const { item, index } = find(id);\n    const oldList = [...list!];\n    oldList.splice(index, 1);\n    oldList.splice(toIndex, 0, item);\n    if (onChange) {\n      onChange(oldList);\n      return;\n    }\n    setList(oldList);\n  };\n\n  const handleCancel = useCallback(() => {\n    console.log(\"a\");\n    setVisible(false);\n  }, []);\n\n  const handleEdit = useCallback((item: TDataListDefaultTypeItem) => {\n    console.log(\"b\");\n    setVisible(true);\n    setCurItem(item);\n  }, []);\n\n  const handleSave = useCallback(\n    (item: TDataListDefaultTypeItem) => {\n      console.log(\"c\");\n      setVisible(false);\n      if (onChange) {\n        onChange(list!.map(p => (p.id === item.id ? item : p)));\n        return;\n      }\n      setList(prev => prev!.map(p => (p.id === item.id ? item : p)));\n    },\n    [list, onChange]\n  );\n\n  const handleAdd = () => {\n    const item = {\n      title: \"新增项标题\",\n      desc: \"新增项描述\",\n      id: uuid(8, 10),\n      imgUrl: [],\n      link: \"\"\n    };\n    if (onChange) {\n      onChange([...list!, item]);\n      return;\n    }\n    setList([...list!, item]);\n  };\n\n  useEffect(() => {\n    setList(value);\n  }, [value]);\n\n  return connectDropTarget(\n    <div className={styles.dataList}>\n      {!!(list && list.length) &&\n        list.map((item, i) => (\n          <DndItem\n            {...item}\n            onDel={() => handleDel(item.id)}\n            onEdit={() => handleEdit(item)}\n            key={i}\n            id={`${item.id}`}\n            find={find}\n            move={move}\n          />\n        ))}\n      <div style={{ marginTop: \"10px\" }}>\n        <Button onClick={handleAdd} block>\n          添加\n        </Button>\n      </div>\n      <EditorModal\n        visible={visible}\n        onCancel={handleCancel}\n        item={curItem}\n        onSave={handleSave}\n        cropRate={cropRate}\n      />\n    </div>\n  );\n};\n\nconst DndList = DropTarget(type, {}, connect => ({\n  connectDropTarget: connect.dropTarget()\n}))(List);\n\n// 将 HTMLBackend 作为参数传给 DragDropContext\nexport default memo((props: DataListMemo) => {\n  return (\n    <DndProvider backend={HTML5Backend}>\n      <DndList {...props} />\n    </DndProvider>\n  );\n});\n"
  },
  {
    "path": "src/components/FormComponents/FormItems/EditorModal.tsx",
    "content": "import React, { FC, memo, useEffect } from \"react\";\nimport { Form, Select, Input, Modal, Button, InputNumber } from \"antd\";\nimport { baseFormOptionsType } from \"../types\";\nimport Color from \"../Color\";\n\nconst { Option } = Select;\n\nconst formItemLayout = {\n  labelCol: { span: 6 },\n  wrapperCol: { span: 14 }\n};\n\ninterface EditorModalProps {\n  item: any;\n  onSave: (data: any) => void;\n  visible: boolean;\n}\n\nconst EditorModal: FC<EditorModalProps> = props => {\n  const { item, onSave, visible } = props;\n\n  const onFinish = (values: any) => {\n    onSave && onSave(values);\n  };\n\n  const handleOk = () => {\n    form\n      .validateFields()\n      .then(values => {\n        values.id = item.id;\n        onSave && onSave(values);\n      })\n      .catch(err => {\n        console.log(err);\n      });\n  };\n\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    if (form && item && visible) {\n      form.resetFields();\n    }\n  }, [form, item, visible]);\n\n  return (\n    <>\n      {!!item && (\n        <Modal\n          title=\"编辑表单组件\"\n          footer={\n            <div>\n              <Button type=\"primary\" onClick={() => handleOk()}>\n                确定\n              </Button>\n            </div>\n          }\n          forceRender\n          visible={visible}\n          onOk={handleOk}\n          closable={false}\n        >\n          <Form\n            form={form}\n            name={`formItem_editor_modal`}\n            {...formItemLayout}\n            onFinish={onFinish}\n            initialValues={item}\n          >\n            {\n              <Form.Item label=\"类型\" name=\"type\" hidden>\n                <Input />\n              </Form.Item>\n            }\n            {!!item.label && (\n              <Form.Item\n                label=\"字段名\"\n                name=\"label\"\n                rules={[{ required: true, message: \"请输入字段名!\" }]}\n              >\n                <Input />\n              </Form.Item>\n            )}\n            {!!item.fontSize && (\n              <Form.Item\n                label=\"字体大小\"\n                name=\"fontSize\"\n                rules={[{ required: true, message: \"请输入字体大小!\" }]}\n              >\n                <InputNumber min={12} max={30} defaultValue={14} />\n              </Form.Item>\n            )}\n            {!!item.color && (\n              <Form.Item\n                label=\"文字颜色\"\n                name=\"color\"\n                rules={[{ required: true, message: \"请输入文字颜色!\" }]}\n              >\n                <Color />\n              </Form.Item>\n            )}\n            {!!item.placeholder && (\n              <Form.Item label=\"提示文本\" name=\"placeholder\">\n                <Input placeholder=\"请输入提示文本\" />\n              </Form.Item>\n            )}\n            {!!item.options && (\n              <Form.Item\n                label=\"选项源\"\n                name=\"options\"\n                rules={[{ required: true, message: \"选项不能为空!\" }]}\n              >\n                <Select\n                  placeholder=\"请输入\"\n                  mode=\"tags\"\n                  labelInValue\n                  maxTagCount={39}\n                  maxTagTextLength={16}\n                >\n                  {item.options.map((v: baseFormOptionsType, i: number) => {\n                    return (\n                      <Option value={v.value} key={i}>\n                        {v.label}\n                      </Option>\n                    );\n                  })}\n                </Select>\n              </Form.Item>\n            )}\n          </Form>\n        </Modal>\n      )}\n    </>\n  );\n};\n\nexport default memo(EditorModal);\n"
  },
  {
    "path": "src/components/FormComponents/FormItems/FormItems.tsx",
    "content": "import React, {\n  memo,\n  RefObject,\n  useCallback,\n  useEffect,\n  useState\n} from \"react\";\nimport BaseForm from \"@/materials/base/Form/BaseForm\";\nimport BasePopoverForm from \"@/materials/base/Form/BasePopoverForm\";\nimport EditorModal from \"./EditorModal\";\nimport { MinusCircleFilled, EditFilled, PlusOutlined } from \"@ant-design/icons\";\nimport styles from \"./formItems.less\";\nimport { baseFormUnion, TFormItemsDefaultType } from \"../types\";\nimport { uuid } from \"@/utils/tool\";\nimport { Button } from \"antd\";\nimport MyPopover from \"yh-react-popover\";\n// import { Popconfirm } from 'antd';\n\nconst formTpl: TFormItemsDefaultType = [\n  {\n    id: \"1\",\n    type: \"Text\",\n    label: \"文本框\",\n    placeholder: \"请输入文本\"\n  },\n  {\n    id: \"2\",\n    type: \"Textarea\",\n    label: \"长文本框\",\n    placeholder: \"请输入长文本请输入长文本\"\n  },\n  {\n    id: \"3\",\n    type: \"Number\",\n    label: \"数值\",\n    placeholder: \" 请输入数值\"\n  },\n  {\n    id: \"4\",\n    type: \"MyRadio\",\n    label: \"单选框\",\n    options: [\n      { label: \"选项一\", value: \"1\" },\n      { label: \"选项二\", value: \"2\" }\n    ]\n  },\n  {\n    id: \"5\",\n    type: \"MySelect\",\n    label: \"下拉选择框\",\n    options: [\n      { label: \"选项一\", value: \"1\" },\n      { label: \"选项二\", value: \"2\" },\n      { label: \"选项三\", value: \"3\" }\n    ]\n  },\n  {\n    id: \"6\",\n    type: \"Date\",\n    label: \"日期框\",\n    placeholder: \"\"\n  },\n  {\n    id: \"7\",\n    type: \"MyTextTip\",\n    label: \"纯文本\",\n    fontSize: 12,\n    color: \"rgba(0,0,0,1)\"\n  }\n];\n\ninterface FormItemsProps {\n  formList?: TFormItemsDefaultType;\n  onChange?: (v: TFormItemsDefaultType) => void;\n  data: any;\n  rightPannelRef: RefObject<HTMLDivElement>;\n}\n\nconst FormItems = (props: FormItemsProps) => {\n  const { formList, onChange, rightPannelRef } = props;\n  const [formData, setFormData] = useState<TFormItemsDefaultType>(\n    formList || []\n  );\n  const [visible, setVisible] = useState(false);\n  const [curItem, setCurItem] = useState<baseFormUnion>();\n  const [force, setforce] = useState<{ force: Function }>({\n    force: () => {}\n  });\n\n  const handleAddItem = (item: baseFormUnion) => {\n    let tpl = formTpl.find(v => v.type === item.type);\n    let newData = [...formData, { ...tpl!, id: uuid(6, 10) }];\n    setFormData(newData);\n    onChange && onChange(newData);\n    force.force();\n  };\n\n  const handleEditItem = (item: baseFormUnion) => {\n    setVisible(true);\n    setCurItem(item);\n  };\n\n  const handleDelItem = (item: baseFormUnion) => {\n    let newData = formData.filter(v => v.id !== item.id);\n    setFormData(newData);\n    onChange && onChange(newData);\n  };\n\n  const handleSaveItem = (data: baseFormUnion) => {\n    let newData = formData.map(v => (v.id === data.id ? data : v));\n    setFormData(newData);\n    onChange && onChange(newData);\n    setVisible(false);\n  };\n\n  const callback = useCallback((v: Function) => {\n    console.log(v);\n    setforce({ force: v });\n  }, []);\n\n  useEffect(() => {\n    let listenner: (e: Event) => void;\n    if (rightPannelRef.current) {\n      listenner = () => {\n        force.force();\n      };\n      rightPannelRef.current.addEventListener(\"scroll\", listenner);\n    }\n    return () => {\n      if (rightPannelRef.current) {\n        // eslint-disable-next-line react-hooks/exhaustive-deps\n        rightPannelRef.current.removeEventListener(\"scroll\", listenner);\n      }\n    };\n  }, [force, rightPannelRef]);\n\n  return (\n    <div className={styles.formItemWrap}>\n      <div className={styles.formTitle}>表单控件</div>\n      <div className={styles.editForm}>\n        {formData.map((item: baseFormUnion, i: number) => {\n          let FormItem = BaseForm[item.type];\n          return (\n            <div className={styles.formItem} key={i}>\n              <div className={styles.disClick}>\n                <FormItem {...item} />\n              </div>\n              <div className={styles.deleteWrap}>\n                <span\n                  className={styles.operationBtn}\n                  onClick={() => handleDelItem(item)}\n                >\n                  <MinusCircleFilled />\n                </span>\n              </div>\n              <div className={styles.editWrap}>\n                <span\n                  className={styles.operationBtn}\n                  onClick={() => handleEditItem(item)}\n                >\n                  <EditFilled />\n                </span>\n              </div>\n            </div>\n          );\n        })}\n        <div className={styles.formAddWrap}>\n          <MyPopover\n            content={\n              <>\n                <div className={styles.formTpl} style={{ color: \"red\" }}>\n                  {formTpl.map((item, i) => {\n                    let FormItem = BasePopoverForm[item.type];\n                    return (\n                      <div\n                        className={styles.formItem}\n                        key={i}\n                        onClick={() => handleAddItem(item)}\n                      >\n                        <div\n                          className={styles.disClick}\n                          style={{\n                            display: \"flex\",\n                            flexDirection: \"column\",\n                            overflow: \"row\",\n                            marginTop: \"10px\"\n                          }}\n                        >\n                          <FormItem {...item} />\n                        </div>\n                      </div>\n                    );\n                  })}\n                </div>\n                {/* <a style={{color: 'red'}} onClick={() => setFormTplVisible(false)}>Close</a> */}\n              </>\n            }\n            directions={\"LB\"}\n            innerConstDomStyle={{ display: \"block\" }}\n            constDomStyle={{ display: \"block\" }}\n            callback={callback}\n          >\n            <Button style={{ width: \"100%\" }} block icon={<PlusOutlined />}>\n              添加\n            </Button>\n          </MyPopover>\n        </div>\n      </div>\n\n      <EditorModal item={curItem} onSave={handleSaveItem} visible={visible} />\n    </div>\n  );\n};\n\nexport default memo(FormItems);\n"
  },
  {
    "path": "src/components/FormComponents/FormItems/formItems.less",
    "content": ".formItemWrap {\n  .formTitle {\n    width: 56px;\n    height: 20px;\n    font-size: 14px;\n    font-family: PingFangSC-Medium, PingFang SC;\n    font-weight: bold;\n    color: #000000;\n    line-height: 20px;\n  }\n  .editForm {\n    text-align: left;\n    width: 251px;\n    .formItem {\n      position: relative;\n      padding-left: 2px;\n      .common {\n        position: absolute;\n        top: 19px;\n        box-shadow: 0 0 20px #fff;\n        .operationBtn {\n          margin-right: 15px;\n          display: inline-block;\n          cursor: pointer;\n        }\n      }\n      .deleteWrap {\n        .common;\n        left: 0;\n      }\n      .editWrap {\n        .common;\n        right: -18px;\n      }\n    }\n    .formAddWrap {\n      font-size: 14px;\n      font-weight: 400;\n      color: #4a4a4a;\n      line-height: 20px;\n      background-color: #2f54eb;\n    }\n  }\n  .formAddWrap {\n    .formTpl {\n      margin-top: 12px;\n      border-top: 1px dashed #ccc;\n      padding-top: 16px;\n      background-color: #4a4a4a;\n      .formItem {\n        button,\n        [type=\"button\"] {\n          color: #fff;\n          background-color: #4a4a4a;\n          border: 1px solid #fff;\n          border-radius: 4px 0px 0px 0px;\n        }\n        position: relative;\n        border: 1px solid #ccc;\n        margin-bottom: 2px;\n        background-color: #4a4a4a;\n        cursor: pointer;\n        .disClick {\n          pointer-events: none;\n          color: #fff;\n        }\n        &:hover {\n          border-color: #2f54eb;\n          .addBtn {\n            display: inline-block;\n          }\n        }\n        .addBtn {\n          position: absolute;\n          right: 0;\n          top: 50%;\n          transform: translateY(-50%);\n          display: none;\n          padding: 3px 6px;\n          color: #fff;\n          border-radius: 3px;\n          background-color: #2f54eb;\n          cursor: pointer;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/components/FormComponents/FormItems/index.tsx",
    "content": "import FormItems from \"./FormItems\";\nexport default FormItems;\n"
  },
  {
    "path": "src/components/FormComponents/MutiText/index.less",
    "content": ".mutiText {\n  .iptWrap {\n    margin-bottom: 12px;\n    display: flex;\n    .delBtn {\n      // font-size: 14px;\n      margin-left: 12px;\n      cursor: pointer;\n      align-self: center;\n    }\n  }\n}\n"
  },
  {
    "path": "src/components/FormComponents/MutiText/index.tsx",
    "content": "import React, { memo, useEffect } from \"react\";\nimport { Input, Button, Popconfirm } from \"antd\";\nimport { MinusCircleFilled } from \"@ant-design/icons\";\nimport styles from \"./index.less\";\nimport { TMutiTextDefaultType } from \"../types\";\n\ntype MultiTextProps = {\n  onChange?: (v: TMutiTextDefaultType) => void;\n  value?: TMutiTextDefaultType;\n};\n\nexport default memo(function MutiText(props: MultiTextProps) {\n  const { value, onChange } = props;\n  const handleAdd = () => {\n    onChange && onChange([...value!, \"新增项目\"]);\n  };\n\n  const handleDel = (index: number) => {\n    let newList = value!.filter((_item, i) => i !== index);\n    onChange && onChange(newList);\n  };\n\n  const handleChange = (\n    index: number,\n    e: React.ChangeEvent<HTMLInputElement>\n  ) => {\n    let newList = value!.map((item, i) =>\n      i === index ? e.target.value : item\n    );\n    onChange && onChange(newList);\n  };\n  useEffect(() => {\n    window[\"currentCates\"] = value!;\n    return () => {\n      window[\"currentCates\"] = null;\n    };\n  }, [value]);\n\n  return (\n    <div className={styles.mutiText}>\n      {value && value.length ? (\n        value!.map((item, i) => {\n          return (\n            <div className={styles.iptWrap} key={i}>\n              <Input defaultValue={item} onChange={e => handleChange(i, e)} />\n              <Popconfirm\n                title=\"确定要删除吗?\"\n                onConfirm={() => handleDel(i)}\n                placement=\"leftTop\"\n                okText=\"确定\"\n                cancelText=\"取消\"\n              >\n                <span className={styles.delBtn}>\n                  <MinusCircleFilled />\n                </span>\n              </Popconfirm>\n            </div>\n          );\n        })\n      ) : (\n        <div className={styles.iptWrap}>\n          <Input />\n        </div>\n      )}\n      {value && value.length < 3 && (\n        <div className={styles.iptWrap}>\n          <Button block onClick={handleAdd}>\n            添加项目\n          </Button>\n        </div>\n      )}\n    </div>\n  );\n});\n"
  },
  {
    "path": "src/components/FormComponents/Pos/index.less",
    "content": ".posIpt {\n  display: flex;\n  justify-content: flex-end;\n  margin-right: -10px;\n  .posItem {\n    margin-right: 10px;\n    span {\n      margin-right: 3px;\n    }\n  }\n}\n"
  },
  {
    "path": "src/components/FormComponents/Pos/index.tsx",
    "content": "import React, { memo, useState, useEffect } from \"react\";\nimport { InputNumber } from \"antd\";\nimport styles from \"./index.less\";\nimport { TPosDefaultType, TPosItem } from \"../types\";\n\ntype PosProps = {\n  value?: TPosDefaultType;\n  onChange?: (v: TPosItem | string) => void;\n};\n\nexport default memo(function Pos(props: PosProps) {\n  const { value, onChange } = props;\n  let _this: typeof Pos = Pos;\n\n  const handleChange = (index: number, v: TPosItem | string) => {\n    let arr: any = value || [];\n    arr[index] = v;\n    onChange && onChange(arr);\n  };\n\n  return (\n    <div className={styles.posIpt}>\n      <div className={styles.posItem}>\n        <span>x: </span>\n        <InputNumber\n          defaultValue={value && value[0]}\n          onChange={handleChange.bind(_this, 0)}\n        />\n      </div>\n      <div className={styles.posItem}>\n        <span>y: </span>\n        <InputNumber\n          defaultValue={value && value[1]}\n          onChange={handleChange.bind(_this, 1)}\n        />\n      </div>\n    </div>\n  );\n});\n"
  },
  {
    "path": "src/components/FormComponents/Table/index.less",
    "content": ":global(.editable-cell) {\n  position: relative;\n}\n\n:global(.editable-cell-value-wrap) {\n  padding: 5px 12px;\n  cursor: pointer;\n}\n\n:global(.editable-row) {\n  &:hover :global(.editable-cell-value-wrap) {\n    border: 1px solid #d9d9d9;\n    border-radius: 4px;\n    padding: 4px 11px;\n  }\n}\n\n:global([data-theme=\"dark\"]) {\n  :global(.editable-row) {\n    &:hover {\n      :global(.editable-cell-value-wrap) {\n        border: 1px solid #434343;\n      }\n    }\n  }\n}\n\n.apiForm {\n  .formItem {\n    margin-bottom: 16px;\n  }\n}\n"
  },
  {
    "path": "src/components/FormComponents/Table/index.tsx",
    "content": "import React, {\n  useContext,\n  useState,\n  useEffect,\n  useRef,\n  memo,\n  RefObject\n} from \"react\";\nimport { Table, Input, Button, Popconfirm, Form, Modal, Upload } from \"antd\";\nimport { ColumnsType } from \"antd/lib/table\";\nimport { uuid } from \"@/utils/tool\";\nimport XLSX from \"xlsx\";\n// 下方样式主要为全局样式，暂时不可删\nimport styles from \"./index.less\";\n\nconst EditableContext = React.createContext<any>(null);\n\ninterface Item {\n  key: string;\n  name: string;\n  age: string;\n  address: string;\n}\n\ninterface EditableRowProps {\n  index: number;\n}\n\nconst EditableRow: React.FC<EditableRowProps> = ({ index, ...props }) => {\n  const [form] = Form.useForm();\n  return (\n    <Form form={form} component={false}>\n      <EditableContext.Provider value={form}>\n        <tr {...props} />\n      </EditableContext.Provider>\n    </Form>\n  );\n};\n\ninterface EditableCellProps {\n  title: React.ReactNode;\n  editable: boolean;\n  children: React.ReactNode;\n  dataIndex: string;\n  record: any;\n  handleSave: (record: Item) => void;\n}\n\nconst EditableCell: React.FC<EditableCellProps> = ({\n  title,\n  editable,\n  children,\n  dataIndex,\n  record,\n  handleSave,\n  ...restProps\n}) => {\n  const [editing, setEditing] = useState(false);\n  const inputRef = useRef<HTMLInputElement>(null);\n  const form = useContext(EditableContext);\n\n  useEffect(() => {\n    if (editing) {\n      inputRef.current?.focus();\n    }\n  }, [editing]);\n\n  const toggleEdit = () => {\n    setEditing(!editing);\n    form.setFieldsValue({ [dataIndex]: record[dataIndex] });\n  };\n\n  const save = async () => {\n    try {\n      const values = await form.validateFields();\n      toggleEdit();\n      handleSave({ ...record, ...values });\n    } catch (errInfo) {\n      console.log(\"Save failed:\", errInfo);\n    }\n  };\n\n  let childNode = children;\n\n  if (editable) {\n    childNode = editing ? (\n      <Form.Item\n        style={{ margin: 0 }}\n        name={dataIndex}\n        rules={[\n          {\n            required: true,\n            message: `${title} 是必填的.`\n          }\n        ]}\n      >\n        <Input\n          ref={(inputRef as unknown) as () => RefObject<HTMLInputElement>}\n          onPressEnter={save}\n          onBlur={save}\n        />\n      </Form.Item>\n    ) : (\n      <div\n        className=\"editable-cell-value-wrap\"\n        style={{ paddingRight: 24 }}\n        onClick={toggleEdit}\n      >\n        {children}\n      </div>\n    );\n  }\n\n  return <td {...restProps}>{childNode}</td>;\n};\n\nclass EditableTable extends React.Component<any, any> {\n  columns: (\n    | {\n        title: string;\n        dataIndex: string;\n        width: string;\n        editable: boolean;\n        render?: undefined;\n      }\n    | {\n        title: string;\n        dataIndex: string;\n        render: (text: string, record: any) => JSX.Element | null;\n        width?: undefined;\n        editable?: undefined;\n      }\n  )[];\n  apiForm: {\n    api: string;\n    header: string;\n    dataField: string;\n  };\n\n  constructor(props: any) {\n    super(props);\n    this.columns = [\n      {\n        title: \"名字\",\n        dataIndex: \"name\",\n        width: \"180px\",\n        editable: true\n      },\n      {\n        title: \"值\",\n        dataIndex: \"value\",\n        width: \"120px\",\n        editable: true\n      },\n      {\n        title: \"操作\",\n        dataIndex: \"operation\",\n        render: (text: string, record) =>\n          this.state.dataSource.length >= 1 ? (\n            <Popconfirm\n              title=\"Sure to delete?\"\n              onConfirm={() => this.handleDelete(record.key)}\n            >\n              <Button type=\"link\">删除</Button>\n            </Popconfirm>\n          ) : null\n      }\n    ];\n\n    this.apiForm = {\n      api: \"\",\n      header: \"\",\n      dataField: \"\"\n    };\n\n    const dataSource =\n      props.data &&\n      props.data.map((item: any, i: number) => ({ key: i + \"\", ...item }));\n\n    this.state = {\n      dataSource: dataSource,\n      visible: false,\n      apiVisible: false,\n      apiResult: \"\"\n    };\n  }\n\n  handleDelete = (key: string) => {\n    const dataSource = [...this.state.dataSource];\n    const newDataSource = dataSource.filter(item => item.key !== key);\n    this.setState({ dataSource: newDataSource });\n    this.props.onChange && this.props.onChange(newDataSource);\n  };\n\n  handleAdd = () => {\n    const { dataSource } = this.state;\n    const uid = uuid(8, 10);\n    const newData = {\n      key: uid,\n      name: `dooring ${dataSource.length + 1}`,\n      value: 32\n    };\n    const newDataSource = [...dataSource, newData];\n    this.setState({\n      dataSource: newDataSource\n    });\n    this.props.onChange && this.props.onChange(newDataSource);\n  };\n\n  handleSave = (row: any) => {\n    const newData = [...this.state.dataSource];\n    const index = newData.findIndex(item => row.key === item.key);\n    const item = newData[index];\n    newData.splice(index, 1, {\n      ...item,\n      ...row\n    });\n    this.setState({ dataSource: newData });\n    this.props.onChange && this.props.onChange(newData);\n  };\n\n  showModal = () => {\n    this.setState({\n      visible: true\n    });\n  };\n\n  handleOk = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n    this.setState({\n      visible: false\n    });\n  };\n\n  handleCancel = (e: React.MouseEvent<HTMLElement, MouseEvent>) => {\n    this.setState({\n      visible: false\n    });\n  };\n\n  showApiModal = () => {\n    this.setState({\n      apiVisible: true\n    });\n  };\n\n  handleAPIOk = () => {\n    const { dataField } = this.apiForm;\n    if (dataField) {\n      let data = this.state.apiResult[dataField];\n      if (data && data instanceof Array) {\n        data = data.map((item, i) => ({ key: i + \"\", ...item }));\n        this.setState({\n          dataSource: data\n        });\n        this.props.onChange && this.props.onChange(data);\n      }\n      this.setState({\n        apiVisible: false\n      });\n    }\n  };\n\n  handleAPICancel = () => {\n    this.setState({\n      apiVisible: false\n    });\n  };\n\n  handleApiField = (type: \"api\" | \"header\" | \"dataField\", v: string) => {\n    this.apiForm[type] = v;\n  };\n\n  getApiFn = () => {\n    console.log(this.apiForm);\n    const { api, header } = this.apiForm;\n    fetch(api, {\n      cache: \"no-cache\",\n      headers: Object.assign(\n        { \"content-type\": \"application/json\" },\n        header ? JSON.parse(header) : {}\n      ),\n      method: \"GET\",\n      mode: \"cors\"\n    })\n      .then(res => res.json())\n      .then(res => {\n        this.setState({\n          apiResult: res\n        });\n      });\n  };\n\n  render() {\n    const { dataSource } = this.state;\n    const components = {\n      body: {\n        row: EditableRow,\n        cell: EditableCell\n      }\n    };\n    const columns: ColumnsType<any> = this.columns.map(col => {\n      if (!col.editable) {\n        return col;\n      }\n      return {\n        ...col,\n        onCell: record => ({\n          record,\n          editable: col.editable,\n          dataIndex: col.dataIndex,\n          title: col.title,\n          handleSave: this.handleSave\n        })\n      };\n    });\n    const _this = this;\n    const props = {\n      name: \"file\",\n      // action: '',\n      showUploadList: false,\n      beforeUpload(file: File, fileList: Array<File>) {\n        // 解析并提取excel数据\n        let reader = new FileReader();\n        reader.onload = function(e: any) {\n          let data = e.target.result;\n          let workbook = XLSX.read(data, { type: \"binary\" });\n          let sheetNames = workbook.SheetNames; // 工作表名称集合\n          let draftArr: any = {};\n          sheetNames.forEach(name => {\n            let worksheet = workbook.Sheets[name]; // 只能通过工作表名称来获取指定工作表\n            for (let key in worksheet) {\n              // v是读取单元格的原始值\n              if (key[0] !== \"!\") {\n                if (draftArr[key[0]]) {\n                  draftArr[key[0]].push(worksheet[key].v);\n                } else {\n                  draftArr[key[0]] = [worksheet[key].v];\n                }\n              }\n            }\n          });\n          let sourceData = Object.values(draftArr).map((item: any, i) => ({\n            key: i + \"\",\n            name: item[0],\n            value: item[1]\n          }));\n          _this.setState({\n            dataSource: sourceData\n          });\n          _this.props.onChange && _this.props.onChange(sourceData);\n        };\n        reader.readAsBinaryString(file);\n      }\n    };\n    return (\n      <div>\n        <Button type=\"primary\" onClick={this.showModal}>\n          编辑数据源\n        </Button>\n        <Modal\n          title=\"编辑数据源\"\n          visible={this.state.visible}\n          onOk={this.handleOk}\n          onCancel={this.handleCancel}\n          okText=\"确定\"\n          cancelText=\"取消\"\n        >\n          <Button\n            onClick={this.handleAdd}\n            type=\"primary\"\n            style={{ marginBottom: 16, marginRight: 16 }}\n          >\n            添加行\n          </Button>\n          <Upload {...props}>\n            <Button type=\"primary\" ghost style={{ marginRight: 16 }}>\n              导入Excel\n            </Button>\n          </Upload>\n          <Button type=\"primary\" ghost onClick={this.showApiModal}>\n            第三方API\n          </Button>\n          <Table\n            components={components}\n            rowClassName={() => \"editable-row\"}\n            bordered\n            dataSource={dataSource}\n            columns={columns}\n            pagination={{ pageSize: 50 }}\n            scroll={{ y: 240 }}\n          />\n        </Modal>\n        <Modal\n          title=\"配置api\"\n          visible={this.state.apiVisible}\n          onOk={this.handleAPIOk}\n          onCancel={this.handleAPICancel}\n          okText=\"确定\"\n          cancelText=\"取消\"\n        >\n          <div className={styles.apiForm}>\n            <div className={styles.formItem}>\n              <Input\n                placeholder=\"请输入api地址\"\n                onChange={e => this.handleApiField(\"api\", e.target.value)}\n              />\n            </div>\n            <div className={styles.formItem}>\n              <Input.TextArea\n                placeholder=\"请输入头信息, 如{token: 123456}, 格式必须为json对象\"\n                rows={4}\n                onChange={e => this.handleApiField(\"header\", e.target.value)}\n              />\n            </div>\n            <div className={styles.formItem}>\n              <Button type=\"primary\" onClick={this.getApiFn}>\n                发送请求\n              </Button>\n            </div>\n            {this.state.apiResult && (\n              <>\n                <div className={styles.formItem}>\n                  <Input.TextArea\n                    rows={6}\n                    value={JSON.stringify(this.state.apiResult, null, 4)}\n                  />\n                </div>\n                <div className={styles.formItem}>\n                  <Input\n                    placeholder=\"设置数据源字段\"\n                    onChange={e =>\n                      this.handleApiField(\"dataField\", e.target.value)\n                    }\n                  />\n                  <p style={{ color: \"red\" }}>\n                    数据源字段是接口返回的图表数据对应的字段, 必填,\n                    否则无法正确导入数据\n                  </p>\n                </div>\n              </>\n            )}\n          </div>\n        </Modal>\n      </div>\n    );\n  }\n}\n\nexport default memo(EditableTable);\n"
  },
  {
    "path": "src/components/FormComponents/Upload/index.less",
    "content": ":global(.ant-upload-select-picture-card i) {\n  color: #999;\n  font-size: 14px;\n}\n\n:global(.ant-upload-select-picture-card .ant-upload-text) {\n  margin-top: 8px;\n  color: #666;\n}\n\n.avatarUploader {\n  display: inline-block;\n  text-align: left;\n}\n\n.wallBtn {\n  position: absolute;\n  left: 140px;\n  bottom: 56px;\n  display: inline-block;\n  color: #2f54eb;\n  cursor: pointer;\n  border-bottom: 1px solid #2f54eb;\n}\n\n.imgBox {\n  display: flex;\n  flex-wrap: wrap;\n  max-height: 520px;\n  overflow: auto;\n  .imgItem {\n    position: relative;\n    margin-right: 16px;\n    margin-bottom: 16px;\n    width: 320px;\n    max-height: 220px;\n    overflow: hidden;\n    cursor: pointer;\n    img {\n      width: 100%;\n    }\n    &:hover,\n    &.seleted {\n      .iconBtn {\n        visibility: visible;\n      }\n    }\n\n    .iconBtn {\n      position: absolute;\n      visibility: hidden;\n      top: 6px;\n      right: 10px;\n      font-size: 18px;\n      color: rgb(8, 156, 8);\n    }\n  }\n}\n"
  },
  {
    "path": "src/components/FormComponents/Upload/index.tsx",
    "content": "import React from \"react\";\nimport { Upload, Modal, message, Tabs, Result } from \"antd\";\nimport { PlusOutlined, CheckCircleFilled } from \"@ant-design/icons\";\nimport ImgCrop from \"antd-img-crop\";\nimport classnames from \"classnames\";\nimport {\n  UploadFile,\n  UploadChangeParam,\n  RcFile\n} from \"antd/lib/upload/interface\";\nimport { isDev, unParams, uuid } from \"@/utils/tool\";\nimport req from \"@/utils/req\";\nimport styles from \"./index.less\";\n\nconst { TabPane } = Tabs;\n\n// 维护图片分类映射\nconst wallCateName: any = {\n  photo: \"照片\",\n  bg: \"背景\",\n  chahua: \"插画\"\n};\n\nfunction getBase64(file: File | Blob) {\n  return new Promise<string>((resolve, reject) => {\n    const reader = new FileReader();\n    reader.readAsDataURL(file);\n    reader.onload = () => resolve(reader.result as string);\n    reader.onerror = error => reject(error);\n  });\n}\n\ninterface PicturesWallType {\n  fileList?: UploadFile<any>[];\n  action?: string;\n  headers?: any;\n  withCredentials?: boolean;\n  maxLen?: number;\n  onChange?: (v: any) => void;\n  cropRate?: number | boolean;\n  isCrop?: boolean;\n}\n\nclass PicturesWall extends React.Component<PicturesWallType> {\n  state = {\n    previewVisible: false,\n    previewImage: \"\",\n    wallModalVisible: false,\n    previewTitle: \"\",\n    imgBed: {\n      photo: [],\n      bg: [],\n      chahua: []\n    },\n    curSelectedImg: \"\",\n    fileList: this.props.fileList || []\n  };\n\n  handleCancel = () => this.setState({ previewVisible: false });\n\n  handleModalCancel = () => this.setState({ wallModalVisible: false });\n\n  handlePreview = async (file: UploadFile<any>) => {\n    if (!file.url && !file.preview) {\n      file.preview = await getBase64(file.originFileObj!);\n    }\n\n    this.setState({\n      previewImage: file.url || file.preview,\n      previewVisible: true,\n      previewTitle:\n        file.name || file.url!.substring(file.url!.lastIndexOf(\"/\") + 1)\n    });\n  };\n\n  handleWallSelect = (url: string) => {\n    this.setState({\n      wallModalVisible: true\n    });\n  };\n\n  handleImgSelected = (url: string) => {\n    this.setState({\n      curSelectedImg: url\n    });\n  };\n\n  handleWallShow = () => {\n    this.setState({\n      wallModalVisible: true\n    });\n  };\n\n  handleModalOk = () => {\n    const fileList = [\n      {\n        uid: uuid(8, 16),\n        name: \"h5-dooring图片库\",\n        status: \"done\",\n        url: this.state.curSelectedImg\n      }\n    ];\n    this.props.onChange && this.props.onChange(fileList);\n    this.setState({ fileList, wallModalVisible: false });\n  };\n\n  handleChange = ({ file, fileList }: UploadChangeParam<UploadFile<any>>) => {\n    this.setState({ fileList });\n    if (file.status === \"done\") {\n      const files = fileList.map(item => {\n        const { uid, name, status } = item;\n        const url = item.url || item.response.result.url;\n        return { uid, name, status, url };\n      });\n      this.props.onChange && this.props.onChange(files);\n    }\n  };\n\n  handleBeforeUpload = (file: RcFile) => {\n    const isJpgOrPng =\n      file.type === \"image/jpeg\" ||\n      file.type === \"image/png\" ||\n      file.type === \"image/jpg\" ||\n      file.type === \"image/gif\";\n    if (!isJpgOrPng) {\n      message.error(\"只能上传格式为jpeg/png/gif的图片\");\n    }\n    const isLt2M = file.size / 1024 / 1024 < 2;\n    if (!isLt2M) {\n      message.error(\"图片必须小于2MB!\");\n    }\n    return isJpgOrPng && isLt2M;\n  };\n\n  componentDidMount() {\n    // req.get(`/visible/bed/get?tid=${unParams(location.search)!.tid}`).then(res => {\n    //   res &&\n    //     this.setState({\n    //       imgBed: res,\n    //     });\n    // });\n  }\n\n  render() {\n    const {\n      previewVisible,\n      previewImage,\n      fileList,\n      previewTitle,\n      wallModalVisible,\n      imgBed,\n      curSelectedImg\n    } = this.state;\n    const {\n      action = isDev\n        ? \"http://192.168.1.8:3000/api/v0/files/upload/free\"\n        : \"你的服务器地址\",\n      headers,\n      withCredentials = true,\n      maxLen = 1,\n      cropRate = 375 / 158,\n      isCrop\n    } = this.props;\n\n    const uploadButton = (\n      <div>\n        <PlusOutlined />\n        <div className=\"ant-upload-text\">上传</div>\n      </div>\n    );\n\n    const cates = Object.keys(imgBed);\n\n    return (\n      <>\n        {isCrop ? (\n          <ImgCrop\n            modalTitle=\"裁剪图片\"\n            modalOk=\"确定\"\n            modalCancel=\"取消\"\n            rotate={true}\n            aspect={cropRate}\n          >\n            <Upload\n              fileList={fileList}\n              onPreview={this.handlePreview}\n              onChange={this.handleChange}\n              name=\"file\"\n              listType=\"picture-card\"\n              className={styles.avatarUploader}\n              action={action}\n              withCredentials={withCredentials}\n              headers={{\n                \"x-requested-with\": localStorage.getItem(\"user\") || \"\",\n                authorization: localStorage.getItem(\"token\") || \"\",\n                ...headers\n              }}\n              beforeUpload={this.handleBeforeUpload}\n            >\n              {fileList.length >= maxLen ? null : uploadButton}\n            </Upload>\n          </ImgCrop>\n        ) : (\n          <Upload\n            fileList={fileList}\n            onPreview={this.handlePreview}\n            onChange={this.handleChange}\n            name=\"file\"\n            listType=\"picture-card\"\n            className={styles.avatarUploader}\n            action={action}\n            withCredentials={withCredentials}\n            headers={{\n              \"x-requested-with\": localStorage.getItem(\"user\") || \"\",\n              authorization: localStorage.getItem(\"token\") || \"\",\n              ...headers\n            }}\n            beforeUpload={this.handleBeforeUpload}\n          >\n            {fileList.length >= maxLen ? null : uploadButton}\n          </Upload>\n        )}\n        <div className={styles.wallBtn} onClick={this.handleWallShow}>\n          图片库\n        </div>\n        <Modal\n          visible={previewVisible}\n          title={previewTitle}\n          footer={null}\n          onCancel={this.handleCancel}\n        >\n          <img alt=\"预览图片\" style={{ width: \"100%\" }} src={previewImage} />\n        </Modal>\n        <Modal\n          visible={wallModalVisible}\n          title=\"图片库\"\n          okText=\"确定\"\n          cancelText=\"取消\"\n          width={860}\n          onCancel={this.handleModalCancel}\n          onOk={this.handleModalOk}\n        >\n          <Tabs\n            defaultActiveKey={cates[0]}\n            tabPosition=\"left\"\n            style={{ height: 520 }}\n          >\n            {cates.map((item, i) => {\n              return (\n                <TabPane tab={wallCateName[item]} key={item}>\n                  <div className={styles.imgBox}>\n                    {(imgBed as any)[item] &&\n                      (imgBed as any)[item].map((item: string, i: number) => {\n                        return (\n                          <div\n                            className={classnames(\n                              styles.imgItem,\n                              curSelectedImg === item ? styles.seleted : \"\"\n                            )}\n                            key={i}\n                            onClick={() => this.handleImgSelected(item)}\n                          >\n                            <img src={item} alt=\"趣谈前端-h5-dooring\" />\n                            <span className={styles.iconBtn}>\n                              <CheckCircleFilled />\n                            </span>\n                          </div>\n                        );\n                      })}\n                  </div>\n                </TabPane>\n              );\n            })}\n            <TabPane tab=\"更多\" key=\"more\">\n              <Result\n                status=\"500\"\n                title=\"Dooring温馨提示\"\n                subTitle=\"更多素材, 正在筹备中...\"\n              />\n            </TabPane>\n          </Tabs>\n        </Modal>\n      </>\n    );\n  }\n}\n\nexport default PicturesWall;\n"
  },
  {
    "path": "src/components/FormComponents/XEditor/index.less",
    "content": ".avatarUploader > :global(.ant-upload) {\n  width: 128px;\n  height: 128px;\n}\n"
  },
  {
    "path": "src/components/FormComponents/XEditor/index.tsx",
    "content": "import React, { useState, useEffect, memo } from \"react\";\nimport req from \"@/utils/req\";\nimport BraftEditor from \"braft-editor\";\nimport \"braft-editor/dist/index.css\";\nimport styles from \"./index.less\";\n\nconst controls = [\n  {\n    key: \"bold\",\n    text: <b>加粗</b>\n  },\n  \"undo\",\n  \"redo\",\n  \"emoji\",\n  \"list-ul\",\n  \"list-ol\",\n  \"blockquote\",\n  \"text-align\",\n  \"font-size\",\n  \"line-height\",\n  \"letter-spacing\",\n  \"text-color\",\n  \"italic\",\n  \"underline\",\n  \"link\",\n  \"media\"\n];\n\nexport default memo(function XEditor(props: any) {\n  const { value, onChange } = props;\n  const [editorState, setEditorState] = useState(\n    BraftEditor.createEditorState(value)\n  );\n\n  const myUploadFn = (param: any) => {\n    const fd = new FormData();\n    fd.append(\"file\", param.file);\n\n    req\n      .post(\"xxxx\", fd, {\n        headers: {\n          \"Content-Type\": \"multipart/form-data\"\n        },\n        onUploadProgress: function(event) {\n          // 上传进度发生变化时调用param.progress\n          console.log((event.loaded / event.total) * 100);\n          param.progress((event.loaded / event.total) * 100);\n        }\n      })\n      .then((res: any) => {\n        // 上传成功后调用param.success并传入上传后的文件地址\n        param.success({\n          url: res.url,\n          meta: {\n            id: Date.now(),\n            title: res.filename,\n            alt: \"趣谈前端\"\n          }\n        });\n      })\n      .catch(err => {\n        param.error({\n          msg: \"上传失败.\"\n        });\n      });\n  };\n\n  const submitContent = () => {\n    const htmlContent = editorState.toHTML();\n    onChange && onChange(htmlContent);\n  };\n\n  const handleEditorChange = editorState => {\n    setEditorState(editorState);\n    if (onChange) {\n      const htmlContent = editorState.toHTML();\n      onChange(htmlContent);\n    }\n  };\n\n  useEffect(() => {\n    const htmlContent = value || \"\";\n    setEditorState(BraftEditor.createEditorState(htmlContent));\n  }, []);\n  return (\n    <BraftEditor\n      value={editorState}\n      controls={controls}\n      onChange={handleEditorChange}\n      onSave={submitContent}\n      media={{ uploadFn: myUploadFn }}\n    />\n  );\n});\n"
  },
  {
    "path": "src/components/FormComponents/types.ts",
    "content": "////////////////////\nexport interface IUploadConfigType {\n  key: string;\n  name: string;\n  type: \"Upload\";\n  isCrop?: boolean;\n  cropRate?: number;\n}\n\nexport type TUploadDefaultType = Array<{\n  uid: string;\n  name: string;\n  status: string;\n  url: string;\n}>;\n/////////////////\nexport interface ITextConfigType {\n  key: string;\n  name: string;\n  type: \"Text\";\n}\nexport type TTextDefaultType = string;\n////////////////////////\nexport interface ITextAreaConfigType {\n  key: string;\n  name: string;\n  type: \"TextArea\";\n}\nexport type TTextAreaDefaultType = string;\n////////////////////////////\nexport interface INumberConfigType {\n  key: string;\n  name: string;\n  type: \"Number\";\n  range?: [number, number];\n  step?: number;\n}\n\nexport type TNumberDefaultType = number;\n\n///////////////////\nexport interface IDataListConfigType {\n  key: string;\n  name: string;\n  type: \"DataList\";\n  cropRate: number;\n}\n\nexport type TDataListDefaultTypeItem = {\n  id: string;\n  title: string;\n  desc: string;\n  link: string;\n  type?: number;\n  imgUrl: TUploadDefaultType;\n};\n\nexport type TDataListDefaultType = Array<TDataListDefaultTypeItem>;\n\n////////////////////\nexport interface IColorConfigType {\n  key: string;\n  name: string;\n  type: \"Color\";\n}\n\nexport type TColorDefaultType = string;\n\n/////////////////\nexport interface IRichTextConfigType {\n  key: string;\n  name: string;\n  type: \"RichText\";\n}\nexport type TRichTextDefaultType = string;\n\nexport interface IMutiTextConfigType {\n  key: string;\n  name: string;\n  type: \"MutiText\";\n}\n\nexport type TMutiTextDefaultType = Array<string>;\n\n/////////////////////////////////\nexport interface ISelectConfigType<KeyType> {\n  key: string;\n  name: string;\n  type: \"Select\";\n  range: Array<{\n    key: KeyType;\n    text: string;\n  }>;\n}\nexport type TSelectDefaultType<KeyType> = KeyType;\n\n/////////////////////////\nexport interface IRadioConfigType<KeyType> {\n  key: string;\n  name: string;\n  type: \"Radio\";\n  range: Array<{\n    key: KeyType;\n    text: string;\n  }>;\n}\nexport type TRadioDefaultType<KeyType> = KeyType;\n\n///////////////\n\nexport interface ISwitchConfigType {\n  key: string;\n  name: string;\n  type: \"Switch\";\n}\nexport type TSwitchDefaultType = boolean;\n\n/////////////////////////////\nexport interface ICardPickerConfigType<T> {\n  key: string;\n  name: string;\n  type: \"CardPicker\";\n  icons: Array<T>;\n}\nexport type TCardPickerDefaultType<T> = T;\n\n/////////////\n\nexport interface ITableConfigType {\n  key: string;\n  name: string;\n  type: \"Table\";\n}\nexport type TTableDefaultType = Array<{\n  name: string;\n  value: number;\n}>;\n\n// position input control\nexport interface IPosConfigType {\n  key: string;\n  name: string;\n  type: \"Pos\";\n  placeObj: {\n    text: string;\n    link: string;\n  };\n}\n\nexport type TPosItem = number | undefined;\n\nexport type TPosDefaultType = [TPosItem, TPosItem];\n\n//////////////////\nexport interface IFormItemsConfigType {\n  key: string;\n  name: string;\n  type: \"FormItems\";\n}\n\n//0---------baseform\nexport type baseFormOptionsType = {\n  label: string;\n  value: string;\n};\n\nexport type baseFormTextTpl = {\n  id: string;\n  type: \"Text\";\n  label: string;\n  placeholder: string;\n};\n\nexport type baseFormTextTipTpl = {\n  id: string;\n  type: \"MyTextTip\";\n  label: string;\n  color: string;\n  fontSize: number;\n};\n\nexport type baseFormNumberTpl = {\n  id: string;\n  type: \"Number\";\n  label: string;\n  placeholder: string;\n};\n\nexport type baseFormTextAreaTpl = {\n  id: string;\n  type: \"Textarea\";\n  label: string;\n  placeholder: string;\n};\n\nexport type baseFormMyRadioTpl = {\n  id: string;\n  type: \"MyRadio\";\n  label: string;\n  options: baseFormOptionsType[];\n};\n\nexport type baseFormMyCheckboxTpl = {\n  id: string;\n  type: \"MyCheckbox\";\n  label: string;\n  options: baseFormOptionsType[];\n};\n\nexport type baseFormMySelectTpl = {\n  id: string;\n  type: \"MySelect\";\n  label: string;\n  options: baseFormOptionsType[];\n};\n\nexport type baseFormDateTpl = {\n  id: string;\n  type: \"Date\";\n  label: string;\n  placeholder: string;\n};\n\nexport type baseFormUnion =\n  | baseFormTextTpl\n  | baseFormTextTipTpl\n  | baseFormNumberTpl\n  | baseFormTextAreaTpl\n  | baseFormMyRadioTpl\n  | baseFormMyCheckboxTpl\n  | baseFormMySelectTpl\n  | baseFormDateTpl;\nexport type baseFormUnionType =\n  | baseFormTextTpl[\"type\"]\n  | baseFormTextTipTpl[\"type\"]\n  | baseFormNumberTpl[\"type\"]\n  | baseFormTextAreaTpl[\"type\"]\n  | baseFormMyRadioTpl[\"type\"]\n  | baseFormMyCheckboxTpl[\"type\"]\n  | baseFormMySelectTpl[\"type\"]\n  | baseFormDateTpl[\"type\"];\n\nexport type TFormItemsDefaultType = Array<baseFormUnion>;\n"
  },
  {
    "path": "src/components/LoadingCp/index.tsx",
    "content": "import React from \"react\";\n\nexport default () => <div className=\"rotate-animate\">Dooring</div>;\n"
  },
  {
    "path": "src/components/Zan/index.less",
    "content": ".takeCat {\n  display: inline-block;\n}\n.imgWrap {\n  width: 160px;\n  img {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/components/Zan/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { Button, Popover } from \"antd\";\nimport styles from \"./index.less\";\n\ninterface IProps {\n  text: any;\n}\n\n///这组件写的有问题  popover会重定位\nconst content = (\n  <div className={styles.imgWrap}>\n    <img\n      src={`http://h5.dooring.cn/uploads/WechatIMG2_17969ccfe40.jpeg`}\n      alt=\"sponsorship\"\n    />\n  </div>\n);\n\nexport default memo(function ZanPao(props: IProps) {\n  const {\n    text = (\n      <Button\n        type=\"primary\"\n        danger\n        style={{ background: \"red !important\" }}\n        size=\"large\"\n      >\n        支持开源, 请作者喝茶~\n      </Button>\n    )\n  } = props;\n  return (\n    <div className={styles.takeCat}>\n      <Popover placement=\"top\" title={null} content={content} trigger=\"hover\">\n        {text}\n      </Popover>\n    </div>\n  );\n});\n"
  },
  {
    "path": "src/core/DynamicEngine.tsx",
    "content": "import { dynamic } from \"umi\";\nimport Loading from \"../components/LoadingCp\";\nimport { useMemo, memo, FC } from \"react\";\nimport React from \"react\";\n\nexport type componentsType = \"media\" | \"base\" | \"visible\" | \"shop\";\n\nconst DynamicFunc = (type: string, componentsType: string) => {\n  return dynamic({\n    loader: async function() {\n      const { default: Graph } = await import(\n        `@/materials/${componentsType}/${type}`\n      );\n      const Component = Graph;\n      return (props: DynamicType) => {\n        const { config, isTpl } = props;\n        return <Component {...config} isTpl={isTpl} />;\n      };\n    },\n    loading: () => (\n      <div style={{ paddingTop: 10, textAlign: \"center\" }}>\n        <Loading />\n      </div>\n    )\n  });\n};\n\ntype DynamicType = {\n  isTpl: boolean;\n  config: { [key: string]: any };\n  type: string;\n  componentsType: componentsType;\n  category: string;\n};\nconst DynamicEngine = memo((props: DynamicType) => {\n  const { type, config, category } = props;\n  const Dynamic = useMemo(() => {\n    return (DynamicFunc(type, category) as unknown) as FC<DynamicType>;\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, [config]);\n\n  return <Dynamic {...props} />;\n});\n\nexport default DynamicEngine;\n"
  },
  {
    "path": "src/core/index.ts",
    "content": "import DynamicEngine from \"./DynamicEngine\";\nimport ViewRender from \"./renderer/ViewRender\";\nimport FormRender from \"./renderer/FormRender\";\nexport { DynamicEngine, ViewRender, FormRender };\n"
  },
  {
    "path": "src/core/renderer/FormRender.tsx",
    "content": "import React, { memo, RefObject, useEffect } from \"react\";\nimport { Form, Select, InputNumber, Input, Switch, Radio } from \"antd\";\nimport Upload from \"../../components/FormComponents/Upload\";\nimport DataList from \"../../components/FormComponents/DataList\";\nimport MutiText from \"../../components/FormComponents/MutiText\";\nimport Color from \"../../components/FormComponents/Color\";\nimport CardPicker from \"../../components/FormComponents/CardPicker\";\nimport Table from \"../../components/FormComponents/Table\";\nimport Pos from \"../../components/FormComponents/Pos\";\nimport { Store } from \"antd/lib/form/interface\";\nimport RichText from \"../../components/FormComponents/XEditor\";\nimport FormItems from \"../../components/FormComponents/FormItems\";\nconst normFile = (e: any) => {\n  console.log(\"Upload event:\", e);\n  if (Array.isArray(e)) {\n    //待修改\n    return e;\n  }\n  return e && e.fileList;\n};\n\nconst { Option } = Select;\nconst { TextArea } = Input;\n\nconst formItemLayout = {\n  labelCol: { span: 6 },\n  wrapperCol: { span: 16 }\n};\n\ninterface FormEditorProps {\n  uid: string;\n  onSave: Function;\n  onDel: Function;\n  defaultValue: { [key: string]: any };\n  config: Array<any>;\n  rightPannelRef: RefObject<HTMLDivElement>;\n}\n\nconst FormEditor = (props: FormEditorProps) => {\n  const { config, defaultValue, onSave, uid, rightPannelRef } = props;\n  const onFinish = (values: Store) => {\n    onSave && onSave(values);\n  };\n\n  const [form] = Form.useForm();\n\n  useEffect(() => {\n    return () => {\n      form.resetFields();\n    };\n  }, [uid, form]);\n\n  const handlechange = () => {\n    onFinish(form.getFieldsValue());\n  };\n\n  return (\n    <Form\n      form={form}\n      name={`form_editor`}\n      {...formItemLayout}\n      onFinish={onFinish}\n      initialValues={defaultValue}\n      onValuesChange={handlechange}\n    >\n      {config.map((item, i) => {\n        return (\n          <React.Fragment key={i}>\n            {item.type === \"Number\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <InputNumber max={item.range && item.range[1]} />\n              </Form.Item>\n            )}\n            {item.type === \"Text\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <Input />\n              </Form.Item>\n            )}\n            {item.type === \"TextArea\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <TextArea rows={4} />\n              </Form.Item>\n            )}\n            {item.type === \"MutiText\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <MutiText />\n              </Form.Item>\n            )}\n            {item.type === \"DataList\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <DataList cropRate={item.cropRate} />\n              </Form.Item>\n            )}\n            {item.type === \"Color\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <Color />\n              </Form.Item>\n            )}\n\n            {item.type === \"Select\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <Select placeholder=\"请选择\">\n                  {item.range.map((v: any, i: number) => {\n                    return (\n                      <Option value={v.key} key={i}>\n                        {v.text}\n                      </Option>\n                    );\n                  })}\n                </Select>\n              </Form.Item>\n            )}\n            {item.type === \"Radio\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <Radio.Group>\n                  {item.range.map((v: any, i: number) => {\n                    return (\n                      <Radio value={v.key} key={i}>\n                        {v.text}\n                      </Radio>\n                    );\n                  })}\n                </Radio.Group>\n              </Form.Item>\n            )}\n            {item.type === \"Switch\" && (\n              <Form.Item\n                label={item.name}\n                name={item.key}\n                valuePropName=\"checked\"\n              >\n                <Switch />\n              </Form.Item>\n            )}\n            {item.type === \"Upload\" && (\n              <Form.Item\n                label={item.name}\n                name={item.key}\n                valuePropName=\"fileList\"\n                getValueFromEvent={normFile}\n              >\n                <Upload cropRate={item.cropRate} isCrop={item.isCrop} />\n              </Form.Item>\n            )}\n            {item.type === \"CardPicker\" && (\n              <Form.Item label={item.name} name={item.key} valuePropName=\"type\">\n                <CardPicker icons={item.icons} type={defaultValue[\"type\"]} />\n              </Form.Item>\n            )}\n            {item.type === \"Table\" && (\n              <Form.Item label={item.name} name={item.key} valuePropName=\"data\">\n                <Table data={item.data} />\n              </Form.Item>\n            )}\n            {item.type === \"Pos\" && (\n              <Form.Item label={item.name} name={item.key}>\n                <Pos />\n              </Form.Item>\n            )}\n            {item.type === \"FormItems\" && (\n              <Form.Item name={item.key} valuePropName=\"formList\">\n                <FormItems data={item.data} rightPannelRef={rightPannelRef} />\n              </Form.Item>\n            )}\n            {item.type === \"RichText\" && (\n              <Form.Item label={item.name} name={item.key} noStyle={true}>\n                <RichText />\n              </Form.Item>\n            )}\n          </React.Fragment>\n        );\n      })}\n    </Form>\n  );\n};\n\nexport default memo(FormEditor);\n"
  },
  {
    "path": "src/core/renderer/ViewRender.tsx",
    "content": "import React, { memo } from \"react\";\nimport GridLayout, { ItemCallback } from \"react-grid-layout\";\nimport DynamicEngine from \"@/core/DynamicEngine\";\nimport styles from \"./viewRender.less\";\n\ninterface PointDataItem {\n  id: string;\n  item: Record<string, any>;\n  point: Record<string, any>;\n}\n\ninterface ViewProps {\n  pointData: Array<PointDataItem>;\n  pageData?: any;\n  width?: number;\n  dragStop?: ItemCallback;\n  onDragStart?: ItemCallback;\n  onResizeStop?: ItemCallback;\n}\n\nconst ViewRender = memo((props: ViewProps) => {\n  const {\n    pointData,\n    pageData,\n    width,\n    dragStop,\n    onDragStart,\n    onResizeStop\n  } = props;\n\n  return (\n    <GridLayout\n      cols={24}\n      rowHeight={2}\n      width={width}\n      margin={[0, 0]}\n      onDragStop={dragStop}\n      onDragStart={onDragStart}\n      onResizeStop={onResizeStop}\n      style={{\n        minHeight: \"100vh\",\n        backgroundColor: pageData && pageData.bgColor,\n        backgroundImage:\n          pageData && pageData.bgImage\n            ? `url(${pageData.bgImage[0].url})`\n            : \"initial\",\n        backgroundSize: \"100%\",\n        backgroundRepeat: \"no-repeat\"\n      }}\n    >\n      {pointData.map((value: PointDataItem) => (\n        <div\n          key={value.id}\n          data-grid={value.point}\n          className={onDragStart && styles.dragItem}\n        >\n          <DynamicEngine {...(value.item as any)} isTpl={false} />\n        </div>\n      ))}\n    </GridLayout>\n  );\n});\n\nexport default ViewRender;\n"
  },
  {
    "path": "src/core/renderer/viewRender.less",
    "content": ".dragItem {\n  display: inline-block;\n  position: absolute;\n  z-index: 2;\n  border: 2px solid transparent;\n  cursor: move;\n  &:hover {\n    border: 2px solid #06c;\n  }\n  :global(a) {\n    display: block;\n    pointer-events: none;\n  }\n}\n"
  },
  {
    "path": "src/global.css",
    "content": "html, body, #root {\n  height: 100%;\n  overflow: hidden;\n}\n\nbody {\n  margin: 0;\n}\n\n:root {\n  --sk-size: 40px;\n  --sk-color: #06c;\n}\n\n.ant-btn-primary {\n  color: #fff;\n  background: #2F54EB !important;\n  border-color: #2F54EB !important;\n}\n\n.ant-btn.ant-btn-link {\n  color: #2F54EB !important;\n}\n\n.ant-btn-background-ghost.ant-btn-primary {\n  color: #2F54EB !important;\n  border-color: #2F54EB !important;\n}\n\n.ant-btn-link[disabled], .ant-btn-link[disabled]:active, .ant-btn-link[disabled]:focus, .ant-btn-link[disabled]:hover {\n  color: rgba(0,0,0,.25) !important;\n  background: transparent !important;\n  border-color: transparent !important;\n}\n\n.react-grid-item{\n  overflow: hidden;\n}\n.ant-tabs-left.editorTabclass \n.ant-tabs-nav , .ant-tabs-left.editorTabclass .ant-tabs-nav-list{\n  width: 40px!important;\n  min-width: 40px!important;\n}\n.ant-tabs-left.editorTabclass{\n  height: 100%;\n}\n\n.ant-tabs-left.editorTabclass > .ant-tabs-nav .ant-tabs-tab{\n  padding:20px 0px !important;\n \n}\n.ant-tabs-left.editorTabclass .ant-tabs-tab{\n  margin:auto!important;\n}\n.ant-tabs-left.editorTabclass .ant-tabs-tab   div{\n  display: inline-block;\n}\n.ant-tabs-left.editorTabclass .ant-tabs-content-holder{\n  overflow: auto;\n  padding:8px;\n}\n.ant-tabs-left.editorTabclass .ant-tabs-tabpane{\n  display: flex;\n  flex-wrap: wrap;\n  padding-left: 10px!important;\n  padding-right: 10px!important;\n  padding-bottom: 40px;\n}\n#form_editor {\n  margin-bottom: 100px;\n}\n#form_editor .ant-form-item-label > label {\n  position: fixed;\n  color: #4A4A4A;\n}\n#form_editor .ant-form-item-label {\n  text-align: start\n}\n#form_editor .ant-form-item-control {\n  text-align: end;\n}\n#form_editor .ant-form-item {\n  margin-bottom: 20px;\n}\n#form_editor .ant-input-number-handler-wrap {\n  width: 12px;\n}\n#form_editor .ant-input, #form_editor .ant-input-number,#form_editor .ant-select-selector {\n  background-color: #f6f6f6;\n  width: 160px;\n}\n#form_editor .ant-form-item .ant-select {\n  width: 87%;\n  text-align: center;\n}\n#form_editor .ant-radio-wrapper {\n  margin-right: 0;\n}\n#form_editor .ant-input-number {\n  width: 42px;\n  height: 24px;\n  border: 1px solid #DBDBDB;\n}\n#form_editor .ant-input-number-handler-down-inner  {\n  text-align: right;\n  transform: translateY(-50%) translateX(13%);\n}\n#form_editor .ant-input-number-handler-up-inner  {\n  text-align: right;\n  transform: translateY(-26%) translateX(15%);\n}\n#form_editor .ant-input-number-input  {\n  height: 20px;\n  line-height: 20px;\n  padding-left: 4px;\n}\n#form_editor .ant-form-item-control-input-content  {\n  line-height: 14px;\n}\n#form_editor .ant-form-item-label > label::after {\n  content: '';\n}\n#form_editor .za-cell:after {\n  border-top: 0px;\n}\n#form_editor .za-cell__content {\n  font-size: 14px;\n}\n#form_editor .za-select--arrow .za-select__input:after {\n  display: none;\n}\n#form_editor .ant-upload-list-picture-card-container {\n  display: flex;\n  margin-left: 30px;\n}\n\nimg {\n  -webkit-user-drag: none;\n}\n\n.rotate-animate {\n  margin: 100px auto;\n  border:16px solid #f3f3f3;\n  border-radius:50%;\n  border-top:16px solid #2842d8;\n  width:130px;\n  height:130px;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  animation:rotate 2s linear infinite;\n  font-size: 12px;\n}\n@keyframes rotate{\n  0%{\n      transform: rotate(0deg);\n  }\n  100%{\n      transform:rotate(360deg);\n  }\n}\n\n@import '~react-grid-layout/css/styles.css'; \n@import '~react-resizable/css/styles.css';\n@import '~zarm/dist/zarm.min.css';\n\n@import '~codemirror/lib/codemirror.css';\n@import '~codemirror/theme/material.css';\n"
  },
  {
    "path": "src/layouts/index.less",
    "content": ".dragPay {\n  position: absolute;\n  z-index: 99999;\n  left: 462px;\n  bottom: 56px;\n  border-radius: 20px;\n  background: #ffffff;\n  border: 5px solid #2f54eb;\n  padding: 5px;\n  cursor: pointer;\n  .crouseBtn {\n    font-size: 12px;\n  }\n  .mask {\n    position: absolute;\n    z-index: 10;\n    left: 50%;\n    transform: translate(-50%, -130%);\n    padding: 10px;\n    border-radius: 10px;\n    box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\n    animation: toShake 2s infinite;\n    img {\n      width: 150px;\n    }\n  }\n\n  @keyframes toShake {\n    50% {\n      transform: translate(-50%, -140%);\n    }\n    100% {\n      transform: translate(-50%, -130%);\n    }\n  }\n}\n"
  },
  {
    "path": "src/layouts/index.tsx",
    "content": "import React, { useCallback, useState, useEffect } from \"react\";\nimport {\n  library,\n  generateRespones,\n  RenderList,\n  useRegister\n} from \"chatbot-antd\";\nimport { IRouteComponentProps, history } from \"umi\";\nimport { Button, Modal } from \"antd\";\nimport { CustomerServiceOutlined } from \"@ant-design/icons\";\nimport Draggable from \"react-draggable\";\nimport Dooring from \"@/assets/dooring.png\";\nimport styles from \"./index.less\";\n\nlibrary.push(\n  //语料库，push进去，也可以不用\n  {\n    text: \"我是机器人\",\n    reg: \"你是谁\"\n  },\n  {\n    text: (\n      <div>\n        <a href=\"https://github.com/MrXujiang\">@徐小夕</a>\n        <a href=\"https://github.com/yehuozhili/learnsinglespa\">@yehuozhili</a>\n      </div>\n    ),\n    useReg: /(.*?)作者是谁(.*?)/\n  }\n);\n\nexport default function Layout({ children }: IRouteComponentProps) {\n  const [modalOpen, setModalOpen] = useState(false);\n  const callb = useCallback((v: RenderList) => {\n    setTimeout(() => {\n      //使用settimeout 更像机器人回话\n      let returnValue = generateRespones(v);\n      if (returnValue) {\n        //排除null\n        setList(prev => [...prev, { isUser: false, text: returnValue }]);\n      }\n    }, 500);\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  const handleDeploy = () => {\n    window.open(\"http://h5.dooring.cn/uploads/WechatIMG3_1758e9753e2.jpeg\");\n  };\n  // 注册\n  const [render, setList] = useRegister(\n    modalOpen,\n    callb,\n    {\n      onOk: () => setModalOpen(false),\n      onCancel: () => setModalOpen(false),\n      title: \"h5-Dooring机器人客服\",\n      width: 420\n    },\n    {},\n    <div>\n      welcome!欢迎使用h5-Dooring，你有任何问题，都可以咨询我哦～\n      <div\n        style={{\n          paddingTop: \"10px\",\n          marginTop: \"10px\",\n          borderTop: \"1px solid #f0f0f0\"\n        }}\n      >\n        <div>【dooring指南】</div>\n        <div>\n          <div>\n            &nbsp;&nbsp;1.{\" \"}\n            <a href=\"https://github.com/MrXujiang/h5-Dooring\" target=\"_blank\">\n              H5-Dooring源码地址\n            </a>\n          </div>\n          <div>\n            &nbsp;&nbsp;2.{\" \"}\n            <a\n              href=\"https://github.com/MrXujiang/h5-Dooring/graphs/contributors\"\n              target=\"_blank\"\n            >\n              贡献者列表\n            </a>\n          </div>\n          <div>\n            &nbsp;&nbsp;3. 如果复制/删除组件不生效, 请先点击需要复制/删除组件,\n            再右键删除/复制\n          </div>\n          <div style={{ color: \"red\" }}>\n            &nbsp;&nbsp;4. 如果二维码组件无法扫码, 请适当调小中间图标尺寸\n          </div>\n          <div style={{ fontSize: \"12px\" }}>\n            &nbsp;&nbsp;5. dooring开源交流群(微信：Mr_xuxiaoxi)\n          </div>\n          <div style={{ fontSize: \"12px\", marginTop: \"10px\" }}>\n            &nbsp;&nbsp;\n            <Button type=\"primary\" onClick={handleDeploy}>\n              私有化部署\n            </Button>\n          </div>\n        </div>\n      </div>\n    </div>\n  );\n\n  useEffect(() => {\n    setInterval(() => {\n      const timeout = +localStorage.getItem(\"tt\");\n      if (timeout && timeout < Date.now()) {\n        localStorage.removeItem(\"tt\");\n        Modal.info({\n          title: \"Dooring温馨提示\",\n          content: <div>您的登录已过期, 请点击确认按钮重新登录</div>,\n          okText: \"确认\",\n          onOk() {\n            localStorage.removeItem(\"rp\");\n            localStorage.removeItem(\"nickname\");\n            history.push(\"/login\");\n          }\n        });\n      }\n    }, 1000 * 15);\n  }, []);\n\n  const showVideo = () => {\n    Modal.info({\n      title: \"秒懂H5-Dooring\",\n      width: 860,\n      zIndex: 100000,\n      content: (\n        <div style={{ height: 380 }}>\n          <iframe\n            style={{ width: \"100%\", height: \"100%\" }}\n            src=\"//player.bilibili.com/player.html?isOutside=true&aid=113028657906637&bvid=BV1shsJeDEZh&cid=500001663189447&p=1\"\n            scrolling=\"no\"\n            border=\"0\"\n            frameborder=\"no\"\n            framespacing=\"0\"\n            allowfullscreen=\"true\"\n          >\n            {\" \"}\n          </iframe>\n        </div>\n      ),\n      okText: \"GET, 关闭\",\n      onOk() {}\n    });\n  };\n\n  const hackCodeStyle =\n    window.location.pathname.indexOf(\"preview\") < 0\n      ? { height: \"100%\" }\n      : { height: \"100%\", overflow: \"auto\" };\n  return (\n    <div style={hackCodeStyle}>\n      <div\n        style={{\n          position: \"fixed\",\n          right: `${modalOpen ? \"-100%\" : \"10px\"}`,\n          bottom: \"16px\",\n          transition: \"all 0.5s ease-in-out\",\n          zIndex: 2\n        }}\n      >\n        <Button\n          type=\"primary\"\n          style={{ padding: \"0 6px\" }}\n          onClick={() => setModalOpen(!modalOpen)}\n        >\n          <CustomerServiceOutlined></CustomerServiceOutlined>\n        </Button>\n      </div>\n      {render}\n      {children}\n      {window.location.pathname.indexOf(\"editor\") > -1 && (\n        <Draggable>\n          <div className={styles.dragPay}>\n            <div className={styles.crouseBtn}>搭建技巧(可拖动)</div>\n            <div className={styles.mask} onClick={showVideo}>\n              <img src={Dooring} alt=\"\" />\n            </div>\n          </div>\n        </Draggable>\n      )}\n    </div>\n  );\n}\n"
  },
  {
    "path": "src/materials/base/Carousel/index.less",
    "content": ".carousel__item__pic {\n  display: inline-block;\n  width: 100%;\n  max-height: 220px;\n  overflow: hidden;\n  vertical-align: top;\n  img {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/materials/base/Carousel/index.tsx",
    "content": "import React, { memo, PropsWithChildren } from \"react\";\nimport { Carousel } from \"zarm\";\nimport styles from \"./index.less\";\nimport { ICarouselConfig } from \"./schema\";\nimport logo from \"@/assets/banner.png\";\n\ninterface CarouselTypes extends ICarouselConfig {\n  isTpl: boolean;\n}\n\nconst XCarousel = memo((props: PropsWithChildren<CarouselTypes>) => {\n  const { direction, swipeable, autoPlay, isTpl, imgList, round } = props;\n  const contentRender = () => {\n    return imgList.map((item, i) => {\n      return (\n        <div\n          className={styles.carousel__item__pic}\n          key={+i}\n          style={{ borderRadius: round + \"px\" }}\n        >\n          <a href={item.link}>\n            <img\n              src={item.imgUrl.length > 0 ? item.imgUrl[0].url : \"\"}\n              alt=\"\"\n            />\n          </a>\n        </div>\n      );\n    });\n  };\n  return (\n    <div style={{ width: \"100%\", overflow: \"hidden\" }}>\n      {isTpl ? (\n        <div className={styles.carousel__item__pic}>\n          <img src={logo} alt=\"\" />\n        </div>\n      ) : (\n        <Carousel\n          onChange={index => {\n            // console.log(`onChange: ${index}`);\n          }}\n          direction={direction}\n          swipeable={swipeable}\n          autoPlay={autoPlay}\n          loop\n        >\n          {contentRender()}\n        </Carousel>\n      )}\n    </div>\n  );\n});\n\nexport default XCarousel;\n"
  },
  {
    "path": "src/materials/base/Carousel/schema.ts",
    "content": "import {\n  IDataListConfigType,\n  IRadioConfigType,\n  ISwitchConfigType,\n  INumberConfigType,\n  TDataListDefaultType,\n  TRadioDefaultType,\n  TSwitchDefaultType,\n  TNumberDefaultType\n} from \"@/components/FormComponents/types\";\n\nimport { serverUrl } from \"@/utils/tool\";\n\nexport type CarouselDirectionKeyType = \"down\" | \"left\";\n\nexport type TCarouselEditData = Array<\n  | IRadioConfigType<CarouselDirectionKeyType>\n  | ISwitchConfigType\n  | IDataListConfigType\n  | INumberConfigType\n>;\nexport interface ICarouselConfig {\n  direction: TRadioDefaultType<CarouselDirectionKeyType>;\n  swipeable: TSwitchDefaultType;\n  autoPlay: TSwitchDefaultType;\n  imgList: TDataListDefaultType;\n  tplImg: string;\n  round: TNumberDefaultType;\n}\n\nexport interface ICarouselSchema {\n  editData: TCarouselEditData;\n  config: ICarouselConfig;\n}\n\nconst Carousel: ICarouselSchema = {\n  editData: [\n    {\n      key: \"direction\",\n      name: \"方向\",\n      type: \"Radio\",\n      range: [\n        {\n          key: \"down\",\n          text: \"从上到下\"\n        },\n        {\n          key: \"left\",\n          text: \"从左到右\"\n        }\n      ]\n    },\n    {\n      key: \"swipeable\",\n      name: \"是否可拖拽\",\n      type: \"Switch\"\n    },\n    {\n      key: \"round\",\n      name: \"圆角\",\n      type: \"Number\"\n    },\n    {\n      key: \"autoPlay\",\n      name: \"是否自动播放\",\n      type: \"Switch\"\n    },\n    {\n      key: \"imgList\",\n      name: \"图片列表\",\n      type: \"DataList\"\n    }\n  ],\n  config: {\n    direction: \"left\",\n    swipeable: false,\n    round: 0,\n    autoPlay: false,\n    imgList: [\n      {\n        id: \"1\",\n        title: \"趣谈小课1\",\n        desc: \"致力于打造优质小课程\",\n        link: \"xxxxx\",\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: `${serverUrl}/uploads/1_1740bd7c3dc.png`\n          }\n        ]\n      },\n      {\n        id: \"2\",\n        title: \"趣谈小课1\",\n        desc: \"致力于打造优质小课程\",\n        link: \"xxxxx\",\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: `${serverUrl}/uploads/2_1740bd8d525.png`\n          }\n        ]\n      }\n    ],\n    tplImg: `${serverUrl}/uploads/carousal_17442e1420f.png`\n  }\n};\nexport default Carousel;\n"
  },
  {
    "path": "src/materials/base/Carousel/template.ts",
    "content": "const template = {\n  type: \"Carousel\",\n  h: 82,\n  displayName: \"轮播图组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Form/BaseForm.tsx",
    "content": "import { Input, Cell, DateSelect, Radio, Select, Checkbox } from \"zarm\";\nimport styles from \"./baseForm.less\";\nimport React, { ReactText, useState } from \"react\";\nimport {\n  baseFormDateTpl,\n  baseFormMyRadioTpl,\n  baseFormMyCheckboxTpl,\n  baseFormMySelectTpl,\n  baseFormNumberTpl,\n  baseFormTextAreaTpl,\n  baseFormTextTpl,\n  baseFormTextTipTpl,\n  baseFormUnionType\n} from \"@/components/PanelComponents/FormEditor/types\";\nimport { formatTime } from \"@/utils/tool\";\n// 维护表单控件， 提高form渲染性能\n\ntype TBaseForm = {\n  [key in baseFormUnionType]: any;\n};\n\nconst BaseForm: TBaseForm = {\n  Text: (\n    props: baseFormTextTpl & { onChange: (v: string | undefined) => void }\n  ) => {\n    const { label, placeholder, onChange } = props;\n    return (\n      <Cell title={label}>\n        <Input\n          clearable\n          type=\"text\"\n          placeholder={placeholder}\n          onChange={onChange}\n        />\n      </Cell>\n    );\n  },\n  Textarea: (\n    props: baseFormTextAreaTpl & { onChange: (v: string | undefined) => void }\n  ) => {\n    const { label, placeholder, onChange } = props;\n    return (\n      <Cell title={label}>\n        <Input\n          type=\"text\"\n          rows={3}\n          autoHeight\n          showLength\n          placeholder={placeholder}\n          onChange={onChange}\n        />\n      </Cell>\n    );\n  },\n  Number: (\n    props: baseFormNumberTpl & {\n      onChange: (v: string | undefined | number) => void;\n    }\n  ) => {\n    const { label, placeholder, onChange } = props;\n    return (\n      <Cell title={label}>\n        <Input type=\"number\" placeholder={placeholder} onChange={onChange} />\n      </Cell>\n    );\n  },\n  MyRadio: (\n    props: baseFormMyRadioTpl & {\n      onChange: (v: string | undefined | number) => void;\n    }\n  ) => {\n    const { label, options, onChange } = props;\n    return (\n      <div className={styles.radioWrap}>\n        <div className={styles.radioTitle}>{label}</div>\n        <Cell>\n          <Radio.Group onChange={onChange}>\n            {options.map((item, i) => {\n              return (\n                <Radio value={item.value} key={i} className={styles.radioItem}>\n                  {item.label}\n                </Radio>\n              );\n            })}\n          </Radio.Group>\n        </Cell>\n      </div>\n    );\n  },\n  MyCheckbox: (\n    props: baseFormMyCheckboxTpl & {\n      onChange: (v: Array<ReactText> | undefined) => void;\n    }\n  ) => {\n    const { label, options, onChange } = props;\n    return (\n      <div className={styles.radioWrap}>\n        <div className={styles.radioTitle}>{label}</div>\n        <Cell>\n          <Checkbox.Group onChange={onChange}>\n            {options.map((item, i) => {\n              return (\n                <Checkbox\n                  value={item.value}\n                  key={i}\n                  className={styles.radioItem}\n                >\n                  {item.label}\n                </Checkbox>\n              );\n            })}\n          </Checkbox.Group>\n        </Cell>\n      </div>\n    );\n  },\n  Date: (props: baseFormDateTpl & { onChange: (v: Date) => void }) => {\n    const { label, placeholder, onChange } = props;\n    const [value, setValue] = useState<any>(\"\");\n    const handleChange = (v: any) => {\n      setValue(v);\n      onChange && onChange(formatTime(\"yyyy-MM-dd\", v));\n    };\n    return (\n      <Cell title={label}>\n        <DateSelect\n          placeholder={placeholder}\n          mode=\"date\"\n          min=\"1949-05-15\"\n          max=\"2100-05-15\"\n          value={value}\n          onOk={handleChange}\n        />\n      </Cell>\n    );\n  },\n  MySelect: (\n    props: baseFormMySelectTpl & {\n      onChange: ((v: Record<string, any>) => void) | undefined;\n    }\n  ) => {\n    const { label, options, onChange } = props;\n    return (\n      <Cell title={label}>\n        <Select dataSource={options} onOk={onChange} />\n      </Cell>\n    );\n  },\n  MyTextTip: (props: baseFormTextTipTpl) => {\n    const { label, color, fontSize } = props;\n    return <Cell title={<div style={{ color, fontSize }}>{label}</div>}></Cell>;\n  }\n};\n\nexport default BaseForm;\n"
  },
  {
    "path": "src/materials/base/Form/BasePopoverForm.tsx",
    "content": "import React, { ReactText } from \"react\";\nimport { Button } from \"antd\";\nimport {\n  baseFormDateTpl,\n  baseFormMyRadioTpl,\n  baseFormMyCheckboxTpl,\n  baseFormMySelectTpl,\n  baseFormNumberTpl,\n  baseFormTextAreaTpl,\n  baseFormTextTpl,\n  baseFormTextTipTpl,\n  baseFormUnionType\n} from \"@/components/PanelComponents/FormEditor/types\";\n\n// 维护表单控件， 提高form渲染性能\n\ntype TBaseForm = {\n  [key in baseFormUnionType]: any;\n};\n\nconst BaseForm: TBaseForm = {\n  Text: (\n    props: baseFormTextTpl & { onChange: (v: string | undefined) => void }\n  ) => {\n    const { label, onChange } = props;\n    return (\n      <Button\n        style={{\n          color: \"#fff\",\n          backgroundColor: \"#4A4A4A\",\n          borderRadius: \"2px\",\n          lineHeight: \"0px\"\n        }}\n        onChange={() => onChange}\n      >\n        {label}\n      </Button>\n    );\n  },\n  Textarea: (\n    props: baseFormTextAreaTpl & { onChange: (v: string | undefined) => void }\n  ) => {\n    const { label, onChange } = props;\n    return (\n      <Button\n        style={{ color: \"#fff\", backgroundColor: \"#4A4A4A\" }}\n        onChange={() => onChange}\n      >\n        {label}\n      </Button>\n    );\n  },\n  Number: (\n    props: baseFormNumberTpl & {\n      onChange: (v: string | undefined | number) => void;\n    }\n  ) => {\n    const { label, onChange } = props;\n    return (\n      <Button\n        style={{ color: \"#fff\", backgroundColor: \"#4A4A4A\" }}\n        onChange={() => onChange}\n      >\n        {label}\n      </Button>\n    );\n  },\n  MyRadio: (\n    props: baseFormMyRadioTpl & {\n      onChange: (v: string | undefined | number) => void;\n    }\n  ) => {\n    const { label, onChange } = props;\n    return (\n      <Button\n        style={{ color: \"#fff\", backgroundColor: \"#4A4A4A\" }}\n        onChange={() => onChange}\n      >\n        {label}\n      </Button>\n    );\n  },\n  MyCheckbox: (\n    props: baseFormMyCheckboxTpl & {\n      onChange: (v: Array<ReactText> | undefined) => void;\n    }\n  ) => {\n    const { label, onChange } = props;\n    return (\n      <div>\n        <Button\n          style={{ color: \"#fff\", backgroundColor: \"#4A4A4A\" }}\n          onChange={() => onChange}\n        >\n          {label}\n        </Button>\n      </div>\n    );\n  },\n  Date: (props: baseFormDateTpl & { onChange: (v: Date) => void }) => {\n    const { label, onChange } = props;\n    return (\n      <Button\n        style={{ color: \"#fff\", backgroundColor: \"#4A4A4A\" }}\n        onChange={() => onChange}\n      >\n        {label}\n      </Button>\n    );\n  },\n  MySelect: (\n    props: baseFormMySelectTpl & {\n      onChange: ((v: Record<string, any>) => void) | undefined;\n    }\n  ) => {\n    const { label, onChange } = props;\n    return (\n      <Button\n        style={{ color: \"#fff\", backgroundColor: \"#4A4A4A\" }}\n        onChange={() => onChange}\n      >\n        {label}\n      </Button>\n    );\n  },\n  MyTextTip: (props: baseFormTextTipTpl) => {\n    const { label } = props;\n    return (\n      <Button\n        style={{\n          color: \"#fff\",\n          backgroundColor: \"#4A4A4A\",\n          borderRadius: \"2px\",\n          lineHeight: \"0px\"\n        }}\n      >\n        {label}\n      </Button>\n    );\n  }\n};\n\nexport default BaseForm;\n"
  },
  {
    "path": "src/materials/base/Form/baseForm.less",
    "content": ".radioWrap {\n  margin-bottom: 10px;\n  .radioTitle {\n    padding: 19px 14px;\n  }\n  .radioItem {\n    margin-top: 10px;\n  }\n}\n"
  },
  {
    "path": "src/materials/base/Form/index.less",
    "content": ".formWrap {\n  margin: 10px;\n  padding: 20px 16px;\n  border-radius: 6px;\n  background-color: #fff;\n  box-shadow: 0 2px 6px #f0f0f0;\n  width: calc(100% - 20px);\n  .title {\n    padding-bottom: 20px;\n    text-align: center;\n    // font-size: 18px;\n  }\n}\n"
  },
  {
    "path": "src/materials/base/Form/index.tsx",
    "content": "import React, { memo, useCallback } from \"react\";\nimport { Button } from \"zarm\";\nimport BaseForm from \"./BaseForm\";\nimport styles from \"./index.less\";\nimport { IFormConfig } from \"./schema\";\nimport logo from \"@/assets/form.png\";\nconst FormComponent = (props: IFormConfig & { isTpl: boolean }) => {\n  const {\n    title,\n    bgColor,\n    fontSize,\n    titColor,\n    btnColor,\n    titWeight,\n    btnTextColor,\n    api,\n    formControls\n  } = props;\n  const formData: Record<string, any> = {};\n  const handleChange = useCallback(\n    (item, v) => {\n      formData[item.label] = v;\n    },\n    [formData]\n  );\n  const handleSubmit = () => {\n    if (api) {\n      fetch(api, {\n        body: JSON.stringify(formData),\n        cache: \"no-cache\",\n        headers: {\n          \"content-type\": \"application/json\"\n        },\n        method: \"POST\",\n        mode: \"cors\"\n      });\n    }\n  };\n\n  const isEditorPage = window.location.pathname.indexOf(\"editor\") > -1;\n  return (\n    <>\n      {props.isTpl && (\n        <div>\n          <img src={logo} alt=\"\" />\n        </div>\n      )}\n      {!props.isTpl && (\n        <div\n          className={styles.formWrap}\n          style={{\n            backgroundColor: bgColor,\n            overflow: \"hidden\",\n            position: \"absolute\",\n            pointerEvents: isEditorPage ? \"none\" : \"initial\"\n          }}\n        >\n          {title && (\n            <div\n              className={styles.title}\n              style={{ fontSize, fontWeight: +titWeight, color: titColor }}\n            >\n              {title}\n            </div>\n          )}\n          <div className={styles.formContent}>\n            {formControls.map(item => {\n              const FormItem = BaseForm[item.type];\n              return (\n                <FormItem\n                  onChange={(v: string) => handleChange(item, v)}\n                  {...item}\n                  key={item.id}\n                />\n              );\n            })}\n            <div style={{ textAlign: \"center\", padding: \"16px 0\" }}>\n              <Button\n                theme=\"primary\"\n                size=\"sm\"\n                block\n                onClick={handleSubmit}\n                style={{\n                  backgroundColor: btnColor,\n                  borderColor: btnColor,\n                  color: btnTextColor\n                }}\n              >\n                提交\n              </Button>\n            </div>\n          </div>\n        </div>\n      )}\n    </>\n  );\n};\n\nexport default memo(FormComponent);\n"
  },
  {
    "path": "src/materials/base/Form/schema.ts",
    "content": "import {\n  IColorConfigType,\n  IFormItemsConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TFormItemsDefaultType,\n  TNumberDefaultType,\n  TSelectDefaultType,\n  ISelectConfigType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TTextWeightSelectKeyType = \"300\" | \"400\" | \"500\" | \"600\";\n\nexport type TFormEditData = Array<\n  | ITextConfigType\n  | INumberConfigType\n  | IColorConfigType\n  | ITextConfigType\n  | IFormItemsConfigType\n  | ISelectConfigType<TTextWeightSelectKeyType>\n>;\nexport interface IFormConfig {\n  title: TTextDefaultType;\n  fontSize: TNumberDefaultType;\n  titColor: TColorDefaultType;\n  titWeight: TSelectDefaultType<TTextWeightSelectKeyType>;\n  bgColor: TColorDefaultType;\n  btnColor: TColorDefaultType;\n  btnTextColor: TColorDefaultType;\n  api: TTextDefaultType;\n  formControls: TFormItemsDefaultType;\n}\n\nexport interface IFormSchema {\n  editData: TFormEditData;\n  config: IFormConfig;\n}\n\nconst Form: IFormSchema = {\n  editData: [\n    {\n      key: \"title\",\n      name: \"标题\",\n      type: \"Text\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"titColor\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"titWeight\",\n      name: \"标题粗细\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"300\",\n          text: \"300 x 300\"\n        },\n        {\n          key: \"400\",\n          text: \"400 x 400\"\n        },\n        {\n          key: \"500\",\n          text: \"500 x 500\"\n        },\n        {\n          key: \"600\",\n          text: \"600 x 600\"\n        }\n      ]\n    },\n    {\n      key: \"bgColor\",\n      name: \"背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"btnColor\",\n      name: \"按钮颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"btnTextColor\",\n      name: \"按钮文本颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"api\",\n      name: \"表单Api地址\",\n      type: \"Text\"\n    },\n    {\n      key: \"formControls\",\n      name: \"表单控件\",\n      type: \"FormItems\"\n    }\n  ],\n  config: {\n    title: \"表单定制组件\",\n    fontSize: 18,\n    titColor: \"rgba(60,60,60,1)\",\n    titWeight: \"400\",\n    bgColor: \"rgba(255,255,255,1)\",\n    btnColor: \"rgba(20,54,226,100)\",\n    btnTextColor: \"rgba(255,255,255,1)\",\n    api: \"\",\n    formControls: [\n      {\n        id: \"1\",\n        type: \"Text\",\n        label: \"姓名\",\n        placeholder: \"请输入姓名\"\n      },\n      {\n        id: \"2\",\n        type: \"Number\",\n        label: \"年龄\",\n        placeholder: \" 请输入年龄\"\n      },\n      {\n        id: \"4\",\n        type: \"MySelect\",\n        label: \"爱好\",\n        options: [\n          { label: \"篮球\", value: \"1\" },\n          { label: \"乒乓球\", value: \"2\" },\n          { label: \"健身\", value: \"3\" }\n        ]\n      }\n    ]\n  }\n};\nexport default Form;\n"
  },
  {
    "path": "src/materials/base/Form/template.ts",
    "content": "const template = {\n  type: \"Form\",\n  h: 172,\n  displayName: \"表格组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Header/index.less",
    "content": ".header {\n  box-sizing: content-box;\n  padding: 3px 12px;\n  display: flex;\n  align-items: center;\n  height: 50px;\n  background-color: #000;\n  .logo {\n    margin-right: 10px;\n    max-width: 160px;\n    max-height: 46px;\n    height: 46px;\n    overflow: hidden;\n    img {\n      height: 100%;\n      object-fit: contain;\n    }\n  }\n  .title {\n    // font-size: 20px;\n    color: #fff;\n  }\n}\n"
  },
  {
    "path": "src/materials/base/Header/index.tsx",
    "content": "import { memo } from \"react\";\nimport styles from \"./index.less\";\nimport React from \"react\";\nimport { IHeaderConfig } from \"./schema\";\nimport logos from \"@/assets/header.png\";\nconst Header = memo((props: IHeaderConfig) => {\n  const { bgColor, logo, logoText, fontSize, color } = props;\n  return (\n    <>\n      {props.isTpl && (\n        <div>\n          <img src={logos} alt=\"\" />\n        </div>\n      )}\n      {!props.isTpl && (\n        <header\n          className={styles.header}\n          style={{\n            backgroundColor: bgColor,\n            overflow: \"hidden\",\n            position: \"absolute\",\n            width: `${props.baseWidth}%`,\n            height: `${props.baseHeight}%`,\n            borderRadius: props.baseRadius,\n            transform: `translate(${props.baseLeft}px,${props.baseTop}px) \n        scale(${props.baseScale / 100}) \n        rotate(${props.baseRotate}deg)`\n          }}\n        >\n          <div className={styles.logo}>\n            <img src={logo && logo[0].url} alt={logoText} />\n          </div>\n          <div className={styles.title} style={{ fontSize, color }}>\n            {logoText}\n          </div>\n        </header>\n      )}\n    </>\n  );\n});\n\nexport default Header;\n"
  },
  {
    "path": "src/materials/base/Header/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  IUploadConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType,\n  TUploadDefaultType\n} from \"@/components/FormComponents/types\";\nimport { baseConfig, baseDefault, ICommonBaseType } from \"../../common\";\n\nexport type THeaderEditData = Array<\n  IColorConfigType | INumberConfigType | IUploadConfigType | ITextConfigType\n>;\nexport interface IHeaderConfig extends ICommonBaseType {\n  bgColor: TColorDefaultType;\n  logo: TUploadDefaultType;\n  logoText: TTextDefaultType;\n  fontSize: TNumberDefaultType;\n  color: TColorDefaultType;\n  height: TNumberDefaultType;\n}\n\nexport interface IHeaderSchema {\n  editData: THeaderEditData;\n  config: IHeaderConfig;\n}\n\nconst Header: IHeaderSchema = {\n  editData: [\n    ...baseConfig,\n    {\n      key: \"bgColor\",\n      name: \"背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"height\",\n      name: \"高度\",\n      type: \"Number\"\n    },\n    {\n      key: \"logo\",\n      name: \"logo\",\n      type: \"Upload\",\n      isCrop: true,\n      cropRate: 1000 / 618\n    },\n    {\n      key: \"logoText\",\n      name: \"logo文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    bgColor: \"rgba(0,0,0,1)\",\n    logo: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: \"http://49.234.61.19/uploads/3_1740be8a482.png\"\n      }\n    ],\n    logoText: \"页头Header\",\n    fontSize: 20,\n    color: \"rgba(255,255,255,1)\",\n    height: 50,\n    ...baseDefault\n  }\n};\n\nexport default Header;\n"
  },
  {
    "path": "src/materials/base/Header/template.ts",
    "content": "const template = {\n  type: \"Header\",\n  h: 28,\n  displayName: \"页头组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Icon/icon.ts",
    "content": "export type AntdIconType =\n  | \"max\"\n  | \"required\"\n  | \"default\"\n  | \"high\"\n  | \"low\"\n  | \"disabled\"\n  | \"start\"\n  | \"open\"\n  | \"media\"\n  | \"hidden\"\n  | \"cite\"\n  | \"data\"\n  | \"dir\"\n  | \"form\"\n  | \"label\"\n  | \"slot\"\n  | \"span\"\n  | \"style\"\n  | \"summary\"\n  | \"title\"\n  | \"pattern\"\n  | \"async\"\n  | \"defer\"\n  | \"manifest\"\n  | \"color\"\n  | \"content\"\n  | \"size\"\n  | \"wrap\"\n  | \"multiple\"\n  | \"height\"\n  | \"rotate\"\n  | \"translate\"\n  | \"width\"\n  | \"prefix\"\n  | \"src\"\n  | \"children\"\n  | \"key\"\n  | \"list\"\n  | \"step\"\n  | \"aria-label\"\n  | \"spin\"\n  | \"accept\"\n  | \"acceptCharset\"\n  | \"action\"\n  | \"allowFullScreen\"\n  | \"allowTransparency\"\n  | \"alt\"\n  | \"as\"\n  | \"autoComplete\"\n  | \"autoFocus\"\n  | \"autoPlay\"\n  | \"capture\"\n  | \"cellPadding\"\n  | \"cellSpacing\"\n  | \"charSet\"\n  | \"challenge\"\n  | \"checked\"\n  | \"classID\"\n  | \"cols\"\n  | \"colSpan\"\n  | \"controls\"\n  | \"coords\"\n  | \"crossOrigin\"\n  | \"dateTime\"\n  | \"download\"\n  | \"encType\"\n  | \"formAction\"\n  | \"formEncType\"\n  | \"formMethod\"\n  | \"formNoValidate\"\n  | \"formTarget\"\n  | \"frameBorder\"\n  | \"headers\"\n  | \"href\"\n  | \"hrefLang\"\n  | \"htmlFor\"\n  | \"httpEquiv\"\n  | \"integrity\"\n  | \"keyParams\"\n  | \"keyType\"\n  | \"kind\"\n  | \"loop\"\n  | \"marginHeight\"\n  | \"marginWidth\"\n  | \"maxLength\"\n  | \"mediaGroup\"\n  | \"method\"\n  | \"min\"\n  | \"minLength\"\n  | \"muted\"\n  | \"name\"\n  | \"nonce\"\n  | \"noValidate\"\n  | \"optimum\"\n  | \"placeholder\"\n  | \"playsInline\"\n  | \"poster\"\n  | \"preload\"\n  | \"readOnly\"\n  | \"rel\"\n  | \"reversed\"\n  | \"rows\"\n  | \"rowSpan\"\n  | \"sandbox\"\n  | \"scope\"\n  | \"scoped\"\n  | \"scrolling\"\n  | \"seamless\"\n  | \"selected\"\n  | \"shape\"\n  | \"sizes\"\n  | \"srcDoc\"\n  | \"srcLang\"\n  | \"srcSet\"\n  | \"target\"\n  | \"type\"\n  | \"useMap\"\n  | \"value\"\n  | \"wmode\"\n  | \"defaultChecked\"\n  | \"defaultValue\"\n  | \"suppressContentEditableWarning\"\n  | \"suppressHydrationWarning\"\n  | \"accessKey\"\n  | \"className\"\n  | \"contentEditable\"\n  | \"contextMenu\"\n  | \"draggable\"\n  | \"id\"\n  | \"lang\"\n  | \"spellCheck\"\n  | \"tabIndex\"\n  | \"radioGroup\"\n  | \"role\"\n  | \"about\"\n  | \"datatype\"\n  | \"inlist\"\n  | \"property\"\n  | \"resource\"\n  | \"typeof\"\n  | \"vocab\"\n  | \"autoCapitalize\"\n  | \"autoCorrect\"\n  | \"autoSave\"\n  | \"itemProp\"\n  | \"itemScope\"\n  | \"itemType\"\n  | \"itemID\"\n  | \"itemRef\"\n  | \"results\"\n  | \"security\"\n  | \"unselectable\"\n  | \"inputMode\"\n  | \"is\"\n  | \"aria-activedescendant\"\n  | \"aria-atomic\"\n  | \"aria-autocomplete\"\n  | \"aria-busy\"\n  | \"aria-checked\"\n  | \"aria-colcount\"\n  | \"aria-colindex\"\n  | \"aria-colspan\"\n  | \"aria-controls\"\n  | \"aria-current\"\n  | \"aria-describedby\"\n  | \"aria-details\"\n  | \"aria-disabled\"\n  | \"aria-dropeffect\"\n  | \"aria-errormessage\"\n  | \"aria-expanded\"\n  | \"aria-flowto\"\n  | \"aria-grabbed\"\n  | \"aria-haspopup\"\n  | \"aria-hidden\"\n  | \"aria-invalid\"\n  | \"aria-keyshortcuts\"\n  | \"aria-labelledby\"\n  | \"aria-level\"\n  | \"aria-live\"\n  | \"aria-modal\"\n  | \"aria-multiline\"\n  | \"aria-multiselectable\"\n  | \"aria-orientation\"\n  | \"aria-owns\"\n  | \"aria-placeholder\"\n  | \"aria-posinset\"\n  | \"aria-pressed\"\n  | \"aria-readonly\"\n  | \"aria-relevant\"\n  | \"aria-required\"\n  | \"aria-roledescription\"\n  | \"aria-rowcount\"\n  | \"aria-rowindex\"\n  | \"aria-rowspan\"\n  | \"aria-selected\"\n  | \"aria-setsize\"\n  | \"aria-sort\"\n  | \"aria-valuemax\"\n  | \"aria-valuemin\"\n  | \"aria-valuenow\"\n  | \"aria-valuetext\"\n  | \"dangerouslySetInnerHTML\"\n  | \"onCopy\"\n  | \"onCopyCapture\"\n  | \"onCut\"\n  | \"onCutCapture\"\n  | \"onPaste\"\n  | \"onPasteCapture\"\n  | \"onCompositionEnd\"\n  | \"onCompositionEndCapture\"\n  | \"onCompositionStart\"\n  | \"onCompositionStartCapture\"\n  | \"onCompositionUpdate\"\n  | \"onCompositionUpdateCapture\"\n  | \"onFocus\"\n  | \"onFocusCapture\"\n  | \"onBlur\"\n  | \"onBlurCapture\"\n  | \"onChange\"\n  | \"onChangeCapture\"\n  | \"onBeforeInput\"\n  | \"onBeforeInputCapture\"\n  | \"onInput\"\n  | \"onInputCapture\"\n  | \"onReset\"\n  | \"onResetCapture\"\n  | \"onSubmit\"\n  | \"onSubmitCapture\"\n  | \"onInvalid\"\n  | \"onInvalidCapture\"\n  | \"onLoad\"\n  | \"onLoadCapture\"\n  | \"onError\"\n  | \"onErrorCapture\"\n  | \"onKeyDown\"\n  | \"onKeyDownCapture\"\n  | \"onKeyPress\"\n  | \"onKeyPressCapture\"\n  | \"onKeyUp\"\n  | \"onKeyUpCapture\"\n  | \"onAbort\"\n  | \"onAbortCapture\"\n  | \"onCanPlay\"\n  | \"onCanPlayCapture\"\n  | \"onCanPlayThrough\"\n  | \"onCanPlayThroughCapture\"\n  | \"onDurationChange\"\n  | \"onDurationChangeCapture\"\n  | \"onEmptied\"\n  | \"onEmptiedCapture\"\n  | \"onEncrypted\"\n  | \"onEncryptedCapture\"\n  | \"onEnded\"\n  | \"onEndedCapture\"\n  | \"onLoadedData\"\n  | \"onLoadedDataCapture\"\n  | \"onLoadedMetadata\"\n  | \"onLoadedMetadataCapture\"\n  | \"onLoadStart\"\n  | \"onLoadStartCapture\"\n  | \"onPause\"\n  | \"onPauseCapture\"\n  | \"onPlay\"\n  | \"onPlayCapture\"\n  | \"onPlaying\"\n  | \"onPlayingCapture\"\n  | \"onProgress\"\n  | \"onProgressCapture\"\n  | \"onRateChange\"\n  | \"onRateChangeCapture\"\n  | \"onSeeked\"\n  | \"onSeekedCapture\"\n  | \"onSeeking\"\n  | \"onSeekingCapture\"\n  | \"onStalled\"\n  | \"onStalledCapture\"\n  | \"onSuspend\"\n  | \"onSuspendCapture\"\n  | \"onTimeUpdate\"\n  | \"onTimeUpdateCapture\"\n  | \"onVolumeChange\"\n  | \"onVolumeChangeCapture\"\n  | \"onWaiting\"\n  | \"onWaitingCapture\"\n  | \"onAuxClick\"\n  | \"onAuxClickCapture\"\n  | \"onClick\"\n  | \"onClickCapture\"\n  | \"onContextMenu\"\n  | \"onContextMenuCapture\"\n  | \"onDoubleClick\"\n  | \"onDoubleClickCapture\"\n  | \"onDrag\"\n  | \"onDragCapture\"\n  | \"onDragEnd\"\n  | \"onDragEndCapture\"\n  | \"onDragEnter\"\n  | \"onDragEnterCapture\"\n  | \"onDragExit\"\n  | \"onDragExitCapture\"\n  | \"onDragLeave\"\n  | \"onDragLeaveCapture\"\n  | \"onDragOver\"\n  | \"onDragOverCapture\"\n  | \"onDragStart\"\n  | \"onDragStartCapture\"\n  | \"onDrop\"\n  | \"onDropCapture\"\n  | \"onMouseDown\"\n  | \"onMouseDownCapture\"\n  | \"onMouseEnter\"\n  | \"onMouseLeave\"\n  | \"onMouseMove\"\n  | \"onMouseMoveCapture\"\n  | \"onMouseOut\"\n  | \"onMouseOutCapture\"\n  | \"onMouseOver\"\n  | \"onMouseOverCapture\"\n  | \"onMouseUp\"\n  | \"onMouseUpCapture\"\n  | \"onSelect\"\n  | \"onSelectCapture\"\n  | \"onTouchCancel\"\n  | \"onTouchCancelCapture\"\n  | \"onTouchEnd\"\n  | \"onTouchEndCapture\"\n  | \"onTouchMove\"\n  | \"onTouchMoveCapture\"\n  | \"onTouchStart\"\n  | \"onTouchStartCapture\"\n  | \"onPointerDown\"\n  | \"onPointerDownCapture\"\n  | \"onPointerMove\"\n  | \"onPointerMoveCapture\"\n  | \"onPointerUp\"\n  | \"onPointerUpCapture\"\n  | \"onPointerCancel\"\n  | \"onPointerCancelCapture\"\n  | \"onPointerEnter\"\n  | \"onPointerEnterCapture\"\n  | \"onPointerLeave\"\n  | \"onPointerLeaveCapture\"\n  | \"onPointerOver\"\n  | \"onPointerOverCapture\"\n  | \"onPointerOut\"\n  | \"onPointerOutCapture\"\n  | \"onGotPointerCapture\"\n  | \"onGotPointerCaptureCapture\"\n  | \"onLostPointerCapture\"\n  | \"onLostPointerCaptureCapture\"\n  | \"onScroll\"\n  | \"onScrollCapture\"\n  | \"onWheel\"\n  | \"onWheelCapture\"\n  | \"onAnimationStart\"\n  | \"onAnimationStartCapture\"\n  | \"onAnimationEnd\"\n  | \"onAnimationEndCapture\"\n  | \"onAnimationIteration\"\n  | \"onAnimationIterationCapture\"\n  | \"onTransitionEnd\"\n  | \"onTransitionEndCapture\"\n  | \"twoToneColor\";\n"
  },
  {
    "path": "src/materials/base/Icon/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport * as Icon from \"@ant-design/icons\";\nimport { AntdIconProps } from \"@ant-design/icons/lib/components/AntdIcon\";\nimport { AntdIconType } from \"./icon\";\nimport { IIconConfig } from \"./schema\";\nimport logo from \"@/assets/icon_01.png\";\n\ninterface IconType extends IIconConfig {\n  isTpl?: boolean;\n}\nconst XIcon = memo((props: IconType) => {\n  const {\n    color,\n    size,\n    link,\n    text,\n    fontSize,\n    fontColor,\n    type,\n    spin,\n    isTpl\n  } = props;\n\n  const MyIcon: React.ForwardRefExoticComponent<Pick<\n    AntdIconProps,\n    AntdIconType\n  > &\n    React.RefAttributes<HTMLSpanElement>> = Icon[type];\n\n  const handleClick = () => {\n    if (!link || window.location.href.indexOf(\"/editor\") > -1) return;\n    window.location.href = link;\n  };\n\n  return isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logo} alt=\"\" />\n    </div>\n  ) : (\n    <div\n      style={{\n        display: \"flex\",\n        width: \"100%\",\n        height: \"100%\",\n        alignItems: \"center\",\n        justifyContent: \"center\",\n        flexDirection: \"column\"\n      }}\n    >\n      <MyIcon\n        twoToneColor={color}\n        style={{ fontSize: size }}\n        spin={spin}\n        onClick={handleClick}\n      />\n      <div style={{ fontSize, color: fontColor, paddingTop: \"6px\" }}>\n        {\" \"}\n        {text}{\" \"}\n      </div>\n    </div>\n  );\n});\n\nexport default XIcon;\n"
  },
  {
    "path": "src/materials/base/Icon/schema.ts",
    "content": "import {\n  ICardPickerConfigType,\n  IColorConfigType,\n  ITextConfigType,\n  INumberConfigType,\n  ISwitchConfigType,\n  TCardPickerDefaultType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TSwitchDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TIconEditData = Array<\n  | IColorConfigType\n  | INumberConfigType\n  | ISwitchConfigType\n  | ICardPickerConfigType<IconTypes>\n  | ITextConfigType\n>;\nexport interface IIconConfig {\n  color: TColorDefaultType;\n  size: TNumberDefaultType;\n  text: TTextDefaultType;\n  fontSize: TNumberDefaultType;\n  fontColor: TColorDefaultType;\n  spin: TSwitchDefaultType;\n  link: TTextDefaultType;\n  type: TCardPickerDefaultType<IconTypes>;\n}\n\nexport interface IIconSchema {\n  editData: TIconEditData;\n  config: IIconConfig;\n}\n\nexport type IconTypes =\n  | \"AccountBookTwoTone\"\n  | \"AlertTwoTone\"\n  | \"ApiTwoTone\"\n  | \"AppstoreTwoTone\"\n  | \"AudioTwoTone\"\n  | \"BankTwoTone\"\n  | \"BellTwoTone\"\n  | \"BookTwoTone\"\n  | \"BugTwoTone\"\n  | \"BuildTwoTone\"\n  | \"BulbTwoTone\"\n  | \"CalculatorTwoTone\"\n  | \"CalendarTwoTone\"\n  | \"CameraTwoTone\"\n  | \"CarTwoTone\"\n  | \"CarryOutTwoTone\"\n  | \"CiCircleTwoTone\"\n  | \"CloudTwoTone\"\n  | \"CodeTwoTone\"\n  | \"CrownTwoTone\"\n  | \"CustomerServiceTwoTone\"\n  | \"DollarCircleTwoTone\"\n  | \"EnvironmentTwoTone\"\n  | \"ExperimentTwoTone\"\n  | \"FireTwoTone\"\n  | \"GiftTwoTone\"\n  | \"InsuranceTwoTone\"\n  | \"LikeTwoTone\"\n  | \"LockTwoTone\"\n  | \"MailTwoTone\"\n  | \"MessageTwoTone\"\n  | \"PhoneTwoTone\"\n  | \"PictureTwoTone\"\n  | \"PlaySquareTwoTone\"\n  | \"RedEnvelopeTwoTone\"\n  | \"ShopTwoTone\"\n  | \"TrademarkCircleTwoTone\"\n  | \"StarTwoTone\"\n  | \"SafetyCertificateTwoTone\"\n  | \"SettingTwoTone\"\n  | \"RocketTwoTone\";\n\nconst Icon: IIconSchema = {\n  editData: [\n    {\n      key: \"color\",\n      name: \"颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"size\",\n      name: \"大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"text\",\n      name: \"文本\",\n      type: \"Text\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文本大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"fontColor\",\n      name: \"文本颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"link\",\n      name: \"跳转链接\",\n      type: \"Text\"\n    },\n    {\n      key: \"spin\",\n      name: \"旋转动画\",\n      type: \"Switch\"\n    },\n    {\n      key: \"type\",\n      name: \"图标类型\",\n      type: \"CardPicker\",\n      icons: [\n        \"AccountBookTwoTone\",\n        \"AlertTwoTone\",\n        \"ApiTwoTone\",\n        \"AppstoreTwoTone\",\n        \"AudioTwoTone\",\n        \"BankTwoTone\",\n        \"BellTwoTone\",\n        \"BookTwoTone\",\n        \"BugTwoTone\",\n        \"BuildTwoTone\",\n        \"BulbTwoTone\",\n        \"CalculatorTwoTone\",\n        \"CalendarTwoTone\",\n        \"CameraTwoTone\",\n        \"CarTwoTone\",\n        \"CarryOutTwoTone\",\n        \"CiCircleTwoTone\",\n        \"CloudTwoTone\",\n        \"CodeTwoTone\",\n        \"CrownTwoTone\",\n        \"CustomerServiceTwoTone\",\n        \"DollarCircleTwoTone\",\n        \"EnvironmentTwoTone\",\n        \"ExperimentTwoTone\",\n        \"FireTwoTone\",\n        \"GiftTwoTone\",\n        \"InsuranceTwoTone\",\n        \"LikeTwoTone\",\n        \"LockTwoTone\",\n        \"MailTwoTone\",\n        \"MessageTwoTone\",\n        \"PhoneTwoTone\",\n        \"PictureTwoTone\",\n        \"PlaySquareTwoTone\",\n        \"RedEnvelopeTwoTone\",\n        \"ShopTwoTone\",\n        \"TrademarkCircleTwoTone\",\n        \"StarTwoTone\",\n        \"SafetyCertificateTwoTone\",\n        \"SettingTwoTone\",\n        \"RocketTwoTone\"\n      ]\n    }\n  ],\n  config: {\n    color: \"rgba(74,144,226,1)\",\n    size: 36,\n    text: \"图标\",\n    fontSize: 14,\n    fontColor: \"rgba(0,0,0,1)\",\n    link: \"\",\n    spin: false,\n    type: \"CarTwoTone\"\n  }\n};\n\nexport default Icon;\n"
  },
  {
    "path": "src/materials/base/Icon/template.ts",
    "content": "const template = {\n  type: \"Icon\",\n  h: 36,\n  displayName: \"图标组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Image/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { IImageConfig } from \"./schema\";\nimport logo from \"@/assets/img.png\";\nconst Image = memo((props: IImageConfig) => {\n  const {\n    imgUrl,\n    round = 0,\n    translate,\n    align,\n    titText,\n    titFontSize,\n    titColor,\n    titFontWeight,\n    subTitText,\n    subTitFontSize,\n    subTitColor,\n    subTitFontWeight\n  } = props;\n  return (\n    <>\n      {props.isTpl && (\n        <div>\n          <img src={logo} alt=\"\" />\n        </div>\n      )}\n      {!props.isTpl && (\n        <div\n          style={{\n            overflow: \"hidden\",\n            position: \"absolute\",\n            width: `${props.baseWidth}%`,\n            height: `${props.baseHeight}%`,\n            borderRadius: props.baseRadius,\n            transform: `translate(${props.baseLeft}px,${props.baseTop}px) \n      scale(${props.baseScale / 100}) \n      rotate(${props.baseRotate}deg)`\n          }}\n        >\n          <div\n            style={{\n              borderRadius: round,\n              width: \"100%\",\n              textAlign: \"center\",\n              overflow: \"hidden\",\n              position: \"relative\"\n            }}\n          >\n            <div\n              style={{\n                position: \"absolute\",\n                width: \"100%\",\n                top: \"50%\",\n                left: \"50%\",\n                transform: \"translate(-50%, -50%)\",\n                marginLeft: translate && translate[0],\n                marginTop: translate && translate[1],\n                textAlign: align\n              }}\n            >\n              <div\n                style={{\n                  fontSize: titFontSize,\n                  color: titColor,\n                  fontWeight: +titFontWeight\n                }}\n              >\n                {titText}\n              </div>\n              <div\n                style={{\n                  fontSize: subTitFontSize,\n                  color: subTitColor,\n                  fontWeight: +subTitFontWeight,\n                  lineHeight: 2.6\n                }}\n              >\n                {subTitText}\n              </div>\n            </div>\n            <img\n              src={imgUrl && imgUrl[0].url}\n              alt=\"\"\n              style={{ width: \"100%\" }}\n            />\n          </div>\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default Image;\n"
  },
  {
    "path": "src/materials/base/Image/schema.ts",
    "content": "import {\n  INumberConfigType,\n  IUploadConfigType,\n  TNumberDefaultType,\n  TUploadDefaultType,\n  IColorConfigType,\n  TColorDefaultType,\n  ISelectConfigType,\n  TSelectDefaultType,\n  IPosConfigType,\n  TPosDefaultType,\n  TTextDefaultType,\n  ITextConfigType\n} from \"@/components/FormComponents/types\";\nimport { baseConfig, baseDefault, ICommonBaseType } from \"../../common\";\n\nexport type TTextSelectKeyType = \"left\" | \"right\" | \"center\";\nexport type TTextWeightSelectKeyType = \"300\" | \"400\" | \"500\" | \"600\";\n\nexport type TImageEditData = Array<\n  | IUploadConfigType\n  | INumberConfigType\n  | IPosConfigType\n  | ISelectConfigType<TTextSelectKeyType | TTextWeightSelectKeyType>\n  | IColorConfigType\n  | ITextConfigType\n>;\n\nexport interface IImageConfig extends ICommonBaseType {\n  translate: TPosDefaultType;\n  align: TSelectDefaultType<TTextSelectKeyType>;\n  titText: TTextDefaultType;\n  titColor: TColorDefaultType;\n  titFontSize: TNumberDefaultType;\n  titFontWeight: TSelectDefaultType<TTextWeightSelectKeyType>;\n  subTitText: TTextDefaultType;\n  subTitColor: TColorDefaultType;\n  subTitFontSize: TNumberDefaultType;\n  subTitFontWeight: TSelectDefaultType<TTextWeightSelectKeyType>;\n  imgUrl: TUploadDefaultType;\n  round: TNumberDefaultType;\n}\n\nexport interface IImageSchema {\n  editData: TImageEditData;\n  config: IImageConfig;\n}\n\nconst Image: IImageSchema = {\n  editData: [\n    ...baseConfig,\n    {\n      key: \"translate\",\n      name: \"文字偏移\",\n      type: \"Pos\"\n    },\n    {\n      key: \"align\",\n      name: \"对齐方式\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"left\",\n          text: \"左对齐\"\n        },\n        {\n          key: \"center\",\n          text: \"居中对齐\"\n        },\n        {\n          key: \"right\",\n          text: \"右对齐\"\n        }\n      ]\n    },\n    {\n      key: \"titText\",\n      name: \"标题文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"titFontSize\",\n      name: \"标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"titColor\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"titFontWeight\",\n      name: \"标题粗细\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"300\",\n          text: \"300 x 300\"\n        },\n        {\n          key: \"400\",\n          text: \"400 x 400\"\n        },\n        {\n          key: \"500\",\n          text: \"500 x 500\"\n        },\n        {\n          key: \"600\",\n          text: \"600 x 600\"\n        }\n      ]\n    },\n    {\n      key: \"subTitText\",\n      name: \"副标题文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"subTitFontSize\",\n      name: \"副标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"subTitColor\",\n      name: \"副标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"subTitFontWeight\",\n      name: \"副标题粗细\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"300\",\n          text: \"300 x 300\"\n        },\n        {\n          key: \"400\",\n          text: \"400 x 400\"\n        },\n        {\n          key: \"500\",\n          text: \"500 x 500\"\n        },\n        {\n          key: \"600\",\n          text: \"600 x 600\"\n        }\n      ]\n    },\n    {\n      key: \"imgUrl\",\n      name: \"上传图片\",\n      type: \"Upload\",\n      isCrop: false\n    },\n    {\n      key: \"round\",\n      name: \"圆角\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    translate: [0, 0],\n    align: \"center\",\n    titText: \"\",\n    titFontSize: 20,\n    titColor: \"rgba(0,0,0,1)\",\n    titFontWeight: \"400\",\n    subTitText: \"\",\n    subTitFontSize: 16,\n    subTitColor: \"rgba(0,0,0,1)\",\n    subTitFontWeight: \"400\",\n    imgUrl: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: \"http://49.234.61.19/uploads/bg_174e470dc22.png\"\n      }\n    ],\n    round: 0,\n    ...baseDefault\n  }\n};\n\nexport default Image;\n"
  },
  {
    "path": "src/materials/base/Image/template.ts",
    "content": "const template = {\n  type: \"Image\",\n  h: 80,\n  displayName: \"图片组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/List/index.less",
    "content": ".list {\n  margin: 20px auto;\n  width: 94%;\n  .sourceList {\n    .sourceItem {\n      display: flex;\n      align-items: center;\n      margin-bottom: 16px;\n      .imgWrap {\n      }\n      .content {\n        margin-left: 12px;\n        .tit {\n          line-height: 2;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/materials/base/List/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport styles from \"./index.less\";\nimport { IListConfig } from \"./schema\";\nimport logo from \"@/assets/list.png\";\nconst List = memo((props: IListConfig) => {\n  const { round, sourceData, imgSize, fontSize, color } = props;\n  return (\n    <>\n      {props.isTpl && (\n        <div>\n          <img src={logo} alt=\"\" />\n        </div>\n      )}\n      {!props.isTpl && (\n        <div\n          className={styles.list}\n          style={{\n            overflow: \"hidden\",\n            position: \"absolute\",\n            width: `${props.baseWidth}%`,\n            height: `${props.baseHeight}%`,\n            borderRadius: props.baseRadius,\n            transform: `translate(${props.baseLeft}px,${props.baseTop}px) \n      scale(${props.baseScale / 100}) \n      rotate(${props.baseRotate}deg)`\n          }}\n        >\n          <div className={styles.sourceList}>\n            {sourceData.map((item, i) => {\n              return (\n                <div className={styles.sourceItem} key={i}>\n                  <div className={styles.imgWrap}>\n                    <img\n                      src={item.imgUrl[0] ? item.imgUrl[0].url : \"\"}\n                      alt={item.desc}\n                      style={{\n                        width: parseFloat(imgSize),\n                        height: imgSize + \"px\",\n                        objectFit: \"cover\",\n                        borderRadius: round\n                      }}\n                    />\n                  </div>\n                  <div className={styles.content}>\n                    <a\n                      className={styles.tit}\n                      style={{ fontSize, color }}\n                      href={item.link ? item.link : \"#\"}\n                    >\n                      {item.title}\n                      <div\n                        className={styles.desc}\n                        style={{\n                          fontSize: fontSize * 0.8,\n                          color: \"rgba(0,0,0, .3)\"\n                        }}\n                      >\n                        {item.desc}\n                      </div>\n                    </a>\n                  </div>\n                </div>\n              );\n            })}\n          </div>\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default List;\n"
  },
  {
    "path": "src/materials/base/List/schema.ts",
    "content": "import {\n  IColorConfigType,\n  IDataListConfigType,\n  INumberConfigType,\n  ISelectConfigType,\n  TColorDefaultType,\n  TDataListDefaultType,\n  TNumberDefaultType,\n  TSelectDefaultType\n} from \"@/components/FormComponents/types\";\nimport { baseConfig, baseDefault, ICommonBaseType } from \"../../common\";\nexport type TListSelectKeyType = \"60\" | \"80\" | \"100\" | \"120\" | \"150\";\nexport type TListEditData = Array<\n  | IColorConfigType\n  | IDataListConfigType\n  | INumberConfigType\n  | ISelectConfigType<TListSelectKeyType>\n>;\nexport interface IListConfig extends ICommonBaseType {\n  sourceData: TDataListDefaultType;\n  round: TNumberDefaultType;\n  imgSize: TSelectDefaultType<TListSelectKeyType>;\n  fontSize: TNumberDefaultType;\n  color: TColorDefaultType;\n}\n\nexport interface IListSchema {\n  editData: TListEditData;\n  config: IListConfig;\n}\n\nconst List: IListSchema = {\n  editData: [\n    ...baseConfig,\n    {\n      key: \"sourceData\",\n      name: \"数据源\",\n      type: \"DataList\",\n      cropRate: 1\n    },\n    {\n      key: \"round\",\n      name: \"图片圆角\",\n      type: \"Number\"\n    },\n    {\n      key: \"imgSize\",\n      name: \"图片大小\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"60\",\n          text: \"60 x 60\"\n        },\n        {\n          key: \"80\",\n          text: \"80 x 80\"\n        },\n        {\n          key: \"100\",\n          text: \"100 x 100\"\n        },\n        {\n          key: \"120\",\n          text: \"120 x 120\"\n        },\n        {\n          key: \"150\",\n          text: \"150 x 150\"\n        }\n      ]\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    }\n  ],\n  config: {\n    sourceData: [\n      {\n        id: \"1\",\n        title: \"趣谈小课\",\n        desc: \"致力于打造优质小课程\",\n        link: \"xxxxx\",\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: \"http://49.234.61.19/uploads/1_1740c6fbcd9.png\"\n          }\n        ]\n      },\n      {\n        id: \"2\",\n        title: \"趣谈小课\",\n        desc: \"致力于打造优质小课程\",\n        link: \"xxxxx\",\n        imgUrl: [\n          {\n            uid: \"002\",\n            name: \"image.png\",\n            status: \"done\",\n            url: \"http://49.234.61.19/uploads/1_1740c6fbcd9.png\"\n          }\n        ]\n      }\n    ],\n    round: 0,\n    imgSize: \"80\",\n    fontSize: 16,\n    color: \"rgba(153,153,153,1)\",\n    ...baseDefault\n  }\n};\n\nexport default List;\n"
  },
  {
    "path": "src/materials/base/List/template.ts",
    "content": "const template = {\n  type: \"List\",\n  h: 110,\n  displayName: \"列表组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/LongText/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { ILongTextConfig } from \"./schema\";\nimport logo from \"@/assets/longText.png\";\nconst LongText = memo((props: ILongTextConfig & { isTpl: boolean }) => {\n  const {\n    text,\n    fontSize,\n    color,\n    indent,\n    lineHeight,\n    textAlign,\n    bgColor,\n    padding,\n    radius,\n    isTpl\n  } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <div\n          style={{\n            color,\n            textIndent: indent + \"px\",\n            fontSize,\n            lineHeight,\n            textAlign,\n            backgroundColor: bgColor,\n            padding,\n            borderRadius: radius\n          }}\n        >\n          {text}\n        </div>\n      )}\n    </>\n  );\n});\nexport default LongText;\n"
  },
  {
    "path": "src/materials/base/LongText/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ISelectConfigType,\n  ITextAreaConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TSelectDefaultType,\n  TTextAreaDefaultType\n} from \"@/components/FormComponents/types\";\nexport type TLongTextSelectKeyType = \"left\" | \"center\" | \"right\";\n\nexport type TLongTextEditData = Array<\n  | ITextAreaConfigType\n  | IColorConfigType\n  | INumberConfigType\n  | ISelectConfigType<TLongTextSelectKeyType>\n>;\nexport interface ILongTextConfig {\n  text: TTextAreaDefaultType;\n  color: TColorDefaultType;\n  fontSize: TNumberDefaultType;\n  indent: TNumberDefaultType;\n  lineHeight: TNumberDefaultType;\n  textAlign: TSelectDefaultType<TLongTextSelectKeyType>;\n  bgColor: TColorDefaultType;\n  padding: TNumberDefaultType;\n  radius: TNumberDefaultType;\n}\n\nexport interface ILongTextSchema {\n  editData: TLongTextEditData;\n  config: ILongTextConfig;\n}\n\nconst LongText: ILongTextSchema = {\n  editData: [\n    {\n      key: \"text\",\n      name: \"文字\",\n      type: \"TextArea\"\n    },\n    {\n      key: \"color\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"字体大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"indent\",\n      name: \"首行缩进\",\n      type: \"Number\",\n      range: [0, 100]\n    },\n    {\n      key: \"textAlign\",\n      name: \"对齐方式\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"left\",\n          text: \"左对齐\"\n        },\n        {\n          key: \"center\",\n          text: \"居中对齐\"\n        },\n        {\n          key: \"right\",\n          text: \"右对齐\"\n        }\n      ]\n    },\n    {\n      key: \"lineHeight\",\n      name: \"行高\",\n      type: \"Number\",\n      step: 0.1\n    },\n    {\n      key: \"bgColor\",\n      name: \"背景颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"padding\",\n      name: \"填充间距\",\n      type: \"Number\"\n    },\n    {\n      key: \"radius\",\n      name: \"背景圆角\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    text:\n      \"我是长文本有一段故事，dooring可视化编辑器无限可能，赶快来体验吧，骚年们，奥利给~\",\n    color: \"rgba(60,60,60,1)\",\n    fontSize: 14,\n    indent: 20,\n    lineHeight: 1.8,\n    textAlign: \"left\",\n    bgColor: \"rgba(255,255,255,0)\",\n    padding: 0,\n    radius: 0\n  }\n};\n\nexport default LongText;\n"
  },
  {
    "path": "src/materials/base/LongText/template.ts",
    "content": "const template = {\n  type: \"LongText\",\n  h: 36,\n  displayName: \"长文本组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Notice/index.tsx",
    "content": "import { NoticeBar } from \"zarm\";\nimport React, { memo } from \"react\";\nimport { INoticeConfig } from \"./schema\";\nimport logo from \"@/assets/notice.png\";\nconst Notice = memo((props: INoticeConfig & { isTpl: boolean }) => {\n  const { text, speed, theme, isClose = false, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <NoticeBar\n          theme={theme === \"default\" ? undefined : theme}\n          closable={isClose}\n          speed={speed}\n        >\n          <span style={{ color: \"inherit\" }}>{text}</span>\n        </NoticeBar>\n      )}\n    </>\n  );\n});\n\nexport default Notice;\n"
  },
  {
    "path": "src/materials/base/Notice/schema.ts",
    "content": "import {\n  INumberConfigType,\n  ISelectConfigType,\n  ISwitchConfigType,\n  ITextConfigType,\n  TNumberDefaultType,\n  TSelectDefaultType,\n  TSwitchDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TNoticeSelectKeyType =\n  | \"default\"\n  | \"warning\"\n  | \"primary\"\n  | \"success\"\n  | \"danger\";\nexport type TNoticeEditData = Array<\n  | ITextConfigType\n  | INumberConfigType\n  | ISelectConfigType<TNoticeSelectKeyType>\n  | ISwitchConfigType\n>;\nexport interface INoticeConfig {\n  text: TTextDefaultType;\n  speed: TNumberDefaultType;\n  theme: TSelectDefaultType<TNoticeSelectKeyType>;\n  isClose: TSwitchDefaultType;\n}\n\nexport interface INoticeSchema {\n  editData: TNoticeEditData;\n  config: INoticeConfig;\n}\n\nconst Notice: INoticeSchema = {\n  editData: [\n    {\n      key: \"text\",\n      name: \"文本\",\n      type: \"Text\"\n    },\n    {\n      key: \"speed\",\n      name: \"滚动速度\",\n      type: \"Number\"\n    },\n    {\n      key: \"theme\",\n      name: \"主题\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"default\",\n          text: \"默认\"\n        },\n        {\n          key: \"warning\",\n          text: \"警告\"\n        },\n        {\n          key: \"primary\",\n          text: \"主要\"\n        },\n        {\n          key: \"success\",\n          text: \"成功\"\n        },\n        {\n          key: \"danger\",\n          text: \"危险\"\n        }\n      ]\n    },\n    {\n      key: \"isClose\",\n      name: \"是否可关闭\",\n      type: \"Switch\"\n    }\n  ],\n  config: {\n    text: \"通知栏: 趣谈前端上线啦\",\n    speed: 50,\n    theme: \"warning\",\n    isClose: false\n  }\n};\n\nexport default Notice;\n"
  },
  {
    "path": "src/materials/base/Notice/template.ts",
    "content": "const template = {\n  type: \"Notice\",\n  h: 20,\n  displayName: \"通知组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Qrcode/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { IQrcodeConfig } from \"./schema\";\nimport logo from \"@/assets/qrcode.png\";\nconst Qrcode = memo((props: IQrcodeConfig & { isTpl: boolean }) => {\n  const { qrcode, text, color, fontSize = 14, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <div style={{ width: \"100%\", maxWidth: \"220px\", margin: \"16px auto\" }}>\n          <img\n            src={qrcode && qrcode[0].url}\n            alt={text}\n            style={{ width: \"100%\" }}\n          />\n          <div\n            style={{ textAlign: \"center\", color, fontSize, paddingTop: \"8px\" }}\n          >\n            {text}\n          </div>\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default Qrcode;\n"
  },
  {
    "path": "src/materials/base/Qrcode/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  IUploadConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType,\n  TUploadDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TQrcodeEditData = Array<\n  IUploadConfigType | ITextConfigType | IColorConfigType | INumberConfigType\n>;\nexport interface IQrcodeConfig {\n  qrcode: TUploadDefaultType;\n  text: TTextDefaultType;\n  color: TColorDefaultType;\n  fontSize: TNumberDefaultType;\n}\n\nexport interface IQrcodeSchema {\n  editData: TQrcodeEditData;\n  config: IQrcodeConfig;\n}\n\nconst Qrcode: IQrcodeSchema = {\n  editData: [\n    {\n      key: \"qrcode\",\n      name: \"二维码\",\n      type: \"Upload\",\n      isCrop: true,\n      cropRate: 1\n    },\n    {\n      key: \"text\",\n      name: \"文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    qrcode: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: \"http://49.234.61.19/uploads/code_173e1705e0c.png\"\n      }\n    ],\n    text: \"二维码\",\n    color: \"rgba(153,153,153,1)\",\n    fontSize: 14\n  }\n};\n\nexport default Qrcode;\n"
  },
  {
    "path": "src/materials/base/Qrcode/template.ts",
    "content": "const template = {\n  type: \"Qrcode\",\n  h: 150,\n  displayName: \"二维码组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/RichText/index.less",
    "content": ".richTextWrap {\n  :global(p) {\n    margin-bottom: 0;\n  }\n  :global(img) {\n    max-width: 100%;\n    text-align: center;\n  }\n  :global(blockquote) {\n    margin: 0 0 10px;\n    padding: 12px 20px;\n    background-color: #f1f2f3;\n    border-left: 5px solid #ccc;\n    color: #666;\n    font-style: italic;\n  }\n}\n"
  },
  {
    "path": "src/materials/base/RichText/index.tsx",
    "content": "import React, { memo, useState } from \"react\";\nimport styles from \"./index.less\";\nimport { IButtonConfig } from \"./schema\";\nimport logo from \"@/assets/richText.png\";\n\ninterface IProps extends IButtonConfig {\n  isTpl: boolean;\n}\n\nconst XButton = memo((props: IProps) => {\n  const { isTpl, borderColor, borderWidth, round, padding, content } = props;\n\n  return isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logo} alt=\"\"></img>\n    </div>\n  ) : (\n    <div\n      className={styles.richTextWrap}\n      style={{\n        border: `${borderWidth}px solid ${borderColor}`,\n        borderRadius: round + \"px\",\n        padding: padding + \"px\"\n      }}\n    >\n      <div dangerouslySetInnerHTML={{ __html: content }}></div>\n    </div>\n  );\n});\nexport default XButton;\n"
  },
  {
    "path": "src/materials/base/RichText/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType,\n  IRichTextConfigType,\n  TRichTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TButtonEditData = Array<\n  ITextConfigType | IColorConfigType | INumberConfigType | IRichTextConfigType\n>;\n\nexport interface IButtonConfig {\n  round: TNumberDefaultType;\n  borderWidth: TNumberDefaultType;\n  padding: TNumberDefaultType;\n  borderColor: TColorDefaultType;\n  content: TRichTextDefaultType;\n}\n\nexport interface IButtonSchema {\n  editData: TButtonEditData;\n  config: IButtonConfig;\n}\nconst Button: IButtonSchema = {\n  editData: [\n    {\n      key: \"round\",\n      name: \"边框圆角\",\n      type: \"Number\"\n    },\n    {\n      key: \"borderWidth\",\n      name: \"边框宽度\",\n      type: \"Number\"\n    },\n    {\n      key: \"borderColor\",\n      name: \"边框颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"padding\",\n      name: \"内边距\",\n      type: \"Number\"\n    },\n    {\n      key: \"content\",\n      name: \"内容\",\n      type: \"RichText\"\n    }\n  ],\n  config: {\n    round: 0,\n    borderWidth: 0,\n    borderColor: \"rgba(255,255,255,1)\",\n    padding: 0,\n    content: \"\"\n  }\n};\nexport default Button;\n"
  },
  {
    "path": "src/materials/base/RichText/template.ts",
    "content": "const template = {\n  type: \"RichText\",\n  h: 120,\n  displayName: \"富文本组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Tab/index.less",
    "content": ".tabWrap {\n  padding-top: 16px;\n  padding-bottom: 16px;\n  .content {\n    display: flex;\n    flex-wrap: wrap;\n    .item {\n      padding: 20px 20px 0;\n      width: 50%;\n      text-align: center;\n      justify-content: center;\n      .imgWrap {\n        display: inline-block;\n        width: 80%;\n        img {\n          border-radius: 6px;\n          width: 120px;\n          height: 120px;\n          object-fit: cover;\n        }\n        .title {\n          line-height: 2.4;\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/materials/base/Tab/index.tsx",
    "content": "import React, { memo, useEffect, useRef } from \"react\";\nimport { Tabs } from \"zarm\";\nimport styles from \"./index.less\";\nimport { ITabConfig } from \"./schema\";\nimport logo from \"@/assets/tab.png\";\nconst { Panel } = Tabs;\n\nconst XTab = (props: ITabConfig & { isTpl: boolean }) => {\n  const {\n    tabs = [\"分类一\", \"分类二\"],\n    activeColor,\n    color,\n    fontSize,\n    sourceData,\n    isTpl\n  } = props;\n\n  const tabWrapRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (tabWrapRef.current) {\n      let res = tabWrapRef.current.querySelector(\n        \".za-tabs__line\"\n      ) as HTMLElement;\n      if (res) {\n        res.style.backgroundColor = activeColor;\n      }\n    }\n  }, [activeColor]);\n\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <div className={styles.tabWrap} ref={tabWrapRef}>\n          <Tabs scrollThreshold={3}>\n            {tabs.map((item, i) => {\n              return (\n                <Panel title={item} key={i}>\n                  <div className={styles.content}>\n                    {sourceData\n                      .filter(item => item.type === i)\n                      .map((item, i) => {\n                        return (\n                          <div className={styles.item} key={i}>\n                            <a\n                              className={styles.imgWrap}\n                              href={item.link}\n                              title={item.desc}\n                            >\n                              <img\n                                src={\n                                  item.imgUrl[0]\n                                    ? item.imgUrl[0].url\n                                    : \"http://io.nainor.com/uploads/01_173e15d3493.png\"\n                                }\n                                alt={item.title}\n                              />\n                              <div\n                                className={styles.title}\n                                style={{ fontSize, color }}\n                              >\n                                {item.title}\n                              </div>\n                            </a>\n                          </div>\n                        );\n                      })}\n                  </div>\n                </Panel>\n              );\n            })}\n          </Tabs>\n        </div>\n      )}\n    </>\n  );\n};\n\nexport default memo(XTab);\n"
  },
  {
    "path": "src/materials/base/Tab/schema.ts",
    "content": "import {\n  IColorConfigType,\n  IDataListConfigType,\n  IMutiTextConfigType,\n  INumberConfigType,\n  TColorDefaultType,\n  TDataListDefaultType,\n  TMutiTextDefaultType,\n  TNumberDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TTabEditData = Array<\n  | IMutiTextConfigType\n  | IColorConfigType\n  | INumberConfigType\n  | IDataListConfigType\n>;\nexport interface ITabConfig {\n  tabs: TMutiTextDefaultType;\n  color: TColorDefaultType;\n  activeColor: TColorDefaultType;\n  fontSize: TNumberDefaultType;\n  imgSize: TNumberDefaultType;\n  sourceData: TDataListDefaultType;\n}\n\nexport interface ITabSchema {\n  editData: TTabEditData;\n  config: ITabConfig;\n}\n\nconst Tab: ITabSchema = {\n  editData: [\n    {\n      key: \"tabs\",\n      name: \"项目类别\",\n      type: \"MutiText\"\n    },\n    {\n      key: \"activeColor\",\n      name: \"激活颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"imgSize\",\n      name: \"图片大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"sourceData\",\n      name: \"数据源\",\n      type: \"DataList\"\n    }\n  ],\n  config: {\n    tabs: [\"类别一\", \"类别二\"],\n    color: \"rgba(153,153,153,1)\",\n    activeColor: \"rgba(0,102,204,1)\",\n    fontSize: 16,\n    imgSize: 100,\n    sourceData: [\n      {\n        id: \"1\",\n        title: \"趣谈小课1\",\n        desc: \"致力于打造优质小课程\",\n        link: \"xxxxx\",\n        type: 0,\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: \"http://49.234.61.19/uploads/1_1740c6fbcd9.png\"\n          }\n        ]\n      },\n      {\n        id: \"2\",\n        title: \"趣谈小课2\",\n        desc: \"致力于打造优质小课程\",\n        link: \"xxxxx\",\n        type: 0,\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: \"http://49.234.61.19/uploads/2_1740c7033a9.png\"\n          }\n        ]\n      },\n      {\n        id: \"3\",\n        title: \"趣谈小课3\",\n        desc: \"致力于打造优质小课程\",\n        link: \"xxxxx\",\n        type: 1,\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: \"http://49.234.61.19/uploads/1_1740c6fbcd9.png\"\n          }\n        ]\n      }\n    ]\n  }\n};\n\nexport default Tab;\n"
  },
  {
    "path": "src/materials/base/Tab/template.ts",
    "content": "const template = {\n  type: \"Tab\",\n  h: 130,\n  displayName: \"切换页组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/Text/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { ITextConfig } from \"./schema\";\nimport logo from \"@/assets/text.png\";\nconst Text = memo((props: ITextConfig & { isTpl: boolean }) => {\n  const { align, text, fontSize, color, lineHeight, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <div style={{ color, textAlign: align, fontSize, lineHeight }}>\n          {text}\n        </div>\n      )}\n    </>\n  );\n});\nexport default Text;\n"
  },
  {
    "path": "src/materials/base/Text/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ISelectConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TSelectDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TTextSelectKeyType = \"left\" | \"right\" | \"center\";\nexport type TTextEditData = Array<\n  | ITextConfigType\n  | IColorConfigType\n  | INumberConfigType\n  | ISelectConfigType<TTextSelectKeyType>\n>;\nexport interface ITextConfig {\n  text: TTextDefaultType;\n  color: TColorDefaultType;\n  fontSize: TNumberDefaultType;\n  align: TSelectDefaultType<TTextSelectKeyType>;\n  lineHeight: TNumberDefaultType;\n}\n\nexport interface ITextSchema {\n  editData: TTextEditData;\n  config: ITextConfig;\n}\nconst Text: ITextSchema = {\n  editData: [\n    {\n      key: \"text\",\n      name: \"文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"color\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"字体大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"align\",\n      name: \"对齐方式\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"left\",\n          text: \"左对齐\"\n        },\n        {\n          key: \"center\",\n          text: \"居中对齐\"\n        },\n        {\n          key: \"right\",\n          text: \"右对齐\"\n        }\n      ]\n    },\n    {\n      key: \"lineHeight\",\n      name: \"行高\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    text: \"我是文本\",\n    color: \"rgba(60,60,60,1)\",\n    fontSize: 18,\n    align: \"center\",\n    lineHeight: 2\n  }\n};\nexport default Text;\n"
  },
  {
    "path": "src/materials/base/Text/template.ts",
    "content": "const template = {\n  type: \"Text\",\n  h: 20,\n  displayName: \"文本组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/WhiteTpl/index.less",
    "content": ".whiteTpl {\n  text-align: center;\n  .title {\n    // font-size: 14px;\n    color: #fff;\n  }\n}\n"
  },
  {
    "path": "src/materials/base/WhiteTpl/index.tsx",
    "content": "import { memo } from \"react\";\nimport styles from \"./index.less\";\nimport React from \"react\";\nimport { IWhiteTplConfig } from \"./schema\";\nimport logo from \"@/assets/white.png\";\ninterface IProps extends IWhiteTplConfig {\n  isTpl: boolean;\n}\n\nconst WhiteTpl = memo((props: IProps) => {\n  const { bgColor, text, fontSize, color, height, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <div\n          className={styles.whiteTpl}\n          style={{\n            backgroundColor: bgColor,\n            height,\n            lineHeight: height + \"px\"\n          }}\n        >\n          <div className={styles.title} style={{ fontSize, color }}>\n            {text}\n          </div>\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default WhiteTpl;\n"
  },
  {
    "path": "src/materials/base/WhiteTpl/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TWhiteTplEditData = Array<\n  IColorConfigType | INumberConfigType | ITextConfigType\n>;\nexport interface IWhiteTplConfig {\n  bgColor: TColorDefaultType;\n  text: TTextDefaultType;\n  fontSize: TNumberDefaultType;\n  color: TColorDefaultType;\n  height: TNumberDefaultType;\n}\n\nexport interface IWhiteTplSchema {\n  editData: TWhiteTplEditData;\n  config: IWhiteTplConfig;\n}\n\nconst WhiteTpl: IWhiteTplSchema = {\n  editData: [\n    {\n      key: \"bgColor\",\n      name: \"背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"height\",\n      name: \"高度\",\n      type: \"Number\"\n    },\n    {\n      key: \"text\",\n      name: \"文字\",\n      type: \"Text\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    bgColor: \"rgba(255,255,255,1)\",\n    text: \"\",\n    fontSize: 16,\n    color: \"rgba(210,210,210,1)\",\n    height: 30\n  }\n};\n\nexport default WhiteTpl;\n"
  },
  {
    "path": "src/materials/base/WhiteTpl/template.ts",
    "content": "const template = {\n  type: \"WhiteTpl\",\n  h: 20,\n  displayName: \"空白组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/base/schema.ts",
    "content": "import Carousel from \"./Carousel/schema\";\nimport Form from \"./Form/schema\";\nimport Header from \"./Header/schema\";\nimport Icon from \"./Icon/schema\";\nimport WhiteTpl from \"./WhiteTpl/schema\";\nimport Image from \"./Image/schema\";\nimport List from \"./List/schema\";\nimport LongText from \"./LongText/schema\";\nimport Notice from \"./Notice/schema\";\nimport Qrcode from \"./Qrcode/schema\";\nimport Tab from \"./Tab/schema\";\nimport Text from \"./Text/schema\";\nimport RichText from \"./RichText/schema\";\n\nconst basicSchema = {\n  Carousel,\n  Form,\n  Header,\n  Icon,\n  Image,\n  List,\n  LongText,\n  WhiteTpl,\n  Notice,\n  Qrcode,\n  Tab,\n  Text,\n  RichText\n};\nexport default basicSchema;\n"
  },
  {
    "path": "src/materials/base/template.ts",
    "content": "import Carousel from \"./Carousel/template\";\nimport Form from \"./Form/template\";\nimport Header from \"./Header/template\";\nimport Icon from \"./Icon/template\";\nimport Image from \"./Image/template\";\nimport List from \"./List/template\";\nimport LongText from \"./LongText/template\";\nimport Notice from \"./Notice/template\";\nimport Qrcode from \"./Qrcode/template\";\nimport Tab from \"./Tab/template\";\nimport Text from \"./Text/template\";\nimport WhiteTpl from \"./WhiteTpl/template\";\nimport RichText from \"./RichText/template\";\n\nconst basicTemplate = [\n  Carousel,\n  Form,\n  Header,\n  Icon,\n  Image,\n  List,\n  LongText,\n  Notice,\n  Qrcode,\n  Tab,\n  Text,\n  WhiteTpl,\n  RichText\n];\nconst BasicTemplate = basicTemplate.map(v => {\n  return { ...v, category: \"base\" };\n});\n\nexport default BasicTemplate;\n"
  },
  {
    "path": "src/materials/common.ts",
    "content": "import {\n  INumberConfigType,\n  TNumberDefaultType\n} from \"../PanelComponents/FormEditor/types\";\n\n///提取所有公用设置，传来时加到这里，约定公用类型\n//公用配置需满足条件，所有组件初始值统一，否则不放公用设置\n\nexport interface ICommonBaseType {\n  baseTop: TNumberDefaultType;\n  baseLeft: TNumberDefaultType;\n  baseRadius: TNumberDefaultType;\n  baseRotate: TNumberDefaultType;\n  baseScale: TNumberDefaultType;\n  baseHeight: TNumberDefaultType;\n  baseWidth: TNumberDefaultType;\n  isTpl?: boolean;\n}\n\nexport const baseConfig: INumberConfigType[] = [\n  {\n    key: \"baseTop\",\n    name: \"纵向位移\",\n    type: \"Number\"\n  },\n  {\n    key: \"baseLeft\",\n    name: \"横向位移\",\n    type: \"Number\"\n  },\n  {\n    key: \"baseRadius\",\n    name: \"圆角\",\n    type: \"Number\"\n  },\n  {\n    key: \"baseRotate\",\n    name: \"旋转\",\n    type: \"Number\"\n  },\n  {\n    key: \"baseScale\",\n    name: \"缩放\",\n    type: \"Number\"\n  },\n  {\n    key: \"baseHeight\",\n    name: \"容器高度%\",\n    type: \"Number\"\n  },\n  {\n    key: \"baseWidth\",\n    name: \"容器宽度%\",\n    type: \"Number\"\n  }\n];\n\nexport const baseDefault = {\n  baseTop: 0,\n  baseLeft: 0,\n  baseRadius: 0,\n  baseRotate: 0,\n  baseScale: 100,\n  baseHeight: 100,\n  baseWidth: 100\n};\n"
  },
  {
    "path": "src/materials/media/Audio/index.less",
    "content": ".audioWrap {\n  height: 100%;\n  display: flex;\n  align-items: center;\n}\n"
  },
  {
    "path": "src/materials/media/Audio/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport ReactAudioPlayer from \"react-audio-player\";\nimport styles from \"./index.less\";\nimport { IAudioConfig } from \"./schema\";\nimport logo from \"@/assets/music@2x.png\";\n\nconst AudioPlayer = memo((props: IAudioConfig & { isTpl: boolean }) => {\n  const { height, url, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img\n            src={logo}\n            style={{ width: \"100%\" }}\n            alt=\"h5-dooring音频播放组件\"\n          ></img>\n        </div>\n      ) : (\n        <div className={styles.audioWrap}>\n          <ReactAudioPlayer\n            src={url}\n            autoPlay={false}\n            controls\n            style={{\n              width: \"100%\",\n              height: height + \"px\"\n            }}\n          />\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default AudioPlayer;\n"
  },
  {
    "path": "src/materials/media/Audio/schema.ts",
    "content": "import {\n  ITextConfigType,\n  INumberConfigType,\n  TTextDefaultType,\n  TNumberDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TAudioEditData = Array<INumberConfigType | ITextConfigType>;\nexport interface IAudioConfig {\n  height: TNumberDefaultType;\n  url: TTextDefaultType;\n}\n\nexport interface IAudioSchema {\n  editData: TAudioEditData;\n  config: IAudioConfig;\n}\n\nconst Audio: IAudioSchema = {\n  editData: [\n    {\n      key: \"height\",\n      name: \"音频高度\",\n      type: \"Number\"\n    },\n    {\n      key: \"url\",\n      name: \"音频链接\",\n      type: \"Text\"\n    }\n  ],\n  config: {\n    height: 32,\n    url: \"http://io.nainor.com/audio.mp3\"\n  }\n};\n\nexport default Audio;\n"
  },
  {
    "path": "src/materials/media/Audio/template.ts",
    "content": "const template = {\n  type: \"Audio\",\n  h: 48,\n  displayName: \"音频组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/media/Calendar/index.less",
    "content": ".calenderWrap {\n  position: relative;\n  // height: 100%;\n  overflow: hidden;\n  background-color: #fff;\n  :global(.za-calendar__month) {\n    color: var(--color) !important;\n  }\n  :global(.za-calendar__day--today .za-calendar__day__content) {\n    color: var(--selectColor);\n    background-color: rgba(255, 255, 255, 0.3);\n  }\n  :global(.za-calendar__day--selected .za-calendar__day__content) {\n    background-color: var(--selectColor) !important;\n  }\n  :global(.za-calendar__day--range .za-calendar__day__content),\n  :global(.za-calendar__day--range),\n  :global(.za-calendar__day--selected .za-calendar__day__content) {\n    background-color: var(--selectBgColor) !important;\n    background-image: linear-gradient(\n      90deg,\n      rgba(0, 0, 0, 0) 0,\n      rgba(0, 0, 0, 0) 50%,\n      var(--selectBgColor) 0\n    ) !important;\n  }\n  :global(.za-calendar__day--range) {\n    color: rgba(255, 255, 255, 0.7) !important;\n    :global(.za-calendar__day__content) {\n      color: rgba(255, 255, 255, 0.7) !important;\n    }\n  }\n  :global(.za-calendar__day.range-start),\n  :global(.za-calendar__day.range-end) {\n    :global(.za-calendar__day__content) {\n      color: rgba(255, 255, 255, 1) !important;\n    }\n  }\n  :global(.za-calendar__day.range-start:not(.range-end):not(.d6):not(:last-child)) {\n    background-image: linear-gradient(\n      90deg,\n      rgba(0, 0, 0, 0) 0,\n      rgba(0, 0, 0, 0) 50%,\n      var(--selectBgColor) 0\n    ) !important;\n  }\n  :global(.za-calendar__day.range-end:not(.range-start):not(.d7):not(:first-child)) {\n    background-image: linear-gradient(\n      -90deg,\n      rgba(0, 0, 0, 0) 0,\n      rgba(0, 0, 0, 0) 50%,\n      var(--selectBgColor) 0\n    ) !important;\n  }\n}\n"
  },
  {
    "path": "src/materials/media/Calendar/index.tsx",
    "content": "import React, { useState, memo, useEffect, useRef } from \"react\";\nimport { Calendar } from \"zarm\";\nimport styles from \"./index.less\";\nimport { ICalendarConfig } from \"./schema\";\nimport logo from \"@/assets/calend.png\";\n\nconst CalendarCp = memo((props: ICalendarConfig & { isTpl: boolean }) => {\n  const { time, range, color, selectedColor, round, isTpl } = props;\n\n  const realRange = range.split(\"-\");\n\n  const [value, setValue] = useState<Date[] | undefined>([\n    new Date(`${time}-${realRange[0]}`),\n    new Date(`${time}-${realRange[1]}`)\n  ]);\n  const [min] = useState(new Date(`${time}-01`));\n  const [max] = useState(new Date(`${time}-31`));\n\n  const boxRef = useRef<any>(null);\n\n  useEffect(() => {\n    if (boxRef.current) {\n      boxRef.current.style.setProperty(\"--color\", color);\n      boxRef.current.style.setProperty(\"--selectColor\", selectedColor);\n      boxRef.current.style.setProperty(\"--selectBgColor\", selectedColor);\n    }\n  }, []);\n\n  const isEditorPage = window.location.pathname.indexOf(\"editor\") > -1;\n\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img\n            src={logo}\n            style={{ width: \"100%\" }}\n            alt=\"h5-dooring日历组件\"\n          ></img>\n        </div>\n      ) : (\n        <div\n          className={styles.calenderWrap}\n          style={{\n            borderRadius: round + \"px\",\n            pointerEvents: isEditorPage ? \"none\" : \"initial\"\n          }}\n          ref={boxRef}\n        >\n          <Calendar\n            multiple={!!range}\n            value={value}\n            min={min}\n            max={new Date(max)}\n            disabledDate={(date: any) => /(0|6)/.test(date.getDay())}\n            onChange={(value: Date[] | undefined) => {\n              setValue(value);\n            }}\n          />\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default CalendarCp;\n"
  },
  {
    "path": "src/materials/media/Calendar/schema.ts",
    "content": "import {\n  ITextConfigType,\n  INumberConfigType,\n  TTextDefaultType,\n  TNumberDefaultType,\n  IColorConfigType\n} from \"@/components/FormComponents/types\";\n\nexport type TCalendarEditData = Array<\n  INumberConfigType | ITextConfigType | IColorConfigType\n>;\nexport interface ICalendarConfig {\n  time: TTextDefaultType;\n  range: TTextDefaultType;\n  color: TTextDefaultType;\n  selectedColor: TTextDefaultType;\n  round: TNumberDefaultType;\n}\n\nexport interface ICalendarSchema {\n  editData: TCalendarEditData;\n  config: ICalendarConfig;\n}\n\nconst Calendar: ICalendarSchema = {\n  editData: [\n    {\n      key: \"time\",\n      name: \"日历时间\",\n      type: \"Text\",\n      placeholder: \"格式如2020-01或2020-11\"\n    },\n    {\n      key: \"range\",\n      name: \"日历选中范围\",\n      type: \"Text\",\n      placeholder: \"格式如01-12(几号到几号)\"\n    },\n    {\n      key: \"color\",\n      name: \"文本颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"selectedColor\",\n      name: \"选中颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"round\",\n      name: \"圆角\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    time: \"2020-12\",\n    range: \"05-08\",\n    color: \"rgba(0,0,0,1)\",\n    selectedColor: \"rgba(22,40,212,1)\",\n    round: 0\n  }\n};\n\nexport default Calendar;\n"
  },
  {
    "path": "src/materials/media/Calendar/template.ts",
    "content": "const template = {\n  type: \"Calendar\",\n  h: 185,\n  displayName: \"日历组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/media/Map/index.less",
    "content": ".mapWrap {\n  height: 100%;\n  display: flex;\n  align-items: center;\n  & > div {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/materials/media/Map/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { Map, Marker, Label, APILoader } from \"@uiw/react-baidu-map\";\nimport styles from \"./index.less\";\nimport { IMapConfig } from \"./schema\";\nimport logo from \"@/assets/map@2x.png\";\n\nconst Mapcomponent = memo((props: IMapConfig & { isTpl: boolean }) => {\n  const { ak, location, position, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img\n            src={logo}\n            style={{ width: \"100%\" }}\n            alt=\"h5-dooring音频播放组件\"\n          ></img>\n        </div>\n      ) : (\n        <div className={styles.mapWrap}>\n          <APILoader akay={ak}>\n            <Map widget={[\"NavigationControl\"]} zoom={13}>\n              <Marker\n                animation={2}\n                position={{ lng: position[0], lat: position[1] }}\n              />\n              <Label\n                content={location}\n                position={{ lng: position[0], lat: position[1] }}\n                style={{\n                  color: \"#000\",\n                  borderColor: \"#06c\",\n                  padding: \"3px 10px\",\n                  borderRadius: \"6px\"\n                }}\n              />\n            </Map>\n          </APILoader>\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default Mapcomponent;\n"
  },
  {
    "path": "src/materials/media/Map/schema.ts",
    "content": "import {\n  ITextConfigType,\n  ITextAreaConfigType,\n  IPosConfigType,\n  TTextDefaultType,\n  TPosDefaultType,\n  TTextAreaDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TMapEditData = Array<\n  ITextConfigType | ITextAreaConfigType | IPosConfigType\n>;\nexport interface IMapConfig {\n  ak: TTextDefaultType;\n  position: TPosDefaultType;\n  location: TTextAreaDefaultType;\n}\n\nexport interface IMapSchema {\n  editData: TMapEditData;\n  config: IMapConfig;\n}\n\nconst AMap: IMapSchema = {\n  editData: [\n    {\n      key: \"ak\",\n      name: \"百度地图AK\",\n      type: \"Text\"\n    },\n    {\n      key: \"position\",\n      name: \"经纬度\",\n      type: \"Pos\",\n      placeObj: {\n        text: \"使用百度拾取坐标系统获取坐标\",\n        link: \"http://api.map.baidu.com/lbsapi/getpoint/index.html\"\n      }\n    },\n    {\n      key: \"location\",\n      name: \"地址\",\n      type: \"TextArea\"\n    }\n  ],\n  config: {\n    ak: \"你的百度地图ak\",\n    position: [121.444017, 31.237787],\n    location: \"上海市\"\n  }\n};\n\nexport default AMap;\n"
  },
  {
    "path": "src/materials/media/Map/template.ts",
    "content": "const template = {\n  type: \"Map\",\n  h: 120,\n  displayName: \"地图组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/media/Video/index.css",
    "content": "@charset \"UTF-8\";\n.video-react .video-react-control:before, .video-react .video-react-big-play-button:before {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n\n.video-react .video-react-control:before, .video-react .video-react-big-play-button:before {\n  text-align: center;\n}\n\n@font-face {\n  font-family: \"video-react\";\n  src: url(data:application/vnd.ms-fontobject;base64,MBgAAHwXAAABAAIAAAAAAAAAAAAAAAAAAAABAJABAAAAAExQAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAic4U8QAAAAAAAAAAAAAAAAAAAAAAABYAdgBpAGQAZQBvAC0AcgBlAGEAYwB0AAAADgBSAGUAZwB1AGwAYQByAAAAFgBWAGUAcgBzAGkAbwBuACAAMQAuADAAAAAWAHYAaQBkAGUAbwAtAHIAZQBhAGMAdAAAAAAAAAEAAAALAIAAAwAwT1MvMg7RD8oAAAC8AAAAYGNtYXAOVuSnAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zsdb3FIAAAF4AAAS0GhlYWQLMledAAAUSAAAADZoaGVhB6wEJgAAFIAAAAAkaG10eIgAFM8AABSkAAAAlGxvY2FLllAoAAAVOAAAAExtYXhwACoAyQAAFYQAAAAgbmFtZVtqyukAABWkAAABtnBvc3QAAwAAAAAXXAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADyIAQAAAAAAAQAAAAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg8iD//f//AAAAAAAg8gD//f//AAH/4w4EAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAVYA1gMqAyoAAgAACQIBVgHU/iwDKv7W/tYAAgBWAFYDqgOqAAIAFgAAAS0BNzIeAhUUDgIjIi4CNTQ+AgGqAQD/AFZYnHNDQ3ObWVicc0NDc5sBQMDA6kNzm1lYnHNDQ3ObWVicc0MAAAADAFYAVgOqA6oAEwAnACoAACUyPgI1NC4CIyIOAhUUHgITMh4CFRQOAiMiLgI1ND4CExEFAgBGfV02Nl18R0Z9XTY2XXxHWJxzQ0Nzm1lYnHNDQ3ObAwEAqjZdfEdGfV02Nl18R0Z9XTYDAENzm1lYnHNDQ3ObWVicc0P9lgGAwAAAAAACAQAA1gMAAyoAAwAHAAABMxEjIREzEQJWqqr+qqoDKv2sAlT9rAAAAwBWAFYDqgOqAAMABwAbAAABESMRIxEjERMyHgIVFA4CIyIuAjU0PgICgFZUVoBYnHNDQ3ObWVicc0NDc5sBVgFU/qwBVP6sAlRDc5tZWJxzQ0Nzm1lYnHNDAAAEAFYAVgOqA6oAAwAXACsALwAAAREzEQcyPgI1NC4CIyIOAhUUHgITMh4CFRQOAiMiLgI1ND4CAxEzEQIqVoBGfV02Nl18R0Z9XTY2XXxHWJxzQ0Nzm1lYnHNDQ3ObJ1YBVgFU/qysNl18R0Z9XTY2XXxHRn1dNgMAQ3ObWVicc0NDc5tZWJxzQ/2sAVT+rAABAQABAAMAAwAAAwAAASERIQEAAgD+AAMA/gAAAgBqAQADVgMAAAIABQAACQERIQkBAeoBbP6A/pQBbAIAAQD+AAEAAQAAAAACAKoBAAOWAwAAAgAFAAAJAiERAQIqAWz+lP6AAWwDAP8A/wACAP8AAAAAAAIBAAEAAwADAAACAAYAAAkBEQEzESMBlgFq/gBWVgIAAQD+AAIA/gAAAAAAAgEAAQADAAMAAAMABgAAATMRIyERAQKqVlb+VgFqAwD+AAIA/wAAAAIAqgCAA1YD1gBFAGgAAAEOARUUBjEjNzMVIwcwNjU0MjU0FjsBMhYXHgEXHgEVFAYHDgEHDgEHDgEjIiYnLgEnLgE1MxQWMzI2PwEwNj0BLwEwJiMRMh4CFRQOAiMiLgI1MxQeAjMyPgI1NC4CIxUnNwH4AwsEHgpmSgQEBgUDCAYNAwMKAwcLAQMDBQYGBwMDEQYGDQMDCwYICiIODAMGAwoEBAoJA0Z9XTY2XXxHRn1dNlYpRV01NF5FKSlFXTXW1gG8AQUCAwNeHiYBAwMDAwMDAwMGAwcZDgYNAwMNBgYDAwMBAQMDAgMEFgwLCQEDCAkDGggKBAFuNV17R0Z9XTY2XXxHNF5FKSlFXTU0XkUprNbWAAAEAKoAgANWA9YAGwBGAE0AcAAAARQWMzI2PwEwNj0BMCY1NCYjIgYPATAGHQEwFjcUBg8BMAYjIgYjIiYnLgEnLgE9ATQ2PwEwNjMyNjMyFhceARceARceARUHIzUHNTczEzIeAhUUDgIjIi4CNTMUHgIzMj4CNTQuAiMVJzcCNA4GAwgDCAQEEgQDBgMIBgZUAQMMEAYGDgYGDgYGCAYKCAEDDg4GBg4GBg4GBgoGBgMDAwG2KCpMBi5GfV02Nl18R0Z9XTZWKUVdNTReRSkpRV011tYBeAUJAQMKCQNWCQMECgMDCAkDVgknCRMGGgwEAQMDBgMFKA8eCRMGGgwEAQMDBgMDDgkJEAlqjAweGAEeNV17R0Z9XTY2XXxHNF5FKSlFXTU0XkUprNbWAAAABACqAIADVgPWABsARgCjAMYAAAEUFjMyNj8BMDY9ATQmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVIzI2PQEwJjU0JisBMAYjIgYdASM0NjMyNjMyFhceAR0BMAYVFAYjIgYHHgEXHgEVFAYHDgEHDgEjIgYjIiYnLgEnLgE1MxUwFhUUFjsBMDYzMjY9ATAmNTQmKwE1EzIeAhUUDgIjIi4CNTMUHgIzMj4CNTQuAiMVJzcCPBAGAwYDCAQEEAQDCAMIBARQAQMMEAYGDgYPFQoGAwMDAwMDDBAGBgwGBg4GBgoGBgMDAwHiDBIEBQMWBQMDASwWDgMOAw0ZCggIBAUDAwgDBg0DAwUBAwMGAwMNBgYOBgYLAwMNBggKJAQFAxYFAwMBBAUDGmZGfV02Nl18R0Z9XTZWKUVdNTReRSkpRV011tYBeAYIAQMKCQNWAwYDBAoDAwgJA1YJJwkTBhoMBAsFAw4JCRAJHgkTBhoMBAEDAwYDAw4JCRAJDgwIBQMDAQQFAwgPHwQHBQQYCg4JAwMFBwMDBwYGDgYGDQMDCgMDBQQBAwMCAwQbCwgFAwMBBAUDFgUDAwEeAWo1XXtHRn1dNjZdfEc0XkUpKUVdNTReRSms1tYAAAIAqgCAA1YD1gBCAGUAAAEOARUUBjEjNzMVIwcwNjU0MjU0FjsBMhYXHgEXHgEVFAYHDgEHDgEjIiYnLgEnLgE1MxQWMzI2PwEwNj0BLwEwJiMlND4CMzUXBzUiDgIVFB4CMzI+AjUzFA4CIyIuAgH0AwsEGgpmSgQEBgUDCAYNAwMKAwcLAQMDBQYIFw8GDQMDCwYICiIODAMGAwoEBAoJA/6uNl18R9bWNF5FKSlFXTU0XkUpVjZdfEdGfV02AbwBBQIDA14eJgEDAwMDAwMDAwYDBxkOBg0DAw0GCAgBAwMCAwQWDAsJAQMICQMaCAoEGkZ8XTWs1tasKUVdNTReRSkpRV01Rn1dNjZdfAAABACqAIADVgPWABsARgBNAHAAAAEUFjMyNj8BMDY9ATAmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVByM1BzU3MwU0PgIzNRcHNSIOAhUUHgIzMj4CNTMUDgIjIi4CAjQOBgMIAwgEBBIEAwYDCAYGUAEDDBAGBg4GBg4GBggGCggBAw4OBgYOBgYOBgYKBgYDAwMBsigqTAb+2DZdfEfW1jReRSkpRV01NF5FKVY2XXxHRn1dNgF4BQkBAwoJA1YJAwQKAwMICQNWCScJEwYaDAQBAwMGAwUoDx4JEwYaDAQBAwMGAwMOCQkQCWqMDB4YNkZ8XTWs1tasKUVdNTReRSkpRV01Rn1dNjZdfAAAAAQAqgCAA1YD1gAiAD4AaQDGAAATND4CMzUXBzUiDgIVFB4CMzI+AjUzFA4CIyIuAgUUFjMyNj8BMDY9ATAmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVIzI2PQEwJjU0JisBMAYjIgYdASM0NjMyNjMyFhceAR0BMAYVFAYjIgYHHgEXHgEVFAYHDgEHDgEjIgYjIiYnLgEnLgE1MxUwFhUUFjsBMDYzMjY9ATAmNTQmKwE1qjZdfEfW1jReRSkpRV01NF5FKVY2XXxHRn1dNgGODgYDCAMIBAQSBAMGAwgEBFQBAwwQBgYOBg8VCgYDAwMDAwMMEAYGDAYGDgYGCgYGAwMDAeIMEgQFAxYFAwMBLBYOAw4DDRkKCAgEBQMDCAMGDQMDBQEDAwYDAw0GBg4GBgsDAw0GCAokBAUDFgUDAwEEBQMaAdZGfF01rNbWrClFXTU0XkUpKUVdNUZ9XTY2XXwXBQkBAwoJA1YJAwQKAwMICQNWCScJEwYaDAQLBQMOCQkQCR4JEwYaDAQBAwMGAwMOCQkQCQ4MCAUDAwEEBQMIDx8EBwUEGAoOCQMDBQcDAwcGBg4GBg0DAwoDAwUEAQMDAgMEGwsIBQMDAQQFAxYFAwMBHgAAAAAEAIAAgAOAA4AAAgAUACYALgAAARUnJwEHJw4BBzU+ATcnEScjETMnATQuAic1HgMVFAYHJz4BJxwBByc1HgECAFrwAso2WCJOLBswFbbWqsrKAqofOU0vQG5PLRcVQAoMagJoMDoDVrRahP02NlgbKAtYBxoRtv7g1gEAyv62M1xLNg5YDkVjfEQwWydCGTkeBw0GaF4YWwAAAAABASoAqgKqA1YABQAAATM3EScjASqs1NSsAoDW/VTWAAIA1gCqAxYDVgAFAAwAABMzNxEnIyUUBgcRHgHWqtbWqgJAPDAwPAKA1v1U1oA5WxgBWBhbAAAAAwCAAIoDgAN2ABUAHAAiAAABHgMVFA4CBzU+AzU0LgInExQGBxEeASUzNxEnIwJWQG5PLS1PbUEuTjkfHzlNL2o6MDA6/cCq1taqA3YORWN8RER7Y0YOWA03S1wzM1xLNg7+4jlbGAFYGFtH1v1U1gAAAAAEANYA1gMqAyoABQALABEAFwAAATMVIzUjEzUzFSM1ATUzFSMVHQEzFSM1AlbUVICAVNT+gNSAgNQDKtSA/lSA1FQBLNRUgKyAVNQABADWANYDKgMqAAUACwARABcAAAEzFSM1MwM1MxUjFQE1MxUjNRE1MxUjNQKqgNRUVNSA/qxU1NRUAqpU1P2s1FSAAdSA1FT+rFTUgAAAAAADAIAAqgOAA1YAFwAvAD8AAAE1NCYrASIGHQEUFjsBMjY9ASMVIzUzFSM1NCYrASIGHQEUFjsBMjY9ASMVIzUzFQEyFhURFAYjISImNRE0NjMDABgSgBIaGhKAEhhAVlbqGhKAEhgYEoASGkBWVgGUIjQzI/2sJDIyJAIqLBIYGBKsEhgYEiwWgBYsEhgYEqwSGBgSLBaAFgEsMyP+ACI0MyMCACI0AAAEAIAAgAOAA4AAAwANABkAKQAAATUzFScRMzI2PQE0JiMBESMVIzUjETM1MxUBMhYVERQGIyEiJjURNDYzAmpWlqwSGBgS/wBAVkBAVgGUIjQzI/2sJDIyJAHAgIDA/wAYEqwSGP8AAQBqav8AVlYCADMj/awiNDMjAlQiNAAAAAIAZABWA5wDqgALAFkAAAEyNjU0JiMiBhUUFiUXHgEPAQ4BLwEOAQ8BDgErASImLwEuAScHBiYvASY2PwEuATU8ATcnLgE/AT4BHwE+AT8BPgE7ATIWHwEeARc3NhYfARYGDwEeARUcAQIAPVlYPj1ZWAF8WgYCBFYEDghqECQUEAELCKwHCwIQEyQRagcOBVYEAgZaAQECWgYCBFYEDghqECQUEAELCKwHCwIQEyQRagcOBVYEAgZaAQEBalg+PVlYPj1ZbEYEEAiUBwQDKgwWCHAHCwoIcAcVDioDAwiUBxAFRgoVCwoVC0YEEAiUBwQDKgwWCHAHCwoIcAcVDioDAwiUBxAFRgoVCwoVAAAAAQCAAFgDgAOqADMAAAEyFhUUBiMiJjU8ATclDgEjIiY1NDYzMhYXJS4BNTQ2MzIWFRQGIyImJwUeARUUBgcFPgEDADNJSTMzSQL+0hIsGjRMSzUZLRIBLAEDSzU0TEs1GS0S/tQBAwICATAQLAFSSTMzS0szBw8GsBASSzU0TBERrgcPCDRMSzU0TBMRsAcPCAcPCLAPEQADAFYAVgOqA6oAAwAHABsAAAE1IxUTESMREzIeAhUUDgIjIi4CNTQ+AgIqVFRUKlicc0NDc5tZWJxzQ0NzmwKAVlb+qgEA/wACgENzm1lYnHNDQ3ObWVicc0MAAAQAVgBWA6oDqgADABcAKwAvAAABNTMVAzI+AjU0LgIjIg4CFRQeAhMyHgIVFA4CIyIuAjU0PgITETMRAdZUKkZ9XTY2XXxHRn1dNjZdfEdYnHNDQ3ObWVicc0NDc5svVAKAVlb+KjZdfEdGfV02Nl18R0Z9XTYDAENzm1lYnHNDQ3ObWVicc0P9gAEA/wAAAAEA1gDWAyoDKgALAAABBxcHJwcnNyc3FzcDKu7uPO7uPO7uPO7uAu7u7jzu7jzu7jzu7gABAFUAVQOrA6sAFAAAExQeAjMyPgI1NC4CIyIOAhVVQ3ScWFicdENDdJxYWJx0QwIAWJx0Q0N0nFhYnHRDQ3ScWAAAAAIAVQBVA6sDqwAUACgAAAEiDgIVFB4CMzI+AjU0LgIjESIuAjU0PgIzMh4CFRQOAgIAWJx0Q0N0nFhYnHRDQ3ScWEd8XTU1XXxHR3xdNTVdfAOrQ3ScWFicdENDdJxYWJx0Q/0ANV18R0d8XTU1XXxHR3xdNQAAAAMAVQBVA6sDqwAUACgANAAAASIOAhUUHgIzMj4CNTQuAiMRIi4CNTQ+AjMyHgIVFA4CExQGIyImNTQ2MzIWAgBYnHRDQ3ScWFicdENDdJxYR3xdNTVdfEdHfF01NV18OUs1NUtLNTVLA6tDdJxYWJx0Q0N0nFhYnHRD/QA1XXxHR3xdNTVdfEdHfF01AVU1S0s1NUtLAAAAAQAAAAEAAPEUzolfDzz1AAsEAAAAAADUNIllAAAAANQ0iWUAAAAAA6sD1gAAAAgAAgAAAAAAAAABAAAEAAAAAAAEAAAAAAADqwABAAAAAAAAAAAAAAAAAAAAJQQAAAAAAAAAAAAAAAAAAAAEAAFWBAAAVgQAAFYEAAEABAAAVgQAAFYEAAEABAAAagQAAKoEAAEABAABAAQAAKoEAACqBAAAqgQAAKoEAACqBAAAqgQAAIAEAAEqBAAA1gQAAIAEAADWBAAA1gQAAIAEAACABAAAZAQAAIAEAABWBAAAVgQAANYEAABVBAAAVQQAAFUAAAAAAAoAFAAeACwAVACWAKoA2AEgAS4BRAFaAXABhAIQAqgDpgQuBMYFxAYSBiIGPgZ4Bp4GxgcaB1oH4gguCFwIpAi+COAJHAloAAEAAAAlAMcABAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQALAAAAAQAAAAAAAgAHAIQAAQAAAAAAAwALAEIAAQAAAAAABAALAJkAAQAAAAAABQALACEAAQAAAAAABgALAGMAAQAAAAAACgAaALoAAwABBAkAAQAWAAsAAwABBAkAAgAOAIsAAwABBAkAAwAWAE0AAwABBAkABAAWAKQAAwABBAkABQAWACwAAwABBAkABgAWAG4AAwABBAkACgA0ANR2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRWZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADB2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHR2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRSZWd1bGFyAFIAZQBnAHUAbABhAHJ2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA?#iefix) format(\"eot\");\n}\n@font-face {\n  font-family: \"video-react\";\n  src: url(data:application/font-woff;base64,d09GRgABAAAAABfIAAsAAAAAF3wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABCAAAAGAAAABgDtEPymNtYXAAAAFoAAAAVAAAAFQOVuSnZ2FzcAAAAbwAAAAIAAAACAAAABBnbHlmAAABxAAAEtAAABLQx1vcUmhlYWQAABSUAAAANgAAADYLMledaGhlYQAAFMwAAAAkAAAAJAesBCZobXR4AAAU8AAAAJQAAACUiAAUz2xvY2EAABWEAAAATAAAAExLllAobWF4cAAAFdAAAAAgAAAAIAAqAMluYW1lAAAV8AAAAbYAAAG2W2rK6XBvc3QAABeoAAAAIAAAACAAAwAAAAMEAAGQAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8iAEAAAAAAAEAAAAAAAAAQAAAAAAAAAAAAAAIAAAAAAAAwAAAAMAAAAcAAEAAwAAABwAAwABAAAAHAAEADgAAAAKAAgAAgACAAEAIPIg//3//wAAAAAAIPIA//3//wAB/+MOBAADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQFWANYDKgMqAAIAAAkCAVYB1P4sAyr+1v7WAAIAVgBWA6oDqgACABYAAAEtATcyHgIVFA4CIyIuAjU0PgIBqgEA/wBWWJxzQ0Nzm1lYnHNDQ3ObAUDAwOpDc5tZWJxzQ0Nzm1lYnHNDAAAAAwBWAFYDqgOqABMAJwAqAAAlMj4CNTQuAiMiDgIVFB4CEzIeAhUUDgIjIi4CNTQ+AhMRBQIARn1dNjZdfEdGfV02Nl18R1icc0NDc5tZWJxzQ0NzmwMBAKo2XXxHRn1dNjZdfEdGfV02AwBDc5tZWJxzQ0Nzm1lYnHND/ZYBgMAAAAAAAgEAANYDAAMqAAMABwAAATMRIyERMxECVqqq/qqqAyr9rAJU/awAAAMAVgBWA6oDqgADAAcAGwAAAREjESMRIxETMh4CFRQOAiMiLgI1ND4CAoBWVFaAWJxzQ0Nzm1lYnHNDQ3ObAVYBVP6sAVT+rAJUQ3ObWVicc0NDc5tZWJxzQwAABABWAFYDqgOqAAMAFwArAC8AAAERMxEHMj4CNTQuAiMiDgIVFB4CEzIeAhUUDgIjIi4CNTQ+AgMRMxECKlaARn1dNjZdfEdGfV02Nl18R1icc0NDc5tZWJxzQ0NzmydWAVYBVP6srDZdfEdGfV02Nl18R0Z9XTYDAENzm1lYnHNDQ3ObWVicc0P9rAFU/qwAAQEAAQADAAMAAAMAAAEhESEBAAIA/gADAP4AAAIAagEAA1YDAAACAAUAAAkBESEJAQHqAWz+gP6UAWwCAAEA/gABAAEAAAAAAgCqAQADlgMAAAIABQAACQIhEQECKgFs/pT+gAFsAwD/AP8AAgD/AAAAAAACAQABAAMAAwAAAgAGAAAJAREBMxEjAZYBav4AVlYCAAEA/gACAP4AAAAAAAIBAAEAAwADAAADAAYAAAEzESMhEQECqlZW/lYBagMA/gACAP8AAAACAKoAgANWA9YARQBoAAABDgEVFAYxIzczFSMHMDY1NDI1NBY7ATIWFx4BFx4BFRQGBw4BBw4BBw4BIyImJy4BJy4BNTMUFjMyNj8BMDY9AS8BMCYjETIeAhUUDgIjIi4CNTMUHgIzMj4CNTQuAiMVJzcB+AMLBB4KZkoEBAYFAwgGDQMDCgMHCwEDAwUGBgcDAxEGBg0DAwsGCAoiDgwDBgMKBAQKCQNGfV02Nl18R0Z9XTZWKUVdNTReRSkpRV011tYBvAEFAgMDXh4mAQMDAwMDAwMDBgMHGQ4GDQMDDQYGAwMDAQEDAwIDBBYMCwkBAwgJAxoICgQBbjVde0dGfV02Nl18RzReRSkpRV01NF5FKazW1gAABACqAIADVgPWABsARgBNAHAAAAEUFjMyNj8BMDY9ATAmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVByM1BzU3MxMyHgIVFA4CIyIuAjUzFB4CMzI+AjU0LgIjFSc3AjQOBgMIAwgEBBIEAwYDCAYGVAEDDBAGBg4GBg4GBggGCggBAw4OBgYOBgYOBgYKBgYDAwMBtigqTAYuRn1dNjZdfEdGfV02VilFXTU0XkUpKUVdNdbWAXgFCQEDCgkDVgkDBAoDAwgJA1YJJwkTBhoMBAEDAwYDBSgPHgkTBhoMBAEDAwYDAw4JCRAJaowMHhgBHjVde0dGfV02Nl18RzReRSkpRV01NF5FKazW1gAAAAQAqgCAA1YD1gAbAEYAowDGAAABFBYzMjY/ATA2PQE0JjU0JiMiBg8BMAYdATAWNxQGDwEwBiMiBiMiJicuAScuAT0BNDY/ATA2MzI2MzIWFx4BFx4BFx4BFSMyNj0BMCY1NCYrATAGIyIGHQEjNDYzMjYzMhYXHgEdATAGFRQGIyIGBx4BFx4BFRQGBw4BBw4BIyIGIyImJy4BJy4BNTMVMBYVFBY7ATA2MzI2PQEwJjU0JisBNRMyHgIVFA4CIyIuAjUzFB4CMzI+AjU0LgIjFSc3AjwQBgMGAwgEBBAEAwgDCAQEUAEDDBAGBg4GDxUKBgMDAwMDAwwQBgYMBgYOBgYKBgYDAwMB4gwSBAUDFgUDAwEsFg4DDgMNGQoICAQFAwMIAwYNAwMFAQMDBgMDDQYGDgYGCwMDDQYICiQEBQMWBQMDAQQFAxpmRn1dNjZdfEdGfV02VilFXTU0XkUpKUVdNdbWAXgGCAEDCgkDVgMGAwQKAwMICQNWCScJEwYaDAQLBQMOCQkQCR4JEwYaDAQBAwMGAwMOCQkQCQ4MCAUDAwEEBQMIDx8EBwUEGAoOCQMDBQcDAwcGBg4GBg0DAwoDAwUEAQMDAgMEGwsIBQMDAQQFAxYFAwMBHgFqNV17R0Z9XTY2XXxHNF5FKSlFXTU0XkUprNbWAAACAKoAgANWA9YAQgBlAAABDgEVFAYxIzczFSMHMDY1NDI1NBY7ATIWFx4BFx4BFRQGBw4BBw4BIyImJy4BJy4BNTMUFjMyNj8BMDY9AS8BMCYjJTQ+AjM1Fwc1Ig4CFRQeAjMyPgI1MxQOAiMiLgIB9AMLBBoKZkoEBAYFAwgGDQMDCgMHCwEDAwUGCBcPBg0DAwsGCAoiDgwDBgMKBAQKCQP+rjZdfEfW1jReRSkpRV01NF5FKVY2XXxHRn1dNgG8AQUCAwNeHiYBAwMDAwMDAwMGAwcZDgYNAwMNBggIAQMDAgMEFgwLCQEDCAkDGggKBBpGfF01rNbWrClFXTU0XkUpKUVdNUZ9XTY2XXwAAAQAqgCAA1YD1gAbAEYATQBwAAABFBYzMjY/ATA2PQEwJjU0JiMiBg8BMAYdATAWNxQGDwEwBiMiBiMiJicuAScuAT0BNDY/ATA2MzI2MzIWFx4BFx4BFx4BFQcjNQc1NzMFND4CMzUXBzUiDgIVFB4CMzI+AjUzFA4CIyIuAgI0DgYDCAMIBAQSBAMGAwgGBlABAwwQBgYOBgYOBgYIBgoIAQMODgYGDgYGDgYGCgYGAwMDAbIoKkwG/tg2XXxH1tY0XkUpKUVdNTReRSlWNl18R0Z9XTYBeAUJAQMKCQNWCQMECgMDCAkDVgknCRMGGgwEAQMDBgMFKA8eCRMGGgwEAQMDBgMDDgkJEAlqjAweGDZGfF01rNbWrClFXTU0XkUpKUVdNUZ9XTY2XXwAAAAEAKoAgANWA9YAIgA+AGkAxgAAEzQ+AjM1Fwc1Ig4CFRQeAjMyPgI1MxQOAiMiLgIFFBYzMjY/ATA2PQEwJjU0JiMiBg8BMAYdATAWNxQGDwEwBiMiBiMiJicuAScuAT0BNDY/ATA2MzI2MzIWFx4BFx4BFx4BFSMyNj0BMCY1NCYrATAGIyIGHQEjNDYzMjYzMhYXHgEdATAGFRQGIyIGBx4BFx4BFRQGBw4BBw4BIyIGIyImJy4BJy4BNTMVMBYVFBY7ATA2MzI2PQEwJjU0JisBNao2XXxH1tY0XkUpKUVdNTReRSlWNl18R0Z9XTYBjg4GAwgDCAQEEgQDBgMIBARUAQMMEAYGDgYPFQoGAwMDAwMDDBAGBgwGBg4GBgoGBgMDAwHiDBIEBQMWBQMDASwWDgMOAw0ZCggIBAUDAwgDBg0DAwUBAwMGAwMNBgYOBgYLAwMNBggKJAQFAxYFAwMBBAUDGgHWRnxdNazW1qwpRV01NF5FKSlFXTVGfV02Nl18FwUJAQMKCQNWCQMECgMDCAkDVgknCRMGGgwECwUDDgkJEAkeCRMGGgwEAQMDBgMDDgkJEAkODAgFAwMBBAUDCA8fBAcFBBgKDgkDAwUHAwMHBgYOBgYNAwMKAwMFBAEDAwIDBBsLCAUDAwEEBQMWBQMDAR4AAAAABACAAIADgAOAAAIAFAAmAC4AAAEVJycBBycOAQc1PgE3JxEnIxEzJwE0LgInNR4DFRQGByc+ASccAQcnNR4BAgBa8ALKNlgiTiwbMBW21qrKygKqHzlNL0BuTy0XFUAKDGoCaDA6A1a0WoT9NjZYGygLWAcaEbb+4NYBAMr+tjNcSzYOWA5FY3xEMFsnQhk5HgcNBmheGFsAAAAAAQEqAKoCqgNWAAUAAAEzNxEnIwEqrNTUrAKA1v1U1gACANYAqgMWA1YABQAMAAATMzcRJyMlFAYHER4B1qrW1qoCQDwwMDwCgNb9VNaAOVsYAVgYWwAAAAMAgACKA4ADdgAVABwAIgAAAR4DFRQOAgc1PgM1NC4CJxMUBgcRHgElMzcRJyMCVkBuTy0tT21BLk45Hx85TS9qOjAwOv3AqtbWqgN2DkVjfEREe2NGDlgNN0tcMzNcSzYO/uI5WxgBWBhbR9b9VNYAAAAABADWANYDKgMqAAUACwARABcAAAEzFSM1IxM1MxUjNQE1MxUjFR0BMxUjNQJW1FSAgFTU/oDUgIDUAyrUgP5UgNRUASzUVICsgFTUAAQA1gDWAyoDKgAFAAsAEQAXAAABMxUjNTMDNTMVIxUBNTMVIzURNTMVIzUCqoDUVFTUgP6sVNTUVAKqVNT9rNRUgAHUgNRU/qxU1IAAAAAAAwCAAKoDgANWABcALwA/AAABNTQmKwEiBh0BFBY7ATI2PQEjFSM1MxUjNTQmKwEiBh0BFBY7ATI2PQEjFSM1MxUBMhYVERQGIyEiJjURNDYzAwAYEoASGhoSgBIYQFZW6hoSgBIYGBKAEhpAVlYBlCI0MyP9rCQyMiQCKiwSGBgSrBIYGBIsFoAWLBIYGBKsEhgYEiwWgBYBLDMj/gAiNDMjAgAiNAAABACAAIADgAOAAAMADQAZACkAAAE1MxUnETMyNj0BNCYjAREjFSM1IxEzNTMVATIWFREUBiMhIiY1ETQ2MwJqVpasEhgYEv8AQFZAQFYBlCI0MyP9rCQyMiQBwICAwP8AGBKsEhj/AAEAamr/AFZWAgAzI/2sIjQzIwJUIjQAAAACAGQAVgOcA6oACwBZAAABMjY1NCYjIgYVFBYlFx4BDwEOAS8BDgEPAQ4BKwEiJi8BLgEnBwYmLwEmNj8BLgE1PAE3Jy4BPwE+AR8BPgE/AT4BOwEyFh8BHgEXNzYWHwEWBg8BHgEVHAECAD1ZWD49WVgBfFoGAgRWBA4IahAkFBABCwisBwsCEBMkEWoHDgVWBAIGWgEBAloGAgRWBA4IahAkFBABCwisBwsCEBMkEWoHDgVWBAIGWgEBAWpYPj1ZWD49WWxGBBAIlAcEAyoMFghwBwsKCHAHFQ4qAwMIlAcQBUYKFQsKFQtGBBAIlAcEAyoMFghwBwsKCHAHFQ4qAwMIlAcQBUYKFQsKFQAAAAEAgABYA4ADqgAzAAABMhYVFAYjIiY1PAE3JQ4BIyImNTQ2MzIWFyUuATU0NjMyFhUUBiMiJicFHgEVFAYHBT4BAwAzSUkzM0kC/tISLBo0TEs1GS0SASwBA0s1NExLNRktEv7UAQMCAgEwECwBUkkzM0tLMwcPBrAQEks1NEwREa4HDwg0TEs1NEwTEbAHDwgHDwiwDxEAAwBWAFYDqgOqAAMABwAbAAABNSMVExEjERMyHgIVFA4CIyIuAjU0PgICKlRUVCpYnHNDQ3ObWVicc0NDc5sCgFZW/qoBAP8AAoBDc5tZWJxzQ0Nzm1lYnHNDAAAEAFYAVgOqA6oAAwAXACsALwAAATUzFQMyPgI1NC4CIyIOAhUUHgITMh4CFRQOAiMiLgI1ND4CExEzEQHWVCpGfV02Nl18R0Z9XTY2XXxHWJxzQ0Nzm1lYnHNDQ3ObL1QCgFZW/io2XXxHRn1dNjZdfEdGfV02AwBDc5tZWJxzQ0Nzm1lYnHND/YABAP8AAAABANYA1gMqAyoACwAAAQcXBycHJzcnNxc3Ayru7jzu7jzu7jzu7gLu7u487u487u487u4AAQBVAFUDqwOrABQAABMUHgIzMj4CNTQuAiMiDgIVVUN0nFhYnHRDQ3ScWFicdEMCAFicdENDdJxYWJx0Q0N0nFgAAAACAFUAVQOrA6sAFAAoAAABIg4CFRQeAjMyPgI1NC4CIxEiLgI1ND4CMzIeAhUUDgICAFicdENDdJxYWJx0Q0N0nFhHfF01NV18R0d8XTU1XXwDq0N0nFhYnHRDQ3ScWFicdEP9ADVdfEdHfF01NV18R0d8XTUAAAADAFUAVQOrA6sAFAAoADQAAAEiDgIVFB4CMzI+AjU0LgIjESIuAjU0PgIzMh4CFRQOAhMUBiMiJjU0NjMyFgIAWJx0Q0N0nFhYnHRDQ3ScWEd8XTU1XXxHR3xdNTVdfDlLNTVLSzU1SwOrQ3ScWFicdENDdJxYWJx0Q/0ANV18R0d8XTU1XXxHR3xdNQFVNUtLNTVLSwAAAAEAAAABAADxFM6JXw889QALBAAAAAAA1DSJZQAAAADUNIllAAAAAAOrA9YAAAAIAAIAAAAAAAAAAQAABAAAAAAABAAAAAAAA6sAAQAAAAAAAAAAAAAAAAAAACUEAAAAAAAAAAAAAAAAAAAABAABVgQAAFYEAABWBAABAAQAAFYEAABWBAABAAQAAGoEAACqBAABAAQAAQAEAACqBAAAqgQAAKoEAACqBAAAqgQAAKoEAACABAABKgQAANYEAACABAAA1gQAANYEAACABAAAgAQAAGQEAACABAAAVgQAAFYEAADWBAAAVQQAAFUEAABVAAAAAAAKABQAHgAsAFQAlgCqANgBIAEuAUQBWgFwAYQCEAKoA6YELgTGBcQGEgYiBj4GeAaeBsYHGgdaB+IILghcCKQIvgjgCRwJaAABAAAAJQDHAAQAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEACwAAAAEAAAAAAAIABwCEAAEAAAAAAAMACwBCAAEAAAAAAAQACwCZAAEAAAAAAAUACwAhAAEAAAAAAAYACwBjAAEAAAAAAAoAGgC6AAMAAQQJAAEAFgALAAMAAQQJAAIADgCLAAMAAQQJAAMAFgBNAAMAAQQJAAQAFgCkAAMAAQQJAAUAFgAsAAMAAQQJAAYAFgBuAAMAAQQJAAoANADUdmlkZW8tcmVhY3QAdgBpAGQAZQBvAC0AcgBlAGEAYwB0VmVyc2lvbiAxLjAAVgBlAHIAcwBpAG8AbgAgADEALgAwdmlkZW8tcmVhY3QAdgBpAGQAZQBvAC0AcgBlAGEAYwB0dmlkZW8tcmVhY3QAdgBpAGQAZQBvAC0AcgBlAGEAYwB0UmVndWxhcgBSAGUAZwB1AGwAYQBydmlkZW8tcmVhY3QAdgBpAGQAZQBvAC0AcgBlAGEAYwB0Rm9udCBnZW5lcmF0ZWQgYnkgSWNvTW9vbi4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format(\"woff\"), url(data:application/x-font-ttf;base64,AAEAAAALAIAAAwAwT1MvMg7RD8oAAAC8AAAAYGNtYXAOVuSnAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zsdb3FIAAAF4AAAS0GhlYWQLMledAAAUSAAAADZoaGVhB6wEJgAAFIAAAAAkaG10eIgAFM8AABSkAAAAlGxvY2FLllAoAAAVOAAAAExtYXhwACoAyQAAFYQAAAAgbmFtZVtqyukAABWkAAABtnBvc3QAAwAAAAAXXAAAACAAAwQAAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADyIAQAAAAAAAQAAAAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg8iD//f//AAAAAAAg8gD//f//AAH/4w4EAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAVYA1gMqAyoAAgAACQIBVgHU/iwDKv7W/tYAAgBWAFYDqgOqAAIAFgAAAS0BNzIeAhUUDgIjIi4CNTQ+AgGqAQD/AFZYnHNDQ3ObWVicc0NDc5sBQMDA6kNzm1lYnHNDQ3ObWVicc0MAAAADAFYAVgOqA6oAEwAnACoAACUyPgI1NC4CIyIOAhUUHgITMh4CFRQOAiMiLgI1ND4CExEFAgBGfV02Nl18R0Z9XTY2XXxHWJxzQ0Nzm1lYnHNDQ3ObAwEAqjZdfEdGfV02Nl18R0Z9XTYDAENzm1lYnHNDQ3ObWVicc0P9lgGAwAAAAAACAQAA1gMAAyoAAwAHAAABMxEjIREzEQJWqqr+qqoDKv2sAlT9rAAAAwBWAFYDqgOqAAMABwAbAAABESMRIxEjERMyHgIVFA4CIyIuAjU0PgICgFZUVoBYnHNDQ3ObWVicc0NDc5sBVgFU/qwBVP6sAlRDc5tZWJxzQ0Nzm1lYnHNDAAAEAFYAVgOqA6oAAwAXACsALwAAAREzEQcyPgI1NC4CIyIOAhUUHgITMh4CFRQOAiMiLgI1ND4CAxEzEQIqVoBGfV02Nl18R0Z9XTY2XXxHWJxzQ0Nzm1lYnHNDQ3ObJ1YBVgFU/qysNl18R0Z9XTY2XXxHRn1dNgMAQ3ObWVicc0NDc5tZWJxzQ/2sAVT+rAABAQABAAMAAwAAAwAAASERIQEAAgD+AAMA/gAAAgBqAQADVgMAAAIABQAACQERIQkBAeoBbP6A/pQBbAIAAQD+AAEAAQAAAAACAKoBAAOWAwAAAgAFAAAJAiERAQIqAWz+lP6AAWwDAP8A/wACAP8AAAAAAAIBAAEAAwADAAACAAYAAAkBEQEzESMBlgFq/gBWVgIAAQD+AAIA/gAAAAAAAgEAAQADAAMAAAMABgAAATMRIyERAQKqVlb+VgFqAwD+AAIA/wAAAAIAqgCAA1YD1gBFAGgAAAEOARUUBjEjNzMVIwcwNjU0MjU0FjsBMhYXHgEXHgEVFAYHDgEHDgEHDgEjIiYnLgEnLgE1MxQWMzI2PwEwNj0BLwEwJiMRMh4CFRQOAiMiLgI1MxQeAjMyPgI1NC4CIxUnNwH4AwsEHgpmSgQEBgUDCAYNAwMKAwcLAQMDBQYGBwMDEQYGDQMDCwYICiIODAMGAwoEBAoJA0Z9XTY2XXxHRn1dNlYpRV01NF5FKSlFXTXW1gG8AQUCAwNeHiYBAwMDAwMDAwMGAwcZDgYNAwMNBgYDAwMBAQMDAgMEFgwLCQEDCAkDGggKBAFuNV17R0Z9XTY2XXxHNF5FKSlFXTU0XkUprNbWAAAEAKoAgANWA9YAGwBGAE0AcAAAARQWMzI2PwEwNj0BMCY1NCYjIgYPATAGHQEwFjcUBg8BMAYjIgYjIiYnLgEnLgE9ATQ2PwEwNjMyNjMyFhceARceARceARUHIzUHNTczEzIeAhUUDgIjIi4CNTMUHgIzMj4CNTQuAiMVJzcCNA4GAwgDCAQEEgQDBgMIBgZUAQMMEAYGDgYGDgYGCAYKCAEDDg4GBg4GBg4GBgoGBgMDAwG2KCpMBi5GfV02Nl18R0Z9XTZWKUVdNTReRSkpRV011tYBeAUJAQMKCQNWCQMECgMDCAkDVgknCRMGGgwEAQMDBgMFKA8eCRMGGgwEAQMDBgMDDgkJEAlqjAweGAEeNV17R0Z9XTY2XXxHNF5FKSlFXTU0XkUprNbWAAAABACqAIADVgPWABsARgCjAMYAAAEUFjMyNj8BMDY9ATQmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVIzI2PQEwJjU0JisBMAYjIgYdASM0NjMyNjMyFhceAR0BMAYVFAYjIgYHHgEXHgEVFAYHDgEHDgEjIgYjIiYnLgEnLgE1MxUwFhUUFjsBMDYzMjY9ATAmNTQmKwE1EzIeAhUUDgIjIi4CNTMUHgIzMj4CNTQuAiMVJzcCPBAGAwYDCAQEEAQDCAMIBARQAQMMEAYGDgYPFQoGAwMDAwMDDBAGBgwGBg4GBgoGBgMDAwHiDBIEBQMWBQMDASwWDgMOAw0ZCggIBAUDAwgDBg0DAwUBAwMGAwMNBgYOBgYLAwMNBggKJAQFAxYFAwMBBAUDGmZGfV02Nl18R0Z9XTZWKUVdNTReRSkpRV011tYBeAYIAQMKCQNWAwYDBAoDAwgJA1YJJwkTBhoMBAsFAw4JCRAJHgkTBhoMBAEDAwYDAw4JCRAJDgwIBQMDAQQFAwgPHwQHBQQYCg4JAwMFBwMDBwYGDgYGDQMDCgMDBQQBAwMCAwQbCwgFAwMBBAUDFgUDAwEeAWo1XXtHRn1dNjZdfEc0XkUpKUVdNTReRSms1tYAAAIAqgCAA1YD1gBCAGUAAAEOARUUBjEjNzMVIwcwNjU0MjU0FjsBMhYXHgEXHgEVFAYHDgEHDgEjIiYnLgEnLgE1MxQWMzI2PwEwNj0BLwEwJiMlND4CMzUXBzUiDgIVFB4CMzI+AjUzFA4CIyIuAgH0AwsEGgpmSgQEBgUDCAYNAwMKAwcLAQMDBQYIFw8GDQMDCwYICiIODAMGAwoEBAoJA/6uNl18R9bWNF5FKSlFXTU0XkUpVjZdfEdGfV02AbwBBQIDA14eJgEDAwMDAwMDAwYDBxkOBg0DAw0GCAgBAwMCAwQWDAsJAQMICQMaCAoEGkZ8XTWs1tasKUVdNTReRSkpRV01Rn1dNjZdfAAABACqAIADVgPWABsARgBNAHAAAAEUFjMyNj8BMDY9ATAmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVByM1BzU3MwU0PgIzNRcHNSIOAhUUHgIzMj4CNTMUDgIjIi4CAjQOBgMIAwgEBBIEAwYDCAYGUAEDDBAGBg4GBg4GBggGCggBAw4OBgYOBgYOBgYKBgYDAwMBsigqTAb+2DZdfEfW1jReRSkpRV01NF5FKVY2XXxHRn1dNgF4BQkBAwoJA1YJAwQKAwMICQNWCScJEwYaDAQBAwMGAwUoDx4JEwYaDAQBAwMGAwMOCQkQCWqMDB4YNkZ8XTWs1tasKUVdNTReRSkpRV01Rn1dNjZdfAAAAAQAqgCAA1YD1gAiAD4AaQDGAAATND4CMzUXBzUiDgIVFB4CMzI+AjUzFA4CIyIuAgUUFjMyNj8BMDY9ATAmNTQmIyIGDwEwBh0BMBY3FAYPATAGIyIGIyImJy4BJy4BPQE0Nj8BMDYzMjYzMhYXHgEXHgEXHgEVIzI2PQEwJjU0JisBMAYjIgYdASM0NjMyNjMyFhceAR0BMAYVFAYjIgYHHgEXHgEVFAYHDgEHDgEjIgYjIiYnLgEnLgE1MxUwFhUUFjsBMDYzMjY9ATAmNTQmKwE1qjZdfEfW1jReRSkpRV01NF5FKVY2XXxHRn1dNgGODgYDCAMIBAQSBAMGAwgEBFQBAwwQBgYOBg8VCgYDAwMDAwMMEAYGDAYGDgYGCgYGAwMDAeIMEgQFAxYFAwMBLBYOAw4DDRkKCAgEBQMDCAMGDQMDBQEDAwYDAw0GBg4GBgsDAw0GCAokBAUDFgUDAwEEBQMaAdZGfF01rNbWrClFXTU0XkUpKUVdNUZ9XTY2XXwXBQkBAwoJA1YJAwQKAwMICQNWCScJEwYaDAQLBQMOCQkQCR4JEwYaDAQBAwMGAwMOCQkQCQ4MCAUDAwEEBQMIDx8EBwUEGAoOCQMDBQcDAwcGBg4GBg0DAwoDAwUEAQMDAgMEGwsIBQMDAQQFAxYFAwMBHgAAAAAEAIAAgAOAA4AAAgAUACYALgAAARUnJwEHJw4BBzU+ATcnEScjETMnATQuAic1HgMVFAYHJz4BJxwBByc1HgECAFrwAso2WCJOLBswFbbWqsrKAqofOU0vQG5PLRcVQAoMagJoMDoDVrRahP02NlgbKAtYBxoRtv7g1gEAyv62M1xLNg5YDkVjfEQwWydCGTkeBw0GaF4YWwAAAAABASoAqgKqA1YABQAAATM3EScjASqs1NSsAoDW/VTWAAIA1gCqAxYDVgAFAAwAABMzNxEnIyUUBgcRHgHWqtbWqgJAPDAwPAKA1v1U1oA5WxgBWBhbAAAAAwCAAIoDgAN2ABUAHAAiAAABHgMVFA4CBzU+AzU0LgInExQGBxEeASUzNxEnIwJWQG5PLS1PbUEuTjkfHzlNL2o6MDA6/cCq1taqA3YORWN8RER7Y0YOWA03S1wzM1xLNg7+4jlbGAFYGFtH1v1U1gAAAAAEANYA1gMqAyoABQALABEAFwAAATMVIzUjEzUzFSM1ATUzFSMVHQEzFSM1AlbUVICAVNT+gNSAgNQDKtSA/lSA1FQBLNRUgKyAVNQABADWANYDKgMqAAUACwARABcAAAEzFSM1MwM1MxUjFQE1MxUjNRE1MxUjNQKqgNRUVNSA/qxU1NRUAqpU1P2s1FSAAdSA1FT+rFTUgAAAAAADAIAAqgOAA1YAFwAvAD8AAAE1NCYrASIGHQEUFjsBMjY9ASMVIzUzFSM1NCYrASIGHQEUFjsBMjY9ASMVIzUzFQEyFhURFAYjISImNRE0NjMDABgSgBIaGhKAEhhAVlbqGhKAEhgYEoASGkBWVgGUIjQzI/2sJDIyJAIqLBIYGBKsEhgYEiwWgBYsEhgYEqwSGBgSLBaAFgEsMyP+ACI0MyMCACI0AAAEAIAAgAOAA4AAAwANABkAKQAAATUzFScRMzI2PQE0JiMBESMVIzUjETM1MxUBMhYVERQGIyEiJjURNDYzAmpWlqwSGBgS/wBAVkBAVgGUIjQzI/2sJDIyJAHAgIDA/wAYEqwSGP8AAQBqav8AVlYCADMj/awiNDMjAlQiNAAAAAIAZABWA5wDqgALAFkAAAEyNjU0JiMiBhUUFiUXHgEPAQ4BLwEOAQ8BDgErASImLwEuAScHBiYvASY2PwEuATU8ATcnLgE/AT4BHwE+AT8BPgE7ATIWHwEeARc3NhYfARYGDwEeARUcAQIAPVlYPj1ZWAF8WgYCBFYEDghqECQUEAELCKwHCwIQEyQRagcOBVYEAgZaAQECWgYCBFYEDghqECQUEAELCKwHCwIQEyQRagcOBVYEAgZaAQEBalg+PVlYPj1ZbEYEEAiUBwQDKgwWCHAHCwoIcAcVDioDAwiUBxAFRgoVCwoVC0YEEAiUBwQDKgwWCHAHCwoIcAcVDioDAwiUBxAFRgoVCwoVAAAAAQCAAFgDgAOqADMAAAEyFhUUBiMiJjU8ATclDgEjIiY1NDYzMhYXJS4BNTQ2MzIWFRQGIyImJwUeARUUBgcFPgEDADNJSTMzSQL+0hIsGjRMSzUZLRIBLAEDSzU0TEs1GS0S/tQBAwICATAQLAFSSTMzS0szBw8GsBASSzU0TBERrgcPCDRMSzU0TBMRsAcPCAcPCLAPEQADAFYAVgOqA6oAAwAHABsAAAE1IxUTESMREzIeAhUUDgIjIi4CNTQ+AgIqVFRUKlicc0NDc5tZWJxzQ0NzmwKAVlb+qgEA/wACgENzm1lYnHNDQ3ObWVicc0MAAAQAVgBWA6oDqgADABcAKwAvAAABNTMVAzI+AjU0LgIjIg4CFRQeAhMyHgIVFA4CIyIuAjU0PgITETMRAdZUKkZ9XTY2XXxHRn1dNjZdfEdYnHNDQ3ObWVicc0NDc5svVAKAVlb+KjZdfEdGfV02Nl18R0Z9XTYDAENzm1lYnHNDQ3ObWVicc0P9gAEA/wAAAAEA1gDWAyoDKgALAAABBxcHJwcnNyc3FzcDKu7uPO7uPO7uPO7uAu7u7jzu7jzu7jzu7gABAFUAVQOrA6sAFAAAExQeAjMyPgI1NC4CIyIOAhVVQ3ScWFicdENDdJxYWJx0QwIAWJx0Q0N0nFhYnHRDQ3ScWAAAAAIAVQBVA6sDqwAUACgAAAEiDgIVFB4CMzI+AjU0LgIjESIuAjU0PgIzMh4CFRQOAgIAWJx0Q0N0nFhYnHRDQ3ScWEd8XTU1XXxHR3xdNTVdfAOrQ3ScWFicdENDdJxYWJx0Q/0ANV18R0d8XTU1XXxHR3xdNQAAAAMAVQBVA6sDqwAUACgANAAAASIOAhUUHgIzMj4CNTQuAiMRIi4CNTQ+AjMyHgIVFA4CExQGIyImNTQ2MzIWAgBYnHRDQ3ScWFicdENDdJxYR3xdNTVdfEdHfF01NV18OUs1NUtLNTVLA6tDdJxYWJx0Q0N0nFhYnHRD/QA1XXxHR3xdNTVdfEdHfF01AVU1S0s1NUtLAAAAAQAAAAEAAPEUzolfDzz1AAsEAAAAAADUNIllAAAAANQ0iWUAAAAAA6sD1gAAAAgAAgAAAAAAAAABAAAEAAAAAAAEAAAAAAADqwABAAAAAAAAAAAAAAAAAAAAJQQAAAAAAAAAAAAAAAAAAAAEAAFWBAAAVgQAAFYEAAEABAAAVgQAAFYEAAEABAAAagQAAKoEAAEABAABAAQAAKoEAACqBAAAqgQAAKoEAACqBAAAqgQAAIAEAAEqBAAA1gQAAIAEAADWBAAA1gQAAIAEAACABAAAZAQAAIAEAABWBAAAVgQAANYEAABVBAAAVQQAAFUAAAAAAAoAFAAeACwAVACWAKoA2AEgAS4BRAFaAXABhAIQAqgDpgQuBMYFxAYSBiIGPgZ4Bp4GxgcaB1oH4gguCFwIpAi+COAJHAloAAEAAAAlAMcABAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQALAAAAAQAAAAAAAgAHAIQAAQAAAAAAAwALAEIAAQAAAAAABAALAJkAAQAAAAAABQALACEAAQAAAAAABgALAGMAAQAAAAAACgAaALoAAwABBAkAAQAWAAsAAwABBAkAAgAOAIsAAwABBAkAAwAWAE0AAwABBAkABAAWAKQAAwABBAkABQAWACwAAwABBAkABgAWAG4AAwABBAkACgA0ANR2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRWZXJzaW9uIDEuMABWAGUAcgBzAGkAbwBuACAAMQAuADB2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHR2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRSZWd1bGFyAFIAZQBnAHUAbABhAHJ2aWRlby1yZWFjdAB2AGkAZABlAG8ALQByAGUAYQBjAHRGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format(\"truetype\");\n  font-weight: normal;\n  font-style: normal;\n}\n.video-react-icon, .video-react .video-react-closed-caption, .video-react .video-react-bezel .video-react-bezel-icon, .video-react .video-react-volume-level, .video-react .video-react-mute-control,\n.video-react .video-react-volume-menu-button, .video-react .video-react-play-control, .video-react .video-react-play-progress, .video-react .video-react-big-play-button {\n  /* use !important to prevent issues with browser extensions that change fonts */\n  font-family: \"video-react\" !important;\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.video-react-icon-play-arrow:before, .video-react .video-react-bezel .video-react-bezel-icon-play:before, .video-react .video-react-play-control:before, .video-react .video-react-big-play-button:before {\n  content: \"\";\n}\n\n.video-react-icon-play-circle-filled:before {\n  content: \"\";\n}\n\n.video-react-icon-play-circle-outline:before {\n  content: \"\";\n}\n\n.video-react-icon-pause:before, .video-react .video-react-bezel .video-react-bezel-icon-pause:before, .video-react .video-react-play-control.video-react-playing:before {\n  content: \"\";\n}\n\n.video-react-icon-pause-circle-filled:before {\n  content: \"\";\n}\n\n.video-react-icon-pause-circle-outline:before {\n  content: \"\";\n}\n\n.video-react-icon-stop:before {\n  content: \"\";\n}\n\n.video-react-icon-fast-rewind:before, .video-react .video-react-bezel .video-react-bezel-icon-fast-rewind:before {\n  content: \"\";\n}\n\n.video-react-icon-fast-forward:before, .video-react .video-react-bezel .video-react-bezel-icon-fast-forward:before {\n  content: \"\";\n}\n\n.video-react-icon-skip-previous:before {\n  content: \"\";\n}\n\n.video-react-icon-skip-next:before {\n  content: \"\";\n}\n\n.video-react-icon-replay-5:before, .video-react .video-react-bezel .video-react-bezel-icon-replay-5:before {\n  content: \"\";\n}\n\n.video-react-icon-replay-10:before, .video-react .video-react-bezel .video-react-bezel-icon-replay-10:before {\n  content: \"\";\n}\n\n.video-react-icon-replay-30:before, .video-react .video-react-bezel .video-react-bezel-icon-replay-30:before {\n  content: \"\";\n}\n\n.video-react-icon-forward-5:before, .video-react .video-react-bezel .video-react-bezel-icon-forward-5:before {\n  content: \"\";\n}\n\n.video-react-icon-forward-10:before, .video-react .video-react-bezel .video-react-bezel-icon-forward-10:before {\n  content: \"\";\n}\n\n.video-react-icon-forward-30:before, .video-react .video-react-bezel .video-react-bezel-icon-forward-30:before {\n  content: \"\";\n}\n\n.video-react-icon-volume-off:before, .video-react .video-react-bezel .video-react-bezel-icon-volume-off:before, .video-react .video-react-mute-control.video-react-vol-muted:before,\n.video-react .video-react-volume-menu-button.video-react-vol-muted:before {\n  content: \"\";\n}\n\n.video-react-icon-volume-mute:before, .video-react .video-react-mute-control.video-react-vol-0:before,\n.video-react .video-react-volume-menu-button.video-react-vol-0:before {\n  content: \"\";\n}\n\n.video-react-icon-volume-down:before, .video-react .video-react-bezel .video-react-bezel-icon-volume-down:before, .video-react .video-react-mute-control.video-react-vol-2:before,\n.video-react .video-react-volume-menu-button.video-react-vol-2:before, .video-react .video-react-mute-control.video-react-vol-1:before,\n.video-react .video-react-volume-menu-button.video-react-vol-1:before {\n  content: \"\";\n}\n\n.video-react-icon-volume-up:before, .video-react .video-react-bezel .video-react-bezel-icon-volume-up:before, .video-react .video-react-mute-control:before,\n.video-react .video-react-volume-menu-button:before {\n  content: \"\";\n}\n\n.video-react-icon-fullscreen:before {\n  content: \"\";\n}\n\n.video-react-icon-fullscreen-exit:before {\n  content: \"\";\n}\n\n.video-react-icon-closed-caption:before, .video-react .video-react-closed-caption:before {\n  content: \"\";\n}\n\n.video-react-icon-hd:before {\n  content: \"\";\n}\n\n.video-react-icon-settings:before {\n  content: \"\";\n}\n\n.video-react-icon-share:before {\n  content: \"\";\n}\n\n.video-react-icon-info:before {\n  content: \"\";\n}\n\n.video-react-icon-info-outline:before {\n  content: \"\";\n}\n\n.video-react-icon-close:before {\n  content: \"\";\n}\n\n.video-react-icon-circle:before, .video-react .video-react-volume-level:before, .video-react .video-react-play-progress:before {\n  content: \"\";\n}\n\n.video-react-icon-circle-outline:before {\n  content: \"\";\n}\n\n.video-react-icon-circle-inner-circle:before {\n  content: \"\";\n}\n\n.video-react {\n  display: block;\n  vertical-align: top;\n  box-sizing: border-box;\n  color: #fff;\n  background-color: #000;\n  position: relative;\n  font-size: 10px;\n  line-height: 1;\n  font-family: serif, Times, \"Times New Roman\";\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.video-react:-moz-full-screen {\n  position: absolute;\n}\n.video-react:-webkit-full-screen {\n  width: 100% !important;\n  height: 100% !important;\n}\n.video-react *,\n.video-react *:before,\n.video-react *:after {\n  box-sizing: inherit;\n}\n.video-react ul {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n  list-style-position: outside;\n  margin-left: 0;\n  margin-right: 0;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.video-react.video-react-fluid, .video-react.video-react-16-9, .video-react.video-react-4-3 {\n  width: 100%;\n  max-width: 100%;\n  height: 0;\n}\n.video-react.video-react-16-9 {\n  padding-top: 56.25%;\n}\n.video-react.video-react-4-3 {\n  padding-top: 75%;\n}\n.video-react.video-react-fill {\n  width: 100%;\n  height: 100%;\n}\n.video-react .video-react-video {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.video-react.video-react-fullscreen {\n  width: 100% !important;\n  height: 100% !important;\n  padding-top: 0 !important;\n}\n.video-react.video-react-fullscreen.video-react-user-inactive {\n  cursor: none;\n}\n\nbody.video-react-full-window {\n  padding: 0;\n  margin: 0;\n  height: 100%;\n  overflow-y: auto;\n}\nbody.video-react-full-window .video-react-fullscreen {\n  position: fixed;\n  overflow: hidden;\n  z-index: 1000;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n}\n\n.video-react button {\n  background: none;\n  border: none;\n  color: inherit;\n  display: inline-block;\n  cursor: pointer;\n  overflow: visible;\n  font-size: inherit;\n  line-height: inherit;\n  text-transform: none;\n  text-decoration: none;\n  transition: none;\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n\n.video-react .video-react-loading-spinner {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: -25px 0 0 -25px;\n  opacity: 0.85;\n  text-align: left;\n  border: 6px solid rgba(43, 51, 63, 0.7);\n  box-sizing: border-box;\n  background-clip: padding-box;\n  width: 50px;\n  height: 50px;\n  border-radius: 25px;\n}\n.video-react .video-react-loading-spinner:before, .video-react .video-react-loading-spinner:after {\n  content: \"\";\n  position: absolute;\n  margin: -6px;\n  box-sizing: inherit;\n  width: inherit;\n  height: inherit;\n  border-radius: inherit;\n  opacity: 1;\n  border: inherit;\n  border-color: transparent;\n  border-top-color: white;\n  -webkit-animation: video-react-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, video-react-spinner-fade 1.1s linear infinite;\n  animation: video-react-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, video-react-spinner-fade 1.1s linear infinite;\n}\n\n.video-react-seeking .video-react-loading-spinner,\n.video-react-waiting .video-react-loading-spinner {\n  display: block;\n}\n\n.video-react-seeking .video-react-loading-spinner:before,\n.video-react-waiting .video-react-loading-spinner:before {\n  border-top-color: white;\n}\n\n.video-react-seeking .video-react-loading-spinner:after,\n.video-react-waiting .video-react-loading-spinner:after {\n  border-top-color: white;\n  -webkit-animation-delay: 0.44s;\n  animation-delay: 0.44s;\n}\n\n@keyframes video-react-spinner-spin {\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes video-react-spinner-spin {\n  100% {\n    -webkit-transform: rotate(360deg);\n  }\n}\n@keyframes video-react-spinner-fade {\n  0% {\n    border-top-color: #73859f;\n  }\n  20% {\n    border-top-color: #73859f;\n  }\n  35% {\n    border-top-color: white;\n  }\n  60% {\n    border-top-color: #73859f;\n  }\n  100% {\n    border-top-color: #73859f;\n  }\n}\n@-webkit-keyframes video-react-spinner-fade {\n  0% {\n    border-top-color: #73859f;\n  }\n  20% {\n    border-top-color: #73859f;\n  }\n  35% {\n    border-top-color: white;\n  }\n  60% {\n    border-top-color: #73859f;\n  }\n  100% {\n    border-top-color: #73859f;\n  }\n}\n.video-react .video-react-big-play-button {\n  font-size: 3em;\n  line-height: 1.5em;\n  height: 1.5em;\n  width: 3em;\n  display: block;\n  position: absolute;\n  top: 10px;\n  left: 10px;\n  padding: 0;\n  cursor: pointer;\n  opacity: 1;\n  border: 0.06666em solid #fff;\n  background-color: #2B333F;\n  background-color: rgba(43, 51, 63, 0.7);\n  -webkit-border-radius: 0.3em;\n  -moz-border-radius: 0.3em;\n  border-radius: 0.3em;\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n.video-react .video-react-big-play-button.video-react-big-play-button-center {\n  top: 50%;\n  left: 50%;\n  margin-top: -0.75em;\n  margin-left: -1.5em;\n}\n.video-react .video-react-big-play-button.big-play-button-hide {\n  display: none;\n}\n.video-react:hover .video-react-big-play-button,\n.video-react .video-react-big-play-button:focus {\n  outline: 0;\n  border-color: #fff;\n  background-color: #73859f;\n  background-color: rgba(115, 133, 159, 0.5);\n  -webkit-transition: all 0s;\n  -moz-transition: all 0s;\n  -o-transition: all 0s;\n  transition: all 0s;\n}\n\n.video-react-menu-button {\n  cursor: pointer;\n}\n.video-react-menu-button.video-react-disabled {\n  cursor: default;\n}\n\n.video-react-menu .video-react-menu-content {\n  display: block;\n  padding: 0;\n  margin: 0;\n  overflow: auto;\n  font-family: serif, Times, \"Times New Roman\";\n}\n.video-react-menu li {\n  list-style: none;\n  margin: 0;\n  padding: 0.2em 0;\n  line-height: 1.4em;\n  font-size: 1.2em;\n  text-align: center;\n}\n.video-react-menu li:focus, .video-react-menu li:hover {\n  outline: 0;\n  background-color: #73859f;\n  background-color: rgba(115, 133, 159, 0.5);\n}\n.video-react-menu li.video-react-selected, .video-react-menu li.video-react-selected:focus, .video-react-menu li.video-react-selected:hover {\n  background-color: #fff;\n  color: #2B333F;\n}\n.video-react-menu li.vjs-menu-title {\n  text-align: center;\n  text-transform: uppercase;\n  font-size: 1em;\n  line-height: 2em;\n  padding: 0;\n  margin: 0 0 0.3em 0;\n  font-weight: bold;\n  cursor: default;\n}\n\n.video-react-scrubbing .vjs-menu-button:hover .video-react-menu {\n  display: none;\n}\n\n.video-react .video-react-menu-button-popup .video-react-menu {\n  display: none;\n  position: absolute;\n  bottom: 0;\n  width: 10em;\n  left: -3em;\n  height: 0em;\n  margin-bottom: 1.5em;\n  border-top-color: rgba(43, 51, 63, 0.7);\n}\n.video-react .video-react-menu-button-popup .video-react-menu .video-react-menu-content {\n  background-color: #2B333F;\n  background-color: rgba(43, 51, 63, 0.7);\n  position: absolute;\n  width: 100%;\n  bottom: 1.5em;\n  max-height: 15em;\n}\n\n.video-react-menu-button-popup .video-react-menu.video-react-lock-showing {\n  display: block;\n}\n\n.video-react .video-react-menu-button-inline {\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n  overflow: hidden;\n}\n.video-react .video-react-menu-button-inline:before {\n  width: 2.222222222em;\n}\n.video-react .video-react-menu-button-inline:hover, .video-react .video-react-menu-button-inline:focus, .video-react .video-react-menu-button-inline.video-react-slider-active {\n  width: 12em;\n}\n.video-react .video-react-menu-button-inline:hover .video-react-menu, .video-react .video-react-menu-button-inline:focus .video-react-menu, .video-react .video-react-menu-button-inline.video-react-slider-active .video-react-menu {\n  display: block;\n  opacity: 1;\n}\n.video-react .video-react-menu-button-inline.video-react-slider-active {\n  -webkit-transition: none;\n  -moz-transition: none;\n  -o-transition: none;\n  transition: none;\n}\n.video-react .video-react-menu-button-inline .video-react-menu {\n  opacity: 0;\n  height: 100%;\n  width: auto;\n  position: absolute;\n  left: 4em;\n  top: 0;\n  padding: 0;\n  margin: 0;\n  -webkit-transition: all 0.4s;\n  -moz-transition: all 0.4s;\n  -o-transition: all 0.4s;\n  transition: all 0.4s;\n}\n.video-react .video-react-menu-button-inline .video-react-menu-content {\n  width: auto;\n  height: 100%;\n  margin: 0;\n  overflow: hidden;\n}\n\n.video-react-no-flex .video-react-menu-button-inline .video-react-menu {\n  display: block;\n  opacity: 1;\n  position: relative;\n  width: auto;\n}\n.video-react-no-flex .video-react-menu-button-inline:hover, .video-react-no-flex .video-react-menu-button-inline:focus, .video-react-no-flex .video-react-menu-button-inline.video-react-slider-active {\n  width: auto;\n}\n\n.video-react .video-react-poster {\n  display: inline-block;\n  vertical-align: middle;\n  background-repeat: no-repeat;\n  background-position: 50% 50%;\n  background-size: contain;\n  background-color: #000000;\n  cursor: pointer;\n  margin: 0;\n  padding: 0;\n  position: absolute;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  height: 100%;\n}\n.video-react .video-react-poster img {\n  display: block;\n  vertical-align: middle;\n  margin: 0 auto;\n  max-height: 100%;\n  padding: 0;\n  width: 100%;\n}\n\n.video-react .video-react-slider {\n  outline: 0;\n  position: relative;\n  cursor: pointer;\n  padding: 0;\n  margin: 0 0.45em 0 0.45em;\n  background-color: #73859f;\n  background-color: rgba(115, 133, 159, 0.5);\n}\n.video-react .video-react-slider:focus {\n  -webkit-box-shadow: 0 0 1em #fff;\n  -moz-box-shadow: 0 0 1em #fff;\n  box-shadow: 0 0 1em #fff;\n}\n\n.video-react .video-react-control {\n  outline: none;\n  position: relative;\n  text-align: center;\n  margin: 0;\n  padding: 0;\n  height: 100%;\n  width: 4em;\n  -webkit-box-flex: none;\n  -moz-box-flex: none;\n  -webkit-flex: none;\n  -ms-flex: none;\n  flex: none;\n}\n.video-react .video-react-control:before {\n  font-size: 1.8em;\n  line-height: 1.67;\n}\n.video-react .video-react-control:focus:before, .video-react .video-react-control:hover:before, .video-react .video-react-control:focus {\n  text-shadow: 0em 0em 1em #fff, 0em 0em 0.5em #fff;\n}\n\n.video-react .video-react-control-text {\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.video-react-no-flex .video-react-control {\n  display: table-cell;\n  vertical-align: middle;\n}\n\n.video-react .video-react-control-bar {\n  display: none;\n  width: 100%;\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  right: 0;\n  height: 3em;\n  background-color: #2B333F;\n  background-color: rgba(43, 51, 63, 0.7);\n}\n\n.video-react-has-started .video-react-control-bar {\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  visibility: visible;\n  opacity: 1;\n  -webkit-transition: visibility 0.1s, opacity 0.1s;\n  -moz-transition: visibility 0.1s, opacity 0.1s;\n  -o-transition: visibility 0.1s, opacity 0.1s;\n  transition: visibility 0.1s, opacity 0.1s;\n}\n\n.video-react-has-started.video-react-user-inactive.video-react-playing .video-react-control-bar.video-react-control-bar-auto-hide {\n  visibility: visible;\n  opacity: 0;\n  -webkit-transition: visibility 1s, opacity 1s;\n  -moz-transition: visibility 1s, opacity 1s;\n  -o-transition: visibility 1s, opacity 1s;\n  transition: visibility 1s, opacity 1s;\n}\n\n.video-react-controls-disabled .video-react-control-bar,\n.video-react-using-native-controls .video-react-control-bar,\n.video-react-error .video-react-control-bar {\n  display: none !important;\n}\n\n.video-react-audio.video-react-has-started.video-react-user-inactive.video-react-playing .video-react-control-bar {\n  opacity: 1;\n  visibility: visible;\n}\n\n.video-react-has-started.video-react-no-flex .video-react-control-bar {\n  display: table;\n}\n\n.video-react .video-react-progress-control {\n  -webkit-box-flex: auto;\n  -moz-box-flex: auto;\n  -webkit-flex: auto;\n  -ms-flex: auto;\n  flex: auto;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n  min-width: 4em;\n}\n\n.video-react-live .video-react-progress-control {\n  display: none;\n}\n\n.video-react .video-react-progress-holder {\n  -webkit-box-flex: auto;\n  -moz-box-flex: auto;\n  -webkit-flex: auto;\n  -ms-flex: auto;\n  flex: auto;\n  -webkit-transition: all 0.2s;\n  -moz-transition: all 0.2s;\n  -o-transition: all 0.2s;\n  transition: all 0.2s;\n  height: 0.3em;\n}\n\n.video-react .video-react-progress-control:hover .video-react-progress-holder {\n  font-size: 1.6666666667em;\n}\n\n/* If we let the font size grow as much as everything else, the current time tooltip ends up\n ginormous. If you'd like to enable the current time tooltip all the time, this should be disabled\n to avoid a weird hitch when you roll off the hover. */\n.video-react .video-react-progress-control:hover .video-react-time-tooltip,\n.video-react .video-react-progress-control:hover .video-react-mouse-display:after,\n.video-react .video-react-progress-control:hover .video-react-play-progress:after {\n  visibility: visible;\n  font-size: 0.6em;\n}\n\n.video-react .video-react-progress-holder .video-react-play-progress,\n.video-react .video-react-progress-holder .video-react-load-progress,\n.video-react .video-react-progress-holder .video-react-tooltip-progress-bar,\n.video-react .video-react-progress-holder .video-react-load-progress div {\n  position: absolute;\n  display: block;\n  height: 0.3em;\n  margin: 0;\n  padding: 0;\n  width: 0;\n  left: 0;\n  top: 0;\n}\n\n.video-react .video-react-play-progress {\n  background-color: #fff;\n}\n.video-react .video-react-play-progress:before {\n  position: absolute;\n  top: -0.3333333333em;\n  right: -0.5em;\n  font-size: 0.9em;\n}\n\n.video-react .video-react-time-tooltip,\n.video-react .video-react-mouse-display:after,\n.video-react .video-react-play-progress:after {\n  visibility: hidden;\n  pointer-events: none;\n  position: absolute;\n  top: -3.4em;\n  right: -1.9em;\n  font-size: 0.9em;\n  color: #000;\n  content: attr(data-current-time);\n  padding: 6px 8px 8px 8px;\n  background-color: #fff;\n  background-color: rgba(255, 255, 255, 0.8);\n  -webkit-border-radius: 0.3em;\n  -moz-border-radius: 0.3em;\n  border-radius: 0.3em;\n}\n\n.video-react .video-react-time-tooltip,\n.video-react .video-react-play-progress:before,\n.video-react .video-react-play-progress:after {\n  z-index: 1;\n}\n\n.video-react .video-react-progress-control .video-react-keep-tooltips-inside:after {\n  display: none;\n}\n\n.video-react .video-react-load-progress {\n  background: #bfc7d3;\n  background: rgba(115, 133, 159, 0.5);\n}\n\n.video-react .video-react-load-progress div {\n  background: white;\n  background: rgba(115, 133, 159, 0.75);\n}\n\n.video-react.video-react-no-flex .video-react-progress-control {\n  width: auto;\n}\n\n.video-react .video-react-time-tooltip {\n  display: inline-block;\n  height: 2.4em;\n  position: relative;\n  float: right;\n  right: -1.9em;\n}\n\n.video-react .video-react-tooltip-progress-bar {\n  visibility: hidden;\n}\n\n.video-react .video-react-progress-control .video-react-mouse-display {\n  display: none;\n  position: absolute;\n  width: 1px;\n  height: 100%;\n  background-color: #000;\n  z-index: 1;\n}\n\n.video-react-no-flex .video-react-progress-control .video-react-mouse-display {\n  z-index: 0;\n}\n\n.video-react .video-react-progress-control:hover .video-react-mouse-display {\n  display: block;\n}\n\n.video-react.video-react-user-inactive .video-react-progress-control .video-react-mouse-display,\n.video-react.video-react-user-inactive .video-react-progress-control .video-react-mouse-display:after {\n  visibility: hidden;\n  opacity: 0;\n  -webkit-transition: visibility 1s, opacity 1s;\n  -moz-transition: visibility 1s, opacity 1s;\n  -o-transition: visibility 1s, opacity 1s;\n  transition: visibility 1s, opacity 1s;\n}\n\n.video-react.video-react-user-inactive.video-react-no-flex .video-react-progress-control .video-react-mouse-display,\n.video-react.video-react-user-inactive.video-react-no-flex .video-react-progress-control .video-react-mouse-display:after {\n  display: none;\n}\n\n.video-react .video-react-mouse-display .video-react-time-tooltip,\n.video-react .video-react-progress-control .video-react-mouse-display:after {\n  color: #fff;\n  background-color: #000;\n  background-color: rgba(0, 0, 0, 0.8);\n}\n\n.video-react .video-react-play-control {\n  cursor: pointer;\n  -webkit-box-flex: none;\n  -moz-box-flex: none;\n  -webkit-flex: none;\n  -ms-flex: none;\n  flex: none;\n}\n.video-react .video-react-fullscreen-control {\n  cursor: pointer;\n  -webkit-box-flex: none;\n  -moz-box-flex: none;\n  -webkit-flex: none;\n  -ms-flex: none;\n  flex: none;\n}\n\n.video-react.video-react-fullscreen {\n  position: fixed;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  right: 0;\n  z-index: 9999;\n}\n\n.video-react .video-react-time-control {\n  -webkit-box-flex: none;\n  -moz-box-flex: none;\n  -webkit-flex: none;\n  -ms-flex: none;\n  flex: none;\n  font-size: 1em;\n  line-height: 3em;\n  min-width: 2em;\n  width: auto;\n  padding-left: 1em;\n  padding-right: 1em;\n}\n.video-react .video-react-time-divider {\n  line-height: 3em;\n  min-width: initial;\n  padding: 0;\n}\n\n.video-react .video-react-mute-control,\n.video-react .video-react-volume-menu-button {\n  cursor: pointer;\n  -webkit-box-flex: none;\n  -moz-box-flex: none;\n  -webkit-flex: none;\n  -ms-flex: none;\n  flex: none;\n}\n.video-react .video-react-volume-control {\n  width: 5em;\n  -webkit-box-flex: none;\n  -moz-box-flex: none;\n  -webkit-flex: none;\n  -ms-flex: none;\n  flex: none;\n  display: -webkit-box;\n  display: -webkit-flex;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -webkit-align-items: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n.video-react .video-react-volume-bar {\n  margin: 1.35em 0.45em;\n}\n.video-react .video-react-volume-bar.video-react-slider-horizontal {\n  width: 5em;\n  height: 0.3em;\n}\n.video-react .video-react-volume-bar.video-react-slider-horizontal .video-react-volume-level {\n  width: 100%;\n}\n.video-react .video-react-volume-bar.video-react-slider-vertical {\n  width: 0.3em;\n  height: 5em;\n  margin: 1.35em auto;\n}\n.video-react .video-react-volume-bar.video-react-slider-vertical .video-react-volume-level {\n  height: 100%;\n}\n.video-react .video-react-volume-level {\n  position: absolute;\n  bottom: 0;\n  left: 0;\n  background-color: #fff;\n}\n.video-react .video-react-volume-level:before {\n  position: absolute;\n  font-size: 0.9em;\n}\n.video-react .video-react-slider-vertical .video-react-volume-level {\n  width: 0.3em;\n}\n.video-react .video-react-slider-vertical .video-react-volume-level:before {\n  top: -0.5em;\n  left: -0.3em;\n}\n.video-react .video-react-slider-horizontal .video-react-volume-level {\n  height: 0.3em;\n}\n.video-react .video-react-slider-horizontal .video-react-volume-level:before {\n  top: -0.3em;\n  right: -0.5em;\n}\n.video-react .video-react-menu-button-popup.video-react-volume-menu-button .video-react-menu {\n  display: block;\n  width: 0;\n  height: 0;\n  border-top-color: transparent;\n}\n.video-react .video-react-menu-button-popup.video-react-volume-menu-button-vertical .video-react-menu {\n  left: 0.5em;\n  height: 8em;\n}\n.video-react .video-react-menu-button-popup.video-react-volume-menu-button-horizontal .video-react-menu {\n  left: -2em;\n}\n.video-react .video-react-menu-button-popup.video-react-volume-menu-button .video-react-menu-content {\n  height: 0;\n  width: 0;\n  overflow-x: hidden;\n  overflow-y: hidden;\n}\n.video-react .video-react-volume-menu-button-vertical:hover .video-react-menu-content,\n.video-react .video-react-volume-menu-button-vertical:focus .video-react-menu-content,\n.video-react .video-react-volume-menu-button-vertical.video-react-slider-active .video-react-menu-content,\n.video-react .video-react-volume-menu-button-vertical .video-react-lock-showing .video-react-menu-content {\n  height: 8em;\n  width: 2.9em;\n}\n.video-react .video-react-volume-menu-button-horizontal:hover .video-react-menu-content,\n.video-react .video-react-volume-menu-button-horizontal:focus .video-react-menu-content,\n.video-react .video-react-volume-menu-button-horizontal .video-react-slider-active .video-react-menu-content,\n.video-react .video-react-volume-menu-button-horizontal .video-react-lock-showing .video-react-menu-content {\n  height: 2.9em;\n  width: 8em;\n}\n.video-react .video-react-volume-menu-button.video-react-menu-button-inline .video-react-menu-content {\n  background-color: transparent !important;\n}\n\n.video-react .video-react-playback-rate .video-react-playback-rate-value {\n  line-height: 3em;\n  text-align: center;\n}\n.video-react .video-react-playback-rate .video-react-menu {\n  width: 4em;\n  left: 0em;\n}\n\n.video-react .video-react-bezel {\n  position: absolute;\n  left: 50%;\n  top: 50%;\n  width: 52px;\n  height: 52px;\n  z-index: 17;\n  margin-left: -26px;\n  margin-top: -26px;\n  background: rgba(0, 0, 0, 0.5);\n  border-radius: 26px;\n}\n.video-react .video-react-bezel.video-react-bezel-animation {\n  -moz-animation: video-react-bezel-fadeout 0.5s linear 1 normal forwards;\n  -webkit-animation: video-react-bezel-fadeout 0.5s linear 1 normal forwards;\n  animation: video-react-bezel-fadeout 0.5s linear 1 normal forwards;\n  pointer-events: none;\n}\n.video-react .video-react-bezel.video-react-bezel-animation-alt {\n  -moz-animation: video-react-bezel-fadeout-alt 0.5s linear 1 normal forwards;\n  -webkit-animation: video-react-bezel-fadeout-alt 0.5s linear 1 normal forwards;\n  animation: video-react-bezel-fadeout-alt 0.5s linear 1 normal forwards;\n  pointer-events: none;\n}\n.video-react .video-react-bezel .video-react-bezel-icon {\n  width: 36px;\n  height: 36px;\n  margin: 8px;\n  font-size: 26px;\n  line-height: 36px;\n  text-align: center;\n}\n@keyframes video-react-bezel-fadeout {\n  0% {\n    opacity: 1;\n  }\n  to {\n    opacity: 0;\n    transform: scale(2);\n  }\n}\n@keyframes video-react-bezel-fadeout-alt {\n  0% {\n    opacity: 1;\n  }\n  to {\n    opacity: 0;\n    transform: scale(2);\n  }\n}\n.video-react .video-react-closed-caption {\n  cursor: pointer;\n  -webkit-box-flex: none;\n  -moz-box-flex: none;\n  -webkit-flex: none;\n  -ms-flex: none;\n  flex: none;\n}\n.video-react video::-webkit-media-text-track-container {\n  -webkit-transform: translateY(-30px);\n  transform: translateY(-30px);\n}"
  },
  {
    "path": "src/materials/media/Video/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { Player, BigPlayButton } from \"video-react\";\nimport \"./index.css\";\nimport { IVideoConfig } from \"./schema\";\nimport logo from \"@/assets/video.png\";\nconst VideoPlayer = memo((props: IVideoConfig & { isTpl: boolean }) => {\n  const { poster, url, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <div>\n          <Player\n            playsInline\n            poster={poster[0].url}\n            src={\n              url ||\n              \"https://gossv.vcg.com/cmsUploadVideo/creative/1移轴/7月移轴.mp4\"\n            }\n          >\n            <BigPlayButton position=\"center\" />\n          </Player>\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default VideoPlayer;\n"
  },
  {
    "path": "src/materials/media/Video/schema.ts",
    "content": "import {\n  ITextConfigType,\n  IUploadConfigType,\n  TTextDefaultType,\n  TUploadDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TVideoEditData = Array<IUploadConfigType | ITextConfigType>;\nexport interface IVideoConfig {\n  poster: TUploadDefaultType;\n  url: TTextDefaultType;\n}\n\nexport interface IVideoSchema {\n  editData: TVideoEditData;\n  config: IVideoConfig;\n}\n\nconst Video: IVideoSchema = {\n  editData: [\n    {\n      key: \"poster\",\n      name: \"视频封面\",\n      type: \"Upload\"\n    },\n    {\n      key: \"url\",\n      name: \"视频链接\",\n      type: \"Text\"\n    }\n  ],\n  config: {\n    poster: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: \"http://49.234.61.19/uploads/1_1740c6fbcd9.png\"\n      }\n    ],\n    url: \"\"\n  }\n};\n\nexport default Video;\n"
  },
  {
    "path": "src/materials/media/Video/template.ts",
    "content": "const template = {\n  type: \"Video\",\n  h: 107,\n  displayName: \"视频组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/media/schema.ts",
    "content": "import Video from \"./Video/schema\";\nimport Audio from \"./Audio/schema\";\nimport Calendar from \"./Calendar/schema\";\nimport Map from \"./Map/schema\";\n\nconst mediaSchema = {\n  Video,\n  Audio,\n  Calendar,\n  Map\n};\nexport default mediaSchema;\n"
  },
  {
    "path": "src/materials/media/template.ts",
    "content": "import Video from \"./Video/template\";\nimport Audio from \"./Audio/template\";\nimport Map from \"./Map/template\";\nimport Calendar from \"./Calendar/template\";\n\nconst mediaTemplate = [Video, Audio, Map, Calendar];\n\nconst MediaTemplate = mediaTemplate.map(v => {\n  return { ...v, category: \"media\" };\n});\n\nexport default MediaTemplate;\n"
  },
  {
    "path": "src/materials/schema.ts",
    "content": "import BasicSchema from \"./base/schema\";\nimport MediaSchema from \"./media/schema\";\nimport VisualSchema from \"./visual/schema\";\nimport ShopSchema from \"./shop/schema\";\n\nconst schema = {\n  ...BasicSchema,\n  ...MediaSchema,\n  ...VisualSchema,\n  ...ShopSchema\n};\n\nexport default schema;\n"
  },
  {
    "path": "src/materials/shop/CardLabel/index.less",
    "content": ".topArea {\n  padding: 10px;\n  display: flex;\n  background: linear-gradient(\n    45deg,\n    rgba(212, 176, 11, 1),\n    rgba(240, 123, 123, 1)\n  );\n  align-items: center;\n  .leftBox {\n    max-width: 72px;\n    max-height: 72px;\n    overflow: hidden;\n    img {\n      width: 100%;\n      height: 100%;\n      object-fit: contain;\n    }\n  }\n  .rightBox {\n    margin-left: 6px;\n    .title {\n      display: inline-block;\n      border-radius: 10px;\n      font-size: 12px;\n    }\n    .desc {\n      margin-top: 3px;\n      font-size: 12px;\n      transform: scale(0.8);\n      transform-origin: left;\n      color: #fff;\n    }\n  }\n}\n"
  },
  {
    "path": "src/materials/shop/CardLabel/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { IZLConfig } from \"./schema\";\nimport logo from \"@/assets/cardLabel.png\";\nimport styles from \"./index.less\";\n\ninterface IProps extends IZLConfig {\n  isTpl?: boolean;\n}\n\nconst Coupons = memo((props: IProps) => {\n  const {\n    title,\n    desc,\n    link,\n    frontColor,\n    titColor,\n    round,\n    imgUrl,\n    bgColor,\n    isTpl\n  } = props;\n  const toLink = () => {\n    if (link && window.location.href.indexOf(\"editor\") < 0) {\n      window.location.href = link;\n    }\n  };\n  return isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logo} alt=\"\"></img>\n    </div>\n  ) : (\n    <div\n      style={{\n        maxWidth: \"calc(100% - 8px)\",\n        borderRadius: round + \"px\",\n        margin: \"4px auto\",\n        overflow: \"hidden\",\n        boxShadow: \"0 0 6px rgba(0,0,0, .1)\"\n      }}\n    >\n      <div\n        className={styles.topArea}\n        style={{\n          backgroundImage: `linear-gradient(45deg, ${frontColor}, ${bgColor})`\n        }}\n        onClick={toLink}\n      >\n        <div className={styles.leftBox}>\n          <img src={imgUrl && imgUrl[0].url} alt=\"\" />\n        </div>\n        {title && (\n          <div className={styles.rightBox}>\n            <div className={styles.title} style={{ color: titColor }}>\n              {title}\n            </div>\n            <div className={styles.desc}>{desc}</div>\n          </div>\n        )}\n      </div>\n    </div>\n  );\n});\n\nexport default Coupons;\n"
  },
  {
    "path": "src/materials/shop/CardLabel/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  ITextAreaConfigType,\n  IUploadConfigType,\n  IRichTextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType,\n  TUploadDefaultType\n} from \"@/components/FormComponents/types\";\n\nimport { serverUrl } from \"@/utils/tool\";\n\nexport type TZLEditData = Array<\n  | IUploadConfigType\n  | ITextConfigType\n  | IColorConfigType\n  | INumberConfigType\n  | ITextAreaConfigType\n  | IRichTextConfigType\n>;\nexport interface IZLConfig {\n  imgUrl: TUploadDefaultType;\n  title: TTextDefaultType;\n  titColor: TColorDefaultType;\n  desc: TTextDefaultType;\n  round: TNumberDefaultType;\n  bgColor: TColorDefaultType;\n  frontColor: TColorDefaultType;\n  link: TTextDefaultType;\n}\n\nexport interface ICardSchema {\n  editData: TZLEditData;\n  config: IZLConfig;\n}\n\nconst CardLabel: ICardSchema = {\n  editData: [\n    {\n      key: \"imgUrl\",\n      name: \"图片\",\n      type: \"Upload\"\n    },\n    {\n      key: \"title\",\n      name: \"标题\",\n      type: \"Text\"\n    },\n    {\n      key: \"titColor\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"desc\",\n      name: \"描述\",\n      type: \"Text\"\n    },\n    {\n      key: \"round\",\n      name: \"圆角\",\n      type: \"Number\"\n    },\n    {\n      key: \"bgColor\",\n      name: \"背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"frontColor\",\n      name: \"前景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"link\",\n      name: \"跳转链接\",\n      type: \"Text\"\n    }\n  ],\n  config: {\n    imgUrl: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: `${serverUrl}/uploads/1_1740c6fbcd9.png`\n      }\n    ],\n    bgColor: \"rgba(168,11,212,1)\",\n    round: 4,\n    link: \"http://h5.dooring.cn\",\n    title: \"贵宾专享\",\n    titColor: \"rgba(255,255,255,1)\",\n    desc: \"满199减100\",\n    frontColor: \"rgba(240,123,123,1)\"\n  }\n};\n\nexport default CardLabel;\n"
  },
  {
    "path": "src/materials/shop/CardLabel/template.ts",
    "content": "const template = {\n  type: \"CardLabel\",\n  h: 40,\n  displayName: \"商品标签\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/shop/Coupons/index.less",
    "content": ".topArea {\n  padding: 16px;\n  display: flex;\n  background-color: rgb(228, 162, 22);\n  .leftBox {\n    color: #fff;\n    span {\n      font-size: 30px;\n    }\n  }\n  .rightBox {\n    margin-left: auto;\n    .label {\n      display: inline-block;\n      padding: 2px 8px;\n      border-radius: 10px;\n      font-size: 14px;\n      color: rgb(228, 162, 22);\n      background-color: #fff;\n    }\n    .time {\n      margin-top: 3px;\n      font-size: 12px;\n      color: #fff;\n    }\n  }\n}\n.ft {\n  padding-left: 16px;\n  padding-right: 16px;\n  line-height: 2;\n  color: rgb(117, 116, 115);\n}\n"
  },
  {
    "path": "src/materials/shop/Coupons/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { IZLConfig } from \"./schema\";\nimport logo from \"@/assets/cunpos.png\";\nimport styles from \"./index.less\";\n\ninterface IProps extends IZLConfig {\n  isTpl?: boolean;\n}\n\nconst Coupons = memo((props: IProps) => {\n  const { money, ifText, desc, dealTime, link, bgColor, isTpl } = props;\n  const toLink = () => {\n    if (link && window.location.href.indexOf(\"editor\") < 0) {\n      window.location.href = link;\n    }\n  };\n  return isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logo} alt=\"\"></img>\n    </div>\n  ) : (\n    <div\n      style={{\n        width: \"calc(100% - 32px)\",\n        borderRadius: \"6px\",\n        margin: \"16px auto\",\n        overflow: \"hidden\",\n        boxShadow: \"0 0 6px rgba(0,0,0, .1)\"\n      }}\n    >\n      <div\n        className={styles.topArea}\n        style={{ backgroundColor: bgColor }}\n        onClick={toLink}\n      >\n        <div className={styles.leftBox}>\n          <span>{money}</span>元优惠券\n        </div>\n        <div className={styles.rightBox}>\n          <div className={styles.label} style={{ color: bgColor }}>\n            {ifText}\n          </div>\n          <div className={styles.time}>{dealTime}</div>\n        </div>\n      </div>\n      <div className={styles.ft}>{desc}</div>\n    </div>\n  );\n});\n\nexport default Coupons;\n"
  },
  {
    "path": "src/materials/shop/Coupons/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  ITextAreaConfigType,\n  IUploadConfigType,\n  IRichTextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType,\n  TUploadDefaultType,\n  TTextAreaDefaultType,\n  TRichTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nimport { serverUrl } from \"@/utils/tool\";\n\nexport type TZLEditData = Array<\n  | IUploadConfigType\n  | ITextConfigType\n  | IColorConfigType\n  | INumberConfigType\n  | ITextAreaConfigType\n  | IRichTextConfigType\n>;\nexport interface IZLConfig {\n  bgColor: TColorDefaultType;\n  money: TNumberDefaultType;\n  link: TTextDefaultType;\n  ifText: TTextDefaultType;\n  dealTime: TTextAreaDefaultType;\n  desc: TTextAreaDefaultType;\n}\n\nexport interface ICardSchema {\n  editData: TZLEditData;\n  config: IZLConfig;\n}\n\nconst ZhuanLan: ICardSchema = {\n  editData: [\n    {\n      key: \"bgColor\",\n      name: \"背景颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"money\",\n      name: \"优惠金额\",\n      type: \"Number\"\n    },\n    {\n      key: \"ifText\",\n      name: \"优惠条件\",\n      type: \"Text\"\n    },\n    {\n      key: \"dealTime\",\n      name: \"有效期\",\n      type: \"TextArea\"\n    },\n    {\n      key: \"desc\",\n      name: \"提示信息\",\n      type: \"TextArea\"\n    },\n    {\n      key: \"link\",\n      name: \"跳转链接\",\n      type: \"Text\"\n    }\n  ],\n  config: {\n    bgColor: \"rgba(228,162,22,1)\",\n    money: 50,\n    link: \"http://h5.dooring.cn\",\n    ifText: \"满199元使用\",\n    dealTime: \"2020.02.12-02.16\",\n    desc: \"有家店铺\"\n  }\n};\n\nexport default ZhuanLan;\n"
  },
  {
    "path": "src/materials/shop/Coupons/template.ts",
    "content": "const template = {\n  type: \"Coupons\",\n  h: 72,\n  displayName: \"优惠券组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/shop/List/index.less",
    "content": ".list {\n  margin: 20px auto;\n  width: 94%;\n  .searchWrap {\n    margin-bottom: 16px;\n    display: flex;\n    width: 100%;\n    height: 36px;\n    border-radius: 30px;\n    background-color: #f0f0f0;\n    input {\n      display: inline-block;\n      padding-left: 12px;\n      flex: 1;\n      border: none;\n      background-color: transparent;\n    }\n    .searchBtn {\n      margin-left: 10px;\n      margin-right: 10px;\n      line-height: 36px;\n      font-size: 18px;\n      display: inline-block;\n      cursor: pointer;\n    }\n  }\n  .sourceList {\n    .sourceItem {\n      position: relative;\n      display: flex;\n      align-items: center;\n      margin-bottom: 16px;\n      .content {\n        margin-left: 12px;\n        .tit {\n          line-height: 2;\n        }\n      }\n      .price {\n        position: absolute;\n        right: 12px;\n        bottom: 0px;\n        color: red;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/materials/shop/List/index.tsx",
    "content": "import React, { memo, useState, useRef } from \"react\";\nimport { SearchOutlined } from \"@ant-design/icons\";\nimport styles from \"./index.less\";\nimport { IListConfig } from \"./schema\";\nimport logo from \"@/assets/list.png\";\n\ninterface ListType extends IListConfig {\n  isTpl?: boolean;\n}\n\nconst List = memo((props: ListType) => {\n  const {\n    round,\n    sourceData,\n    isSearch,\n    imgSize,\n    fontSize,\n    color,\n    padding\n  } = props;\n  const [data, setData] = useState(sourceData);\n  const iptRef: any = useRef(null);\n  const handleSearch = () => {\n    let keyword = iptRef?.current?.value;\n    if (keyword) {\n      setData(prev => {\n        return prev.filter(\n          item =>\n            item.title.indexOf(keyword) > -1 || item.desc.indexOf(keyword) > -1\n        );\n      });\n      return;\n    }\n    setData(sourceData);\n  };\n  return props.isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logo} alt=\"\" />\n    </div>\n  ) : (\n    <div className={styles.list}>\n      {isSearch && (\n        <div className={styles.searchWrap}>\n          <input type=\"text\" ref={iptRef} />\n          <span className={styles.searchBtn} onClick={handleSearch}>\n            <SearchOutlined />\n          </span>\n        </div>\n      )}\n      <div className={styles.sourceList}>\n        {data.map((item, i) => {\n          return (\n            <div\n              className={styles.sourceItem}\n              key={i}\n              style={{ marginBottom: padding + \"px\" }}\n            >\n              <div className={styles.imgWrap}>\n                <img\n                  src={item.imgUrl[0] && item.imgUrl[0].url}\n                  alt={item.desc}\n                  style={{\n                    width: parseFloat(imgSize),\n                    height: imgSize + \"px\",\n                    objectFit: \"cover\",\n                    borderRadius: round\n                  }}\n                />\n              </div>\n              <div className={styles.content}>\n                <a\n                  className={styles.tit}\n                  style={{ fontSize, color }}\n                  href={item.link ? item.link : \"#\"}\n                >\n                  {item.title}\n                  <div\n                    className={styles.desc}\n                    style={{\n                      fontSize: fontSize * 0.8,\n                      color: \"rgba(0,0,0, .3)\"\n                    }}\n                  >\n                    {item.desc}\n                  </div>\n                </a>\n              </div>\n              <span className={styles.price}>{item.price}</span>\n            </div>\n          );\n        })}\n      </div>\n    </div>\n  );\n});\n\nexport default List;\n"
  },
  {
    "path": "src/materials/shop/List/schema.ts",
    "content": "import {\n  IColorConfigType,\n  IDataListConfigType,\n  INumberConfigType,\n  ISelectConfigType,\n  TColorDefaultType,\n  ISwitchConfigType,\n  TDataListDefaultType,\n  TNumberDefaultType,\n  TSelectDefaultType,\n  TSwitchDefaultType\n} from \"@/components/FormComponents/types\";\n\nimport { serverUrl } from \"@/utils/tool\";\n\nexport type TListSelectKeyType = \"60\" | \"80\" | \"100\" | \"120\" | \"150\";\nexport type TListEditData = Array<\n  | IColorConfigType\n  | IDataListConfigType\n  | INumberConfigType\n  | ISelectConfigType<TListSelectKeyType>\n  | ISwitchConfigType\n>;\nexport interface IListConfig {\n  sourceData: TDataListDefaultType;\n  isSearch: TSwitchDefaultType;\n  padding: number;\n  round: TNumberDefaultType;\n  imgSize: TSelectDefaultType<TListSelectKeyType>;\n  fontSize: TNumberDefaultType;\n  color: TColorDefaultType;\n}\n\nexport interface IListSchema {\n  editData: TListEditData;\n  config: IListConfig;\n}\n\nconst List: IListSchema = {\n  editData: [\n    {\n      key: \"sourceData\",\n      name: \"数据源\",\n      type: \"DataList\",\n      cropRate: 1\n    },\n    {\n      key: \"isSearch\",\n      name: \"是否搜索\",\n      type: \"Switch\"\n    },\n    {\n      key: \"padding\",\n      name: \"列表项间距\",\n      type: \"Number\"\n    },\n    {\n      key: \"round\",\n      name: \"圆角\",\n      type: \"Number\"\n    },\n    {\n      key: \"imgSize\",\n      name: \"图片大小\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"60\",\n          text: \"60 x 60\"\n        },\n        {\n          key: \"80\",\n          text: \"80 x 80\"\n        },\n        {\n          key: \"100\",\n          text: \"100 x 100\"\n        },\n        {\n          key: \"120\",\n          text: \"120 x 120\"\n        },\n        {\n          key: \"150\",\n          text: \"150 x 150\"\n        }\n      ]\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    }\n  ],\n  config: {\n    sourceData: [\n      {\n        id: \"1\",\n        title: \"趣谈小课\",\n        desc: \"致力于打造优质小课程\",\n        price: \"免费\",\n        link: \"xxxxx\",\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: `${serverUrl}/uploads/1_1740c6fbcd9.png`\n          }\n        ]\n      },\n      {\n        id: \"2\",\n        title: \"趣谈小课\",\n        desc: \"致力于打造优质小课程\",\n        price: \"免费\",\n        link: \"xxxxx\",\n        imgUrl: [\n          {\n            uid: \"002\",\n            name: \"image.png\",\n            status: \"done\",\n            url: `${serverUrl}/uploads/1_1740c6fbcd9.png`\n          }\n        ]\n      }\n    ],\n    isSearch: false,\n    padding: 16,\n    round: 0,\n    imgSize: \"80\",\n    fontSize: 16,\n    color: \"rgba(153,153,153,1)\"\n  }\n};\n\nexport default List;\n"
  },
  {
    "path": "src/materials/shop/List/template.ts",
    "content": "const template = {\n  type: \"List\",\n  h: 110,\n  displayName: \"列表组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/shop/Tab/index.less",
    "content": ".tabWrap {\n  padding-top: 16px;\n  padding-bottom: 16px;\n  .content {\n    display: flex;\n    flex-wrap: wrap;\n    .item {\n      position: relative;\n      padding: 20px 20px 0;\n      width: 50%;\n      text-align: center;\n      justify-content: center;\n      .imgWrap {\n        display: inline-block;\n        width: 80%;\n        img {\n          border-radius: 6px;\n          width: 120px;\n          height: 120px;\n          object-fit: cover;\n        }\n        .title {\n          line-height: 2.4;\n        }\n      }\n      .price {\n        position: absolute;\n        right: 26px;\n        bottom: -12px;\n        color: red;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/materials/shop/Tab/index.tsx",
    "content": "import React, { useEffect, useRef } from \"react\";\nimport { Tabs } from \"zarm\";\nimport styles from \"./index.less\";\nimport { ITabConfig } from \"./schema\";\nimport logo from \"@/assets/tab.png\";\n\ninterface TabType extends ITabConfig {\n  isTpl?: boolean;\n}\n\nconst { Panel } = Tabs;\n\nconst XTab = (props: TabType) => {\n  const {\n    tabs = [\"分类一\", \"分类二\"],\n    activeColor,\n    color,\n    fontSize,\n    sourceData,\n    isTpl\n  } = props;\n\n  const tabWrapRef = useRef<HTMLDivElement>(null);\n\n  useEffect(() => {\n    if (tabWrapRef.current) {\n      let res = tabWrapRef.current.querySelector(\n        \".za-tabs__line\"\n      ) as HTMLElement;\n      if (res) {\n        res.style.backgroundColor = activeColor;\n      }\n    }\n  }, [activeColor]);\n\n  return isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logo} alt=\"\"></img>\n    </div>\n  ) : (\n    <div className={styles.tabWrap} ref={tabWrapRef}>\n      <Tabs\n        scrollThreshold={3}\n        onChange={i => {\n          console.log(i);\n        }}\n      >\n        {tabs.map((item, i) => {\n          return (\n            <Panel title={item} key={i}>\n              <div className={styles.content}>\n                {sourceData\n                  .filter(item => item.type === i)\n                  .map((item, i) => {\n                    return (\n                      <div className={styles.item} key={i}>\n                        <a\n                          className={styles.imgWrap}\n                          href={item.link}\n                          title={item.desc}\n                        >\n                          <img\n                            src={item.imgUrl[0] && item.imgUrl[0].url}\n                            alt={item.title}\n                          />\n                          <div\n                            className={styles.title}\n                            style={{ fontSize, color }}\n                          >\n                            {item.title}\n                          </div>\n                        </a>\n                        <span className={styles.price}> {item.price} </span>\n                      </div>\n                    );\n                  })}\n              </div>\n            </Panel>\n          );\n        })}\n      </Tabs>\n    </div>\n  );\n};\n\nexport default XTab;\n"
  },
  {
    "path": "src/materials/shop/Tab/schema.ts",
    "content": "import {\n  IColorConfigType,\n  IDataListConfigType,\n  IMutiTextConfigType,\n  INumberConfigType,\n  TColorDefaultType,\n  TDataListDefaultType,\n  TMutiTextDefaultType,\n  TNumberDefaultType\n} from \"@/components/FormComponents/types\";\n\nimport { serverUrl } from \"@/utils/tool\";\n\nexport type TTabEditData = Array<\n  | IMutiTextConfigType\n  | IColorConfigType\n  | INumberConfigType\n  | IDataListConfigType\n>;\nexport interface ITabConfig {\n  tabs: TMutiTextDefaultType;\n  color: TColorDefaultType;\n  activeColor: TColorDefaultType;\n  fontSize: TNumberDefaultType;\n  imgSize: TNumberDefaultType;\n  sourceData: TDataListDefaultType;\n}\n\nexport interface ITabSchema {\n  editData: TTabEditData;\n  config: ITabConfig;\n}\n\nconst Tab: ITabSchema = {\n  editData: [\n    {\n      key: \"tabs\",\n      name: \"项目类别\",\n      type: \"MutiText\"\n    },\n    {\n      key: \"activeColor\",\n      name: \"激活颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"color\",\n      name: \"文字颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"fontSize\",\n      name: \"文字大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"imgSize\",\n      name: \"图片大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"sourceData\",\n      name: \"数据源\",\n      type: \"DataList\"\n    }\n  ],\n  config: {\n    tabs: [\"类别一\", \"类别二\"],\n    color: \"rgba(153,153,153,1)\",\n    activeColor: \"rgba(0,102,204,1)\",\n    fontSize: 16,\n    imgSize: 100,\n    sourceData: [\n      {\n        id: \"1\",\n        title: \"趣谈小课1\",\n        desc: \"致力于打造优质小课程\",\n        price: \"\",\n        link: \"xxxxx\",\n        type: 0,\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: `${serverUrl}/uploads/1_1740c6fbcd9.png`\n          }\n        ]\n      },\n      {\n        id: \"2\",\n        title: \"趣谈小课2\",\n        desc: \"致力于打造优质小课程\",\n        price: \"\",\n        link: \"xxxxx\",\n        type: 0,\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: `${serverUrl}/uploads/2_1740c7033a9.png`\n          }\n        ]\n      },\n      {\n        id: \"3\",\n        title: \"趣谈小课3\",\n        desc: \"致力于打造优质小课程\",\n        price: \"\",\n        link: \"xxxxx\",\n        type: 1,\n        imgUrl: [\n          {\n            uid: \"001\",\n            name: \"image.png\",\n            status: \"done\",\n            url: `${serverUrl}/uploads/1_1740c6fbcd9.png`\n          }\n        ]\n      }\n    ]\n  }\n};\n\nexport default Tab;\n"
  },
  {
    "path": "src/materials/shop/Tab/template.ts",
    "content": "const template = {\n  type: \"Tab\",\n  h: 130,\n  displayName: \"切换页组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/shop/ZhuanLan/index.less",
    "content": ".topArea {\n  display: flex;\n  .tx {\n    flex-shrink: 0;\n    width: 72px;\n    height: 72px;\n    border-radius: 6px;\n    background-color: #f0f0f0;\n    overflow: hidden;\n    img {\n      width: 100%;\n      height: 100%;\n      object-fit: cover;\n    }\n  }\n  .textArea {\n    margin-left: 10px;\n    margin-right: 10px;\n    .title {\n      font-weight: bold;\n      line-height: 2.4;\n    }\n    .desc {\n      opacity: 0.6;\n    }\n  }\n  .btnArea {\n    margin-left: auto;\n    margin-top: 3px;\n    flex-shrink: 0;\n    .btn {\n      display: inline-block;\n      padding: 3px 8px;\n      border-radius: 4px;\n      font-size: 12px;\n      color: #fff;\n    }\n  }\n}\n\n.content {\n  margin-top: 16px;\n  p {\n    margin-bottom: 2px;\n    word-wrap: break-word;\n  }\n}\n"
  },
  {
    "path": "src/materials/shop/ZhuanLan/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { IZLConfig } from \"./schema\";\nimport logo from \"@/assets/zhuanlan.png\";\nimport styles from \"./index.less\";\n\ninterface IProps extends IZLConfig {\n  isTpl?: boolean;\n}\n\nconst ZL = memo((props: IProps) => {\n  const {\n    title,\n    desc,\n    imgUrl,\n    link,\n    linkText,\n    linkBg,\n    titColor,\n    titFontSize,\n    bgColor,\n    padding,\n    radius,\n    content,\n    isTpl\n  } = props;\n  const toLink = () => {\n    if (link && window.location.href.indexOf(\"editor\") < 0) {\n      window.location.href = link;\n    }\n  };\n  return isTpl ? (\n    <div>\n      <img style={{ width: \"100%\" }} src={logo} alt=\"\"></img>\n    </div>\n  ) : (\n    <div\n      style={{\n        width: \"calc(100% - 32px)\",\n        backgroundColor: bgColor,\n        padding: padding + \"px\",\n        borderRadius: radius + \"px\",\n        margin: \"16px auto\",\n        boxShadow: \"0 0 6px rgba(0,0,0, .1)\"\n      }}\n    >\n      <div className={styles.topArea}>\n        <div className={styles.tx}>\n          <img src={imgUrl && imgUrl[0].url} alt=\"dooring\" />\n        </div>\n        <div className={styles.textArea}>\n          <div\n            className={styles.title}\n            style={{ fontSize: titFontSize + \"px\", color: titColor }}\n          >\n            {title}\n          </div>\n          <div\n            className={styles.desc}\n            style={{\n              fontSize: Math.ceil(titFontSize * 0.7) + \"px\",\n              color: titColor\n            }}\n          >\n            {desc}\n          </div>\n        </div>\n        <div className={styles.btnArea}>\n          <span\n            className={styles.btn}\n            style={{ backgroundColor: linkBg }}\n            onClick={toLink}\n          >\n            {\" \"}\n            {linkText}{\" \"}\n          </span>\n        </div>\n      </div>\n      <div\n        className={styles.content}\n        dangerouslySetInnerHTML={{ __html: content }}\n      ></div>\n    </div>\n  );\n});\n\nexport default ZL;\n"
  },
  {
    "path": "src/materials/shop/ZhuanLan/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITextConfigType,\n  ITextAreaConfigType,\n  IUploadConfigType,\n  IRichTextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTextDefaultType,\n  TUploadDefaultType,\n  TTextAreaDefaultType,\n  TRichTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nimport { serverUrl } from \"@/utils/tool\";\n\nexport type TZLEditData = Array<\n  | IUploadConfigType\n  | ITextConfigType\n  | IColorConfigType\n  | INumberConfigType\n  | ITextAreaConfigType\n  | IRichTextConfigType\n>;\nexport interface IZLConfig {\n  bgColor: TColorDefaultType;\n  padding: TNumberDefaultType;\n  radius: TNumberDefaultType;\n  link: TTextDefaultType;\n  linkText: TTextDefaultType;\n  linkBg: TColorDefaultType;\n  imgUrl: TUploadDefaultType;\n  title: TTextDefaultType;\n  desc: TTextAreaDefaultType;\n  titColor: TColorDefaultType;\n  titFontSize: TNumberDefaultType;\n  content: TRichTextDefaultType;\n}\n\nexport interface ICardSchema {\n  editData: TZLEditData;\n  config: IZLConfig;\n}\n\nconst ZhuanLan: ICardSchema = {\n  editData: [\n    {\n      key: \"title\",\n      name: \"标题\",\n      type: \"Text\"\n    },\n    {\n      key: \"titColor\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"titFontSize\",\n      name: \"标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"desc\",\n      name: \"描述\",\n      type: \"TextArea\"\n    },\n    {\n      key: \"imgUrl\",\n      name: \"专栏图片\",\n      type: \"Upload\",\n      isCrop: true,\n      cropRate: 1\n    },\n    {\n      key: \"bgColor\",\n      name: \"背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"padding\",\n      name: \"内容边距\",\n      type: \"Number\"\n    },\n    {\n      key: \"radius\",\n      name: \"圆角\",\n      type: \"Number\"\n    },\n    {\n      key: \"linkText\",\n      name: \"按钮文本\",\n      type: \"Text\"\n    },\n    {\n      key: \"linkBg\",\n      name: \"按钮背景色\",\n      type: \"Color\"\n    },\n    {\n      key: \"link\",\n      name: \"按钮跳转链接\",\n      type: \"Text\"\n    },\n    {\n      key: \"content\",\n      name: \"详细介绍\",\n      type: \"RichText\"\n    }\n  ],\n  config: {\n    imgUrl: [\n      {\n        uid: \"001\",\n        name: \"image.png\",\n        status: \"done\",\n        url: `${serverUrl}/uploads/code_173e1705e0c.png`\n      }\n    ],\n    title: \"趣谈前端\",\n    desc: \"一个有点意思的技术社区~\",\n    titColor: \"rgba(0,0,0,1)\",\n    titFontSize: 18,\n    bgColor: \"rgba(255,255,255,1)\",\n    padding: 16,\n    radius: 6,\n    link: \"\",\n    linkText: \"订阅\",\n    linkBg: \"rgba(22,40,212,1)\",\n    content: \"趣谈前端 - 可视化专栏\"\n  }\n};\n\nexport default ZhuanLan;\n"
  },
  {
    "path": "src/materials/shop/ZhuanLan/template.ts",
    "content": "const template = {\n  type: \"ZhuanLan\",\n  h: 120,\n  displayName: \"专栏组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/shop/schema.ts",
    "content": "import ZhuanLan from \"./ZhuanLan/schema\";\nimport Tab from \"./Tab/schema\";\nimport List from \"./List/schema\";\nimport Coupons from \"./Coupons/schema\";\nimport CardLabel from \"./CardLabel/schema\";\n\nconst shopSchema = {\n  ZhuanLan,\n  Tab,\n  List,\n  Coupons,\n  CardLabel\n};\nexport default shopSchema;\n"
  },
  {
    "path": "src/materials/shop/template.ts",
    "content": "import ZhuanLan from \"./ZhuanLan/template\";\nimport Tab from \"./Tab/template\";\nimport List from \"./List/template\";\nimport Coupons from \"./Coupons/template\";\nimport CardLabel from \"./CardLabel/template\";\n\nconst basicTemplate = [ZhuanLan, List, Tab, Coupons, CardLabel];\nconst ShopTemplate = basicTemplate.map(v => {\n  return { ...v, category: \"shop\" };\n});\n\nexport default ShopTemplate;\n"
  },
  {
    "path": "src/materials/visual/Area/index.less",
    "content": ".chartWrap {\n  position: relative;\n  width: 100%;\n  .chartTitle {\n    text-align: center;\n  }\n  img {\n    width: 100%;\n  }\n  canvas {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/materials/visual/Area/index.tsx",
    "content": "import { Chart } from \"@antv/f2\";\nimport React, { memo, useEffect, useRef } from \"react\";\n// import { uuid } from 'utils/tool';\nimport AreaImg from \"@/assets/area.png\";\n\nimport styles from \"./index.less\";\nimport { IChartConfig } from \"./schema\";\n\ninterface XChartProps extends IChartConfig {\n  isTpl: boolean;\n}\n\nconst XLine = (props: XChartProps) => {\n  const { isTpl, data, color, size, paddingTop, title } = props;\n  const chartRef = useRef(null);\n  useEffect(() => {\n    if (!isTpl) {\n      const chart = new Chart({\n        el: chartRef.current || undefined,\n        pixelRatio: window.devicePixelRatio // 指定分辨率\n      });\n\n      // step 2: 处理数据\n      const dataX = data.map(item => ({\n        ...item,\n        value: Number(item.value),\n        a: \"1\"\n      }));\n\n      // Step 2: 载入数据源\n      chart.source(dataX, {\n        percent: {\n          formatter: function formatter(val) {\n            return val * 100 + \"%\";\n          }\n        }\n      });\n\n      chart.tooltip({\n        showCrosshairs: true\n      });\n\n      chart.scale({\n        name: {\n          range: [0, 1]\n        },\n        value: {\n          tickCount: 5,\n          min: 0\n        }\n      });\n\n      chart.axis(\"name\", {\n        label: function label(text, index, total) {\n          const textCfg: any = {};\n          if (index === 0) {\n            textCfg.textAlign = \"left\";\n          } else if (index === total - 1) {\n            textCfg.textAlign = \"right\";\n          }\n          return textCfg;\n        }\n      });\n\n      chart.area().position(\"name*value\");\n      chart.line().position(\"name*value\");\n      chart.render();\n    }\n  }, [data, isTpl]);\n  return (\n    <div className={styles.chartWrap}>\n      <div\n        className={styles.chartTitle}\n        style={{ color, fontSize: size, paddingTop }}\n      >\n        {title}\n      </div>\n      {isTpl ? (\n        <img src={AreaImg} alt=\"dooring chart\" />\n      ) : (\n        <canvas ref={chartRef}></canvas>\n      )}\n    </div>\n  );\n};\n\nexport default memo(XLine);\n"
  },
  {
    "path": "src/materials/visual/Area/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITableConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTableDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TChartEditData = Array<\n  ITextConfigType | INumberConfigType | IColorConfigType | ITableConfigType\n>;\nexport interface IChartConfig {\n  title: TTextDefaultType;\n  size: TNumberDefaultType;\n  color: TColorDefaultType;\n  paddingTop: TNumberDefaultType;\n  data: TTableDefaultType;\n}\n\nexport interface IChartSchema {\n  editData: TChartEditData;\n  config: IChartConfig;\n}\n\nconst Chart: IChartSchema = {\n  editData: [\n    {\n      key: \"title\",\n      name: \"标题\",\n      type: \"Text\"\n    },\n    {\n      key: \"size\",\n      name: \"标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"color\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"paddingTop\",\n      name: \"上边距\",\n      type: \"Number\"\n    },\n    {\n      key: \"data\",\n      name: \"数据源\",\n      type: \"Table\"\n    }\n  ],\n  config: {\n    title: \"面积图\",\n    size: 14,\n    color: \"rgba(0,0,0,1)\",\n    paddingTop: 10,\n    data: [\n      {\n        name: \"A\",\n        value: 20\n      },\n      {\n        name: \"B\",\n        value: 60\n      },\n      {\n        name: \"C\",\n        value: 20\n      },\n      {\n        name: \"D\",\n        value: 80\n      }\n    ]\n  }\n};\n\nexport default Chart;\n"
  },
  {
    "path": "src/materials/visual/Area/template.ts",
    "content": "const template = {\n  type: \"Area\",\n  h: 108,\n  displayName: \"面积图组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/visual/Chart/index.less",
    "content": ".chartWrap {\n  position: relative;\n  width: 100%;\n  .chartTitle {\n    text-align: center;\n  }\n  img {\n    width: 100%;\n  }\n  canvas {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/materials/visual/Chart/index.tsx",
    "content": "import { Chart } from \"@antv/f2\";\nimport React, { memo, useEffect, useRef } from \"react\";\n// import { uuid } from 'utils/tool';\nimport ChartImg from \"@/assets/chart.png\";\n\nimport styles from \"./index.less\";\nimport { IChartConfig } from \"./schema\";\n\ninterface XChartProps extends IChartConfig {\n  isTpl: boolean;\n}\n\nconst XChart = (props: XChartProps) => {\n  const { isTpl, data, color, size, paddingTop, title } = props;\n  const chartRef = useRef(null);\n  useEffect(() => {\n    if (!isTpl) {\n      const chart = new Chart({\n        el: chartRef.current || undefined,\n        pixelRatio: window.devicePixelRatio // 指定分辨率\n      });\n\n      // step 2: 处理数据\n      const dataX = data.map(item => ({ ...item, value: Number(item.value) }));\n\n      // Step 2: 载入数据源\n      chart.source(dataX);\n\n      // Step 3：创建图形语法，绘制柱状图，由 genre 和 sold 两个属性决定图形位置，genre 映射至 x 轴，sold 映射至 y 轴\n      chart\n        .interval()\n        .position(\"name*value\")\n        .color(\"name\");\n\n      // Step 4: 渲染图表\n      chart.render();\n    }\n  }, [data, isTpl]);\n  return (\n    <div className={styles.chartWrap}>\n      <div\n        className={styles.chartTitle}\n        style={{ color, fontSize: size, paddingTop }}\n      >\n        {title}\n      </div>\n      {isTpl ? (\n        <img src={ChartImg} alt=\"dooring chart\" />\n      ) : (\n        <canvas ref={chartRef}></canvas>\n      )}\n    </div>\n  );\n};\n\nexport default memo(XChart);\n"
  },
  {
    "path": "src/materials/visual/Chart/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITableConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTableDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TChartEditData = Array<\n  ITextConfigType | INumberConfigType | IColorConfigType | ITableConfigType\n>;\nexport interface IChartConfig {\n  title: TTextDefaultType;\n  size: TNumberDefaultType;\n  color: TColorDefaultType;\n  paddingTop: TNumberDefaultType;\n  data: TTableDefaultType;\n}\n\nexport interface IChartSchema {\n  editData: TChartEditData;\n  config: IChartConfig;\n}\n\nconst Chart: IChartSchema = {\n  editData: [\n    {\n      key: \"title\",\n      name: \"标题\",\n      type: \"Text\"\n    },\n    {\n      key: \"size\",\n      name: \"标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"color\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"paddingTop\",\n      name: \"上边距\",\n      type: \"Number\"\n    },\n    {\n      key: \"data\",\n      name: \"数据源\",\n      type: \"Table\"\n    }\n  ],\n  config: {\n    title: \"柱状图\",\n    size: 14,\n    color: \"rgba(0,0,0,1)\",\n    paddingTop: 10,\n    data: [\n      {\n        name: \"A\",\n        value: 20\n      },\n      {\n        name: \"B\",\n        value: 60\n      },\n      {\n        name: \"C\",\n        value: 20\n      }\n    ]\n  }\n};\n\nexport default Chart;\n"
  },
  {
    "path": "src/materials/visual/Chart/template.ts",
    "content": "const template = {\n  type: \"Chart\",\n  h: 102,\n  displayName: \"柱状图组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/visual/Line/index.less",
    "content": ".chartWrap {\n  position: relative;\n  width: 100%;\n  .chartTitle {\n    text-align: center;\n  }\n  img {\n    width: 100%;\n  }\n  canvas {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/materials/visual/Line/index.tsx",
    "content": "import { Chart } from \"@antv/f2\";\nimport React, { memo, useEffect, useRef } from \"react\";\n// import { uuid } from 'utils/tool';\nimport LineImg from \"@/assets/line.png\";\n\nimport styles from \"./index.less\";\nimport { IChartConfig } from \"./schema\";\n\ninterface XChartProps extends IChartConfig {\n  isTpl: boolean;\n}\n\nconst XLine = (props: XChartProps) => {\n  const { isTpl, data, color, size, paddingTop, title } = props;\n  const chartRef = useRef(null);\n  useEffect(() => {\n    if (!isTpl) {\n      const chart = new Chart({\n        el: chartRef.current || undefined,\n        pixelRatio: window.devicePixelRatio // 指定分辨率\n      });\n\n      // step 2: 处理数据\n      const dataX = data.map(item => ({ ...item, value: Number(item.value) }));\n\n      // Step 2: 载入数据源\n      chart.source(dataX, {\n        value: {\n          tickCount: 5,\n          min: 0\n        }\n      });\n\n      chart.tooltip({\n        showCrosshairs: true,\n        showItemMarker: false\n      });\n\n      chart.axis(\"name\", {\n        label: function label(text, index, total) {\n          const textCfg: any = {};\n          if (index === 0) {\n            textCfg.textAlign = \"left\";\n          } else if (index === total - 1) {\n            textCfg.textAlign = \"right\";\n          }\n          return textCfg;\n        }\n      });\n\n      chart.line().position(\"name*value\");\n      chart\n        .point()\n        .position(\"name*value\")\n        .style({\n          stroke: \"#fff\",\n          lineWidth: 1\n        });\n\n      chart.render();\n    }\n  }, [data, isTpl]);\n  return (\n    <div className={styles.chartWrap}>\n      <div\n        className={styles.chartTitle}\n        style={{ color, fontSize: size, paddingTop }}\n      >\n        {title}\n      </div>\n      {isTpl ? (\n        <img src={LineImg} alt=\"dooring chart\" />\n      ) : (\n        <canvas ref={chartRef}></canvas>\n      )}\n    </div>\n  );\n};\n\nexport default memo(XLine);\n"
  },
  {
    "path": "src/materials/visual/Line/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITableConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTableDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TChartEditData = Array<\n  ITextConfigType | INumberConfigType | IColorConfigType | ITableConfigType\n>;\nexport interface IChartConfig {\n  title: TTextDefaultType;\n  size: TNumberDefaultType;\n  color: TColorDefaultType;\n  paddingTop: TNumberDefaultType;\n  data: TTableDefaultType;\n}\n\nexport interface IChartSchema {\n  editData: TChartEditData;\n  config: IChartConfig;\n}\n\nconst Chart: IChartSchema = {\n  editData: [\n    {\n      key: \"title\",\n      name: \"标题\",\n      type: \"Text\"\n    },\n    {\n      key: \"size\",\n      name: \"标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"color\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"paddingTop\",\n      name: \"上边距\",\n      type: \"Number\"\n    },\n    {\n      key: \"data\",\n      name: \"数据源\",\n      type: \"Table\"\n    }\n  ],\n  config: {\n    title: \"折线图\",\n    size: 14,\n    color: \"rgba(0,0,0,1)\",\n    paddingTop: 10,\n    data: [\n      {\n        name: \"A\",\n        value: 20\n      },\n      {\n        name: \"B\",\n        value: 60\n      },\n      {\n        name: \"C\",\n        value: 20\n      },\n      {\n        name: \"D\",\n        value: 80\n      }\n    ]\n  }\n};\n\nexport default Chart;\n"
  },
  {
    "path": "src/materials/visual/Line/template.ts",
    "content": "const template = {\n  type: \"Line\",\n  h: 104,\n  displayName: \"折线图组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/visual/Pie/index.less",
    "content": ".chartWrap {\n  position: relative;\n  width: 100%;\n  .chartTitle {\n    text-align: center;\n  }\n  img {\n    width: 100%;\n  }\n  canvas {\n    width: 100%;\n  }\n}\n"
  },
  {
    "path": "src/materials/visual/Pie/index.tsx",
    "content": "import { Chart } from \"@antv/f2\";\nimport React, { memo, useEffect, useRef } from \"react\";\n// import { uuid } from 'utils/tool';\nimport PieImg from \"@/assets/pie.png\";\n\nimport styles from \"./index.less\";\nimport { IChartConfig } from \"./schema\";\n\ninterface XChartProps extends IChartConfig {\n  isTpl: boolean;\n}\n\ninterface DataMap {\n  [name: string]: number | string;\n}\n\nconst XLine = (props: XChartProps) => {\n  const { isTpl, data, color, size, paddingTop, title } = props;\n  const chartRef = useRef(null);\n  useEffect(() => {\n    if (!isTpl) {\n      const chart = new Chart({\n        el: chartRef.current || undefined,\n        pixelRatio: window.devicePixelRatio // 指定分辨率\n      });\n\n      // step 2: 处理数据\n      const dataX = data.map(item => ({\n        ...item,\n        value: Number(item.value),\n        a: \"1\"\n      }));\n\n      // Step 2: 载入数据源\n      chart.source(dataX, {\n        percent: {\n          formatter: function formatter(val) {\n            return val * 100 + \"%\";\n          }\n        }\n      });\n\n      // 获取数据的map类型，用以展示图例说明\n      const dataMap: DataMap = dataX.reduce((prev: any, cur) => {\n        return prev.name\n          ? { [prev.name]: prev.value, ...{ [cur.name]: cur.value } }\n          : { ...prev, ...{ [cur.name]: cur.value } };\n      });\n\n      chart.legend({\n        position: \"right\",\n        itemFormatter: function itemFormatter(val) {\n          return val + \"  \" + dataMap[val] + \"%\";\n        }\n      });\n      chart.tooltip(false);\n      chart.coord(\"polar\", {\n        transposed: true,\n        radius: 0.85\n      });\n      chart.axis(false);\n      chart\n        .interval()\n        .position(\"a*value\")\n        .color(\"name\", [\n          \"#1890FF\",\n          \"#13C2C2\",\n          \"#2FC25B\",\n          \"#FACC14\",\n          \"#00CC99\",\n          \"#CC3366\",\n          \"#CC6600\",\n          \"#CC66CC\",\n          \"#FF3366\",\n          \"#0066CC\"\n        ])\n        .adjust(\"stack\")\n        .style({\n          lineWidth: 1,\n          stroke: \"#fff\",\n          lineJoin: \"round\",\n          lineCap: \"round\"\n        })\n        .animate({\n          appear: {\n            duration: 1200,\n            easing: \"bounceOut\"\n          }\n        });\n\n      chart.render();\n    }\n  }, [data, isTpl]);\n  return (\n    <div className={styles.chartWrap}>\n      <div\n        className={styles.chartTitle}\n        style={{ color, fontSize: size, paddingTop }}\n      >\n        {title}\n      </div>\n      {isTpl ? (\n        <img src={PieImg} alt=\"dooring chart\" />\n      ) : (\n        <canvas ref={chartRef}></canvas>\n      )}\n    </div>\n  );\n};\n\nexport default memo(XLine);\n"
  },
  {
    "path": "src/materials/visual/Pie/schema.ts",
    "content": "import {\n  IColorConfigType,\n  INumberConfigType,\n  ITableConfigType,\n  ITextConfigType,\n  TColorDefaultType,\n  TNumberDefaultType,\n  TTableDefaultType,\n  TTextDefaultType\n} from \"@/components/FormComponents/types\";\n\nexport type TChartEditData = Array<\n  ITextConfigType | INumberConfigType | IColorConfigType | ITableConfigType\n>;\nexport interface IChartConfig {\n  title: TTextDefaultType;\n  size: TNumberDefaultType;\n  color: TColorDefaultType;\n  paddingTop: TNumberDefaultType;\n  data: TTableDefaultType;\n}\n\nexport interface IChartSchema {\n  editData: TChartEditData;\n  config: IChartConfig;\n}\n\nconst Chart: IChartSchema = {\n  editData: [\n    {\n      key: \"title\",\n      name: \"标题\",\n      type: \"Text\"\n    },\n    {\n      key: \"size\",\n      name: \"标题大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"color\",\n      name: \"标题颜色\",\n      type: \"Color\"\n    },\n    {\n      key: \"paddingTop\",\n      name: \"上边距\",\n      type: \"Number\"\n    },\n    {\n      key: \"data\",\n      name: \"数据源\",\n      type: \"Table\"\n    }\n  ],\n  config: {\n    title: \"饼图\",\n    size: 14,\n    color: \"rgba(0,0,0,1)\",\n    paddingTop: 10,\n    data: [\n      {\n        name: \"A\",\n        value: 20\n      },\n      {\n        name: \"B\",\n        value: 60\n      },\n      {\n        name: \"C\",\n        value: 20\n      },\n      {\n        name: \"D\",\n        value: 80\n      }\n    ]\n  }\n};\n\nexport default Chart;\n"
  },
  {
    "path": "src/materials/visual/Pie/template.ts",
    "content": "const template = {\n  type: \"Pie\",\n  h: 106,\n  displayName: \"饼图组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/visual/XProgress/index.tsx",
    "content": "import React, { memo } from \"react\";\nimport { Progress } from \"zarm\";\nimport { IXProgressConfig } from \"./schema\";\nimport logo from \"@/assets/progress.png\";\nconst XProgress = memo((props: IXProgressConfig & { isTpl: boolean }) => {\n  const { theme, size, shape, percent, strokeWidth, isTpl } = props;\n  return (\n    <>\n      {isTpl ? (\n        <div>\n          <img src={logo} alt=\"\"></img>\n        </div>\n      ) : (\n        <div style={{ textAlign: \"center\" }}>\n          <Progress\n            shape={shape}\n            size={size}\n            percent={percent}\n            theme={theme}\n            strokeWidth={strokeWidth}\n          />\n        </div>\n      )}\n    </>\n  );\n});\n\nexport default XProgress;\n"
  },
  {
    "path": "src/materials/visual/XProgress/schema.ts",
    "content": "import {\n  INumberConfigType,\n  IRadioConfigType,\n  ISelectConfigType,\n  TNumberDefaultType,\n  TRadioDefaultType,\n  TSelectDefaultType\n} from \"@/components/FormComponents/types\";\nexport type TXProgressSelectKeyType = \"success\" | \"warning\" | \"danger\";\nexport type TXProgressRadiotKeyType = \"circle\" | \"line\" | \"semi-circle\";\nexport type TXProgressEditData = Array<\n  | ISelectConfigType<TXProgressSelectKeyType>\n  | IRadioConfigType<TXProgressRadiotKeyType>\n  | INumberConfigType\n>;\nexport interface IXProgressConfig {\n  theme: TSelectDefaultType<TXProgressSelectKeyType>;\n  shape: TRadioDefaultType<TXProgressRadiotKeyType>;\n  size: TNumberDefaultType;\n  percent: TNumberDefaultType;\n  strokeWidth: TNumberDefaultType;\n}\n\nexport interface IXProgressSchema {\n  editData: TXProgressEditData;\n  config: IXProgressConfig;\n}\n\nconst XProgress: IXProgressSchema = {\n  editData: [\n    {\n      key: \"theme\",\n      name: \"主题\",\n      type: \"Select\",\n      range: [\n        {\n          key: \"success\",\n          text: \"成功\"\n        },\n        {\n          key: \"warning\",\n          text: \"警告\"\n        },\n        {\n          key: \"danger\",\n          text: \"危险\"\n        }\n      ]\n    },\n    {\n      key: \"shape\",\n      name: \"形状\",\n      type: \"Radio\",\n      range: [\n        {\n          key: \"circle\",\n          text: \"圆形\"\n        },\n        {\n          key: \"line\",\n          text: \"线形\"\n        },\n        {\n          key: \"semi-circle\",\n          text: \"半圆形\"\n        }\n      ]\n    },\n    {\n      key: \"size\",\n      name: \"大小\",\n      type: \"Number\"\n    },\n    {\n      key: \"percent\",\n      name: \"进度值\",\n      type: \"Number\",\n      range: [0, 100]\n    },\n    {\n      key: \"strokeWidth\",\n      name: \"线条粗细\",\n      type: \"Number\"\n    }\n  ],\n  config: {\n    theme: \"success\",\n    shape: \"circle\",\n    size: 200,\n    percent: 30,\n    strokeWidth: 10\n  }\n};\n\nexport default XProgress;\n"
  },
  {
    "path": "src/materials/visual/XProgress/template.ts",
    "content": "const template = {\n  type: \"XProgress\",\n  h: 102,\n  displayName: \"进度条组件\"\n};\nexport default template;\n"
  },
  {
    "path": "src/materials/visual/schema.ts",
    "content": "import Chart from \"./Chart/schema\";\nimport Line from \"./Line/schema\";\nimport Pie from \"./Pie/schema\";\nimport Area from \"./Area/schema\";\nimport XProgress from \"./XProgress/schema\";\n\nconst visualSchema = {\n  Chart,\n  Line,\n  Pie,\n  Area,\n  XProgress\n};\n\nexport default visualSchema;\n"
  },
  {
    "path": "src/materials/visual/template.ts",
    "content": "import Chart from \"./Chart/template\";\nimport Line from \"./Line/template\";\nimport Pie from \"./Pie/template\";\nimport Area from \"./Area/template\";\nimport XProgress from \"./XProgress/template\";\n\nconst visualTemplate = [Chart, Line, Pie, Area, XProgress];\n\nconst VisualTemplate = visualTemplate.map(v => {\n  return { ...v, category: \"visual\" };\n});\nexport default VisualTemplate;\n"
  },
  {
    "path": "src/pages/document.ejs",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n    <meta charset=\"UTF-8\">\n    <link href=\"http://49.234.61.19/uploads/logo_1742fd359da.png\" rel=\"shortcut icon\" type=\"image/vnd.microsoft.icon\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=0;\">\n    <title>H5编辑器之神-Dooring</title>\n    <meta name=\"description\" content=\"Dooring是一款功能强大，开源免费的H5可视化页面配置解决方案，致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。\">\n    <meta name=\"keywords\" content=\"H5,HTML5,javascript,react,nodejs,前端开发,github,开源\">\n    <meta name=\"author\" content=\"徐小夕\">\n    <!-- 若需要配置https, 请开启下面的meta配置 -->\n    <!-- <meta http-equiv=\"Content-Security-Policy\" content=\"upgrade-insecure-requests\"> -->\n    \n    <!-- <meta name=\"robots\" content=\"noindex, nofollow\"> -->\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <link href=\"https://cdn.bootcdn.net/ajax/libs/spinkit/2.0.1/spinkit.min.css\" rel=\"stylesheet\">\n</head>\n<body>\n    <div id=\"root\"></div>\n</body>\n</html>"
  },
  {
    "path": "src/pages/editor/Container.tsx",
    "content": "import React, {\n  useState,\n  useEffect,\n  useMemo,\n  useCallback,\n  useRef\n} from \"react\";\nimport { Result, Tabs } from \"antd\";\nimport {\n  PieChartOutlined,\n  PlayCircleOutlined,\n  HighlightOutlined,\n  DoubleRightOutlined,\n  DoubleLeftOutlined,\n  AppstoreOutlined\n} from \"@ant-design/icons\";\nimport { connect } from \"dva\";\nimport HeaderComponent from \"./components/Header\";\nimport CanvasControl from \"./components/CanvasControl\";\nimport SourceBox from \"./TargetBox\";\nimport TargetBox from \"./SourceBox\";\nimport Calibration from \"components/Calibration\";\nimport DynamicEngine, { componentsType } from \"@/core/DynamicEngine\";\nimport { FormRender } from \"@/core\";\n\nimport template from \"@/materials/base/template\";\nimport mediaTpl from \"@/materials/media/template\";\nimport graphTpl from \"@/materials/visual/template\";\nimport shopTpl from \"@/materials/shop/template\";\n\nimport schemaH5 from \"@/materials/schema\";\nimport { ActionCreators, StateWithHistory } from \"redux-undo\";\nimport {\n  throttle,\n  detectMobileBrowser,\n  getBrowserNavigatorMetaInfo\n} from \"@/utils/tool\";\n\nimport styles from \"./index.less\";\n\nconst { TabPane } = Tabs;\n\nconst Container = (props: {\n  history?: any;\n  location?: any;\n  pstate?: any;\n  cstate?: any;\n  dispatch?: any;\n}) => {\n  const [scaleNum, setScale] = useState(1);\n  const [collapsed, setCollapsed] = useState(false);\n  const [rightColla, setRightColla] = useState(true);\n  const { pstate, cstate, dispatch } = props;\n  const pointData = pstate ? pstate.pointData : [];\n  const cpointData = cstate ? cstate.pointData : [];\n\n  const changeCollapse = useMemo(() => {\n    return (c: boolean) => {\n      setCollapsed(c);\n    };\n  }, []);\n  const changeRightColla = useMemo(() => {\n    return (c: boolean) => {\n      setRightColla(c);\n    };\n  }, []);\n  const curPoint = pstate ? pstate.curPoint : {};\n\n  // 指定画布的id\n  let canvasId = \"js_canvas\";\n\n  const backSize = () => {\n    setScale(1);\n    setDragState({ x: 0, y: 0 });\n  };\n\n  const CpIcon = {\n    base: <HighlightOutlined />,\n    media: <PlayCircleOutlined />,\n    visible: <PieChartOutlined />,\n    shop: <AppstoreOutlined />\n  };\n\n  const generateHeader = useMemo(() => {\n    return (type: componentsType, text: string) => {\n      return (\n        <div>\n          {CpIcon[type]} {text}\n        </div>\n      );\n    };\n  }, [CpIcon]);\n\n  const handleSlider = useMemo(() => {\n    return (type: any) => {\n      if (type) {\n        setScale((prev: number) => +(prev + 0.1).toFixed(1));\n      } else {\n        setScale((prev: number) => +(prev - 0.1).toFixed(1));\n      }\n    };\n  }, []);\n\n  const handleFormSave = useMemo(() => {\n    return (data: any) => {\n      dispatch({\n        type: \"editorModal/modPointData\",\n        payload: { ...curPoint, item: { ...curPoint.item, config: data } }\n      });\n    };\n  }, [curPoint, dispatch]);\n\n  const clearData = useCallback(() => {\n    dispatch({ type: \"editorModal/clearAll\" });\n  }, [dispatch]);\n\n  const handleDel = useMemo(() => {\n    return (id: any) => {\n      dispatch({\n        type: \"editorModal/delPointData\",\n        payload: { id }\n      });\n    };\n  }, [dispatch]);\n\n  const redohandler = useMemo(() => {\n    return () => {\n      dispatch(ActionCreators.redo());\n    };\n  }, [dispatch]);\n\n  const undohandler = useMemo(() => {\n    return () => {\n      dispatch(ActionCreators.undo());\n    };\n  }, [dispatch]);\n\n  const importTpl = (data: any) => {\n    dispatch({\n      type: \"editorModal/importTplData\",\n      payload: data\n    });\n  };\n\n  useEffect(() => {\n    // note (@livs-ops): 检测当前浏览器是否处于手机模式下\n    if (detectMobileBrowser(getBrowserNavigatorMetaInfo())) {\n      props.history.push(\"/mobileTip\");\n    }\n    // eslint-disable-next-line react-hooks/exhaustive-deps\n  }, []);\n\n  useEffect(() => {\n    if (pstate.curPoint && pstate.curPoint.status === \"inToCanvas\") {\n      setRightColla(false);\n    }\n  }, [pstate.curPoint]);\n\n  const allType = useMemo(() => {\n    let arr: string[] = [];\n    template.forEach(v => {\n      arr.push(v.type);\n    });\n    mediaTpl.forEach(v => {\n      arr.push(v.type);\n    });\n    graphTpl.forEach(v => {\n      arr.push(v.type);\n    });\n    shopTpl.forEach(v => {\n      arr.push(v.type);\n    });\n    return arr;\n  }, [graphTpl, mediaTpl, template, shopTpl]);\n\n  const [dragstate, setDragState] = useState({ x: 0, y: 0 });\n\n  const ref = useRef<HTMLDivElement>(null);\n  const renderRight = useMemo(() => {\n    return (\n      <div\n        ref={ref}\n        className={styles.attrSetting}\n        style={{\n          transition: \"all ease-in-out 0.5s\",\n          transform: rightColla ? \"translate(100%,0)\" : \"translate(0,0)\"\n        }}\n      >\n        {pointData.length && curPoint ? (\n          <>\n            <div className={styles.tit}>属性设置</div>\n            <FormRender\n              config={curPoint.item.editableEl}\n              uid={curPoint.id}\n              defaultValue={curPoint.item.config}\n              onSave={handleFormSave}\n              onDel={handleDel}\n              rightPannelRef={ref}\n            />\n          </>\n        ) : (\n          <div style={{ paddingTop: \"100px\" }}>\n            <Result\n              status=\"404\"\n              title=\"还没有数据哦\"\n              subTitle=\"赶快拖拽组件来生成你的H5页面吧～\"\n            />\n          </div>\n        )}\n      </div>\n    );\n  }, [\n    cpointData.length,\n    curPoint,\n    handleDel,\n    handleFormSave,\n    pointData.length,\n    rightColla\n  ]);\n\n  const tabRender = useMemo(() => {\n    if (collapsed) {\n      return (\n        <>\n          <TabPane tab={generateHeader(\"base\", \"\")} key=\"1\"></TabPane>\n          <TabPane tab={generateHeader(\"media\", \"\")} key=\"2\"></TabPane>\n          <TabPane tab={generateHeader(\"visible\", \"\")} key=\"3\"></TabPane>\n          <TabPane tab={generateHeader(\"shop\", \"\")} key=\"4\"></TabPane>\n        </>\n      );\n    } else {\n      return (\n        <>\n          <TabPane tab={generateHeader(\"base\", \"\")} key=\"1\">\n            <div className={styles.ctitle}>基础组件</div>\n            {template.map((value, i) => {\n              return (\n                <TargetBox item={value} key={i} canvasId={canvasId}>\n                  <DynamicEngine\n                    {...value}\n                    config={\n                      schemaH5[value.type as keyof typeof schemaH5].config\n                    }\n                    componentsType=\"base\"\n                    isTpl={true}\n                  />\n                </TargetBox>\n              );\n            })}\n          </TabPane>\n          <TabPane tab={generateHeader(\"media\", \"\")} key=\"2\">\n            <div className={styles.ctitle}>媒体组件</div>\n            {mediaTpl.map((value, i) => (\n              <TargetBox item={value} key={i} canvasId={canvasId}>\n                <DynamicEngine\n                  {...value}\n                  config={schemaH5[value.type as keyof typeof schemaH5].config}\n                  componentsType=\"media\"\n                  isTpl={true}\n                />\n              </TargetBox>\n            ))}\n          </TabPane>\n          <TabPane tab={generateHeader(\"visible\", \"\")} key=\"3\">\n            <div className={styles.ctitle}>可视化组件</div>\n            {graphTpl.map((value, i) => (\n              <TargetBox item={value} key={i} canvasId={canvasId}>\n                <DynamicEngine\n                  {...value}\n                  config={schemaH5[value.type as keyof typeof schemaH5].config}\n                  componentsType={\"visible\" as componentsType}\n                  isTpl={true}\n                />\n              </TargetBox>\n            ))}\n          </TabPane>\n          <TabPane tab={generateHeader(\"shop\", \"\")} key=\"4\">\n            <div className={styles.ctitle}>营销组件</div>\n            {shopTpl.map((value, i) => (\n              <TargetBox item={value} key={i} canvasId={canvasId}>\n                <DynamicEngine\n                  {...value}\n                  config={schemaH5[value.type as keyof typeof schemaH5].config}\n                  componentsType={\"shop\" as componentsType}\n                  isTpl={true}\n                />\n              </TargetBox>\n            ))}\n          </TabPane>\n        </>\n      );\n    }\n  }, [\n    canvasId,\n    collapsed,\n    generateHeader,\n    graphTpl,\n    mediaTpl,\n    schemaH5,\n    template,\n    shopTpl\n  ]);\n\n  const containerRef = useRef<HTMLDivElement>(null);\n  const [diffmove, setDiffMove] = useState({\n    start: { x: 0, y: 0 },\n    move: false\n  });\n\n  const mousedownfn = useMemo(() => {\n    return (e: React.MouseEvent<HTMLDivElement>) => {\n      if (e.target === containerRef.current) {\n        setDiffMove({\n          start: {\n            x: e.clientX,\n            y: e.clientY\n          },\n          move: true\n        });\n      }\n    };\n  }, []);\n\n  const mousemovefn = useMemo(() => {\n    return (e: React.MouseEvent<HTMLDivElement>) => {\n      if (diffmove.move) {\n        let diffx: number;\n        let diffy: number;\n        const newX = e.clientX;\n        const newY = e.clientY;\n        diffx = newX - diffmove.start.x;\n        diffy = newY - diffmove.start.y;\n        setDiffMove({\n          start: {\n            x: newX,\n            y: newY\n          },\n          move: true\n        });\n        setDragState(prev => {\n          return {\n            x: prev.x + diffx,\n            y: prev.y + diffy\n          };\n        });\n      }\n    };\n  }, [diffmove.move, diffmove.start.x, diffmove.start.y]);\n\n  const mouseupfn = useMemo(() => {\n    return () => {\n      setDiffMove({\n        start: { x: 0, y: 0 },\n        move: false\n      });\n    };\n  }, []);\n\n  const onwheelFn = useMemo(() => {\n    return (e: React.WheelEvent<HTMLDivElement>) => {\n      if (e.deltaY < 0) {\n        setDragState(prev => ({\n          x: prev.x,\n          y: prev.y + 40\n        }));\n      } else {\n        setDragState(prev => ({\n          x: prev.x,\n          y: prev.y - 40\n        }));\n      }\n    };\n  }, []);\n\n  useEffect(() => {\n    if (diffmove.move && containerRef.current) {\n      containerRef.current.style.cursor = \"move\";\n    } else {\n      containerRef.current!.style.cursor = \"default\";\n    }\n  }, [diffmove.move]);\n\n  return (\n    <div className={styles.editorWrap}>\n      <HeaderComponent\n        redohandler={redohandler}\n        undohandler={undohandler}\n        pointData={pointData}\n        clearData={clearData}\n        location={props.location}\n        importTpl={importTpl}\n      />\n      <div className={styles.container}>\n        <div\n          className={styles.list}\n          style={{\n            transition: \"all ease-in-out 0.5s\",\n            position: \"fixed\",\n            width: collapsed ? \"50px\" : \"350px\",\n            zIndex: 200,\n            boxShadow: \"none\"\n          }}\n        >\n          <div className={styles.componentList}>\n            <Tabs\n              className=\"editorTabclass\"\n              onTabClick={() => changeCollapse(false)}\n              defaultActiveKey=\"1\"\n              tabPosition={\"left\"}\n            >\n              {tabRender}\n            </Tabs>\n          </div>\n          <div\n            className={styles.collapsed}\n            style={{ position: \"absolute\", bottom: \"80px\", left: \"20px\" }}\n            onClick={() => changeCollapse(!collapsed)}\n          >\n            {collapsed ? <DoubleRightOutlined /> : <DoubleLeftOutlined />}\n          </div>\n        </div>\n        <div\n          style={{\n            width: collapsed ? \"50px\" : \"350px\",\n            transition: \"all ease-in-out 0.5s\"\n          }}\n        ></div>\n\n        <div\n          className={styles.tickMark}\n          id=\"calibration\"\n          ref={containerRef}\n          onMouseDown={mousedownfn}\n          onMouseMove={throttle(mousemovefn, 500)}\n          onMouseUp={mouseupfn}\n          onMouseLeave={mouseupfn}\n          onWheel={onwheelFn}\n        >\n          <div className={styles.tickMarkTop}>\n            <Calibration\n              direction=\"up\"\n              id=\"calibrationUp\"\n              multiple={scaleNum}\n            />\n          </div>\n          <div className={styles.tickMarkLeft}>\n            <Calibration\n              direction=\"right\"\n              id=\"calibrationRight\"\n              multiple={scaleNum}\n            />\n          </div>\n          <SourceBox\n            dragState={dragstate}\n            setDragState={setDragState}\n            scaleNum={scaleNum}\n            canvasId={canvasId}\n            allType={allType}\n          />\n          <CanvasControl\n            scaleNum={scaleNum}\n            handleSlider={handleSlider}\n            backSize={backSize}\n          />\n        </div>\n        {renderRight}\n        <div\n          className={styles.rightcolla}\n          style={{\n            position: \"absolute\",\n            right: rightColla ? 0 : \"304px\",\n            transform: \"translate(0,-50%)\",\n            transition: \"all ease-in-out 0.5s\"\n          }}\n          onClick={() => changeRightColla(!rightColla)}\n        >\n          {!rightColla ? <DoubleRightOutlined /> : <DoubleLeftOutlined />}\n        </div>\n        <div\n          style={{\n            width: rightColla ? 0 : \"304px\",\n            transition: \"all ease-in-out 0.5s\"\n          }}\n        ></div>\n      </div>\n    </div>\n  );\n};\n\nexport default connect((state: StateWithHistory<any>) => {\n  return {\n    pstate: state.present.editorModal,\n    cstate: state.present.editorPcModal\n  };\n})(Container);\n"
  },
  {
    "path": "src/pages/editor/SourceBox.tsx",
    "content": "import React, {\n  useMemo,\n  memo,\n  ReactNode,\n  useContext,\n  CSSProperties\n} from \"react\";\nimport { useDrag } from \"react-dnd\";\nimport schema from \"@/materials/schema\";\nimport styles from \"./index.less\";\n\ninterface TargetBoxProps {\n  item: any;\n  children: ReactNode;\n  canvasId: string;\n}\n\nconst SourceBox = memo((props: TargetBoxProps) => {\n  const { item } = props;\n\n  const [{ isDragging }, drag] = useDrag({\n    item: {\n      type: item.type,\n      config: schema[item.type as keyof typeof schema].config,\n      h: item.h,\n      editableEl: schema[item.type as keyof typeof schema].editData,\n      category: item.category,\n      x: item.x || 0\n    },\n    collect: monitor => ({\n      isDragging: monitor.isDragging()\n    })\n  });\n\n  const containerStyle: CSSProperties = useMemo(\n    () => ({\n      opacity: isDragging ? 0.4 : 1,\n      cursor: \"move\",\n      height: \"140px\"\n    }),\n    [isDragging]\n  );\n  return (\n    <>\n      <div className={styles.listWrap}>\n        <div className={styles.module} style={{ ...containerStyle }} ref={drag}>\n          <div\n            style={{\n              height: \"110px\",\n              display: \"flex\",\n              justifyContent: \"center\",\n              alignItems: \"center\",\n              flexDirection: \"column\",\n              overflow: \"hidden\"\n            }}\n          >\n            {props.children}\n          </div>\n          <div\n            style={{\n              height: \"30px\",\n              lineHeight: \"30px\",\n              textAlign: \"center\",\n              backgroundColor: \"rgba(245, 245, 245, 1)\",\n              color: \"rgba(118, 118, 118, 1)\"\n            }}\n          >\n            {props.item.displayName}\n          </div>\n        </div>\n      </div>\n    </>\n  );\n});\n\nexport default SourceBox;\n"
  },
  {
    "path": "src/pages/editor/TargetBox.tsx",
    "content": "import React, { memo, useCallback, useEffect, useMemo, useState } from \"react\";\nimport { useDrop } from \"react-dnd\";\nimport Draggable, { DraggableData, DraggableEvent } from \"react-draggable\";\nimport { ItemCallback } from \"react-grid-layout\";\nimport { connect } from \"dva\";\nimport { ViewRender } from \"@/core\";\nimport styles from \"./index.less\";\nimport { uuid } from \"@/utils/tool\";\nimport { Dispatch } from \"umi\";\nimport { StateWithHistory } from \"redux-undo\";\nimport { Menu, Item, MenuProvider } from \"react-contexify\";\nimport \"react-contexify/dist/ReactContexify.min.css\";\ninterface SourceBoxProps {\n  pstate: {\n    pointData: { id: string; item: any; point: any; isMenu?: any }[];\n    curPoint: any;\n  };\n  cstate: { pointData: { id: string; item: any; point: any }[]; curPoint: any };\n  scaleNum: number;\n  canvasId: string;\n  allType: string[];\n  dispatch: Dispatch;\n  dragState: { x: number; y: number };\n  setDragState: React.Dispatch<\n    React.SetStateAction<{\n      x: number;\n      y: number;\n    }>\n  >;\n}\n\nconst TargetBox = memo((props: SourceBoxProps) => {\n  const {\n    pstate,\n    scaleNum,\n    canvasId,\n    allType,\n    dispatch,\n    dragState,\n    setDragState,\n    cstate\n  } = props;\n\n  let pointData = pstate ? pstate.pointData : [];\n  const cpointData = cstate ? cstate.pointData : [];\n\n  const [canvasRect, setCanvasRect] = useState<number[]>([]);\n  const [isShowTip, setIsShowTip] = useState(true);\n  const [{ isOver }, drop] = useDrop({\n    accept: allType,\n    drop: (item: { h: number; type: string; x: number }, monitor) => {\n      let parentDiv = document.getElementById(canvasId),\n        pointRect = parentDiv!.getBoundingClientRect(),\n        top = pointRect.top,\n        pointEnd = monitor.getSourceClientOffset(),\n        y = pointEnd!.y < top ? 0 : pointEnd!.y - top,\n        col = 24, // 网格列数\n        cellHeight = 2,\n        w = item.type === \"Icon\" ? 3 : col;\n      // 转换成网格规则的坐标和大小\n      let gridY = Math.ceil(y / cellHeight);\n      dispatch({\n        type: \"editorModal/addPointData\",\n        payload: {\n          id: uuid(6, 10),\n          item,\n          point: {\n            i: `x-${pointData.length}`,\n            x: 0,\n            y: gridY,\n            w,\n            h: item.h,\n            isBounded: true\n          },\n          status: \"inToCanvas\"\n        }\n      });\n    },\n    collect: monitor => ({\n      isOver: monitor.isOver(),\n      canDrop: monitor.canDrop(),\n      item: monitor.getItem()\n    })\n  });\n\n  const dragStop: ItemCallback = useMemo(() => {\n    return (layout, oldItem, newItem, placeholder, e, element) => {\n      const curPointData = pointData.filter(item => item.id === newItem.i)[0];\n      dispatch({\n        type: \"editorModal/modPointData\",\n        payload: { ...curPointData, point: newItem, status: \"inToCanvas\" }\n      });\n    };\n  }, [cpointData, dispatch, pointData]);\n\n  const onDragStart: ItemCallback = useMemo(() => {\n    return (layout, oldItem, newItem, placeholder, e, element) => {\n      const curPointData = pointData.filter(item => item.id === newItem.i)[0];\n      dispatch({\n        type: \"editorModal/modPointData\",\n        payload: { ...curPointData, status: \"inToCanvas\" }\n      });\n    };\n  }, [dispatch, pointData]);\n\n  const onResizeStop: ItemCallback = useMemo(() => {\n    return (layout, oldItem, newItem, placeholder, e, element) => {\n      const curPointData = pointData.filter(item => item.id === newItem.i)[0];\n      dispatch({\n        type: \"editorModal/modPointData\",\n        payload: { ...curPointData, point: newItem, status: \"inToCanvas\" }\n      });\n    };\n  }, [dispatch, pointData]);\n\n  const handleContextMenuDel = () => {\n    if (pstate.curPoint) {\n      dispatch({\n        type: \"editorModal/delPointData\",\n        payload: { id: pstate.curPoint.id }\n      });\n    }\n  };\n\n  const handleContextMenuCopy = () => {\n    if (pstate.curPoint) {\n      dispatch({\n        type: \"editorModal/copyPointData\",\n        payload: { id: pstate.curPoint.id }\n      });\n    }\n  };\n\n  const onConTextClick = (type: string) => {\n    if (type === \"del\") {\n      handleContextMenuDel();\n    } else if (type === \"copy\") {\n      handleContextMenuCopy();\n    }\n  };\n\n  const MyAwesomeMenu = useCallback(\n    () => (\n      <Menu id=\"menu_id\">\n        <Item onClick={() => onConTextClick(\"copy\")}>复制</Item>\n        <Item onClick={() => onConTextClick(\"del\")}>删除</Item>\n      </Menu>\n    ),\n    [onConTextClick]\n  );\n\n  useEffect(() => {\n    let { width, height } = document\n      .getElementById(canvasId)!\n      .getBoundingClientRect();\n    setCanvasRect([width, height]);\n  }, [canvasId]);\n\n  useEffect(() => {\n    let timer = window.setTimeout(() => {\n      setIsShowTip(false);\n    }, 3000);\n    return () => {\n      window.clearTimeout(timer);\n    };\n  }, []);\n  const opacity = isOver ? 0.7 : 1;\n\n  const render = useMemo(() => {\n    return (\n      <Draggable\n        position={dragState}\n        handle=\".js_box\"\n        onStop={(e: DraggableEvent, data: DraggableData) => {\n          setDragState({ x: data.x, y: data.y });\n        }}\n      >\n        <div className={styles.canvasBox}>\n          <MenuProvider id=\"menu_id\">\n            <div\n              style={{\n                transform: `scale(${scaleNum})`,\n                position: \"relative\",\n                width: \"100%\",\n                height: \"100%\"\n              }}\n            >\n              <div\n                id={canvasId}\n                className={styles.canvas}\n                style={{\n                  opacity\n                }}\n                ref={drop}\n              >\n                {pointData.length > 0 ? (\n                  <ViewRender\n                    pointData={pointData}\n                    width={canvasRect[0] || 0}\n                    dragStop={dragStop}\n                    onDragStart={onDragStart}\n                    onResizeStop={onResizeStop}\n                  />\n                ) : null}\n              </div>\n            </div>\n          </MenuProvider>\n        </div>\n      </Draggable>\n    );\n  }, [\n    canvasId,\n    canvasRect,\n    dragState,\n    dragStop,\n    drop,\n    isShowTip,\n    onDragStart,\n    onResizeStop,\n    opacity,\n    pointData,\n    scaleNum,\n    setDragState\n  ]);\n\n  return (\n    <>\n      {render}\n      <MyAwesomeMenu />\n    </>\n  );\n});\n\nexport default connect((state: StateWithHistory<any>) => ({\n  pstate: state.present.editorModal,\n  cstate: state.present.editorPcModal\n}))(TargetBox);\n"
  },
  {
    "path": "src/pages/editor/components/CanvasControl/index.less",
    "content": ".sliderWrap {\n  position: absolute;\n  display: inline-block;\n  right: 60px;\n  bottom: 160px;\n  height: 32px;\n  line-height: 30px;\n  background: #ffffff;\n  box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.1);\n  border-radius: 4px;\n  color: #4a4a4a;\n  .slider {\n    position: absolute;\n    right: 30px;\n    bottom: 95px;\n    font-size: 14px;\n  }\n  .showTip {\n    position: absolute;\n    display: block;\n    width: 20px;\n    height: 100%;\n    left: 50%;\n    transform: translateX(-50%);\n  }\n  .sliderBtn {\n    cursor: pointer;\n    user-select: none;\n    display: inline;\n    font-size: 14px;\n    color: #4a4a4a;\n  }\n  span {\n    margin: 0 8px;\n  }\n  .backSize {\n    cursor: pointer;\n    color: #4a4a4a;\n    &::before {\n      content: \"|\";\n      color: #dbdbdb;\n      margin-right: 7px;\n    }\n  }\n}\n.fastMenu {\n  .boardTit {\n    text-align: center;\n    line-height: 2;\n    font-weight: bold;\n  }\n  .keyRow {\n    margin: 10px;\n    display: flex;\n    .key {\n      margin-right: 30px;\n      code {\n        display: inline-block;\n        border: 1px solid #f0f0f0;\n        border-radius: 2px;\n        padding: 0 3px;\n        color: rgba(94, 41, 41, 0.6);\n        font-size: 12px;\n        margin-right: 3px;\n      }\n    }\n    .text {\n      margin-left: auto;\n      color: #888;\n    }\n  }\n}\n"
  },
  {
    "path": "src/pages/editor/components/CanvasControl/index.tsx",
    "content": "import React, { MouseEvent, useEffect, useState } from \"react\";\nimport { Popover, Tooltip } from \"antd\";\nimport { ExpandOutlined, InsertRowBelowOutlined } from \"@ant-design/icons\";\nimport Draggable from \"react-draggable\";\nimport styles from \"./index.less\";\n\ninterface CanvasControlProps {\n  scaleNum: number;\n  handleSlider: Function;\n  backSize(event: MouseEvent<HTMLDivElement>): void;\n}\n\nconst fastMenu = (\n  <div className={styles.fastMenu}>\n    <div className={styles.boardTit}>快捷键</div>\n    <div className={styles.keyRow}>\n      <span className={styles.key}>\n        <code>command + c</code>\n        <code>ctrl + c</code>\n      </span>\n      <span className={styles.text}>复制组件</span>\n    </div>\n    <div className={styles.keyRow}>\n      <span className={styles.key}>\n        <code>delete</code>\n        <code>backspace</code>\n      </span>\n      <span className={styles.text}>删除组件</span>\n    </div>\n    <div className={styles.keyRow}>\n      <span className={styles.key}>\n        <code>command + h</code>\n        <code>ctrl +h</code>\n      </span>\n      <span className={styles.text}>显示/隐藏网格线</span>\n    </div>\n    <div className={styles.keyRow}>\n      <span className={styles.key}>\n        <code>鼠标右键菜单</code>\n        <code>快捷键盘(删除/复制)</code>\n      </span>\n      <span className={styles.text}>显示/隐藏网格线</span>\n    </div>\n  </div>\n);\n\nconst CanvasControl = (props: CanvasControlProps) => {\n  const { scaleNum, handleSlider, backSize } = props;\n  const [visible, setVisible] = useState(true);\n  useEffect(() => {\n    setTimeout(() => {\n      setVisible(false);\n    }, 5000);\n  }, []);\n  return (\n    <Draggable>\n      <div className={styles.sliderWrap}>\n        <Tooltip title=\"支持自由拖拽啦\" visible={visible}>\n          <span className={styles.showTip}></span>\n        </Tooltip>\n        <span\n          className={styles.sliderBtn}\n          onClick={handleSlider.bind(this, 1)}\n          style={\n            scaleNum === 1.5\n              ? { pointerEvents: \"none\" }\n              : { display: \"initial\", marginLeft: \"13px\" }\n          }\n        >\n          +\n        </span>\n        <span>{Math.floor(scaleNum * 10) * 10}%</span>\n        <span\n          className={styles.sliderBtn}\n          style={\n            scaleNum === 0.5\n              ? { pointerEvents: \"none\" }\n              : { display: \"initial\" }\n          }\n          onClick={handleSlider.bind(this, 0)}\n        >\n          -\n        </span>\n        <span className={styles.backSize}>\n          <Popover\n            placement=\"bottom\"\n            title={null}\n            content={fastMenu}\n            trigger=\"hover\"\n          >\n            <InsertRowBelowOutlined />\n          </Popover>\n        </span>\n        <span className={styles.backSize}>\n          <ExpandOutlined onClick={backSize} />\n        </span>\n      </div>\n    </Draggable>\n  );\n};\n\nexport default CanvasControl;\n"
  },
  {
    "path": "src/pages/editor/components/Header/index.less",
    "content": ".header {\n  position: relative;\n  z-index: 201;\n  padding-left: 30px;\n  padding-right: 30px;\n  display: flex;\n  align-items: center;\n  height: 56px;\n  background: #fff;\n  box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n  .logoArea {\n    width: 300px;\n    .backBtn {\n      display: inline-block;\n      padding: 12px 10px;\n      margin-right: 22px;\n      cursor: pointer;\n    }\n    .logo {\n      position: fixed;\n      display: inline-block;\n      width: 120px;\n      height: 35px;\n      border-radius: 3px;\n      overflow: hidden;\n      background: url(../../../../assets/logo.png) no-repeat;\n      background-size: contain;\n      line-height: 50px;\n      margin-top: 7px;\n      margin-left: -20px;\n    }\n  }\n  .controlArea {\n    flex: 1;\n    text-align: center;\n  }\n  .btnArea {\n    width: 250px;\n    margin-left: 20px;\n    text-align: right;\n  }\n}\n.saveForm {\n  .formIpt {\n    margin-bottom: 20px;\n  }\n}\n@media screen and (min-width: 1280px) {\n  .header {\n    .logoArea {\n      width: 17%;\n    }\n    .controlArea {\n      width: auto;\n    }\n  }\n}\n"
  },
  {
    "path": "src/pages/editor/components/Header/index.tsx",
    "content": "import React, { useRef, memo, useMemo, useState, useEffect } from \"react\";\nimport { Button, Input, Modal, Upload, Tooltip, Badge } from \"antd\";\nimport {\n  ArrowLeftOutlined,\n  MobileOutlined,\n  DownloadOutlined,\n  CopyOutlined,\n  DeleteOutlined,\n  UndoOutlined,\n  RedoOutlined,\n  FileAddOutlined,\n  CodeOutlined,\n  SketchOutlined,\n  UploadOutlined,\n  InstagramOutlined\n} from \"@ant-design/icons\";\nimport { history } from \"umi\";\nimport QRCode from \"qrcode.react\";\nimport { saveAs } from \"file-saver\";\nimport req from \"@/utils/req\";\nimport Code from \"@/assets/code.png\";\nimport styles from \"./index.less\";\nimport MyPopover from \"yh-react-popover\";\n\nconst { confirm } = Modal;\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\ninterface HeaderComponentProps {\n  pointData: any;\n  location: any;\n  clearData: any;\n  undohandler: any;\n  redohandler: any;\n  importTpl: any;\n}\n\nconst HeaderComponent = memo((props: HeaderComponentProps) => {\n  const {\n    pointData,\n    location,\n    clearData,\n    undohandler,\n    redohandler,\n    importTpl\n  } = props;\n  const [showModalIframe, setShowModalIframe] = useState(false);\n  const [showFaceModal, setShowFaceModal] = useState(false);\n  const [faceUrl, setFaceUrl] = useState(\"\");\n  const iptRef = useRef<Input>(null);\n\n  const toPreview = () => {\n    localStorage.setItem(\"pointData\", JSON.stringify(pointData));\n    savePreview();\n    setTimeout(() => {\n      window.open(\n        isDev\n          ? `/preview?tid=${props.location.query.tid}`\n          : `/preview?tid=${props.location.query.tid}`\n      );\n    }, 600);\n  };\n\n  const toVipLogin = () => {\n    window.open(\"http://doc.dooring.vip\");\n  };\n\n  const content = () => {\n    const { tid } = location.query || \"\";\n    return (\n      <QRCode\n        value={`${window.location.protocol}//${window.location.host}/preview?tid=${tid}`}\n      />\n    );\n  };\n\n  const handleSaveTpl = () => {\n    confirm({\n      title: \"确定要保存吗？\",\n      content: (\n        <div className={styles.saveForm}>\n          <div className={styles.formIpt}>\n            <span>模版名称：</span>\n            <Input ref={iptRef} />\n          </div>\n          <div className={styles.formIpt}>\n            <span>封面设置：</span>\n            <Button\n              type=\"primary\"\n              size=\"small\"\n              style={{ marginRight: \"20px\" }}\n              onClick={() => generateFace(1)}\n            >\n              一键生成封面\n            </Button>\n            <Button size=\"small\" onClick={() => generateFace(0)}>\n              使用默认封面\n            </Button>\n          </div>\n          <div className={styles.formIpt}>\n            <span>访问链接：</span>\n            <Input disabled value=\"暂未开放，保存之后可以在模版库中访问\" />\n          </div>\n        </div>\n      ),\n      okText: \"保存\",\n      cancelText: \"取消\",\n      onOk() {\n        let name = iptRef.current!.state.value;\n        req.post(\"/visible/tpl/save\", { name, tpl: pointData }).then(res => {\n          console.log(res);\n        });\n      },\n      onCancel() {\n        console.log(\"Cancel\");\n      }\n    });\n  };\n\n  const useTemplate = () => {\n    Modal.info({\n      title: \"该功能需要服务器支持, 请在企业版体验\",\n      content: (\n        <div style={{ textAlign: \"center\" }}>\n          <img src={Code} alt=\"趣谈前端\" style={{ width: \"180px\" }} />\n        </div>\n      ),\n      okText: \"客官知道啦\"\n    });\n  };\n\n  const downLoadJson = () => {\n    const jsonStr = JSON.stringify(pointData);\n    const blob = new Blob([jsonStr], { type: \"text/plain;charset=utf-8\" });\n    saveAs(blob, \"template.json\");\n  };\n\n  const toLogin = () => {\n    const { tid } = props.location.query || \"\";\n    window.location.href = `/h5_plus/login?tid=${tid}`;\n  };\n\n  const deleteAll = () => {\n    Modal.confirm({\n      title: \"确认清空画布?\",\n      okText: \"确认\",\n      cancelText: \"取消\",\n      onOk() {\n        clearData();\n      }\n    });\n  };\n\n  const toHelp = () => {\n    window.open(\"/help\");\n  };\n\n  const toBack = () => {\n    history.push(\"/\");\n  };\n\n  const newPage = () => {\n    let prev = localStorage.getItem(\"myH5\");\n    try {\n      localStorage.setItem(\n        \"myH5\",\n        JSON.stringify(prev ? [...Array.from(prev), pointData] : [pointData])\n      );\n    } catch (err) {\n      console.error(err);\n    }\n    clearData();\n  };\n\n  const savePreview = () => {\n    const { tid } = props.location.query || \"\";\n    req.post(\"/visible/preview\", { tid, tpl: pointData });\n  };\n  const handleSaveCode = () => {\n    Modal.confirm({\n      title: \"确定要下载吗? 每人每天只能下载2次哦~\",\n      okText: \"确定\",\n      cancelText: \"取消\",\n      onOk() {\n        // 未来的下载代码逻辑\n      }\n    });\n  };\n\n  useEffect(() => {\n    // 定义截图子页面句柄函数\n    window.getFaceUrl = url => {\n      setFaceUrl(url);\n      setShowModalIframe(false);\n    };\n  }, []);\n\n  const uploadprops = useMemo(\n    () => ({\n      name: \"file\",\n      showUploadList: false,\n      beforeUpload(file, fileList) {\n        // 解析并提取excel数据\n        let reader = new FileReader();\n        reader.onload = function(e: Event) {\n          let data = (e as any).target.result;\n          importTpl && importTpl(JSON.parse(data));\n        };\n        reader.readAsText(file);\n      }\n    }),\n    []\n  );\n\n  const generatePoster = () => {\n    localStorage.setItem(\"pointData\", JSON.stringify(pointData));\n    setShowModalIframe(true);\n    setTimeout(() => {\n      setShowFaceModal(true);\n    }, 3600);\n  };\n\n  const handleReloadPage = () => {\n    document.getElementById(\"previewPage\")?.contentWindow.location.reload();\n  };\n\n  return (\n    <div className={styles.header}>\n      <div className={styles.logoArea}>\n        <div className={styles.backBtn} onClick={toBack}>\n          <ArrowLeftOutlined />\n        </div>\n        <div className={styles.logo}></div>\n        <Button\n          type=\"primary\"\n          size=\"small\"\n          style={{ transform: \"translate(86px, -8px)\" }}\n          onClick={() => (window.location.href = \"https://dooring.vip\")}\n        >\n          体验企业Saas版\n        </Button>\n      </div>\n      <div className={styles.controlArea}>\n        <Button\n          type=\"link\"\n          style={{ marginRight: \"9px\" }}\n          onClick={handleSaveTpl}\n          disabled={!pointData.length}\n        >\n          保存模版\n        </Button>\n        <Button\n          type=\"primary\"\n          style={{ marginRight: \"9px\" }}\n          onClick={useTemplate}\n        >\n          模版库\n        </Button>\n        <Upload {...uploadprops}>\n          <Button type=\"link\" style={{ marginRight: \"8px\" }}>\n            <UploadOutlined />\n          </Button>\n        </Upload>\n        <Button\n          type=\"link\"\n          style={{ marginRight: \"9px\" }}\n          onClick={handleSaveCode}\n          disabled={!pointData.length}\n        >\n          <DownloadOutlined />\n        </Button>\n        <Button\n          type=\"link\"\n          style={{ marginRight: \"9px\" }}\n          title=\"下载json文件\"\n          onClick={downLoadJson}\n          disabled={!pointData.length}\n        >\n          <CopyOutlined />\n        </Button>\n        <Button\n          type=\"link\"\n          style={{ marginRight: \"9px\" }}\n          title=\"新建页面\"\n          onClick={newPage}\n          disabled={!pointData.length}\n        >\n          <FileAddOutlined />\n        </Button>\n        <MyPopover content={content()} directions=\"BOTTOM\">\n          <Button\n            type=\"link\"\n            style={{ marginRight: \"9px\" }}\n            onClick={savePreview}\n            disabled={!pointData.length}\n          >\n            <MobileOutlined />\n          </Button>\n        </MyPopover>\n        <Button\n          type=\"link\"\n          style={{ marginRight: \"9px\" }}\n          title=\"清空\"\n          onClick={deleteAll}\n          disabled={!pointData.length}\n        >\n          <DeleteOutlined />\n        </Button>\n        {/* <Button\n          type=\"link\"\n          style={{ marginRight: '9px' }}\n          title=\"撤销\"\n          onClick={undohandler}\n          disabled={!pointData.length}\n        >\n          <UndoOutlined />\n        </Button>\n        <Button type=\"link\" style={{ marginRight: '9px' }} title=\"重做\" onClick={redohandler}>\n          <RedoOutlined />\n        </Button> */}\n        <Tooltip placement=\"bottom\" title=\"一键生成海报分享图\">\n          <Badge dot offset={[-18, 10]}>\n            <Button\n              type=\"link\"\n              style={{ marginRight: \"6px\" }}\n              onClick={generatePoster}\n              disabled={!pointData.length}\n            >\n              <InstagramOutlined />\n            </Button>\n          </Badge>\n        </Tooltip>\n        <Button type=\"link\" onClick={toPreview} disabled={!pointData.length}>\n          预览\n        </Button>\n        <Button\n          type=\"link\"\n          style={{ marginRight: \"9px\" }}\n          onClick={toHelp}\n          disabled={!pointData.length}\n          title=\"使用帮助\"\n        >\n          帮助\n        </Button>\n      </div>\n      <div className={styles.btnArea}>\n        {/* 隐藏pc端切换, 保证代码纯粹 */}\n        {/* <Select\n          defaultValue=\"h5\"\n          style={{ width: 100, marginRight: 20 }}\n          onChange={e => {\n            setTheme(e);\n          }}\n        >\n          <Select.Option value=\"h5\">h5模式</Select.Option>\n          <Select.Option value=\"pc\">pc模式</Select.Option>\n        </Select> */}\n        <Button\n          type=\"primary\"\n          ghost\n          onClick={toVipLogin}\n          style={{ marginRight: \"12px\" }}\n        >\n          多模态文档编辑器\n        </Button>\n      </div>\n      <Modal\n        title=\"生成封面中...(长时间未反应请点右侧按钮重试)\"\n        visible={showModalIframe}\n        footer={null}\n        width={414}\n        closeIcon={<RedoOutlined />}\n        destroyOnClose={true}\n        onCancel={handleReloadPage}\n        maskClosable={false}\n      >\n        <iframe\n          id=\"previewPage\"\n          src={`/preview?tid=${props.location.query.tid}&gf=1`}\n          style={{ width: \"100%\", border: \"none\", height: \"600px\" }}\n        ></iframe>\n      </Modal>\n      <Modal\n        title=\"封面图(右键复制图片)\"\n        visible={showFaceModal}\n        footer={null}\n        width={414}\n        destroyOnClose={true}\n        onCancel={() => setShowFaceModal(false)}\n      >\n        <img src={faceUrl} style={{ width: \"100%\" }} />\n      </Modal>\n    </div>\n  );\n});\n\nexport default HeaderComponent;\n"
  },
  {
    "path": "src/pages/editor/index.js",
    "content": "import React from \"react\";\n\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { DndProvider } from \"react-dnd\";\n\nimport Container from \"./Container\";\n\nimport styles from \"./index.less\";\n\nfunction BasicLayout(props) {\n  return (\n    <div className={styles.layout}>\n      <DndProvider backend={HTML5Backend}>\n        <Container {...props} />\n      </DndProvider>\n    </div>\n  );\n}\n\nexport default BasicLayout;\n"
  },
  {
    "path": "src/pages/editor/index.less",
    "content": ".layout {\n  height: 100%;\n  width: 100%;\n  div::-webkit-scrollbar {\n    width: 8px;\n    height: 8px;\n  }\n  div::-webkit-scrollbar-thumb {\n    background: #bfbfbf;\n    border-radius: 10px;\n  }\n  div::-webkit-scrollbar-thumb:hover {\n    background: #2f54eb;\n  }\n  .editorWrap {\n    background-color: rgba(245, 245, 245, 1);\n    height: 100%;\n    width: 100%;\n  }\n  .container {\n    // height: 100vh;\n    height: calc(100% - 56px);\n    display: flex;\n    .list {\n      width: 350px;\n      height: 100%;\n      padding: 10px 0 10px 10px;\n      box-shadow: 2px 0px 10px rgba(0, 0, 0, 0.2);\n      display: inline-block;\n      background-color: #fff;\n      & > div:nth-child(1) {\n        height: 100%;\n      }\n      .ctitle {\n        font-weight: bold;\n        line-height: 50px;\n        font-family: PingFangSC-Medium, PingFang SC;\n        width: 100%;\n      }\n      .collapsed {\n        cursor: pointer;\n        &:hover {\n          color: #06c;\n        }\n      }\n      .searchBar {\n        margin-bottom: 20px;\n      }\n      &Wrap {\n        width: 50%;\n        &:nth-child(even) {\n          padding-left: 0px;\n        }\n        &:nth-child(odd) {\n          padding-left: 8px;\n        }\n      }\n      .module {\n        position: relative;\n        margin-bottom: 10px;\n        width: 100%;\n        overflow: hidden;\n        user-select: none;\n        border: 2px solid #9e9e9e3d;\n        transition: border 0.3s;\n        &:hover {\n          border: 2px solid #06c;\n        }\n        &::after {\n          content: \"\";\n          position: absolute;\n          z-index: 99;\n          width: 100%;\n          height: 100%;\n          top: 0;\n          left: 0;\n        }\n      }\n    }\n    .tickMark {\n      overflow: hidden;\n      height: 100%;\n      position: relative;\n      flex: 1;\n      .tickMarkTop {\n        width: 100%;\n        height: 50px;\n        position: absolute;\n        top: 0;\n        left: 0;\n      }\n      .tickMarkLeft {\n        width: 50px;\n        height: calc(100% - 50px);\n        position: absolute;\n        bottom: 0;\n        left: 0;\n      }\n      .canvasBox {\n        width: 375px;\n        min-height: 664px;\n        height: 664px;\n        position: relative;\n        left: 50%;\n        margin-left: -200px;\n        top: 80px;\n        .canvas {\n          position: relative;\n          width: 375px;\n          min-height: 664px;\n          background-color: #fff;\n          box-shadow: 2px 0px 10px rgba(0, 0, 0, 0.2);\n          position: absolute;\n          left: 0;\n          top: 0;\n          transition: transform 300ms ease-out;\n          .dragItem {\n            display: inline-block;\n            position: absolute;\n            z-index: 2;\n            border: 2px solid transparent;\n            cursor: move;\n            &:hover {\n              border: 2px solid #06c;\n            }\n            :global(a) {\n              display: block;\n              pointer-events: none;\n            }\n          }\n          .selected {\n            display: inline-block;\n            position: absolute;\n            z-index: 2;\n            cursor: move;\n            :global(a) {\n              display: block;\n              pointer-events: none;\n            }\n            border: 2px solid #06c;\n            .tooltip {\n              position: relative;\n              // z-index: 999999;\n              width: 388px;\n              text-align: right;\n            }\n          }\n        }\n      }\n      .canvasBox2 {\n        width: 1200px;\n        min-height: 800px;\n        height: 800px;\n        left: 15%;\n        position: relative;\n        margin-left: -200px;\n        top: 20px;\n        .canvas2 {\n          position: relative;\n          width: 1200px;\n          min-height: 800px;\n          background-color: #fff;\n          box-shadow: 2px 0px 10px rgba(0, 0, 0, 0.2);\n          position: absolute;\n          left: 0;\n          top: 0;\n          transition: transform 300ms ease-out;\n          .dragItem {\n            display: inline-block;\n            position: absolute;\n            z-index: 2;\n            border: 2px solid transparent;\n            cursor: move;\n            &:hover {\n              border: 2px solid #06c;\n            }\n            :global(a) {\n              display: block;\n              pointer-events: none;\n            }\n          }\n        }\n      }\n      .resetBall {\n        position: absolute;\n        right: 24px;\n        bottom: 445px;\n      }\n      .controllBall {\n        position: absolute;\n        bottom: 380px;\n        right: 5px;\n      }\n    }\n    .attrSetting {\n      width: 304px;\n      padding: 23px 0 60px 20px;\n      background: #fff;\n      height: 100%;\n      box-shadow: -2px 0px 4px 0px rgba(0, 0, 0, 0.1);\n      overflow: auto;\n      position: fixed;\n      right: 0;\n      .tit {\n        margin-bottom: 16px;\n        color: #000;\n        font-weight: bold;\n      }\n      .posWrap {\n        padding: 20px;\n        .posItem {\n          margin-bottom: 12px;\n          font-size: 14px;\n          color: rgba(0, 0, 0, 0.5);\n          .posTit {\n            margin-right: 50px;\n          }\n          .pos {\n            margin-right: 40px;\n            color: #000;\n            &::before {\n              content: attr(data-flag);\n              color: rgba(0, 0, 0, 0.4);\n              margin-right: 8px;\n            }\n          }\n        }\n      }\n      .graphWrap {\n        .graphTable {\n          .iptControl {\n            margin-bottom: 18px;\n            display: flex;\n            align-items: flex-start;\n            .iptLabel {\n              width: 108px;\n              flex-shrink: 0;\n              color: rgba(0, 0, 0, 0.5);\n            }\n            .cpSelector {\n              img {\n                width: 100%;\n              }\n            }\n            .colorSelector {\n              span {\n                display: inline-block;\n                margin-right: 10px;\n                width: 42px;\n                height: 16px;\n              }\n            }\n          }\n        }\n      }\n    }\n    .rightcolla {\n      width: 20px;\n      height: 80px;\n      background: #ffffff;\n      box-shadow: -2px 0px 4px 0px rgba(0, 0, 0, 0.1);\n      display: flex;\n      justify-content: center;\n      align-items: center;\n      right: 304px;\n      top: 50%;\n      cursor: pointer;\n      &:hover {\n        color: #2f54eb;\n      }\n    }\n  }\n}\n\n.saveForm {\n  padding-top: 10px;\n  .formIpt {\n    span {\n      display: block;\n      line-height: 2.4em;\n    }\n  }\n}\n"
  },
  {
    "path": "src/pages/editor/models/editorModal.js",
    "content": "/*\n * @Description: 添加键盘快捷键\n * @Version: 2.1\n * @Autor: xuxiaoxi\n */\nimport { uuid } from \"@/utils/tool\";\nimport key from \"keymaster\";\nconst pointData = localStorage.getItem(\"userData\") || \"[]\";\n\nfunction overSave(name, data) {\n  localStorage.setItem(name, JSON.stringify(data));\n}\n\nexport default {\n  namespace: \"editorModal\",\n  state: {\n    pointData: JSON.parse(pointData),\n    curPoint: null\n  },\n  reducers: {\n    addPointData(state, { payload }) {\n      let pointData = [...state.pointData, payload];\n      overSave(\"userData\", pointData);\n      return {\n        ...state,\n        pointData,\n        curPoint: payload\n      };\n    },\n    modPointData(state, { payload }) {\n      const { id } = payload;\n      const pointData = state.pointData.map(item => {\n        if (item.id === id) {\n          return payload;\n        }\n        return { ...item };\n      });\n      overSave(\"userData\", pointData);\n      return {\n        ...state,\n        pointData,\n        curPoint: payload\n      };\n    },\n    importTplData(state, { payload }) {\n      overSave(\"userData\", payload);\n      return {\n        ...state,\n        pointData: payload,\n        curPoint: null\n      };\n    },\n    copyPointData(state, { payload }) {\n      const { id } = payload;\n      const pointData = [];\n      state.pointData.forEach(item => {\n        pointData.push({ ...item });\n        if (item.id === id) {\n          pointData.push({ ...item, id: uuid(6, 10) });\n        }\n      });\n      overSave(\"userData\", pointData);\n\n      return {\n        ...state,\n        pointData\n      };\n    },\n    delPointData(state, { payload }) {\n      const { id } = payload;\n      const pointData = state.pointData.filter(item => item.id !== id);\n      overSave(\"userData\", pointData);\n      return {\n        ...state,\n        pointData,\n        curPoint: null\n      };\n    },\n    keyboardCopyPointData(state) {\n      if (state.curPoint) {\n        const { id } = state.curPoint;\n        const pointData = [];\n        state.pointData.forEach(item => {\n          pointData.push({ ...item });\n          if (item.id === id) {\n            pointData.push({ ...item, id: uuid(6, 10) });\n          }\n        });\n        overSave(\"userData\", pointData);\n\n        return {\n          ...state,\n          pointData\n        };\n      }\n      return state;\n    },\n    keyboardDelPointData(state) {\n      if (state.curPoint) {\n        const { id } = state.curPoint;\n        const pointData = state.pointData.filter(item => item.id !== id);\n        overSave(\"userData\", pointData);\n        return {\n          ...state,\n          pointData,\n          curPoint: null\n        };\n      }\n      return state;\n    },\n    clearAll(state) {\n      overSave(\"userData\", []);\n      return {\n        ...state,\n        pointData: [],\n        curPoint: null\n      };\n    }\n  },\n  effects: {},\n  subscriptions: {\n    setup({ dispatch, history }) {\n      return history.listen(({ pathname, query }) => {});\n    },\n    keyEvent({ dispatch, state }) {\n      // 复制\n      key(\"⌘+c, ctrl+c\", () => {\n        dispatch({\n          type: \"editorModal/keyboardCopyPointData\"\n        });\n      });\n      // 删除\n      key(\"delete, backspace\", () => {\n        dispatch({\n          type: \"editorModal/keyboardDelPointData\"\n        });\n      });\n    }\n  }\n};\n"
  },
  {
    "path": "src/pages/editor/models/editorPcModel.ts",
    "content": "const pointData = localStorage.getItem(\"userPcData\") || \"[]\";\n\nfunction overSave(name: string, data: any) {\n  localStorage.setItem(name, JSON.stringify(data));\n}\n\nexport default {\n  namespace: \"editorPcModal\",\n  state: {\n    pointData: JSON.parse(pointData),\n    curPoint: null\n  },\n  reducers: {\n    addPointData(state: any, { payload }: any) {\n      let pointData = [...state.pointData, payload];\n      overSave(\"userPcData\", pointData);\n      return {\n        ...state,\n        pointData,\n        curPoint: payload\n      };\n    },\n    modPointData(state: any, { payload }: any) {\n      const { id } = payload;\n      const pointData = state.pointData.map((item: any) => {\n        if (item.id === id) {\n          return payload;\n        }\n        return { ...item };\n      });\n      overSave(\"userPcData\", pointData);\n      return {\n        ...state,\n        pointData,\n        curPoint: payload\n      };\n    },\n    delPointData(state: any, { payload }: any) {\n      const { id } = payload;\n      const pointData = state.pointData.filter((item: any) => item.id !== id);\n      overSave(\"userPcData\", pointData);\n      return {\n        ...state,\n        pointData,\n        curPoint: null\n      };\n    },\n    clearAll(state: any) {\n      overSave(\"userPcData\", []);\n      return {\n        ...state,\n        pointData: [],\n        curPoint: null\n      };\n    }\n  },\n  effects: {}\n};\n"
  },
  {
    "path": "src/pages/editor/preview.tsx",
    "content": "import React, {\n  CSSProperties,\n  memo,\n  useEffect,\n  useMemo,\n  useRef,\n  useState\n} from \"react\";\nimport { ViewRender } from \"@/core\";\nimport domtoimage from \"dom-to-image\";\nimport req from \"@/utils/req\";\nimport { useGetScrollBarWidth } from \"@/utils/tool\";\nimport { LocationDescriptorObject } from \"history-with-query\";\n\nconst isMac = navigator.platform.indexOf(\"Mac\") === 0;\n\ninterface PreviewPageProps {\n  location: LocationDescriptorObject;\n}\ninterface PointDataItem {\n  id: string;\n  item: Record<string, any>;\n  point: Record<string, any>;\n}\n\nconst PreviewPage = memo((props: PreviewPageProps) => {\n  const [pointData, setPointData] = useState(() => {\n    let pointDataStr = localStorage.getItem(\"pointData\");\n    let points;\n\n    try {\n      points = JSON.parse(pointDataStr!) || [];\n    } catch (err) {\n      points = [];\n    }\n    return points.map((item: PointDataItem) => ({\n      ...item,\n      point: { ...item.point, isDraggable: false, isResizable: false }\n    }));\n  });\n\n  const [pageData, setPageData] = useState(() => {\n    let pageConfigStr = localStorage.getItem(\"pageConfig\");\n    let pageConfig;\n\n    try {\n      pageConfig = JSON.parse(pageConfigStr!) || {};\n    } catch (err) {\n      pageConfig = {};\n    }\n    return pageConfig;\n  });\n\n  const vw = window.innerWidth;\n\n  useEffect(() => {\n    const { tid, gf } = props.location.query!;\n    if (!gf && parent.window.location.pathname === \"/preview\") {\n      req\n        .get<any, any>(\"/xxx/xxx/你的自定义接口地址\", { params: { tid } })\n        .then(res => {\n          const { pageConfig, tpl } = res || { pageConfig: {}, tpl: [] };\n          // 设置标题\n          document.title = pageConfig.title || \"H5-Dooring | 强大的H5编辑神器\";\n          // 设置数据源\n          setPointData(\n            tpl.map(item => ({\n              ...item,\n              point: { ...item.point, isDraggable: false, isResizable: false }\n            }))\n          );\n\n          setPageData(pageConfig);\n        })\n        .catch(err => {\n          console.error(err);\n        });\n      return;\n    }\n\n    setTimeout(() => {\n      generateImg((url: string) => {\n        parent.window.getFaceUrl(url);\n      });\n    }, 3000);\n  }, [props.location.query]);\n\n  const ref = useRef<HTMLDivElement>(null);\n  const refImgDom = useRef<HTMLDivElement>(null);\n  const width = useGetScrollBarWidth(ref);\n  const pcStyle: CSSProperties = useMemo(() => {\n    return {\n      width: isMac ? 382 : 375 + width + 1, //小数会有偏差\n      margin: \"55px auto\",\n      height: \"684px\",\n      overflow: \"auto\",\n      position: \"relative\",\n      transform: \"scale(0.7) translateY(-80px)\",\n      backgroundColor: pageData.bgColor\n    };\n  }, [width]);\n\n  const generateImg = (cb: any) => {\n    domtoimage\n      .toBlob(refImgDom.current, {\n        bgcolor: \"#fff\",\n        //  支持跨域截图\n        cacheBust: true\n      })\n      .then(function(blob: Blob) {\n        const reader = new FileReader();\n        reader.onload = function(e) {\n          cb && cb(e?.target?.result);\n        };\n        reader.readAsDataURL(blob);\n      })\n      .catch(function(error: any) {\n        console.error(\"oops, something went wrong!\", error);\n      });\n  };\n\n  return (\n    <>\n      <div\n        ref={ref}\n        style={\n          vw > 800\n            ? pcStyle\n            : {\n                height: \"100vh\",\n                overflow: \"auto\",\n                backgroundColor: pageData.bgColor\n              }\n        }\n      >\n        <div ref={refImgDom}>\n          <ViewRender\n            pageData={pageData}\n            pointData={pointData}\n            width={vw > 800 ? 375 : vw}\n          />\n        </div>\n      </div>\n\n      {vw > 800 ? (\n        <div\n          style={{\n            backgroundImage: \"url('/iphone.png') \",\n            backgroundRepeat: \"no-repeat\",\n            backgroundSize: \"contain\",\n            position: \"absolute\",\n            top: 0,\n            height: \"840px\",\n            width: \"419px\", //375+22+22\n            left: \"50%\",\n            transform: \"translate(-50%,-80px) scale(0.7)\",\n            boxShadow: \"0 4px 30px 0 rgba(4, 59, 85, 0.1)\",\n            borderRadius: \"60px\",\n            pointerEvents: \"none\"\n          }}\n        ></div>\n      ) : null}\n    </>\n  );\n});\n\nexport default PreviewPage;\n"
  },
  {
    "path": "src/pages/editor/services/editorService.js",
    "content": "import req from \"@/utils/req\";\n\nexport function getTemplate(data) {\n  return req(\"/test\", { method: \"GET\", params: data });\n}\n"
  },
  {
    "path": "src/pages/help/index.less",
    "content": ".helpWrap {\n  width: 880px;\n  height: 100vh;\n  overflow: auto;\n  margin: 0 auto;\n  padding-top: 20px;\n  background-color: #fff;\n  h2 {\n    text-align: center;\n  }\n  .helpItem {\n    border-bottom: 1px dashed #ccc;\n    margin-bottom: 20px;\n    h3 {\n      margin-bottom: 10px;\n    }\n    .imgWrap {\n      img {\n        width: 100%;\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/pages/help/index.tsx",
    "content": "import React from \"react\";\nimport A from \"@/assets/1.png\";\nimport B from \"@/assets/2.png\";\nimport C from \"@/assets/3.png\";\nimport D from \"@/assets/4.png\";\nimport E from \"@/assets/5.png\";\nimport F from \"@/assets/6.png\";\nimport styles from \"./index.less\";\n\nconst Help = () => {\n  return (\n    <div className={styles.helpWrap}>\n      <h2>H5-Dooring使用指南</h2>\n      <div className={styles.helpItem}>\n        <h3>1. 首页功能介绍</h3>\n        <div className={styles.imgWrap}>\n          <img src={A} alt=\"H5编辑器, H5制作, H5设计\" />\n        </div>\n      </div>\n      <div className={styles.helpItem}>\n        <h3>2. 客服机器人</h3>\n        <div className={styles.imgWrap}>\n          <img src={B} alt=\"H5编辑器, H5制作, H5设计\" />\n        </div>\n      </div>\n      <div className={styles.helpItem}>\n        <h3>3. 编辑器页面使用说明</h3>\n        <div className={styles.imgWrap}>\n          <img src={C} alt=\"H5编辑器, H5制作, H5设计\" />\n        </div>\n      </div>\n      <div className={styles.helpItem}>\n        <h3>4. 管理后台入口</h3>\n        <div className={styles.imgWrap}>\n          <img src={D} alt=\"H5编辑器, H5制作, H5设计\" />\n        </div>\n      </div>\n      <div className={styles.helpItem}>\n        <h3>5. 页面管理系统使用</h3>\n        <div className={styles.imgWrap}>\n          <img src={E} alt=\"H5编辑器, H5制作, H5设计\" />\n        </div>\n      </div>\n      <div className={styles.helpItem}>\n        <h3>6. 页面数据分析, 数据收集</h3>\n        <div className={styles.imgWrap}>\n          <img src={F} alt=\"H5编辑器, H5制作, H5设计\" />\n        </div>\n      </div>\n    </div>\n  );\n};\n\nexport default Help;\n"
  },
  {
    "path": "src/pages/home/index.less",
    "content": ".homeWrap {\n  display: flex;\n  height: 100%;\n  .leftArea {\n    width: 270px;\n    height: 100%;\n    background-color: #fff;\n    padding: 26px 0 40px;\n    .bottomArea {\n      margin-top: 232px;\n      text-align: center;\n      .groupWrap {\n        .groupItem {\n          margin-bottom: 10px;\n          font-size: 12px;\n          span {\n            margin-left: 3px;\n            display: inline-block;\n            padding: 2px 5px;\n            border: 1px solid #2f54eb;\n            cursor: pointer;\n          }\n        }\n      }\n    }\n  }\n  .contentArea {\n    flex: 1;\n    margin-right: 60px;\n    .logoTip {\n      padding-top: 100px;\n      text-align: center;\n      .logo {\n        margin-bottom: 20px;\n        width: 100%;\n        font-size: 30px;\n        .logoText {\n          font-weight: bold;\n          color: #2f54eb;\n        }\n      }\n    }\n    .operation {\n      margin-top: 30px;\n      text-align: center;\n      .card {\n        display: inline-flex;\n        align-items: center;\n        flex-direction: column;\n        justify-content: center;\n        width: 220px;\n        height: 220px;\n        border-radius: 6px;\n        box-shadow: 0 0 20px rgba(0, 0, 0, 0);\n        font-size: 56px;\n        border: 1px solid #f0f0f0;\n        margin-right: 30px;\n        cursor: pointer;\n        &:hover {\n          box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\n        }\n        div {\n          margin-top: 10px;\n          font-size: 20px;\n        }\n        &:last-child {\n          margin-right: 0;\n        }\n      }\n    }\n    .footer {\n      margin-top: 50px;\n      text-align: center;\n      font-size: 15px;\n      p {\n        font-size: 16px;\n      }\n    }\n  }\n}\n\n.menuWrap,\n.vcWrap {\n  background-color: #fff;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.2);\n  border-radius: 3px;\n  text-align: center;\n  .menuItem {\n    height: 38px;\n    line-height: 38px;\n    text-align: center;\n    cursor: pointer;\n    &:hover {\n      color: #fff;\n      background-color: #2f54eb;\n    }\n  }\n  img {\n    width: 160px;\n  }\n  p {\n    text-align: center;\n    color: #ccc;\n  }\n}\n"
  },
  {
    "path": "src/pages/home/index.tsx",
    "content": "import React from \"react\";\nimport { message, Dropdown, Button } from \"antd\";\nimport { history } from \"umi\";\nimport {\n  MobileOutlined,\n  ConsoleSqlOutlined,\n  CodeOutlined,\n  RobotOutlined,\n  FileImageOutlined\n} from \"@ant-design/icons\";\nimport Zan from \"@/components/Zan\";\nimport styles from \"./index.less\";\n\nconst Home = () => {\n  const handleGo = (type: string) => {\n    if (type === \"H5\") {\n      history.push(\"/editor?tid=123456\");\n    } else if (type === \"Doc\") {\n      window.open(\"http://doc.dooring.vip\");\n    } else if (type === \"mitu\") {\n      window.open(\"https://magic.dooring.vip\");\n    } else {\n      history.push(\"/ide\");\n    }\n  };\n  const menu = (\n    <div className={styles.menuWrap}>\n      <div className={styles.menuItem} onClick={() => handleGo(\"H5\")}>\n        <MobileOutlined /> H5\n      </div>\n      <div className={styles.menuItem} onClick={() => handleGo(\"Doc\")}>\n        <ConsoleSqlOutlined /> 文档编辑{\" \"}\n      </div>\n      <div className={styles.menuItem} onClick={() => handleGo(\"online\")}>\n        <RobotOutlined /> 在线编程{\" \"}\n      </div>\n      <div className={styles.menuItem} onClick={() => handleGo(\"mitu\")}>\n        <FileImageOutlined /> 图片编辑{\" \"}\n      </div>\n    </div>\n  );\n  return (\n    <div className={styles.homeWrap}>\n      <div className={styles.leftArea}>\n        <Dropdown overlay={menu} placement=\"bottomCenter\" arrow visible>\n          <Button type=\"primary\" block size=\"large\">\n            新建页面\n          </Button>\n        </Dropdown>\n        <div className={styles.bottomArea}>\n          <div>\n            <img\n              src=\"http://cdn.dooring.cn/dr/R-C.gif\"\n              alt=\"\"\n              style={{ width: \"180px\", marginBottom: \"20px\" }}\n            />\n          </div>\n          <div className={styles.groupWrap}>\n            <div className={styles.groupItem}>\n              dooring低代码交流群500人 <span>已满</span>\n            </div>\n            <div className={styles.groupItem} style={{ color: \"#2F54EB\" }}>\n              如无法进群, 可加下方作者微信\n              <Dropdown\n                overlay={\n                  <div className={styles.group}>\n                    <img\n                      src=\"https://cdn.dooring.cn/dr/dooring.jpeg\"\n                      style={{ width: \"180px\", marginBottom: \"20px\" }}\n                      alt=\"\"\n                    />\n                  </div>\n                }\n                placement=\"bottomCenter\"\n              >\n                <span>点我</span>\n              </Dropdown>\n            </div>\n            <h3>可视化低代码技术精粹</h3>\n            <div style={{ textAlign: \"center\" }}>\n              <img\n                src=\"http://cdn.dooring.cn/dr%2Fcode1.png\"\n                style={{ width: \"152px\" }}\n                alt=\"\"\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n      <div className={styles.contentArea}>\n        <div className={styles.logoTip}>\n          <div className={styles.logo}>\n            <span className={styles.logoText} title=\"H5-Dooring可视化编辑器\">\n              H5-Dooring\n            </span>\n            可视化编辑器\n          </div>\n          <p\n            style={{\n              display: \"inline-block\",\n              width: \"520px\",\n              fontSize: \"16px\",\n              lineHeight: \"2\"\n            }}\n          >\n            H5-Dooring是一款功能强大，开源免费的H5可视化页面配置解决方案，\n            致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。\n            技术栈以react为主， 后台采用nodejs开发。\n          </p>\n        </div>\n        <div className={styles.operation}>\n          <div className={styles.card} onClick={() => handleGo(\"H5\")}>\n            <MobileOutlined />\n            <div>制作H5页面</div>\n          </div>\n          <div className={styles.card} onClick={() => handleGo(\"online\")}>\n            <CodeOutlined />\n            <div>在线编程</div>\n          </div>\n          <div className={styles.card} onClick={() => handleGo(\"mitu\")}>\n            <ConsoleSqlOutlined />\n            <div>制作图片海报</div>\n          </div>\n        </div>\n        <footer className={styles.footer}>\n          <div style={{ display: \"flex\", justifyContent: \"center\" }}>\n            <div style={{ marginTop: \"30px\" }}>\n              <Zan />\n            </div>\n          </div>\n          <div style={{ display: \"flex\", justifyContent: \"center\" }}>\n            <div\n              style={{ width: \"500px\", marginLeft: \"40px\", marginTop: \"32px\" }}\n            >\n              <span style={{ marginRight: \"24px\" }}>更多产品: </span>\n              <a\n                href=\"https://v6.dooring.vip/beta\"\n                style={{ marginRight: \"24px\" }}\n                target=\"_blank\"\n              >\n                v6.dooring可视化大屏编辑器\n              </a>\n              <a\n                href=\"http://h5.dooring.cn/qt\"\n                style={{ marginRight: \"24px\" }}\n                target=\"_blank\"\n              >\n                在线gif动图制作平台\n              </a>\n            </div>\n          </div>\n        </footer>\n      </div>\n    </div>\n  );\n};\n\nexport default Home;\n"
  },
  {
    "path": "src/pages/ide/index.less",
    "content": ".wrap {\n  display: flex;\n  flex-direction: column;\n  .header {\n    position: relative;\n    z-index: 10;\n    padding-left: 30px;\n    padding-right: 30px;\n    display: flex;\n    align-items: center;\n    height: 42px;\n    background: #fff;\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n    .logoArea {\n      display: contents;\n      width: 300px;\n      font-size: 18px;\n      color: #2f54eb;\n      .backBtn {\n        display: inline-block;\n        padding: 12px 10px;\n        margin-right: 22px;\n        cursor: pointer;\n      }\n      .logo {\n        display: flex;\n        overflow: hidden;\n        border-radius: 3px;\n        vertical-align: middle;\n        img {\n          width: 108px;\n          height: auto;\n          max-width: 100%;\n          max-height: 100%;\n        }\n      }\n      .logoText {\n        margin-left: 12px;\n        margin-top: 5px;\n      }\n    }\n    .operationBar {\n      margin-left: auto;\n    }\n  }\n}\n.contentWrap {\n  display: flex;\n}\n.codeWrap {\n  width: calc(100vw - 440px);\n  min-height: 560px;\n  height: 100%;\n}\n:global(.cm-s-material.CodeMirror) {\n  height: 100%;\n}\n.previewWrap {\n  margin: 0 30px;\n  margin-top: 30px;\n  width: 375px;\n  min-width: 375px;\n  overflow: auto;\n  border: 12px solid #000;\n  border-radius: 20px;\n}\n"
  },
  {
    "path": "src/pages/ide/index.tsx",
    "content": "import React, { useMemo } from \"react\";\nimport { Controlled } from \"react-codemirror2\";\nimport { useState } from \"react\";\nimport { Button, message } from \"antd\";\nimport { saveAs } from \"file-saver\";\nimport Logo from \"@/assets/logo.png\";\nimport styles from \"./index.less\";\nimport { isDev, useGetRect } from \"utils/tool\";\nimport { SaveOutlined } from \"@ant-design/icons\";\nimport { useHotkeys } from \"react-hotkeys-hook\";\nrequire(\"codemirror/mode/xml/xml\");\nrequire(\"codemirror/mode/javascript/javascript\");\n\nconst serverUrl = isDev ? \"http://localhost:3000\" : \"http://localhost:3000\";\n\nlet html = `<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n      html,body {\n        margin: 0;\n        padding: 0;\n      }\n      #root {\n        padding-top: 200px;\n        text-align: center;\n      }\n      p {\n        padding: 0 10px;\n        color: #06c;\n        line-height: 1.8;\n        font-size: 12px;\n      }\n    </style>\n  </head>\n  <body>\n    <div id=\"root\">\n      <img src=\"http://io.nainor.com/uploads/logo_1747374040f.png\" />\n      <p>\n        (H5编辑器)H5-Dooring是一款功能强大，开源免费的H5可视化页面配置解决方案，\n        致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。\n      </p>\n    </div>\n  </body>\n</html>\n`;\n\nexport default function() {\n  const [isUpdate, setUpdate] = useState(false);\n  const [cursor, setCursor] = useState<CodeMirror.Position>({ line: 1, ch: 1 });\n  const [data, setData] = useState<{ data: string }>({ data: html });\n  const handleChange = (\n    _editor: CodeMirror.Editor,\n    _data: CodeMirror.EditorChange,\n    value: string\n  ) => {\n    setData({ data: value });\n  };\n  const fetchPage = useMemo(() => {\n    return (v?: string) => {\n      let res = v ?? data.data;\n      fetch(`${serverUrl}/dooring/render`, { method: \"POST\", body: res }).then(\n        () => {\n          html = res;\n          message.success(\"已保存\");\n          setUpdate(prev => !prev);\n        }\n      );\n    };\n  }, [data]);\n  const downLoadHtml = () => {\n    var file = new File([data.data], `${Date.now()}.html`, {\n      type: \"text/html;charset=utf-8\"\n    });\n    saveAs(file);\n  };\n\n  const onCursorChange = (\n    _editor: CodeMirror.Editor,\n    data1: CodeMirror.Position\n  ) => {\n    const { line, ch } = data1;\n    setCursor({ line, ch });\n  };\n\n  useHotkeys<HTMLDivElement>(\n    \"ctrl+s\",\n    event => {\n      fetchPage();\n      event.preventDefault();\n    },\n    [data]\n  );\n\n  const editHotKey = useMemo(() => {\n    return (editor: CodeMirror.Editor, event: KeyboardEvent) => {\n      if (event.ctrlKey && event.key === \"s\") {\n        fetchPage(editor.getValue());\n        event.preventDefault();\n      }\n    };\n  }, [fetchPage]);\n\n  const CodeMirrorRender = useMemo(() => {\n    return (\n      <Controlled\n        className={styles.codeWrap}\n        value={data.data}\n        options={{\n          mode: \"xml\",\n          theme: \"material\",\n          lineNumbers: true\n        }}\n        onBeforeChange={handleChange}\n        cursor={cursor}\n        onCursor={onCursorChange}\n        onKeyDown={editHotKey}\n      />\n    );\n  }, [cursor, data.data, editHotKey]);\n\n  const rect = useGetRect();\n  const height = useMemo(() => {\n    let res = rect.height - 42 - 1; //-1防止差值产生滚动条\n    return res < 694 ? 694 : res;\n  }, [rect.height]);\n\n  const phoneHeight = useMemo(() => {\n    //let res = rect.height - 42 - 30 - 1; //30是其上边距\n    //return res < 694 ? 694 : res;\n    return 694; //大屏幕过长，维持高度，需要变高另外处理\n  }, []);\n  const iframeHeight = useMemo(() => {\n    return phoneHeight - 30 - 12 - 12; //上边距30 上下padding 12\n  }, [phoneHeight]);\n\n  return (\n    <div className={styles.wrap}>\n      <div className={styles.header}>\n        <div className={styles.logoArea}>\n          <div className={styles.logo} title=\"Dooring\">\n            <a href=\"http://h5.dooring.cn\">\n              <img src={Logo} alt=\"Dooring-强大的h5编辑器\" />\n            </a>\n          </div>\n          <div className={styles.logoText}>| 在线代码编辑器</div>\n        </div>\n        <div className={styles.operationBar}>\n          <Button\n            type=\"primary\"\n            title=\"保存（ctrl+s）\"\n            onClick={() => fetchPage()}\n            style={{ marginRight: \"10px\" }}\n          >\n            <SaveOutlined />\n          </Button>\n          <Button\n            type=\"primary\"\n            onClick={downLoadHtml}\n            style={{ marginRight: \"10px\" }}\n          >\n            下载页面\n          </Button>\n          <Button danger onClick={downLoadHtml}>\n            一键部署\n          </Button>\n        </div>\n      </div>\n      <div\n        className={styles.contentWrap}\n        style={{ height: `${height}px`, position: \"relative\" }}\n      >\n        <div\n          className={styles.codeWrap}\n          style={{ height: `${height}px`, position: \"relative\" }}\n        >\n          {CodeMirrorRender}\n        </div>\n\n        <div\n          className={styles.previewWrap}\n          style={{ height: `${phoneHeight}px` }}\n        >\n          <iframe\n            title=\"preview\"\n            src={`${serverUrl}/html?flag=${isUpdate}`}\n            style={{\n              width: \"100%\",\n              height: `${iframeHeight}px`,\n              margin: 0,\n              padding: 0,\n              border: \"none\"\n            }}\n          ></iframe>\n        </div>\n      </div>\n    </div>\n  );\n}\n"
  },
  {
    "path": "src/pages/login/index.less",
    "content": ".loginWrap {\n  width: 100vw;\n  height: 100vh;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  flex-direction: column;\n  background: #f0f0f0 url(../../assets/login_bg.png) center center;\n  background-size: cover;\n  .tit {\n    font-size: 35px;\n    text-align: center;\n    padding-bottom: 20px;\n    margin-bottom: 36px;\n    border-bottom: 1px solid #f0f0f0;\n  }\n  .formWrap {\n    margin-left: auto;\n    margin-right: auto;\n    width: 520px;\n    padding: 22px 0 20px;\n    background-color: #fff;\n    box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);\n    border-radius: 6px;\n  }\n}\n"
  },
  {
    "path": "src/pages/login/index.tsx",
    "content": "import { Form, Input, Button, Popover } from \"antd\";\nimport React from \"react\";\nimport req from \"@/utils/req\";\nimport CodeImg from \"@/assets/code.png\";\nimport { history } from \"umi\";\nimport styles from \"./index.less\";\n\ninterface FormValues {\n  n: string;\n  co: string;\n}\n\nconst layout = {\n  labelCol: { span: 6 },\n  wrapperCol: { span: 16 }\n};\n\nconst tailLayout = {\n  wrapperCol: { offset: 6, span: 16 }\n};\n\nconst content = (\n  <>\n    <div style={{ textAlign: \"center\" }}>\n      <img style={{ width: \"180px\" }} src={CodeImg} alt=\"趣谈前端-徐小夕\" />\n    </div>\n    <p style={{ width: \"240px\" }}>\n      扫描上方二维码，关注【趣谈前端】公众号，回复\"登录码\" 即可获取\n    </p>\n  </>\n);\n\nconst Login = () => {\n  const onFinish = (values: FormValues) => {\n    const { n, co } = values;\n    req.post(\"/vip/check\", { n, co }).then((res: any) => {\n      localStorage.setItem(\"nickname\", res.n);\n      localStorage.setItem(\"h5\", JSON.stringify(res.h5));\n      history.push(\"/\");\n    });\n  };\n\n  return (\n    <div className={styles.loginWrap}>\n      <Form\n        {...layout}\n        name=\"login\"\n        className={styles.formWrap}\n        initialValues={{ remember: true }}\n        onFinish={onFinish}\n      >\n        <div className={styles.tit}>\n          Dooring开放平台\n          <span style={{ marginLeft: \"20px\", fontSize: \"18px\", color: \"#06c\" }}>\n            登录\n          </span>\n        </div>\n        <Form.Item\n          label=\"用户名\"\n          name=\"n\"\n          rules={[{ required: true, message: \"请输入用户名!\" }]}\n        >\n          <Input />\n        </Form.Item>\n\n        <Form.Item\n          label=\"密码\"\n          name=\"co\"\n          rules={[{ required: true, message: \"请输入密码!\" }]}\n        >\n          <Input.Password />\n        </Form.Item>\n\n        <div style={{ margin: \"-16px 0 12px 116px\" }}>\n          <Popover placement=\"topLeft\" content={content} trigger=\"click\">\n            <Button type=\"link\">如何获取登录码？</Button>\n          </Popover>\n        </div>\n\n        <Form.Item {...tailLayout}>\n          <Button type=\"primary\" htmlType=\"submit\" block>\n            登录\n          </Button>\n        </Form.Item>\n        <div className={styles.safeWrap}>\n          登录后即代表您已经遵循\n          <Button type=\"link\">《Dooring平台使用安全声明》</Button>\n        </div>\n      </Form>\n    </div>\n  );\n};\n\nexport default Login;\n"
  },
  {
    "path": "src/pages/mobileTip.tsx",
    "content": "import React from \"react\";\nimport { Result } from \"antd\";\n\nfunction MobileTip() {\n  return (\n    <div>\n      <Result\n        status=\"500\"\n        title=\"Dooring热情❤️提示\"\n        subTitle=\"你好，客官，请在PC端使用Dooring哦～\"\n      />\n    </div>\n  );\n}\n\nexport default MobileTip;\n"
  },
  {
    "path": "src/pages/user/base.less",
    "content": ".wrap {\n  display: flex;\n  flex-direction: column;\n  .header {\n    position: relative;\n    z-index: 10;\n    padding-left: 38px;\n    padding-right: 30px;\n    display: flex;\n    align-items: center;\n    height: 40px;\n    background: #fff;\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n    .logoArea {\n      display: contents;\n      width: 300px;\n      font-size: 18px;\n      color: #2f54eb;\n      .backBtn {\n        display: inline-block;\n        padding: 12px 10px;\n        margin-right: 22px;\n        cursor: pointer;\n      }\n      .logo {\n        display: flex;\n        overflow: hidden;\n        border-radius: 3px;\n        vertical-align: middle;\n        img {\n          display: block;\n          width: 108px;\n          height: auto;\n          max-width: 100%;\n          max-height: 100%;\n        }\n      }\n      .logoText {\n        margin-left: 12px;\n        margin-top: 5px;\n      }\n    }\n    .operationBar {\n      margin-left: auto;\n    }\n  }\n}\n.contentWrap {\n  display: flex;\n}\n.codeWrap {\n  width: calc(100% - 438px);\n  min-height: 560px;\n  height: 100%;\n}\n:global(.cm-s-material.CodeMirror) {\n  height: 100%;\n}\n.previewWrap {\n  margin: 30px 30px 0 30px;\n  width: 375px;\n  min-width: 375px;\n  overflow: auto;\n  border: 12px solid #000;\n  border-radius: 20px;\n}\n"
  },
  {
    "path": "src/pages/user/index.less",
    "content": ".wrap {\n  display: flex;\n  flex-direction: column;\n  .header {\n    position: relative;\n    z-index: 10;\n    padding-left: 38px;\n    padding-right: 30px;\n    display: flex;\n    align-items: center;\n    height: 40px;\n    background: #fff;\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n    .logoArea {\n      display: contents;\n      width: 300px;\n      font-size: 18px;\n      color: #2f54eb;\n      .backBtn {\n        display: inline-block;\n        padding: 12px 10px;\n        margin-right: 22px;\n        cursor: pointer;\n      }\n      .logo {\n        display: flex;\n        overflow: hidden;\n        border-radius: 3px;\n        vertical-align: middle;\n        img {\n          display: block;\n          width: 108px;\n          height: auto;\n          max-width: 100%;\n          max-height: 100%;\n        }\n      }\n      .logoText {\n        margin-left: 12px;\n        margin-top: 5px;\n      }\n    }\n    .operationBar {\n      margin-left: auto;\n    }\n  }\n}\n.contentWrap {\n  display: flex;\n}\n.codeWrap {\n  width: calc(100% - 438px);\n  min-height: 560px;\n  height: 100%;\n}\n:global(.cm-s-material.CodeMirror) {\n  height: 100%;\n}\n.previewWrap {\n  margin: 30px 30px 0 30px;\n  width: 375px;\n  min-width: 375px;\n  overflow: auto;\n  border: 12px solid #000;\n  border-radius: 20px;\n}\n\n\n\n.user-wrap {\n  display: flex;\n  flex-direction: column;\n  .header {\n    position: relative;\n    z-index: 10;\n    padding-left: 30px;\n    padding-right: 30px;\n    display: flex;\n    align-items: center;\n    height: 42px;\n    background: #fff;\n    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);\n    .logoArea {\n      display: contents;\n      width: 300px;\n      font-size: 18px;\n      color: #2f54eb;\n      .backBtn {\n        display: inline-block;\n        padding: 12px 10px;\n        margin-right: 22px;\n        cursor: pointer;\n      }\n      .logo {\n        display: flex;\n        overflow: hidden;\n        border-radius: 3px;\n        vertical-align: middle;\n        img {\n          width: 108px;\n          height: auto;\n          max-width: 100%;\n          max-height: 100%;\n        }\n      }\n      .logoText {\n        margin-left: 12px;\n        margin-top: 5px;\n      }\n    }\n    .operationBar {\n      margin-left: auto;\n    }\n  }\n}\n"
  },
  {
    "path": "src/pages/user/index.tsx",
    "content": "import React, { useMemo, useState, useCallback, useRef, useEffect } from 'react';\nimport { Controlled as CodeMirrorControlled } from 'react-codemirror2';\nimport { Button, message } from 'antd';\nimport { saveAs } from 'file-saver';\nimport Logo from '@/assets/logo.png';\nimport { isDev, useGetRect } from 'utils/tool';\nimport { SaveOutlined, DownloadOutlined, RocketOutlined } from '@ant-design/icons';\nimport { useHotkeys } from 'react-hotkeys-hook';\n\n// 导入样式\nimport { \n  wrapStyle, \n  headerStyle, \n  logoAreaStyle, \n  logoStyle, \n  logoImgStyle, \n  logoTextStyle, \n  operationBarStyle, \n  contentWrapStyle, \n  codeWrapStyle, \n  previewWrapStyle, \n  iframeStyle \n} from './styles';\n\n// 导入CodeMirror样式和模式\nimport 'codemirror/lib/codemirror.css';\nimport 'codemirror/theme/material.css';\nimport 'codemirror/mode/xml/xml';\nimport 'codemirror/mode/javascript/javascript';\n\n// 定义服务器URL\nconst serverUrl = isDev ? 'http://localhost:3000' : 'http://localhost:3000';\n\n// 默认HTML内容\nconst defaultHtml = `<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"UTF-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <title>Document</title>\n    <style>\n      html,body {\n        margin: 0;\n        padding: 0;\n      }\n      #root {\n        padding-top: 200px;\n        text-align: center;\n      }\n      p {\n        padding: 0 10px;\n        color: #06c;\n        line-height: 1.8;\n        font-size: 12px;\n      }\n    </style>\n  </head>\n  <body>\n    <div id=\"root\">\n      <img src=\"http://io.nainor.com/uploads/logo_1747374040f.png\" />\n      <p>\n        (H5编辑器)H5-Dooring是一款功能强大，开源免费的H5可视化页面配置解决方案，\n        致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。\n      </p>\n    </div>\n  </body>\n</html>`;\n\n/**\n * H5-Dooring在线代码编辑器组件\n */\nexport default function CodeEditor() {\n  // 状态管理\n  const [htmlContent, setHtmlContent] = useState<string>(defaultHtml);\n  const [cursorPosition, setCursorPosition] = useState<{ line: number; ch: number }>({ line: 1, ch: 1 });\n  const [isUpdated, setIsUpdated] = useState<boolean>(false);\n  const editorRef = useRef<CodeMirror.Editor | null>(null);\n\n  // 获取窗口尺寸\n  const rect = useGetRect();\n\n  // 计算高度\n  const contentHeight = useMemo(() => {\n    const baseHeight = rect.height - 42 - 1; // 减去顶部高度和滚动条防溢出\n    return Math.max(baseHeight, 694); // 最小高度为 694\n  }, [rect.height]);\n\n  const phoneHeight = 694; // 固定高度，避免大屏幕问题\n  const iframeHeight = phoneHeight - 30 - 24; // 上边距 30，上下 padding 各 12\n\n  /**\n   * 保存页面到服务器\n   * @param content - 可选的HTML内容，如果未提供则使用当前内容\n   */\n  const savePage = useCallback(async (content?: string) => {\n    try {\n      const contentToSave = content ?? htmlContent;\n      const response = await fetch(`${serverUrl}/dooring/render`, {\n        method: 'POST',\n        headers: {\n          'Content-Type': 'text/html;charset=utf-8',\n        },\n        body: contentToSave,\n      });\n\n      if (!response.ok) {\n        throw new Error(`HTTP error! Status: ${response.status}`);\n      }\n\n      message.success('已保存');\n      setIsUpdated(prev => !prev); // 触发重新渲染\n    } catch (error) {\n      console.error('保存失败:', error);\n      message.error('保存失败，请稍后重试');\n    }\n  }, [htmlContent]);\n\n  /**\n   * 下载HTML文件\n   */\n  const downloadHtml = useCallback(() => {\n    try {\n      const file = new File([htmlContent], `${Date.now()}.html`, {\n        type: 'text/html;charset=utf-8',\n      });\n      saveAs(file);\n      message.success('HTML文件下载成功');\n    } catch (error) {\n      console.error('下载HTML失败:', error);\n      message.error('下载HTML失败，请稍后重试');\n    }\n  }, [htmlContent]);\n\n  /**\n   * 下载CSS文件（从HTML内容中提取CSS）\n   */\n  const downloadCss = useCallback(() => {\n    try {\n      // 从HTML中提取CSS内容\n      const styleMatch = htmlContent.match(/<style[^>]*>([\\s\\S]*?)<\\/style>/i);\n      const cssContent = styleMatch ? styleMatch[1] : '';\n      \n      const file = new File([cssContent], `${Date.now()}.css`, {\n        type: 'text/css;charset=utf-8',\n      });\n      saveAs(file);\n      message.success('CSS文件下载成功');\n    } catch (error) {\n      console.error('下载CSS失败:', error);\n      message.error('下载CSS失败，请稍后重试');\n    }\n  }, [htmlContent]);\n\n  /**\n   * 一键部署功能\n   */\n  const deployWebsite = useCallback(() => {\n    try {\n      // 这里应该是实际的部署逻辑\n      message.success('部署功能开发中...');\n    } catch (error) {\n      console.error('部署失败:', error);\n      message.error('部署失败，请稍后重试');\n    }\n  }, []);\n\n  // 快捷键保存\n  useHotkeys(\n    'ctrl+s',\n    (event) => {\n      savePage();\n      event.preventDefault();\n    },\n    [savePage]\n  );\n\n  /**\n   * 处理代码变化\n   */\n  const handleCodeChange = useCallback(\n    (_editor: CodeMirror.Editor, _data: CodeMirror.EditorChange, value: string) => {\n      setHtmlContent(value);\n    },\n    []\n  );\n\n  /**\n   * 处理光标位置变化\n   */\n  const handleCursorChange = useCallback(\n    (_editor: CodeMirror.Editor, position: CodeMirror.Position) => {\n      setCursorPosition(position);\n    },\n    []\n  );\n\n  /**\n   * 处理编辑器按键事件\n   */\n  const handleEditorKeyDown = useCallback(\n    (editor: CodeMirror.Editor, event: KeyboardEvent) => {\n      if (event.ctrlKey && event.key === 's') {\n        savePage(editor.getValue());\n        event.preventDefault();\n      }\n    },\n    [savePage]\n  );\n\n  /**\n   * 处理编辑器挂载\n   */\n  const handleEditorDidMount = useCallback((editor: CodeMirror.Editor) => {\n    editorRef.current = editor;\n  }, []);\n\n  // CodeMirror 编辑器配置\n  const codeMirrorOptions = useMemo(() => ({\n    mode: 'xml',\n    theme: 'material',\n    lineNumbers: true,\n    lineWrapping: true,\n    autoCloseBrackets: true,\n    matchBrackets: true,\n    indentUnit: 2,\n    tabSize: 2,\n    indentWithTabs: false,\n  }), []);\n\n  return (\n    <div style={wrapStyle}>\n      {/* Header */}\n      <div style={headerStyle}>\n        <div style={logoAreaStyle}>\n          <div style={logoStyle} title=\"Dooring\">\n            <a href=\"http://h5.dooring.cn\" target=\"_blank\" rel=\"noopener noreferrer\">\n              <img src={Logo} alt=\"Dooring-强大的h5编辑器\" style={logoImgStyle} />\n            </a>\n          </div>\n          <div style={logoTextStyle}>| 在线代码编辑器</div>\n        </div>\n        <div style={operationBarStyle}>\n          <Button \n            type=\"primary\" \n            icon={<SaveOutlined />}\n            title=\"保存（ctrl+s）\" \n            onClick={savePage} \n            style={{ marginRight: '10px' }}\n          >\n            保存\n          </Button>\n          <Button \n            type=\"primary\" \n            icon={<DownloadOutlined />}\n            onClick={downloadHtml} \n            style={{ marginRight: '10px' }}\n          >\n            下载HTML\n          </Button>\n          <Button \n            type=\"default\" \n            icon={<DownloadOutlined />}\n            onClick={downloadCss} \n            style={{ marginRight: '10px' }}\n          >\n            下载CSS\n          </Button>\n          <Button \n            type=\"primary\" \n            danger \n            icon={<RocketOutlined />}\n            onClick={deployWebsite}\n          >\n            一键部署\n          </Button>\n        </div>\n      </div>\n\n      {/* 内容区域 */}\n      <div style={contentWrapStyle(contentHeight)}>\n        {/* 代码编辑器 */}\n        <div style={codeWrapStyle(contentHeight)}>\n          <CodeMirrorControlled\n            value={htmlContent}\n            options={codeMirrorOptions}\n            onBeforeChange={handleCodeChange}\n            onCursor={handleCursorChange}\n            onKeyDown={handleEditorKeyDown}\n            onReady={handleEditorDidMount}\n          />\n        </div>\n\n        {/* 预览区域 */}\n        <div style={previewWrapStyle(phoneHeight)}>\n          <iframe\n            title=\"H5预览\"\n            src={`${serverUrl}/html?flag=${isUpdated}`}\n            style={iframeStyle(iframeHeight)}\n            sandbox=\"allow-same-origin allow-scripts\"\n            loading=\"lazy\"\n          />\n        </div>\n      </div>\n    </div>\n  );\n}\n\n// 声明CodeMirror全局类型\ndeclare global {\n  namespace CodeMirror {\n    interface Editor {\n      getValue(): string;\n    }\n    interface EditorChange {\n      from: Position;\n      to: Position;\n      text: string[];\n      removed: string[];\n      origin: string | undefined;\n    }\n    interface Position {\n      line: number;\n      ch: number;\n    }\n  }\n}\n"
  },
  {
    "path": "src/typings.d.ts",
    "content": "/*\n * @Description:\n * @Version: 2.0\n * @Autor: dragon\n * @Date: 2020-10-13 14:55:47\n * @LastEditors: dragon\n * @LastEditTime: 2020-10-15 12:21:41\n */\ndeclare module \"*.css\";\ndeclare module \"*.png\";\ndeclare module \"*.svg\";\ndeclare module \"*.less\";\n\ninterface Window {\n  currentCates: null | Array<string>;\n  opera: string; // note (@livs-ops): fix property 'opera' does not exist on type 'Window & typeof globalThis'\n}\n\ndeclare module \"dom-to-image\" {\n  const domtoimage: any;\n  export default domtoimage;\n}\n\ndeclare var getFaceUrl: any;\n"
  },
  {
    "path": "src/utils/req.ts",
    "content": "import axios from \"axios\";\nimport { message } from \"antd\";\n\nconst isDev = process.env.NODE_ENV === \"development\";\n\nconst instance = axios.create({\n  // 服务器地址需要自己配置和开发\n  baseURL: isDev ? \"http://localhost:3000/xxx\" : \"http://xxxxx\",\n  timeout: 10000,\n  withCredentials: true\n});\n\n// 添加请求拦截器\ninstance.interceptors.request.use(\n  function(config) {\n    // 在发送请求之前做些什么\n    config.headers = {\n      \"x-requested-with\": \"\",\n      authorization: \"\"\n    };\n    return config;\n  },\n  function(error) {\n    // 对请求错误做些什么\n    return Promise.reject(error);\n  }\n);\n\n// 添加响应拦截器\ninstance.interceptors.response.use(\n  function(response) {\n    // 对响应数据做点什么\n    // 你的业务数据\n    return response;\n  },\n  function(error) {\n    // 对响应错误做点什么\n    const { response } = error;\n    if (response) {\n      if (response.status === 404) {\n        message.error(\"请求资源未发现\");\n      } else if (response.status === 403) {\n        message.error(response.data.msg, () => {\n          window.location.href = \"/admin/login\";\n        });\n      } else {\n        message.error(response.data.msg);\n      }\n    }\n\n    return Promise.reject(error);\n  }\n);\n\nexport default instance;\n"
  },
  {
    "path": "src/utils/tool.ts",
    "content": "import { RefObject, useEffect, useLayoutEffect, useState } from \"react\";\nimport { RGBColor } from \"react-color\";\n\n// 生成uuid\nfunction uuid(len: number, radix: number) {\n  let chars = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\".split(\n    \"\"\n  );\n  let uuid = [],\n    i;\n  radix = radix || chars.length;\n\n  if (len) {\n    for (i = 0; i < len; i++) uuid[i] = chars[0 | (Math.random() * radix)];\n  } else {\n    let r;\n    uuid[8] = uuid[13] = uuid[18] = uuid[23] = \"-\";\n    uuid[14] = \"4\";\n\n    for (i = 0; i < 36; i++) {\n      if (!uuid[i]) {\n        r = 0 | (Math.random() * 16);\n        uuid[i] = chars[i === 19 ? (r & 0x3) | 0x8 : r];\n      }\n    }\n  }\n\n  return uuid.join(\"\");\n}\n\n// 将rgba字符串对象转化为rgba对象\nfunction rgba2Obj(rgba = \"\") {\n  let reg = /rgba\\((\\d+),(\\d+),(\\d+),(\\d+)\\)/g;\n  let rgbaObj: RGBColor = { r: 0, g: 0, b: 0, a: 0 };\n\n  rgba.replace(reg, (_m, r, g, b, a) => {\n    rgbaObj = { r, g, b, a };\n    return rgba;\n  });\n  return rgbaObj;\n}\n\nexport { uuid, rgba2Obj };\n\nexport const isDev = process.env.NODE_ENV === \"development\";\n\nexport function useGetRect() {\n  const [rect, setRect] = useState({ width: 0, height: 0 });\n  useEffect(() => {\n    setRect({\n      width: window.innerWidth,\n      height: window.innerHeight\n    });\n  }, []);\n  return rect;\n}\n\nexport function useGetScrollBarWidth(ref: RefObject<HTMLElement>) {\n  const [width, setWidth] = useState(0);\n  useLayoutEffect(() => {\n    if (ref.current) {\n      const diff = ref.current.offsetWidth - ref.current.clientWidth;\n      setWidth(diff);\n    }\n  }, [ref]);\n  return width;\n}\n\nexport function useAnimation(state: boolean, delay: number) {\n  const [display, setDisplay] = useState(false);\n  useEffect(() => {\n    let timer: number;\n    if (state && display === true) {\n      setDisplay(false);\n    } else if (!state && display === false) {\n      timer = window.setTimeout(() => {\n        setDisplay(true);\n      }, delay);\n    }\n    return () => {\n      window.clearTimeout(timer);\n    };\n  }, [delay, display, state]);\n  return [display, setDisplay];\n}\n\nexport function unParams(params = \"?a=1&b=2&c=3\") {\n  let obj: any = {};\n  params &&\n    // eslint-disable-next-line no-useless-escape\n    params.replace(/((\\w*)=([\\.a-z0-9A-Z]*)?)?/g, (m, a, b, c): any => {\n      if (b || c) obj[b] = c;\n    });\n  return obj;\n}\n\nexport function throttle(fn: Function, delay: number) {\n  let flag = true;\n  return (...args: any) => {\n    if (flag) {\n      flag = false;\n      fn(...args);\n      setTimeout(() => {\n        flag = true;\n      }, delay);\n    }\n  };\n}\n\nexport function formatTime(fmt: string, dateObj: any) {\n  const date = dateObj || new Date();\n  const o: any = {\n    \"M+\": date.getMonth() + 1, //月份\n    \"d+\": date.getDate(), //日\n    \"h+\": date.getHours(), //小时\n    \"m+\": date.getMinutes(), //分\n    \"s+\": date.getSeconds(), //秒\n    \"q+\": Math.floor((date.getMonth() + 3) / 3), //季度\n    S: date.getMilliseconds() //毫秒\n  };\n  if (/(y+)/.test(fmt)) {\n    fmt = fmt.replace(\n      RegExp.$1,\n      (date.getFullYear() + \"\").substr(4 - RegExp.$1.length)\n    );\n  }\n  for (var k in o) {\n    if (new RegExp(\"(\" + k + \")\").test(fmt)) {\n      fmt = fmt.replace(\n        RegExp.$1,\n        RegExp.$1.length == 1 ? o[k] : (\"00\" + o[k]).substr((\"\" + o[k]).length)\n      );\n    }\n  }\n  return fmt;\n}\n\n// note (@livs-ops): 检测当前浏览器模式\nexport function detectMobileBrowser(browserNavigatorMetaInfo: string): boolean {\n  return (\n    /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(\n      browserNavigatorMetaInfo\n    ) ||\n    /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\\-(n|u)|c55\\/|capi|ccwa|cdm\\-|cell|chtm|cldc|cmd\\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\\-s|devi|dica|dmob|do(c|p)o|ds(12|\\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\\-|_)|g1 u|g560|gene|gf\\-5|g\\-mo|go(\\.w|od)|gr(ad|un)|haie|hcit|hd\\-(m|p|t)|hei\\-|hi(pt|ta)|hp( i|ip)|hs\\-c|ht(c(\\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\\-(20|go|ma)|i230|iac( |\\-|\\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\\/)|klon|kpt |kwc\\-|kyo(c|k)|le(no|xi)|lg( g|\\/(k|l|u)|50|54|\\-[a-w])|libw|lynx|m1\\-w|m3ga|m50\\/|ma(te|ui|xo)|mc(01|21|ca)|m\\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\\-2|po(ck|rt|se)|prox|psio|pt\\-g|qa\\-a|qc(07|12|21|32|60|\\-[2-7]|i\\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\\-|oo|p\\-)|sdk\\/|se(c(\\-|0|1)|47|mc|nd|ri)|sgh\\-|shar|sie(\\-|m)|sk\\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\\-|v\\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\\-|tdg\\-|tel(i|m)|tim\\-|t\\-mo|to(pl|sh)|ts(70|m\\-|m3|m5)|tx\\-9|up(\\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\\-|your|zeto|zte\\-/i.test(\n      browserNavigatorMetaInfo.substr(0, 4)\n    )\n  );\n}\n\n// note (@livs-ops): 获取浏览器元信息\nexport function getBrowserNavigatorMetaInfo(): string {\n  return window.navigator.userAgent || window.navigator.vendor || window.opera;\n}\n\nexport const serverUrl = isDev ? \"http://192.16x.x.x:3000\" : \"你的服务器地址\";\n\n// 宽度适配器\nexport const _gaw = (w: number) => {\n  const vw = window.innerWidth > 800 ? 375 : window.innerWidth;\n  return (vw / 375) * w;\n};\n"
  },
  {
    "path": "src/video-react.d.ts",
    "content": "declare module \"video-react\" {\n  type PreloadType = \"auto\" | \"metadata\" | \"none\";\n\n  interface PlayerPropsType {\n    children?: any;\n\n    width?: string | number;\n    height?: string | number;\n    fluid?: boolean; // = true;\n    muted?: boolean; // = false;\n    playsInline?: boolean; // = false;\n    aspectRatio?: string; // = 'auto';\n    className?: string;\n    videoId?: string;\n\n    startTime?: number;\n    loop?: boolean;\n    autoPlay?: boolean;\n    src?: string;\n    poster?: string;\n    preload?: PreloadType; // = 'auto';\n\n    onLoadStart?: ReactEventHandler;\n    onWaiting?: ReactEventHandler;\n    onCanPlay?: ReactEventHandler;\n    onCanPlayThrough?: ReactEventHandler;\n    onPlaying?: ReactEventHandler;\n    onEnded?: ReactEventHandler;\n    onSeeking?: ReactEventHandler;\n    onSeeked?: ReactEventHandler;\n    onPlay?: ReactEventHandler;\n    onPause?: ReactEventHandler;\n    onProgress?: ReactEventHandler;\n    onDurationChange?: ReactEventHandler;\n    onError?: ReactEventHandler;\n    onSuspend?: ReactEventHandler;\n    onAbort?: ReactEventHandler;\n    onEmptied?: ReactEventHandler;\n    onStalled?: ReactEventHandler;\n    onLoadedMetadata?: ReactEventHandler;\n    onLoadedData?: ReactEventHandler;\n    onTimeUpdate?: ReactEventHandler;\n    onRateChange?: ReactEventHandler;\n    onVolumeChange?: ReactEventHandler;\n\n    store?: object;\n  }\n\n  class Player extends React.Component<PlayerPropsType> {\n    readonly video: Video;\n\n    getDefaultChildren(originalChildren): Array<React.Component>;\n\n    getChildren(props): Array<React.Component>;\n\n    setWidthOrHeight(style: object, name: string, value: string | number);\n\n    getStyle(): object;\n\n    // get redux state\n    // { player, operation }\n    getState(): object;\n\n    // get playback rate\n    get playbackRate(): number;\n\n    // set playback rate\n    // speed of video\n    set playbackRate(rate: number);\n\n    get muted(): boolean;\n\n    set muted(val: boolean);\n\n    get volume(): number;\n\n    set volume(val: number);\n\n    // video width\n    get videoWidth(): number;\n\n    // video height\n    get videoHeight(): number;\n\n    // play the video\n    play();\n\n    // pause the video\n    pause();\n\n    // Change the video source and re-load the video:\n    load();\n\n    // Add a new text track to the video\n    addTextTrack(\n      kind: TextTrackKind,\n      label?: string,\n      language?: string\n    ): TextTrack;\n\n    // Check if your browser can play different types of video:\n    canPlayType(type: string): CanPlayTypeResult;\n\n    // seek video by time\n    seek(time: number);\n\n    // jump forward x seconds\n    forward(seconds: number);\n\n    // jump back x seconds\n    replay(seconds: number);\n\n    // enter or exist full screen\n    toggleFullscreen();\n\n    // subscribe to player state change\n    subscribeToStateChange(listener: (state: any, prevState: any) => void);\n  }\n\n  interface VideoPropsType {\n    actions?: object;\n    player?: object;\n    children?: any;\n    startTime?: number;\n    loop?: boolean;\n    muted?: boolean;\n    autoPlay?: boolean;\n    playsInline?: boolean;\n    src?: string;\n    poster?: string;\n    className?: string;\n    preload?: PreloadType;\n    crossOrigin?: string;\n\n    onLoadStart?: ReactEventHandler;\n    onWaiting?: ReactEventHandler;\n    onCanPlay?: ReactEventHandler;\n    onCanPlayThrough?: ReactEventHandler;\n    onPlaying?: ReactEventHandler;\n    onEnded?: ReactEventHandler;\n    onSeeking?: ReactEventHandler;\n    onSeeked?: ReactEventHandler;\n    onPlay?: ReactEventHandler;\n    onPause?: ReactEventHandler;\n    onProgress?: ReactEventHandler;\n    onDurationChange?: ReactEventHandler;\n    onError?: ReactEventHandler;\n    onSuspend?: ReactEventHandler;\n    onAbort?: ReactEventHandler;\n    onEmptied?: ReactEventHandler;\n    onStalled?: ReactEventHandler;\n    onLoadedMetadata?: ReactEventHandler;\n    onLoadedData?: ReactEventHandler;\n    onTimeUpdate?: ReactEventHandler;\n    onRateChange?: ReactEventHandler;\n    onVolumeChange?: ReactEventHandler;\n    onResize?: ReactEventHandler;\n  }\n\n  class Video extends React.Component<VideoPropsType> {\n    // get all video properties\n    getProperties(): any;\n\n    // get playback rate\n    get playbackRate(): number;\n\n    // set playback rate\n    // speed of video\n    set playbackRate(rate: number);\n\n    get muted(): boolean;\n\n    set muted(val: boolean);\n\n    get volume(): number;\n\n    set volume(val: number);\n\n    // video width\n    get videoWidth(): number;\n\n    // video height\n    get videoHeight(): number;\n\n    // play the video\n    play();\n\n    // pause the video\n    pause();\n\n    // Change the video source and re-load the video:\n    load();\n\n    // Add a new text track to the video\n    addTextTrack(\n      kind: TextTrackKind,\n      label?: string,\n      language?: string\n    ): TextTrack;\n\n    // Check if your browser can play different types of video:\n    canPlayType(type: string): CanPlayTypeResult;\n\n    // toggle play\n    togglePlay();\n\n    // seek video by time\n    seek(time: number);\n\n    // jump forward x seconds\n    forward(seconds: number);\n\n    // jump back x seconds\n    replay(seconds: number);\n\n    // enter or exist full screen\n    toggleFullscreen();\n  }\n\n  interface BigPlayButtonPropsType {\n    actions?: object;\n    player?: object;\n    position?: \"center\" | \"left-top\"; // = 'left';\n    className?: string;\n  }\n\n  class BigPlayButton extends React.Component<BigPlayButtonPropsType> {}\n\n  interface LoadingSpinnerPropsType {\n    player?: object;\n    className?: string;\n  }\n  class LoadingSpinner extends React.Component<LoadingSpinnerPropsType> {}\n\n  interface PosterImagePropsType {\n    poster?: string;\n    player?: object;\n    actions?: object;\n    className?: string;\n  }\n  class PosterImage extends React.Component<PosterImagePropsType> {}\n\n  interface BezelPropsType {\n    manager?: object;\n    className?: string;\n  }\n  class Bezel extends React.Component<BezelPropsType> {}\n\n  interface ShortcutPropsType {\n    clickable?: boolean; // = true;\n    dblclickable?: boolean; // = true;\n    manager?: object;\n    actions?: object;\n    player?: object;\n    shortcuts?: Array<any>;\n  }\n  class Shortcut extends React.Component<ShortcutPropsType> {}\n\n  interface ControlBarPropsType {\n    children?: any;\n    autoHide?: boolean; // = true;\n    autoHideTime?: number; // used in Player\n    disableDefaultControls?: boolean;\n    disableCompletely?: boolean; // = false;\n    className?: string;\n  }\n  class ControlBar extends React.Component<ControlBarPropsType> {}\n\n  interface PlayTogglePropsType {\n    actions?: object;\n    player?: object;\n    className?: string;\n  }\n  class PlayToggle extends React.Component<PlayTogglePropsType> {}\n\n  type ForwardSecondsType = 5 | 10 | 30;\n  interface ForwardControlPropsType {\n    actions?: object;\n    className?: string;\n    seconds?: ForwardSecondsType; // = 10;\n  }\n  class ForwardControl extends React.Component<ForwardControlPropsType> {}\n\n  interface ReplayControlPropsType {\n    actions?: object;\n    className?: string;\n    seconds?: ForwardSecondsType; // = 10;\n  }\n  class ReplayControl extends React.Component<ReplayControlPropsType> {}\n\n  interface FullscreenTogglePropsType {\n    actions?: object;\n    player?: object;\n    className?: string;\n  }\n  class FullscreenToggle extends React.Component<FullscreenTogglePropsType> {}\n\n  interface ProgressControlPropsType {\n    player?: object;\n    className?: string;\n  }\n  class ProgressControl extends React.Component<ProgressControlPropsType> {}\n\n  interface SeekBarPropsType {\n    player?: object;\n    mouseTime?: object;\n    actions?: object;\n    className?: string;\n  }\n  class SeekBar extends React.Component<SeekBarPropsType> {\n    /**\n     * Get percentage of video played\n     *\n     * @return {Number} Percentage played\n     * @method getPercent\n     */\n    getPercent(): number;\n  }\n\n  interface SliderPropsType {\n    className?: string;\n    onMouseDown?: ReactEventHandler;\n    onMouseMove?: ReactEventHandler;\n    stepForward?: Function;\n    stepBack?: Function;\n    sliderActive?: ReactEventHandler;\n    sliderInactive?: ReactEventHandler;\n    onMouseUp?: ReactEventHandler;\n    onFocus?: ReactEventHandler;\n    onBlur?: ReactEventHandler;\n    onClick?: ReactEventHandler;\n    getPercent?: () => number;\n    vertical?: boolean;\n    children?: ReactNode;\n    label?: string;\n    valuenow?: string;\n    valuetext?: string;\n  }\n  class Slider extends React.Component<SliderPropsType> {}\n\n  interface PlayProgressBarPropsType {\n    currentTime?: number;\n    duration?: number;\n    percentage?: string;\n    className?: string;\n  }\n  class PlayProgressBar extends React.Component<PlayProgressBarPropsType> {}\n\n  interface LoadProgressBarPropsType {\n    duration?: number;\n    buffered?: object;\n    className?: string;\n  }\n  const LoadProgressBar: React.FC<LoadProgressBarPropsType>;\n\n  interface MouseTimeDisplayPropsType {\n    duration?: number;\n    mouseTime?: {\n      time: number;\n      position: number;\n    };\n    className?: string;\n    text?: string;\n  }\n  const MouseTimeDisplay: React.FC<MouseTimeDisplayPropsType>;\n\n  interface RemainingTimeDisplayPropsType {\n    player?: {\n      currentTime: number;\n      duration: number;\n    };\n    className?: string;\n  }\n  const RemainingTimeDisplay: React.FC<RemainingTimeDisplayPropsType>;\n\n  interface CurrentTimeDisplayPropsType {\n    player?: {\n      currentTime: number;\n      duration: number;\n    };\n    className?: string;\n  }\n  const CurrentTimeDisplay: React.FC<CurrentTimeDisplayPropsType>;\n\n  interface DurationDisplayPropsType {\n    player?: {\n      duration: number;\n    };\n    className?: string;\n  }\n  const DurationDisplay: React.FC<DurationDisplayPropsType>;\n\n  interface TimeDividerPropsType {\n    separator?: string;\n    className?: string;\n  }\n  const TimeDivider: React.FC<TimeDividerPropsType>;\n\n  interface VolumeMenuButtonPropsType {\n    player?: {\n      volume: number;\n      muted: boolean;\n    };\n    actions?: object;\n    vertical?: boolean;\n    className?: string;\n    alwaysShowVolume?: boolean;\n  }\n  class VolumeMenuButton extends React.Component<VolumeMenuButtonPropsType> {\n    get volumeLevel(): number;\n  }\n\n  interface PlaybackRateMenuButtonPropsType {\n    player?: object;\n    actions?: object;\n    rates?: Array<number>; // = [2, 1.5, 1.25, 1, 0.5, 0.25];\n    className?: string;\n  }\n  class PlaybackRateMenuButton extends React.Component<\n    PlaybackRateMenuButtonPropsType\n  > {}\n\n  interface ClosedCaptionButtonPropsType {\n    player?: object;\n    actions?: object;\n    className?: string;\n    offMenuText?: string; // = 'Off';\n    showOffMenu?: boolean; // = true;\n    kinds?: Array<string>; // = ['captions', 'subtitles']; // `kind`s of TextTrack to look for to associate it with this menu.\n  }\n  class ClosedCaptionButton extends React.Component<\n    ClosedCaptionButtonPropsType\n  > {}\n\n  class PlaybackRate extends React.Component {}\n\n  interface MenuButtonPropsType {\n    inline?: boolean;\n    items?: Array<any>;\n    className?: string;\n    onSelectItem?: ReactEventHandler;\n    children?: any;\n    selectedIndex?: number;\n  }\n  class MenuButton extends React.Component<MenuButtonPropsType> {}\n\n  namespace playerActions {\n    type OPERATE = \"video-react/OPERATE\";\n    type FULLSCREEN_CHANGE = \"video-react/FULLSCREEN_CHANGE\";\n    type PLAYER_ACTIVATE = \"video-react/PLAYER_ACTIVATE\";\n    type USER_ACTIVATE = \"video-react/USER_ACTIVATE\";\n\n    function handleFullscreenChange(\n      isFullscreen: boolean\n    ): {\n      type: FULLSCREEN_CHANGE;\n      isFullscreen;\n    };\n\n    function activate(\n      activity\n    ): {\n      type: PLAYER_ACTIVATE;\n      activity;\n    };\n\n    function userActivate(\n      activity\n    ): {\n      type: USER_ACTIVATE;\n      activity;\n    };\n\n    function play(operation: {\n      action: \"play\";\n      source: string;\n    }): {\n      type: OPERATE;\n      operation;\n    };\n\n    function pause(operation: {\n      action: \"pause\";\n      source: string;\n    }): {\n      type: OPERATE;\n      operation;\n    };\n\n    function togglePlay(operation?: {\n      action: \"toggle-play\";\n      source: string;\n    }): {\n      type: OPERATE;\n      operation;\n    };\n\n    // seek video by time\n    function seek(\n      time: number,\n      operation?: {\n        action: \"seek\";\n        source: string;\n      }\n    ): {\n      type: OPERATE;\n      operation;\n    };\n\n    // jump forward x seconds\n    function forward(\n      seconds: number,\n      operation?: {\n        action: string;\n        source: string;\n      }\n    ): {\n      type: OPERATE;\n      operation;\n    };\n\n    // jump back x seconds\n    function replay(\n      seconds: number,\n      operation?: {\n        action: string;\n        source: string;\n      }\n    ): {\n      type: OPERATE;\n      operation;\n    };\n\n    function changeRate(\n      rate: number,\n      operation?: {\n        action: \"change-rate\";\n        source: string;\n      }\n    ): {\n      type: OPERATE;\n      operation;\n    };\n\n    function changeVolume(\n      volume: number,\n      operation?: {\n        action: \"change-volume\";\n        source: string;\n      }\n    ): {\n      type: OPERATE;\n      operation;\n    };\n\n    function mute(\n      muted: boolean,\n      operation?: {\n        action: \"muted\" | \"unmuted\";\n        source: string;\n      }\n    ): {\n      type: OPERATE;\n      operation;\n    };\n\n    function toggleFullscreen(player): { type: string; [key: string]: any };\n  }\n\n  namespace videoActions {\n    type LOAD_START = \"video-react/LOAD_START\";\n    type CAN_PLAY = \"video-react/CAN_PLAY\";\n    type WAITING = \"video-react/WAITING\";\n    type CAN_PLAY_THROUGH = \"video-react/CAN_PLAY_THROUGH\";\n    type PLAYING = \"video-react/PLAYING\";\n    type PLAY = \"video-react/PLAY\";\n    type PAUSE = \"video-react/PAUSE\";\n    type END = \"video-react/END\";\n    type SEEKING = \"video-react/SEEKING\";\n    type SEEKED = \"video-react/SEEKED\";\n    type SEEKING_TIME = \"video-react/SEEKING_TIME\";\n    type END_SEEKING = \"video-react/END_SEEKING\";\n    type DURATION_CHANGE = \"video-react/DURATION_CHANGE\";\n    type TIME_UPDATE = \"video-react/TIME_UPDATE\";\n    type VOLUME_CHANGE = \"video-react/VOLUME_CHANGE\";\n    type PROGRESS_CHANGE = \"video-react/PROGRESS_CHANGE\";\n    type RATE_CHANGE = \"video-react/RATE_CHANGE\";\n    type SUSPEND = \"video-react/SUSPEND\";\n    type ABORT = \"video-react/ABORT\";\n    type EMPTIED = \"video-react/EMPTIED\";\n    type STALLED = \"video-react/STALLED\";\n    type LOADED_META_DATA = \"video-react/LOADED_META_DATA\";\n    type LOADED_DATA = \"video-react/LOADED_DATA\";\n    type RESIZE = \"video-react/RESIZE\";\n    type ERROR = \"video-react/ERROR\";\n    type ACTIVATE_TEXT_TRACK = \"video-react/ACTIVATE_TEXT_TRACK\";\n\n    function handleLoadStart(\n      videoProps\n    ): {\n      type: LOAD_START;\n      videoProps;\n    };\n\n    function handleCanPlay(\n      videoProps\n    ): {\n      type: CAN_PLAY;\n      videoProps;\n    };\n\n    function handleWaiting(\n      videoProps\n    ): {\n      type: WAITING;\n      videoProps;\n    };\n\n    function handleCanPlayThrough(\n      videoProps\n    ): {\n      type: CAN_PLAY_THROUGH;\n      videoProps;\n    };\n\n    function handlePlaying(\n      videoProps\n    ): {\n      type: PLAYING;\n      videoProps;\n    };\n\n    function handlePlay(\n      videoProps\n    ): {\n      type: PLAY;\n      videoProps;\n    };\n\n    function handlePause(\n      videoProps\n    ): {\n      type: PAUSE;\n      videoProps;\n    };\n\n    function handleEnd(\n      videoProps\n    ): {\n      type: END;\n      videoProps;\n    };\n\n    function handleSeeking(\n      videoProps\n    ): {\n      type: SEEKING;\n      videoProps;\n    };\n\n    function handleSeeked(\n      videoProps\n    ): {\n      type: SEEKED;\n      videoProps;\n    };\n\n    function handleDurationChange(\n      videoProps\n    ): {\n      type: DURATION_CHANGE;\n      videoProps;\n    };\n\n    function handleTimeUpdate(\n      videoProps\n    ): {\n      type: TIME_UPDATE;\n      videoProps;\n    };\n\n    function handleVolumeChange(\n      videoProps\n    ): {\n      type: VOLUME_CHANGE;\n      videoProps;\n    };\n\n    function handleProgressChange(\n      videoProps\n    ): {\n      type: PROGRESS_CHANGE;\n      videoProps;\n    };\n\n    function handleRateChange(\n      videoProps\n    ): {\n      type: RATE_CHANGE;\n      videoProps;\n    };\n\n    function handleSuspend(\n      videoProps\n    ): {\n      type: SUSPEND;\n      videoProps;\n    };\n\n    function handleAbort(\n      videoProps\n    ): {\n      type: ABORT;\n      videoProps;\n    };\n\n    function handleEmptied(\n      videoProps\n    ): {\n      type: EMPTIED;\n      videoProps;\n    };\n\n    function handleStalled(\n      videoProps\n    ): {\n      type: STALLED;\n      videoProps;\n    };\n\n    function handleLoadedMetaData(\n      videoProps\n    ): {\n      type: LOADED_META_DATA;\n      videoProps;\n    };\n\n    function handleLoadedData(\n      videoProps\n    ): {\n      type: LOADED_DATA;\n      videoProps;\n    };\n\n    function handleResize(\n      videoProps\n    ): {\n      type: RESIZE;\n      videoProps;\n    };\n\n    function handleError(\n      videoProps\n    ): {\n      type: ERROR;\n      videoProps;\n    };\n\n    function handleSeekingTime(\n      time\n    ): {\n      type: SEEKING_TIME;\n      time;\n    };\n\n    function handleEndSeeking(\n      time\n    ): {\n      type: END_SEEKING;\n      time;\n    };\n\n    function activateTextTrack(\n      textTrack\n    ): {\n      type: ACTIVATE_TEXT_TRACK;\n      textTrack;\n    };\n  }\n\n  function playerReducer(state: any, action: any);\n  function operationReducer(state: any, action: any);\n}\n"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"compilerOptions\": {\n    \"target\": \"es5\",\n    \"module\": \"ESNext\",\n    \"moduleResolution\": \"node\",\n    \"jsx\": \"react\",\n    \"baseUrl\": \".\",\n    \"strict\": true,\n    \"importHelpers\": true,\n    \"sourceMap\": true,\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"paths\": {\n      \"@/*\": [\"src/*\"],\n      \"@@/*\": [\"src/.umi/*\"],\n      \"components/*\": [\"src/components/*\"],\n      \"utils/*\": [\"src/utils/*\"],\n      \"assets/*\": [\"src/assets/*\"]\n    },\n    \"allowSyntheticDefaultImports\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"isolatedModules\": true,\n    \"noEmit\": true,\n    \"skipLibCheck\": true\n  }\n}\n"
  },
  {
    "path": "webpack.config.js",
    "content": "/**\n * 不是真实的 webpack 配置，仅为兼容 webstorm 和 intellij idea 代码跳转\n * ref: https://github.com/umijs/umi/issues/1109#issuecomment-423380125\n */\n\nmodule.exports = {\n  resolve: {\n    alias: {\n      \"@\": require(\"path\").resolve(__dirname, \"src\")\n    }\n  }\n};\n"
  },
  {
    "path": "website/css/frameworks.css",
    "content": "/*\n    01) Bootstrap\n\t02) Magnific Popup\n\t03) Animate Css\n\t04) Material Design Icons\n\t05) Owl Carousel\n\t06) Owl Carousel Default\n\t07) Vegas Slider\n*/\n\n/*------------------------------------------------------------------*/\n/*\t01) Bootstrap\n/*------------------------------------------------------------------*/\n/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors\n * Copyright 2011-2019 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n\n */:root{--blue:#007bff;--indigo:#6610f2;--purple:#6f42c1;--pink:#e83e8c;--red:#dc3545;--orange:#fd7e14;--yellow:#ffc107;--green:#28a745;--teal:#20c997;--cyan:#17a2b8;--white:#fff;--gray:#6c757d;--gray-dark:#343a40;--primary:#007bff;--secondary:#6c757d;--success:#28a745;--info:#17a2b8;--warning:#ffc107;--danger:#dc3545;--light:#f8f9fa;--dark:#343a40;--breakpoint-xs:0;--breakpoint-sm:576px;--breakpoint-md:768px;--breakpoint-lg:992px;--breakpoint-xl:1200px;--font-family-sans-serif:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";--font-family-monospace:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace}*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:transparent}article,aside,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex=\"-1\"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0;-webkit-text-decoration-skip-ink:none;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg{overflow:hidden;vertical-align:middle}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}select{word-wrap:normal}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button}[type=button]:not(:disabled),[type=reset]:not(:disabled),[type=submit]:not(:disabled),button:not(:disabled){cursor:pointer}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{margin-bottom:.5rem;font-weight:500;line-height:1.2}.h1,h1{font-size:2.5rem}.h2,h2{font-size:2rem}.h3,h3{font-size:1.75rem}.h4,h4{font-size:1.5rem}.h5,h5{font-size:1.25rem}.h6,h6{font-size:1rem}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:6rem;font-weight:300;line-height:1.2}.display-2{font-size:5.5rem;font-weight:300;line-height:1.2}.display-3{font-size:4.5rem;font-weight:300;line-height:1.2}.display-4{font-size:3.5rem;font-weight:300;line-height:1.2}hr{margin-top:1rem;margin-bottom:1rem;border:0;border-top:1px solid rgba(0,0,0,.1)}.small,small{font-size:80%;font-weight:400}.mark,mark{padding:.2em;background-color:#fcf8e3}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:90%;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote-footer{display:block;font-size:80%;color:#6c757d}.blockquote-footer::before{content:\"\\2014\\00A0\"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid #dee2e6;border-radius:.25rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:90%;color:#6c757d}code{font-size:87.5%;color:#e83e8c;word-break:break-word}a>code{color:inherit}kbd{padding:.2rem .4rem;font-size:87.5%;color:#fff;background-color:#212529;border-radius:.2rem}kbd kbd{padding:0;font-size:100%;font-weight:700}pre{display:block;font-size:87.5%;color:#212529}pre code{font-size:inherit;color:inherit;word-break:normal}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}@media (min-width:576px){.container{max-width:540px}}@media (min-width:768px){.container{max-width:720px}}@media (min-width:992px){.container{max-width:960px}}@media (min-width:1200px){.container{max-width:1140px}}.container-fluid{width:100%;padding-right:15px;padding-left:15px;margin-right:auto;margin-left:auto}.row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-15px;margin-left:-15px}.no-gutters{margin-right:0;margin-left:0}.no-gutters>.col,.no-gutters>[class*=col-]{padding-right:0;padding-left:0}.col,.col-1,.col-10,.col-11,.col-12,.col-2,.col-3,.col-4,.col-5,.col-6,.col-7,.col-8,.col-9,.col-auto,.col-lg,.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-lg-auto,.col-md,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-md-auto,.col-sm,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-sm-auto,.col-xl,.col-xl-1,.col-xl-10,.col-xl-11,.col-xl-12,.col-xl-2,.col-xl-3,.col-xl-4,.col-xl-5,.col-xl-6,.col-xl-7,.col-xl-8,.col-xl-9,.col-xl-auto{position:relative;width:100%;padding-right:15px;padding-left:15px}.col{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-first{-ms-flex-order:-1;order:-1}.order-last{-ms-flex-order:13;order:13}.order-0{-ms-flex-order:0;order:0}.order-1{-ms-flex-order:1;order:1}.order-2{-ms-flex-order:2;order:2}.order-3{-ms-flex-order:3;order:3}.order-4{-ms-flex-order:4;order:4}.order-5{-ms-flex-order:5;order:5}.order-6{-ms-flex-order:6;order:6}.order-7{-ms-flex-order:7;order:7}.order-8{-ms-flex-order:8;order:8}.order-9{-ms-flex-order:9;order:9}.order-10{-ms-flex-order:10;order:10}.order-11{-ms-flex-order:11;order:11}.order-12{-ms-flex-order:12;order:12}.offset-1{margin-left:8.333333%}.offset-2{margin-left:16.666667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.333333%}.offset-5{margin-left:41.666667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.333333%}.offset-8{margin-left:66.666667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.333333%}.offset-11{margin-left:91.666667%}@media (min-width:576px){.col-sm{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-sm-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-sm-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-sm-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-sm-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-sm-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-sm-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-sm-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-sm-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-sm-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-sm-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-sm-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-sm-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-sm-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-sm-first{-ms-flex-order:-1;order:-1}.order-sm-last{-ms-flex-order:13;order:13}.order-sm-0{-ms-flex-order:0;order:0}.order-sm-1{-ms-flex-order:1;order:1}.order-sm-2{-ms-flex-order:2;order:2}.order-sm-3{-ms-flex-order:3;order:3}.order-sm-4{-ms-flex-order:4;order:4}.order-sm-5{-ms-flex-order:5;order:5}.order-sm-6{-ms-flex-order:6;order:6}.order-sm-7{-ms-flex-order:7;order:7}.order-sm-8{-ms-flex-order:8;order:8}.order-sm-9{-ms-flex-order:9;order:9}.order-sm-10{-ms-flex-order:10;order:10}.order-sm-11{-ms-flex-order:11;order:11}.order-sm-12{-ms-flex-order:12;order:12}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.333333%}.offset-sm-2{margin-left:16.666667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.333333%}.offset-sm-5{margin-left:41.666667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.333333%}.offset-sm-8{margin-left:66.666667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.333333%}.offset-sm-11{margin-left:91.666667%}}@media (min-width:768px){.col-md{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-md-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-md-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-md-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-md-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-md-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-md-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-md-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-md-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-md-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-md-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-md-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-md-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-md-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-md-first{-ms-flex-order:-1;order:-1}.order-md-last{-ms-flex-order:13;order:13}.order-md-0{-ms-flex-order:0;order:0}.order-md-1{-ms-flex-order:1;order:1}.order-md-2{-ms-flex-order:2;order:2}.order-md-3{-ms-flex-order:3;order:3}.order-md-4{-ms-flex-order:4;order:4}.order-md-5{-ms-flex-order:5;order:5}.order-md-6{-ms-flex-order:6;order:6}.order-md-7{-ms-flex-order:7;order:7}.order-md-8{-ms-flex-order:8;order:8}.order-md-9{-ms-flex-order:9;order:9}.order-md-10{-ms-flex-order:10;order:10}.order-md-11{-ms-flex-order:11;order:11}.order-md-12{-ms-flex-order:12;order:12}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.333333%}.offset-md-2{margin-left:16.666667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.333333%}.offset-md-5{margin-left:41.666667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.333333%}.offset-md-8{margin-left:66.666667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.333333%}.offset-md-11{margin-left:91.666667%}}@media (min-width:992px){.col-lg{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-lg-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-lg-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-lg-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-lg-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-lg-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-lg-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-lg-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-lg-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-lg-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-lg-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-lg-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-lg-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-lg-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-lg-first{-ms-flex-order:-1;order:-1}.order-lg-last{-ms-flex-order:13;order:13}.order-lg-0{-ms-flex-order:0;order:0}.order-lg-1{-ms-flex-order:1;order:1}.order-lg-2{-ms-flex-order:2;order:2}.order-lg-3{-ms-flex-order:3;order:3}.order-lg-4{-ms-flex-order:4;order:4}.order-lg-5{-ms-flex-order:5;order:5}.order-lg-6{-ms-flex-order:6;order:6}.order-lg-7{-ms-flex-order:7;order:7}.order-lg-8{-ms-flex-order:8;order:8}.order-lg-9{-ms-flex-order:9;order:9}.order-lg-10{-ms-flex-order:10;order:10}.order-lg-11{-ms-flex-order:11;order:11}.order-lg-12{-ms-flex-order:12;order:12}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.333333%}.offset-lg-2{margin-left:16.666667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.333333%}.offset-lg-5{margin-left:41.666667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.333333%}.offset-lg-8{margin-left:66.666667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.333333%}.offset-lg-11{margin-left:91.666667%}}@media (min-width:1200px){.col-xl{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;max-width:100%}.col-xl-auto{-ms-flex:0 0 auto;flex:0 0 auto;width:auto;max-width:100%}.col-xl-1{-ms-flex:0 0 8.333333%;flex:0 0 8.333333%;max-width:8.333333%}.col-xl-2{-ms-flex:0 0 16.666667%;flex:0 0 16.666667%;max-width:16.666667%}.col-xl-3{-ms-flex:0 0 25%;flex:0 0 25%;max-width:25%}.col-xl-4{-ms-flex:0 0 33.333333%;flex:0 0 33.333333%;max-width:33.333333%}.col-xl-5{-ms-flex:0 0 41.666667%;flex:0 0 41.666667%;max-width:41.666667%}.col-xl-6{-ms-flex:0 0 50%;flex:0 0 50%;max-width:50%}.col-xl-7{-ms-flex:0 0 58.333333%;flex:0 0 58.333333%;max-width:58.333333%}.col-xl-8{-ms-flex:0 0 66.666667%;flex:0 0 66.666667%;max-width:66.666667%}.col-xl-9{-ms-flex:0 0 75%;flex:0 0 75%;max-width:75%}.col-xl-10{-ms-flex:0 0 83.333333%;flex:0 0 83.333333%;max-width:83.333333%}.col-xl-11{-ms-flex:0 0 91.666667%;flex:0 0 91.666667%;max-width:91.666667%}.col-xl-12{-ms-flex:0 0 100%;flex:0 0 100%;max-width:100%}.order-xl-first{-ms-flex-order:-1;order:-1}.order-xl-last{-ms-flex-order:13;order:13}.order-xl-0{-ms-flex-order:0;order:0}.order-xl-1{-ms-flex-order:1;order:1}.order-xl-2{-ms-flex-order:2;order:2}.order-xl-3{-ms-flex-order:3;order:3}.order-xl-4{-ms-flex-order:4;order:4}.order-xl-5{-ms-flex-order:5;order:5}.order-xl-6{-ms-flex-order:6;order:6}.order-xl-7{-ms-flex-order:7;order:7}.order-xl-8{-ms-flex-order:8;order:8}.order-xl-9{-ms-flex-order:9;order:9}.order-xl-10{-ms-flex-order:10;order:10}.order-xl-11{-ms-flex-order:11;order:11}.order-xl-12{-ms-flex-order:12;order:12}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.333333%}.offset-xl-2{margin-left:16.666667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.333333%}.offset-xl-5{margin-left:41.666667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.333333%}.offset-xl-8{margin-left:66.666667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.333333%}.offset-xl-11{margin-left:91.666667%}}.table{width:100%;margin-bottom:1rem;color:#212529}.table td,.table th{padding:.75rem;vertical-align:top;border-top:1px solid #dee2e6}.table thead th{vertical-align:bottom;border-bottom:2px solid #dee2e6}.table tbody+tbody{border-top:2px solid #dee2e6}.table-sm td,.table-sm th{padding:.3rem}.table-bordered{border:1px solid #dee2e6}.table-bordered td,.table-bordered th{border:1px solid #dee2e6}.table-bordered thead td,.table-bordered thead th{border-bottom-width:2px}.table-borderless tbody+tbody,.table-borderless td,.table-borderless th,.table-borderless thead th{border:0}.table-striped tbody tr:nth-of-type(odd){background-color:rgba(0,0,0,.05)}.table-hover tbody tr:hover{color:#212529;background-color:rgba(0,0,0,.075)}.table-primary,.table-primary>td,.table-primary>th{background-color:#b8daff}.table-primary tbody+tbody,.table-primary td,.table-primary th,.table-primary thead th{border-color:#7abaff}.table-hover .table-primary:hover{background-color:#9fcdff}.table-hover .table-primary:hover>td,.table-hover .table-primary:hover>th{background-color:#9fcdff}.table-secondary,.table-secondary>td,.table-secondary>th{background-color:#d6d8db}.table-secondary tbody+tbody,.table-secondary td,.table-secondary th,.table-secondary thead th{border-color:#b3b7bb}.table-hover .table-secondary:hover{background-color:#c8cbcf}.table-hover .table-secondary:hover>td,.table-hover .table-secondary:hover>th{background-color:#c8cbcf}.table-success,.table-success>td,.table-success>th{background-color:#c3e6cb}.table-success tbody+tbody,.table-success td,.table-success th,.table-success thead th{border-color:#8fd19e}.table-hover .table-success:hover{background-color:#b1dfbb}.table-hover .table-success:hover>td,.table-hover .table-success:hover>th{background-color:#b1dfbb}.table-info,.table-info>td,.table-info>th{background-color:#bee5eb}.table-info tbody+tbody,.table-info td,.table-info th,.table-info thead th{border-color:#86cfda}.table-hover .table-info:hover{background-color:#abdde5}.table-hover .table-info:hover>td,.table-hover .table-info:hover>th{background-color:#abdde5}.table-warning,.table-warning>td,.table-warning>th{background-color:#ffeeba}.table-warning tbody+tbody,.table-warning td,.table-warning th,.table-warning thead th{border-color:#ffdf7e}.table-hover .table-warning:hover{background-color:#ffe8a1}.table-hover .table-warning:hover>td,.table-hover .table-warning:hover>th{background-color:#ffe8a1}.table-danger,.table-danger>td,.table-danger>th{background-color:#f5c6cb}.table-danger tbody+tbody,.table-danger td,.table-danger th,.table-danger thead th{border-color:#ed969e}.table-hover .table-danger:hover{background-color:#f1b0b7}.table-hover .table-danger:hover>td,.table-hover .table-danger:hover>th{background-color:#f1b0b7}.table-light,.table-light>td,.table-light>th{background-color:#fdfdfe}.table-light tbody+tbody,.table-light td,.table-light th,.table-light thead th{border-color:#fbfcfc}.table-hover .table-light:hover{background-color:#ececf6}.table-hover .table-light:hover>td,.table-hover .table-light:hover>th{background-color:#ececf6}.table-dark,.table-dark>td,.table-dark>th{background-color:#c6c8ca}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#95999c}.table-hover .table-dark:hover{background-color:#b9bbbe}.table-hover .table-dark:hover>td,.table-hover .table-dark:hover>th{background-color:#b9bbbe}.table-active,.table-active>td,.table-active>th{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover{background-color:rgba(0,0,0,.075)}.table-hover .table-active:hover>td,.table-hover .table-active:hover>th{background-color:rgba(0,0,0,.075)}.table .thead-dark th{color:#fff;background-color:#343a40;border-color:#454d55}.table .thead-light th{color:#495057;background-color:#e9ecef;border-color:#dee2e6}.table-dark{color:#fff;background-color:#343a40}.table-dark td,.table-dark th,.table-dark thead th{border-color:#454d55}.table-dark.table-bordered{border:0}.table-dark.table-striped tbody tr:nth-of-type(odd){background-color:rgba(255,255,255,.05)}.table-dark.table-hover tbody tr:hover{color:#fff;background-color:rgba(255,255,255,.075)}@media (max-width:575.98px){.table-responsive-sm{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-sm>.table-bordered{border:0}}@media (max-width:767.98px){.table-responsive-md{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-md>.table-bordered{border:0}}@media (max-width:991.98px){.table-responsive-lg{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-lg>.table-bordered{border:0}}@media (max-width:1199.98px){.table-responsive-xl{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive-xl>.table-bordered{border:0}}.table-responsive{display:block;width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}.table-responsive>.table-bordered{border:0}.form-control{display:block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.form-control{transition:none}}.form-control::-ms-expand{background-color:transparent;border:0}.form-control:focus{color:#495057;background-color:#fff;border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.form-control::-webkit-input-placeholder{color:#6c757d;opacity:1}.form-control::-moz-placeholder{color:#6c757d;opacity:1}.form-control:-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::-ms-input-placeholder{color:#6c757d;opacity:1}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled,.form-control[readonly]{background-color:#e9ecef;opacity:1}select.form-control:focus::-ms-value{color:#495057;background-color:#fff}.form-control-file,.form-control-range{display:block;width:100%}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem;line-height:1.5}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem;line-height:1.5}.form-control-plaintext{display:block;width:100%;padding-top:.375rem;padding-bottom:.375rem;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext.form-control-lg,.form-control-plaintext.form-control-sm{padding-right:0;padding-left:0}.form-control-sm{height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.form-control-lg{height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}select.form-control[multiple],select.form-control[size]{height:auto}textarea.form-control{height:auto}.form-group{margin-bottom:1rem}.form-text{display:block;margin-top:.25rem}.form-row{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;margin-right:-5px;margin-left:-5px}.form-row>.col,.form-row>[class*=col-]{padding-right:5px;padding-left:5px}.form-check{position:relative;display:block;padding-left:1.25rem}.form-check-input{position:absolute;margin-top:.3rem;margin-left:-1.25rem}.form-check-input:disabled~.form-check-label{color:#6c757d}.form-check-label{margin-bottom:0}.form-check-inline{display:-ms-inline-flexbox;display:inline-flex;-ms-flex-align:center;align-items:center;padding-left:0;margin-right:.75rem}.form-check-inline .form-check-input{position:static;margin-top:0;margin-right:.3125rem;margin-left:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#28a745}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(40,167,69,.9);border-radius:.25rem}.form-control.is-valid,.was-validated .form-control:valid{border-color:#28a745;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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\");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-valid:focus,.was-validated .form-control:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.form-control.is-valid~.valid-feedback,.form-control.is-valid~.valid-tooltip,.was-validated .form-control:valid~.valid-feedback,.was-validated .form-control:valid~.valid-tooltip{display:block}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-valid,.was-validated .custom-select:valid{border-color:#28a745;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%2328a745' 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\") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-valid:focus,.was-validated .custom-select:valid:focus{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-select.is-valid~.valid-feedback,.custom-select.is-valid~.valid-tooltip,.was-validated .custom-select:valid~.valid-feedback,.was-validated .custom-select:valid~.valid-tooltip{display:block}.form-control-file.is-valid~.valid-feedback,.form-control-file.is-valid~.valid-tooltip,.was-validated .form-control-file:valid~.valid-feedback,.was-validated .form-control-file:valid~.valid-tooltip{display:block}.form-check-input.is-valid~.form-check-label,.was-validated .form-check-input:valid~.form-check-label{color:#28a745}.form-check-input.is-valid~.valid-feedback,.form-check-input.is-valid~.valid-tooltip,.was-validated .form-check-input:valid~.valid-feedback,.was-validated .form-check-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid~.custom-control-label,.was-validated .custom-control-input:valid~.custom-control-label{color:#28a745}.custom-control-input.is-valid~.custom-control-label::before,.was-validated .custom-control-input:valid~.custom-control-label::before{border-color:#28a745}.custom-control-input.is-valid~.valid-feedback,.custom-control-input.is-valid~.valid-tooltip,.was-validated .custom-control-input:valid~.valid-feedback,.was-validated .custom-control-input:valid~.valid-tooltip{display:block}.custom-control-input.is-valid:checked~.custom-control-label::before,.was-validated .custom-control-input:valid:checked~.custom-control-label::before{border-color:#34ce57;background-color:#34ce57}.custom-control-input.is-valid:focus~.custom-control-label::before,.was-validated .custom-control-input:valid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.custom-control-input.is-valid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:valid:focus:not(:checked)~.custom-control-label::before{border-color:#28a745}.custom-file-input.is-valid~.custom-file-label,.was-validated .custom-file-input:valid~.custom-file-label{border-color:#28a745}.custom-file-input.is-valid~.valid-feedback,.custom-file-input.is-valid~.valid-tooltip,.was-validated .custom-file-input:valid~.valid-feedback,.was-validated .custom-file-input:valid~.valid-tooltip{display:block}.custom-file-input.is-valid:focus~.custom-file-label,.was-validated .custom-file-input:valid:focus~.custom-file-label{border-color:#28a745;box-shadow:0 0 0 .2rem rgba(40,167,69,.25)}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:80%;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;line-height:1.5;color:#fff;background-color:rgba(220,53,69,.9);border-radius:.25rem}.form-control.is-invalid,.was-validated .form-control:invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\");background-repeat:no-repeat;background-position:center right calc(.375em + .1875rem);background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.form-control.is-invalid:focus,.was-validated .form-control:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-control.is-invalid~.invalid-feedback,.form-control.is-invalid~.invalid-tooltip,.was-validated .form-control:invalid~.invalid-feedback,.was-validated .form-control:invalid~.invalid-tooltip{display:block}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.custom-select.is-invalid,.was-validated .custom-select:invalid{border-color:#dc3545;padding-right:calc((1em + .75rem) * 3 / 4 + 1.75rem);background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px,url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23dc3545' viewBox='-2 -2 7 7'%3e%3cpath stroke='%23dc3545' d='M0 0l3 3m0-3L0 3'/%3e%3ccircle r='.5'/%3e%3ccircle cx='3' r='.5'/%3e%3ccircle cy='3' r='.5'/%3e%3ccircle cx='3' cy='3' r='.5'/%3e%3c/svg%3E\") #fff no-repeat center right 1.75rem/calc(.75em + .375rem) calc(.75em + .375rem)}.custom-select.is-invalid:focus,.was-validated .custom-select:invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-select.is-invalid~.invalid-feedback,.custom-select.is-invalid~.invalid-tooltip,.was-validated .custom-select:invalid~.invalid-feedback,.was-validated .custom-select:invalid~.invalid-tooltip{display:block}.form-control-file.is-invalid~.invalid-feedback,.form-control-file.is-invalid~.invalid-tooltip,.was-validated .form-control-file:invalid~.invalid-feedback,.was-validated .form-control-file:invalid~.invalid-tooltip{display:block}.form-check-input.is-invalid~.form-check-label,.was-validated .form-check-input:invalid~.form-check-label{color:#dc3545}.form-check-input.is-invalid~.invalid-feedback,.form-check-input.is-invalid~.invalid-tooltip,.was-validated .form-check-input:invalid~.invalid-feedback,.was-validated .form-check-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid~.custom-control-label,.was-validated .custom-control-input:invalid~.custom-control-label{color:#dc3545}.custom-control-input.is-invalid~.custom-control-label::before,.was-validated .custom-control-input:invalid~.custom-control-label::before{border-color:#dc3545}.custom-control-input.is-invalid~.invalid-feedback,.custom-control-input.is-invalid~.invalid-tooltip,.was-validated .custom-control-input:invalid~.invalid-feedback,.was-validated .custom-control-input:invalid~.invalid-tooltip{display:block}.custom-control-input.is-invalid:checked~.custom-control-label::before,.was-validated .custom-control-input:invalid:checked~.custom-control-label::before{border-color:#e4606d;background-color:#e4606d}.custom-control-input.is-invalid:focus~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.custom-control-input.is-invalid:focus:not(:checked)~.custom-control-label::before,.was-validated .custom-control-input:invalid:focus:not(:checked)~.custom-control-label::before{border-color:#dc3545}.custom-file-input.is-invalid~.custom-file-label,.was-validated .custom-file-input:invalid~.custom-file-label{border-color:#dc3545}.custom-file-input.is-invalid~.invalid-feedback,.custom-file-input.is-invalid~.invalid-tooltip,.was-validated .custom-file-input:invalid~.invalid-feedback,.was-validated .custom-file-input:invalid~.invalid-tooltip{display:block}.custom-file-input.is-invalid:focus~.custom-file-label,.was-validated .custom-file-input:invalid:focus~.custom-file-label{border-color:#dc3545;box-shadow:0 0 0 .2rem rgba(220,53,69,.25)}.form-inline{display:-ms-flexbox;display:flex;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center}.form-inline .form-check{width:100%}@media (min-width:576px){.form-inline label{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;margin-bottom:0}.form-inline .form-group{display:-ms-flexbox;display:flex;-ms-flex:0 0 auto;flex:0 0 auto;-ms-flex-flow:row wrap;flex-flow:row wrap;-ms-flex-align:center;align-items:center;margin-bottom:0}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-plaintext{display:inline-block}.form-inline .custom-select,.form-inline .input-group{width:auto}.form-inline .form-check{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:auto;padding-left:0}.form-inline .form-check-input{position:relative;-ms-flex-negative:0;flex-shrink:0;margin-top:0;margin-right:.25rem;margin-left:0}.form-inline .custom-control{-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center}.form-inline .custom-control-label{margin-bottom:0}}.btn{display:inline-block;font-weight:400;color:#212529;text-align:center;vertical-align:middle;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;background-color:transparent;border:1px solid transparent;padding:.375rem .75rem;font-size:1rem;line-height:1.5;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.btn{transition:none}}.btn:hover{color:#212529;text-decoration:none}.btn.focus,.btn:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.btn.disabled,.btn:disabled{opacity:.65}a.btn.disabled,fieldset:disabled a.btn{pointer-events:none}.btn-primary{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:hover{color:#fff;background-color:#0069d9;border-color:#0062cc}.btn-primary.focus,.btn-primary:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-primary.disabled,.btn-primary:disabled{color:#fff;background-color:#007bff;border-color:#007bff}.btn-primary:not(:disabled):not(.disabled).active,.btn-primary:not(:disabled):not(.disabled):active,.show>.btn-primary.dropdown-toggle{color:#fff;background-color:#0062cc;border-color:#005cbf}.btn-primary:not(:disabled):not(.disabled).active:focus,.btn-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(38,143,255,.5)}.btn-secondary{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:hover{color:#fff;background-color:#5a6268;border-color:#545b62}.btn-secondary.focus,.btn-secondary:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-secondary.disabled,.btn-secondary:disabled{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-secondary:not(:disabled):not(.disabled).active,.btn-secondary:not(:disabled):not(.disabled):active,.show>.btn-secondary.dropdown-toggle{color:#fff;background-color:#545b62;border-color:#4e555b}.btn-secondary:not(:disabled):not(.disabled).active:focus,.btn-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(130,138,145,.5)}.btn-success{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:hover{color:#fff;background-color:#218838;border-color:#1e7e34}.btn-success.focus,.btn-success:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-success.disabled,.btn-success:disabled{color:#fff;background-color:#28a745;border-color:#28a745}.btn-success:not(:disabled):not(.disabled).active,.btn-success:not(:disabled):not(.disabled):active,.show>.btn-success.dropdown-toggle{color:#fff;background-color:#1e7e34;border-color:#1c7430}.btn-success:not(:disabled):not(.disabled).active:focus,.btn-success:not(:disabled):not(.disabled):active:focus,.show>.btn-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(72,180,97,.5)}.btn-info{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:hover{color:#fff;background-color:#138496;border-color:#117a8b}.btn-info.focus,.btn-info:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-info.disabled,.btn-info:disabled{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-info:not(:disabled):not(.disabled).active,.btn-info:not(:disabled):not(.disabled):active,.show>.btn-info.dropdown-toggle{color:#fff;background-color:#117a8b;border-color:#10707f}.btn-info:not(:disabled):not(.disabled).active:focus,.btn-info:not(:disabled):not(.disabled):active:focus,.show>.btn-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(58,176,195,.5)}.btn-warning{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:hover{color:#212529;background-color:#e0a800;border-color:#d39e00}.btn-warning.focus,.btn-warning:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-warning.disabled,.btn-warning:disabled{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-warning:not(:disabled):not(.disabled).active,.btn-warning:not(:disabled):not(.disabled):active,.show>.btn-warning.dropdown-toggle{color:#212529;background-color:#d39e00;border-color:#c69500}.btn-warning:not(:disabled):not(.disabled).active:focus,.btn-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(222,170,12,.5)}.btn-danger{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:hover{color:#fff;background-color:#c82333;border-color:#bd2130}.btn-danger.focus,.btn-danger:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-danger.disabled,.btn-danger:disabled{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-danger:not(:disabled):not(.disabled).active,.btn-danger:not(:disabled):not(.disabled):active,.show>.btn-danger.dropdown-toggle{color:#fff;background-color:#bd2130;border-color:#b21f2d}.btn-danger:not(:disabled):not(.disabled).active:focus,.btn-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(225,83,97,.5)}.btn-light{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:hover{color:#212529;background-color:#e2e6ea;border-color:#dae0e5}.btn-light.focus,.btn-light:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-light.disabled,.btn-light:disabled{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-light:not(:disabled):not(.disabled).active,.btn-light:not(:disabled):not(.disabled):active,.show>.btn-light.dropdown-toggle{color:#212529;background-color:#dae0e5;border-color:#d3d9df}.btn-light:not(:disabled):not(.disabled).active:focus,.btn-light:not(:disabled):not(.disabled):active:focus,.show>.btn-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(216,217,219,.5)}.btn-dark{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:hover{color:#fff;background-color:#23272b;border-color:#1d2124}.btn-dark.focus,.btn-dark:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-dark.disabled,.btn-dark:disabled{color:#fff;background-color:#343a40;border-color:#343a40}.btn-dark:not(:disabled):not(.disabled).active,.btn-dark:not(:disabled):not(.disabled):active,.show>.btn-dark.dropdown-toggle{color:#fff;background-color:#1d2124;border-color:#171a1d}.btn-dark:not(:disabled):not(.disabled).active:focus,.btn-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(82,88,93,.5)}.btn-outline-primary{color:#007bff;border-color:#007bff}.btn-outline-primary:hover{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary.focus,.btn-outline-primary:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-primary.disabled,.btn-outline-primary:disabled{color:#007bff;background-color:transparent}.btn-outline-primary:not(:disabled):not(.disabled).active,.btn-outline-primary:not(:disabled):not(.disabled):active,.show>.btn-outline-primary.dropdown-toggle{color:#fff;background-color:#007bff;border-color:#007bff}.btn-outline-primary:not(:disabled):not(.disabled).active:focus,.btn-outline-primary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-primary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.btn-outline-secondary{color:#6c757d;border-color:#6c757d}.btn-outline-secondary:hover{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary.focus,.btn-outline-secondary:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-secondary.disabled,.btn-outline-secondary:disabled{color:#6c757d;background-color:transparent}.btn-outline-secondary:not(:disabled):not(.disabled).active,.btn-outline-secondary:not(:disabled):not(.disabled):active,.show>.btn-outline-secondary.dropdown-toggle{color:#fff;background-color:#6c757d;border-color:#6c757d}.btn-outline-secondary:not(:disabled):not(.disabled).active:focus,.btn-outline-secondary:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-secondary.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.btn-outline-success{color:#28a745;border-color:#28a745}.btn-outline-success:hover{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success.focus,.btn-outline-success:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-success.disabled,.btn-outline-success:disabled{color:#28a745;background-color:transparent}.btn-outline-success:not(:disabled):not(.disabled).active,.btn-outline-success:not(:disabled):not(.disabled):active,.show>.btn-outline-success.dropdown-toggle{color:#fff;background-color:#28a745;border-color:#28a745}.btn-outline-success:not(:disabled):not(.disabled).active:focus,.btn-outline-success:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-success.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.btn-outline-info{color:#17a2b8;border-color:#17a2b8}.btn-outline-info:hover{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info.focus,.btn-outline-info:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-info.disabled,.btn-outline-info:disabled{color:#17a2b8;background-color:transparent}.btn-outline-info:not(:disabled):not(.disabled).active,.btn-outline-info:not(:disabled):not(.disabled):active,.show>.btn-outline-info.dropdown-toggle{color:#fff;background-color:#17a2b8;border-color:#17a2b8}.btn-outline-info:not(:disabled):not(.disabled).active:focus,.btn-outline-info:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-info.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.btn-outline-warning{color:#ffc107;border-color:#ffc107}.btn-outline-warning:hover{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning.focus,.btn-outline-warning:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-warning.disabled,.btn-outline-warning:disabled{color:#ffc107;background-color:transparent}.btn-outline-warning:not(:disabled):not(.disabled).active,.btn-outline-warning:not(:disabled):not(.disabled):active,.show>.btn-outline-warning.dropdown-toggle{color:#212529;background-color:#ffc107;border-color:#ffc107}.btn-outline-warning:not(:disabled):not(.disabled).active:focus,.btn-outline-warning:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-warning.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.btn-outline-danger{color:#dc3545;border-color:#dc3545}.btn-outline-danger:hover{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger.focus,.btn-outline-danger:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-danger.disabled,.btn-outline-danger:disabled{color:#dc3545;background-color:transparent}.btn-outline-danger:not(:disabled):not(.disabled).active,.btn-outline-danger:not(:disabled):not(.disabled):active,.show>.btn-outline-danger.dropdown-toggle{color:#fff;background-color:#dc3545;border-color:#dc3545}.btn-outline-danger:not(:disabled):not(.disabled).active:focus,.btn-outline-danger:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-danger.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.btn-outline-light{color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:hover{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light.focus,.btn-outline-light:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-light.disabled,.btn-outline-light:disabled{color:#f8f9fa;background-color:transparent}.btn-outline-light:not(:disabled):not(.disabled).active,.btn-outline-light:not(:disabled):not(.disabled):active,.show>.btn-outline-light.dropdown-toggle{color:#212529;background-color:#f8f9fa;border-color:#f8f9fa}.btn-outline-light:not(:disabled):not(.disabled).active:focus,.btn-outline-light:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-light.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.btn-outline-dark{color:#343a40;border-color:#343a40}.btn-outline-dark:hover{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark.focus,.btn-outline-dark:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-outline-dark.disabled,.btn-outline-dark:disabled{color:#343a40;background-color:transparent}.btn-outline-dark:not(:disabled):not(.disabled).active,.btn-outline-dark:not(:disabled):not(.disabled):active,.show>.btn-outline-dark.dropdown-toggle{color:#fff;background-color:#343a40;border-color:#343a40}.btn-outline-dark:not(:disabled):not(.disabled).active:focus,.btn-outline-dark:not(:disabled):not(.disabled):active:focus,.show>.btn-outline-dark.dropdown-toggle:focus{box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.btn-link{font-weight:400;color:#007bff;text-decoration:none}.btn-link:hover{color:#0056b3;text-decoration:underline}.btn-link.focus,.btn-link:focus{text-decoration:underline;box-shadow:none}.btn-link.disabled,.btn-link:disabled{color:#6c757d;pointer-events:none}.btn-group-lg>.btn,.btn-lg{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.btn-group-sm>.btn,.btn-sm{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:.5rem}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{transition:opacity .15s linear}@media (prefers-reduced-motion:reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{position:relative;height:0;overflow:hidden;transition:height .35s ease}@media (prefers-reduced-motion:reduce){.collapsing{transition:none}}.dropdown,.dropleft,.dropright,.dropup{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:10rem;padding:.5rem 0;margin:.125rem 0 0;font-size:1rem;color:#212529;text-align:left;list-style:none;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.15);border-radius:.25rem}.dropdown-menu-left{right:auto;left:0}.dropdown-menu-right{right:0;left:auto}@media (min-width:576px){.dropdown-menu-sm-left{right:auto;left:0}.dropdown-menu-sm-right{right:0;left:auto}}@media (min-width:768px){.dropdown-menu-md-left{right:auto;left:0}.dropdown-menu-md-right{right:0;left:auto}}@media (min-width:992px){.dropdown-menu-lg-left{right:auto;left:0}.dropdown-menu-lg-right{right:0;left:auto}}@media (min-width:1200px){.dropdown-menu-xl-left{right:auto;left:0}.dropdown-menu-xl-right{right:0;left:auto}}.dropup .dropdown-menu{top:auto;bottom:100%;margin-top:0;margin-bottom:.125rem}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-menu{top:0;right:auto;left:100%;margin-top:0;margin-left:.125rem}.dropright .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropright .dropdown-toggle:empty::after{margin-left:0}.dropright .dropdown-toggle::after{vertical-align:0}.dropleft .dropdown-menu{top:0;right:100%;left:auto;margin-top:0;margin-right:.125rem}.dropleft .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:\"\"}.dropleft .dropdown-toggle::after{display:none}.dropleft .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:\"\";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropleft .dropdown-toggle:empty::after{margin-left:0}.dropleft .dropdown-toggle::before{vertical-align:0}.dropdown-menu[x-placement^=bottom],.dropdown-menu[x-placement^=left],.dropdown-menu[x-placement^=right],.dropdown-menu[x-placement^=top]{right:auto;bottom:auto}.dropdown-divider{height:0;margin:.5rem 0;overflow:hidden;border-top:1px solid #e9ecef}.dropdown-item{display:block;width:100%;padding:.25rem 1.5rem;clear:both;font-weight:400;color:#212529;text-align:inherit;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:focus,.dropdown-item:hover{color:#16181b;text-decoration:none;background-color:#f8f9fa}.dropdown-item.active,.dropdown-item:active{color:#fff;text-decoration:none;background-color:#007bff}.dropdown-item.disabled,.dropdown-item:disabled{color:#6c757d;pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:.5rem 1.5rem;margin-bottom:0;font-size:.875rem;color:#6c757d;white-space:nowrap}.dropdown-item-text{display:block;padding:.25rem 1.5rem;color:#212529}.btn-group,.btn-group-vertical{position:relative;display:-ms-inline-flexbox;display:inline-flex;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;-ms-flex:1 1 auto;flex:1 1 auto}.btn-group-vertical>.btn:hover,.btn-group>.btn:hover{z-index:1}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus{z-index:1}.btn-toolbar{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-pack:start;justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group>.btn-group:not(:first-child),.btn-group>.btn:not(:first-child){margin-left:-1px}.btn-group>.btn-group:not(:last-child)>.btn,.btn-group>.btn:not(:last-child):not(.dropdown-toggle){border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn-group:not(:first-child)>.btn,.btn-group>.btn:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropright .dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after{margin-left:0}.dropleft .dropdown-toggle-split::before{margin-right:0}.btn-group-sm>.btn+.dropdown-toggle-split,.btn-sm+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-group-lg>.btn+.dropdown-toggle-split,.btn-lg+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{-ms-flex-direction:column;flex-direction:column;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:center;justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn-group:not(:first-child),.btn-group-vertical>.btn:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn-group:not(:last-child)>.btn,.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child)>.btn,.btn-group-vertical>.btn:not(:first-child){border-top-left-radius:0;border-top-right-radius:0}.btn-group-toggle>.btn,.btn-group-toggle>.btn-group>.btn{margin-bottom:0}.btn-group-toggle>.btn input[type=checkbox],.btn-group-toggle>.btn input[type=radio],.btn-group-toggle>.btn-group>.btn input[type=checkbox],.btn-group-toggle>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:stretch;align-items:stretch;width:100%}.input-group>.custom-file,.input-group>.custom-select,.input-group>.form-control,.input-group>.form-control-plaintext{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;width:1%;margin-bottom:0}.input-group>.custom-file+.custom-file,.input-group>.custom-file+.custom-select,.input-group>.custom-file+.form-control,.input-group>.custom-select+.custom-file,.input-group>.custom-select+.custom-select,.input-group>.custom-select+.form-control,.input-group>.form-control+.custom-file,.input-group>.form-control+.custom-select,.input-group>.form-control+.form-control,.input-group>.form-control-plaintext+.custom-file,.input-group>.form-control-plaintext+.custom-select,.input-group>.form-control-plaintext+.form-control{margin-left:-1px}.input-group>.custom-file .custom-file-input:focus~.custom-file-label,.input-group>.custom-select:focus,.input-group>.form-control:focus{z-index:3}.input-group>.custom-file .custom-file-input:focus{z-index:4}.input-group>.custom-select:not(:last-child),.input-group>.form-control:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-select:not(:first-child),.input-group>.form-control:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.custom-file{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center}.input-group>.custom-file:not(:last-child) .custom-file-label,.input-group>.custom-file:not(:last-child) .custom-file-label::after{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.custom-file:not(:first-child) .custom-file-label{border-top-left-radius:0;border-bottom-left-radius:0}.input-group-append,.input-group-prepend{display:-ms-flexbox;display:flex}.input-group-append .btn,.input-group-prepend .btn{position:relative;z-index:2}.input-group-append .btn:focus,.input-group-prepend .btn:focus{z-index:3}.input-group-append .btn+.btn,.input-group-append .btn+.input-group-text,.input-group-append .input-group-text+.btn,.input-group-append .input-group-text+.input-group-text,.input-group-prepend .btn+.btn,.input-group-prepend .btn+.input-group-text,.input-group-prepend .input-group-text+.btn,.input-group-prepend .input-group-text+.input-group-text{margin-left:-1px}.input-group-prepend{margin-right:-1px}.input-group-append{margin-left:-1px}.input-group-text{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.375rem .75rem;margin-bottom:0;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.25rem}.input-group-text input[type=checkbox],.input-group-text input[type=radio]{margin-top:0}.input-group-lg>.custom-select,.input-group-lg>.form-control:not(textarea){height:calc(1.5em + 1rem + 2px)}.input-group-lg>.custom-select,.input-group-lg>.form-control,.input-group-lg>.input-group-append>.btn,.input-group-lg>.input-group-append>.input-group-text,.input-group-lg>.input-group-prepend>.btn,.input-group-lg>.input-group-prepend>.input-group-text{padding:.5rem 1rem;font-size:1.25rem;line-height:1.5;border-radius:.3rem}.input-group-sm>.custom-select,.input-group-sm>.form-control:not(textarea){height:calc(1.5em + .5rem + 2px)}.input-group-sm>.custom-select,.input-group-sm>.form-control,.input-group-sm>.input-group-append>.btn,.input-group-sm>.input-group-append>.input-group-text,.input-group-sm>.input-group-prepend>.btn,.input-group-sm>.input-group-prepend>.input-group-text{padding:.25rem .5rem;font-size:.875rem;line-height:1.5;border-radius:.2rem}.input-group-lg>.custom-select,.input-group-sm>.custom-select{padding-right:1.75rem}.input-group>.input-group-append:last-child>.btn:not(:last-child):not(.dropdown-toggle),.input-group>.input-group-append:last-child>.input-group-text:not(:last-child),.input-group>.input-group-append:not(:last-child)>.btn,.input-group>.input-group-append:not(:last-child)>.input-group-text,.input-group>.input-group-prepend>.btn,.input-group>.input-group-prepend>.input-group-text{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>.input-group-append>.btn,.input-group>.input-group-append>.input-group-text,.input-group>.input-group-prepend:first-child>.btn:not(:first-child),.input-group>.input-group-prepend:first-child>.input-group-text:not(:first-child),.input-group>.input-group-prepend:not(:first-child)>.btn,.input-group>.input-group-prepend:not(:first-child)>.input-group-text{border-top-left-radius:0;border-bottom-left-radius:0}.custom-control{position:relative;display:block;min-height:1.5rem;padding-left:1.5rem}.custom-control-inline{display:-ms-inline-flexbox;display:inline-flex;margin-right:1rem}.custom-control-input{position:absolute;z-index:-1;opacity:0}.custom-control-input:checked~.custom-control-label::before{color:#fff;border-color:#007bff;background-color:#007bff}.custom-control-input:focus~.custom-control-label::before{box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-control-input:focus:not(:checked)~.custom-control-label::before{border-color:#80bdff}.custom-control-input:not(:disabled):active~.custom-control-label::before{color:#fff;background-color:#b3d7ff;border-color:#b3d7ff}.custom-control-input:disabled~.custom-control-label{color:#6c757d}.custom-control-input:disabled~.custom-control-label::before{background-color:#e9ecef}.custom-control-label{position:relative;margin-bottom:0;vertical-align:top}.custom-control-label::before{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;pointer-events:none;content:\"\";background-color:#fff;border:#adb5bd solid 1px}.custom-control-label::after{position:absolute;top:.25rem;left:-1.5rem;display:block;width:1rem;height:1rem;content:\"\";background:no-repeat 50%/50% 50%}.custom-checkbox .custom-control-label::before{border-radius:.25rem}.custom-checkbox .custom-control-input:checked~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23fff' d='M6.564.75l-3.59 3.612-1.538-1.55L0 4.26 2.974 7.25 8 2.193z'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::before{border-color:#007bff;background-color:#007bff}.custom-checkbox .custom-control-input:indeterminate~.custom-control-label::after{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 4'%3e%3cpath stroke='%23fff' d='M0 2h4'/%3e%3c/svg%3e\")}.custom-checkbox .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-checkbox .custom-control-input:disabled:indeterminate~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-radio .custom-control-label::before{border-radius:50%}.custom-radio .custom-control-input:checked~.custom-control-label::after{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\")}.custom-radio .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-switch{padding-left:2.25rem}.custom-switch .custom-control-label::before{left:-2.25rem;width:1.75rem;pointer-events:all;border-radius:.5rem}.custom-switch .custom-control-label::after{top:calc(.25rem + 2px);left:calc(-2.25rem + 2px);width:calc(1rem - 4px);height:calc(1rem - 4px);background-color:#adb5bd;border-radius:.5rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;transition:transform .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out,-webkit-transform .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-switch .custom-control-label::after{transition:none}}.custom-switch .custom-control-input:checked~.custom-control-label::after{background-color:#fff;-webkit-transform:translateX(.75rem);transform:translateX(.75rem)}.custom-switch .custom-control-input:disabled:checked~.custom-control-label::before{background-color:rgba(0,123,255,.5)}.custom-select{display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);padding:.375rem 1.75rem .375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;vertical-align:middle;background:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 4 5'%3e%3cpath fill='%23343a40' d='M2 0L0 2h4zm0 5L0 3h4z'/%3e%3c/svg%3e\") no-repeat right .75rem center/8px 10px;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-select:focus{border-color:#80bdff;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-select:focus::-ms-value{color:#495057;background-color:#fff}.custom-select[multiple],.custom-select[size]:not([size=\"1\"]){height:auto;padding-right:.75rem;background-image:none}.custom-select:disabled{color:#6c757d;background-color:#e9ecef}.custom-select::-ms-expand{display:none}.custom-select-sm{height:calc(1.5em + .5rem + 2px);padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem}.custom-select-lg{height:calc(1.5em + 1rem + 2px);padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem}.custom-file{position:relative;display:inline-block;width:100%;height:calc(1.5em + .75rem + 2px);margin-bottom:0}.custom-file-input{position:relative;z-index:2;width:100%;height:calc(1.5em + .75rem + 2px);margin:0;opacity:0}.custom-file-input:focus~.custom-file-label{border-color:#80bdff;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.custom-file-input:disabled~.custom-file-label{background-color:#e9ecef}.custom-file-input:lang(en)~.custom-file-label::after{content:\"Browse\"}.custom-file-input~.custom-file-label[data-browse]::after{content:attr(data-browse)}.custom-file-label{position:absolute;top:0;right:0;left:0;z-index:1;height:calc(1.5em + .75rem + 2px);padding:.375rem .75rem;font-weight:400;line-height:1.5;color:#495057;background-color:#fff;border:1px solid #ced4da;border-radius:.25rem}.custom-file-label::after{position:absolute;top:0;right:0;bottom:0;z-index:3;display:block;height:calc(1.5em + .75rem);padding:.375rem .75rem;line-height:1.5;color:#495057;content:\"Browse\";background-color:#e9ecef;border-left:inherit;border-radius:0 .25rem .25rem 0}.custom-range{width:100%;height:calc(1rem + .4rem);padding:0;background-color:transparent;-webkit-appearance:none;-moz-appearance:none;appearance:none}.custom-range:focus{outline:0}.custom-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range:focus::-ms-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .2rem rgba(0,123,255,.25)}.custom-range::-moz-focus-outer{border:0}.custom-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-webkit-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-webkit-slider-thumb{transition:none}}.custom-range::-webkit-slider-thumb:active{background-color:#b3d7ff}.custom-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;-moz-appearance:none;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-moz-range-thumb{transition:none}}.custom-range::-moz-range-thumb:active{background-color:#b3d7ff}.custom-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.custom-range::-ms-thumb{width:1rem;height:1rem;margin-top:0;margin-right:.2rem;margin-left:.2rem;background-color:#007bff;border:0;border-radius:1rem;transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out;appearance:none}@media (prefers-reduced-motion:reduce){.custom-range::-ms-thumb{transition:none}}.custom-range::-ms-thumb:active{background-color:#b3d7ff}.custom-range::-ms-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:transparent;border-color:transparent;border-width:.5rem}.custom-range::-ms-fill-lower{background-color:#dee2e6;border-radius:1rem}.custom-range::-ms-fill-upper{margin-right:15px;background-color:#dee2e6;border-radius:1rem}.custom-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.custom-range:disabled::-webkit-slider-runnable-track{cursor:default}.custom-range:disabled::-moz-range-thumb{background-color:#adb5bd}.custom-range:disabled::-moz-range-track{cursor:default}.custom-range:disabled::-ms-thumb{background-color:#adb5bd}.custom-control-label::before,.custom-file-label,.custom-select{transition:background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.custom-control-label::before,.custom-file-label,.custom-select{transition:none}}.nav{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:.5rem 1rem}.nav-link:focus,.nav-link:hover{text-decoration:none}.nav-link.disabled{color:#6c757d;pointer-events:none;cursor:default}.nav-tabs{border-bottom:1px solid #dee2e6}.nav-tabs .nav-item{margin-bottom:-1px}.nav-tabs .nav-link{border:1px solid transparent;border-top-left-radius:.25rem;border-top-right-radius:.25rem}.nav-tabs .nav-link:focus,.nav-tabs .nav-link:hover{border-color:#e9ecef #e9ecef #dee2e6}.nav-tabs .nav-link.disabled{color:#6c757d;background-color:transparent;border-color:transparent}.nav-tabs .nav-item.show .nav-link,.nav-tabs .nav-link.active{color:#495057;background-color:#fff;border-color:#dee2e6 #dee2e6 #fff}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-left-radius:0;border-top-right-radius:0}.nav-pills .nav-link{border-radius:.25rem}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:#fff;background-color:#007bff}.nav-fill .nav-item{-ms-flex:1 1 auto;flex:1 1 auto;text-align:center}.nav-justified .nav-item{-ms-flex-preferred-size:0;flex-basis:0;-ms-flex-positive:1;flex-grow:1;text-align:center}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{position:relative;display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;padding:.5rem 1rem}.navbar>.container,.navbar>.container-fluid{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between}.navbar-brand{display:inline-block;padding-top:.3125rem;padding-bottom:.3125rem;margin-right:1rem;font-size:1.25rem;line-height:inherit;white-space:nowrap}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-nav{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .nav-link{padding-right:0;padding-left:0}.navbar-nav .dropdown-menu{position:static;float:none}.navbar-text{display:inline-block;padding-top:.5rem;padding-bottom:.5rem}.navbar-collapse{-ms-flex-preferred-size:100%;flex-basis:100%;-ms-flex-positive:1;flex-grow:1;-ms-flex-align:center;align-items:center}.navbar-toggler{padding:.25rem .75rem;font-size:1.25rem;line-height:1;background-color:transparent;border:1px solid transparent;border-radius:.25rem}.navbar-toggler:focus,.navbar-toggler:hover{text-decoration:none}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;content:\"\";background:no-repeat center center;background-size:100% 100%}@media (max-width:575.98px){.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:576px){.navbar-expand-sm{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-sm .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-sm>.container,.navbar-expand-sm>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-sm .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}}@media (max-width:767.98px){.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:768px){.navbar-expand-md{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-md .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-md>.container,.navbar-expand-md>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-md .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}}@media (max-width:991.98px){.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:992px){.navbar-expand-lg{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-lg .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-lg>.container,.navbar-expand-lg>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-lg .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}}@media (max-width:1199.98px){.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{padding-right:0;padding-left:0}}@media (min-width:1200px){.navbar-expand-xl{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand-xl .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand-xl>.container,.navbar-expand-xl>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand-xl .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}}.navbar-expand{-ms-flex-flow:row nowrap;flex-flow:row nowrap;-ms-flex-pack:start;justify-content:flex-start}.navbar-expand>.container,.navbar-expand>.container-fluid{padding-right:0;padding-left:0}.navbar-expand .navbar-nav{-ms-flex-direction:row;flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:.5rem;padding-left:.5rem}.navbar-expand>.container,.navbar-expand>.container-fluid{-ms-flex-wrap:nowrap;flex-wrap:nowrap}.navbar-expand .navbar-collapse{display:-ms-flexbox!important;display:flex!important;-ms-flex-preferred-size:auto;flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-light .navbar-brand{color:rgba(0,0,0,.9)}.navbar-light .navbar-brand:focus,.navbar-light .navbar-brand:hover{color:rgba(0,0,0,.9)}.navbar-light .navbar-nav .nav-link{color:rgba(0,0,0,.5)}.navbar-light .navbar-nav .nav-link:focus,.navbar-light .navbar-nav .nav-link:hover{color:rgba(0,0,0,.7)}.navbar-light .navbar-nav .nav-link.disabled{color:rgba(0,0,0,.3)}.navbar-light .navbar-nav .active>.nav-link,.navbar-light .navbar-nav .nav-link.active,.navbar-light .navbar-nav .nav-link.show,.navbar-light .navbar-nav .show>.nav-link{color:rgba(0,0,0,.9)}.navbar-light .navbar-toggler{color:rgba(0,0,0,.5);border-color:rgba(0,0,0,.1)}.navbar-light .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(0, 0, 0, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-light .navbar-text{color:rgba(0,0,0,.5)}.navbar-light .navbar-text a{color:rgba(0,0,0,.9)}.navbar-light .navbar-text a:focus,.navbar-light .navbar-text a:hover{color:rgba(0,0,0,.9)}.navbar-dark .navbar-brand{color:#fff}.navbar-dark .navbar-brand:focus,.navbar-dark .navbar-brand:hover{color:#fff}.navbar-dark .navbar-nav .nav-link{color:rgba(255,255,255,.5)}.navbar-dark .navbar-nav .nav-link:focus,.navbar-dark .navbar-nav .nav-link:hover{color:rgba(255,255,255,.75)}.navbar-dark .navbar-nav .nav-link.disabled{color:rgba(255,255,255,.25)}.navbar-dark .navbar-nav .active>.nav-link,.navbar-dark .navbar-nav .nav-link.active,.navbar-dark .navbar-nav .nav-link.show,.navbar-dark .navbar-nav .show>.nav-link{color:#fff}.navbar-dark .navbar-toggler{color:rgba(255,255,255,.5);border-color:rgba(255,255,255,.1)}.navbar-dark .navbar-toggler-icon{background-image:url(\"data:image/svg+xml,%3csvg viewBox='0 0 30 30' xmlns='http://www.w3.org/2000/svg'%3e%3cpath stroke='rgba(255, 255, 255, 0.5)' stroke-width='2' stroke-linecap='round' stroke-miterlimit='10' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e\")}.navbar-dark .navbar-text{color:rgba(255,255,255,.5)}.navbar-dark .navbar-text a{color:#fff}.navbar-dark .navbar-text a:focus,.navbar-dark .navbar-text a:hover{color:#fff}.card{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;min-width:0;word-wrap:break-word;background-color:#fff;background-clip:border-box;border:1px solid rgba(0,0,0,.125);border-radius:.25rem}.card>hr{margin-right:0;margin-left:0}.card>.list-group:first-child .list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.card>.list-group:last-child .list-group-item:last-child{border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.card-body{-ms-flex:1 1 auto;flex:1 1 auto;padding:1.25rem}.card-title{margin-bottom:.75rem}.card-subtitle{margin-top:-.375rem;margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link:hover{text-decoration:none}.card-link+.card-link{margin-left:1.25rem}.card-header{padding:.75rem 1.25rem;margin-bottom:0;background-color:rgba(0,0,0,.03);border-bottom:1px solid rgba(0,0,0,.125)}.card-header:first-child{border-radius:calc(.25rem - 1px) calc(.25rem - 1px) 0 0}.card-header+.list-group .list-group-item:first-child{border-top:0}.card-footer{padding:.75rem 1.25rem;background-color:rgba(0,0,0,.03);border-top:1px solid rgba(0,0,0,.125)}.card-footer:last-child{border-radius:0 0 calc(.25rem - 1px) calc(.25rem - 1px)}.card-header-tabs{margin-right:-.625rem;margin-bottom:-.75rem;margin-left:-.625rem;border-bottom:0}.card-header-pills{margin-right:-.625rem;margin-left:-.625rem}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:1.25rem}.card-img{width:100%;border-radius:calc(.25rem - 1px)}.card-img-top{width:100%;border-top-left-radius:calc(.25rem - 1px);border-top-right-radius:calc(.25rem - 1px)}.card-img-bottom{width:100%;border-bottom-right-radius:calc(.25rem - 1px);border-bottom-left-radius:calc(.25rem - 1px)}.card-deck{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-deck .card{margin-bottom:15px}@media (min-width:576px){.card-deck{-ms-flex-flow:row wrap;flex-flow:row wrap;margin-right:-15px;margin-left:-15px}.card-deck .card{display:-ms-flexbox;display:flex;-ms-flex:1 0 0%;flex:1 0 0%;-ms-flex-direction:column;flex-direction:column;margin-right:15px;margin-bottom:0;margin-left:15px}}.card-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column}.card-group>.card{margin-bottom:15px}@media (min-width:576px){.card-group{-ms-flex-flow:row wrap;flex-flow:row wrap}.card-group>.card{-ms-flex:1 0 0%;flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-header,.card-group>.card:not(:last-child) .card-img-top{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-footer,.card-group>.card:not(:last-child) .card-img-bottom{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-header,.card-group>.card:not(:first-child) .card-img-top{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-footer,.card-group>.card:not(:first-child) .card-img-bottom{border-bottom-left-radius:0}}.card-columns .card{margin-bottom:.75rem}@media (min-width:576px){.card-columns{-webkit-column-count:3;-moz-column-count:3;column-count:3;-webkit-column-gap:1.25rem;-moz-column-gap:1.25rem;column-gap:1.25rem;orphans:1;widows:1}.card-columns .card{display:inline-block;width:100%}}.accordion>.card{overflow:hidden}.accordion>.card:not(:first-of-type) .card-header:first-child{border-radius:0}.accordion>.card:not(:first-of-type):not(:last-of-type){border-bottom:0;border-radius:0}.accordion>.card:first-of-type{border-bottom:0;border-bottom-right-radius:0;border-bottom-left-radius:0}.accordion>.card:last-of-type{border-top-left-radius:0;border-top-right-radius:0}.accordion>.card .card-header{margin-bottom:-1px}.breadcrumb{display:-ms-flexbox;display:flex;-ms-flex-wrap:wrap;flex-wrap:wrap;padding:.75rem 1rem;margin-bottom:1rem;list-style:none;background-color:#e9ecef;border-radius:.25rem}.breadcrumb-item+.breadcrumb-item{padding-left:.5rem}.breadcrumb-item+.breadcrumb-item::before{display:inline-block;padding-right:.5rem;color:#6c757d;content:\"/\"}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:underline}.breadcrumb-item+.breadcrumb-item:hover::before{text-decoration:none}.breadcrumb-item.active{color:#6c757d}.pagination{display:-ms-flexbox;display:flex;padding-left:0;list-style:none;border-radius:.25rem}.page-link{position:relative;display:block;padding:.5rem .75rem;margin-left:-1px;line-height:1.25;color:#007bff;background-color:#fff;border:1px solid #dee2e6}.page-link:hover{z-index:2;color:#0056b3;text-decoration:none;background-color:#e9ecef;border-color:#dee2e6}.page-link:focus{z-index:2;outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.25)}.page-item:first-child .page-link{margin-left:0;border-top-left-radius:.25rem;border-bottom-left-radius:.25rem}.page-item:last-child .page-link{border-top-right-radius:.25rem;border-bottom-right-radius:.25rem}.page-item.active .page-link{z-index:1;color:#fff;background-color:#007bff;border-color:#007bff}.page-item.disabled .page-link{color:#6c757d;pointer-events:none;cursor:auto;background-color:#fff;border-color:#dee2e6}.pagination-lg .page-link{padding:.75rem 1.5rem;font-size:1.25rem;line-height:1.5}.pagination-lg .page-item:first-child .page-link{border-top-left-radius:.3rem;border-bottom-left-radius:.3rem}.pagination-lg .page-item:last-child .page-link{border-top-right-radius:.3rem;border-bottom-right-radius:.3rem}.pagination-sm .page-link{padding:.25rem .5rem;font-size:.875rem;line-height:1.5}.pagination-sm .page-item:first-child .page-link{border-top-left-radius:.2rem;border-bottom-left-radius:.2rem}.pagination-sm .page-item:last-child .page-link{border-top-right-radius:.2rem;border-bottom-right-radius:.2rem}.badge{display:inline-block;padding:.25em .4em;font-size:75%;font-weight:700;line-height:1;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25rem;transition:color .15s ease-in-out,background-color .15s ease-in-out,border-color .15s ease-in-out,box-shadow .15s ease-in-out}@media (prefers-reduced-motion:reduce){.badge{transition:none}}a.badge:focus,a.badge:hover{text-decoration:none}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.badge-pill{padding-right:.6em;padding-left:.6em;border-radius:10rem}.badge-primary{color:#fff;background-color:#007bff}a.badge-primary:focus,a.badge-primary:hover{color:#fff;background-color:#0062cc}a.badge-primary.focus,a.badge-primary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(0,123,255,.5)}.badge-secondary{color:#fff;background-color:#6c757d}a.badge-secondary:focus,a.badge-secondary:hover{color:#fff;background-color:#545b62}a.badge-secondary.focus,a.badge-secondary:focus{outline:0;box-shadow:0 0 0 .2rem rgba(108,117,125,.5)}.badge-success{color:#fff;background-color:#28a745}a.badge-success:focus,a.badge-success:hover{color:#fff;background-color:#1e7e34}a.badge-success.focus,a.badge-success:focus{outline:0;box-shadow:0 0 0 .2rem rgba(40,167,69,.5)}.badge-info{color:#fff;background-color:#17a2b8}a.badge-info:focus,a.badge-info:hover{color:#fff;background-color:#117a8b}a.badge-info.focus,a.badge-info:focus{outline:0;box-shadow:0 0 0 .2rem rgba(23,162,184,.5)}.badge-warning{color:#212529;background-color:#ffc107}a.badge-warning:focus,a.badge-warning:hover{color:#212529;background-color:#d39e00}a.badge-warning.focus,a.badge-warning:focus{outline:0;box-shadow:0 0 0 .2rem rgba(255,193,7,.5)}.badge-danger{color:#fff;background-color:#dc3545}a.badge-danger:focus,a.badge-danger:hover{color:#fff;background-color:#bd2130}a.badge-danger.focus,a.badge-danger:focus{outline:0;box-shadow:0 0 0 .2rem rgba(220,53,69,.5)}.badge-light{color:#212529;background-color:#f8f9fa}a.badge-light:focus,a.badge-light:hover{color:#212529;background-color:#dae0e5}a.badge-light.focus,a.badge-light:focus{outline:0;box-shadow:0 0 0 .2rem rgba(248,249,250,.5)}.badge-dark{color:#fff;background-color:#343a40}a.badge-dark:focus,a.badge-dark:hover{color:#fff;background-color:#1d2124}a.badge-dark.focus,a.badge-dark:focus{outline:0;box-shadow:0 0 0 .2rem rgba(52,58,64,.5)}.jumbotron{padding:2rem 1rem;margin-bottom:2rem;background-color:#e9ecef;border-radius:.3rem}@media (min-width:576px){.jumbotron{padding:4rem 2rem}}.jumbotron-fluid{padding-right:0;padding-left:0;border-radius:0}.alert{position:relative;padding:.75rem 1.25rem;margin-bottom:1rem;border:1px solid transparent;border-radius:.25rem}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:4rem}.alert-dismissible .close{position:absolute;top:0;right:0;padding:.75rem 1.25rem;color:inherit}.alert-primary{color:#004085;background-color:#cce5ff;border-color:#b8daff}.alert-primary hr{border-top-color:#9fcdff}.alert-primary .alert-link{color:#002752}.alert-secondary{color:#383d41;background-color:#e2e3e5;border-color:#d6d8db}.alert-secondary hr{border-top-color:#c8cbcf}.alert-secondary .alert-link{color:#202326}.alert-success{color:#155724;background-color:#d4edda;border-color:#c3e6cb}.alert-success hr{border-top-color:#b1dfbb}.alert-success .alert-link{color:#0b2e13}.alert-info{color:#0c5460;background-color:#d1ecf1;border-color:#bee5eb}.alert-info hr{border-top-color:#abdde5}.alert-info .alert-link{color:#062c33}.alert-warning{color:#856404;background-color:#fff3cd;border-color:#ffeeba}.alert-warning hr{border-top-color:#ffe8a1}.alert-warning .alert-link{color:#533f03}.alert-danger{color:#721c24;background-color:#f8d7da;border-color:#f5c6cb}.alert-danger hr{border-top-color:#f1b0b7}.alert-danger .alert-link{color:#491217}.alert-light{color:#818182;background-color:#fefefe;border-color:#fdfdfe}.alert-light hr{border-top-color:#ececf6}.alert-light .alert-link{color:#686868}.alert-dark{color:#1b1e21;background-color:#d6d8d9;border-color:#c6c8ca}.alert-dark hr{border-top-color:#b9bbbe}.alert-dark .alert-link{color:#040505}@-webkit-keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:1rem 0}to{background-position:0 0}}.progress{display:-ms-flexbox;display:flex;height:1rem;overflow:hidden;font-size:.75rem;background-color:#e9ecef;border-radius:.25rem}.progress-bar{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;color:#fff;text-align:center;white-space:nowrap;background-color:#007bff;transition:width .6s ease}@media (prefers-reduced-motion:reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:1rem 1rem}.progress-bar-animated{-webkit-animation:progress-bar-stripes 1s linear infinite;animation:progress-bar-stripes 1s linear infinite}@media (prefers-reduced-motion:reduce){.progress-bar-animated{-webkit-animation:none;animation:none}}.media{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start}.media-body{-ms-flex:1;flex:1}.list-group{display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;padding-left:0;margin-bottom:0}.list-group-item-action{width:100%;color:#495057;text-align:inherit}.list-group-item-action:focus,.list-group-item-action:hover{z-index:1;color:#495057;text-decoration:none;background-color:#f8f9fa}.list-group-item-action:active{color:#212529;background-color:#e9ecef}.list-group-item{position:relative;display:block;padding:.75rem 1.25rem;margin-bottom:-1px;background-color:#fff;border:1px solid rgba(0,0,0,.125)}.list-group-item:first-child{border-top-left-radius:.25rem;border-top-right-radius:.25rem}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:.25rem;border-bottom-left-radius:.25rem}.list-group-item.disabled,.list-group-item:disabled{color:#6c757d;pointer-events:none;background-color:#fff}.list-group-item.active{z-index:2;color:#fff;background-color:#007bff;border-color:#007bff}.list-group-horizontal{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}@media (min-width:576px){.list-group-horizontal-sm{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-sm .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-sm .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-sm .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:768px){.list-group-horizontal-md{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-md .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-md .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-md .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:992px){.list-group-horizontal-lg{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-lg .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-lg .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-lg .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}@media (min-width:1200px){.list-group-horizontal-xl{-ms-flex-direction:row;flex-direction:row}.list-group-horizontal-xl .list-group-item{margin-right:-1px;margin-bottom:0}.list-group-horizontal-xl .list-group-item:first-child{border-top-left-radius:.25rem;border-bottom-left-radius:.25rem;border-top-right-radius:0}.list-group-horizontal-xl .list-group-item:last-child{margin-right:0;border-top-right-radius:.25rem;border-bottom-right-radius:.25rem;border-bottom-left-radius:0}}.list-group-flush .list-group-item{border-right:0;border-left:0;border-radius:0}.list-group-flush .list-group-item:last-child{margin-bottom:-1px}.list-group-flush:first-child .list-group-item:first-child{border-top:0}.list-group-flush:last-child .list-group-item:last-child{margin-bottom:0;border-bottom:0}.list-group-item-primary{color:#004085;background-color:#b8daff}.list-group-item-primary.list-group-item-action:focus,.list-group-item-primary.list-group-item-action:hover{color:#004085;background-color:#9fcdff}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#004085;border-color:#004085}.list-group-item-secondary{color:#383d41;background-color:#d6d8db}.list-group-item-secondary.list-group-item-action:focus,.list-group-item-secondary.list-group-item-action:hover{color:#383d41;background-color:#c8cbcf}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#383d41;border-color:#383d41}.list-group-item-success{color:#155724;background-color:#c3e6cb}.list-group-item-success.list-group-item-action:focus,.list-group-item-success.list-group-item-action:hover{color:#155724;background-color:#b1dfbb}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#155724;border-color:#155724}.list-group-item-info{color:#0c5460;background-color:#bee5eb}.list-group-item-info.list-group-item-action:focus,.list-group-item-info.list-group-item-action:hover{color:#0c5460;background-color:#abdde5}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#0c5460;border-color:#0c5460}.list-group-item-warning{color:#856404;background-color:#ffeeba}.list-group-item-warning.list-group-item-action:focus,.list-group-item-warning.list-group-item-action:hover{color:#856404;background-color:#ffe8a1}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#856404;border-color:#856404}.list-group-item-danger{color:#721c24;background-color:#f5c6cb}.list-group-item-danger.list-group-item-action:focus,.list-group-item-danger.list-group-item-action:hover{color:#721c24;background-color:#f1b0b7}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#721c24;border-color:#721c24}.list-group-item-light{color:#818182;background-color:#fdfdfe}.list-group-item-light.list-group-item-action:focus,.list-group-item-light.list-group-item-action:hover{color:#818182;background-color:#ececf6}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#818182;border-color:#818182}.list-group-item-dark{color:#1b1e21;background-color:#c6c8ca}.list-group-item-dark.list-group-item-action:focus,.list-group-item-dark.list-group-item-action:hover{color:#1b1e21;background-color:#b9bbbe}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#1b1e21;border-color:#1b1e21}.close{float:right;font-size:1.5rem;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.5}.close:hover{color:#000;text-decoration:none}.close:not(:disabled):not(.disabled):focus,.close:not(:disabled):not(.disabled):hover{opacity:.75}button.close{padding:0;background-color:transparent;border:0;-webkit-appearance:none;-moz-appearance:none;appearance:none}a.close.disabled{pointer-events:none}.toast{max-width:350px;overflow:hidden;font-size:.875rem;background-color:rgba(255,255,255,.85);background-clip:padding-box;border:1px solid rgba(0,0,0,.1);box-shadow:0 .25rem .75rem rgba(0,0,0,.1);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);opacity:0;border-radius:.25rem}.toast:not(:last-child){margin-bottom:.75rem}.toast.showing{opacity:1}.toast.show{display:block;opacity:1}.toast.hide{display:none}.toast-header{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;padding:.25rem .75rem;color:#6c757d;background-color:rgba(255,255,255,.85);background-clip:padding-box;border-bottom:1px solid rgba(0,0,0,.05)}.toast-body{padding:.75rem}.modal-open{overflow:hidden}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal{position:fixed;top:0;left:0;z-index:1050;display:none;width:100%;height:100%;overflow:hidden;outline:0}.modal-dialog{position:relative;width:auto;margin:.5rem;pointer-events:none}.modal.fade .modal-dialog{transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out;-webkit-transform:translate(0,-50px);transform:translate(0,-50px)}@media (prefers-reduced-motion:reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{-webkit-transform:none;transform:none}.modal-dialog-scrollable{display:-ms-flexbox;display:flex;max-height:calc(100% - 1rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 1rem);overflow:hidden}.modal-dialog-scrollable .modal-footer,.modal-dialog-scrollable .modal-header{-ms-flex-negative:0;flex-shrink:0}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;min-height:calc(100% - 1rem)}.modal-dialog-centered::before{display:block;height:calc(100vh - 1rem);content:\"\"}.modal-dialog-centered.modal-dialog-scrollable{-ms-flex-direction:column;flex-direction:column;-ms-flex-pack:center;justify-content:center;height:100%}.modal-dialog-centered.modal-dialog-scrollable .modal-content{max-height:none}.modal-dialog-centered.modal-dialog-scrollable::before{content:none}.modal-content{position:relative;display:-ms-flexbox;display:flex;-ms-flex-direction:column;flex-direction:column;width:100%;pointer-events:auto;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem;outline:0}.modal-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:.5}.modal-header{display:-ms-flexbox;display:flex;-ms-flex-align:start;align-items:flex-start;-ms-flex-pack:justify;justify-content:space-between;padding:1rem 1rem;border-bottom:1px solid #dee2e6;border-top-left-radius:.3rem;border-top-right-radius:.3rem}.modal-header .close{padding:1rem 1rem;margin:-1rem -1rem -1rem auto}.modal-title{margin-bottom:0;line-height:1.5}.modal-body{position:relative;-ms-flex:1 1 auto;flex:1 1 auto;padding:1rem}.modal-footer{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:end;justify-content:flex-end;padding:1rem;border-top:1px solid #dee2e6;border-bottom-right-radius:.3rem;border-bottom-left-radius:.3rem}.modal-footer>:not(:first-child){margin-left:.25rem}.modal-footer>:not(:last-child){margin-right:.25rem}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:576px){.modal-dialog{max-width:500px;margin:1.75rem auto}.modal-dialog-scrollable{max-height:calc(100% - 3.5rem)}.modal-dialog-scrollable .modal-content{max-height:calc(100vh - 3.5rem)}.modal-dialog-centered{min-height:calc(100% - 3.5rem)}.modal-dialog-centered::before{height:calc(100vh - 3.5rem)}.modal-sm{max-width:300px}}@media (min-width:992px){.modal-lg,.modal-xl{max-width:800px}}@media (min-width:1200px){.modal-xl{max-width:1140px}}.tooltip{position:absolute;z-index:1070;display:block;margin:0;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;opacity:0}.tooltip.show{opacity:.9}.tooltip .arrow{position:absolute;display:block;width:.8rem;height:.4rem}.tooltip .arrow::before{position:absolute;content:\"\";border-color:transparent;border-style:solid}.bs-tooltip-auto[x-placement^=top],.bs-tooltip-top{padding:.4rem 0}.bs-tooltip-auto[x-placement^=top] .arrow,.bs-tooltip-top .arrow{bottom:0}.bs-tooltip-auto[x-placement^=top] .arrow::before,.bs-tooltip-top .arrow::before{top:0;border-width:.4rem .4rem 0;border-top-color:#000}.bs-tooltip-auto[x-placement^=right],.bs-tooltip-right{padding:0 .4rem}.bs-tooltip-auto[x-placement^=right] .arrow,.bs-tooltip-right .arrow{left:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=right] .arrow::before,.bs-tooltip-right .arrow::before{right:0;border-width:.4rem .4rem .4rem 0;border-right-color:#000}.bs-tooltip-auto[x-placement^=bottom],.bs-tooltip-bottom{padding:.4rem 0}.bs-tooltip-auto[x-placement^=bottom] .arrow,.bs-tooltip-bottom .arrow{top:0}.bs-tooltip-auto[x-placement^=bottom] .arrow::before,.bs-tooltip-bottom .arrow::before{bottom:0;border-width:0 .4rem .4rem;border-bottom-color:#000}.bs-tooltip-auto[x-placement^=left],.bs-tooltip-left{padding:0 .4rem}.bs-tooltip-auto[x-placement^=left] .arrow,.bs-tooltip-left .arrow{right:0;width:.4rem;height:.8rem}.bs-tooltip-auto[x-placement^=left] .arrow::before,.bs-tooltip-left .arrow::before{left:0;border-width:.4rem 0 .4rem .4rem;border-left-color:#000}.tooltip-inner{max-width:200px;padding:.25rem .5rem;color:#fff;text-align:center;background-color:#000;border-radius:.25rem}.popover{position:absolute;top:0;left:0;z-index:1060;display:block;max-width:276px;font-family:-apple-system,BlinkMacSystemFont,\"Segoe UI\",Roboto,\"Helvetica Neue\",Arial,\"Noto Sans\",sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\",\"Segoe UI Symbol\",\"Noto Color Emoji\";font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;word-spacing:normal;white-space:normal;line-break:auto;font-size:.875rem;word-wrap:break-word;background-color:#fff;background-clip:padding-box;border:1px solid rgba(0,0,0,.2);border-radius:.3rem}.popover .arrow{position:absolute;display:block;width:1rem;height:.5rem;margin:0 .3rem}.popover .arrow::after,.popover .arrow::before{position:absolute;display:block;content:\"\";border-color:transparent;border-style:solid}.bs-popover-auto[x-placement^=top],.bs-popover-top{margin-bottom:.5rem}.bs-popover-auto[x-placement^=top]>.arrow,.bs-popover-top>.arrow{bottom:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=top]>.arrow::before,.bs-popover-top>.arrow::before{bottom:0;border-width:.5rem .5rem 0;border-top-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=top]>.arrow::after,.bs-popover-top>.arrow::after{bottom:1px;border-width:.5rem .5rem 0;border-top-color:#fff}.bs-popover-auto[x-placement^=right],.bs-popover-right{margin-left:.5rem}.bs-popover-auto[x-placement^=right]>.arrow,.bs-popover-right>.arrow{left:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=right]>.arrow::before,.bs-popover-right>.arrow::before{left:0;border-width:.5rem .5rem .5rem 0;border-right-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=right]>.arrow::after,.bs-popover-right>.arrow::after{left:1px;border-width:.5rem .5rem .5rem 0;border-right-color:#fff}.bs-popover-auto[x-placement^=bottom],.bs-popover-bottom{margin-top:.5rem}.bs-popover-auto[x-placement^=bottom]>.arrow,.bs-popover-bottom>.arrow{top:calc((.5rem + 1px) * -1)}.bs-popover-auto[x-placement^=bottom]>.arrow::before,.bs-popover-bottom>.arrow::before{top:0;border-width:0 .5rem .5rem .5rem;border-bottom-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=bottom]>.arrow::after,.bs-popover-bottom>.arrow::after{top:1px;border-width:0 .5rem .5rem .5rem;border-bottom-color:#fff}.bs-popover-auto[x-placement^=bottom] .popover-header::before,.bs-popover-bottom .popover-header::before{position:absolute;top:0;left:50%;display:block;width:1rem;margin-left:-.5rem;content:\"\";border-bottom:1px solid #f7f7f7}.bs-popover-auto[x-placement^=left],.bs-popover-left{margin-right:.5rem}.bs-popover-auto[x-placement^=left]>.arrow,.bs-popover-left>.arrow{right:calc((.5rem + 1px) * -1);width:.5rem;height:1rem;margin:.3rem 0}.bs-popover-auto[x-placement^=left]>.arrow::before,.bs-popover-left>.arrow::before{right:0;border-width:.5rem 0 .5rem .5rem;border-left-color:rgba(0,0,0,.25)}.bs-popover-auto[x-placement^=left]>.arrow::after,.bs-popover-left>.arrow::after{right:1px;border-width:.5rem 0 .5rem .5rem;border-left-color:#fff}.popover-header{padding:.5rem .75rem;margin-bottom:0;font-size:1rem;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-top-left-radius:calc(.3rem - 1px);border-top-right-radius:calc(.3rem - 1px)}.popover-header:empty{display:none}.popover-body{padding:.5rem .75rem;color:#212529}.carousel{position:relative}.carousel.pointer-event{-ms-touch-action:pan-y;touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:\"\"}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;-webkit-backface-visibility:hidden;backface-visibility:hidden;transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out}@media (prefers-reduced-motion:reduce){.carousel-item{transition:none}}.carousel-item-next,.carousel-item-prev,.carousel-item.active{display:block}.active.carousel-item-right,.carousel-item-next:not(.carousel-item-left){-webkit-transform:translateX(100%);transform:translateX(100%)}.active.carousel-item-left,.carousel-item-prev:not(.carousel-item-right){-webkit-transform:translateX(-100%);transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;-webkit-transform:none;transform:none}.carousel-fade .carousel-item-next.carousel-item-left,.carousel-fade .carousel-item-prev.carousel-item-right,.carousel-fade .carousel-item.active{z-index:1;opacity:1}.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{z-index:0;opacity:0;transition:0s .6s opacity}@media (prefers-reduced-motion:reduce){.carousel-fade .active.carousel-item-left,.carousel-fade .active.carousel-item-right{transition:none}}.carousel-control-next,.carousel-control-prev{position:absolute;top:0;bottom:0;z-index:1;display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-ms-flex-pack:center;justify-content:center;width:15%;color:#fff;text-align:center;opacity:.5;transition:opacity .15s ease}@media (prefers-reduced-motion:reduce){.carousel-control-next,.carousel-control-prev{transition:none}}.carousel-control-next:focus,.carousel-control-next:hover,.carousel-control-prev:focus,.carousel-control-prev:hover{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-next-icon,.carousel-control-prev-icon{display:inline-block;width:20px;height:20px;background:no-repeat 50%/100% 100%}.carousel-control-prev-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M5.25 0l-4 4 4 4 1.5-1.5-2.5-2.5 2.5-2.5-1.5-1.5z'/%3e%3c/svg%3e\")}.carousel-control-next-icon{background-image:url(\"data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='%23fff' viewBox='0 0 8 8'%3e%3cpath d='M2.75 0l-1.5 1.5 2.5 2.5-2.5 2.5 1.5 1.5 4-4-4-4z'/%3e%3c/svg%3e\")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:15;display:-ms-flexbox;display:flex;-ms-flex-pack:center;justify-content:center;padding-left:0;margin-right:15%;margin-left:15%;list-style:none}.carousel-indicators li{box-sizing:content-box;-ms-flex:0 1 auto;flex:0 1 auto;width:30px;height:3px;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity .6s ease}@media (prefers-reduced-motion:reduce){.carousel-indicators li{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:20px;left:15%;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center}@-webkit-keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}@keyframes spinner-border{to{-webkit-transform:rotate(360deg);transform:rotate(360deg)}}.spinner-border{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;border:.25em solid currentColor;border-right-color:transparent;border-radius:50%;-webkit-animation:spinner-border .75s linear infinite;animation:spinner-border .75s linear infinite}.spinner-border-sm{width:1rem;height:1rem;border-width:.2em}@-webkit-keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}@keyframes spinner-grow{0%{-webkit-transform:scale(0);transform:scale(0)}50%{opacity:1}}.spinner-grow{display:inline-block;width:2rem;height:2rem;vertical-align:text-bottom;background-color:currentColor;border-radius:50%;opacity:0;-webkit-animation:spinner-grow .75s linear infinite;animation:spinner-grow .75s linear infinite}.spinner-grow-sm{width:1rem;height:1rem}.align-baseline{vertical-align:baseline!important}.align-top{vertical-align:top!important}.align-middle{vertical-align:middle!important}.align-bottom{vertical-align:bottom!important}.align-text-bottom{vertical-align:text-bottom!important}.align-text-top{vertical-align:text-top!important}.bg-primary{background-color:#007bff!important}a.bg-primary:focus,a.bg-primary:hover,button.bg-primary:focus,button.bg-primary:hover{background-color:#0062cc!important}.bg-secondary{background-color:#6c757d!important}a.bg-secondary:focus,a.bg-secondary:hover,button.bg-secondary:focus,button.bg-secondary:hover{background-color:#545b62!important}.bg-success{background-color:#28a745!important}a.bg-success:focus,a.bg-success:hover,button.bg-success:focus,button.bg-success:hover{background-color:#1e7e34!important}.bg-info{background-color:#17a2b8!important}a.bg-info:focus,a.bg-info:hover,button.bg-info:focus,button.bg-info:hover{background-color:#117a8b!important}.bg-warning{background-color:#ffc107!important}a.bg-warning:focus,a.bg-warning:hover,button.bg-warning:focus,button.bg-warning:hover{background-color:#d39e00!important}.bg-danger{background-color:#dc3545!important}a.bg-danger:focus,a.bg-danger:hover,button.bg-danger:focus,button.bg-danger:hover{background-color:#bd2130!important}.bg-light{background-color:#f8f9fa!important}a.bg-light:focus,a.bg-light:hover,button.bg-light:focus,button.bg-light:hover{background-color:#dae0e5!important}.bg-dark{background-color:#343a40!important}a.bg-dark:focus,a.bg-dark:hover,button.bg-dark:focus,button.bg-dark:hover{background-color:#1d2124!important}.bg-white{background-color:#fff!important}.bg-transparent{background-color:transparent!important}.border{border:1px solid #dee2e6!important}.border-top{border-top:1px solid #dee2e6!important}.border-right{border-right:1px solid #dee2e6!important}.border-bottom{border-bottom:1px solid #dee2e6!important}.border-left{border-left:1px solid #dee2e6!important}.border-0{border:0!important}.border-top-0{border-top:0!important}.border-right-0{border-right:0!important}.border-bottom-0{border-bottom:0!important}.border-left-0{border-left:0!important}.border-primary{border-color:#007bff!important}.border-secondary{border-color:#6c757d!important}.border-success{border-color:#28a745!important}.border-info{border-color:#17a2b8!important}.border-warning{border-color:#ffc107!important}.border-danger{border-color:#dc3545!important}.border-light{border-color:#f8f9fa!important}.border-dark{border-color:#343a40!important}.border-white{border-color:#fff!important}.rounded-sm{border-radius:.2rem!important}.rounded{border-radius:.25rem!important}.rounded-top{border-top-left-radius:.25rem!important;border-top-right-radius:.25rem!important}.rounded-right{border-top-right-radius:.25rem!important;border-bottom-right-radius:.25rem!important}.rounded-bottom{border-bottom-right-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-left{border-top-left-radius:.25rem!important;border-bottom-left-radius:.25rem!important}.rounded-lg{border-radius:.3rem!important}.rounded-circle{border-radius:50%!important}.rounded-pill{border-radius:50rem!important}.rounded-0{border-radius:0!important}.clearfix::after{display:block;clear:both;content:\"\"}.d-none{display:none!important}.d-inline{display:inline!important}.d-inline-block{display:inline-block!important}.d-block{display:block!important}.d-table{display:table!important}.d-table-row{display:table-row!important}.d-table-cell{display:table-cell!important}.d-flex{display:-ms-flexbox!important;display:flex!important}.d-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}@media (min-width:576px){.d-sm-none{display:none!important}.d-sm-inline{display:inline!important}.d-sm-inline-block{display:inline-block!important}.d-sm-block{display:block!important}.d-sm-table{display:table!important}.d-sm-table-row{display:table-row!important}.d-sm-table-cell{display:table-cell!important}.d-sm-flex{display:-ms-flexbox!important;display:flex!important}.d-sm-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:768px){.d-md-none{display:none!important}.d-md-inline{display:inline!important}.d-md-inline-block{display:inline-block!important}.d-md-block{display:block!important}.d-md-table{display:table!important}.d-md-table-row{display:table-row!important}.d-md-table-cell{display:table-cell!important}.d-md-flex{display:-ms-flexbox!important;display:flex!important}.d-md-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:992px){.d-lg-none{display:none!important}.d-lg-inline{display:inline!important}.d-lg-inline-block{display:inline-block!important}.d-lg-block{display:block!important}.d-lg-table{display:table!important}.d-lg-table-row{display:table-row!important}.d-lg-table-cell{display:table-cell!important}.d-lg-flex{display:-ms-flexbox!important;display:flex!important}.d-lg-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media (min-width:1200px){.d-xl-none{display:none!important}.d-xl-inline{display:inline!important}.d-xl-inline-block{display:inline-block!important}.d-xl-block{display:block!important}.d-xl-table{display:table!important}.d-xl-table-row{display:table-row!important}.d-xl-table-cell{display:table-cell!important}.d-xl-flex{display:-ms-flexbox!important;display:flex!important}.d-xl-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}@media print{.d-print-none{display:none!important}.d-print-inline{display:inline!important}.d-print-inline-block{display:inline-block!important}.d-print-block{display:block!important}.d-print-table{display:table!important}.d-print-table-row{display:table-row!important}.d-print-table-cell{display:table-cell!important}.d-print-flex{display:-ms-flexbox!important;display:flex!important}.d-print-inline-flex{display:-ms-inline-flexbox!important;display:inline-flex!important}}.embed-responsive{position:relative;display:block;width:100%;padding:0;overflow:hidden}.embed-responsive::before{display:block;content:\"\"}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;bottom:0;left:0;width:100%;height:100%;border:0}.embed-responsive-21by9::before{padding-top:42.857143%}.embed-responsive-16by9::before{padding-top:56.25%}.embed-responsive-4by3::before{padding-top:75%}.embed-responsive-1by1::before{padding-top:100%}.flex-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-center{-ms-flex-align:center!important;align-items:center!important}.align-items-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}@media (min-width:576px){.flex-sm-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-sm-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-sm-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-sm-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-sm-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-sm-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-sm-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-sm-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-sm-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-sm-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-sm-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-sm-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-sm-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-sm-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-sm-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-sm-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-sm-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-sm-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-sm-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-sm-center{-ms-flex-align:center!important;align-items:center!important}.align-items-sm-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-sm-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-sm-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-sm-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-sm-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-sm-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-sm-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-sm-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-sm-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-sm-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-sm-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-sm-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-sm-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-sm-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:768px){.flex-md-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-md-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-md-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-md-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-md-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-md-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-md-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-md-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-md-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-md-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-md-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-md-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-md-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-md-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-md-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-md-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-md-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-md-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-md-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-md-center{-ms-flex-align:center!important;align-items:center!important}.align-items-md-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-md-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-md-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-md-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-md-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-md-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-md-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-md-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-md-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-md-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-md-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-md-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-md-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-md-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:992px){.flex-lg-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-lg-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-lg-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-lg-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-lg-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-lg-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-lg-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-lg-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-lg-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-lg-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-lg-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-lg-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-lg-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-lg-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-lg-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-lg-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-lg-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-lg-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-lg-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-lg-center{-ms-flex-align:center!important;align-items:center!important}.align-items-lg-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-lg-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-lg-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-lg-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-lg-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-lg-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-lg-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-lg-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-lg-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-lg-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-lg-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-lg-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-lg-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-lg-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}@media (min-width:1200px){.flex-xl-row{-ms-flex-direction:row!important;flex-direction:row!important}.flex-xl-column{-ms-flex-direction:column!important;flex-direction:column!important}.flex-xl-row-reverse{-ms-flex-direction:row-reverse!important;flex-direction:row-reverse!important}.flex-xl-column-reverse{-ms-flex-direction:column-reverse!important;flex-direction:column-reverse!important}.flex-xl-wrap{-ms-flex-wrap:wrap!important;flex-wrap:wrap!important}.flex-xl-nowrap{-ms-flex-wrap:nowrap!important;flex-wrap:nowrap!important}.flex-xl-wrap-reverse{-ms-flex-wrap:wrap-reverse!important;flex-wrap:wrap-reverse!important}.flex-xl-fill{-ms-flex:1 1 auto!important;flex:1 1 auto!important}.flex-xl-grow-0{-ms-flex-positive:0!important;flex-grow:0!important}.flex-xl-grow-1{-ms-flex-positive:1!important;flex-grow:1!important}.flex-xl-shrink-0{-ms-flex-negative:0!important;flex-shrink:0!important}.flex-xl-shrink-1{-ms-flex-negative:1!important;flex-shrink:1!important}.justify-content-xl-start{-ms-flex-pack:start!important;justify-content:flex-start!important}.justify-content-xl-end{-ms-flex-pack:end!important;justify-content:flex-end!important}.justify-content-xl-center{-ms-flex-pack:center!important;justify-content:center!important}.justify-content-xl-between{-ms-flex-pack:justify!important;justify-content:space-between!important}.justify-content-xl-around{-ms-flex-pack:distribute!important;justify-content:space-around!important}.align-items-xl-start{-ms-flex-align:start!important;align-items:flex-start!important}.align-items-xl-end{-ms-flex-align:end!important;align-items:flex-end!important}.align-items-xl-center{-ms-flex-align:center!important;align-items:center!important}.align-items-xl-baseline{-ms-flex-align:baseline!important;align-items:baseline!important}.align-items-xl-stretch{-ms-flex-align:stretch!important;align-items:stretch!important}.align-content-xl-start{-ms-flex-line-pack:start!important;align-content:flex-start!important}.align-content-xl-end{-ms-flex-line-pack:end!important;align-content:flex-end!important}.align-content-xl-center{-ms-flex-line-pack:center!important;align-content:center!important}.align-content-xl-between{-ms-flex-line-pack:justify!important;align-content:space-between!important}.align-content-xl-around{-ms-flex-line-pack:distribute!important;align-content:space-around!important}.align-content-xl-stretch{-ms-flex-line-pack:stretch!important;align-content:stretch!important}.align-self-xl-auto{-ms-flex-item-align:auto!important;align-self:auto!important}.align-self-xl-start{-ms-flex-item-align:start!important;align-self:flex-start!important}.align-self-xl-end{-ms-flex-item-align:end!important;align-self:flex-end!important}.align-self-xl-center{-ms-flex-item-align:center!important;align-self:center!important}.align-self-xl-baseline{-ms-flex-item-align:baseline!important;align-self:baseline!important}.align-self-xl-stretch{-ms-flex-item-align:stretch!important;align-self:stretch!important}}.float-left{float:left!important}.float-right{float:right!important}.float-none{float:none!important}@media (min-width:576px){.float-sm-left{float:left!important}.float-sm-right{float:right!important}.float-sm-none{float:none!important}}@media (min-width:768px){.float-md-left{float:left!important}.float-md-right{float:right!important}.float-md-none{float:none!important}}@media (min-width:992px){.float-lg-left{float:left!important}.float-lg-right{float:right!important}.float-lg-none{float:none!important}}@media (min-width:1200px){.float-xl-left{float:left!important}.float-xl-right{float:right!important}.float-xl-none{float:none!important}}.overflow-auto{overflow:auto!important}.overflow-hidden{overflow:hidden!important}.position-static{position:static!important}.position-relative{position:relative!important}.position-absolute{position:absolute!important}.position-fixed{position:fixed!important}.position-sticky{position:-webkit-sticky!important;position:sticky!important}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}@supports ((position:-webkit-sticky) or (position:sticky)){.sticky-top{position:-webkit-sticky;position:sticky;top:0;z-index:1020}}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;overflow:visible;clip:auto;white-space:normal}.shadow-sm{box-shadow:0 .125rem .25rem rgba(0,0,0,.075)!important}.shadow{box-shadow:0 .5rem 1rem rgba(0,0,0,.15)!important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,.175)!important}.shadow-none{box-shadow:none!important}.w-25{width:25%!important}.w-50{width:50%!important}.w-75{width:75%!important}.w-100{width:100%!important}.w-auto{width:auto!important}.h-25{height:25%!important}.h-50{height:50%!important}.h-75{height:75%!important}.h-100{height:100%!important}.h-auto{height:auto!important}.mw-100{max-width:100%!important}.mh-100{max-height:100%!important}.min-vw-100{min-width:100vw!important}.min-vh-100{min-height:100vh!important}.vw-100{width:100vw!important}.vh-100{height:100vh!important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:auto;content:\"\";background-color:rgba(0,0,0,0)}.m-0{margin:0!important}.mt-0,.my-0{margin-top:0!important}.mr-0,.mx-0{margin-right:0!important}.mb-0,.my-0{margin-bottom:0!important}.ml-0,.mx-0{margin-left:0!important}.m-1{margin:.25rem!important}.mt-1,.my-1{margin-top:.25rem!important}.mr-1,.mx-1{margin-right:.25rem!important}.mb-1,.my-1{margin-bottom:.25rem!important}.ml-1,.mx-1{margin-left:.25rem!important}.m-2{margin:.5rem!important}.mt-2,.my-2{margin-top:.5rem!important}.mr-2,.mx-2{margin-right:.5rem!important}.mb-2,.my-2{margin-bottom:.5rem!important}.ml-2,.mx-2{margin-left:.5rem!important}.m-3{margin:1rem!important}.mt-3,.my-3{margin-top:1rem!important}.mr-3,.mx-3{margin-right:1rem!important}.mb-3,.my-3{margin-bottom:1rem!important}.ml-3,.mx-3{margin-left:1rem!important}.m-4{margin:1.5rem!important}.mt-4,.my-4{margin-top:1.5rem!important}.mr-4,.mx-4{margin-right:1.5rem!important}.mb-4,.my-4{margin-bottom:1.5rem!important}.ml-4,.mx-4{margin-left:1.5rem!important}.m-5{margin:3rem!important}.mt-5,.my-5{margin-top:3rem!important}.mr-5,.mx-5{margin-right:3rem!important}.mb-5,.my-5{margin-bottom:3rem!important}.ml-5,.mx-5{margin-left:3rem!important}.p-0{padding:0!important}.pt-0,.py-0{padding-top:0!important}.pr-0,.px-0{padding-right:0!important}.pb-0,.py-0{padding-bottom:0!important}.pl-0,.px-0{padding-left:0!important}.p-1{padding:.25rem!important}.pt-1,.py-1{padding-top:.25rem!important}.pr-1,.px-1{padding-right:.25rem!important}.pb-1,.py-1{padding-bottom:.25rem!important}.pl-1,.px-1{padding-left:.25rem!important}.p-2{padding:.5rem!important}.pt-2,.py-2{padding-top:.5rem!important}.pr-2,.px-2{padding-right:.5rem!important}.pb-2,.py-2{padding-bottom:.5rem!important}.pl-2,.px-2{padding-left:.5rem!important}.p-3{padding:1rem!important}.pt-3,.py-3{padding-top:1rem!important}.pr-3,.px-3{padding-right:1rem!important}.pb-3,.py-3{padding-bottom:1rem!important}.pl-3,.px-3{padding-left:1rem!important}.p-4{padding:1.5rem!important}.pt-4,.py-4{padding-top:1.5rem!important}.pr-4,.px-4{padding-right:1.5rem!important}.pb-4,.py-4{padding-bottom:1.5rem!important}.pl-4,.px-4{padding-left:1.5rem!important}.p-5{padding:3rem!important}.pt-5,.py-5{padding-top:3rem!important}.pr-5,.px-5{padding-right:3rem!important}.pb-5,.py-5{padding-bottom:3rem!important}.pl-5,.px-5{padding-left:3rem!important}.m-n1{margin:-.25rem!important}.mt-n1,.my-n1{margin-top:-.25rem!important}.mr-n1,.mx-n1{margin-right:-.25rem!important}.mb-n1,.my-n1{margin-bottom:-.25rem!important}.ml-n1,.mx-n1{margin-left:-.25rem!important}.m-n2{margin:-.5rem!important}.mt-n2,.my-n2{margin-top:-.5rem!important}.mr-n2,.mx-n2{margin-right:-.5rem!important}.mb-n2,.my-n2{margin-bottom:-.5rem!important}.ml-n2,.mx-n2{margin-left:-.5rem!important}.m-n3{margin:-1rem!important}.mt-n3,.my-n3{margin-top:-1rem!important}.mr-n3,.mx-n3{margin-right:-1rem!important}.mb-n3,.my-n3{margin-bottom:-1rem!important}.ml-n3,.mx-n3{margin-left:-1rem!important}.m-n4{margin:-1.5rem!important}.mt-n4,.my-n4{margin-top:-1.5rem!important}.mr-n4,.mx-n4{margin-right:-1.5rem!important}.mb-n4,.my-n4{margin-bottom:-1.5rem!important}.ml-n4,.mx-n4{margin-left:-1.5rem!important}.m-n5{margin:-3rem!important}.mt-n5,.my-n5{margin-top:-3rem!important}.mr-n5,.mx-n5{margin-right:-3rem!important}.mb-n5,.my-n5{margin-bottom:-3rem!important}.ml-n5,.mx-n5{margin-left:-3rem!important}.m-auto{margin:auto!important}.mt-auto,.my-auto{margin-top:auto!important}.mr-auto,.mx-auto{margin-right:auto!important}.mb-auto,.my-auto{margin-bottom:auto!important}.ml-auto,.mx-auto{margin-left:auto!important}@media (min-width:576px){.m-sm-0{margin:0!important}.mt-sm-0,.my-sm-0{margin-top:0!important}.mr-sm-0,.mx-sm-0{margin-right:0!important}.mb-sm-0,.my-sm-0{margin-bottom:0!important}.ml-sm-0,.mx-sm-0{margin-left:0!important}.m-sm-1{margin:.25rem!important}.mt-sm-1,.my-sm-1{margin-top:.25rem!important}.mr-sm-1,.mx-sm-1{margin-right:.25rem!important}.mb-sm-1,.my-sm-1{margin-bottom:.25rem!important}.ml-sm-1,.mx-sm-1{margin-left:.25rem!important}.m-sm-2{margin:.5rem!important}.mt-sm-2,.my-sm-2{margin-top:.5rem!important}.mr-sm-2,.mx-sm-2{margin-right:.5rem!important}.mb-sm-2,.my-sm-2{margin-bottom:.5rem!important}.ml-sm-2,.mx-sm-2{margin-left:.5rem!important}.m-sm-3{margin:1rem!important}.mt-sm-3,.my-sm-3{margin-top:1rem!important}.mr-sm-3,.mx-sm-3{margin-right:1rem!important}.mb-sm-3,.my-sm-3{margin-bottom:1rem!important}.ml-sm-3,.mx-sm-3{margin-left:1rem!important}.m-sm-4{margin:1.5rem!important}.mt-sm-4,.my-sm-4{margin-top:1.5rem!important}.mr-sm-4,.mx-sm-4{margin-right:1.5rem!important}.mb-sm-4,.my-sm-4{margin-bottom:1.5rem!important}.ml-sm-4,.mx-sm-4{margin-left:1.5rem!important}.m-sm-5{margin:3rem!important}.mt-sm-5,.my-sm-5{margin-top:3rem!important}.mr-sm-5,.mx-sm-5{margin-right:3rem!important}.mb-sm-5,.my-sm-5{margin-bottom:3rem!important}.ml-sm-5,.mx-sm-5{margin-left:3rem!important}.p-sm-0{padding:0!important}.pt-sm-0,.py-sm-0{padding-top:0!important}.pr-sm-0,.px-sm-0{padding-right:0!important}.pb-sm-0,.py-sm-0{padding-bottom:0!important}.pl-sm-0,.px-sm-0{padding-left:0!important}.p-sm-1{padding:.25rem!important}.pt-sm-1,.py-sm-1{padding-top:.25rem!important}.pr-sm-1,.px-sm-1{padding-right:.25rem!important}.pb-sm-1,.py-sm-1{padding-bottom:.25rem!important}.pl-sm-1,.px-sm-1{padding-left:.25rem!important}.p-sm-2{padding:.5rem!important}.pt-sm-2,.py-sm-2{padding-top:.5rem!important}.pr-sm-2,.px-sm-2{padding-right:.5rem!important}.pb-sm-2,.py-sm-2{padding-bottom:.5rem!important}.pl-sm-2,.px-sm-2{padding-left:.5rem!important}.p-sm-3{padding:1rem!important}.pt-sm-3,.py-sm-3{padding-top:1rem!important}.pr-sm-3,.px-sm-3{padding-right:1rem!important}.pb-sm-3,.py-sm-3{padding-bottom:1rem!important}.pl-sm-3,.px-sm-3{padding-left:1rem!important}.p-sm-4{padding:1.5rem!important}.pt-sm-4,.py-sm-4{padding-top:1.5rem!important}.pr-sm-4,.px-sm-4{padding-right:1.5rem!important}.pb-sm-4,.py-sm-4{padding-bottom:1.5rem!important}.pl-sm-4,.px-sm-4{padding-left:1.5rem!important}.p-sm-5{padding:3rem!important}.pt-sm-5,.py-sm-5{padding-top:3rem!important}.pr-sm-5,.px-sm-5{padding-right:3rem!important}.pb-sm-5,.py-sm-5{padding-bottom:3rem!important}.pl-sm-5,.px-sm-5{padding-left:3rem!important}.m-sm-n1{margin:-.25rem!important}.mt-sm-n1,.my-sm-n1{margin-top:-.25rem!important}.mr-sm-n1,.mx-sm-n1{margin-right:-.25rem!important}.mb-sm-n1,.my-sm-n1{margin-bottom:-.25rem!important}.ml-sm-n1,.mx-sm-n1{margin-left:-.25rem!important}.m-sm-n2{margin:-.5rem!important}.mt-sm-n2,.my-sm-n2{margin-top:-.5rem!important}.mr-sm-n2,.mx-sm-n2{margin-right:-.5rem!important}.mb-sm-n2,.my-sm-n2{margin-bottom:-.5rem!important}.ml-sm-n2,.mx-sm-n2{margin-left:-.5rem!important}.m-sm-n3{margin:-1rem!important}.mt-sm-n3,.my-sm-n3{margin-top:-1rem!important}.mr-sm-n3,.mx-sm-n3{margin-right:-1rem!important}.mb-sm-n3,.my-sm-n3{margin-bottom:-1rem!important}.ml-sm-n3,.mx-sm-n3{margin-left:-1rem!important}.m-sm-n4{margin:-1.5rem!important}.mt-sm-n4,.my-sm-n4{margin-top:-1.5rem!important}.mr-sm-n4,.mx-sm-n4{margin-right:-1.5rem!important}.mb-sm-n4,.my-sm-n4{margin-bottom:-1.5rem!important}.ml-sm-n4,.mx-sm-n4{margin-left:-1.5rem!important}.m-sm-n5{margin:-3rem!important}.mt-sm-n5,.my-sm-n5{margin-top:-3rem!important}.mr-sm-n5,.mx-sm-n5{margin-right:-3rem!important}.mb-sm-n5,.my-sm-n5{margin-bottom:-3rem!important}.ml-sm-n5,.mx-sm-n5{margin-left:-3rem!important}.m-sm-auto{margin:auto!important}.mt-sm-auto,.my-sm-auto{margin-top:auto!important}.mr-sm-auto,.mx-sm-auto{margin-right:auto!important}.mb-sm-auto,.my-sm-auto{margin-bottom:auto!important}.ml-sm-auto,.mx-sm-auto{margin-left:auto!important}}@media (min-width:768px){.m-md-0{margin:0!important}.mt-md-0,.my-md-0{margin-top:0!important}.mr-md-0,.mx-md-0{margin-right:0!important}.mb-md-0,.my-md-0{margin-bottom:0!important}.ml-md-0,.mx-md-0{margin-left:0!important}.m-md-1{margin:.25rem!important}.mt-md-1,.my-md-1{margin-top:.25rem!important}.mr-md-1,.mx-md-1{margin-right:.25rem!important}.mb-md-1,.my-md-1{margin-bottom:.25rem!important}.ml-md-1,.mx-md-1{margin-left:.25rem!important}.m-md-2{margin:.5rem!important}.mt-md-2,.my-md-2{margin-top:.5rem!important}.mr-md-2,.mx-md-2{margin-right:.5rem!important}.mb-md-2,.my-md-2{margin-bottom:.5rem!important}.ml-md-2,.mx-md-2{margin-left:.5rem!important}.m-md-3{margin:1rem!important}.mt-md-3,.my-md-3{margin-top:1rem!important}.mr-md-3,.mx-md-3{margin-right:1rem!important}.mb-md-3,.my-md-3{margin-bottom:1rem!important}.ml-md-3,.mx-md-3{margin-left:1rem!important}.m-md-4{margin:1.5rem!important}.mt-md-4,.my-md-4{margin-top:1.5rem!important}.mr-md-4,.mx-md-4{margin-right:1.5rem!important}.mb-md-4,.my-md-4{margin-bottom:1.5rem!important}.ml-md-4,.mx-md-4{margin-left:1.5rem!important}.m-md-5{margin:3rem!important}.mt-md-5,.my-md-5{margin-top:3rem!important}.mr-md-5,.mx-md-5{margin-right:3rem!important}.mb-md-5,.my-md-5{margin-bottom:3rem!important}.ml-md-5,.mx-md-5{margin-left:3rem!important}.p-md-0{padding:0!important}.pt-md-0,.py-md-0{padding-top:0!important}.pr-md-0,.px-md-0{padding-right:0!important}.pb-md-0,.py-md-0{padding-bottom:0!important}.pl-md-0,.px-md-0{padding-left:0!important}.p-md-1{padding:.25rem!important}.pt-md-1,.py-md-1{padding-top:.25rem!important}.pr-md-1,.px-md-1{padding-right:.25rem!important}.pb-md-1,.py-md-1{padding-bottom:.25rem!important}.pl-md-1,.px-md-1{padding-left:.25rem!important}.p-md-2{padding:.5rem!important}.pt-md-2,.py-md-2{padding-top:.5rem!important}.pr-md-2,.px-md-2{padding-right:.5rem!important}.pb-md-2,.py-md-2{padding-bottom:.5rem!important}.pl-md-2,.px-md-2{padding-left:.5rem!important}.p-md-3{padding:1rem!important}.pt-md-3,.py-md-3{padding-top:1rem!important}.pr-md-3,.px-md-3{padding-right:1rem!important}.pb-md-3,.py-md-3{padding-bottom:1rem!important}.pl-md-3,.px-md-3{padding-left:1rem!important}.p-md-4{padding:1.5rem!important}.pt-md-4,.py-md-4{padding-top:1.5rem!important}.pr-md-4,.px-md-4{padding-right:1.5rem!important}.pb-md-4,.py-md-4{padding-bottom:1.5rem!important}.pl-md-4,.px-md-4{padding-left:1.5rem!important}.p-md-5{padding:3rem!important}.pt-md-5,.py-md-5{padding-top:3rem!important}.pr-md-5,.px-md-5{padding-right:3rem!important}.pb-md-5,.py-md-5{padding-bottom:3rem!important}.pl-md-5,.px-md-5{padding-left:3rem!important}.m-md-n1{margin:-.25rem!important}.mt-md-n1,.my-md-n1{margin-top:-.25rem!important}.mr-md-n1,.mx-md-n1{margin-right:-.25rem!important}.mb-md-n1,.my-md-n1{margin-bottom:-.25rem!important}.ml-md-n1,.mx-md-n1{margin-left:-.25rem!important}.m-md-n2{margin:-.5rem!important}.mt-md-n2,.my-md-n2{margin-top:-.5rem!important}.mr-md-n2,.mx-md-n2{margin-right:-.5rem!important}.mb-md-n2,.my-md-n2{margin-bottom:-.5rem!important}.ml-md-n2,.mx-md-n2{margin-left:-.5rem!important}.m-md-n3{margin:-1rem!important}.mt-md-n3,.my-md-n3{margin-top:-1rem!important}.mr-md-n3,.mx-md-n3{margin-right:-1rem!important}.mb-md-n3,.my-md-n3{margin-bottom:-1rem!important}.ml-md-n3,.mx-md-n3{margin-left:-1rem!important}.m-md-n4{margin:-1.5rem!important}.mt-md-n4,.my-md-n4{margin-top:-1.5rem!important}.mr-md-n4,.mx-md-n4{margin-right:-1.5rem!important}.mb-md-n4,.my-md-n4{margin-bottom:-1.5rem!important}.ml-md-n4,.mx-md-n4{margin-left:-1.5rem!important}.m-md-n5{margin:-3rem!important}.mt-md-n5,.my-md-n5{margin-top:-3rem!important}.mr-md-n5,.mx-md-n5{margin-right:-3rem!important}.mb-md-n5,.my-md-n5{margin-bottom:-3rem!important}.ml-md-n5,.mx-md-n5{margin-left:-3rem!important}.m-md-auto{margin:auto!important}.mt-md-auto,.my-md-auto{margin-top:auto!important}.mr-md-auto,.mx-md-auto{margin-right:auto!important}.mb-md-auto,.my-md-auto{margin-bottom:auto!important}.ml-md-auto,.mx-md-auto{margin-left:auto!important}}@media (min-width:992px){.m-lg-0{margin:0!important}.mt-lg-0,.my-lg-0{margin-top:0!important}.mr-lg-0,.mx-lg-0{margin-right:0!important}.mb-lg-0,.my-lg-0{margin-bottom:0!important}.ml-lg-0,.mx-lg-0{margin-left:0!important}.m-lg-1{margin:.25rem!important}.mt-lg-1,.my-lg-1{margin-top:.25rem!important}.mr-lg-1,.mx-lg-1{margin-right:.25rem!important}.mb-lg-1,.my-lg-1{margin-bottom:.25rem!important}.ml-lg-1,.mx-lg-1{margin-left:.25rem!important}.m-lg-2{margin:.5rem!important}.mt-lg-2,.my-lg-2{margin-top:.5rem!important}.mr-lg-2,.mx-lg-2{margin-right:.5rem!important}.mb-lg-2,.my-lg-2{margin-bottom:.5rem!important}.ml-lg-2,.mx-lg-2{margin-left:.5rem!important}.m-lg-3{margin:1rem!important}.mt-lg-3,.my-lg-3{margin-top:1rem!important}.mr-lg-3,.mx-lg-3{margin-right:1rem!important}.mb-lg-3,.my-lg-3{margin-bottom:1rem!important}.ml-lg-3,.mx-lg-3{margin-left:1rem!important}.m-lg-4{margin:1.5rem!important}.mt-lg-4,.my-lg-4{margin-top:1.5rem!important}.mr-lg-4,.mx-lg-4{margin-right:1.5rem!important}.mb-lg-4,.my-lg-4{margin-bottom:1.5rem!important}.ml-lg-4,.mx-lg-4{margin-left:1.5rem!important}.m-lg-5{margin:3rem!important}.mt-lg-5,.my-lg-5{margin-top:3rem!important}.mr-lg-5,.mx-lg-5{margin-right:3rem!important}.mb-lg-5,.my-lg-5{margin-bottom:3rem!important}.ml-lg-5,.mx-lg-5{margin-left:3rem!important}.p-lg-0{padding:0!important}.pt-lg-0,.py-lg-0{padding-top:0!important}.pr-lg-0,.px-lg-0{padding-right:0!important}.pb-lg-0,.py-lg-0{padding-bottom:0!important}.pl-lg-0,.px-lg-0{padding-left:0!important}.p-lg-1{padding:.25rem!important}.pt-lg-1,.py-lg-1{padding-top:.25rem!important}.pr-lg-1,.px-lg-1{padding-right:.25rem!important}.pb-lg-1,.py-lg-1{padding-bottom:.25rem!important}.pl-lg-1,.px-lg-1{padding-left:.25rem!important}.p-lg-2{padding:.5rem!important}.pt-lg-2,.py-lg-2{padding-top:.5rem!important}.pr-lg-2,.px-lg-2{padding-right:.5rem!important}.pb-lg-2,.py-lg-2{padding-bottom:.5rem!important}.pl-lg-2,.px-lg-2{padding-left:.5rem!important}.p-lg-3{padding:1rem!important}.pt-lg-3,.py-lg-3{padding-top:1rem!important}.pr-lg-3,.px-lg-3{padding-right:1rem!important}.pb-lg-3,.py-lg-3{padding-bottom:1rem!important}.pl-lg-3,.px-lg-3{padding-left:1rem!important}.p-lg-4{padding:1.5rem!important}.pt-lg-4,.py-lg-4{padding-top:1.5rem!important}.pr-lg-4,.px-lg-4{padding-right:1.5rem!important}.pb-lg-4,.py-lg-4{padding-bottom:1.5rem!important}.pl-lg-4,.px-lg-4{padding-left:1.5rem!important}.p-lg-5{padding:3rem!important}.pt-lg-5,.py-lg-5{padding-top:3rem!important}.pr-lg-5,.px-lg-5{padding-right:3rem!important}.pb-lg-5,.py-lg-5{padding-bottom:3rem!important}.pl-lg-5,.px-lg-5{padding-left:3rem!important}.m-lg-n1{margin:-.25rem!important}.mt-lg-n1,.my-lg-n1{margin-top:-.25rem!important}.mr-lg-n1,.mx-lg-n1{margin-right:-.25rem!important}.mb-lg-n1,.my-lg-n1{margin-bottom:-.25rem!important}.ml-lg-n1,.mx-lg-n1{margin-left:-.25rem!important}.m-lg-n2{margin:-.5rem!important}.mt-lg-n2,.my-lg-n2{margin-top:-.5rem!important}.mr-lg-n2,.mx-lg-n2{margin-right:-.5rem!important}.mb-lg-n2,.my-lg-n2{margin-bottom:-.5rem!important}.ml-lg-n2,.mx-lg-n2{margin-left:-.5rem!important}.m-lg-n3{margin:-1rem!important}.mt-lg-n3,.my-lg-n3{margin-top:-1rem!important}.mr-lg-n3,.mx-lg-n3{margin-right:-1rem!important}.mb-lg-n3,.my-lg-n3{margin-bottom:-1rem!important}.ml-lg-n3,.mx-lg-n3{margin-left:-1rem!important}.m-lg-n4{margin:-1.5rem!important}.mt-lg-n4,.my-lg-n4{margin-top:-1.5rem!important}.mr-lg-n4,.mx-lg-n4{margin-right:-1.5rem!important}.mb-lg-n4,.my-lg-n4{margin-bottom:-1.5rem!important}.ml-lg-n4,.mx-lg-n4{margin-left:-1.5rem!important}.m-lg-n5{margin:-3rem!important}.mt-lg-n5,.my-lg-n5{margin-top:-3rem!important}.mr-lg-n5,.mx-lg-n5{margin-right:-3rem!important}.mb-lg-n5,.my-lg-n5{margin-bottom:-3rem!important}.ml-lg-n5,.mx-lg-n5{margin-left:-3rem!important}.m-lg-auto{margin:auto!important}.mt-lg-auto,.my-lg-auto{margin-top:auto!important}.mr-lg-auto,.mx-lg-auto{margin-right:auto!important}.mb-lg-auto,.my-lg-auto{margin-bottom:auto!important}.ml-lg-auto,.mx-lg-auto{margin-left:auto!important}}@media (min-width:1200px){.m-xl-0{margin:0!important}.mt-xl-0,.my-xl-0{margin-top:0!important}.mr-xl-0,.mx-xl-0{margin-right:0!important}.mb-xl-0,.my-xl-0{margin-bottom:0!important}.ml-xl-0,.mx-xl-0{margin-left:0!important}.m-xl-1{margin:.25rem!important}.mt-xl-1,.my-xl-1{margin-top:.25rem!important}.mr-xl-1,.mx-xl-1{margin-right:.25rem!important}.mb-xl-1,.my-xl-1{margin-bottom:.25rem!important}.ml-xl-1,.mx-xl-1{margin-left:.25rem!important}.m-xl-2{margin:.5rem!important}.mt-xl-2,.my-xl-2{margin-top:.5rem!important}.mr-xl-2,.mx-xl-2{margin-right:.5rem!important}.mb-xl-2,.my-xl-2{margin-bottom:.5rem!important}.ml-xl-2,.mx-xl-2{margin-left:.5rem!important}.m-xl-3{margin:1rem!important}.mt-xl-3,.my-xl-3{margin-top:1rem!important}.mr-xl-3,.mx-xl-3{margin-right:1rem!important}.mb-xl-3,.my-xl-3{margin-bottom:1rem!important}.ml-xl-3,.mx-xl-3{margin-left:1rem!important}.m-xl-4{margin:1.5rem!important}.mt-xl-4,.my-xl-4{margin-top:1.5rem!important}.mr-xl-4,.mx-xl-4{margin-right:1.5rem!important}.mb-xl-4,.my-xl-4{margin-bottom:1.5rem!important}.ml-xl-4,.mx-xl-4{margin-left:1.5rem!important}.m-xl-5{margin:3rem!important}.mt-xl-5,.my-xl-5{margin-top:3rem!important}.mr-xl-5,.mx-xl-5{margin-right:3rem!important}.mb-xl-5,.my-xl-5{margin-bottom:3rem!important}.ml-xl-5,.mx-xl-5{margin-left:3rem!important}.p-xl-0{padding:0!important}.pt-xl-0,.py-xl-0{padding-top:0!important}.pr-xl-0,.px-xl-0{padding-right:0!important}.pb-xl-0,.py-xl-0{padding-bottom:0!important}.pl-xl-0,.px-xl-0{padding-left:0!important}.p-xl-1{padding:.25rem!important}.pt-xl-1,.py-xl-1{padding-top:.25rem!important}.pr-xl-1,.px-xl-1{padding-right:.25rem!important}.pb-xl-1,.py-xl-1{padding-bottom:.25rem!important}.pl-xl-1,.px-xl-1{padding-left:.25rem!important}.p-xl-2{padding:.5rem!important}.pt-xl-2,.py-xl-2{padding-top:.5rem!important}.pr-xl-2,.px-xl-2{padding-right:.5rem!important}.pb-xl-2,.py-xl-2{padding-bottom:.5rem!important}.pl-xl-2,.px-xl-2{padding-left:.5rem!important}.p-xl-3{padding:1rem!important}.pt-xl-3,.py-xl-3{padding-top:1rem!important}.pr-xl-3,.px-xl-3{padding-right:1rem!important}.pb-xl-3,.py-xl-3{padding-bottom:1rem!important}.pl-xl-3,.px-xl-3{padding-left:1rem!important}.p-xl-4{padding:1.5rem!important}.pt-xl-4,.py-xl-4{padding-top:1.5rem!important}.pr-xl-4,.px-xl-4{padding-right:1.5rem!important}.pb-xl-4,.py-xl-4{padding-bottom:1.5rem!important}.pl-xl-4,.px-xl-4{padding-left:1.5rem!important}.p-xl-5{padding:3rem!important}.pt-xl-5,.py-xl-5{padding-top:3rem!important}.pr-xl-5,.px-xl-5{padding-right:3rem!important}.pb-xl-5,.py-xl-5{padding-bottom:3rem!important}.pl-xl-5,.px-xl-5{padding-left:3rem!important}.m-xl-n1{margin:-.25rem!important}.mt-xl-n1,.my-xl-n1{margin-top:-.25rem!important}.mr-xl-n1,.mx-xl-n1{margin-right:-.25rem!important}.mb-xl-n1,.my-xl-n1{margin-bottom:-.25rem!important}.ml-xl-n1,.mx-xl-n1{margin-left:-.25rem!important}.m-xl-n2{margin:-.5rem!important}.mt-xl-n2,.my-xl-n2{margin-top:-.5rem!important}.mr-xl-n2,.mx-xl-n2{margin-right:-.5rem!important}.mb-xl-n2,.my-xl-n2{margin-bottom:-.5rem!important}.ml-xl-n2,.mx-xl-n2{margin-left:-.5rem!important}.m-xl-n3{margin:-1rem!important}.mt-xl-n3,.my-xl-n3{margin-top:-1rem!important}.mr-xl-n3,.mx-xl-n3{margin-right:-1rem!important}.mb-xl-n3,.my-xl-n3{margin-bottom:-1rem!important}.ml-xl-n3,.mx-xl-n3{margin-left:-1rem!important}.m-xl-n4{margin:-1.5rem!important}.mt-xl-n4,.my-xl-n4{margin-top:-1.5rem!important}.mr-xl-n4,.mx-xl-n4{margin-right:-1.5rem!important}.mb-xl-n4,.my-xl-n4{margin-bottom:-1.5rem!important}.ml-xl-n4,.mx-xl-n4{margin-left:-1.5rem!important}.m-xl-n5{margin:-3rem!important}.mt-xl-n5,.my-xl-n5{margin-top:-3rem!important}.mr-xl-n5,.mx-xl-n5{margin-right:-3rem!important}.mb-xl-n5,.my-xl-n5{margin-bottom:-3rem!important}.ml-xl-n5,.mx-xl-n5{margin-left:-3rem!important}.m-xl-auto{margin:auto!important}.mt-xl-auto,.my-xl-auto{margin-top:auto!important}.mr-xl-auto,.mx-xl-auto{margin-right:auto!important}.mb-xl-auto,.my-xl-auto{margin-bottom:auto!important}.ml-xl-auto,.mx-xl-auto{margin-left:auto!important}}.text-monospace{font-family:SFMono-Regular,Menlo,Monaco,Consolas,\"Liberation Mono\",\"Courier New\",monospace!important}.text-justify{text-align:justify!important}.text-wrap{white-space:normal!important}.text-nowrap{white-space:nowrap!important}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.text-left{text-align:left!important}.text-right{text-align:right!important}.text-center{text-align:center!important}@media (min-width:576px){.text-sm-left{text-align:left!important}.text-sm-right{text-align:right!important}.text-sm-center{text-align:center!important}}@media (min-width:768px){.text-md-left{text-align:left!important}.text-md-right{text-align:right!important}.text-md-center{text-align:center!important}}@media (min-width:992px){.text-lg-left{text-align:left!important}.text-lg-right{text-align:right!important}.text-lg-center{text-align:center!important}}@media (min-width:1200px){.text-xl-left{text-align:left!important}.text-xl-right{text-align:right!important}.text-xl-center{text-align:center!important}}.text-lowercase{text-transform:lowercase!important}.text-uppercase{text-transform:uppercase!important}.text-capitalize{text-transform:capitalize!important}.font-weight-light{font-weight:300!important}.font-weight-lighter{font-weight:lighter!important}.font-weight-normal{font-weight:400!important}.font-weight-bold{font-weight:700!important}.font-weight-bolder{font-weight:bolder!important}.font-italic{font-style:italic!important}.text-white{color:#fff!important}.text-primary{color:#007bff!important}a.text-primary:focus,a.text-primary:hover{color:#0056b3!important}.text-secondary{color:#6c757d!important}a.text-secondary:focus,a.text-secondary:hover{color:#494f54!important}.text-success{color:#28a745!important}a.text-success:focus,a.text-success:hover{color:#19692c!important}.text-info{color:#17a2b8!important}a.text-info:focus,a.text-info:hover{color:#0f6674!important}.text-warning{color:#ffc107!important}a.text-warning:focus,a.text-warning:hover{color:#ba8b00!important}.text-danger{color:#dc3545!important}a.text-danger:focus,a.text-danger:hover{color:#a71d2a!important}.text-light{color:#f8f9fa!important}a.text-light:focus,a.text-light:hover{color:#cbd3da!important}.text-dark{color:#343a40!important}a.text-dark:focus,a.text-dark:hover{color:#121416!important}.text-body{color:#212529!important}.text-muted{color:#6c757d!important}.text-black-50{color:rgba(0,0,0,.5)!important}.text-white-50{color:rgba(255,255,255,.5)!important}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.text-decoration-none{text-decoration:none!important}.text-break{word-break:break-word!important;overflow-wrap:break-word!important}.text-reset{color:inherit!important}.visible{visibility:visible!important}.invisible{visibility:hidden!important}@media print{*,::after,::before{text-shadow:none!important;box-shadow:none!important}a:not(.btn){text-decoration:underline}abbr[title]::after{content:\" (\" attr(title) \")\"}pre{white-space:pre-wrap!important}blockquote,pre{border:1px solid #adb5bd;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}@page{size:a3}body{min-width:992px!important}.container{min-width:992px!important}.navbar{display:none}.badge{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #dee2e6!important}.table-dark{color:inherit}.table-dark tbody+tbody,.table-dark td,.table-dark th,.table-dark thead th{border-color:#dee2e6}.table .thead-dark th{color:inherit;border-color:#dee2e6}}\n/*# sourceMappingURL=bootstrap.min.css.map */\n\n/*------------------------------------------------------------------*/\n/*\t02) Magnific Popup\n/*------------------------------------------------------------------*/\n/*! Magnific Popup - v1.1.0 - 2016-02-20\n* http://dimsemenov.com/plugins/magnific-popup/\n* Copyright (c) 2016 Dmitry Semenov; */\n\n.mfp-bg{top:0;left:0;width:100%;height:100%;z-index:1042;overflow:hidden;position:fixed;background:#0b0b0b;opacity:.8}.mfp-wrap{top:0;left:0;width:100%;height:100%;z-index:1043;position:fixed;outline:none !important;-webkit-backface-visibility:hidden}.mfp-container{text-align:center;position:absolute;width:100%;height:100%;left:0;top:0;padding:0 8px;box-sizing:border-box}.mfp-container:before{content:'';display:inline-block;height:100%;vertical-align:middle}.mfp-align-top .mfp-container:before{display:none}.mfp-content{position:relative;display:inline-block;vertical-align:middle;margin:0 auto;text-align:left;z-index:1045}.mfp-inline-holder .mfp-content,.mfp-ajax-holder .mfp-content{width:100%;cursor:auto}.mfp-ajax-cur{cursor:progress}.mfp-zoom-out-cur,.mfp-zoom-out-cur .mfp-image-holder .mfp-close{cursor:-moz-zoom-out;cursor:-webkit-zoom-out;cursor:zoom-out}.mfp-zoom{cursor:pointer;cursor:-webkit-zoom-in;cursor:-moz-zoom-in;cursor:zoom-in}.mfp-auto-cursor .mfp-content{cursor:auto}.mfp-close,.mfp-arrow,.mfp-preloader,.mfp-counter{-webkit-user-select:none;-moz-user-select:none;user-select:none}.mfp-loading.mfp-figure{display:none}.mfp-hide{display:none !important}.mfp-preloader{color:#CCC;position:absolute;top:50%;width:auto;text-align:center;margin-top:-0.8em;left:8px;right:8px;z-index:1044}.mfp-preloader a{color:#CCC}.mfp-preloader a:hover{color:#FFF}.mfp-s-ready .mfp-preloader{display:none}.mfp-s-error .mfp-content{display:none}button.mfp-close,button.mfp-arrow{overflow:visible;cursor:pointer;background:transparent;border:0;-webkit-appearance:none;display:block;outline:0;padding:0;z-index:1046;box-shadow:none;touch-action:manipulation}button::-moz-focus-inner{padding:0;border:0}.mfp-close{width:44px;height:44px;line-height:44px;position:absolute;right:0;top:0;text-decoration:none;text-align:center;opacity:.65;padding:0 0 18px 10px;color:#FFF;font-style:normal;font-size:28px;font-family:Arial,Baskerville,monospace}.mfp-close:hover,.mfp-close:focus{opacity:1}.mfp-close:active{top:1px}.mfp-close-btn-in .mfp-close{color:#333}.mfp-image-holder .mfp-close,.mfp-iframe-holder .mfp-close{color:#FFF;right:-6px;text-align:right;padding-right:6px;width:100%}.mfp-counter{position:absolute;top:0;right:0;color:#CCC;font-size:12px;line-height:18px;white-space:nowrap}.mfp-arrow{position:absolute;opacity:.65;margin:0;top:50%;margin-top:-55px;padding:0;width:90px;height:110px;-webkit-tap-highlight-color:transparent}.mfp-arrow:active{margin-top:-54px}.mfp-arrow:hover,.mfp-arrow:focus{opacity:1}.mfp-arrow:before,.mfp-arrow:after{content:'';display:block;width:0;height:0;position:absolute;left:0;top:0;margin-top:35px;margin-left:35px;border:medium inset transparent}.mfp-arrow:after{border-top-width:13px;border-bottom-width:13px;top:8px}.mfp-arrow:before{border-top-width:21px;border-bottom-width:21px;opacity:.7}.mfp-arrow-left{left:0}.mfp-arrow-left:after{border-right:17px solid #FFF;margin-left:31px}.mfp-arrow-left:before{margin-left:25px;border-right:27px solid #3f3f3f}.mfp-arrow-right{right:0}.mfp-arrow-right:after{border-left:17px solid #FFF;margin-left:39px}.mfp-arrow-right:before{border-left:27px solid #3f3f3f}.mfp-iframe-holder{padding-top:40px;padding-bottom:40px}.mfp-iframe-holder .mfp-content{line-height:0;width:100%;max-width:900px}.mfp-iframe-holder .mfp-close{top:-40px}.mfp-iframe-scaler{width:100%;height:0;overflow:hidden;padding-top:56.25%}.mfp-iframe-scaler iframe{position:absolute;display:block;top:0;left:0;width:100%;height:100%;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#000}img.mfp-img{width:auto;max-width:100%;height:auto;display:block;line-height:0;box-sizing:border-box;padding:40px 0 40px;margin:0 auto}.mfp-figure{line-height:0}.mfp-figure:after{content:'';position:absolute;left:0;top:40px;bottom:40px;display:block;right:0;width:auto;height:auto;z-index:-1;box-shadow:0 0 8px rgba(0,0,0,0.6);background:#444}.mfp-figure small{color:#bdbdbd;display:block;font-size:12px;line-height:14px}.mfp-figure figure{margin:0}.mfp-bottom-bar{margin-top:-36px;position:absolute;top:100%;left:0;width:100%;cursor:auto}.mfp-title{text-align:left;line-height:18px;color:#f3f3f3;word-wrap:break-word;padding-right:36px}.mfp-image-holder .mfp-content{max-width:100%}.mfp-gallery .mfp-image-holder .mfp-figure{cursor:pointer}@media screen and (max-width:800px) and (orientation:landscape),screen and (max-height:300px){.mfp-img-mobile .mfp-image-holder{padding-left:0;padding-right:0}.mfp-img-mobile img.mfp-img{padding:0}.mfp-img-mobile .mfp-figure:after{top:0;bottom:0}.mfp-img-mobile .mfp-figure small{display:inline;margin-left:5px}.mfp-img-mobile .mfp-bottom-bar{background:rgba(0,0,0,0.6);bottom:0;margin:0;top:auto;padding:3px 5px;position:fixed;box-sizing:border-box}.mfp-img-mobile .mfp-bottom-bar:empty{padding:0}.mfp-img-mobile .mfp-counter{right:5px;top:3px}.mfp-img-mobile .mfp-close{top:0;right:0;width:35px;height:35px;line-height:35px;background:rgba(0,0,0,0.6);position:fixed;text-align:center;padding:0}}@media all and (max-width:900px){.mfp-arrow{-webkit-transform:scale(0.75);transform:scale(0.75)}.mfp-arrow-left{-webkit-transform-origin:0 0;transform-origin:0 0}.mfp-arrow-right{-webkit-transform-origin:100%;transform-origin:100%}.mfp-container{padding-left:6px;padding-right:6px}}\n\n.mfp-fade.mfp-bg, .mfp-fade.mfp-wrap .mfp-content {\n\t-webkit-transition: all 0.15s ease-out; \n\t-moz-transition: all 0.15s ease-out; \n\ttransition: all 0.15s ease-out;\n}\n.mfp-fade.mfp-bg.mfp-ready {\n\topacity: 0.8;\n}\n.mfp-fade.mfp-bg.mfp-removing, .mfp-fade.mfp-wrap .mfp-content, .mfp-fade.mfp-bg, \n.mfp-fade.mfp-wrap.mfp-removing .mfp-content {\n\topacity: 0;\n}\n.mfp-fade.mfp-wrap.mfp-ready .mfp-content {\n\topacity: 1;\n}\n\n/*------------------------------------------------------------------*/\n/*\t03) Animate Css\n/*------------------------------------------------------------------*/\n/*!\nAnimate.css - http://daneden.me/animate\nLicensed under the MIT license\n\nCopyright (c) 2013 Daniel Eden\nPermission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\nThe above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n*/.animated{-webkit-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;animation-fill-mode:both}.animated.hinge{-webkit-animation-duration:2s;animation-duration:2s}@-webkit-keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);transform:translateY(-15px)}}@keyframes bounce{0%,100%,20%,50%,80%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}40%{-webkit-transform:translateY(-30px);-ms-transform:translateY(-30px);transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px);-ms-transform:translateY(-15px);transform:translateY(-15px)}}.bounce{-webkit-animation-name:bounce;animation-name:bounce}@-webkit-keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,100%,50%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;animation-name:flash}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes pulse{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}50%{-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}100%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.pulse{-webkit-animation-name:pulse;animation-name:pulse}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.shake{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes swing{20%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);transform:rotate(-5deg)}100%{-webkit-transform:rotate(0);transform:rotate(0)}}@keyframes swing{20%{-webkit-transform:rotate(15deg);-ms-transform:rotate(15deg);transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg);-ms-transform:rotate(-10deg);transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg);-ms-transform:rotate(5deg);transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg);-ms-transform:rotate(-5deg);transform:rotate(-5deg)}100%{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0)}}.swing{-webkit-transform-origin:top center;-ms-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;animation-name:swing}@-webkit-keyframes tada{0%{-webkit-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(.9) rotate(-3deg);transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}@keyframes tada{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}10%,20%{-webkit-transform:scale(.9) rotate(-3deg);-ms-transform:scale(.9) rotate(-3deg);transform:scale(.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg);-ms-transform:scale(1.1) rotate(3deg);transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg);-ms-transform:scale(1.1) rotate(-3deg);transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0);-ms-transform:scale(1) rotate(0);transform:scale(1) rotate(0)}}.tada{-webkit-animation-name:tada;animation-name:tada}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0);transform:translateX(0)}15%{-webkit-transform:translateX(-25%) rotate(-5deg);transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg);transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg);transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg);transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg);transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes wobble{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}15%{-webkit-transform:translateX(-25%) rotate(-5deg);-ms-transform:translateX(-25%) rotate(-5deg);transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg);-ms-transform:translateX(20%) rotate(3deg);transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg);-ms-transform:translateX(-15%) rotate(-3deg);transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg);-ms-transform:translateX(10%) rotate(2deg);transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg);-ms-transform:translateX(-5%) rotate(-1deg);transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.wobble{-webkit-animation-name:wobble;animation-name:wobble}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);transform:scale(.9)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}50%{opacity:1;-webkit-transform:scale(1.05);-ms-transform:scale(1.05);transform:scale(1.05)}70%{-webkit-transform:scale(.9);-ms-transform:scale(.9);transform:scale(.9)}100%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.bounceIn{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px);transform:translateY(30px)}80%{-webkit-transform:translateY(-10px);transform:translateY(-10px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px);-ms-transform:translateY(30px);transform:translateY(30px)}80%{-webkit-transform:translateY(-10px);-ms-transform:translateY(-10px);transform:translateY(-10px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px);transform:translateX(30px)}80%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px);-ms-transform:translateX(30px);transform:translateX(30px)}80%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px);transform:translateX(-30px)}80%{-webkit-transform:translateX(10px);transform:translateX(10px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px);-ms-transform:translateX(-30px);transform:translateX(-30px)}80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px);transform:translateY(-30px)}80%{-webkit-transform:translateY(10px);transform:translateY(10px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px);-ms-transform:translateY(-30px);transform:translateY(-30px)}80%{-webkit-transform:translateY(10px);-ms-transform:translateY(10px);transform:translateY(10px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceOut{0%{-webkit-transform:scale(1);transform:scale(1)}25%{-webkit-transform:scale(.95);transform:scale(.95)}50%{opacity:1;-webkit-transform:scale(1.1);transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(.3);transform:scale(.3)}}@keyframes bounceOut{0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}25%{-webkit-transform:scale(.95);-ms-transform:scale(.95);transform:scale(.95)}50%{opacity:1;-webkit-transform:scale(1.1);-ms-transform:scale(1.1);transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(.3);-ms-transform:scale(.3);transform:scale(.3)}}.bounceOut{-webkit-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutDown{0%{-webkit-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes bounceOutDown{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px);transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes bounceOutLeft{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes bounceOutRight{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes bounceOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px);transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes bounceOutUp{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px);-ms-transform:translateY(20px);transform:translateY(20px)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}}@keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px);-ms-transform:translateX(-20px);transform:translateX(-20px)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);transform:translateX(20px)}}@keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px);-ms-transform:translateX(20px);transform:translateX(20px)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);transform:translateY(-20px)}}@keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px);-ms-transform:translateY(-20px);transform:translateY(-20px)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}@keyframes flip{0%{-webkit-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-ms-transform:perspective(400px) translateZ(0) rotateY(0) scale(1);transform:perspective(400px) translateZ(0) rotateY(0) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-ms-transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(170deg) scale(1);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-ms-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);-ms-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(.95);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-ms-transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);transform:perspective(400px) translateZ(0) rotateY(360deg) scale(1);-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}}.animated.flip{-webkit-backface-visibility:visible;-ms-backface-visibility:visible;backface-visibility:visible;-webkit-animation-name:flip;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0);opacity:1}}@keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);-ms-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg);-ms-transform:perspective(400px) rotateX(-10deg);transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg);-ms-transform:perspective(400px) rotateX(10deg);transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0);-ms-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0);opacity:1}}.flipInX{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInX;animation-name:flipInX}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg);transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0);transform:perspective(400px) rotateY(0);opacity:1}}@keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);-ms-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg);-ms-transform:perspective(400px) rotateY(-10deg);transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg);-ms-transform:perspective(400px) rotateY(10deg);transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0);-ms-transform:perspective(400px) rotateY(0);transform:perspective(400px) rotateY(0);opacity:1}}.flipInY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipInY;animation-name:flipInY}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0);-ms-transform:perspective(400px) rotateX(0);transform:perspective(400px) rotateX(0);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);-ms-transform:perspective(400px) rotateX(90deg);transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;animation-name:flipOutX;-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0);transform:perspective(400px) rotateY(0);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0);-ms-transform:perspective(400px) rotateY(0);transform:perspective(400px) rotateY(0);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);-ms-transform:perspective(400px) rotateY(90deg);transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible!important;-ms-backface-visibility:visible!important;backface-visibility:visible!important;-webkit-animation-name:flipOutY;animation-name:flipOutY}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0) skewX(-15deg);transform:translateX(0) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0) skewX(0);transform:translateX(0) skewX(0);opacity:1}}@keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);-ms-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);-ms-transform:translateX(-20%) skewX(30deg);transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0) skewX(-15deg);-ms-transform:translateX(0) skewX(-15deg);transform:translateX(0) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0) skewX(0);-ms-transform:translateX(0) skewX(0);transform:translateX(0) skewX(0);opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}@-webkit-keyframes lightSpeedOut{0%{-webkit-transform:translateX(0) skewX(0);transform:translateX(0) skewX(0);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}}@keyframes lightSpeedOut{0%{-webkit-transform:translateX(0) skewX(0);-ms-transform:translateX(0) skewX(0);transform:translateX(0) skewX(0);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);-ms-transform:translateX(100%) skewX(-30deg);transform:translateX(100%) skewX(-30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateIn{0%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(-200deg);-ms-transform:rotate(-200deg);transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}}@keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;-ms-transform-origin:center center;transform-origin:center center;-webkit-transform:rotate(200deg);-ms-transform:rotate(200deg);transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}@keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}@keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-ms-transform-origin:left bottom;transform-origin:left bottom;-webkit-transform:rotate(-90deg);-ms-transform:rotate(-90deg);transform:rotate(-90deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-ms-transform-origin:right bottom;transform-origin:right bottom;-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}100%{-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes slideInDown{0%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}100%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.slideInDown{-webkit-animation-name:slideInDown;animation-name:slideInDown}@-webkit-keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.slideInLeft{-webkit-animation-name:slideInLeft;animation-name:slideInLeft}@-webkit-keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}100%{-webkit-transform:translateX(0);transform:translateX(0)}}@keyframes slideInRight{0%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}}.slideInRight{-webkit-animation-name:slideInRight;animation-name:slideInRight}@-webkit-keyframes slideOutLeft{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);transform:translateX(-2000px)}}@keyframes slideOutLeft{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px);-ms-transform:translateX(-2000px);transform:translateX(-2000px)}}.slideOutLeft{-webkit-animation-name:slideOutLeft;animation-name:slideOutLeft}@-webkit-keyframes slideOutRight{0%{-webkit-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);transform:translateX(2000px)}}@keyframes slideOutRight{0%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px);-ms-transform:translateX(2000px);transform:translateX(2000px)}}.slideOutRight{-webkit-animation-name:slideOutRight;animation-name:slideOutRight}@-webkit-keyframes slideOutUp{0%{-webkit-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);transform:translateY(-2000px)}}@keyframes slideOutUp{0%{-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px);-ms-transform:translateY(-2000px);transform:translateY(-2000px)}}.slideOutUp{-webkit-animation-name:slideOutUp;animation-name:slideOutUp}@-webkit-keyframes hinge{0%{-webkit-transform:rotate(0);transform:rotate(0);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);transform:rotate(60deg) translateY(0);opacity:1;-webkit-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}100%{-webkit-transform:translateY(700px);transform:translateY(700px);opacity:0}}@keyframes hinge{0%{-webkit-transform:rotate(0);-ms-transform:rotate(0);transform:rotate(0);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);-ms-transform:rotate(80deg);transform:rotate(80deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);-ms-transform:rotate(60deg);transform:rotate(60deg);-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);-ms-transform:rotate(60deg) translateY(0);transform:rotate(60deg) translateY(0);opacity:1;-webkit-transform-origin:top left;-ms-transform-origin:top left;transform-origin:top left;-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}100%{-webkit-transform:translateY(700px);-ms-transform:translateY(700px);transform:translateY(700px);opacity:0}}.hinge{-webkit-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.rollIn{-webkit-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg);transform:translateX(100%) rotate(120deg)}}@keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg);-ms-transform:translateX(100%) rotate(120deg);transform:translateX(100%) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}@keyframes zoomIn{from{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}50%{opacity:1}}.zoomIn{-webkit-animation-name:zoomIn;animation-name:zoomIn}@-webkit-keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInDown{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInDown{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInLeft{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(-1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(10px,0,0);transform:scale3d(.475,.475,.475) translate3d(10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInLeft{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInRight{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);transform:scale3d(.1,.1,.1) translate3d(1000px,0,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);transform:scale3d(.475,.475,.475) translate3d(-10px,0,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInRight{-webkit-animation-name:zoomInRight;animation-name:zoomInRight}@-webkit-keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomInUp{from{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);transform:scale3d(.1,.1,.1) translate3d(0,1000px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}60%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomInUp{-webkit-animation-name:zoomInUp;animation-name:zoomInUp}@-webkit-keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}@keyframes zoomOut{from{opacity:1}50%{opacity:0;-webkit-transform:scale3d(.3,.3,.3);transform:scale3d(.3,.3,.3)}to{opacity:0}}.zoomOut{-webkit-animation-name:zoomOut;animation-name:zoomOut}@-webkit-keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutDown{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);transform:scale3d(.475,.475,.475) translate3d(0,-60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutDown{-webkit-animation-name:zoomOutDown;animation-name:zoomOutDown}@-webkit-keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}@keyframes zoomOutLeft{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(42px,0,0);transform:scale3d(.475,.475,.475) translate3d(42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(-2000px,0,0);transform:scale(.1) translate3d(-2000px,0,0);-webkit-transform-origin:left center;transform-origin:left center}}.zoomOutLeft{-webkit-animation-name:zoomOutLeft;animation-name:zoomOutLeft}@-webkit-keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}@keyframes zoomOutRight{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(-42px,0,0);transform:scale3d(.475,.475,.475) translate3d(-42px,0,0)}to{opacity:0;-webkit-transform:scale(.1) translate3d(2000px,0,0);transform:scale(.1) translate3d(2000px,0,0);-webkit-transform-origin:right center;transform-origin:right center}}.zoomOutRight{-webkit-animation-name:zoomOutRight;animation-name:zoomOutRight}@-webkit-keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}@keyframes zoomOutUp{40%{opacity:1;-webkit-transform:scale3d(.475,.475,.475) translate3d(0,60px,0);transform:scale3d(.475,.475,.475) translate3d(0,60px,0);-webkit-animation-timing-function:cubic-bezier(.55,.055,.675,.19);animation-timing-function:cubic-bezier(.55,.055,.675,.19)}to{opacity:0;-webkit-transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);transform:scale3d(.1,.1,.1) translate3d(0,-2000px,0);-webkit-transform-origin:center bottom;transform-origin:center bottom;-webkit-animation-timing-function:cubic-bezier(.175,.885,.32,1);animation-timing-function:cubic-bezier(.175,.885,.32,1)}}.zoomOutUp{-webkit-animation-name:zoomOutUp;animation-name:zoomOutUp}\n\n/*------------------------------------------------------------------*/\n/*\t04) Material Design Icons\n/*------------------------------------------------------------------*/\n@font-face{font-family:\"Material Design Icons\";src:url(\"../fonts/mdi_icons/materialdesignicons-webfont.eot?v=4.6.95\");src:url(\"../fonts/mdi_icons/materialdesignicons-webfont.eot?#iefix&v=4.6.95\") format(\"embedded-opentype\"),url(\"../fonts/mdi_icons/materialdesignicons-webfont.woff2?v=4.6.95\") format(\"woff2\"),url(\"../fonts/mdi_icons/materialdesignicons-webfont.woff?v=4.6.95\") format(\"woff\"),url(\"../fonts/mdi_icons/materialdesignicons-webfont.ttf?v=4.6.95\") format(\"truetype\");font-weight:normal;font-style:normal}.mdi:before,.mdi-set{display:inline-block;font:normal normal normal 24px/1 \"Material Design Icons\";font-size:inherit;text-rendering:auto;line-height:inherit;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.mdi-ab-testing::before{content:\"\\F001C\"}.mdi-access-point::before{content:\"\\F002\"}.mdi-access-point-network::before{content:\"\\F003\"}.mdi-access-point-network-off::before{content:\"\\FBBD\"}.mdi-account::before{content:\"\\F004\"}.mdi-account-alert::before{content:\"\\F005\"}.mdi-account-alert-outline::before{content:\"\\FB2C\"}.mdi-account-arrow-left::before{content:\"\\FB2D\"}.mdi-account-arrow-left-outline::before{content:\"\\FB2E\"}.mdi-account-arrow-right::before{content:\"\\FB2F\"}.mdi-account-arrow-right-outline::before{content:\"\\FB30\"}.mdi-account-badge::before{content:\"\\FD83\"}.mdi-account-badge-alert::before{content:\"\\FD84\"}.mdi-account-badge-alert-outline::before{content:\"\\FD85\"}.mdi-account-badge-horizontal::before{content:\"\\FDF0\"}.mdi-account-badge-horizontal-outline::before{content:\"\\FDF1\"}.mdi-account-badge-outline::before{content:\"\\FD86\"}.mdi-account-box::before{content:\"\\F006\"}.mdi-account-box-multiple::before{content:\"\\F933\"}.mdi-account-box-multiple-outline::before{content:\"\\F002C\"}.mdi-account-box-outline::before{content:\"\\F007\"}.mdi-account-card-details::before{content:\"\\F5D2\"}.mdi-account-card-details-outline::before{content:\"\\FD87\"}.mdi-account-cash::before{content:\"\\F00C2\"}.mdi-account-cash-outline::before{content:\"\\F00C3\"}.mdi-account-check::before{content:\"\\F008\"}.mdi-account-check-outline::before{content:\"\\FBBE\"}.mdi-account-child::before{content:\"\\FA88\"}.mdi-account-child-circle::before{content:\"\\FA89\"}.mdi-account-child-outline::before{content:\"\\F00F3\"}.mdi-account-circle::before{content:\"\\F009\"}.mdi-account-circle-outline::before{content:\"\\FB31\"}.mdi-account-clock::before{content:\"\\FB32\"}.mdi-account-clock-outline::before{content:\"\\FB33\"}.mdi-account-convert::before{content:\"\\F00A\"}.mdi-account-details::before{content:\"\\F631\"}.mdi-account-edit::before{content:\"\\F6BB\"}.mdi-account-edit-outline::before{content:\"\\F001D\"}.mdi-account-group::before{content:\"\\F848\"}.mdi-account-group-outline::before{content:\"\\FB34\"}.mdi-account-heart::before{content:\"\\F898\"}.mdi-account-heart-outline::before{content:\"\\FBBF\"}.mdi-account-key::before{content:\"\\F00B\"}.mdi-account-key-outline::before{content:\"\\FBC0\"}.mdi-account-lock::before{content:\"\\F0189\"}.mdi-account-lock-outline::before{content:\"\\F018A\"}.mdi-account-minus::before{content:\"\\F00D\"}.mdi-account-minus-outline::before{content:\"\\FAEB\"}.mdi-account-multiple::before{content:\"\\F00E\"}.mdi-account-multiple-check::before{content:\"\\F8C4\"}.mdi-account-multiple-check-outline::before{content:\"\\F0229\"}.mdi-account-multiple-minus::before{content:\"\\F5D3\"}.mdi-account-multiple-minus-outline::before{content:\"\\FBC1\"}.mdi-account-multiple-outline::before{content:\"\\F00F\"}.mdi-account-multiple-plus::before{content:\"\\F010\"}.mdi-account-multiple-plus-outline::before{content:\"\\F7FF\"}.mdi-account-multiple-remove::before{content:\"\\F0235\"}.mdi-account-multiple-remove-outline::before{content:\"\\F0236\"}.mdi-account-network::before{content:\"\\F011\"}.mdi-account-network-outline::before{content:\"\\FBC2\"}.mdi-account-off::before{content:\"\\F012\"}.mdi-account-off-outline::before{content:\"\\FBC3\"}.mdi-account-outline::before{content:\"\\F013\"}.mdi-account-plus::before{content:\"\\F014\"}.mdi-account-plus-outline::before{content:\"\\F800\"}.mdi-account-question::before{content:\"\\FB35\"}.mdi-account-question-outline::before{content:\"\\FB36\"}.mdi-account-remove::before{content:\"\\F015\"}.mdi-account-remove-outline::before{content:\"\\FAEC\"}.mdi-account-search::before{content:\"\\F016\"}.mdi-account-search-outline::before{content:\"\\F934\"}.mdi-account-settings::before{content:\"\\F630\"}.mdi-account-settings-outline::before{content:\"\\F00F4\"}.mdi-account-star::before{content:\"\\F017\"}.mdi-account-star-outline::before{content:\"\\FBC4\"}.mdi-account-supervisor::before{content:\"\\FA8A\"}.mdi-account-supervisor-circle::before{content:\"\\FA8B\"}.mdi-account-supervisor-outline::before{content:\"\\F0158\"}.mdi-account-switch::before{content:\"\\F019\"}.mdi-account-tie::before{content:\"\\FCBF\"}.mdi-account-tie-outline::before{content:\"\\F00F5\"}.mdi-accusoft::before{content:\"\\F849\"}.mdi-adchoices::before{content:\"\\FD1E\"}.mdi-adjust::before{content:\"\\F01A\"}.mdi-adobe::before{content:\"\\F935\"}.mdi-adobe-acrobat::before{content:\"\\FFBD\"}.mdi-air-conditioner::before{content:\"\\F01B\"}.mdi-air-filter::before{content:\"\\FD1F\"}.mdi-air-horn::before{content:\"\\FD88\"}.mdi-air-humidifier::before{content:\"\\F00C4\"}.mdi-air-purifier::before{content:\"\\FD20\"}.mdi-airbag::before{content:\"\\FBC5\"}.mdi-airballoon::before{content:\"\\F01C\"}.mdi-airballoon-outline::before{content:\"\\F002D\"}.mdi-airplane::before{content:\"\\F01D\"}.mdi-airplane-landing::before{content:\"\\F5D4\"}.mdi-airplane-off::before{content:\"\\F01E\"}.mdi-airplane-takeoff::before{content:\"\\F5D5\"}.mdi-airplay::before{content:\"\\F01F\"}.mdi-airport::before{content:\"\\F84A\"}.mdi-alarm::before{content:\"\\F020\"}.mdi-alarm-bell::before{content:\"\\F78D\"}.mdi-alarm-check::before{content:\"\\F021\"}.mdi-alarm-light::before{content:\"\\F78E\"}.mdi-alarm-light-outline::before{content:\"\\FBC6\"}.mdi-alarm-multiple::before{content:\"\\F022\"}.mdi-alarm-note::before{content:\"\\FE8E\"}.mdi-alarm-note-off::before{content:\"\\FE8F\"}.mdi-alarm-off::before{content:\"\\F023\"}.mdi-alarm-plus::before{content:\"\\F024\"}.mdi-alarm-snooze::before{content:\"\\F68D\"}.mdi-album::before{content:\"\\F025\"}.mdi-alert::before{content:\"\\F026\"}.mdi-alert-box::before{content:\"\\F027\"}.mdi-alert-box-outline::before{content:\"\\FCC0\"}.mdi-alert-circle::before{content:\"\\F028\"}.mdi-alert-circle-check::before{content:\"\\F0218\"}.mdi-alert-circle-check-outline::before{content:\"\\F0219\"}.mdi-alert-circle-outline::before{content:\"\\F5D6\"}.mdi-alert-decagram::before{content:\"\\F6BC\"}.mdi-alert-decagram-outline::before{content:\"\\FCC1\"}.mdi-alert-octagon::before{content:\"\\F029\"}.mdi-alert-octagon-outline::before{content:\"\\FCC2\"}.mdi-alert-octagram::before{content:\"\\F766\"}.mdi-alert-octagram-outline::before{content:\"\\FCC3\"}.mdi-alert-outline::before{content:\"\\F02A\"}.mdi-alert-rhombus::before{content:\"\\F01F9\"}.mdi-alert-rhombus-outline::before{content:\"\\F01FA\"}.mdi-alien::before{content:\"\\F899\"}.mdi-alien-outline::before{content:\"\\F00F6\"}.mdi-align-horizontal-center::before{content:\"\\F01EE\"}.mdi-align-horizontal-left::before{content:\"\\F01ED\"}.mdi-align-horizontal-right::before{content:\"\\F01EF\"}.mdi-align-vertical-bottom::before{content:\"\\F01F0\"}.mdi-align-vertical-center::before{content:\"\\F01F1\"}.mdi-align-vertical-top::before{content:\"\\F01F2\"}.mdi-all-inclusive::before{content:\"\\F6BD\"}.mdi-alpha::before{content:\"\\F02B\"}.mdi-alpha-a::before{content:\"\\41\"}.mdi-alpha-a-box::before{content:\"\\FAED\"}.mdi-alpha-a-box-outline::before{content:\"\\FBC7\"}.mdi-alpha-a-circle::before{content:\"\\FBC8\"}.mdi-alpha-a-circle-outline::before{content:\"\\FBC9\"}.mdi-alpha-b::before{content:\"\\42\"}.mdi-alpha-b-box::before{content:\"\\FAEE\"}.mdi-alpha-b-box-outline::before{content:\"\\FBCA\"}.mdi-alpha-b-circle::before{content:\"\\FBCB\"}.mdi-alpha-b-circle-outline::before{content:\"\\FBCC\"}.mdi-alpha-c::before{content:\"\\43\"}.mdi-alpha-c-box::before{content:\"\\FAEF\"}.mdi-alpha-c-box-outline::before{content:\"\\FBCD\"}.mdi-alpha-c-circle::before{content:\"\\FBCE\"}.mdi-alpha-c-circle-outline::before{content:\"\\FBCF\"}.mdi-alpha-d::before{content:\"\\44\"}.mdi-alpha-d-box::before{content:\"\\FAF0\"}.mdi-alpha-d-box-outline::before{content:\"\\FBD0\"}.mdi-alpha-d-circle::before{content:\"\\FBD1\"}.mdi-alpha-d-circle-outline::before{content:\"\\FBD2\"}.mdi-alpha-e::before{content:\"\\45\"}.mdi-alpha-e-box::before{content:\"\\FAF1\"}.mdi-alpha-e-box-outline::before{content:\"\\FBD3\"}.mdi-alpha-e-circle::before{content:\"\\FBD4\"}.mdi-alpha-e-circle-outline::before{content:\"\\FBD5\"}.mdi-alpha-f::before{content:\"\\46\"}.mdi-alpha-f-box::before{content:\"\\FAF2\"}.mdi-alpha-f-box-outline::before{content:\"\\FBD6\"}.mdi-alpha-f-circle::before{content:\"\\FBD7\"}.mdi-alpha-f-circle-outline::before{content:\"\\FBD8\"}.mdi-alpha-g::before{content:\"\\47\"}.mdi-alpha-g-box::before{content:\"\\FAF3\"}.mdi-alpha-g-box-outline::before{content:\"\\FBD9\"}.mdi-alpha-g-circle::before{content:\"\\FBDA\"}.mdi-alpha-g-circle-outline::before{content:\"\\FBDB\"}.mdi-alpha-h::before{content:\"\\48\"}.mdi-alpha-h-box::before{content:\"\\FAF4\"}.mdi-alpha-h-box-outline::before{content:\"\\FBDC\"}.mdi-alpha-h-circle::before{content:\"\\FBDD\"}.mdi-alpha-h-circle-outline::before{content:\"\\FBDE\"}.mdi-alpha-i::before{content:\"\\49\"}.mdi-alpha-i-box::before{content:\"\\FAF5\"}.mdi-alpha-i-box-outline::before{content:\"\\FBDF\"}.mdi-alpha-i-circle::before{content:\"\\FBE0\"}.mdi-alpha-i-circle-outline::before{content:\"\\FBE1\"}.mdi-alpha-j::before{content:\"\\4A\"}.mdi-alpha-j-box::before{content:\"\\FAF6\"}.mdi-alpha-j-box-outline::before{content:\"\\FBE2\"}.mdi-alpha-j-circle::before{content:\"\\FBE3\"}.mdi-alpha-j-circle-outline::before{content:\"\\FBE4\"}.mdi-alpha-k::before{content:\"\\4B\"}.mdi-alpha-k-box::before{content:\"\\FAF7\"}.mdi-alpha-k-box-outline::before{content:\"\\FBE5\"}.mdi-alpha-k-circle::before{content:\"\\FBE6\"}.mdi-alpha-k-circle-outline::before{content:\"\\FBE7\"}.mdi-alpha-l::before{content:\"\\4C\"}.mdi-alpha-l-box::before{content:\"\\FAF8\"}.mdi-alpha-l-box-outline::before{content:\"\\FBE8\"}.mdi-alpha-l-circle::before{content:\"\\FBE9\"}.mdi-alpha-l-circle-outline::before{content:\"\\FBEA\"}.mdi-alpha-m::before{content:\"\\4D\"}.mdi-alpha-m-box::before{content:\"\\FAF9\"}.mdi-alpha-m-box-outline::before{content:\"\\FBEB\"}.mdi-alpha-m-circle::before{content:\"\\FBEC\"}.mdi-alpha-m-circle-outline::before{content:\"\\FBED\"}.mdi-alpha-n::before{content:\"\\4E\"}.mdi-alpha-n-box::before{content:\"\\FAFA\"}.mdi-alpha-n-box-outline::before{content:\"\\FBEE\"}.mdi-alpha-n-circle::before{content:\"\\FBEF\"}.mdi-alpha-n-circle-outline::before{content:\"\\FBF0\"}.mdi-alpha-o::before{content:\"\\4F\"}.mdi-alpha-o-box::before{content:\"\\FAFB\"}.mdi-alpha-o-box-outline::before{content:\"\\FBF1\"}.mdi-alpha-o-circle::before{content:\"\\FBF2\"}.mdi-alpha-o-circle-outline::before{content:\"\\FBF3\"}.mdi-alpha-p::before{content:\"\\50\"}.mdi-alpha-p-box::before{content:\"\\FAFC\"}.mdi-alpha-p-box-outline::before{content:\"\\FBF4\"}.mdi-alpha-p-circle::before{content:\"\\FBF5\"}.mdi-alpha-p-circle-outline::before{content:\"\\FBF6\"}.mdi-alpha-q::before{content:\"\\51\"}.mdi-alpha-q-box::before{content:\"\\FAFD\"}.mdi-alpha-q-box-outline::before{content:\"\\FBF7\"}.mdi-alpha-q-circle::before{content:\"\\FBF8\"}.mdi-alpha-q-circle-outline::before{content:\"\\FBF9\"}.mdi-alpha-r::before{content:\"\\52\"}.mdi-alpha-r-box::before{content:\"\\FAFE\"}.mdi-alpha-r-box-outline::before{content:\"\\FBFA\"}.mdi-alpha-r-circle::before{content:\"\\FBFB\"}.mdi-alpha-r-circle-outline::before{content:\"\\FBFC\"}.mdi-alpha-s::before{content:\"\\53\"}.mdi-alpha-s-box::before{content:\"\\FAFF\"}.mdi-alpha-s-box-outline::before{content:\"\\FBFD\"}.mdi-alpha-s-circle::before{content:\"\\FBFE\"}.mdi-alpha-s-circle-outline::before{content:\"\\FBFF\"}.mdi-alpha-t::before{content:\"\\54\"}.mdi-alpha-t-box::before{content:\"\\FB00\"}.mdi-alpha-t-box-outline::before{content:\"\\FC00\"}.mdi-alpha-t-circle::before{content:\"\\FC01\"}.mdi-alpha-t-circle-outline::before{content:\"\\FC02\"}.mdi-alpha-u::before{content:\"\\55\"}.mdi-alpha-u-box::before{content:\"\\FB01\"}.mdi-alpha-u-box-outline::before{content:\"\\FC03\"}.mdi-alpha-u-circle::before{content:\"\\FC04\"}.mdi-alpha-u-circle-outline::before{content:\"\\FC05\"}.mdi-alpha-v::before{content:\"\\56\"}.mdi-alpha-v-box::before{content:\"\\FB02\"}.mdi-alpha-v-box-outline::before{content:\"\\FC06\"}.mdi-alpha-v-circle::before{content:\"\\FC07\"}.mdi-alpha-v-circle-outline::before{content:\"\\FC08\"}.mdi-alpha-w::before{content:\"\\57\"}.mdi-alpha-w-box::before{content:\"\\FB03\"}.mdi-alpha-w-box-outline::before{content:\"\\FC09\"}.mdi-alpha-w-circle::before{content:\"\\FC0A\"}.mdi-alpha-w-circle-outline::before{content:\"\\FC0B\"}.mdi-alpha-x::before{content:\"\\58\"}.mdi-alpha-x-box::before{content:\"\\FB04\"}.mdi-alpha-x-box-outline::before{content:\"\\FC0C\"}.mdi-alpha-x-circle::before{content:\"\\FC0D\"}.mdi-alpha-x-circle-outline::before{content:\"\\FC0E\"}.mdi-alpha-y::before{content:\"\\59\"}.mdi-alpha-y-box::before{content:\"\\FB05\"}.mdi-alpha-y-box-outline::before{content:\"\\FC0F\"}.mdi-alpha-y-circle::before{content:\"\\FC10\"}.mdi-alpha-y-circle-outline::before{content:\"\\FC11\"}.mdi-alpha-z::before{content:\"\\5A\"}.mdi-alpha-z-box::before{content:\"\\FB06\"}.mdi-alpha-z-box-outline::before{content:\"\\FC12\"}.mdi-alpha-z-circle::before{content:\"\\FC13\"}.mdi-alpha-z-circle-outline::before{content:\"\\FC14\"}.mdi-alphabetical::before{content:\"\\F02C\"}.mdi-alphabetical-off::before{content:\"\\F002E\"}.mdi-alphabetical-variant::before{content:\"\\F002F\"}.mdi-alphabetical-variant-off::before{content:\"\\F0030\"}.mdi-altimeter::before{content:\"\\F5D7\"}.mdi-amazon::before{content:\"\\F02D\"}.mdi-amazon-alexa::before{content:\"\\F8C5\"}.mdi-amazon-drive::before{content:\"\\F02E\"}.mdi-ambulance::before{content:\"\\F02F\"}.mdi-ammunition::before{content:\"\\FCC4\"}.mdi-ampersand::before{content:\"\\FA8C\"}.mdi-amplifier::before{content:\"\\F030\"}.mdi-amplifier-off::before{content:\"\\F01E0\"}.mdi-anchor::before{content:\"\\F031\"}.mdi-android::before{content:\"\\F032\"}.mdi-android-auto::before{content:\"\\FA8D\"}.mdi-android-debug-bridge::before{content:\"\\F033\"}.mdi-android-head::before{content:\"\\F78F\"}.mdi-android-messages::before{content:\"\\FD21\"}.mdi-android-studio::before{content:\"\\F034\"}.mdi-angle-acute::before{content:\"\\F936\"}.mdi-angle-obtuse::before{content:\"\\F937\"}.mdi-angle-right::before{content:\"\\F938\"}.mdi-angular::before{content:\"\\F6B1\"}.mdi-angularjs::before{content:\"\\F6BE\"}.mdi-animation::before{content:\"\\F5D8\"}.mdi-animation-outline::before{content:\"\\FA8E\"}.mdi-animation-play::before{content:\"\\F939\"}.mdi-animation-play-outline::before{content:\"\\FA8F\"}.mdi-ansible::before{content:\"\\F00C5\"}.mdi-antenna::before{content:\"\\F0144\"}.mdi-anvil::before{content:\"\\F89A\"}.mdi-apache-kafka::before{content:\"\\F0031\"}.mdi-api::before{content:\"\\F00C6\"}.mdi-api-off::before{content:\"\\F0282\"}.mdi-apple::before{content:\"\\F035\"}.mdi-apple-finder::before{content:\"\\F036\"}.mdi-apple-icloud::before{content:\"\\F038\"}.mdi-apple-ios::before{content:\"\\F037\"}.mdi-apple-keyboard-caps::before{content:\"\\F632\"}.mdi-apple-keyboard-command::before{content:\"\\F633\"}.mdi-apple-keyboard-control::before{content:\"\\F634\"}.mdi-apple-keyboard-option::before{content:\"\\F635\"}.mdi-apple-keyboard-shift::before{content:\"\\F636\"}.mdi-apple-safari::before{content:\"\\F039\"}.mdi-application::before{content:\"\\F614\"}.mdi-application-export::before{content:\"\\FD89\"}.mdi-application-import::before{content:\"\\FD8A\"}.mdi-approximately-equal::before{content:\"\\FFBE\"}.mdi-approximately-equal-box::before{content:\"\\FFBF\"}.mdi-apps::before{content:\"\\F03B\"}.mdi-apps-box::before{content:\"\\FD22\"}.mdi-arch::before{content:\"\\F8C6\"}.mdi-archive::before{content:\"\\F03C\"}.mdi-archive-outline::before{content:\"\\F0239\"}.mdi-arm-flex::before{content:\"\\F008F\"}.mdi-arm-flex-outline::before{content:\"\\F0090\"}.mdi-arrange-bring-forward::before{content:\"\\F03D\"}.mdi-arrange-bring-to-front::before{content:\"\\F03E\"}.mdi-arrange-send-backward::before{content:\"\\F03F\"}.mdi-arrange-send-to-back::before{content:\"\\F040\"}.mdi-arrow-all::before{content:\"\\F041\"}.mdi-arrow-bottom-left::before{content:\"\\F042\"}.mdi-arrow-bottom-left-bold-outline::before{content:\"\\F9B6\"}.mdi-arrow-bottom-left-thick::before{content:\"\\F9B7\"}.mdi-arrow-bottom-right::before{content:\"\\F043\"}.mdi-arrow-bottom-right-bold-outline::before{content:\"\\F9B8\"}.mdi-arrow-bottom-right-thick::before{content:\"\\F9B9\"}.mdi-arrow-collapse::before{content:\"\\F615\"}.mdi-arrow-collapse-all::before{content:\"\\F044\"}.mdi-arrow-collapse-down::before{content:\"\\F791\"}.mdi-arrow-collapse-horizontal::before{content:\"\\F84B\"}.mdi-arrow-collapse-left::before{content:\"\\F792\"}.mdi-arrow-collapse-right::before{content:\"\\F793\"}.mdi-arrow-collapse-up::before{content:\"\\F794\"}.mdi-arrow-collapse-vertical::before{content:\"\\F84C\"}.mdi-arrow-decision::before{content:\"\\F9BA\"}.mdi-arrow-decision-auto::before{content:\"\\F9BB\"}.mdi-arrow-decision-auto-outline::before{content:\"\\F9BC\"}.mdi-arrow-decision-outline::before{content:\"\\F9BD\"}.mdi-arrow-down::before{content:\"\\F045\"}.mdi-arrow-down-bold::before{content:\"\\F72D\"}.mdi-arrow-down-bold-box::before{content:\"\\F72E\"}.mdi-arrow-down-bold-box-outline::before{content:\"\\F72F\"}.mdi-arrow-down-bold-circle::before{content:\"\\F047\"}.mdi-arrow-down-bold-circle-outline::before{content:\"\\F048\"}.mdi-arrow-down-bold-hexagon-outline::before{content:\"\\F049\"}.mdi-arrow-down-bold-outline::before{content:\"\\F9BE\"}.mdi-arrow-down-box::before{content:\"\\F6BF\"}.mdi-arrow-down-circle::before{content:\"\\FCB7\"}.mdi-arrow-down-circle-outline::before{content:\"\\FCB8\"}.mdi-arrow-down-drop-circle::before{content:\"\\F04A\"}.mdi-arrow-down-drop-circle-outline::before{content:\"\\F04B\"}.mdi-arrow-down-thick::before{content:\"\\F046\"}.mdi-arrow-expand::before{content:\"\\F616\"}.mdi-arrow-expand-all::before{content:\"\\F04C\"}.mdi-arrow-expand-down::before{content:\"\\F795\"}.mdi-arrow-expand-horizontal::before{content:\"\\F84D\"}.mdi-arrow-expand-left::before{content:\"\\F796\"}.mdi-arrow-expand-right::before{content:\"\\F797\"}.mdi-arrow-expand-up::before{content:\"\\F798\"}.mdi-arrow-expand-vertical::before{content:\"\\F84E\"}.mdi-arrow-horizontal-lock::before{content:\"\\F0186\"}.mdi-arrow-left::before{content:\"\\F04D\"}.mdi-arrow-left-bold::before{content:\"\\F730\"}.mdi-arrow-left-bold-box::before{content:\"\\F731\"}.mdi-arrow-left-bold-box-outline::before{content:\"\\F732\"}.mdi-arrow-left-bold-circle::before{content:\"\\F04F\"}.mdi-arrow-left-bold-circle-outline::before{content:\"\\F050\"}.mdi-arrow-left-bold-hexagon-outline::before{content:\"\\F051\"}.mdi-arrow-left-bold-outline::before{content:\"\\F9BF\"}.mdi-arrow-left-box::before{content:\"\\F6C0\"}.mdi-arrow-left-circle::before{content:\"\\FCB9\"}.mdi-arrow-left-circle-outline::before{content:\"\\FCBA\"}.mdi-arrow-left-drop-circle::before{content:\"\\F052\"}.mdi-arrow-left-drop-circle-outline::before{content:\"\\F053\"}.mdi-arrow-left-right::before{content:\"\\FE90\"}.mdi-arrow-left-right-bold::before{content:\"\\FE91\"}.mdi-arrow-left-right-bold-outline::before{content:\"\\F9C0\"}.mdi-arrow-left-thick::before{content:\"\\F04E\"}.mdi-arrow-right::before{content:\"\\F054\"}.mdi-arrow-right-bold::before{content:\"\\F733\"}.mdi-arrow-right-bold-box::before{content:\"\\F734\"}.mdi-arrow-right-bold-box-outline::before{content:\"\\F735\"}.mdi-arrow-right-bold-circle::before{content:\"\\F056\"}.mdi-arrow-right-bold-circle-outline::before{content:\"\\F057\"}.mdi-arrow-right-bold-hexagon-outline::before{content:\"\\F058\"}.mdi-arrow-right-bold-outline::before{content:\"\\F9C1\"}.mdi-arrow-right-box::before{content:\"\\F6C1\"}.mdi-arrow-right-circle::before{content:\"\\FCBB\"}.mdi-arrow-right-circle-outline::before{content:\"\\FCBC\"}.mdi-arrow-right-drop-circle::before{content:\"\\F059\"}.mdi-arrow-right-drop-circle-outline::before{content:\"\\F05A\"}.mdi-arrow-right-thick::before{content:\"\\F055\"}.mdi-arrow-split-horizontal::before{content:\"\\F93A\"}.mdi-arrow-split-vertical::before{content:\"\\F93B\"}.mdi-arrow-top-left::before{content:\"\\F05B\"}.mdi-arrow-top-left-bold-outline::before{content:\"\\F9C2\"}.mdi-arrow-top-left-bottom-right::before{content:\"\\FE92\"}.mdi-arrow-top-left-bottom-right-bold::before{content:\"\\FE93\"}.mdi-arrow-top-left-thick::before{content:\"\\F9C3\"}.mdi-arrow-top-right::before{content:\"\\F05C\"}.mdi-arrow-top-right-bold-outline::before{content:\"\\F9C4\"}.mdi-arrow-top-right-bottom-left::before{content:\"\\FE94\"}.mdi-arrow-top-right-bottom-left-bold::before{content:\"\\FE95\"}.mdi-arrow-top-right-thick::before{content:\"\\F9C5\"}.mdi-arrow-up::before{content:\"\\F05D\"}.mdi-arrow-up-bold::before{content:\"\\F736\"}.mdi-arrow-up-bold-box::before{content:\"\\F737\"}.mdi-arrow-up-bold-box-outline::before{content:\"\\F738\"}.mdi-arrow-up-bold-circle::before{content:\"\\F05F\"}.mdi-arrow-up-bold-circle-outline::before{content:\"\\F060\"}.mdi-arrow-up-bold-hexagon-outline::before{content:\"\\F061\"}.mdi-arrow-up-bold-outline::before{content:\"\\F9C6\"}.mdi-arrow-up-box::before{content:\"\\F6C2\"}.mdi-arrow-up-circle::before{content:\"\\FCBD\"}.mdi-arrow-up-circle-outline::before{content:\"\\FCBE\"}.mdi-arrow-up-down::before{content:\"\\FE96\"}.mdi-arrow-up-down-bold::before{content:\"\\FE97\"}.mdi-arrow-up-down-bold-outline::before{content:\"\\F9C7\"}.mdi-arrow-up-drop-circle::before{content:\"\\F062\"}.mdi-arrow-up-drop-circle-outline::before{content:\"\\F063\"}.mdi-arrow-up-thick::before{content:\"\\F05E\"}.mdi-arrow-vertical-lock::before{content:\"\\F0187\"}.mdi-artist::before{content:\"\\F802\"}.mdi-artist-outline::before{content:\"\\FCC5\"}.mdi-artstation::before{content:\"\\FB37\"}.mdi-aspect-ratio::before{content:\"\\FA23\"}.mdi-assistant::before{content:\"\\F064\"}.mdi-asterisk::before{content:\"\\F6C3\"}.mdi-at::before{content:\"\\F065\"}.mdi-atlassian::before{content:\"\\F803\"}.mdi-atm::before{content:\"\\FD23\"}.mdi-atom::before{content:\"\\F767\"}.mdi-atom-variant::before{content:\"\\FE98\"}.mdi-attachment::before{content:\"\\F066\"}.mdi-audio-video::before{content:\"\\F93C\"}.mdi-audio-video-off::before{content:\"\\F01E1\"}.mdi-audiobook::before{content:\"\\F067\"}.mdi-augmented-reality::before{content:\"\\F84F\"}.mdi-auto-fix::before{content:\"\\F068\"}.mdi-auto-upload::before{content:\"\\F069\"}.mdi-autorenew::before{content:\"\\F06A\"}.mdi-av-timer::before{content:\"\\F06B\"}.mdi-aws::before{content:\"\\FDF2\"}.mdi-axe::before{content:\"\\F8C7\"}.mdi-axis::before{content:\"\\FD24\"}.mdi-axis-arrow::before{content:\"\\FD25\"}.mdi-axis-arrow-lock::before{content:\"\\FD26\"}.mdi-axis-lock::before{content:\"\\FD27\"}.mdi-axis-x-arrow::before{content:\"\\FD28\"}.mdi-axis-x-arrow-lock::before{content:\"\\FD29\"}.mdi-axis-x-rotate-clockwise::before{content:\"\\FD2A\"}.mdi-axis-x-rotate-counterclockwise::before{content:\"\\FD2B\"}.mdi-axis-x-y-arrow-lock::before{content:\"\\FD2C\"}.mdi-axis-y-arrow::before{content:\"\\FD2D\"}.mdi-axis-y-arrow-lock::before{content:\"\\FD2E\"}.mdi-axis-y-rotate-clockwise::before{content:\"\\FD2F\"}.mdi-axis-y-rotate-counterclockwise::before{content:\"\\FD30\"}.mdi-axis-z-arrow::before{content:\"\\FD31\"}.mdi-axis-z-arrow-lock::before{content:\"\\FD32\"}.mdi-axis-z-rotate-clockwise::before{content:\"\\FD33\"}.mdi-axis-z-rotate-counterclockwise::before{content:\"\\FD34\"}.mdi-azure::before{content:\"\\F804\"}.mdi-azure-devops::before{content:\"\\F0091\"}.mdi-babel::before{content:\"\\FA24\"}.mdi-baby::before{content:\"\\F06C\"}.mdi-baby-bottle::before{content:\"\\FF56\"}.mdi-baby-bottle-outline::before{content:\"\\FF57\"}.mdi-baby-carriage::before{content:\"\\F68E\"}.mdi-baby-carriage-off::before{content:\"\\FFC0\"}.mdi-baby-face::before{content:\"\\FE99\"}.mdi-baby-face-outline::before{content:\"\\FE9A\"}.mdi-backburger::before{content:\"\\F06D\"}.mdi-backspace::before{content:\"\\F06E\"}.mdi-backspace-outline::before{content:\"\\FB38\"}.mdi-backspace-reverse::before{content:\"\\FE9B\"}.mdi-backspace-reverse-outline::before{content:\"\\FE9C\"}.mdi-backup-restore::before{content:\"\\F06F\"}.mdi-bacteria::before{content:\"\\FEF2\"}.mdi-bacteria-outline::before{content:\"\\FEF3\"}.mdi-badminton::before{content:\"\\F850\"}.mdi-bag-carry-on::before{content:\"\\FF58\"}.mdi-bag-carry-on-check::before{content:\"\\FD41\"}.mdi-bag-carry-on-off::before{content:\"\\FF59\"}.mdi-bag-checked::before{content:\"\\FF5A\"}.mdi-bag-personal::before{content:\"\\FDF3\"}.mdi-bag-personal-off::before{content:\"\\FDF4\"}.mdi-bag-personal-off-outline::before{content:\"\\FDF5\"}.mdi-bag-personal-outline::before{content:\"\\FDF6\"}.mdi-baguette::before{content:\"\\FF5B\"}.mdi-balloon::before{content:\"\\FA25\"}.mdi-ballot::before{content:\"\\F9C8\"}.mdi-ballot-outline::before{content:\"\\F9C9\"}.mdi-ballot-recount::before{content:\"\\FC15\"}.mdi-ballot-recount-outline::before{content:\"\\FC16\"}.mdi-bandage::before{content:\"\\FD8B\"}.mdi-bandcamp::before{content:\"\\F674\"}.mdi-bank::before{content:\"\\F070\"}.mdi-bank-minus::before{content:\"\\FD8C\"}.mdi-bank-outline::before{content:\"\\FE9D\"}.mdi-bank-plus::before{content:\"\\FD8D\"}.mdi-bank-remove::before{content:\"\\FD8E\"}.mdi-bank-transfer::before{content:\"\\FA26\"}.mdi-bank-transfer-in::before{content:\"\\FA27\"}.mdi-bank-transfer-out::before{content:\"\\FA28\"}.mdi-barcode::before{content:\"\\F071\"}.mdi-barcode-off::before{content:\"\\F0261\"}.mdi-barcode-scan::before{content:\"\\F072\"}.mdi-barley::before{content:\"\\F073\"}.mdi-barley-off::before{content:\"\\FB39\"}.mdi-barn::before{content:\"\\FB3A\"}.mdi-barrel::before{content:\"\\F074\"}.mdi-baseball::before{content:\"\\F851\"}.mdi-baseball-bat::before{content:\"\\F852\"}.mdi-basecamp::before{content:\"\\F075\"}.mdi-bash::before{content:\"\\F01AE\"}.mdi-basket::before{content:\"\\F076\"}.mdi-basket-fill::before{content:\"\\F077\"}.mdi-basket-outline::before{content:\"\\F01AC\"}.mdi-basket-unfill::before{content:\"\\F078\"}.mdi-basketball::before{content:\"\\F805\"}.mdi-basketball-hoop::before{content:\"\\FC17\"}.mdi-basketball-hoop-outline::before{content:\"\\FC18\"}.mdi-bat::before{content:\"\\FB3B\"}.mdi-battery::before{content:\"\\F079\"}.mdi-battery-10::before{content:\"\\F07A\"}.mdi-battery-10-bluetooth::before{content:\"\\F93D\"}.mdi-battery-20::before{content:\"\\F07B\"}.mdi-battery-20-bluetooth::before{content:\"\\F93E\"}.mdi-battery-30::before{content:\"\\F07C\"}.mdi-battery-30-bluetooth::before{content:\"\\F93F\"}.mdi-battery-40::before{content:\"\\F07D\"}.mdi-battery-40-bluetooth::before{content:\"\\F940\"}.mdi-battery-50::before{content:\"\\F07E\"}.mdi-battery-50-bluetooth::before{content:\"\\F941\"}.mdi-battery-60::before{content:\"\\F07F\"}.mdi-battery-60-bluetooth::before{content:\"\\F942\"}.mdi-battery-70::before{content:\"\\F080\"}.mdi-battery-70-bluetooth::before{content:\"\\F943\"}.mdi-battery-80::before{content:\"\\F081\"}.mdi-battery-80-bluetooth::before{content:\"\\F944\"}.mdi-battery-90::before{content:\"\\F082\"}.mdi-battery-90-bluetooth::before{content:\"\\F945\"}.mdi-battery-alert::before{content:\"\\F083\"}.mdi-battery-alert-bluetooth::before{content:\"\\F946\"}.mdi-battery-alert-variant::before{content:\"\\F00F7\"}.mdi-battery-alert-variant-outline::before{content:\"\\F00F8\"}.mdi-battery-bluetooth::before{content:\"\\F947\"}.mdi-battery-bluetooth-variant::before{content:\"\\F948\"}.mdi-battery-charging::before{content:\"\\F084\"}.mdi-battery-charging-10::before{content:\"\\F89B\"}.mdi-battery-charging-100::before{content:\"\\F085\"}.mdi-battery-charging-20::before{content:\"\\F086\"}.mdi-battery-charging-30::before{content:\"\\F087\"}.mdi-battery-charging-40::before{content:\"\\F088\"}.mdi-battery-charging-50::before{content:\"\\F89C\"}.mdi-battery-charging-60::before{content:\"\\F089\"}.mdi-battery-charging-70::before{content:\"\\F89D\"}.mdi-battery-charging-80::before{content:\"\\F08A\"}.mdi-battery-charging-90::before{content:\"\\F08B\"}.mdi-battery-charging-outline::before{content:\"\\F89E\"}.mdi-battery-charging-wireless::before{content:\"\\F806\"}.mdi-battery-charging-wireless-10::before{content:\"\\F807\"}.mdi-battery-charging-wireless-20::before{content:\"\\F808\"}.mdi-battery-charging-wireless-30::before{content:\"\\F809\"}.mdi-battery-charging-wireless-40::before{content:\"\\F80A\"}.mdi-battery-charging-wireless-50::before{content:\"\\F80B\"}.mdi-battery-charging-wireless-60::before{content:\"\\F80C\"}.mdi-battery-charging-wireless-70::before{content:\"\\F80D\"}.mdi-battery-charging-wireless-80::before{content:\"\\F80E\"}.mdi-battery-charging-wireless-90::before{content:\"\\F80F\"}.mdi-battery-charging-wireless-alert::before{content:\"\\F810\"}.mdi-battery-charging-wireless-outline::before{content:\"\\F811\"}.mdi-battery-heart::before{content:\"\\F023A\"}.mdi-battery-heart-outline::before{content:\"\\F023B\"}.mdi-battery-heart-variant::before{content:\"\\F023C\"}.mdi-battery-minus::before{content:\"\\F08C\"}.mdi-battery-negative::before{content:\"\\F08D\"}.mdi-battery-outline::before{content:\"\\F08E\"}.mdi-battery-plus::before{content:\"\\F08F\"}.mdi-battery-positive::before{content:\"\\F090\"}.mdi-battery-unknown::before{content:\"\\F091\"}.mdi-battery-unknown-bluetooth::before{content:\"\\F949\"}.mdi-battlenet::before{content:\"\\FB3C\"}.mdi-beach::before{content:\"\\F092\"}.mdi-beaker::before{content:\"\\FCC6\"}.mdi-beaker-alert::before{content:\"\\F0254\"}.mdi-beaker-alert-outline::before{content:\"\\F0255\"}.mdi-beaker-check::before{content:\"\\F0256\"}.mdi-beaker-check-outline::before{content:\"\\F0257\"}.mdi-beaker-minus::before{content:\"\\F0258\"}.mdi-beaker-minus-outline::before{content:\"\\F0259\"}.mdi-beaker-outline::before{content:\"\\F68F\"}.mdi-beaker-plus::before{content:\"\\F025A\"}.mdi-beaker-plus-outline::before{content:\"\\F025B\"}.mdi-beaker-question::before{content:\"\\F025C\"}.mdi-beaker-question-outline::before{content:\"\\F025D\"}.mdi-beaker-remove::before{content:\"\\F025E\"}.mdi-beaker-remove-outline::before{content:\"\\F025F\"}.mdi-beats::before{content:\"\\F097\"}.mdi-bed-double::before{content:\"\\F0092\"}.mdi-bed-double-outline::before{content:\"\\F0093\"}.mdi-bed-empty::before{content:\"\\F89F\"}.mdi-bed-king::before{content:\"\\F0094\"}.mdi-bed-king-outline::before{content:\"\\F0095\"}.mdi-bed-queen::before{content:\"\\F0096\"}.mdi-bed-queen-outline::before{content:\"\\F0097\"}.mdi-bed-single::before{content:\"\\F0098\"}.mdi-bed-single-outline::before{content:\"\\F0099\"}.mdi-bee::before{content:\"\\FFC1\"}.mdi-bee-flower::before{content:\"\\FFC2\"}.mdi-beehive-outline::before{content:\"\\F00F9\"}.mdi-beer::before{content:\"\\F098\"}.mdi-behance::before{content:\"\\F099\"}.mdi-bell::before{content:\"\\F09A\"}.mdi-bell-alert::before{content:\"\\FD35\"}.mdi-bell-alert-outline::before{content:\"\\FE9E\"}.mdi-bell-check::before{content:\"\\F0210\"}.mdi-bell-check-outline::before{content:\"\\F0211\"}.mdi-bell-circle::before{content:\"\\FD36\"}.mdi-bell-circle-outline::before{content:\"\\FD37\"}.mdi-bell-off::before{content:\"\\F09B\"}.mdi-bell-off-outline::before{content:\"\\FA90\"}.mdi-bell-outline::before{content:\"\\F09C\"}.mdi-bell-plus::before{content:\"\\F09D\"}.mdi-bell-plus-outline::before{content:\"\\FA91\"}.mdi-bell-ring::before{content:\"\\F09E\"}.mdi-bell-ring-outline::before{content:\"\\F09F\"}.mdi-bell-sleep::before{content:\"\\F0A0\"}.mdi-bell-sleep-outline::before{content:\"\\FA92\"}.mdi-beta::before{content:\"\\F0A1\"}.mdi-betamax::before{content:\"\\F9CA\"}.mdi-biathlon::before{content:\"\\FDF7\"}.mdi-bible::before{content:\"\\F0A2\"}.mdi-bicycle::before{content:\"\\F00C7\"}.mdi-bicycle-basket::before{content:\"\\F0260\"}.mdi-bike::before{content:\"\\F0A3\"}.mdi-bike-fast::before{content:\"\\F014A\"}.mdi-billboard::before{content:\"\\F0032\"}.mdi-billiards::before{content:\"\\FB3D\"}.mdi-billiards-rack::before{content:\"\\FB3E\"}.mdi-bing::before{content:\"\\F0A4\"}.mdi-binoculars::before{content:\"\\F0A5\"}.mdi-bio::before{content:\"\\F0A6\"}.mdi-biohazard::before{content:\"\\F0A7\"}.mdi-bitbucket::before{content:\"\\F0A8\"}.mdi-bitcoin::before{content:\"\\F812\"}.mdi-black-mesa::before{content:\"\\F0A9\"}.mdi-blackberry::before{content:\"\\F0AA\"}.mdi-blender::before{content:\"\\FCC7\"}.mdi-blender-software::before{content:\"\\F0AB\"}.mdi-blinds::before{content:\"\\F0AC\"}.mdi-blinds-open::before{content:\"\\F0033\"}.mdi-block-helper::before{content:\"\\F0AD\"}.mdi-blogger::before{content:\"\\F0AE\"}.mdi-blood-bag::before{content:\"\\FCC8\"}.mdi-bluetooth::before{content:\"\\F0AF\"}.mdi-bluetooth-audio::before{content:\"\\F0B0\"}.mdi-bluetooth-connect::before{content:\"\\F0B1\"}.mdi-bluetooth-off::before{content:\"\\F0B2\"}.mdi-bluetooth-settings::before{content:\"\\F0B3\"}.mdi-bluetooth-transfer::before{content:\"\\F0B4\"}.mdi-blur::before{content:\"\\F0B5\"}.mdi-blur-linear::before{content:\"\\F0B6\"}.mdi-blur-off::before{content:\"\\F0B7\"}.mdi-blur-radial::before{content:\"\\F0B8\"}.mdi-bolnisi-cross::before{content:\"\\FCC9\"}.mdi-bolt::before{content:\"\\FD8F\"}.mdi-bomb::before{content:\"\\F690\"}.mdi-bomb-off::before{content:\"\\F6C4\"}.mdi-bone::before{content:\"\\F0B9\"}.mdi-book::before{content:\"\\F0BA\"}.mdi-book-information-variant::before{content:\"\\F009A\"}.mdi-book-lock::before{content:\"\\F799\"}.mdi-book-lock-open::before{content:\"\\F79A\"}.mdi-book-minus::before{content:\"\\F5D9\"}.mdi-book-minus-multiple::before{content:\"\\FA93\"}.mdi-book-multiple::before{content:\"\\F0BB\"}.mdi-book-open::before{content:\"\\F0BD\"}.mdi-book-open-outline::before{content:\"\\FB3F\"}.mdi-book-open-page-variant::before{content:\"\\F5DA\"}.mdi-book-open-variant::before{content:\"\\F0BE\"}.mdi-book-outline::before{content:\"\\FB40\"}.mdi-book-play::before{content:\"\\FE9F\"}.mdi-book-play-outline::before{content:\"\\FEA0\"}.mdi-book-plus::before{content:\"\\F5DB\"}.mdi-book-plus-multiple::before{content:\"\\FA94\"}.mdi-book-remove::before{content:\"\\FA96\"}.mdi-book-remove-multiple::before{content:\"\\FA95\"}.mdi-book-search::before{content:\"\\FEA1\"}.mdi-book-search-outline::before{content:\"\\FEA2\"}.mdi-book-variant::before{content:\"\\F0BF\"}.mdi-book-variant-multiple::before{content:\"\\F0BC\"}.mdi-bookmark::before{content:\"\\F0C0\"}.mdi-bookmark-check::before{content:\"\\F0C1\"}.mdi-bookmark-minus::before{content:\"\\F9CB\"}.mdi-bookmark-minus-outline::before{content:\"\\F9CC\"}.mdi-bookmark-multiple::before{content:\"\\FDF8\"}.mdi-bookmark-multiple-outline::before{content:\"\\FDF9\"}.mdi-bookmark-music::before{content:\"\\F0C2\"}.mdi-bookmark-off::before{content:\"\\F9CD\"}.mdi-bookmark-off-outline::before{content:\"\\F9CE\"}.mdi-bookmark-outline::before{content:\"\\F0C3\"}.mdi-bookmark-plus::before{content:\"\\F0C5\"}.mdi-bookmark-plus-outline::before{content:\"\\F0C4\"}.mdi-bookmark-remove::before{content:\"\\F0C6\"}.mdi-boom-gate::before{content:\"\\FEA3\"}.mdi-boom-gate-alert::before{content:\"\\FEA4\"}.mdi-boom-gate-alert-outline::before{content:\"\\FEA5\"}.mdi-boom-gate-down::before{content:\"\\FEA6\"}.mdi-boom-gate-down-outline::before{content:\"\\FEA7\"}.mdi-boom-gate-outline::before{content:\"\\FEA8\"}.mdi-boom-gate-up::before{content:\"\\FEA9\"}.mdi-boom-gate-up-outline::before{content:\"\\FEAA\"}.mdi-boombox::before{content:\"\\F5DC\"}.mdi-boomerang::before{content:\"\\F00FA\"}.mdi-bootstrap::before{content:\"\\F6C5\"}.mdi-border-all::before{content:\"\\F0C7\"}.mdi-border-all-variant::before{content:\"\\F8A0\"}.mdi-border-bottom::before{content:\"\\F0C8\"}.mdi-border-bottom-variant::before{content:\"\\F8A1\"}.mdi-border-color::before{content:\"\\F0C9\"}.mdi-border-horizontal::before{content:\"\\F0CA\"}.mdi-border-inside::before{content:\"\\F0CB\"}.mdi-border-left::before{content:\"\\F0CC\"}.mdi-border-left-variant::before{content:\"\\F8A2\"}.mdi-border-none::before{content:\"\\F0CD\"}.mdi-border-none-variant::before{content:\"\\F8A3\"}.mdi-border-outside::before{content:\"\\F0CE\"}.mdi-border-right::before{content:\"\\F0CF\"}.mdi-border-right-variant::before{content:\"\\F8A4\"}.mdi-border-style::before{content:\"\\F0D0\"}.mdi-border-top::before{content:\"\\F0D1\"}.mdi-border-top-variant::before{content:\"\\F8A5\"}.mdi-border-vertical::before{content:\"\\F0D2\"}.mdi-bottle-soda::before{content:\"\\F009B\"}.mdi-bottle-soda-classic::before{content:\"\\F009C\"}.mdi-bottle-soda-outline::before{content:\"\\F009D\"}.mdi-bottle-tonic::before{content:\"\\F0159\"}.mdi-bottle-tonic-outline::before{content:\"\\F015A\"}.mdi-bottle-tonic-plus::before{content:\"\\F015B\"}.mdi-bottle-tonic-plus-outline::before{content:\"\\F015C\"}.mdi-bottle-tonic-skull::before{content:\"\\F015D\"}.mdi-bottle-tonic-skull-outline::before{content:\"\\F015E\"}.mdi-bottle-wine::before{content:\"\\F853\"}.mdi-bow-tie::before{content:\"\\F677\"}.mdi-bowl::before{content:\"\\F617\"}.mdi-bowling::before{content:\"\\F0D3\"}.mdi-box::before{content:\"\\F0D4\"}.mdi-box-cutter::before{content:\"\\F0D5\"}.mdi-box-shadow::before{content:\"\\F637\"}.mdi-boxing-glove::before{content:\"\\FB41\"}.mdi-braille::before{content:\"\\F9CF\"}.mdi-brain::before{content:\"\\F9D0\"}.mdi-bread-slice::before{content:\"\\FCCA\"}.mdi-bread-slice-outline::before{content:\"\\FCCB\"}.mdi-bridge::before{content:\"\\F618\"}.mdi-briefcase::before{content:\"\\F0D6\"}.mdi-briefcase-account::before{content:\"\\FCCC\"}.mdi-briefcase-account-outline::before{content:\"\\FCCD\"}.mdi-briefcase-check::before{content:\"\\F0D7\"}.mdi-briefcase-clock::before{content:\"\\F00FB\"}.mdi-briefcase-clock-outline::before{content:\"\\F00FC\"}.mdi-briefcase-download::before{content:\"\\F0D8\"}.mdi-briefcase-download-outline::before{content:\"\\FC19\"}.mdi-briefcase-edit::before{content:\"\\FA97\"}.mdi-briefcase-edit-outline::before{content:\"\\FC1A\"}.mdi-briefcase-minus::before{content:\"\\FA29\"}.mdi-briefcase-minus-outline::before{content:\"\\FC1B\"}.mdi-briefcase-outline::before{content:\"\\F813\"}.mdi-briefcase-plus::before{content:\"\\FA2A\"}.mdi-briefcase-plus-outline::before{content:\"\\FC1C\"}.mdi-briefcase-remove::before{content:\"\\FA2B\"}.mdi-briefcase-remove-outline::before{content:\"\\FC1D\"}.mdi-briefcase-search::before{content:\"\\FA2C\"}.mdi-briefcase-search-outline::before{content:\"\\FC1E\"}.mdi-briefcase-upload::before{content:\"\\F0D9\"}.mdi-briefcase-upload-outline::before{content:\"\\FC1F\"}.mdi-brightness-1::before{content:\"\\F0DA\"}.mdi-brightness-2::before{content:\"\\F0DB\"}.mdi-brightness-3::before{content:\"\\F0DC\"}.mdi-brightness-4::before{content:\"\\F0DD\"}.mdi-brightness-5::before{content:\"\\F0DE\"}.mdi-brightness-6::before{content:\"\\F0DF\"}.mdi-brightness-7::before{content:\"\\F0E0\"}.mdi-brightness-auto::before{content:\"\\F0E1\"}.mdi-brightness-percent::before{content:\"\\FCCE\"}.mdi-broom::before{content:\"\\F0E2\"}.mdi-brush::before{content:\"\\F0E3\"}.mdi-buddhism::before{content:\"\\F94A\"}.mdi-buffer::before{content:\"\\F619\"}.mdi-bug::before{content:\"\\F0E4\"}.mdi-bug-check::before{content:\"\\FA2D\"}.mdi-bug-check-outline::before{content:\"\\FA2E\"}.mdi-bug-outline::before{content:\"\\FA2F\"}.mdi-bugle::before{content:\"\\FD90\"}.mdi-bulldozer::before{content:\"\\FB07\"}.mdi-bullet::before{content:\"\\FCCF\"}.mdi-bulletin-board::before{content:\"\\F0E5\"}.mdi-bullhorn::before{content:\"\\F0E6\"}.mdi-bullhorn-outline::before{content:\"\\FB08\"}.mdi-bullseye::before{content:\"\\F5DD\"}.mdi-bullseye-arrow::before{content:\"\\F8C8\"}.mdi-bus::before{content:\"\\F0E7\"}.mdi-bus-alert::before{content:\"\\FA98\"}.mdi-bus-articulated-end::before{content:\"\\F79B\"}.mdi-bus-articulated-front::before{content:\"\\F79C\"}.mdi-bus-clock::before{content:\"\\F8C9\"}.mdi-bus-double-decker::before{content:\"\\F79D\"}.mdi-bus-marker::before{content:\"\\F023D\"}.mdi-bus-multiple::before{content:\"\\FF5C\"}.mdi-bus-school::before{content:\"\\F79E\"}.mdi-bus-side::before{content:\"\\F79F\"}.mdi-bus-stop::before{content:\"\\F0034\"}.mdi-bus-stop-covered::before{content:\"\\F0035\"}.mdi-bus-stop-uncovered::before{content:\"\\F0036\"}.mdi-cached::before{content:\"\\F0E8\"}.mdi-cactus::before{content:\"\\FD91\"}.mdi-cake::before{content:\"\\F0E9\"}.mdi-cake-layered::before{content:\"\\F0EA\"}.mdi-cake-variant::before{content:\"\\F0EB\"}.mdi-calculator::before{content:\"\\F0EC\"}.mdi-calculator-variant::before{content:\"\\FA99\"}.mdi-calendar::before{content:\"\\F0ED\"}.mdi-calendar-account::before{content:\"\\FEF4\"}.mdi-calendar-account-outline::before{content:\"\\FEF5\"}.mdi-calendar-alert::before{content:\"\\FA30\"}.mdi-calendar-arrow-left::before{content:\"\\F015F\"}.mdi-calendar-arrow-right::before{content:\"\\F0160\"}.mdi-calendar-blank::before{content:\"\\F0EE\"}.mdi-calendar-blank-multiple::before{content:\"\\F009E\"}.mdi-calendar-blank-outline::before{content:\"\\FB42\"}.mdi-calendar-check::before{content:\"\\F0EF\"}.mdi-calendar-check-outline::before{content:\"\\FC20\"}.mdi-calendar-clock::before{content:\"\\F0F0\"}.mdi-calendar-edit::before{content:\"\\F8A6\"}.mdi-calendar-export::before{content:\"\\FB09\"}.mdi-calendar-heart::before{content:\"\\F9D1\"}.mdi-calendar-import::before{content:\"\\FB0A\"}.mdi-calendar-minus::before{content:\"\\FD38\"}.mdi-calendar-month::before{content:\"\\FDFA\"}.mdi-calendar-month-outline::before{content:\"\\FDFB\"}.mdi-calendar-multiple::before{content:\"\\F0F1\"}.mdi-calendar-multiple-check::before{content:\"\\F0F2\"}.mdi-calendar-multiselect::before{content:\"\\FA31\"}.mdi-calendar-outline::before{content:\"\\FB43\"}.mdi-calendar-plus::before{content:\"\\F0F3\"}.mdi-calendar-question::before{content:\"\\F691\"}.mdi-calendar-range::before{content:\"\\F678\"}.mdi-calendar-range-outline::before{content:\"\\FB44\"}.mdi-calendar-remove::before{content:\"\\F0F4\"}.mdi-calendar-remove-outline::before{content:\"\\FC21\"}.mdi-calendar-repeat::before{content:\"\\FEAB\"}.mdi-calendar-repeat-outline::before{content:\"\\FEAC\"}.mdi-calendar-search::before{content:\"\\F94B\"}.mdi-calendar-star::before{content:\"\\F9D2\"}.mdi-calendar-text::before{content:\"\\F0F5\"}.mdi-calendar-text-outline::before{content:\"\\FC22\"}.mdi-calendar-today::before{content:\"\\F0F6\"}.mdi-calendar-week::before{content:\"\\FA32\"}.mdi-calendar-week-begin::before{content:\"\\FA33\"}.mdi-calendar-weekend::before{content:\"\\FEF6\"}.mdi-calendar-weekend-outline::before{content:\"\\FEF7\"}.mdi-call-made::before{content:\"\\F0F7\"}.mdi-call-merge::before{content:\"\\F0F8\"}.mdi-call-missed::before{content:\"\\F0F9\"}.mdi-call-received::before{content:\"\\F0FA\"}.mdi-call-split::before{content:\"\\F0FB\"}.mdi-camcorder::before{content:\"\\F0FC\"}.mdi-camcorder-box::before{content:\"\\F0FD\"}.mdi-camcorder-box-off::before{content:\"\\F0FE\"}.mdi-camcorder-off::before{content:\"\\F0FF\"}.mdi-camera::before{content:\"\\F100\"}.mdi-camera-account::before{content:\"\\F8CA\"}.mdi-camera-burst::before{content:\"\\F692\"}.mdi-camera-control::before{content:\"\\FB45\"}.mdi-camera-enhance::before{content:\"\\F101\"}.mdi-camera-enhance-outline::before{content:\"\\FB46\"}.mdi-camera-front::before{content:\"\\F102\"}.mdi-camera-front-variant::before{content:\"\\F103\"}.mdi-camera-gopro::before{content:\"\\F7A0\"}.mdi-camera-image::before{content:\"\\F8CB\"}.mdi-camera-iris::before{content:\"\\F104\"}.mdi-camera-metering-center::before{content:\"\\F7A1\"}.mdi-camera-metering-matrix::before{content:\"\\F7A2\"}.mdi-camera-metering-partial::before{content:\"\\F7A3\"}.mdi-camera-metering-spot::before{content:\"\\F7A4\"}.mdi-camera-off::before{content:\"\\F5DF\"}.mdi-camera-outline::before{content:\"\\FD39\"}.mdi-camera-party-mode::before{content:\"\\F105\"}.mdi-camera-plus::before{content:\"\\FEF8\"}.mdi-camera-plus-outline::before{content:\"\\FEF9\"}.mdi-camera-rear::before{content:\"\\F106\"}.mdi-camera-rear-variant::before{content:\"\\F107\"}.mdi-camera-retake::before{content:\"\\FDFC\"}.mdi-camera-retake-outline::before{content:\"\\FDFD\"}.mdi-camera-switch::before{content:\"\\F108\"}.mdi-camera-timer::before{content:\"\\F109\"}.mdi-camera-wireless::before{content:\"\\FD92\"}.mdi-camera-wireless-outline::before{content:\"\\FD93\"}.mdi-campfire::before{content:\"\\FEFA\"}.mdi-cancel::before{content:\"\\F739\"}.mdi-candle::before{content:\"\\F5E2\"}.mdi-candycane::before{content:\"\\F10A\"}.mdi-cannabis::before{content:\"\\F7A5\"}.mdi-caps-lock::before{content:\"\\FA9A\"}.mdi-car::before{content:\"\\F10B\"}.mdi-car-2-plus::before{content:\"\\F0037\"}.mdi-car-3-plus::before{content:\"\\F0038\"}.mdi-car-back::before{content:\"\\FDFE\"}.mdi-car-battery::before{content:\"\\F10C\"}.mdi-car-brake-abs::before{content:\"\\FC23\"}.mdi-car-brake-alert::before{content:\"\\FC24\"}.mdi-car-brake-hold::before{content:\"\\FD3A\"}.mdi-car-brake-parking::before{content:\"\\FD3B\"}.mdi-car-brake-retarder::before{content:\"\\F0039\"}.mdi-car-child-seat::before{content:\"\\FFC3\"}.mdi-car-clutch::before{content:\"\\F003A\"}.mdi-car-connected::before{content:\"\\F10D\"}.mdi-car-convertible::before{content:\"\\F7A6\"}.mdi-car-coolant-level::before{content:\"\\F003B\"}.mdi-car-cruise-control::before{content:\"\\FD3C\"}.mdi-car-defrost-front::before{content:\"\\FD3D\"}.mdi-car-defrost-rear::before{content:\"\\FD3E\"}.mdi-car-door::before{content:\"\\FB47\"}.mdi-car-door-lock::before{content:\"\\F00C8\"}.mdi-car-electric::before{content:\"\\FB48\"}.mdi-car-esp::before{content:\"\\FC25\"}.mdi-car-estate::before{content:\"\\F7A7\"}.mdi-car-hatchback::before{content:\"\\F7A8\"}.mdi-car-info::before{content:\"\\F01E9\"}.mdi-car-key::before{content:\"\\FB49\"}.mdi-car-light-dimmed::before{content:\"\\FC26\"}.mdi-car-light-fog::before{content:\"\\FC27\"}.mdi-car-light-high::before{content:\"\\FC28\"}.mdi-car-limousine::before{content:\"\\F8CC\"}.mdi-car-multiple::before{content:\"\\FB4A\"}.mdi-car-off::before{content:\"\\FDFF\"}.mdi-car-parking-lights::before{content:\"\\FD3F\"}.mdi-car-pickup::before{content:\"\\F7A9\"}.mdi-car-seat::before{content:\"\\FFC4\"}.mdi-car-seat-cooler::before{content:\"\\FFC5\"}.mdi-car-seat-heater::before{content:\"\\FFC6\"}.mdi-car-shift-pattern::before{content:\"\\FF5D\"}.mdi-car-side::before{content:\"\\F7AA\"}.mdi-car-sports::before{content:\"\\F7AB\"}.mdi-car-tire-alert::before{content:\"\\FC29\"}.mdi-car-traction-control::before{content:\"\\FD40\"}.mdi-car-turbocharger::before{content:\"\\F003C\"}.mdi-car-wash::before{content:\"\\F10E\"}.mdi-car-windshield::before{content:\"\\F003D\"}.mdi-car-windshield-outline::before{content:\"\\F003E\"}.mdi-caravan::before{content:\"\\F7AC\"}.mdi-card::before{content:\"\\FB4B\"}.mdi-card-bulleted::before{content:\"\\FB4C\"}.mdi-card-bulleted-off::before{content:\"\\FB4D\"}.mdi-card-bulleted-off-outline::before{content:\"\\FB4E\"}.mdi-card-bulleted-outline::before{content:\"\\FB4F\"}.mdi-card-bulleted-settings::before{content:\"\\FB50\"}.mdi-card-bulleted-settings-outline::before{content:\"\\FB51\"}.mdi-card-outline::before{content:\"\\FB52\"}.mdi-card-plus::before{content:\"\\F022A\"}.mdi-card-plus-outline::before{content:\"\\F022B\"}.mdi-card-search::before{content:\"\\F009F\"}.mdi-card-search-outline::before{content:\"\\F00A0\"}.mdi-card-text::before{content:\"\\FB53\"}.mdi-card-text-outline::before{content:\"\\FB54\"}.mdi-cards::before{content:\"\\F638\"}.mdi-cards-club::before{content:\"\\F8CD\"}.mdi-cards-diamond::before{content:\"\\F8CE\"}.mdi-cards-diamond-outline::before{content:\"\\F003F\"}.mdi-cards-heart::before{content:\"\\F8CF\"}.mdi-cards-outline::before{content:\"\\F639\"}.mdi-cards-playing-outline::before{content:\"\\F63A\"}.mdi-cards-spade::before{content:\"\\F8D0\"}.mdi-cards-variant::before{content:\"\\F6C6\"}.mdi-carrot::before{content:\"\\F10F\"}.mdi-cart::before{content:\"\\F110\"}.mdi-cart-arrow-down::before{content:\"\\FD42\"}.mdi-cart-arrow-right::before{content:\"\\FC2A\"}.mdi-cart-arrow-up::before{content:\"\\FD43\"}.mdi-cart-minus::before{content:\"\\FD44\"}.mdi-cart-off::before{content:\"\\F66B\"}.mdi-cart-outline::before{content:\"\\F111\"}.mdi-cart-plus::before{content:\"\\F112\"}.mdi-cart-remove::before{content:\"\\FD45\"}.mdi-case-sensitive-alt::before{content:\"\\F113\"}.mdi-cash::before{content:\"\\F114\"}.mdi-cash-100::before{content:\"\\F115\"}.mdi-cash-marker::before{content:\"\\FD94\"}.mdi-cash-multiple::before{content:\"\\F116\"}.mdi-cash-refund::before{content:\"\\FA9B\"}.mdi-cash-register::before{content:\"\\FCD0\"}.mdi-cash-usd::before{content:\"\\F01A1\"}.mdi-cash-usd-outline::before{content:\"\\F117\"}.mdi-cassette::before{content:\"\\F9D3\"}.mdi-cast::before{content:\"\\F118\"}.mdi-cast-audio::before{content:\"\\F0040\"}.mdi-cast-connected::before{content:\"\\F119\"}.mdi-cast-education::before{content:\"\\FE6D\"}.mdi-cast-off::before{content:\"\\F789\"}.mdi-castle::before{content:\"\\F11A\"}.mdi-cat::before{content:\"\\F11B\"}.mdi-cctv::before{content:\"\\F7AD\"}.mdi-ceiling-light::before{content:\"\\F768\"}.mdi-cellphone::before{content:\"\\F11C\"}.mdi-cellphone-android::before{content:\"\\F11D\"}.mdi-cellphone-arrow-down::before{content:\"\\F9D4\"}.mdi-cellphone-basic::before{content:\"\\F11E\"}.mdi-cellphone-dock::before{content:\"\\F11F\"}.mdi-cellphone-erase::before{content:\"\\F94C\"}.mdi-cellphone-information::before{content:\"\\FF5E\"}.mdi-cellphone-iphone::before{content:\"\\F120\"}.mdi-cellphone-key::before{content:\"\\F94D\"}.mdi-cellphone-link::before{content:\"\\F121\"}.mdi-cellphone-link-off::before{content:\"\\F122\"}.mdi-cellphone-lock::before{content:\"\\F94E\"}.mdi-cellphone-message::before{content:\"\\F8D2\"}.mdi-cellphone-message-off::before{content:\"\\F00FD\"}.mdi-cellphone-nfc::before{content:\"\\FEAD\"}.mdi-cellphone-off::before{content:\"\\F94F\"}.mdi-cellphone-play::before{content:\"\\F0041\"}.mdi-cellphone-screenshot::before{content:\"\\FA34\"}.mdi-cellphone-settings::before{content:\"\\F123\"}.mdi-cellphone-settings-variant::before{content:\"\\F950\"}.mdi-cellphone-sound::before{content:\"\\F951\"}.mdi-cellphone-text::before{content:\"\\F8D1\"}.mdi-cellphone-wireless::before{content:\"\\F814\"}.mdi-celtic-cross::before{content:\"\\FCD1\"}.mdi-centos::before{content:\"\\F0145\"}.mdi-certificate::before{content:\"\\F124\"}.mdi-certificate-outline::before{content:\"\\F01B3\"}.mdi-chair-rolling::before{content:\"\\FFBA\"}.mdi-chair-school::before{content:\"\\F125\"}.mdi-charity::before{content:\"\\FC2B\"}.mdi-chart-arc::before{content:\"\\F126\"}.mdi-chart-areaspline::before{content:\"\\F127\"}.mdi-chart-areaspline-variant::before{content:\"\\FEAE\"}.mdi-chart-bar::before{content:\"\\F128\"}.mdi-chart-bar-stacked::before{content:\"\\F769\"}.mdi-chart-bell-curve::before{content:\"\\FC2C\"}.mdi-chart-bell-curve-cumulative::before{content:\"\\FFC7\"}.mdi-chart-bubble::before{content:\"\\F5E3\"}.mdi-chart-donut::before{content:\"\\F7AE\"}.mdi-chart-donut-variant::before{content:\"\\F7AF\"}.mdi-chart-gantt::before{content:\"\\F66C\"}.mdi-chart-histogram::before{content:\"\\F129\"}.mdi-chart-line::before{content:\"\\F12A\"}.mdi-chart-line-stacked::before{content:\"\\F76A\"}.mdi-chart-line-variant::before{content:\"\\F7B0\"}.mdi-chart-multiline::before{content:\"\\F8D3\"}.mdi-chart-multiple::before{content:\"\\F023E\"}.mdi-chart-pie::before{content:\"\\F12B\"}.mdi-chart-scatter-plot::before{content:\"\\FEAF\"}.mdi-chart-scatter-plot-hexbin::before{content:\"\\F66D\"}.mdi-chart-snakey::before{content:\"\\F020A\"}.mdi-chart-snakey-variant::before{content:\"\\F020B\"}.mdi-chart-timeline::before{content:\"\\F66E\"}.mdi-chart-timeline-variant::before{content:\"\\FEB0\"}.mdi-chart-tree::before{content:\"\\FEB1\"}.mdi-chat::before{content:\"\\FB55\"}.mdi-chat-alert::before{content:\"\\FB56\"}.mdi-chat-outline::before{content:\"\\FEFB\"}.mdi-chat-processing::before{content:\"\\FB57\"}.mdi-check::before{content:\"\\F12C\"}.mdi-check-all::before{content:\"\\F12D\"}.mdi-check-bold::before{content:\"\\FE6E\"}.mdi-check-box-multiple-outline::before{content:\"\\FC2D\"}.mdi-check-box-outline::before{content:\"\\FC2E\"}.mdi-check-circle::before{content:\"\\F5E0\"}.mdi-check-circle-outline::before{content:\"\\F5E1\"}.mdi-check-decagram::before{content:\"\\F790\"}.mdi-check-network::before{content:\"\\FC2F\"}.mdi-check-network-outline::before{content:\"\\FC30\"}.mdi-check-outline::before{content:\"\\F854\"}.mdi-check-underline::before{content:\"\\FE70\"}.mdi-check-underline-circle::before{content:\"\\FE71\"}.mdi-check-underline-circle-outline::before{content:\"\\FE72\"}.mdi-checkbook::before{content:\"\\FA9C\"}.mdi-checkbox-blank::before{content:\"\\F12E\"}.mdi-checkbox-blank-circle::before{content:\"\\F12F\"}.mdi-checkbox-blank-circle-outline::before{content:\"\\F130\"}.mdi-checkbox-blank-outline::before{content:\"\\F131\"}.mdi-checkbox-intermediate::before{content:\"\\F855\"}.mdi-checkbox-marked::before{content:\"\\F132\"}.mdi-checkbox-marked-circle::before{content:\"\\F133\"}.mdi-checkbox-marked-circle-outline::before{content:\"\\F134\"}.mdi-checkbox-marked-outline::before{content:\"\\F135\"}.mdi-checkbox-multiple-blank::before{content:\"\\F136\"}.mdi-checkbox-multiple-blank-circle::before{content:\"\\F63B\"}.mdi-checkbox-multiple-blank-circle-outline::before{content:\"\\F63C\"}.mdi-checkbox-multiple-blank-outline::before{content:\"\\F137\"}.mdi-checkbox-multiple-marked::before{content:\"\\F138\"}.mdi-checkbox-multiple-marked-circle::before{content:\"\\F63D\"}.mdi-checkbox-multiple-marked-circle-outline::before{content:\"\\F63E\"}.mdi-checkbox-multiple-marked-outline::before{content:\"\\F139\"}.mdi-checkerboard::before{content:\"\\F13A\"}.mdi-checkerboard-minus::before{content:\"\\F022D\"}.mdi-checkerboard-plus::before{content:\"\\F022C\"}.mdi-checkerboard-remove::before{content:\"\\F022E\"}.mdi-chef-hat::before{content:\"\\FB58\"}.mdi-chemical-weapon::before{content:\"\\F13B\"}.mdi-chess-bishop::before{content:\"\\F85B\"}.mdi-chess-king::before{content:\"\\F856\"}.mdi-chess-knight::before{content:\"\\F857\"}.mdi-chess-pawn::before{content:\"\\F858\"}.mdi-chess-queen::before{content:\"\\F859\"}.mdi-chess-rook::before{content:\"\\F85A\"}.mdi-chevron-double-down::before{content:\"\\F13C\"}.mdi-chevron-double-left::before{content:\"\\F13D\"}.mdi-chevron-double-right::before{content:\"\\F13E\"}.mdi-chevron-double-up::before{content:\"\\F13F\"}.mdi-chevron-down::before{content:\"\\F140\"}.mdi-chevron-down-box::before{content:\"\\F9D5\"}.mdi-chevron-down-box-outline::before{content:\"\\F9D6\"}.mdi-chevron-down-circle::before{content:\"\\FB0B\"}.mdi-chevron-down-circle-outline::before{content:\"\\FB0C\"}.mdi-chevron-left::before{content:\"\\F141\"}.mdi-chevron-left-box::before{content:\"\\F9D7\"}.mdi-chevron-left-box-outline::before{content:\"\\F9D8\"}.mdi-chevron-left-circle::before{content:\"\\FB0D\"}.mdi-chevron-left-circle-outline::before{content:\"\\FB0E\"}.mdi-chevron-right::before{content:\"\\F142\"}.mdi-chevron-right-box::before{content:\"\\F9D9\"}.mdi-chevron-right-box-outline::before{content:\"\\F9DA\"}.mdi-chevron-right-circle::before{content:\"\\FB0F\"}.mdi-chevron-right-circle-outline::before{content:\"\\FB10\"}.mdi-chevron-triple-down::before{content:\"\\FD95\"}.mdi-chevron-triple-left::before{content:\"\\FD96\"}.mdi-chevron-triple-right::before{content:\"\\FD97\"}.mdi-chevron-triple-up::before{content:\"\\FD98\"}.mdi-chevron-up::before{content:\"\\F143\"}.mdi-chevron-up-box::before{content:\"\\F9DB\"}.mdi-chevron-up-box-outline::before{content:\"\\F9DC\"}.mdi-chevron-up-circle::before{content:\"\\FB11\"}.mdi-chevron-up-circle-outline::before{content:\"\\FB12\"}.mdi-chili-hot::before{content:\"\\F7B1\"}.mdi-chili-medium::before{content:\"\\F7B2\"}.mdi-chili-mild::before{content:\"\\F7B3\"}.mdi-chip::before{content:\"\\F61A\"}.mdi-christianity::before{content:\"\\F952\"}.mdi-christianity-outline::before{content:\"\\FCD2\"}.mdi-church::before{content:\"\\F144\"}.mdi-cigar::before{content:\"\\F01B4\"}.mdi-circle::before{content:\"\\F764\"}.mdi-circle-double::before{content:\"\\FEB2\"}.mdi-circle-edit-outline::before{content:\"\\F8D4\"}.mdi-circle-expand::before{content:\"\\FEB3\"}.mdi-circle-medium::before{content:\"\\F9DD\"}.mdi-circle-off-outline::before{content:\"\\F00FE\"}.mdi-circle-outline::before{content:\"\\F765\"}.mdi-circle-slice-1::before{content:\"\\FA9D\"}.mdi-circle-slice-2::before{content:\"\\FA9E\"}.mdi-circle-slice-3::before{content:\"\\FA9F\"}.mdi-circle-slice-4::before{content:\"\\FAA0\"}.mdi-circle-slice-5::before{content:\"\\FAA1\"}.mdi-circle-slice-6::before{content:\"\\FAA2\"}.mdi-circle-slice-7::before{content:\"\\FAA3\"}.mdi-circle-slice-8::before{content:\"\\FAA4\"}.mdi-circle-small::before{content:\"\\F9DE\"}.mdi-circular-saw::before{content:\"\\FE73\"}.mdi-cisco-webex::before{content:\"\\F145\"}.mdi-city::before{content:\"\\F146\"}.mdi-city-variant::before{content:\"\\FA35\"}.mdi-city-variant-outline::before{content:\"\\FA36\"}.mdi-clipboard::before{content:\"\\F147\"}.mdi-clipboard-account::before{content:\"\\F148\"}.mdi-clipboard-account-outline::before{content:\"\\FC31\"}.mdi-clipboard-alert::before{content:\"\\F149\"}.mdi-clipboard-alert-outline::before{content:\"\\FCD3\"}.mdi-clipboard-arrow-down::before{content:\"\\F14A\"}.mdi-clipboard-arrow-down-outline::before{content:\"\\FC32\"}.mdi-clipboard-arrow-left::before{content:\"\\F14B\"}.mdi-clipboard-arrow-left-outline::before{content:\"\\FCD4\"}.mdi-clipboard-arrow-right::before{content:\"\\FCD5\"}.mdi-clipboard-arrow-right-outline::before{content:\"\\FCD6\"}.mdi-clipboard-arrow-up::before{content:\"\\FC33\"}.mdi-clipboard-arrow-up-outline::before{content:\"\\FC34\"}.mdi-clipboard-check::before{content:\"\\F14C\"}.mdi-clipboard-check-outline::before{content:\"\\F8A7\"}.mdi-clipboard-flow::before{content:\"\\F6C7\"}.mdi-clipboard-flow-outline::before{content:\"\\F0142\"}.mdi-clipboard-list::before{content:\"\\F00FF\"}.mdi-clipboard-list-outline::before{content:\"\\F0100\"}.mdi-clipboard-outline::before{content:\"\\F14D\"}.mdi-clipboard-play::before{content:\"\\FC35\"}.mdi-clipboard-play-outline::before{content:\"\\FC36\"}.mdi-clipboard-plus::before{content:\"\\F750\"}.mdi-clipboard-pulse::before{content:\"\\F85C\"}.mdi-clipboard-pulse-outline::before{content:\"\\F85D\"}.mdi-clipboard-text::before{content:\"\\F14E\"}.mdi-clipboard-text-outline::before{content:\"\\FA37\"}.mdi-clipboard-text-play::before{content:\"\\FC37\"}.mdi-clipboard-text-play-outline::before{content:\"\\FC38\"}.mdi-clippy::before{content:\"\\F14F\"}.mdi-clock::before{content:\"\\F953\"}.mdi-clock-alert::before{content:\"\\F954\"}.mdi-clock-alert-outline::before{content:\"\\F5CE\"}.mdi-clock-check::before{content:\"\\FFC8\"}.mdi-clock-check-outline::before{content:\"\\FFC9\"}.mdi-clock-digital::before{content:\"\\FEB4\"}.mdi-clock-end::before{content:\"\\F151\"}.mdi-clock-fast::before{content:\"\\F152\"}.mdi-clock-in::before{content:\"\\F153\"}.mdi-clock-out::before{content:\"\\F154\"}.mdi-clock-outline::before{content:\"\\F150\"}.mdi-clock-start::before{content:\"\\F155\"}.mdi-close::before{content:\"\\F156\"}.mdi-close-box::before{content:\"\\F157\"}.mdi-close-box-multiple::before{content:\"\\FC39\"}.mdi-close-box-multiple-outline::before{content:\"\\FC3A\"}.mdi-close-box-outline::before{content:\"\\F158\"}.mdi-close-circle::before{content:\"\\F159\"}.mdi-close-circle-outline::before{content:\"\\F15A\"}.mdi-close-network::before{content:\"\\F15B\"}.mdi-close-network-outline::before{content:\"\\FC3B\"}.mdi-close-octagon::before{content:\"\\F15C\"}.mdi-close-octagon-outline::before{content:\"\\F15D\"}.mdi-close-outline::before{content:\"\\F6C8\"}.mdi-closed-caption::before{content:\"\\F15E\"}.mdi-closed-caption-outline::before{content:\"\\FD99\"}.mdi-cloud::before{content:\"\\F15F\"}.mdi-cloud-alert::before{content:\"\\F9DF\"}.mdi-cloud-braces::before{content:\"\\F7B4\"}.mdi-cloud-check::before{content:\"\\F160\"}.mdi-cloud-circle::before{content:\"\\F161\"}.mdi-cloud-download::before{content:\"\\F162\"}.mdi-cloud-download-outline::before{content:\"\\FB59\"}.mdi-cloud-lock::before{content:\"\\F021C\"}.mdi-cloud-lock-outline::before{content:\"\\F021D\"}.mdi-cloud-off-outline::before{content:\"\\F164\"}.mdi-cloud-outline::before{content:\"\\F163\"}.mdi-cloud-print::before{content:\"\\F165\"}.mdi-cloud-print-outline::before{content:\"\\F166\"}.mdi-cloud-question::before{content:\"\\FA38\"}.mdi-cloud-search::before{content:\"\\F955\"}.mdi-cloud-search-outline::before{content:\"\\F956\"}.mdi-cloud-sync::before{content:\"\\F63F\"}.mdi-cloud-tags::before{content:\"\\F7B5\"}.mdi-cloud-upload::before{content:\"\\F167\"}.mdi-cloud-upload-outline::before{content:\"\\FB5A\"}.mdi-clover::before{content:\"\\F815\"}.mdi-coach-lamp::before{content:\"\\F0042\"}.mdi-coat-rack::before{content:\"\\F00C9\"}.mdi-code-array::before{content:\"\\F168\"}.mdi-code-braces::before{content:\"\\F169\"}.mdi-code-braces-box::before{content:\"\\F0101\"}.mdi-code-brackets::before{content:\"\\F16A\"}.mdi-code-equal::before{content:\"\\F16B\"}.mdi-code-greater-than::before{content:\"\\F16C\"}.mdi-code-greater-than-or-equal::before{content:\"\\F16D\"}.mdi-code-less-than::before{content:\"\\F16E\"}.mdi-code-less-than-or-equal::before{content:\"\\F16F\"}.mdi-code-not-equal::before{content:\"\\F170\"}.mdi-code-not-equal-variant::before{content:\"\\F171\"}.mdi-code-parentheses::before{content:\"\\F172\"}.mdi-code-parentheses-box::before{content:\"\\F0102\"}.mdi-code-string::before{content:\"\\F173\"}.mdi-code-tags::before{content:\"\\F174\"}.mdi-code-tags-check::before{content:\"\\F693\"}.mdi-codepen::before{content:\"\\F175\"}.mdi-coffee::before{content:\"\\F176\"}.mdi-coffee-maker::before{content:\"\\F00CA\"}.mdi-coffee-off::before{content:\"\\FFCA\"}.mdi-coffee-off-outline::before{content:\"\\FFCB\"}.mdi-coffee-outline::before{content:\"\\F6C9\"}.mdi-coffee-to-go::before{content:\"\\F177\"}.mdi-coffin::before{content:\"\\FB5B\"}.mdi-cog-clockwise::before{content:\"\\F0208\"}.mdi-cog-counterclockwise::before{content:\"\\F0209\"}.mdi-cogs::before{content:\"\\F8D5\"}.mdi-coin::before{content:\"\\F0196\"}.mdi-coin-outline::before{content:\"\\F178\"}.mdi-coins::before{content:\"\\F694\"}.mdi-collage::before{content:\"\\F640\"}.mdi-collapse-all::before{content:\"\\FAA5\"}.mdi-collapse-all-outline::before{content:\"\\FAA6\"}.mdi-color-helper::before{content:\"\\F179\"}.mdi-comma::before{content:\"\\FE74\"}.mdi-comma-box::before{content:\"\\FE75\"}.mdi-comma-box-outline::before{content:\"\\FE76\"}.mdi-comma-circle::before{content:\"\\FE77\"}.mdi-comma-circle-outline::before{content:\"\\FE78\"}.mdi-comment::before{content:\"\\F17A\"}.mdi-comment-account::before{content:\"\\F17B\"}.mdi-comment-account-outline::before{content:\"\\F17C\"}.mdi-comment-alert::before{content:\"\\F17D\"}.mdi-comment-alert-outline::before{content:\"\\F17E\"}.mdi-comment-arrow-left::before{content:\"\\F9E0\"}.mdi-comment-arrow-left-outline::before{content:\"\\F9E1\"}.mdi-comment-arrow-right::before{content:\"\\F9E2\"}.mdi-comment-arrow-right-outline::before{content:\"\\F9E3\"}.mdi-comment-check::before{content:\"\\F17F\"}.mdi-comment-check-outline::before{content:\"\\F180\"}.mdi-comment-edit::before{content:\"\\F01EA\"}.mdi-comment-eye::before{content:\"\\FA39\"}.mdi-comment-eye-outline::before{content:\"\\FA3A\"}.mdi-comment-multiple::before{content:\"\\F85E\"}.mdi-comment-multiple-outline::before{content:\"\\F181\"}.mdi-comment-outline::before{content:\"\\F182\"}.mdi-comment-plus::before{content:\"\\F9E4\"}.mdi-comment-plus-outline::before{content:\"\\F183\"}.mdi-comment-processing::before{content:\"\\F184\"}.mdi-comment-processing-outline::before{content:\"\\F185\"}.mdi-comment-question::before{content:\"\\F816\"}.mdi-comment-question-outline::before{content:\"\\F186\"}.mdi-comment-quote::before{content:\"\\F0043\"}.mdi-comment-quote-outline::before{content:\"\\F0044\"}.mdi-comment-remove::before{content:\"\\F5DE\"}.mdi-comment-remove-outline::before{content:\"\\F187\"}.mdi-comment-search::before{content:\"\\FA3B\"}.mdi-comment-search-outline::before{content:\"\\FA3C\"}.mdi-comment-text::before{content:\"\\F188\"}.mdi-comment-text-multiple::before{content:\"\\F85F\"}.mdi-comment-text-multiple-outline::before{content:\"\\F860\"}.mdi-comment-text-outline::before{content:\"\\F189\"}.mdi-compare::before{content:\"\\F18A\"}.mdi-compass::before{content:\"\\F18B\"}.mdi-compass-off::before{content:\"\\FB5C\"}.mdi-compass-off-outline::before{content:\"\\FB5D\"}.mdi-compass-outline::before{content:\"\\F18C\"}.mdi-concourse-ci::before{content:\"\\F00CB\"}.mdi-console::before{content:\"\\F18D\"}.mdi-console-line::before{content:\"\\F7B6\"}.mdi-console-network::before{content:\"\\F8A8\"}.mdi-console-network-outline::before{content:\"\\FC3C\"}.mdi-consolidate::before{content:\"\\F0103\"}.mdi-contact-mail::before{content:\"\\F18E\"}.mdi-contact-mail-outline::before{content:\"\\FEB5\"}.mdi-contact-phone::before{content:\"\\FEB6\"}.mdi-contact-phone-outline::before{content:\"\\FEB7\"}.mdi-contactless-payment::before{content:\"\\FD46\"}.mdi-contacts::before{content:\"\\F6CA\"}.mdi-contain::before{content:\"\\FA3D\"}.mdi-contain-end::before{content:\"\\FA3E\"}.mdi-contain-start::before{content:\"\\FA3F\"}.mdi-content-copy::before{content:\"\\F18F\"}.mdi-content-cut::before{content:\"\\F190\"}.mdi-content-duplicate::before{content:\"\\F191\"}.mdi-content-paste::before{content:\"\\F192\"}.mdi-content-save::before{content:\"\\F193\"}.mdi-content-save-alert::before{content:\"\\FF5F\"}.mdi-content-save-alert-outline::before{content:\"\\FF60\"}.mdi-content-save-all::before{content:\"\\F194\"}.mdi-content-save-all-outline::before{content:\"\\FF61\"}.mdi-content-save-edit::before{content:\"\\FCD7\"}.mdi-content-save-edit-outline::before{content:\"\\FCD8\"}.mdi-content-save-move::before{content:\"\\FE79\"}.mdi-content-save-move-outline::before{content:\"\\FE7A\"}.mdi-content-save-outline::before{content:\"\\F817\"}.mdi-content-save-settings::before{content:\"\\F61B\"}.mdi-content-save-settings-outline::before{content:\"\\FB13\"}.mdi-contrast::before{content:\"\\F195\"}.mdi-contrast-box::before{content:\"\\F196\"}.mdi-contrast-circle::before{content:\"\\F197\"}.mdi-controller-classic::before{content:\"\\FB5E\"}.mdi-controller-classic-outline::before{content:\"\\FB5F\"}.mdi-cookie::before{content:\"\\F198\"}.mdi-coolant-temperature::before{content:\"\\F3C8\"}.mdi-copyright::before{content:\"\\F5E6\"}.mdi-cordova::before{content:\"\\F957\"}.mdi-corn::before{content:\"\\F7B7\"}.mdi-counter::before{content:\"\\F199\"}.mdi-cow::before{content:\"\\F19A\"}.mdi-cowboy::before{content:\"\\FEB8\"}.mdi-cpu-32-bit::before{content:\"\\FEFC\"}.mdi-cpu-64-bit::before{content:\"\\FEFD\"}.mdi-crane::before{content:\"\\F861\"}.mdi-creation::before{content:\"\\F1C9\"}.mdi-creative-commons::before{content:\"\\FD47\"}.mdi-credit-card::before{content:\"\\F0010\"}.mdi-credit-card-clock::before{content:\"\\FEFE\"}.mdi-credit-card-clock-outline::before{content:\"\\FFBC\"}.mdi-credit-card-marker::before{content:\"\\F6A7\"}.mdi-credit-card-marker-outline::before{content:\"\\FD9A\"}.mdi-credit-card-minus::before{content:\"\\FFCC\"}.mdi-credit-card-minus-outline::before{content:\"\\FFCD\"}.mdi-credit-card-multiple::before{content:\"\\F0011\"}.mdi-credit-card-multiple-outline::before{content:\"\\F19C\"}.mdi-credit-card-off::before{content:\"\\F0012\"}.mdi-credit-card-off-outline::before{content:\"\\F5E4\"}.mdi-credit-card-outline::before{content:\"\\F19B\"}.mdi-credit-card-plus::before{content:\"\\F0013\"}.mdi-credit-card-plus-outline::before{content:\"\\F675\"}.mdi-credit-card-refund::before{content:\"\\F0014\"}.mdi-credit-card-refund-outline::before{content:\"\\FAA7\"}.mdi-credit-card-remove::before{content:\"\\FFCE\"}.mdi-credit-card-remove-outline::before{content:\"\\FFCF\"}.mdi-credit-card-scan::before{content:\"\\F0015\"}.mdi-credit-card-scan-outline::before{content:\"\\F19D\"}.mdi-credit-card-settings::before{content:\"\\F0016\"}.mdi-credit-card-settings-outline::before{content:\"\\F8D6\"}.mdi-credit-card-wireless::before{content:\"\\F801\"}.mdi-credit-card-wireless-outline::before{content:\"\\FD48\"}.mdi-cricket::before{content:\"\\FD49\"}.mdi-crop::before{content:\"\\F19E\"}.mdi-crop-free::before{content:\"\\F19F\"}.mdi-crop-landscape::before{content:\"\\F1A0\"}.mdi-crop-portrait::before{content:\"\\F1A1\"}.mdi-crop-rotate::before{content:\"\\F695\"}.mdi-crop-square::before{content:\"\\F1A2\"}.mdi-crosshairs::before{content:\"\\F1A3\"}.mdi-crosshairs-gps::before{content:\"\\F1A4\"}.mdi-crosshairs-off::before{content:\"\\FF62\"}.mdi-crosshairs-question::before{content:\"\\F0161\"}.mdi-crown::before{content:\"\\F1A5\"}.mdi-crown-outline::before{content:\"\\F01FB\"}.mdi-cryengine::before{content:\"\\F958\"}.mdi-crystal-ball::before{content:\"\\FB14\"}.mdi-cube::before{content:\"\\F1A6\"}.mdi-cube-outline::before{content:\"\\F1A7\"}.mdi-cube-scan::before{content:\"\\FB60\"}.mdi-cube-send::before{content:\"\\F1A8\"}.mdi-cube-unfolded::before{content:\"\\F1A9\"}.mdi-cup::before{content:\"\\F1AA\"}.mdi-cup-off::before{content:\"\\F5E5\"}.mdi-cup-water::before{content:\"\\F1AB\"}.mdi-cupboard::before{content:\"\\FF63\"}.mdi-cupboard-outline::before{content:\"\\FF64\"}.mdi-cupcake::before{content:\"\\F959\"}.mdi-curling::before{content:\"\\F862\"}.mdi-currency-bdt::before{content:\"\\F863\"}.mdi-currency-brl::before{content:\"\\FB61\"}.mdi-currency-btc::before{content:\"\\F1AC\"}.mdi-currency-cny::before{content:\"\\F7B9\"}.mdi-currency-eth::before{content:\"\\F7BA\"}.mdi-currency-eur::before{content:\"\\F1AD\"}.mdi-currency-gbp::before{content:\"\\F1AE\"}.mdi-currency-ils::before{content:\"\\FC3D\"}.mdi-currency-inr::before{content:\"\\F1AF\"}.mdi-currency-jpy::before{content:\"\\F7BB\"}.mdi-currency-krw::before{content:\"\\F7BC\"}.mdi-currency-kzt::before{content:\"\\F864\"}.mdi-currency-ngn::before{content:\"\\F1B0\"}.mdi-currency-php::before{content:\"\\F9E5\"}.mdi-currency-rial::before{content:\"\\FEB9\"}.mdi-currency-rub::before{content:\"\\F1B1\"}.mdi-currency-sign::before{content:\"\\F7BD\"}.mdi-currency-try::before{content:\"\\F1B2\"}.mdi-currency-twd::before{content:\"\\F7BE\"}.mdi-currency-usd::before{content:\"\\F1B3\"}.mdi-currency-usd-off::before{content:\"\\F679\"}.mdi-current-ac::before{content:\"\\F95A\"}.mdi-current-dc::before{content:\"\\F95B\"}.mdi-cursor-default::before{content:\"\\F1B4\"}.mdi-cursor-default-click::before{content:\"\\FCD9\"}.mdi-cursor-default-click-outline::before{content:\"\\FCDA\"}.mdi-cursor-default-gesture::before{content:\"\\F0152\"}.mdi-cursor-default-gesture-outline::before{content:\"\\F0153\"}.mdi-cursor-default-outline::before{content:\"\\F1B5\"}.mdi-cursor-move::before{content:\"\\F1B6\"}.mdi-cursor-pointer::before{content:\"\\F1B7\"}.mdi-cursor-text::before{content:\"\\F5E7\"}.mdi-database::before{content:\"\\F1B8\"}.mdi-database-check::before{content:\"\\FAA8\"}.mdi-database-edit::before{content:\"\\FB62\"}.mdi-database-export::before{content:\"\\F95D\"}.mdi-database-import::before{content:\"\\F95C\"}.mdi-database-lock::before{content:\"\\FAA9\"}.mdi-database-minus::before{content:\"\\F1B9\"}.mdi-database-plus::before{content:\"\\F1BA\"}.mdi-database-refresh::before{content:\"\\FCDB\"}.mdi-database-remove::before{content:\"\\FCDC\"}.mdi-database-search::before{content:\"\\F865\"}.mdi-database-settings::before{content:\"\\FCDD\"}.mdi-death-star::before{content:\"\\F8D7\"}.mdi-death-star-variant::before{content:\"\\F8D8\"}.mdi-deathly-hallows::before{content:\"\\FB63\"}.mdi-debian::before{content:\"\\F8D9\"}.mdi-debug-step-into::before{content:\"\\F1BB\"}.mdi-debug-step-out::before{content:\"\\F1BC\"}.mdi-debug-step-over::before{content:\"\\F1BD\"}.mdi-decagram::before{content:\"\\F76B\"}.mdi-decagram-outline::before{content:\"\\F76C\"}.mdi-decimal::before{content:\"\\F00CC\"}.mdi-decimal-comma::before{content:\"\\F00CD\"}.mdi-decimal-comma-decrease::before{content:\"\\F00CE\"}.mdi-decimal-comma-increase::before{content:\"\\F00CF\"}.mdi-decimal-decrease::before{content:\"\\F1BE\"}.mdi-decimal-increase::before{content:\"\\F1BF\"}.mdi-delete::before{content:\"\\F1C0\"}.mdi-delete-alert::before{content:\"\\F00D0\"}.mdi-delete-alert-outline::before{content:\"\\F00D1\"}.mdi-delete-circle::before{content:\"\\F682\"}.mdi-delete-circle-outline::before{content:\"\\FB64\"}.mdi-delete-empty::before{content:\"\\F6CB\"}.mdi-delete-empty-outline::before{content:\"\\FEBA\"}.mdi-delete-forever::before{content:\"\\F5E8\"}.mdi-delete-forever-outline::before{content:\"\\FB65\"}.mdi-delete-off::before{content:\"\\F00D2\"}.mdi-delete-off-outline::before{content:\"\\F00D3\"}.mdi-delete-outline::before{content:\"\\F9E6\"}.mdi-delete-restore::before{content:\"\\F818\"}.mdi-delete-sweep::before{content:\"\\F5E9\"}.mdi-delete-sweep-outline::before{content:\"\\FC3E\"}.mdi-delete-variant::before{content:\"\\F1C1\"}.mdi-delta::before{content:\"\\F1C2\"}.mdi-desk::before{content:\"\\F0264\"}.mdi-desk-lamp::before{content:\"\\F95E\"}.mdi-deskphone::before{content:\"\\F1C3\"}.mdi-desktop-classic::before{content:\"\\F7BF\"}.mdi-desktop-mac::before{content:\"\\F1C4\"}.mdi-desktop-mac-dashboard::before{content:\"\\F9E7\"}.mdi-desktop-tower::before{content:\"\\F1C5\"}.mdi-desktop-tower-monitor::before{content:\"\\FAAA\"}.mdi-details::before{content:\"\\F1C6\"}.mdi-dev-to::before{content:\"\\FD4A\"}.mdi-developer-board::before{content:\"\\F696\"}.mdi-deviantart::before{content:\"\\F1C7\"}.mdi-devices::before{content:\"\\FFD0\"}.mdi-diabetes::before{content:\"\\F0151\"}.mdi-dialpad::before{content:\"\\F61C\"}.mdi-diameter::before{content:\"\\FC3F\"}.mdi-diameter-outline::before{content:\"\\FC40\"}.mdi-diameter-variant::before{content:\"\\FC41\"}.mdi-diamond::before{content:\"\\FB66\"}.mdi-diamond-outline::before{content:\"\\FB67\"}.mdi-diamond-stone::before{content:\"\\F1C8\"}.mdi-dice-1::before{content:\"\\F1CA\"}.mdi-dice-1-outline::before{content:\"\\F0175\"}.mdi-dice-2::before{content:\"\\F1CB\"}.mdi-dice-2-outline::before{content:\"\\F0176\"}.mdi-dice-3::before{content:\"\\F1CC\"}.mdi-dice-3-outline::before{content:\"\\F0177\"}.mdi-dice-4::before{content:\"\\F1CD\"}.mdi-dice-4-outline::before{content:\"\\F0178\"}.mdi-dice-5::before{content:\"\\F1CE\"}.mdi-dice-5-outline::before{content:\"\\F0179\"}.mdi-dice-6::before{content:\"\\F1CF\"}.mdi-dice-6-outline::before{content:\"\\F017A\"}.mdi-dice-d10::before{content:\"\\F017E\"}.mdi-dice-d10-outline::before{content:\"\\F76E\"}.mdi-dice-d12::before{content:\"\\F017F\"}.mdi-dice-d12-outline::before{content:\"\\F866\"}.mdi-dice-d20::before{content:\"\\F0180\"}.mdi-dice-d20-outline::before{content:\"\\F5EA\"}.mdi-dice-d4::before{content:\"\\F017B\"}.mdi-dice-d4-outline::before{content:\"\\F5EB\"}.mdi-dice-d6::before{content:\"\\F017C\"}.mdi-dice-d6-outline::before{content:\"\\F5EC\"}.mdi-dice-d8::before{content:\"\\F017D\"}.mdi-dice-d8-outline::before{content:\"\\F5ED\"}.mdi-dice-multiple::before{content:\"\\F76D\"}.mdi-dice-multiple-outline::before{content:\"\\F0181\"}.mdi-dictionary::before{content:\"\\F61D\"}.mdi-digital-ocean::before{content:\"\\F0262\"}.mdi-dip-switch::before{content:\"\\F7C0\"}.mdi-directions::before{content:\"\\F1D0\"}.mdi-directions-fork::before{content:\"\\F641\"}.mdi-disc::before{content:\"\\F5EE\"}.mdi-disc-alert::before{content:\"\\F1D1\"}.mdi-disc-player::before{content:\"\\F95F\"}.mdi-discord::before{content:\"\\F66F\"}.mdi-dishwasher::before{content:\"\\FAAB\"}.mdi-dishwasher-alert::before{content:\"\\F01E3\"}.mdi-dishwasher-off::before{content:\"\\F01E4\"}.mdi-disqus::before{content:\"\\F1D2\"}.mdi-disqus-outline::before{content:\"\\F1D3\"}.mdi-distribute-horizontal-center::before{content:\"\\F01F4\"}.mdi-distribute-horizontal-left::before{content:\"\\F01F3\"}.mdi-distribute-horizontal-right::before{content:\"\\F01F5\"}.mdi-distribute-vertical-bottom::before{content:\"\\F01F6\"}.mdi-distribute-vertical-center::before{content:\"\\F01F7\"}.mdi-distribute-vertical-top::before{content:\"\\F01F8\"}.mdi-diving-flippers::before{content:\"\\FD9B\"}.mdi-diving-helmet::before{content:\"\\FD9C\"}.mdi-diving-scuba::before{content:\"\\FD9D\"}.mdi-diving-scuba-flag::before{content:\"\\FD9E\"}.mdi-diving-scuba-tank::before{content:\"\\FD9F\"}.mdi-diving-scuba-tank-multiple::before{content:\"\\FDA0\"}.mdi-diving-snorkel::before{content:\"\\FDA1\"}.mdi-division::before{content:\"\\F1D4\"}.mdi-division-box::before{content:\"\\F1D5\"}.mdi-dlna::before{content:\"\\FA40\"}.mdi-dna::before{content:\"\\F683\"}.mdi-dns::before{content:\"\\F1D6\"}.mdi-dns-outline::before{content:\"\\FB68\"}.mdi-do-not-disturb::before{content:\"\\F697\"}.mdi-do-not-disturb-off::before{content:\"\\F698\"}.mdi-dock-bottom::before{content:\"\\F00D4\"}.mdi-dock-left::before{content:\"\\F00D5\"}.mdi-dock-right::before{content:\"\\F00D6\"}.mdi-dock-window::before{content:\"\\F00D7\"}.mdi-docker::before{content:\"\\F867\"}.mdi-doctor::before{content:\"\\FA41\"}.mdi-dog::before{content:\"\\FA42\"}.mdi-dog-service::before{content:\"\\FAAC\"}.mdi-dog-side::before{content:\"\\FA43\"}.mdi-dolby::before{content:\"\\F6B2\"}.mdi-dolly::before{content:\"\\FEBB\"}.mdi-domain::before{content:\"\\F1D7\"}.mdi-domain-off::before{content:\"\\FD4B\"}.mdi-domain-plus::before{content:\"\\F00D8\"}.mdi-domain-remove::before{content:\"\\F00D9\"}.mdi-domino-mask::before{content:\"\\F0045\"}.mdi-donkey::before{content:\"\\F7C1\"}.mdi-door::before{content:\"\\F819\"}.mdi-door-closed::before{content:\"\\F81A\"}.mdi-door-closed-lock::before{content:\"\\F00DA\"}.mdi-door-open::before{content:\"\\F81B\"}.mdi-doorbell-video::before{content:\"\\F868\"}.mdi-dot-net::before{content:\"\\FAAD\"}.mdi-dots-horizontal::before{content:\"\\F1D8\"}.mdi-dots-horizontal-circle::before{content:\"\\F7C2\"}.mdi-dots-horizontal-circle-outline::before{content:\"\\FB69\"}.mdi-dots-vertical::before{content:\"\\F1D9\"}.mdi-dots-vertical-circle::before{content:\"\\F7C3\"}.mdi-dots-vertical-circle-outline::before{content:\"\\FB6A\"}.mdi-douban::before{content:\"\\F699\"}.mdi-download::before{content:\"\\F1DA\"}.mdi-download-multiple::before{content:\"\\F9E8\"}.mdi-download-network::before{content:\"\\F6F3\"}.mdi-download-network-outline::before{content:\"\\FC42\"}.mdi-download-off::before{content:\"\\F00DB\"}.mdi-download-off-outline::before{content:\"\\F00DC\"}.mdi-download-outline::before{content:\"\\FB6B\"}.mdi-drag::before{content:\"\\F1DB\"}.mdi-drag-horizontal::before{content:\"\\F1DC\"}.mdi-drag-variant::before{content:\"\\FB6C\"}.mdi-drag-vertical::before{content:\"\\F1DD\"}.mdi-drama-masks::before{content:\"\\FCDE\"}.mdi-draw::before{content:\"\\FF66\"}.mdi-drawing::before{content:\"\\F1DE\"}.mdi-drawing-box::before{content:\"\\F1DF\"}.mdi-dresser::before{content:\"\\FF67\"}.mdi-dresser-outline::before{content:\"\\FF68\"}.mdi-dribbble::before{content:\"\\F1E0\"}.mdi-dribbble-box::before{content:\"\\F1E1\"}.mdi-drone::before{content:\"\\F1E2\"}.mdi-dropbox::before{content:\"\\F1E3\"}.mdi-drupal::before{content:\"\\F1E4\"}.mdi-duck::before{content:\"\\F1E5\"}.mdi-dumbbell::before{content:\"\\F1E6\"}.mdi-dump-truck::before{content:\"\\FC43\"}.mdi-ear-hearing::before{content:\"\\F7C4\"}.mdi-ear-hearing-off::before{content:\"\\FA44\"}.mdi-earth::before{content:\"\\F1E7\"}.mdi-earth-box::before{content:\"\\F6CC\"}.mdi-earth-box-off::before{content:\"\\F6CD\"}.mdi-earth-off::before{content:\"\\F1E8\"}.mdi-edge::before{content:\"\\F1E9\"}.mdi-edge-legacy::before{content:\"\\F027B\"}.mdi-egg::before{content:\"\\FAAE\"}.mdi-egg-easter::before{content:\"\\FAAF\"}.mdi-eight-track::before{content:\"\\F9E9\"}.mdi-eject::before{content:\"\\F1EA\"}.mdi-eject-outline::before{content:\"\\FB6D\"}.mdi-electric-switch::before{content:\"\\FEBC\"}.mdi-electric-switch-closed::before{content:\"\\F0104\"}.mdi-electron-framework::before{content:\"\\F0046\"}.mdi-elephant::before{content:\"\\F7C5\"}.mdi-elevation-decline::before{content:\"\\F1EB\"}.mdi-elevation-rise::before{content:\"\\F1EC\"}.mdi-elevator::before{content:\"\\F1ED\"}.mdi-ellipse::before{content:\"\\FEBD\"}.mdi-ellipse-outline::before{content:\"\\FEBE\"}.mdi-email::before{content:\"\\F1EE\"}.mdi-email-alert::before{content:\"\\F6CE\"}.mdi-email-box::before{content:\"\\FCDF\"}.mdi-email-check::before{content:\"\\FAB0\"}.mdi-email-check-outline::before{content:\"\\FAB1\"}.mdi-email-edit::before{content:\"\\FF00\"}.mdi-email-edit-outline::before{content:\"\\FF01\"}.mdi-email-lock::before{content:\"\\F1F1\"}.mdi-email-mark-as-unread::before{content:\"\\FB6E\"}.mdi-email-minus::before{content:\"\\FF02\"}.mdi-email-minus-outline::before{content:\"\\FF03\"}.mdi-email-multiple::before{content:\"\\FF04\"}.mdi-email-multiple-outline::before{content:\"\\FF05\"}.mdi-email-newsletter::before{content:\"\\FFD1\"}.mdi-email-open::before{content:\"\\F1EF\"}.mdi-email-open-multiple::before{content:\"\\FF06\"}.mdi-email-open-multiple-outline::before{content:\"\\FF07\"}.mdi-email-open-outline::before{content:\"\\F5EF\"}.mdi-email-outline::before{content:\"\\F1F0\"}.mdi-email-plus::before{content:\"\\F9EA\"}.mdi-email-plus-outline::before{content:\"\\F9EB\"}.mdi-email-receive::before{content:\"\\F0105\"}.mdi-email-receive-outline::before{content:\"\\F0106\"}.mdi-email-search::before{content:\"\\F960\"}.mdi-email-search-outline::before{content:\"\\F961\"}.mdi-email-send::before{content:\"\\F0107\"}.mdi-email-send-outline::before{content:\"\\F0108\"}.mdi-email-variant::before{content:\"\\F5F0\"}.mdi-ember::before{content:\"\\FB15\"}.mdi-emby::before{content:\"\\F6B3\"}.mdi-emoticon::before{content:\"\\FC44\"}.mdi-emoticon-angry::before{content:\"\\FC45\"}.mdi-emoticon-angry-outline::before{content:\"\\FC46\"}.mdi-emoticon-confused::before{content:\"\\F0109\"}.mdi-emoticon-confused-outline::before{content:\"\\F010A\"}.mdi-emoticon-cool::before{content:\"\\FC47\"}.mdi-emoticon-cool-outline::before{content:\"\\F1F3\"}.mdi-emoticon-cry::before{content:\"\\FC48\"}.mdi-emoticon-cry-outline::before{content:\"\\FC49\"}.mdi-emoticon-dead::before{content:\"\\FC4A\"}.mdi-emoticon-dead-outline::before{content:\"\\F69A\"}.mdi-emoticon-devil::before{content:\"\\FC4B\"}.mdi-emoticon-devil-outline::before{content:\"\\F1F4\"}.mdi-emoticon-excited::before{content:\"\\FC4C\"}.mdi-emoticon-excited-outline::before{content:\"\\F69B\"}.mdi-emoticon-frown::before{content:\"\\FF69\"}.mdi-emoticon-frown-outline::before{content:\"\\FF6A\"}.mdi-emoticon-happy::before{content:\"\\FC4D\"}.mdi-emoticon-happy-outline::before{content:\"\\F1F5\"}.mdi-emoticon-kiss::before{content:\"\\FC4E\"}.mdi-emoticon-kiss-outline::before{content:\"\\FC4F\"}.mdi-emoticon-lol::before{content:\"\\F023F\"}.mdi-emoticon-lol-outline::before{content:\"\\F0240\"}.mdi-emoticon-neutral::before{content:\"\\FC50\"}.mdi-emoticon-neutral-outline::before{content:\"\\F1F6\"}.mdi-emoticon-outline::before{content:\"\\F1F2\"}.mdi-emoticon-poop::before{content:\"\\F1F7\"}.mdi-emoticon-poop-outline::before{content:\"\\FC51\"}.mdi-emoticon-sad::before{content:\"\\FC52\"}.mdi-emoticon-sad-outline::before{content:\"\\F1F8\"}.mdi-emoticon-tongue::before{content:\"\\F1F9\"}.mdi-emoticon-tongue-outline::before{content:\"\\FC53\"}.mdi-emoticon-wink::before{content:\"\\FC54\"}.mdi-emoticon-wink-outline::before{content:\"\\FC55\"}.mdi-engine::before{content:\"\\F1FA\"}.mdi-engine-off::before{content:\"\\FA45\"}.mdi-engine-off-outline::before{content:\"\\FA46\"}.mdi-engine-outline::before{content:\"\\F1FB\"}.mdi-epsilon::before{content:\"\\F010B\"}.mdi-equal::before{content:\"\\F1FC\"}.mdi-equal-box::before{content:\"\\F1FD\"}.mdi-equalizer::before{content:\"\\FEBF\"}.mdi-equalizer-outline::before{content:\"\\FEC0\"}.mdi-eraser::before{content:\"\\F1FE\"}.mdi-eraser-variant::before{content:\"\\F642\"}.mdi-escalator::before{content:\"\\F1FF\"}.mdi-eslint::before{content:\"\\FC56\"}.mdi-et::before{content:\"\\FAB2\"}.mdi-ethereum::before{content:\"\\F869\"}.mdi-ethernet::before{content:\"\\F200\"}.mdi-ethernet-cable::before{content:\"\\F201\"}.mdi-ethernet-cable-off::before{content:\"\\F202\"}.mdi-etsy::before{content:\"\\F203\"}.mdi-ev-station::before{content:\"\\F5F1\"}.mdi-eventbrite::before{content:\"\\F7C6\"}.mdi-evernote::before{content:\"\\F204\"}.mdi-excavator::before{content:\"\\F0047\"}.mdi-exclamation::before{content:\"\\F205\"}.mdi-exclamation-thick::before{content:\"\\F0263\"}.mdi-exit-run::before{content:\"\\FA47\"}.mdi-exit-to-app::before{content:\"\\F206\"}.mdi-expand-all::before{content:\"\\FAB3\"}.mdi-expand-all-outline::before{content:\"\\FAB4\"}.mdi-expansion-card::before{content:\"\\F8AD\"}.mdi-expansion-card-variant::before{content:\"\\FFD2\"}.mdi-exponent::before{content:\"\\F962\"}.mdi-exponent-box::before{content:\"\\F963\"}.mdi-export::before{content:\"\\F207\"}.mdi-export-variant::before{content:\"\\FB6F\"}.mdi-eye::before{content:\"\\F208\"}.mdi-eye-check::before{content:\"\\FCE0\"}.mdi-eye-check-outline::before{content:\"\\FCE1\"}.mdi-eye-circle::before{content:\"\\FB70\"}.mdi-eye-circle-outline::before{content:\"\\FB71\"}.mdi-eye-minus::before{content:\"\\F0048\"}.mdi-eye-minus-outline::before{content:\"\\F0049\"}.mdi-eye-off::before{content:\"\\F209\"}.mdi-eye-off-outline::before{content:\"\\F6D0\"}.mdi-eye-outline::before{content:\"\\F6CF\"}.mdi-eye-plus::before{content:\"\\F86A\"}.mdi-eye-plus-outline::before{content:\"\\F86B\"}.mdi-eye-settings::before{content:\"\\F86C\"}.mdi-eye-settings-outline::before{content:\"\\F86D\"}.mdi-eyedropper::before{content:\"\\F20A\"}.mdi-eyedropper-variant::before{content:\"\\F20B\"}.mdi-face::before{content:\"\\F643\"}.mdi-face-agent::before{content:\"\\FD4C\"}.mdi-face-outline::before{content:\"\\FB72\"}.mdi-face-profile::before{content:\"\\F644\"}.mdi-face-profile-woman::before{content:\"\\F00A1\"}.mdi-face-recognition::before{content:\"\\FC57\"}.mdi-face-woman::before{content:\"\\F00A2\"}.mdi-face-woman-outline::before{content:\"\\F00A3\"}.mdi-facebook::before{content:\"\\F20C\"}.mdi-facebook-box::before{content:\"\\F20D\"}.mdi-facebook-messenger::before{content:\"\\F20E\"}.mdi-facebook-workplace::before{content:\"\\FB16\"}.mdi-factory::before{content:\"\\F20F\"}.mdi-fan::before{content:\"\\F210\"}.mdi-fan-off::before{content:\"\\F81C\"}.mdi-fast-forward::before{content:\"\\F211\"}.mdi-fast-forward-10::before{content:\"\\FD4D\"}.mdi-fast-forward-30::before{content:\"\\FCE2\"}.mdi-fast-forward-5::before{content:\"\\F0223\"}.mdi-fast-forward-outline::before{content:\"\\F6D1\"}.mdi-fax::before{content:\"\\F212\"}.mdi-feather::before{content:\"\\F6D2\"}.mdi-feature-search::before{content:\"\\FA48\"}.mdi-feature-search-outline::before{content:\"\\FA49\"}.mdi-fedora::before{content:\"\\F8DA\"}.mdi-ferris-wheel::before{content:\"\\FEC1\"}.mdi-ferry::before{content:\"\\F213\"}.mdi-file::before{content:\"\\F214\"}.mdi-file-account::before{content:\"\\F73A\"}.mdi-file-account-outline::before{content:\"\\F004A\"}.mdi-file-alert::before{content:\"\\FA4A\"}.mdi-file-alert-outline::before{content:\"\\FA4B\"}.mdi-file-cabinet::before{content:\"\\FAB5\"}.mdi-file-cad::before{content:\"\\FF08\"}.mdi-file-cad-box::before{content:\"\\FF09\"}.mdi-file-cancel::before{content:\"\\FDA2\"}.mdi-file-cancel-outline::before{content:\"\\FDA3\"}.mdi-file-certificate::before{content:\"\\F01B1\"}.mdi-file-certificate-outline::before{content:\"\\F01B2\"}.mdi-file-chart::before{content:\"\\F215\"}.mdi-file-chart-outline::before{content:\"\\F004B\"}.mdi-file-check::before{content:\"\\F216\"}.mdi-file-check-outline::before{content:\"\\FE7B\"}.mdi-file-cloud::before{content:\"\\F217\"}.mdi-file-cloud-outline::before{content:\"\\F004C\"}.mdi-file-code::before{content:\"\\F22E\"}.mdi-file-code-outline::before{content:\"\\F004D\"}.mdi-file-compare::before{content:\"\\F8A9\"}.mdi-file-delimited::before{content:\"\\F218\"}.mdi-file-delimited-outline::before{content:\"\\FEC2\"}.mdi-file-document::before{content:\"\\F219\"}.mdi-file-document-box::before{content:\"\\F21A\"}.mdi-file-document-box-check::before{content:\"\\FEC3\"}.mdi-file-document-box-check-outline::before{content:\"\\FEC4\"}.mdi-file-document-box-minus::before{content:\"\\FEC5\"}.mdi-file-document-box-minus-outline::before{content:\"\\FEC6\"}.mdi-file-document-box-multiple::before{content:\"\\FAB6\"}.mdi-file-document-box-multiple-outline::before{content:\"\\FAB7\"}.mdi-file-document-box-outline::before{content:\"\\F9EC\"}.mdi-file-document-box-plus::before{content:\"\\FEC7\"}.mdi-file-document-box-plus-outline::before{content:\"\\FEC8\"}.mdi-file-document-box-remove::before{content:\"\\FEC9\"}.mdi-file-document-box-remove-outline::before{content:\"\\FECA\"}.mdi-file-document-box-search::before{content:\"\\FECB\"}.mdi-file-document-box-search-outline::before{content:\"\\FECC\"}.mdi-file-document-edit::before{content:\"\\FDA4\"}.mdi-file-document-edit-outline::before{content:\"\\FDA5\"}.mdi-file-document-outline::before{content:\"\\F9ED\"}.mdi-file-download::before{content:\"\\F964\"}.mdi-file-download-outline::before{content:\"\\F965\"}.mdi-file-edit::before{content:\"\\F0212\"}.mdi-file-edit-outline::before{content:\"\\F0213\"}.mdi-file-excel::before{content:\"\\F21B\"}.mdi-file-excel-box::before{content:\"\\F21C\"}.mdi-file-excel-box-outline::before{content:\"\\F004E\"}.mdi-file-excel-outline::before{content:\"\\F004F\"}.mdi-file-export::before{content:\"\\F21D\"}.mdi-file-export-outline::before{content:\"\\F0050\"}.mdi-file-eye::before{content:\"\\FDA6\"}.mdi-file-eye-outline::before{content:\"\\FDA7\"}.mdi-file-find::before{content:\"\\F21E\"}.mdi-file-find-outline::before{content:\"\\FB73\"}.mdi-file-hidden::before{content:\"\\F613\"}.mdi-file-image::before{content:\"\\F21F\"}.mdi-file-image-outline::before{content:\"\\FECD\"}.mdi-file-import::before{content:\"\\F220\"}.mdi-file-import-outline::before{content:\"\\F0051\"}.mdi-file-key::before{content:\"\\F01AF\"}.mdi-file-key-outline::before{content:\"\\F01B0\"}.mdi-file-link::before{content:\"\\F01A2\"}.mdi-file-link-outline::before{content:\"\\F01A3\"}.mdi-file-lock::before{content:\"\\F221\"}.mdi-file-lock-outline::before{content:\"\\F0052\"}.mdi-file-move::before{content:\"\\FAB8\"}.mdi-file-move-outline::before{content:\"\\F0053\"}.mdi-file-multiple::before{content:\"\\F222\"}.mdi-file-multiple-outline::before{content:\"\\F0054\"}.mdi-file-music::before{content:\"\\F223\"}.mdi-file-music-outline::before{content:\"\\FE7C\"}.mdi-file-outline::before{content:\"\\F224\"}.mdi-file-pdf::before{content:\"\\F225\"}.mdi-file-pdf-box::before{content:\"\\F226\"}.mdi-file-pdf-box-outline::before{content:\"\\FFD3\"}.mdi-file-pdf-outline::before{content:\"\\FE7D\"}.mdi-file-percent::before{content:\"\\F81D\"}.mdi-file-percent-outline::before{content:\"\\F0055\"}.mdi-file-phone::before{content:\"\\F01A4\"}.mdi-file-phone-outline::before{content:\"\\F01A5\"}.mdi-file-plus::before{content:\"\\F751\"}.mdi-file-plus-outline::before{content:\"\\FF0A\"}.mdi-file-powerpoint::before{content:\"\\F227\"}.mdi-file-powerpoint-box::before{content:\"\\F228\"}.mdi-file-powerpoint-box-outline::before{content:\"\\F0056\"}.mdi-file-powerpoint-outline::before{content:\"\\F0057\"}.mdi-file-presentation-box::before{content:\"\\F229\"}.mdi-file-question::before{content:\"\\F86E\"}.mdi-file-question-outline::before{content:\"\\F0058\"}.mdi-file-remove::before{content:\"\\FB74\"}.mdi-file-remove-outline::before{content:\"\\F0059\"}.mdi-file-replace::before{content:\"\\FB17\"}.mdi-file-replace-outline::before{content:\"\\FB18\"}.mdi-file-restore::before{content:\"\\F670\"}.mdi-file-restore-outline::before{content:\"\\F005A\"}.mdi-file-search::before{content:\"\\FC58\"}.mdi-file-search-outline::before{content:\"\\FC59\"}.mdi-file-send::before{content:\"\\F22A\"}.mdi-file-send-outline::before{content:\"\\F005B\"}.mdi-file-settings::before{content:\"\\F00A4\"}.mdi-file-settings-outline::before{content:\"\\F00A5\"}.mdi-file-settings-variant::before{content:\"\\F00A6\"}.mdi-file-settings-variant-outline::before{content:\"\\F00A7\"}.mdi-file-star::before{content:\"\\F005C\"}.mdi-file-star-outline::before{content:\"\\F005D\"}.mdi-file-swap::before{content:\"\\FFD4\"}.mdi-file-swap-outline::before{content:\"\\FFD5\"}.mdi-file-sync::before{content:\"\\F0241\"}.mdi-file-sync-outline::before{content:\"\\F0242\"}.mdi-file-table::before{content:\"\\FC5A\"}.mdi-file-table-box::before{content:\"\\F010C\"}.mdi-file-table-box-multiple::before{content:\"\\F010D\"}.mdi-file-table-box-multiple-outline::before{content:\"\\F010E\"}.mdi-file-table-box-outline::before{content:\"\\F010F\"}.mdi-file-table-outline::before{content:\"\\FC5B\"}.mdi-file-tree::before{content:\"\\F645\"}.mdi-file-undo::before{content:\"\\F8DB\"}.mdi-file-undo-outline::before{content:\"\\F005E\"}.mdi-file-upload::before{content:\"\\FA4C\"}.mdi-file-upload-outline::before{content:\"\\FA4D\"}.mdi-file-video::before{content:\"\\F22B\"}.mdi-file-video-outline::before{content:\"\\FE10\"}.mdi-file-word::before{content:\"\\F22C\"}.mdi-file-word-box::before{content:\"\\F22D\"}.mdi-file-word-box-outline::before{content:\"\\F005F\"}.mdi-file-word-outline::before{content:\"\\F0060\"}.mdi-film::before{content:\"\\F22F\"}.mdi-filmstrip::before{content:\"\\F230\"}.mdi-filmstrip-off::before{content:\"\\F231\"}.mdi-filter::before{content:\"\\F232\"}.mdi-filter-menu::before{content:\"\\F0110\"}.mdi-filter-menu-outline::before{content:\"\\F0111\"}.mdi-filter-minus::before{content:\"\\FF0B\"}.mdi-filter-minus-outline::before{content:\"\\FF0C\"}.mdi-filter-outline::before{content:\"\\F233\"}.mdi-filter-plus::before{content:\"\\FF0D\"}.mdi-filter-plus-outline::before{content:\"\\FF0E\"}.mdi-filter-remove::before{content:\"\\F234\"}.mdi-filter-remove-outline::before{content:\"\\F235\"}.mdi-filter-variant::before{content:\"\\F236\"}.mdi-filter-variant-minus::before{content:\"\\F013D\"}.mdi-filter-variant-plus::before{content:\"\\F013E\"}.mdi-filter-variant-remove::before{content:\"\\F0061\"}.mdi-finance::before{content:\"\\F81E\"}.mdi-find-replace::before{content:\"\\F6D3\"}.mdi-fingerprint::before{content:\"\\F237\"}.mdi-fingerprint-off::before{content:\"\\FECE\"}.mdi-fire::before{content:\"\\F238\"}.mdi-fire-extinguisher::before{content:\"\\FF0F\"}.mdi-fire-hydrant::before{content:\"\\F0162\"}.mdi-fire-hydrant-alert::before{content:\"\\F0163\"}.mdi-fire-hydrant-off::before{content:\"\\F0164\"}.mdi-fire-truck::before{content:\"\\F8AA\"}.mdi-firebase::before{content:\"\\F966\"}.mdi-firefox::before{content:\"\\F239\"}.mdi-fireplace::before{content:\"\\FE11\"}.mdi-fireplace-off::before{content:\"\\FE12\"}.mdi-firework::before{content:\"\\FE13\"}.mdi-fish::before{content:\"\\F23A\"}.mdi-fishbowl::before{content:\"\\FF10\"}.mdi-fishbowl-outline::before{content:\"\\FF11\"}.mdi-fit-to-page::before{content:\"\\FF12\"}.mdi-fit-to-page-outline::before{content:\"\\FF13\"}.mdi-flag::before{content:\"\\F23B\"}.mdi-flag-checkered::before{content:\"\\F23C\"}.mdi-flag-minus::before{content:\"\\FB75\"}.mdi-flag-minus-outline::before{content:\"\\F00DD\"}.mdi-flag-outline::before{content:\"\\F23D\"}.mdi-flag-plus::before{content:\"\\FB76\"}.mdi-flag-plus-outline::before{content:\"\\F00DE\"}.mdi-flag-remove::before{content:\"\\FB77\"}.mdi-flag-remove-outline::before{content:\"\\F00DF\"}.mdi-flag-triangle::before{content:\"\\F23F\"}.mdi-flag-variant::before{content:\"\\F240\"}.mdi-flag-variant-outline::before{content:\"\\F23E\"}.mdi-flare::before{content:\"\\FD4E\"}.mdi-flash::before{content:\"\\F241\"}.mdi-flash-alert::before{content:\"\\FF14\"}.mdi-flash-alert-outline::before{content:\"\\FF15\"}.mdi-flash-auto::before{content:\"\\F242\"}.mdi-flash-circle::before{content:\"\\F81F\"}.mdi-flash-off::before{content:\"\\F243\"}.mdi-flash-outline::before{content:\"\\F6D4\"}.mdi-flash-red-eye::before{content:\"\\F67A\"}.mdi-flashlight::before{content:\"\\F244\"}.mdi-flashlight-off::before{content:\"\\F245\"}.mdi-flask::before{content:\"\\F093\"}.mdi-flask-empty::before{content:\"\\F094\"}.mdi-flask-empty-minus::before{content:\"\\F0265\"}.mdi-flask-empty-minus-outline::before{content:\"\\F0266\"}.mdi-flask-empty-outline::before{content:\"\\F095\"}.mdi-flask-empty-plus::before{content:\"\\F0267\"}.mdi-flask-empty-plus-outline::before{content:\"\\F0268\"}.mdi-flask-empty-remove::before{content:\"\\F0269\"}.mdi-flask-empty-remove-outline::before{content:\"\\F026A\"}.mdi-flask-minus::before{content:\"\\F026B\"}.mdi-flask-minus-outline::before{content:\"\\F026C\"}.mdi-flask-outline::before{content:\"\\F096\"}.mdi-flask-plus::before{content:\"\\F026D\"}.mdi-flask-plus-outline::before{content:\"\\F026E\"}.mdi-flask-remove::before{content:\"\\F026F\"}.mdi-flask-remove-outline::before{content:\"\\F0270\"}.mdi-flask-round-bottom::before{content:\"\\F0276\"}.mdi-flask-round-bottom-empty::before{content:\"\\F0277\"}.mdi-flask-round-bottom-empty-outline::before{content:\"\\F0278\"}.mdi-flask-round-bottom-outline::before{content:\"\\F0279\"}.mdi-flattr::before{content:\"\\F246\"}.mdi-flickr::before{content:\"\\FCE3\"}.mdi-flip-horizontal::before{content:\"\\F0112\"}.mdi-flip-to-back::before{content:\"\\F247\"}.mdi-flip-to-front::before{content:\"\\F248\"}.mdi-flip-vertical::before{content:\"\\F0113\"}.mdi-floor-lamp::before{content:\"\\F8DC\"}.mdi-floor-lamp-dual::before{content:\"\\F0062\"}.mdi-floor-lamp-variant::before{content:\"\\F0063\"}.mdi-floor-plan::before{content:\"\\F820\"}.mdi-floppy::before{content:\"\\F249\"}.mdi-floppy-variant::before{content:\"\\F9EE\"}.mdi-flower::before{content:\"\\F24A\"}.mdi-flower-outline::before{content:\"\\F9EF\"}.mdi-flower-poppy::before{content:\"\\FCE4\"}.mdi-flower-tulip::before{content:\"\\F9F0\"}.mdi-flower-tulip-outline::before{content:\"\\F9F1\"}.mdi-focus-auto::before{content:\"\\FF6B\"}.mdi-focus-field::before{content:\"\\FF6C\"}.mdi-focus-field-horizontal::before{content:\"\\FF6D\"}.mdi-focus-field-vertical::before{content:\"\\FF6E\"}.mdi-folder::before{content:\"\\F24B\"}.mdi-folder-account::before{content:\"\\F24C\"}.mdi-folder-account-outline::before{content:\"\\FB78\"}.mdi-folder-alert::before{content:\"\\FDA8\"}.mdi-folder-alert-outline::before{content:\"\\FDA9\"}.mdi-folder-clock::before{content:\"\\FAB9\"}.mdi-folder-clock-outline::before{content:\"\\FABA\"}.mdi-folder-download::before{content:\"\\F24D\"}.mdi-folder-download-outline::before{content:\"\\F0114\"}.mdi-folder-edit::before{content:\"\\F8DD\"}.mdi-folder-edit-outline::before{content:\"\\FDAA\"}.mdi-folder-google-drive::before{content:\"\\F24E\"}.mdi-folder-heart::before{content:\"\\F0115\"}.mdi-folder-heart-outline::before{content:\"\\F0116\"}.mdi-folder-home::before{content:\"\\F00E0\"}.mdi-folder-home-outline::before{content:\"\\F00E1\"}.mdi-folder-image::before{content:\"\\F24F\"}.mdi-folder-information::before{content:\"\\F00E2\"}.mdi-folder-information-outline::before{content:\"\\F00E3\"}.mdi-folder-key::before{content:\"\\F8AB\"}.mdi-folder-key-network::before{content:\"\\F8AC\"}.mdi-folder-key-network-outline::before{content:\"\\FC5C\"}.mdi-folder-key-outline::before{content:\"\\F0117\"}.mdi-folder-lock::before{content:\"\\F250\"}.mdi-folder-lock-open::before{content:\"\\F251\"}.mdi-folder-move::before{content:\"\\F252\"}.mdi-folder-move-outline::before{content:\"\\F0271\"}.mdi-folder-multiple::before{content:\"\\F253\"}.mdi-folder-multiple-image::before{content:\"\\F254\"}.mdi-folder-multiple-outline::before{content:\"\\F255\"}.mdi-folder-network::before{content:\"\\F86F\"}.mdi-folder-network-outline::before{content:\"\\FC5D\"}.mdi-folder-open::before{content:\"\\F76F\"}.mdi-folder-open-outline::before{content:\"\\FDAB\"}.mdi-folder-outline::before{content:\"\\F256\"}.mdi-folder-plus::before{content:\"\\F257\"}.mdi-folder-plus-outline::before{content:\"\\FB79\"}.mdi-folder-pound::before{content:\"\\FCE5\"}.mdi-folder-pound-outline::before{content:\"\\FCE6\"}.mdi-folder-remove::before{content:\"\\F258\"}.mdi-folder-remove-outline::before{content:\"\\FB7A\"}.mdi-folder-search::before{content:\"\\F967\"}.mdi-folder-search-outline::before{content:\"\\F968\"}.mdi-folder-settings::before{content:\"\\F00A8\"}.mdi-folder-settings-outline::before{content:\"\\F00A9\"}.mdi-folder-settings-variant::before{content:\"\\F00AA\"}.mdi-folder-settings-variant-outline::before{content:\"\\F00AB\"}.mdi-folder-star::before{content:\"\\F69C\"}.mdi-folder-star-outline::before{content:\"\\FB7B\"}.mdi-folder-swap::before{content:\"\\FFD6\"}.mdi-folder-swap-outline::before{content:\"\\FFD7\"}.mdi-folder-sync::before{content:\"\\FCE7\"}.mdi-folder-sync-outline::before{content:\"\\FCE8\"}.mdi-folder-text::before{content:\"\\FC5E\"}.mdi-folder-text-outline::before{content:\"\\FC5F\"}.mdi-folder-upload::before{content:\"\\F259\"}.mdi-folder-upload-outline::before{content:\"\\F0118\"}.mdi-folder-zip::before{content:\"\\F6EA\"}.mdi-folder-zip-outline::before{content:\"\\F7B8\"}.mdi-font-awesome::before{content:\"\\F03A\"}.mdi-food::before{content:\"\\F25A\"}.mdi-food-apple::before{content:\"\\F25B\"}.mdi-food-apple-outline::before{content:\"\\FC60\"}.mdi-food-croissant::before{content:\"\\F7C7\"}.mdi-food-fork-drink::before{content:\"\\F5F2\"}.mdi-food-off::before{content:\"\\F5F3\"}.mdi-food-variant::before{content:\"\\F25C\"}.mdi-foot-print::before{content:\"\\FF6F\"}.mdi-football::before{content:\"\\F25D\"}.mdi-football-australian::before{content:\"\\F25E\"}.mdi-football-helmet::before{content:\"\\F25F\"}.mdi-forklift::before{content:\"\\F7C8\"}.mdi-format-align-bottom::before{content:\"\\F752\"}.mdi-format-align-center::before{content:\"\\F260\"}.mdi-format-align-justify::before{content:\"\\F261\"}.mdi-format-align-left::before{content:\"\\F262\"}.mdi-format-align-middle::before{content:\"\\F753\"}.mdi-format-align-right::before{content:\"\\F263\"}.mdi-format-align-top::before{content:\"\\F754\"}.mdi-format-annotation-minus::before{content:\"\\FABB\"}.mdi-format-annotation-plus::before{content:\"\\F646\"}.mdi-format-bold::before{content:\"\\F264\"}.mdi-format-clear::before{content:\"\\F265\"}.mdi-format-color-fill::before{content:\"\\F266\"}.mdi-format-color-highlight::before{content:\"\\FE14\"}.mdi-format-color-text::before{content:\"\\F69D\"}.mdi-format-columns::before{content:\"\\F8DE\"}.mdi-format-float-center::before{content:\"\\F267\"}.mdi-format-float-left::before{content:\"\\F268\"}.mdi-format-float-none::before{content:\"\\F269\"}.mdi-format-float-right::before{content:\"\\F26A\"}.mdi-format-font::before{content:\"\\F6D5\"}.mdi-format-font-size-decrease::before{content:\"\\F9F2\"}.mdi-format-font-size-increase::before{content:\"\\F9F3\"}.mdi-format-header-1::before{content:\"\\F26B\"}.mdi-format-header-2::before{content:\"\\F26C\"}.mdi-format-header-3::before{content:\"\\F26D\"}.mdi-format-header-4::before{content:\"\\F26E\"}.mdi-format-header-5::before{content:\"\\F26F\"}.mdi-format-header-6::before{content:\"\\F270\"}.mdi-format-header-decrease::before{content:\"\\F271\"}.mdi-format-header-equal::before{content:\"\\F272\"}.mdi-format-header-increase::before{content:\"\\F273\"}.mdi-format-header-pound::before{content:\"\\F274\"}.mdi-format-horizontal-align-center::before{content:\"\\F61E\"}.mdi-format-horizontal-align-left::before{content:\"\\F61F\"}.mdi-format-horizontal-align-right::before{content:\"\\F620\"}.mdi-format-indent-decrease::before{content:\"\\F275\"}.mdi-format-indent-increase::before{content:\"\\F276\"}.mdi-format-italic::before{content:\"\\F277\"}.mdi-format-letter-case::before{content:\"\\FB19\"}.mdi-format-letter-case-lower::before{content:\"\\FB1A\"}.mdi-format-letter-case-upper::before{content:\"\\FB1B\"}.mdi-format-letter-ends-with::before{content:\"\\FFD8\"}.mdi-format-letter-matches::before{content:\"\\FFD9\"}.mdi-format-letter-starts-with::before{content:\"\\FFDA\"}.mdi-format-line-spacing::before{content:\"\\F278\"}.mdi-format-line-style::before{content:\"\\F5C8\"}.mdi-format-line-weight::before{content:\"\\F5C9\"}.mdi-format-list-bulleted::before{content:\"\\F279\"}.mdi-format-list-bulleted-square::before{content:\"\\FDAC\"}.mdi-format-list-bulleted-triangle::before{content:\"\\FECF\"}.mdi-format-list-bulleted-type::before{content:\"\\F27A\"}.mdi-format-list-checkbox::before{content:\"\\F969\"}.mdi-format-list-checks::before{content:\"\\F755\"}.mdi-format-list-numbered::before{content:\"\\F27B\"}.mdi-format-list-numbered-rtl::before{content:\"\\FCE9\"}.mdi-format-overline::before{content:\"\\FED0\"}.mdi-format-page-break::before{content:\"\\F6D6\"}.mdi-format-paint::before{content:\"\\F27C\"}.mdi-format-paragraph::before{content:\"\\F27D\"}.mdi-format-pilcrow::before{content:\"\\F6D7\"}.mdi-format-quote-close::before{content:\"\\F27E\"}.mdi-format-quote-close-outline::before{content:\"\\F01D3\"}.mdi-format-quote-open::before{content:\"\\F756\"}.mdi-format-quote-open-outline::before{content:\"\\F01D2\"}.mdi-format-rotate-90::before{content:\"\\F6A9\"}.mdi-format-section::before{content:\"\\F69E\"}.mdi-format-size::before{content:\"\\F27F\"}.mdi-format-strikethrough::before{content:\"\\F280\"}.mdi-format-strikethrough-variant::before{content:\"\\F281\"}.mdi-format-subscript::before{content:\"\\F282\"}.mdi-format-superscript::before{content:\"\\F283\"}.mdi-format-text::before{content:\"\\F284\"}.mdi-format-text-rotation-angle-down::before{content:\"\\FFDB\"}.mdi-format-text-rotation-angle-up::before{content:\"\\FFDC\"}.mdi-format-text-rotation-down::before{content:\"\\FD4F\"}.mdi-format-text-rotation-down-vertical::before{content:\"\\FFDD\"}.mdi-format-text-rotation-none::before{content:\"\\FD50\"}.mdi-format-text-rotation-up::before{content:\"\\FFDE\"}.mdi-format-text-rotation-vertical::before{content:\"\\FFDF\"}.mdi-format-text-variant::before{content:\"\\FE15\"}.mdi-format-text-wrapping-clip::before{content:\"\\FCEA\"}.mdi-format-text-wrapping-overflow::before{content:\"\\FCEB\"}.mdi-format-text-wrapping-wrap::before{content:\"\\FCEC\"}.mdi-format-textbox::before{content:\"\\FCED\"}.mdi-format-textdirection-l-to-r::before{content:\"\\F285\"}.mdi-format-textdirection-r-to-l::before{content:\"\\F286\"}.mdi-format-title::before{content:\"\\F5F4\"}.mdi-format-underline::before{content:\"\\F287\"}.mdi-format-vertical-align-bottom::before{content:\"\\F621\"}.mdi-format-vertical-align-center::before{content:\"\\F622\"}.mdi-format-vertical-align-top::before{content:\"\\F623\"}.mdi-format-wrap-inline::before{content:\"\\F288\"}.mdi-format-wrap-square::before{content:\"\\F289\"}.mdi-format-wrap-tight::before{content:\"\\F28A\"}.mdi-format-wrap-top-bottom::before{content:\"\\F28B\"}.mdi-forum::before{content:\"\\F28C\"}.mdi-forum-outline::before{content:\"\\F821\"}.mdi-forward::before{content:\"\\F28D\"}.mdi-forwardburger::before{content:\"\\FD51\"}.mdi-fountain::before{content:\"\\F96A\"}.mdi-fountain-pen::before{content:\"\\FCEE\"}.mdi-fountain-pen-tip::before{content:\"\\FCEF\"}.mdi-foursquare::before{content:\"\\F28E\"}.mdi-freebsd::before{content:\"\\F8DF\"}.mdi-frequently-asked-questions::before{content:\"\\FED1\"}.mdi-fridge::before{content:\"\\F290\"}.mdi-fridge-alert::before{content:\"\\F01DC\"}.mdi-fridge-alert-outline::before{content:\"\\F01DD\"}.mdi-fridge-bottom::before{content:\"\\F292\"}.mdi-fridge-off::before{content:\"\\F01DA\"}.mdi-fridge-off-outline::before{content:\"\\F01DB\"}.mdi-fridge-outline::before{content:\"\\F28F\"}.mdi-fridge-top::before{content:\"\\F291\"}.mdi-fruit-cherries::before{content:\"\\F0064\"}.mdi-fruit-citrus::before{content:\"\\F0065\"}.mdi-fruit-grapes::before{content:\"\\F0066\"}.mdi-fruit-grapes-outline::before{content:\"\\F0067\"}.mdi-fruit-pineapple::before{content:\"\\F0068\"}.mdi-fruit-watermelon::before{content:\"\\F0069\"}.mdi-fuel::before{content:\"\\F7C9\"}.mdi-fullscreen::before{content:\"\\F293\"}.mdi-fullscreen-exit::before{content:\"\\F294\"}.mdi-function::before{content:\"\\F295\"}.mdi-function-variant::before{content:\"\\F870\"}.mdi-furigana-horizontal::before{content:\"\\F00AC\"}.mdi-furigana-vertical::before{content:\"\\F00AD\"}.mdi-fuse::before{content:\"\\FC61\"}.mdi-fuse-blade::before{content:\"\\FC62\"}.mdi-gamepad::before{content:\"\\F296\"}.mdi-gamepad-circle::before{content:\"\\FE16\"}.mdi-gamepad-circle-down::before{content:\"\\FE17\"}.mdi-gamepad-circle-left::before{content:\"\\FE18\"}.mdi-gamepad-circle-outline::before{content:\"\\FE19\"}.mdi-gamepad-circle-right::before{content:\"\\FE1A\"}.mdi-gamepad-circle-up::before{content:\"\\FE1B\"}.mdi-gamepad-down::before{content:\"\\FE1C\"}.mdi-gamepad-left::before{content:\"\\FE1D\"}.mdi-gamepad-right::before{content:\"\\FE1E\"}.mdi-gamepad-round::before{content:\"\\FE1F\"}.mdi-gamepad-round-down::before{content:\"\\FE7E\"}.mdi-gamepad-round-left::before{content:\"\\FE7F\"}.mdi-gamepad-round-outline::before{content:\"\\FE80\"}.mdi-gamepad-round-right::before{content:\"\\FE81\"}.mdi-gamepad-round-up::before{content:\"\\FE82\"}.mdi-gamepad-square::before{content:\"\\FED2\"}.mdi-gamepad-square-outline::before{content:\"\\FED3\"}.mdi-gamepad-up::before{content:\"\\FE83\"}.mdi-gamepad-variant::before{content:\"\\F297\"}.mdi-gamepad-variant-outline::before{content:\"\\FED4\"}.mdi-gamma::before{content:\"\\F0119\"}.mdi-gantry-crane::before{content:\"\\FDAD\"}.mdi-garage::before{content:\"\\F6D8\"}.mdi-garage-alert::before{content:\"\\F871\"}.mdi-garage-open::before{content:\"\\F6D9\"}.mdi-gas-cylinder::before{content:\"\\F647\"}.mdi-gas-station::before{content:\"\\F298\"}.mdi-gas-station-outline::before{content:\"\\FED5\"}.mdi-gate::before{content:\"\\F299\"}.mdi-gate-and::before{content:\"\\F8E0\"}.mdi-gate-arrow-right::before{content:\"\\F0194\"}.mdi-gate-nand::before{content:\"\\F8E1\"}.mdi-gate-nor::before{content:\"\\F8E2\"}.mdi-gate-not::before{content:\"\\F8E3\"}.mdi-gate-open::before{content:\"\\F0195\"}.mdi-gate-or::before{content:\"\\F8E4\"}.mdi-gate-xnor::before{content:\"\\F8E5\"}.mdi-gate-xor::before{content:\"\\F8E6\"}.mdi-gatsby::before{content:\"\\FE84\"}.mdi-gauge::before{content:\"\\F29A\"}.mdi-gauge-empty::before{content:\"\\F872\"}.mdi-gauge-full::before{content:\"\\F873\"}.mdi-gauge-low::before{content:\"\\F874\"}.mdi-gavel::before{content:\"\\F29B\"}.mdi-gender-female::before{content:\"\\F29C\"}.mdi-gender-male::before{content:\"\\F29D\"}.mdi-gender-male-female::before{content:\"\\F29E\"}.mdi-gender-male-female-variant::before{content:\"\\F016A\"}.mdi-gender-non-binary::before{content:\"\\F016B\"}.mdi-gender-transgender::before{content:\"\\F29F\"}.mdi-gentoo::before{content:\"\\F8E7\"}.mdi-gesture::before{content:\"\\F7CA\"}.mdi-gesture-double-tap::before{content:\"\\F73B\"}.mdi-gesture-pinch::before{content:\"\\FABC\"}.mdi-gesture-spread::before{content:\"\\FABD\"}.mdi-gesture-swipe::before{content:\"\\FD52\"}.mdi-gesture-swipe-down::before{content:\"\\F73C\"}.mdi-gesture-swipe-horizontal::before{content:\"\\FABE\"}.mdi-gesture-swipe-left::before{content:\"\\F73D\"}.mdi-gesture-swipe-right::before{content:\"\\F73E\"}.mdi-gesture-swipe-up::before{content:\"\\F73F\"}.mdi-gesture-swipe-vertical::before{content:\"\\FABF\"}.mdi-gesture-tap::before{content:\"\\F740\"}.mdi-gesture-tap-hold::before{content:\"\\FD53\"}.mdi-gesture-two-double-tap::before{content:\"\\F741\"}.mdi-gesture-two-tap::before{content:\"\\F742\"}.mdi-ghost::before{content:\"\\F2A0\"}.mdi-ghost-off::before{content:\"\\F9F4\"}.mdi-gif::before{content:\"\\FD54\"}.mdi-gift::before{content:\"\\FE85\"}.mdi-gift-outline::before{content:\"\\F2A1\"}.mdi-git::before{content:\"\\F2A2\"}.mdi-github-box::before{content:\"\\F2A3\"}.mdi-github-circle::before{content:\"\\F2A4\"}.mdi-github-face::before{content:\"\\F6DA\"}.mdi-gitlab::before{content:\"\\FB7C\"}.mdi-glass-cocktail::before{content:\"\\F356\"}.mdi-glass-flute::before{content:\"\\F2A5\"}.mdi-glass-mug::before{content:\"\\F2A6\"}.mdi-glass-mug-variant::before{content:\"\\F0141\"}.mdi-glass-stange::before{content:\"\\F2A7\"}.mdi-glass-tulip::before{content:\"\\F2A8\"}.mdi-glass-wine::before{content:\"\\F875\"}.mdi-glassdoor::before{content:\"\\F2A9\"}.mdi-glasses::before{content:\"\\F2AA\"}.mdi-globe-model::before{content:\"\\F8E8\"}.mdi-gmail::before{content:\"\\F2AB\"}.mdi-gnome::before{content:\"\\F2AC\"}.mdi-go-kart::before{content:\"\\FD55\"}.mdi-go-kart-track::before{content:\"\\FD56\"}.mdi-gog::before{content:\"\\FB7D\"}.mdi-gold::before{content:\"\\F027A\"}.mdi-golf::before{content:\"\\F822\"}.mdi-golf-cart::before{content:\"\\F01CF\"}.mdi-golf-tee::before{content:\"\\F00AE\"}.mdi-gondola::before{content:\"\\F685\"}.mdi-goodreads::before{content:\"\\FD57\"}.mdi-google::before{content:\"\\F2AD\"}.mdi-google-adwords::before{content:\"\\FC63\"}.mdi-google-analytics::before{content:\"\\F7CB\"}.mdi-google-assistant::before{content:\"\\F7CC\"}.mdi-google-cardboard::before{content:\"\\F2AE\"}.mdi-google-chrome::before{content:\"\\F2AF\"}.mdi-google-circles::before{content:\"\\F2B0\"}.mdi-google-circles-communities::before{content:\"\\F2B1\"}.mdi-google-circles-extended::before{content:\"\\F2B2\"}.mdi-google-circles-group::before{content:\"\\F2B3\"}.mdi-google-classroom::before{content:\"\\F2C0\"}.mdi-google-cloud::before{content:\"\\F0221\"}.mdi-google-controller::before{content:\"\\F2B4\"}.mdi-google-controller-off::before{content:\"\\F2B5\"}.mdi-google-drive::before{content:\"\\F2B6\"}.mdi-google-earth::before{content:\"\\F2B7\"}.mdi-google-fit::before{content:\"\\F96B\"}.mdi-google-glass::before{content:\"\\F2B8\"}.mdi-google-hangouts::before{content:\"\\F2C9\"}.mdi-google-home::before{content:\"\\F823\"}.mdi-google-keep::before{content:\"\\F6DB\"}.mdi-google-lens::before{content:\"\\F9F5\"}.mdi-google-maps::before{content:\"\\F5F5\"}.mdi-google-my-business::before{content:\"\\F006A\"}.mdi-google-nearby::before{content:\"\\F2B9\"}.mdi-google-pages::before{content:\"\\F2BA\"}.mdi-google-photos::before{content:\"\\F6DC\"}.mdi-google-physical-web::before{content:\"\\F2BB\"}.mdi-google-play::before{content:\"\\F2BC\"}.mdi-google-plus::before{content:\"\\F2BD\"}.mdi-google-plus-box::before{content:\"\\F2BE\"}.mdi-google-podcast::before{content:\"\\FED6\"}.mdi-google-spreadsheet::before{content:\"\\F9F6\"}.mdi-google-street-view::before{content:\"\\FC64\"}.mdi-google-translate::before{content:\"\\F2BF\"}.mdi-gradient::before{content:\"\\F69F\"}.mdi-grain::before{content:\"\\FD58\"}.mdi-graph::before{content:\"\\F006B\"}.mdi-graph-outline::before{content:\"\\F006C\"}.mdi-graphql::before{content:\"\\F876\"}.mdi-grave-stone::before{content:\"\\FB7E\"}.mdi-grease-pencil::before{content:\"\\F648\"}.mdi-greater-than::before{content:\"\\F96C\"}.mdi-greater-than-or-equal::before{content:\"\\F96D\"}.mdi-grid::before{content:\"\\F2C1\"}.mdi-grid-large::before{content:\"\\F757\"}.mdi-grid-off::before{content:\"\\F2C2\"}.mdi-grill::before{content:\"\\FE86\"}.mdi-grill-outline::before{content:\"\\F01B5\"}.mdi-group::before{content:\"\\F2C3\"}.mdi-guitar-acoustic::before{content:\"\\F770\"}.mdi-guitar-electric::before{content:\"\\F2C4\"}.mdi-guitar-pick::before{content:\"\\F2C5\"}.mdi-guitar-pick-outline::before{content:\"\\F2C6\"}.mdi-guy-fawkes-mask::before{content:\"\\F824\"}.mdi-hackernews::before{content:\"\\F624\"}.mdi-hail::before{content:\"\\FAC0\"}.mdi-hair-dryer::before{content:\"\\F011A\"}.mdi-hair-dryer-outline::before{content:\"\\F011B\"}.mdi-halloween::before{content:\"\\FB7F\"}.mdi-hamburger::before{content:\"\\F684\"}.mdi-hammer::before{content:\"\\F8E9\"}.mdi-hand::before{content:\"\\FA4E\"}.mdi-hand-heart::before{content:\"\\F011C\"}.mdi-hand-left::before{content:\"\\FE87\"}.mdi-hand-okay::before{content:\"\\FA4F\"}.mdi-hand-peace::before{content:\"\\FA50\"}.mdi-hand-peace-variant::before{content:\"\\FA51\"}.mdi-hand-pointing-down::before{content:\"\\FA52\"}.mdi-hand-pointing-left::before{content:\"\\FA53\"}.mdi-hand-pointing-right::before{content:\"\\F2C7\"}.mdi-hand-pointing-up::before{content:\"\\FA54\"}.mdi-hand-right::before{content:\"\\FE88\"}.mdi-hand-saw::before{content:\"\\FE89\"}.mdi-handball::before{content:\"\\FF70\"}.mdi-handcuffs::before{content:\"\\F0169\"}.mdi-handshake::before{content:\"\\F0243\"}.mdi-hanger::before{content:\"\\F2C8\"}.mdi-hard-hat::before{content:\"\\F96E\"}.mdi-harddisk::before{content:\"\\F2CA\"}.mdi-harddisk-plus::before{content:\"\\F006D\"}.mdi-harddisk-remove::before{content:\"\\F006E\"}.mdi-hat-fedora::before{content:\"\\FB80\"}.mdi-hazard-lights::before{content:\"\\FC65\"}.mdi-hdr::before{content:\"\\FD59\"}.mdi-hdr-off::before{content:\"\\FD5A\"}.mdi-headphones::before{content:\"\\F2CB\"}.mdi-headphones-bluetooth::before{content:\"\\F96F\"}.mdi-headphones-box::before{content:\"\\F2CC\"}.mdi-headphones-off::before{content:\"\\F7CD\"}.mdi-headphones-settings::before{content:\"\\F2CD\"}.mdi-headset::before{content:\"\\F2CE\"}.mdi-headset-dock::before{content:\"\\F2CF\"}.mdi-headset-off::before{content:\"\\F2D0\"}.mdi-heart::before{content:\"\\F2D1\"}.mdi-heart-box::before{content:\"\\F2D2\"}.mdi-heart-box-outline::before{content:\"\\F2D3\"}.mdi-heart-broken::before{content:\"\\F2D4\"}.mdi-heart-broken-outline::before{content:\"\\FCF0\"}.mdi-heart-circle::before{content:\"\\F970\"}.mdi-heart-circle-outline::before{content:\"\\F971\"}.mdi-heart-flash::before{content:\"\\FF16\"}.mdi-heart-half::before{content:\"\\F6DE\"}.mdi-heart-half-full::before{content:\"\\F6DD\"}.mdi-heart-half-outline::before{content:\"\\F6DF\"}.mdi-heart-multiple::before{content:\"\\FA55\"}.mdi-heart-multiple-outline::before{content:\"\\FA56\"}.mdi-heart-off::before{content:\"\\F758\"}.mdi-heart-outline::before{content:\"\\F2D5\"}.mdi-heart-pulse::before{content:\"\\F5F6\"}.mdi-helicopter::before{content:\"\\FAC1\"}.mdi-help::before{content:\"\\F2D6\"}.mdi-help-box::before{content:\"\\F78A\"}.mdi-help-circle::before{content:\"\\F2D7\"}.mdi-help-circle-outline::before{content:\"\\F625\"}.mdi-help-network::before{content:\"\\F6F4\"}.mdi-help-network-outline::before{content:\"\\FC66\"}.mdi-help-rhombus::before{content:\"\\FB81\"}.mdi-help-rhombus-outline::before{content:\"\\FB82\"}.mdi-hexagon::before{content:\"\\F2D8\"}.mdi-hexagon-multiple::before{content:\"\\F6E0\"}.mdi-hexagon-multiple-outline::before{content:\"\\F011D\"}.mdi-hexagon-outline::before{content:\"\\F2D9\"}.mdi-hexagon-slice-1::before{content:\"\\FAC2\"}.mdi-hexagon-slice-2::before{content:\"\\FAC3\"}.mdi-hexagon-slice-3::before{content:\"\\FAC4\"}.mdi-hexagon-slice-4::before{content:\"\\FAC5\"}.mdi-hexagon-slice-5::before{content:\"\\FAC6\"}.mdi-hexagon-slice-6::before{content:\"\\FAC7\"}.mdi-hexagram::before{content:\"\\FAC8\"}.mdi-hexagram-outline::before{content:\"\\FAC9\"}.mdi-high-definition::before{content:\"\\F7CE\"}.mdi-high-definition-box::before{content:\"\\F877\"}.mdi-highway::before{content:\"\\F5F7\"}.mdi-hiking::before{content:\"\\FD5B\"}.mdi-hinduism::before{content:\"\\F972\"}.mdi-history::before{content:\"\\F2DA\"}.mdi-hockey-puck::before{content:\"\\F878\"}.mdi-hockey-sticks::before{content:\"\\F879\"}.mdi-hololens::before{content:\"\\F2DB\"}.mdi-home::before{content:\"\\F2DC\"}.mdi-home-account::before{content:\"\\F825\"}.mdi-home-alert::before{content:\"\\F87A\"}.mdi-home-analytics::before{content:\"\\FED7\"}.mdi-home-assistant::before{content:\"\\F7CF\"}.mdi-home-automation::before{content:\"\\F7D0\"}.mdi-home-circle::before{content:\"\\F7D1\"}.mdi-home-circle-outline::before{content:\"\\F006F\"}.mdi-home-city::before{content:\"\\FCF1\"}.mdi-home-city-outline::before{content:\"\\FCF2\"}.mdi-home-currency-usd::before{content:\"\\F8AE\"}.mdi-home-edit::before{content:\"\\F0184\"}.mdi-home-edit-outline::before{content:\"\\F0185\"}.mdi-home-export-outline::before{content:\"\\FFB8\"}.mdi-home-flood::before{content:\"\\FF17\"}.mdi-home-floor-0::before{content:\"\\FDAE\"}.mdi-home-floor-1::before{content:\"\\FD5C\"}.mdi-home-floor-2::before{content:\"\\FD5D\"}.mdi-home-floor-3::before{content:\"\\FD5E\"}.mdi-home-floor-a::before{content:\"\\FD5F\"}.mdi-home-floor-b::before{content:\"\\FD60\"}.mdi-home-floor-g::before{content:\"\\FD61\"}.mdi-home-floor-l::before{content:\"\\FD62\"}.mdi-home-floor-negative-1::before{content:\"\\FDAF\"}.mdi-home-group::before{content:\"\\FDB0\"}.mdi-home-heart::before{content:\"\\F826\"}.mdi-home-import-outline::before{content:\"\\FFB9\"}.mdi-home-lightbulb::before{content:\"\\F027C\"}.mdi-home-lightbulb-outline::before{content:\"\\F027D\"}.mdi-home-lock::before{content:\"\\F8EA\"}.mdi-home-lock-open::before{content:\"\\F8EB\"}.mdi-home-map-marker::before{content:\"\\F5F8\"}.mdi-home-minus::before{content:\"\\F973\"}.mdi-home-modern::before{content:\"\\F2DD\"}.mdi-home-outline::before{content:\"\\F6A0\"}.mdi-home-plus::before{content:\"\\F974\"}.mdi-home-remove::before{content:\"\\F0272\"}.mdi-home-roof::before{content:\"\\F0156\"}.mdi-home-thermometer::before{content:\"\\FF71\"}.mdi-home-thermometer-outline::before{content:\"\\FF72\"}.mdi-home-variant::before{content:\"\\F2DE\"}.mdi-home-variant-outline::before{content:\"\\FB83\"}.mdi-hook::before{content:\"\\F6E1\"}.mdi-hook-off::before{content:\"\\F6E2\"}.mdi-hops::before{content:\"\\F2DF\"}.mdi-horizontal-rotate-clockwise::before{content:\"\\F011E\"}.mdi-horizontal-rotate-counterclockwise::before{content:\"\\F011F\"}.mdi-horseshoe::before{content:\"\\FA57\"}.mdi-hospital::before{content:\"\\F0017\"}.mdi-hospital-box::before{content:\"\\F2E0\"}.mdi-hospital-box-outline::before{content:\"\\F0018\"}.mdi-hospital-building::before{content:\"\\F2E1\"}.mdi-hospital-marker::before{content:\"\\F2E2\"}.mdi-hot-tub::before{content:\"\\F827\"}.mdi-hotel::before{content:\"\\F2E3\"}.mdi-houzz::before{content:\"\\F2E4\"}.mdi-houzz-box::before{content:\"\\F2E5\"}.mdi-hubspot::before{content:\"\\FCF3\"}.mdi-hulu::before{content:\"\\F828\"}.mdi-human::before{content:\"\\F2E6\"}.mdi-human-child::before{content:\"\\F2E7\"}.mdi-human-female::before{content:\"\\F649\"}.mdi-human-female-boy::before{content:\"\\FA58\"}.mdi-human-female-female::before{content:\"\\FA59\"}.mdi-human-female-girl::before{content:\"\\FA5A\"}.mdi-human-greeting::before{content:\"\\F64A\"}.mdi-human-handsdown::before{content:\"\\F64B\"}.mdi-human-handsup::before{content:\"\\F64C\"}.mdi-human-male::before{content:\"\\F64D\"}.mdi-human-male-boy::before{content:\"\\FA5B\"}.mdi-human-male-female::before{content:\"\\F2E8\"}.mdi-human-male-girl::before{content:\"\\FA5C\"}.mdi-human-male-height::before{content:\"\\FF18\"}.mdi-human-male-height-variant::before{content:\"\\FF19\"}.mdi-human-male-male::before{content:\"\\FA5D\"}.mdi-human-pregnant::before{content:\"\\F5CF\"}.mdi-humble-bundle::before{content:\"\\F743\"}.mdi-ice-cream::before{content:\"\\F829\"}.mdi-ice-pop::before{content:\"\\FF1A\"}.mdi-id-card::before{content:\"\\FFE0\"}.mdi-identifier::before{content:\"\\FF1B\"}.mdi-iframe::before{content:\"\\FC67\"}.mdi-iframe-array::before{content:\"\\F0120\"}.mdi-iframe-array-outline::before{content:\"\\F0121\"}.mdi-iframe-braces::before{content:\"\\F0122\"}.mdi-iframe-braces-outline::before{content:\"\\F0123\"}.mdi-iframe-outline::before{content:\"\\FC68\"}.mdi-iframe-parentheses::before{content:\"\\F0124\"}.mdi-iframe-parentheses-outline::before{content:\"\\F0125\"}.mdi-iframe-variable::before{content:\"\\F0126\"}.mdi-iframe-variable-outline::before{content:\"\\F0127\"}.mdi-image::before{content:\"\\F2E9\"}.mdi-image-album::before{content:\"\\F2EA\"}.mdi-image-area::before{content:\"\\F2EB\"}.mdi-image-area-close::before{content:\"\\F2EC\"}.mdi-image-auto-adjust::before{content:\"\\FFE1\"}.mdi-image-broken::before{content:\"\\F2ED\"}.mdi-image-broken-variant::before{content:\"\\F2EE\"}.mdi-image-edit::before{content:\"\\F020E\"}.mdi-image-edit-outline::before{content:\"\\F020F\"}.mdi-image-filter::before{content:\"\\F2EF\"}.mdi-image-filter-black-white::before{content:\"\\F2F0\"}.mdi-image-filter-center-focus::before{content:\"\\F2F1\"}.mdi-image-filter-center-focus-strong::before{content:\"\\FF1C\"}.mdi-image-filter-center-focus-strong-outline::before{content:\"\\FF1D\"}.mdi-image-filter-center-focus-weak::before{content:\"\\F2F2\"}.mdi-image-filter-drama::before{content:\"\\F2F3\"}.mdi-image-filter-frames::before{content:\"\\F2F4\"}.mdi-image-filter-hdr::before{content:\"\\F2F5\"}.mdi-image-filter-none::before{content:\"\\F2F6\"}.mdi-image-filter-tilt-shift::before{content:\"\\F2F7\"}.mdi-image-filter-vintage::before{content:\"\\F2F8\"}.mdi-image-frame::before{content:\"\\FE8A\"}.mdi-image-move::before{content:\"\\F9F7\"}.mdi-image-multiple::before{content:\"\\F2F9\"}.mdi-image-off::before{content:\"\\F82A\"}.mdi-image-off-outline::before{content:\"\\F01FC\"}.mdi-image-outline::before{content:\"\\F975\"}.mdi-image-plus::before{content:\"\\F87B\"}.mdi-image-search::before{content:\"\\F976\"}.mdi-image-search-outline::before{content:\"\\F977\"}.mdi-image-size-select-actual::before{content:\"\\FC69\"}.mdi-image-size-select-large::before{content:\"\\FC6A\"}.mdi-image-size-select-small::before{content:\"\\FC6B\"}.mdi-import::before{content:\"\\F2FA\"}.mdi-inbox::before{content:\"\\F686\"}.mdi-inbox-arrow-down::before{content:\"\\F2FB\"}.mdi-inbox-arrow-up::before{content:\"\\F3D1\"}.mdi-inbox-multiple::before{content:\"\\F8AF\"}.mdi-inbox-multiple-outline::before{content:\"\\FB84\"}.mdi-incognito::before{content:\"\\F5F9\"}.mdi-infinity::before{content:\"\\F6E3\"}.mdi-information::before{content:\"\\F2FC\"}.mdi-information-outline::before{content:\"\\F2FD\"}.mdi-information-variant::before{content:\"\\F64E\"}.mdi-instagram::before{content:\"\\F2FE\"}.mdi-instapaper::before{content:\"\\F2FF\"}.mdi-instrument-triangle::before{content:\"\\F0070\"}.mdi-internet-explorer::before{content:\"\\F300\"}.mdi-invert-colors::before{content:\"\\F301\"}.mdi-invert-colors-off::before{content:\"\\FE8B\"}.mdi-ip::before{content:\"\\FA5E\"}.mdi-ip-network::before{content:\"\\FA5F\"}.mdi-ip-network-outline::before{content:\"\\FC6C\"}.mdi-ipod::before{content:\"\\FC6D\"}.mdi-islam::before{content:\"\\F978\"}.mdi-island::before{content:\"\\F0071\"}.mdi-itunes::before{content:\"\\F676\"}.mdi-iv-bag::before{content:\"\\F00E4\"}.mdi-jabber::before{content:\"\\FDB1\"}.mdi-jeepney::before{content:\"\\F302\"}.mdi-jellyfish::before{content:\"\\FF1E\"}.mdi-jellyfish-outline::before{content:\"\\FF1F\"}.mdi-jira::before{content:\"\\F303\"}.mdi-jquery::before{content:\"\\F87C\"}.mdi-jsfiddle::before{content:\"\\F304\"}.mdi-json::before{content:\"\\F626\"}.mdi-judaism::before{content:\"\\F979\"}.mdi-kabaddi::before{content:\"\\FD63\"}.mdi-karate::before{content:\"\\F82B\"}.mdi-keg::before{content:\"\\F305\"}.mdi-kettle::before{content:\"\\F5FA\"}.mdi-kettle-outline::before{content:\"\\FF73\"}.mdi-key::before{content:\"\\F306\"}.mdi-key-change::before{content:\"\\F307\"}.mdi-key-link::before{content:\"\\F01CA\"}.mdi-key-minus::before{content:\"\\F308\"}.mdi-key-outline::before{content:\"\\FDB2\"}.mdi-key-plus::before{content:\"\\F309\"}.mdi-key-remove::before{content:\"\\F30A\"}.mdi-key-star::before{content:\"\\F01C9\"}.mdi-key-variant::before{content:\"\\F30B\"}.mdi-key-wireless::before{content:\"\\FFE2\"}.mdi-keyboard::before{content:\"\\F30C\"}.mdi-keyboard-backspace::before{content:\"\\F30D\"}.mdi-keyboard-caps::before{content:\"\\F30E\"}.mdi-keyboard-close::before{content:\"\\F30F\"}.mdi-keyboard-off::before{content:\"\\F310\"}.mdi-keyboard-off-outline::before{content:\"\\FE8C\"}.mdi-keyboard-outline::before{content:\"\\F97A\"}.mdi-keyboard-return::before{content:\"\\F311\"}.mdi-keyboard-settings::before{content:\"\\F9F8\"}.mdi-keyboard-settings-outline::before{content:\"\\F9F9\"}.mdi-keyboard-space::before{content:\"\\F0072\"}.mdi-keyboard-tab::before{content:\"\\F312\"}.mdi-keyboard-variant::before{content:\"\\F313\"}.mdi-khanda::before{content:\"\\F0128\"}.mdi-kickstarter::before{content:\"\\F744\"}.mdi-knife::before{content:\"\\F9FA\"}.mdi-knife-military::before{content:\"\\F9FB\"}.mdi-kodi::before{content:\"\\F314\"}.mdi-kotlin::before{content:\"\\F0244\"}.mdi-kubernetes::before{content:\"\\F0129\"}.mdi-label::before{content:\"\\F315\"}.mdi-label-off::before{content:\"\\FACA\"}.mdi-label-off-outline::before{content:\"\\FACB\"}.mdi-label-outline::before{content:\"\\F316\"}.mdi-label-variant::before{content:\"\\FACC\"}.mdi-label-variant-outline::before{content:\"\\FACD\"}.mdi-ladybug::before{content:\"\\F82C\"}.mdi-lambda::before{content:\"\\F627\"}.mdi-lamp::before{content:\"\\F6B4\"}.mdi-lan::before{content:\"\\F317\"}.mdi-lan-connect::before{content:\"\\F318\"}.mdi-lan-disconnect::before{content:\"\\F319\"}.mdi-lan-pending::before{content:\"\\F31A\"}.mdi-language-c::before{content:\"\\F671\"}.mdi-language-cpp::before{content:\"\\F672\"}.mdi-language-csharp::before{content:\"\\F31B\"}.mdi-language-css3::before{content:\"\\F31C\"}.mdi-language-fortran::before{content:\"\\F0245\"}.mdi-language-go::before{content:\"\\F7D2\"}.mdi-language-haskell::before{content:\"\\FC6E\"}.mdi-language-html5::before{content:\"\\F31D\"}.mdi-language-java::before{content:\"\\FB1C\"}.mdi-language-javascript::before{content:\"\\F31E\"}.mdi-language-lua::before{content:\"\\F8B0\"}.mdi-language-php::before{content:\"\\F31F\"}.mdi-language-python::before{content:\"\\F320\"}.mdi-language-python-text::before{content:\"\\F321\"}.mdi-language-r::before{content:\"\\F7D3\"}.mdi-language-ruby-on-rails::before{content:\"\\FACE\"}.mdi-language-swift::before{content:\"\\F6E4\"}.mdi-language-typescript::before{content:\"\\F6E5\"}.mdi-laptop::before{content:\"\\F322\"}.mdi-laptop-chromebook::before{content:\"\\F323\"}.mdi-laptop-mac::before{content:\"\\F324\"}.mdi-laptop-off::before{content:\"\\F6E6\"}.mdi-laptop-windows::before{content:\"\\F325\"}.mdi-laravel::before{content:\"\\FACF\"}.mdi-lasso::before{content:\"\\FF20\"}.mdi-lastfm::before{content:\"\\F326\"}.mdi-lastpass::before{content:\"\\F446\"}.mdi-latitude::before{content:\"\\FF74\"}.mdi-launch::before{content:\"\\F327\"}.mdi-lava-lamp::before{content:\"\\F7D4\"}.mdi-layers::before{content:\"\\F328\"}.mdi-layers-minus::before{content:\"\\FE8D\"}.mdi-layers-off::before{content:\"\\F329\"}.mdi-layers-off-outline::before{content:\"\\F9FC\"}.mdi-layers-outline::before{content:\"\\F9FD\"}.mdi-layers-plus::before{content:\"\\FE30\"}.mdi-layers-remove::before{content:\"\\FE31\"}.mdi-layers-search::before{content:\"\\F0231\"}.mdi-layers-search-outline::before{content:\"\\F0232\"}.mdi-layers-triple::before{content:\"\\FF75\"}.mdi-layers-triple-outline::before{content:\"\\FF76\"}.mdi-lead-pencil::before{content:\"\\F64F\"}.mdi-leaf::before{content:\"\\F32A\"}.mdi-leaf-maple::before{content:\"\\FC6F\"}.mdi-leak::before{content:\"\\FDB3\"}.mdi-leak-off::before{content:\"\\FDB4\"}.mdi-led-off::before{content:\"\\F32B\"}.mdi-led-on::before{content:\"\\F32C\"}.mdi-led-outline::before{content:\"\\F32D\"}.mdi-led-strip::before{content:\"\\F7D5\"}.mdi-led-strip-variant::before{content:\"\\F0073\"}.mdi-led-variant-off::before{content:\"\\F32E\"}.mdi-led-variant-on::before{content:\"\\F32F\"}.mdi-led-variant-outline::before{content:\"\\F330\"}.mdi-leek::before{content:\"\\F01A8\"}.mdi-less-than::before{content:\"\\F97B\"}.mdi-less-than-or-equal::before{content:\"\\F97C\"}.mdi-library::before{content:\"\\F331\"}.mdi-library-books::before{content:\"\\F332\"}.mdi-library-movie::before{content:\"\\FCF4\"}.mdi-library-music::before{content:\"\\F333\"}.mdi-library-music-outline::before{content:\"\\FF21\"}.mdi-library-shelves::before{content:\"\\FB85\"}.mdi-library-video::before{content:\"\\FCF5\"}.mdi-license::before{content:\"\\FFE3\"}.mdi-lifebuoy::before{content:\"\\F87D\"}.mdi-light-switch::before{content:\"\\F97D\"}.mdi-lightbulb::before{content:\"\\F335\"}.mdi-lightbulb-cfl::before{content:\"\\F0233\"}.mdi-lightbulb-cfl-off::before{content:\"\\F0234\"}.mdi-lightbulb-group::before{content:\"\\F027E\"}.mdi-lightbulb-group-outline::before{content:\"\\F027F\"}.mdi-lightbulb-multiple::before{content:\"\\F0280\"}.mdi-lightbulb-multiple-outline::before{content:\"\\F0281\"}.mdi-lightbulb-off::before{content:\"\\FE32\"}.mdi-lightbulb-off-outline::before{content:\"\\FE33\"}.mdi-lightbulb-on::before{content:\"\\F6E7\"}.mdi-lightbulb-on-outline::before{content:\"\\F6E8\"}.mdi-lightbulb-outline::before{content:\"\\F336\"}.mdi-lighthouse::before{content:\"\\F9FE\"}.mdi-lighthouse-on::before{content:\"\\F9FF\"}.mdi-link::before{content:\"\\F337\"}.mdi-link-box::before{content:\"\\FCF6\"}.mdi-link-box-outline::before{content:\"\\FCF7\"}.mdi-link-box-variant::before{content:\"\\FCF8\"}.mdi-link-box-variant-outline::before{content:\"\\FCF9\"}.mdi-link-lock::before{content:\"\\F00E5\"}.mdi-link-off::before{content:\"\\F338\"}.mdi-link-plus::before{content:\"\\FC70\"}.mdi-link-variant::before{content:\"\\F339\"}.mdi-link-variant-minus::before{content:\"\\F012A\"}.mdi-link-variant-off::before{content:\"\\F33A\"}.mdi-link-variant-plus::before{content:\"\\F012B\"}.mdi-link-variant-remove::before{content:\"\\F012C\"}.mdi-linkedin::before{content:\"\\F33B\"}.mdi-linkedin-box::before{content:\"\\F33C\"}.mdi-linux::before{content:\"\\F33D\"}.mdi-linux-mint::before{content:\"\\F8EC\"}.mdi-litecoin::before{content:\"\\FA60\"}.mdi-loading::before{content:\"\\F771\"}.mdi-location-enter::before{content:\"\\FFE4\"}.mdi-location-exit::before{content:\"\\FFE5\"}.mdi-lock::before{content:\"\\F33E\"}.mdi-lock-alert::before{content:\"\\F8ED\"}.mdi-lock-clock::before{content:\"\\F97E\"}.mdi-lock-open::before{content:\"\\F33F\"}.mdi-lock-open-outline::before{content:\"\\F340\"}.mdi-lock-open-variant::before{content:\"\\FFE6\"}.mdi-lock-open-variant-outline::before{content:\"\\FFE7\"}.mdi-lock-outline::before{content:\"\\F341\"}.mdi-lock-pattern::before{content:\"\\F6E9\"}.mdi-lock-plus::before{content:\"\\F5FB\"}.mdi-lock-question::before{content:\"\\F8EE\"}.mdi-lock-reset::before{content:\"\\F772\"}.mdi-lock-smart::before{content:\"\\F8B1\"}.mdi-locker::before{content:\"\\F7D6\"}.mdi-locker-multiple::before{content:\"\\F7D7\"}.mdi-login::before{content:\"\\F342\"}.mdi-login-variant::before{content:\"\\F5FC\"}.mdi-logout::before{content:\"\\F343\"}.mdi-logout-variant::before{content:\"\\F5FD\"}.mdi-longitude::before{content:\"\\FF77\"}.mdi-looks::before{content:\"\\F344\"}.mdi-loupe::before{content:\"\\F345\"}.mdi-lumx::before{content:\"\\F346\"}.mdi-lungs::before{content:\"\\F00AF\"}.mdi-lyft::before{content:\"\\FB1D\"}.mdi-magnet::before{content:\"\\F347\"}.mdi-magnet-on::before{content:\"\\F348\"}.mdi-magnify::before{content:\"\\F349\"}.mdi-magnify-close::before{content:\"\\F97F\"}.mdi-magnify-minus::before{content:\"\\F34A\"}.mdi-magnify-minus-cursor::before{content:\"\\FA61\"}.mdi-magnify-minus-outline::before{content:\"\\F6EB\"}.mdi-magnify-plus::before{content:\"\\F34B\"}.mdi-magnify-plus-cursor::before{content:\"\\FA62\"}.mdi-magnify-plus-outline::before{content:\"\\F6EC\"}.mdi-magnify-remove-cursor::before{content:\"\\F0237\"}.mdi-magnify-remove-outline::before{content:\"\\F0238\"}.mdi-mail::before{content:\"\\FED8\"}.mdi-mail-ru::before{content:\"\\F34C\"}.mdi-mailbox::before{content:\"\\F6ED\"}.mdi-mailbox-open::before{content:\"\\FD64\"}.mdi-mailbox-open-outline::before{content:\"\\FD65\"}.mdi-mailbox-open-up::before{content:\"\\FD66\"}.mdi-mailbox-open-up-outline::before{content:\"\\FD67\"}.mdi-mailbox-outline::before{content:\"\\FD68\"}.mdi-mailbox-up::before{content:\"\\FD69\"}.mdi-mailbox-up-outline::before{content:\"\\FD6A\"}.mdi-map::before{content:\"\\F34D\"}.mdi-map-check::before{content:\"\\FED9\"}.mdi-map-check-outline::before{content:\"\\FEDA\"}.mdi-map-clock::before{content:\"\\FCFA\"}.mdi-map-clock-outline::before{content:\"\\FCFB\"}.mdi-map-legend::before{content:\"\\FA00\"}.mdi-map-marker::before{content:\"\\F34E\"}.mdi-map-marker-alert::before{content:\"\\FF22\"}.mdi-map-marker-alert-outline::before{content:\"\\FF23\"}.mdi-map-marker-check::before{content:\"\\FC71\"}.mdi-map-marker-circle::before{content:\"\\F34F\"}.mdi-map-marker-distance::before{content:\"\\F8EF\"}.mdi-map-marker-down::before{content:\"\\F012D\"}.mdi-map-marker-minus::before{content:\"\\F650\"}.mdi-map-marker-multiple::before{content:\"\\F350\"}.mdi-map-marker-off::before{content:\"\\F351\"}.mdi-map-marker-outline::before{content:\"\\F7D8\"}.mdi-map-marker-path::before{content:\"\\FCFC\"}.mdi-map-marker-plus::before{content:\"\\F651\"}.mdi-map-marker-question::before{content:\"\\FF24\"}.mdi-map-marker-question-outline::before{content:\"\\FF25\"}.mdi-map-marker-radius::before{content:\"\\F352\"}.mdi-map-marker-remove::before{content:\"\\FF26\"}.mdi-map-marker-remove-variant::before{content:\"\\FF27\"}.mdi-map-marker-up::before{content:\"\\F012E\"}.mdi-map-minus::before{content:\"\\F980\"}.mdi-map-outline::before{content:\"\\F981\"}.mdi-map-plus::before{content:\"\\F982\"}.mdi-map-search::before{content:\"\\F983\"}.mdi-map-search-outline::before{content:\"\\F984\"}.mdi-mapbox::before{content:\"\\FB86\"}.mdi-margin::before{content:\"\\F353\"}.mdi-markdown::before{content:\"\\F354\"}.mdi-markdown-outline::before{content:\"\\FF78\"}.mdi-marker::before{content:\"\\F652\"}.mdi-marker-cancel::before{content:\"\\FDB5\"}.mdi-marker-check::before{content:\"\\F355\"}.mdi-mastodon::before{content:\"\\FAD0\"}.mdi-mastodon-variant::before{content:\"\\FAD1\"}.mdi-material-design::before{content:\"\\F985\"}.mdi-material-ui::before{content:\"\\F357\"}.mdi-math-compass::before{content:\"\\F358\"}.mdi-math-cos::before{content:\"\\FC72\"}.mdi-math-integral::before{content:\"\\FFE8\"}.mdi-math-integral-box::before{content:\"\\FFE9\"}.mdi-math-log::before{content:\"\\F00B0\"}.mdi-math-norm::before{content:\"\\FFEA\"}.mdi-math-norm-box::before{content:\"\\FFEB\"}.mdi-math-sin::before{content:\"\\FC73\"}.mdi-math-tan::before{content:\"\\FC74\"}.mdi-matrix::before{content:\"\\F628\"}.mdi-maxcdn::before{content:\"\\F359\"}.mdi-medal::before{content:\"\\F986\"}.mdi-medical-bag::before{content:\"\\F6EE\"}.mdi-meditation::before{content:\"\\F01A6\"}.mdi-medium::before{content:\"\\F35A\"}.mdi-meetup::before{content:\"\\FAD2\"}.mdi-memory::before{content:\"\\F35B\"}.mdi-menu::before{content:\"\\F35C\"}.mdi-menu-down::before{content:\"\\F35D\"}.mdi-menu-down-outline::before{content:\"\\F6B5\"}.mdi-menu-left::before{content:\"\\F35E\"}.mdi-menu-left-outline::before{content:\"\\FA01\"}.mdi-menu-open::before{content:\"\\FB87\"}.mdi-menu-right::before{content:\"\\F35F\"}.mdi-menu-right-outline::before{content:\"\\FA02\"}.mdi-menu-swap::before{content:\"\\FA63\"}.mdi-menu-swap-outline::before{content:\"\\FA64\"}.mdi-menu-up::before{content:\"\\F360\"}.mdi-menu-up-outline::before{content:\"\\F6B6\"}.mdi-merge::before{content:\"\\FF79\"}.mdi-message::before{content:\"\\F361\"}.mdi-message-alert::before{content:\"\\F362\"}.mdi-message-alert-outline::before{content:\"\\FA03\"}.mdi-message-bulleted::before{content:\"\\F6A1\"}.mdi-message-bulleted-off::before{content:\"\\F6A2\"}.mdi-message-draw::before{content:\"\\F363\"}.mdi-message-image::before{content:\"\\F364\"}.mdi-message-image-outline::before{content:\"\\F0197\"}.mdi-message-lock::before{content:\"\\FFEC\"}.mdi-message-lock-outline::before{content:\"\\F0198\"}.mdi-message-minus::before{content:\"\\F0199\"}.mdi-message-minus-outline::before{content:\"\\F019A\"}.mdi-message-outline::before{content:\"\\F365\"}.mdi-message-plus::before{content:\"\\F653\"}.mdi-message-plus-outline::before{content:\"\\F00E6\"}.mdi-message-processing::before{content:\"\\F366\"}.mdi-message-processing-outline::before{content:\"\\F019B\"}.mdi-message-reply::before{content:\"\\F367\"}.mdi-message-reply-text::before{content:\"\\F368\"}.mdi-message-settings::before{content:\"\\F6EF\"}.mdi-message-settings-outline::before{content:\"\\F019C\"}.mdi-message-settings-variant::before{content:\"\\F6F0\"}.mdi-message-settings-variant-outline::before{content:\"\\F019D\"}.mdi-message-text::before{content:\"\\F369\"}.mdi-message-text-clock::before{content:\"\\F019E\"}.mdi-message-text-clock-outline::before{content:\"\\F019F\"}.mdi-message-text-lock::before{content:\"\\FFED\"}.mdi-message-text-lock-outline::before{content:\"\\F01A0\"}.mdi-message-text-outline::before{content:\"\\F36A\"}.mdi-message-video::before{content:\"\\F36B\"}.mdi-meteor::before{content:\"\\F629\"}.mdi-metronome::before{content:\"\\F7D9\"}.mdi-metronome-tick::before{content:\"\\F7DA\"}.mdi-micro-sd::before{content:\"\\F7DB\"}.mdi-microphone::before{content:\"\\F36C\"}.mdi-microphone-minus::before{content:\"\\F8B2\"}.mdi-microphone-off::before{content:\"\\F36D\"}.mdi-microphone-outline::before{content:\"\\F36E\"}.mdi-microphone-plus::before{content:\"\\F8B3\"}.mdi-microphone-settings::before{content:\"\\F36F\"}.mdi-microphone-variant::before{content:\"\\F370\"}.mdi-microphone-variant-off::before{content:\"\\F371\"}.mdi-microscope::before{content:\"\\F654\"}.mdi-microsoft::before{content:\"\\F372\"}.mdi-microsoft-dynamics::before{content:\"\\F987\"}.mdi-microwave::before{content:\"\\FC75\"}.mdi-middleware::before{content:\"\\FF7A\"}.mdi-middleware-outline::before{content:\"\\FF7B\"}.mdi-midi::before{content:\"\\F8F0\"}.mdi-midi-port::before{content:\"\\F8F1\"}.mdi-mine::before{content:\"\\FDB6\"}.mdi-minecraft::before{content:\"\\F373\"}.mdi-mini-sd::before{content:\"\\FA04\"}.mdi-minidisc::before{content:\"\\FA05\"}.mdi-minus::before{content:\"\\F374\"}.mdi-minus-box::before{content:\"\\F375\"}.mdi-minus-box-multiple::before{content:\"\\F016C\"}.mdi-minus-box-multiple-outline::before{content:\"\\F016D\"}.mdi-minus-box-outline::before{content:\"\\F6F1\"}.mdi-minus-circle::before{content:\"\\F376\"}.mdi-minus-circle-outline::before{content:\"\\F377\"}.mdi-minus-network::before{content:\"\\F378\"}.mdi-minus-network-outline::before{content:\"\\FC76\"}.mdi-mirror::before{content:\"\\F0228\"}.mdi-mixcloud::before{content:\"\\F62A\"}.mdi-mixed-martial-arts::before{content:\"\\FD6B\"}.mdi-mixed-reality::before{content:\"\\F87E\"}.mdi-mixer::before{content:\"\\F7DC\"}.mdi-molecule::before{content:\"\\FB88\"}.mdi-monitor::before{content:\"\\F379\"}.mdi-monitor-cellphone::before{content:\"\\F988\"}.mdi-monitor-cellphone-star::before{content:\"\\F989\"}.mdi-monitor-clean::before{content:\"\\F012F\"}.mdi-monitor-dashboard::before{content:\"\\FA06\"}.mdi-monitor-lock::before{content:\"\\FDB7\"}.mdi-monitor-multiple::before{content:\"\\F37A\"}.mdi-monitor-off::before{content:\"\\FD6C\"}.mdi-monitor-screenshot::before{content:\"\\FE34\"}.mdi-monitor-speaker::before{content:\"\\FF7C\"}.mdi-monitor-speaker-off::before{content:\"\\FF7D\"}.mdi-monitor-star::before{content:\"\\FDB8\"}.mdi-moon-first-quarter::before{content:\"\\FF7E\"}.mdi-moon-full::before{content:\"\\FF7F\"}.mdi-moon-last-quarter::before{content:\"\\FF80\"}.mdi-moon-new::before{content:\"\\FF81\"}.mdi-moon-waning-crescent::before{content:\"\\FF82\"}.mdi-moon-waning-gibbous::before{content:\"\\FF83\"}.mdi-moon-waxing-crescent::before{content:\"\\FF84\"}.mdi-moon-waxing-gibbous::before{content:\"\\FF85\"}.mdi-moped::before{content:\"\\F00B1\"}.mdi-more::before{content:\"\\F37B\"}.mdi-mother-nurse::before{content:\"\\FCFD\"}.mdi-motion-sensor::before{content:\"\\FD6D\"}.mdi-motorbike::before{content:\"\\F37C\"}.mdi-mouse::before{content:\"\\F37D\"}.mdi-mouse-bluetooth::before{content:\"\\F98A\"}.mdi-mouse-off::before{content:\"\\F37E\"}.mdi-mouse-variant::before{content:\"\\F37F\"}.mdi-mouse-variant-off::before{content:\"\\F380\"}.mdi-move-resize::before{content:\"\\F655\"}.mdi-move-resize-variant::before{content:\"\\F656\"}.mdi-movie::before{content:\"\\F381\"}.mdi-movie-edit::before{content:\"\\F014D\"}.mdi-movie-edit-outline::before{content:\"\\F014E\"}.mdi-movie-filter::before{content:\"\\F014F\"}.mdi-movie-filter-outline::before{content:\"\\F0150\"}.mdi-movie-open::before{content:\"\\FFEE\"}.mdi-movie-open-outline::before{content:\"\\FFEF\"}.mdi-movie-outline::before{content:\"\\FDB9\"}.mdi-movie-roll::before{content:\"\\F7DD\"}.mdi-movie-search::before{content:\"\\F01FD\"}.mdi-movie-search-outline::before{content:\"\\F01FE\"}.mdi-muffin::before{content:\"\\F98B\"}.mdi-multiplication::before{content:\"\\F382\"}.mdi-multiplication-box::before{content:\"\\F383\"}.mdi-mushroom::before{content:\"\\F7DE\"}.mdi-mushroom-outline::before{content:\"\\F7DF\"}.mdi-music::before{content:\"\\F759\"}.mdi-music-accidental-double-flat::before{content:\"\\FF86\"}.mdi-music-accidental-double-sharp::before{content:\"\\FF87\"}.mdi-music-accidental-flat::before{content:\"\\FF88\"}.mdi-music-accidental-natural::before{content:\"\\FF89\"}.mdi-music-accidental-sharp::before{content:\"\\FF8A\"}.mdi-music-box::before{content:\"\\F384\"}.mdi-music-box-outline::before{content:\"\\F385\"}.mdi-music-circle::before{content:\"\\F386\"}.mdi-music-circle-outline::before{content:\"\\FAD3\"}.mdi-music-clef-alto::before{content:\"\\FF8B\"}.mdi-music-clef-bass::before{content:\"\\FF8C\"}.mdi-music-clef-treble::before{content:\"\\FF8D\"}.mdi-music-note::before{content:\"\\F387\"}.mdi-music-note-bluetooth::before{content:\"\\F5FE\"}.mdi-music-note-bluetooth-off::before{content:\"\\F5FF\"}.mdi-music-note-eighth::before{content:\"\\F388\"}.mdi-music-note-eighth-dotted::before{content:\"\\FF8E\"}.mdi-music-note-half::before{content:\"\\F389\"}.mdi-music-note-half-dotted::before{content:\"\\FF8F\"}.mdi-music-note-off::before{content:\"\\F38A\"}.mdi-music-note-off-outline::before{content:\"\\FF90\"}.mdi-music-note-outline::before{content:\"\\FF91\"}.mdi-music-note-plus::before{content:\"\\FDBA\"}.mdi-music-note-quarter::before{content:\"\\F38B\"}.mdi-music-note-quarter-dotted::before{content:\"\\FF92\"}.mdi-music-note-sixteenth::before{content:\"\\F38C\"}.mdi-music-note-sixteenth-dotted::before{content:\"\\FF93\"}.mdi-music-note-whole::before{content:\"\\F38D\"}.mdi-music-note-whole-dotted::before{content:\"\\FF94\"}.mdi-music-off::before{content:\"\\F75A\"}.mdi-music-rest-eighth::before{content:\"\\FF95\"}.mdi-music-rest-half::before{content:\"\\FF96\"}.mdi-music-rest-quarter::before{content:\"\\FF97\"}.mdi-music-rest-sixteenth::before{content:\"\\FF98\"}.mdi-music-rest-whole::before{content:\"\\FF99\"}.mdi-nail::before{content:\"\\FDBB\"}.mdi-nas::before{content:\"\\F8F2\"}.mdi-nativescript::before{content:\"\\F87F\"}.mdi-nature::before{content:\"\\F38E\"}.mdi-nature-people::before{content:\"\\F38F\"}.mdi-navigation::before{content:\"\\F390\"}.mdi-near-me::before{content:\"\\F5CD\"}.mdi-necklace::before{content:\"\\FF28\"}.mdi-needle::before{content:\"\\F391\"}.mdi-netflix::before{content:\"\\F745\"}.mdi-network::before{content:\"\\F6F2\"}.mdi-network-off::before{content:\"\\FC77\"}.mdi-network-off-outline::before{content:\"\\FC78\"}.mdi-network-outline::before{content:\"\\FC79\"}.mdi-network-router::before{content:\"\\F00B2\"}.mdi-network-strength-1::before{content:\"\\F8F3\"}.mdi-network-strength-1-alert::before{content:\"\\F8F4\"}.mdi-network-strength-2::before{content:\"\\F8F5\"}.mdi-network-strength-2-alert::before{content:\"\\F8F6\"}.mdi-network-strength-3::before{content:\"\\F8F7\"}.mdi-network-strength-3-alert::before{content:\"\\F8F8\"}.mdi-network-strength-4::before{content:\"\\F8F9\"}.mdi-network-strength-4-alert::before{content:\"\\F8FA\"}.mdi-network-strength-off::before{content:\"\\F8FB\"}.mdi-network-strength-off-outline::before{content:\"\\F8FC\"}.mdi-network-strength-outline::before{content:\"\\F8FD\"}.mdi-new-box::before{content:\"\\F394\"}.mdi-newspaper::before{content:\"\\F395\"}.mdi-newspaper-minus::before{content:\"\\FF29\"}.mdi-newspaper-plus::before{content:\"\\FF2A\"}.mdi-newspaper-variant::before{content:\"\\F0023\"}.mdi-newspaper-variant-multiple::before{content:\"\\F0024\"}.mdi-newspaper-variant-multiple-outline::before{content:\"\\F0025\"}.mdi-newspaper-variant-outline::before{content:\"\\F0026\"}.mdi-nfc::before{content:\"\\F396\"}.mdi-nfc-off::before{content:\"\\FE35\"}.mdi-nfc-search-variant::before{content:\"\\FE36\"}.mdi-nfc-tap::before{content:\"\\F397\"}.mdi-nfc-variant::before{content:\"\\F398\"}.mdi-nfc-variant-off::before{content:\"\\FE37\"}.mdi-ninja::before{content:\"\\F773\"}.mdi-nintendo-switch::before{content:\"\\F7E0\"}.mdi-nix::before{content:\"\\F0130\"}.mdi-nodejs::before{content:\"\\F399\"}.mdi-noodles::before{content:\"\\F01A9\"}.mdi-not-equal::before{content:\"\\F98C\"}.mdi-not-equal-variant::before{content:\"\\F98D\"}.mdi-note::before{content:\"\\F39A\"}.mdi-note-multiple::before{content:\"\\F6B7\"}.mdi-note-multiple-outline::before{content:\"\\F6B8\"}.mdi-note-outline::before{content:\"\\F39B\"}.mdi-note-plus::before{content:\"\\F39C\"}.mdi-note-plus-outline::before{content:\"\\F39D\"}.mdi-note-text::before{content:\"\\F39E\"}.mdi-note-text-outline::before{content:\"\\F0202\"}.mdi-notebook::before{content:\"\\F82D\"}.mdi-notebook-multiple::before{content:\"\\FE38\"}.mdi-notebook-outline::before{content:\"\\FEDC\"}.mdi-notification-clear-all::before{content:\"\\F39F\"}.mdi-npm::before{content:\"\\F6F6\"}.mdi-npm-variant::before{content:\"\\F98E\"}.mdi-npm-variant-outline::before{content:\"\\F98F\"}.mdi-nuke::before{content:\"\\F6A3\"}.mdi-null::before{content:\"\\F7E1\"}.mdi-numeric::before{content:\"\\F3A0\"}.mdi-numeric-0::before{content:\"\\30\"}.mdi-numeric-0-box::before{content:\"\\F3A1\"}.mdi-numeric-0-box-multiple::before{content:\"\\FF2B\"}.mdi-numeric-0-box-multiple-outline::before{content:\"\\F3A2\"}.mdi-numeric-0-box-outline::before{content:\"\\F3A3\"}.mdi-numeric-0-circle::before{content:\"\\FC7A\"}.mdi-numeric-0-circle-outline::before{content:\"\\FC7B\"}.mdi-numeric-1::before{content:\"\\31\"}.mdi-numeric-1-box::before{content:\"\\F3A4\"}.mdi-numeric-1-box-multiple::before{content:\"\\FF2C\"}.mdi-numeric-1-box-multiple-outline::before{content:\"\\F3A5\"}.mdi-numeric-1-box-outline::before{content:\"\\F3A6\"}.mdi-numeric-1-circle::before{content:\"\\FC7C\"}.mdi-numeric-1-circle-outline::before{content:\"\\FC7D\"}.mdi-numeric-10::before{content:\"\\F000A\"}.mdi-numeric-10-box::before{content:\"\\FF9A\"}.mdi-numeric-10-box-multiple::before{content:\"\\F000B\"}.mdi-numeric-10-box-multiple-outline::before{content:\"\\F000C\"}.mdi-numeric-10-box-outline::before{content:\"\\FF9B\"}.mdi-numeric-10-circle::before{content:\"\\F000D\"}.mdi-numeric-10-circle-outline::before{content:\"\\F000E\"}.mdi-numeric-2::before{content:\"\\32\"}.mdi-numeric-2-box::before{content:\"\\F3A7\"}.mdi-numeric-2-box-multiple::before{content:\"\\FF2D\"}.mdi-numeric-2-box-multiple-outline::before{content:\"\\F3A8\"}.mdi-numeric-2-box-outline::before{content:\"\\F3A9\"}.mdi-numeric-2-circle::before{content:\"\\FC7E\"}.mdi-numeric-2-circle-outline::before{content:\"\\FC7F\"}.mdi-numeric-3::before{content:\"\\33\"}.mdi-numeric-3-box::before{content:\"\\F3AA\"}.mdi-numeric-3-box-multiple::before{content:\"\\FF2E\"}.mdi-numeric-3-box-multiple-outline::before{content:\"\\F3AB\"}.mdi-numeric-3-box-outline::before{content:\"\\F3AC\"}.mdi-numeric-3-circle::before{content:\"\\FC80\"}.mdi-numeric-3-circle-outline::before{content:\"\\FC81\"}.mdi-numeric-4::before{content:\"\\34\"}.mdi-numeric-4-box::before{content:\"\\F3AD\"}.mdi-numeric-4-box-multiple::before{content:\"\\FF2F\"}.mdi-numeric-4-box-multiple-outline::before{content:\"\\F3AE\"}.mdi-numeric-4-box-outline::before{content:\"\\F3AF\"}.mdi-numeric-4-circle::before{content:\"\\FC82\"}.mdi-numeric-4-circle-outline::before{content:\"\\FC83\"}.mdi-numeric-5::before{content:\"\\35\"}.mdi-numeric-5-box::before{content:\"\\F3B0\"}.mdi-numeric-5-box-multiple::before{content:\"\\FF30\"}.mdi-numeric-5-box-multiple-outline::before{content:\"\\F3B1\"}.mdi-numeric-5-box-outline::before{content:\"\\F3B2\"}.mdi-numeric-5-circle::before{content:\"\\FC84\"}.mdi-numeric-5-circle-outline::before{content:\"\\FC85\"}.mdi-numeric-6::before{content:\"\\36\"}.mdi-numeric-6-box::before{content:\"\\F3B3\"}.mdi-numeric-6-box-multiple::before{content:\"\\FF31\"}.mdi-numeric-6-box-multiple-outline::before{content:\"\\F3B4\"}.mdi-numeric-6-box-outline::before{content:\"\\F3B5\"}.mdi-numeric-6-circle::before{content:\"\\FC86\"}.mdi-numeric-6-circle-outline::before{content:\"\\FC87\"}.mdi-numeric-7::before{content:\"\\37\"}.mdi-numeric-7-box::before{content:\"\\F3B6\"}.mdi-numeric-7-box-multiple::before{content:\"\\FF32\"}.mdi-numeric-7-box-multiple-outline::before{content:\"\\F3B7\"}.mdi-numeric-7-box-outline::before{content:\"\\F3B8\"}.mdi-numeric-7-circle::before{content:\"\\FC88\"}.mdi-numeric-7-circle-outline::before{content:\"\\FC89\"}.mdi-numeric-8::before{content:\"\\38\"}.mdi-numeric-8-box::before{content:\"\\F3B9\"}.mdi-numeric-8-box-multiple::before{content:\"\\FF33\"}.mdi-numeric-8-box-multiple-outline::before{content:\"\\F3BA\"}.mdi-numeric-8-box-outline::before{content:\"\\F3BB\"}.mdi-numeric-8-circle::before{content:\"\\FC8A\"}.mdi-numeric-8-circle-outline::before{content:\"\\FC8B\"}.mdi-numeric-9::before{content:\"\\39\"}.mdi-numeric-9-box::before{content:\"\\F3BC\"}.mdi-numeric-9-box-multiple::before{content:\"\\FF34\"}.mdi-numeric-9-box-multiple-outline::before{content:\"\\F3BD\"}.mdi-numeric-9-box-outline::before{content:\"\\F3BE\"}.mdi-numeric-9-circle::before{content:\"\\FC8C\"}.mdi-numeric-9-circle-outline::before{content:\"\\FC8D\"}.mdi-numeric-9-plus::before{content:\"\\F000F\"}.mdi-numeric-9-plus-box::before{content:\"\\F3BF\"}.mdi-numeric-9-plus-box-multiple::before{content:\"\\FF35\"}.mdi-numeric-9-plus-box-multiple-outline::before{content:\"\\F3C0\"}.mdi-numeric-9-plus-box-outline::before{content:\"\\F3C1\"}.mdi-numeric-9-plus-circle::before{content:\"\\FC8E\"}.mdi-numeric-9-plus-circle-outline::before{content:\"\\FC8F\"}.mdi-numeric-negative-1::before{content:\"\\F0074\"}.mdi-nut::before{content:\"\\F6F7\"}.mdi-nutrition::before{content:\"\\F3C2\"}.mdi-nuxt::before{content:\"\\F0131\"}.mdi-oar::before{content:\"\\F67B\"}.mdi-ocarina::before{content:\"\\FDBC\"}.mdi-ocr::before{content:\"\\F0165\"}.mdi-octagon::before{content:\"\\F3C3\"}.mdi-octagon-outline::before{content:\"\\F3C4\"}.mdi-octagram::before{content:\"\\F6F8\"}.mdi-octagram-outline::before{content:\"\\F774\"}.mdi-odnoklassniki::before{content:\"\\F3C5\"}.mdi-offer::before{content:\"\\F0246\"}.mdi-office::before{content:\"\\F3C6\"}.mdi-office-building::before{content:\"\\F990\"}.mdi-oil::before{content:\"\\F3C7\"}.mdi-oil-lamp::before{content:\"\\FF36\"}.mdi-oil-level::before{content:\"\\F0075\"}.mdi-oil-temperature::before{content:\"\\F0019\"}.mdi-omega::before{content:\"\\F3C9\"}.mdi-one-up::before{content:\"\\FB89\"}.mdi-onedrive::before{content:\"\\F3CA\"}.mdi-onenote::before{content:\"\\F746\"}.mdi-onepassword::before{content:\"\\F880\"}.mdi-opacity::before{content:\"\\F5CC\"}.mdi-open-in-app::before{content:\"\\F3CB\"}.mdi-open-in-new::before{content:\"\\F3CC\"}.mdi-open-source-initiative::before{content:\"\\FB8A\"}.mdi-openid::before{content:\"\\F3CD\"}.mdi-opera::before{content:\"\\F3CE\"}.mdi-orbit::before{content:\"\\F018\"}.mdi-origin::before{content:\"\\FB2B\"}.mdi-ornament::before{content:\"\\F3CF\"}.mdi-ornament-variant::before{content:\"\\F3D0\"}.mdi-outdoor-lamp::before{content:\"\\F0076\"}.mdi-outlook::before{content:\"\\FCFE\"}.mdi-overscan::before{content:\"\\F0027\"}.mdi-owl::before{content:\"\\F3D2\"}.mdi-pac-man::before{content:\"\\FB8B\"}.mdi-package::before{content:\"\\F3D3\"}.mdi-package-down::before{content:\"\\F3D4\"}.mdi-package-up::before{content:\"\\F3D5\"}.mdi-package-variant::before{content:\"\\F3D6\"}.mdi-package-variant-closed::before{content:\"\\F3D7\"}.mdi-page-first::before{content:\"\\F600\"}.mdi-page-last::before{content:\"\\F601\"}.mdi-page-layout-body::before{content:\"\\F6F9\"}.mdi-page-layout-footer::before{content:\"\\F6FA\"}.mdi-page-layout-header::before{content:\"\\F6FB\"}.mdi-page-layout-header-footer::before{content:\"\\FF9C\"}.mdi-page-layout-sidebar-left::before{content:\"\\F6FC\"}.mdi-page-layout-sidebar-right::before{content:\"\\F6FD\"}.mdi-page-next::before{content:\"\\FB8C\"}.mdi-page-next-outline::before{content:\"\\FB8D\"}.mdi-page-previous::before{content:\"\\FB8E\"}.mdi-page-previous-outline::before{content:\"\\FB8F\"}.mdi-palette::before{content:\"\\F3D8\"}.mdi-palette-advanced::before{content:\"\\F3D9\"}.mdi-palette-outline::before{content:\"\\FE6C\"}.mdi-palette-swatch::before{content:\"\\F8B4\"}.mdi-palm-tree::before{content:\"\\F0077\"}.mdi-pan::before{content:\"\\FB90\"}.mdi-pan-bottom-left::before{content:\"\\FB91\"}.mdi-pan-bottom-right::before{content:\"\\FB92\"}.mdi-pan-down::before{content:\"\\FB93\"}.mdi-pan-horizontal::before{content:\"\\FB94\"}.mdi-pan-left::before{content:\"\\FB95\"}.mdi-pan-right::before{content:\"\\FB96\"}.mdi-pan-top-left::before{content:\"\\FB97\"}.mdi-pan-top-right::before{content:\"\\FB98\"}.mdi-pan-up::before{content:\"\\FB99\"}.mdi-pan-vertical::before{content:\"\\FB9A\"}.mdi-panda::before{content:\"\\F3DA\"}.mdi-pandora::before{content:\"\\F3DB\"}.mdi-panorama::before{content:\"\\F3DC\"}.mdi-panorama-fisheye::before{content:\"\\F3DD\"}.mdi-panorama-horizontal::before{content:\"\\F3DE\"}.mdi-panorama-vertical::before{content:\"\\F3DF\"}.mdi-panorama-wide-angle::before{content:\"\\F3E0\"}.mdi-paper-cut-vertical::before{content:\"\\F3E1\"}.mdi-paper-roll::before{content:\"\\F0182\"}.mdi-paper-roll-outline::before{content:\"\\F0183\"}.mdi-paperclip::before{content:\"\\F3E2\"}.mdi-parachute::before{content:\"\\FC90\"}.mdi-parachute-outline::before{content:\"\\FC91\"}.mdi-parking::before{content:\"\\F3E3\"}.mdi-party-popper::before{content:\"\\F0078\"}.mdi-passport::before{content:\"\\F7E2\"}.mdi-passport-biometric::before{content:\"\\FDBD\"}.mdi-pasta::before{content:\"\\F018B\"}.mdi-patio-heater::before{content:\"\\FF9D\"}.mdi-patreon::before{content:\"\\F881\"}.mdi-pause::before{content:\"\\F3E4\"}.mdi-pause-circle::before{content:\"\\F3E5\"}.mdi-pause-circle-outline::before{content:\"\\F3E6\"}.mdi-pause-octagon::before{content:\"\\F3E7\"}.mdi-pause-octagon-outline::before{content:\"\\F3E8\"}.mdi-paw::before{content:\"\\F3E9\"}.mdi-paw-off::before{content:\"\\F657\"}.mdi-paypal::before{content:\"\\F882\"}.mdi-pdf-box::before{content:\"\\FE39\"}.mdi-peace::before{content:\"\\F883\"}.mdi-peanut::before{content:\"\\F001E\"}.mdi-peanut-off::before{content:\"\\F001F\"}.mdi-peanut-off-outline::before{content:\"\\F0021\"}.mdi-peanut-outline::before{content:\"\\F0020\"}.mdi-pen::before{content:\"\\F3EA\"}.mdi-pen-lock::before{content:\"\\FDBE\"}.mdi-pen-minus::before{content:\"\\FDBF\"}.mdi-pen-off::before{content:\"\\FDC0\"}.mdi-pen-plus::before{content:\"\\FDC1\"}.mdi-pen-remove::before{content:\"\\FDC2\"}.mdi-pencil::before{content:\"\\F3EB\"}.mdi-pencil-box::before{content:\"\\F3EC\"}.mdi-pencil-box-multiple::before{content:\"\\F016F\"}.mdi-pencil-box-multiple-outline::before{content:\"\\F0170\"}.mdi-pencil-box-outline::before{content:\"\\F3ED\"}.mdi-pencil-circle::before{content:\"\\F6FE\"}.mdi-pencil-circle-outline::before{content:\"\\F775\"}.mdi-pencil-lock::before{content:\"\\F3EE\"}.mdi-pencil-lock-outline::before{content:\"\\FDC3\"}.mdi-pencil-minus::before{content:\"\\FDC4\"}.mdi-pencil-minus-outline::before{content:\"\\FDC5\"}.mdi-pencil-off::before{content:\"\\F3EF\"}.mdi-pencil-off-outline::before{content:\"\\FDC6\"}.mdi-pencil-outline::before{content:\"\\FC92\"}.mdi-pencil-plus::before{content:\"\\FDC7\"}.mdi-pencil-plus-outline::before{content:\"\\FDC8\"}.mdi-pencil-remove::before{content:\"\\FDC9\"}.mdi-pencil-remove-outline::before{content:\"\\FDCA\"}.mdi-penguin::before{content:\"\\FEDD\"}.mdi-pentagon::before{content:\"\\F6FF\"}.mdi-pentagon-outline::before{content:\"\\F700\"}.mdi-percent::before{content:\"\\F3F0\"}.mdi-periodic-table::before{content:\"\\F8B5\"}.mdi-periodic-table-co2::before{content:\"\\F7E3\"}.mdi-periscope::before{content:\"\\F747\"}.mdi-perspective-less::before{content:\"\\FCFF\"}.mdi-perspective-more::before{content:\"\\FD00\"}.mdi-pharmacy::before{content:\"\\F3F1\"}.mdi-phone::before{content:\"\\F3F2\"}.mdi-phone-alert::before{content:\"\\FF37\"}.mdi-phone-alert-outline::before{content:\"\\F01B9\"}.mdi-phone-bluetooth::before{content:\"\\F3F3\"}.mdi-phone-bluetooth-outline::before{content:\"\\F01BA\"}.mdi-phone-cancel::before{content:\"\\F00E7\"}.mdi-phone-cancel-outline::before{content:\"\\F01BB\"}.mdi-phone-check::before{content:\"\\F01D4\"}.mdi-phone-check-outline::before{content:\"\\F01D5\"}.mdi-phone-classic::before{content:\"\\F602\"}.mdi-phone-forward::before{content:\"\\F3F4\"}.mdi-phone-forward-outline::before{content:\"\\F01BC\"}.mdi-phone-hangup::before{content:\"\\F3F5\"}.mdi-phone-hangup-outline::before{content:\"\\F01BD\"}.mdi-phone-in-talk::before{content:\"\\F3F6\"}.mdi-phone-in-talk-outline::before{content:\"\\F01AD\"}.mdi-phone-incoming::before{content:\"\\F3F7\"}.mdi-phone-incoming-outline::before{content:\"\\F01BE\"}.mdi-phone-lock::before{content:\"\\F3F8\"}.mdi-phone-lock-outline::before{content:\"\\F01BF\"}.mdi-phone-log::before{content:\"\\F3F9\"}.mdi-phone-log-outline::before{content:\"\\F01C0\"}.mdi-phone-message::before{content:\"\\F01C1\"}.mdi-phone-message-outline::before{content:\"\\F01C2\"}.mdi-phone-minus::before{content:\"\\F658\"}.mdi-phone-minus-outline::before{content:\"\\F01C3\"}.mdi-phone-missed::before{content:\"\\F3FA\"}.mdi-phone-missed-outline::before{content:\"\\F01D0\"}.mdi-phone-off::before{content:\"\\FDCB\"}.mdi-phone-off-outline::before{content:\"\\F01D1\"}.mdi-phone-outgoing::before{content:\"\\F3FB\"}.mdi-phone-outgoing-outline::before{content:\"\\F01C4\"}.mdi-phone-outline::before{content:\"\\FDCC\"}.mdi-phone-paused::before{content:\"\\F3FC\"}.mdi-phone-paused-outline::before{content:\"\\F01C5\"}.mdi-phone-plus::before{content:\"\\F659\"}.mdi-phone-plus-outline::before{content:\"\\F01C6\"}.mdi-phone-return::before{content:\"\\F82E\"}.mdi-phone-return-outline::before{content:\"\\F01C7\"}.mdi-phone-ring::before{content:\"\\F01D6\"}.mdi-phone-ring-outline::before{content:\"\\F01D7\"}.mdi-phone-rotate-landscape::before{content:\"\\F884\"}.mdi-phone-rotate-portrait::before{content:\"\\F885\"}.mdi-phone-settings::before{content:\"\\F3FD\"}.mdi-phone-settings-outline::before{content:\"\\F01C8\"}.mdi-phone-voip::before{content:\"\\F3FE\"}.mdi-pi::before{content:\"\\F3FF\"}.mdi-pi-box::before{content:\"\\F400\"}.mdi-pi-hole::before{content:\"\\FDCD\"}.mdi-piano::before{content:\"\\F67C\"}.mdi-pickaxe::before{content:\"\\F8B6\"}.mdi-picture-in-picture-bottom-right::before{content:\"\\FE3A\"}.mdi-picture-in-picture-bottom-right-outline::before{content:\"\\FE3B\"}.mdi-picture-in-picture-top-right::before{content:\"\\FE3C\"}.mdi-picture-in-picture-top-right-outline::before{content:\"\\FE3D\"}.mdi-pier::before{content:\"\\F886\"}.mdi-pier-crane::before{content:\"\\F887\"}.mdi-pig::before{content:\"\\F401\"}.mdi-pig-variant::before{content:\"\\F0028\"}.mdi-piggy-bank::before{content:\"\\F0029\"}.mdi-pill::before{content:\"\\F402\"}.mdi-pillar::before{content:\"\\F701\"}.mdi-pin::before{content:\"\\F403\"}.mdi-pin-off::before{content:\"\\F404\"}.mdi-pin-off-outline::before{content:\"\\F92F\"}.mdi-pin-outline::before{content:\"\\F930\"}.mdi-pine-tree::before{content:\"\\F405\"}.mdi-pine-tree-box::before{content:\"\\F406\"}.mdi-pinterest::before{content:\"\\F407\"}.mdi-pinterest-box::before{content:\"\\F408\"}.mdi-pinwheel::before{content:\"\\FAD4\"}.mdi-pinwheel-outline::before{content:\"\\FAD5\"}.mdi-pipe::before{content:\"\\F7E4\"}.mdi-pipe-disconnected::before{content:\"\\F7E5\"}.mdi-pipe-leak::before{content:\"\\F888\"}.mdi-pirate::before{content:\"\\FA07\"}.mdi-pistol::before{content:\"\\F702\"}.mdi-piston::before{content:\"\\F889\"}.mdi-pizza::before{content:\"\\F409\"}.mdi-play::before{content:\"\\F40A\"}.mdi-play-box-outline::before{content:\"\\F40B\"}.mdi-play-circle::before{content:\"\\F40C\"}.mdi-play-circle-outline::before{content:\"\\F40D\"}.mdi-play-network::before{content:\"\\F88A\"}.mdi-play-network-outline::before{content:\"\\FC93\"}.mdi-play-outline::before{content:\"\\FF38\"}.mdi-play-pause::before{content:\"\\F40E\"}.mdi-play-protected-content::before{content:\"\\F40F\"}.mdi-play-speed::before{content:\"\\F8FE\"}.mdi-playlist-check::before{content:\"\\F5C7\"}.mdi-playlist-edit::before{content:\"\\F8FF\"}.mdi-playlist-minus::before{content:\"\\F410\"}.mdi-playlist-music::before{content:\"\\FC94\"}.mdi-playlist-music-outline::before{content:\"\\FC95\"}.mdi-playlist-play::before{content:\"\\F411\"}.mdi-playlist-plus::before{content:\"\\F412\"}.mdi-playlist-remove::before{content:\"\\F413\"}.mdi-playlist-star::before{content:\"\\FDCE\"}.mdi-playstation::before{content:\"\\F414\"}.mdi-plex::before{content:\"\\F6B9\"}.mdi-plus::before{content:\"\\F415\"}.mdi-plus-box::before{content:\"\\F416\"}.mdi-plus-box-multiple::before{content:\"\\F334\"}.mdi-plus-box-multiple-outline::before{content:\"\\F016E\"}.mdi-plus-box-outline::before{content:\"\\F703\"}.mdi-plus-circle::before{content:\"\\F417\"}.mdi-plus-circle-multiple-outline::before{content:\"\\F418\"}.mdi-plus-circle-outline::before{content:\"\\F419\"}.mdi-plus-minus::before{content:\"\\F991\"}.mdi-plus-minus-box::before{content:\"\\F992\"}.mdi-plus-network::before{content:\"\\F41A\"}.mdi-plus-network-outline::before{content:\"\\FC96\"}.mdi-plus-one::before{content:\"\\F41B\"}.mdi-plus-outline::before{content:\"\\F704\"}.mdi-plus-thick::before{content:\"\\F0217\"}.mdi-pocket::before{content:\"\\F41C\"}.mdi-podcast::before{content:\"\\F993\"}.mdi-podium::before{content:\"\\FD01\"}.mdi-podium-bronze::before{content:\"\\FD02\"}.mdi-podium-gold::before{content:\"\\FD03\"}.mdi-podium-silver::before{content:\"\\FD04\"}.mdi-point-of-sale::before{content:\"\\FD6E\"}.mdi-pokeball::before{content:\"\\F41D\"}.mdi-pokemon-go::before{content:\"\\FA08\"}.mdi-poker-chip::before{content:\"\\F82F\"}.mdi-polaroid::before{content:\"\\F41E\"}.mdi-police-badge::before{content:\"\\F0192\"}.mdi-police-badge-outline::before{content:\"\\F0193\"}.mdi-poll::before{content:\"\\F41F\"}.mdi-poll-box::before{content:\"\\F420\"}.mdi-polymer::before{content:\"\\F421\"}.mdi-pool::before{content:\"\\F606\"}.mdi-popcorn::before{content:\"\\F422\"}.mdi-post::before{content:\"\\F002A\"}.mdi-post-outline::before{content:\"\\F002B\"}.mdi-postage-stamp::before{content:\"\\FC97\"}.mdi-pot::before{content:\"\\F65A\"}.mdi-pot-mix::before{content:\"\\F65B\"}.mdi-pound::before{content:\"\\F423\"}.mdi-pound-box::before{content:\"\\F424\"}.mdi-pound-box-outline::before{content:\"\\F01AA\"}.mdi-power::before{content:\"\\F425\"}.mdi-power-cycle::before{content:\"\\F900\"}.mdi-power-off::before{content:\"\\F901\"}.mdi-power-on::before{content:\"\\F902\"}.mdi-power-plug::before{content:\"\\F6A4\"}.mdi-power-plug-off::before{content:\"\\F6A5\"}.mdi-power-settings::before{content:\"\\F426\"}.mdi-power-sleep::before{content:\"\\F903\"}.mdi-power-socket::before{content:\"\\F427\"}.mdi-power-socket-au::before{content:\"\\F904\"}.mdi-power-socket-de::before{content:\"\\F0132\"}.mdi-power-socket-eu::before{content:\"\\F7E6\"}.mdi-power-socket-fr::before{content:\"\\F0133\"}.mdi-power-socket-jp::before{content:\"\\F0134\"}.mdi-power-socket-uk::before{content:\"\\F7E7\"}.mdi-power-socket-us::before{content:\"\\F7E8\"}.mdi-power-standby::before{content:\"\\F905\"}.mdi-powershell::before{content:\"\\FA09\"}.mdi-prescription::before{content:\"\\F705\"}.mdi-presentation::before{content:\"\\F428\"}.mdi-presentation-play::before{content:\"\\F429\"}.mdi-printer::before{content:\"\\F42A\"}.mdi-printer-3d::before{content:\"\\F42B\"}.mdi-printer-3d-nozzle::before{content:\"\\FE3E\"}.mdi-printer-3d-nozzle-alert::before{content:\"\\F01EB\"}.mdi-printer-3d-nozzle-alert-outline::before{content:\"\\F01EC\"}.mdi-printer-3d-nozzle-outline::before{content:\"\\FE3F\"}.mdi-printer-alert::before{content:\"\\F42C\"}.mdi-printer-check::before{content:\"\\F0171\"}.mdi-printer-off::before{content:\"\\FE40\"}.mdi-printer-pos::before{content:\"\\F0079\"}.mdi-printer-settings::before{content:\"\\F706\"}.mdi-printer-wireless::before{content:\"\\FA0A\"}.mdi-priority-high::before{content:\"\\F603\"}.mdi-priority-low::before{content:\"\\F604\"}.mdi-professional-hexagon::before{content:\"\\F42D\"}.mdi-progress-alert::before{content:\"\\FC98\"}.mdi-progress-check::before{content:\"\\F994\"}.mdi-progress-clock::before{content:\"\\F995\"}.mdi-progress-close::before{content:\"\\F0135\"}.mdi-progress-download::before{content:\"\\F996\"}.mdi-progress-upload::before{content:\"\\F997\"}.mdi-progress-wrench::before{content:\"\\FC99\"}.mdi-projector::before{content:\"\\F42E\"}.mdi-projector-screen::before{content:\"\\F42F\"}.mdi-protocol::before{content:\"\\FFF9\"}.mdi-publish::before{content:\"\\F6A6\"}.mdi-pulse::before{content:\"\\F430\"}.mdi-pumpkin::before{content:\"\\FB9B\"}.mdi-purse::before{content:\"\\FF39\"}.mdi-purse-outline::before{content:\"\\FF3A\"}.mdi-puzzle::before{content:\"\\F431\"}.mdi-puzzle-outline::before{content:\"\\FA65\"}.mdi-qi::before{content:\"\\F998\"}.mdi-qqchat::before{content:\"\\F605\"}.mdi-qrcode::before{content:\"\\F432\"}.mdi-qrcode-edit::before{content:\"\\F8B7\"}.mdi-qrcode-minus::before{content:\"\\F01B7\"}.mdi-qrcode-plus::before{content:\"\\F01B6\"}.mdi-qrcode-remove::before{content:\"\\F01B8\"}.mdi-qrcode-scan::before{content:\"\\F433\"}.mdi-quadcopter::before{content:\"\\F434\"}.mdi-quality-high::before{content:\"\\F435\"}.mdi-quality-low::before{content:\"\\FA0B\"}.mdi-quality-medium::before{content:\"\\FA0C\"}.mdi-quicktime::before{content:\"\\F436\"}.mdi-quora::before{content:\"\\FD05\"}.mdi-rabbit::before{content:\"\\F906\"}.mdi-racing-helmet::before{content:\"\\FD6F\"}.mdi-racquetball::before{content:\"\\FD70\"}.mdi-radar::before{content:\"\\F437\"}.mdi-radiator::before{content:\"\\F438\"}.mdi-radiator-disabled::before{content:\"\\FAD6\"}.mdi-radiator-off::before{content:\"\\FAD7\"}.mdi-radio::before{content:\"\\F439\"}.mdi-radio-am::before{content:\"\\FC9A\"}.mdi-radio-fm::before{content:\"\\FC9B\"}.mdi-radio-handheld::before{content:\"\\F43A\"}.mdi-radio-off::before{content:\"\\F0247\"}.mdi-radio-tower::before{content:\"\\F43B\"}.mdi-radioactive::before{content:\"\\F43C\"}.mdi-radioactive-off::before{content:\"\\FEDE\"}.mdi-radiobox-blank::before{content:\"\\F43D\"}.mdi-radiobox-marked::before{content:\"\\F43E\"}.mdi-radius::before{content:\"\\FC9C\"}.mdi-radius-outline::before{content:\"\\FC9D\"}.mdi-railroad-light::before{content:\"\\FF3B\"}.mdi-raspberry-pi::before{content:\"\\F43F\"}.mdi-ray-end::before{content:\"\\F440\"}.mdi-ray-end-arrow::before{content:\"\\F441\"}.mdi-ray-start::before{content:\"\\F442\"}.mdi-ray-start-arrow::before{content:\"\\F443\"}.mdi-ray-start-end::before{content:\"\\F444\"}.mdi-ray-vertex::before{content:\"\\F445\"}.mdi-react::before{content:\"\\F707\"}.mdi-read::before{content:\"\\F447\"}.mdi-receipt::before{content:\"\\F449\"}.mdi-record::before{content:\"\\F44A\"}.mdi-record-circle::before{content:\"\\FEDF\"}.mdi-record-circle-outline::before{content:\"\\FEE0\"}.mdi-record-player::before{content:\"\\F999\"}.mdi-record-rec::before{content:\"\\F44B\"}.mdi-rectangle::before{content:\"\\FE41\"}.mdi-rectangle-outline::before{content:\"\\FE42\"}.mdi-recycle::before{content:\"\\F44C\"}.mdi-reddit::before{content:\"\\F44D\"}.mdi-redhat::before{content:\"\\F0146\"}.mdi-redo::before{content:\"\\F44E\"}.mdi-redo-variant::before{content:\"\\F44F\"}.mdi-reflect-horizontal::before{content:\"\\FA0D\"}.mdi-reflect-vertical::before{content:\"\\FA0E\"}.mdi-refresh::before{content:\"\\F450\"}.mdi-regex::before{content:\"\\F451\"}.mdi-registered-trademark::before{content:\"\\FA66\"}.mdi-relative-scale::before{content:\"\\F452\"}.mdi-reload::before{content:\"\\F453\"}.mdi-reload-alert::before{content:\"\\F0136\"}.mdi-reminder::before{content:\"\\F88B\"}.mdi-remote::before{content:\"\\F454\"}.mdi-remote-desktop::before{content:\"\\F8B8\"}.mdi-remote-off::before{content:\"\\FEE1\"}.mdi-remote-tv::before{content:\"\\FEE2\"}.mdi-remote-tv-off::before{content:\"\\FEE3\"}.mdi-rename-box::before{content:\"\\F455\"}.mdi-reorder-horizontal::before{content:\"\\F687\"}.mdi-reorder-vertical::before{content:\"\\F688\"}.mdi-repeat::before{content:\"\\F456\"}.mdi-repeat-off::before{content:\"\\F457\"}.mdi-repeat-once::before{content:\"\\F458\"}.mdi-replay::before{content:\"\\F459\"}.mdi-reply::before{content:\"\\F45A\"}.mdi-reply-all::before{content:\"\\F45B\"}.mdi-reply-all-outline::before{content:\"\\FF3C\"}.mdi-reply-circle::before{content:\"\\F01D9\"}.mdi-reply-outline::before{content:\"\\FF3D\"}.mdi-reproduction::before{content:\"\\F45C\"}.mdi-resistor::before{content:\"\\FB1F\"}.mdi-resistor-nodes::before{content:\"\\FB20\"}.mdi-resize::before{content:\"\\FA67\"}.mdi-resize-bottom-right::before{content:\"\\F45D\"}.mdi-responsive::before{content:\"\\F45E\"}.mdi-restart::before{content:\"\\F708\"}.mdi-restart-alert::before{content:\"\\F0137\"}.mdi-restart-off::before{content:\"\\FD71\"}.mdi-restore::before{content:\"\\F99A\"}.mdi-restore-alert::before{content:\"\\F0138\"}.mdi-rewind::before{content:\"\\F45F\"}.mdi-rewind-10::before{content:\"\\FD06\"}.mdi-rewind-30::before{content:\"\\FD72\"}.mdi-rewind-5::before{content:\"\\F0224\"}.mdi-rewind-outline::before{content:\"\\F709\"}.mdi-rhombus::before{content:\"\\F70A\"}.mdi-rhombus-medium::before{content:\"\\FA0F\"}.mdi-rhombus-outline::before{content:\"\\F70B\"}.mdi-rhombus-split::before{content:\"\\FA10\"}.mdi-ribbon::before{content:\"\\F460\"}.mdi-rice::before{content:\"\\F7E9\"}.mdi-ring::before{content:\"\\F7EA\"}.mdi-rivet::before{content:\"\\FE43\"}.mdi-road::before{content:\"\\F461\"}.mdi-road-variant::before{content:\"\\F462\"}.mdi-robber::before{content:\"\\F007A\"}.mdi-robot::before{content:\"\\F6A8\"}.mdi-robot-industrial::before{content:\"\\FB21\"}.mdi-robot-mower::before{content:\"\\F0222\"}.mdi-robot-mower-outline::before{content:\"\\F021E\"}.mdi-robot-vacuum::before{content:\"\\F70C\"}.mdi-robot-vacuum-variant::before{content:\"\\F907\"}.mdi-rocket::before{content:\"\\F463\"}.mdi-roller-skate::before{content:\"\\FD07\"}.mdi-rollerblade::before{content:\"\\FD08\"}.mdi-rollupjs::before{content:\"\\FB9C\"}.mdi-roman-numeral-1::before{content:\"\\F00B3\"}.mdi-roman-numeral-10::before{content:\"\\F00BC\"}.mdi-roman-numeral-2::before{content:\"\\F00B4\"}.mdi-roman-numeral-3::before{content:\"\\F00B5\"}.mdi-roman-numeral-4::before{content:\"\\F00B6\"}.mdi-roman-numeral-5::before{content:\"\\F00B7\"}.mdi-roman-numeral-6::before{content:\"\\F00B8\"}.mdi-roman-numeral-7::before{content:\"\\F00B9\"}.mdi-roman-numeral-8::before{content:\"\\F00BA\"}.mdi-roman-numeral-9::before{content:\"\\F00BB\"}.mdi-room-service::before{content:\"\\F88C\"}.mdi-room-service-outline::before{content:\"\\FD73\"}.mdi-rotate-3d::before{content:\"\\FEE4\"}.mdi-rotate-3d-variant::before{content:\"\\F464\"}.mdi-rotate-left::before{content:\"\\F465\"}.mdi-rotate-left-variant::before{content:\"\\F466\"}.mdi-rotate-orbit::before{content:\"\\FD74\"}.mdi-rotate-right::before{content:\"\\F467\"}.mdi-rotate-right-variant::before{content:\"\\F468\"}.mdi-rounded-corner::before{content:\"\\F607\"}.mdi-router::before{content:\"\\F020D\"}.mdi-router-wireless::before{content:\"\\F469\"}.mdi-router-wireless-settings::before{content:\"\\FA68\"}.mdi-routes::before{content:\"\\F46A\"}.mdi-routes-clock::before{content:\"\\F007B\"}.mdi-rowing::before{content:\"\\F608\"}.mdi-rss::before{content:\"\\F46B\"}.mdi-rss-box::before{content:\"\\F46C\"}.mdi-rss-off::before{content:\"\\FF3E\"}.mdi-ruby::before{content:\"\\FD09\"}.mdi-rugby::before{content:\"\\FD75\"}.mdi-ruler::before{content:\"\\F46D\"}.mdi-ruler-square::before{content:\"\\FC9E\"}.mdi-ruler-square-compass::before{content:\"\\FEDB\"}.mdi-run::before{content:\"\\F70D\"}.mdi-run-fast::before{content:\"\\F46E\"}.mdi-rv-truck::before{content:\"\\F01FF\"}.mdi-sack::before{content:\"\\FD0A\"}.mdi-sack-percent::before{content:\"\\FD0B\"}.mdi-safe::before{content:\"\\FA69\"}.mdi-safety-goggles::before{content:\"\\FD0C\"}.mdi-sailing::before{content:\"\\FEE5\"}.mdi-sale::before{content:\"\\F46F\"}.mdi-salesforce::before{content:\"\\F88D\"}.mdi-sass::before{content:\"\\F7EB\"}.mdi-satellite::before{content:\"\\F470\"}.mdi-satellite-uplink::before{content:\"\\F908\"}.mdi-satellite-variant::before{content:\"\\F471\"}.mdi-sausage::before{content:\"\\F8B9\"}.mdi-saw-blade::before{content:\"\\FE44\"}.mdi-saxophone::before{content:\"\\F609\"}.mdi-scale::before{content:\"\\F472\"}.mdi-scale-balance::before{content:\"\\F5D1\"}.mdi-scale-bathroom::before{content:\"\\F473\"}.mdi-scale-off::before{content:\"\\F007C\"}.mdi-scanner::before{content:\"\\F6AA\"}.mdi-scanner-off::before{content:\"\\F909\"}.mdi-scatter-plot::before{content:\"\\FEE6\"}.mdi-scatter-plot-outline::before{content:\"\\FEE7\"}.mdi-school::before{content:\"\\F474\"}.mdi-school-outline::before{content:\"\\F01AB\"}.mdi-scissors-cutting::before{content:\"\\FA6A\"}.mdi-scooter::before{content:\"\\F0214\"}.mdi-screen-rotation::before{content:\"\\F475\"}.mdi-screen-rotation-lock::before{content:\"\\F476\"}.mdi-screw-flat-top::before{content:\"\\FDCF\"}.mdi-screw-lag::before{content:\"\\FE54\"}.mdi-screw-machine-flat-top::before{content:\"\\FE55\"}.mdi-screw-machine-round-top::before{content:\"\\FE56\"}.mdi-screw-round-top::before{content:\"\\FE57\"}.mdi-screwdriver::before{content:\"\\F477\"}.mdi-script::before{content:\"\\FB9D\"}.mdi-script-outline::before{content:\"\\F478\"}.mdi-script-text::before{content:\"\\FB9E\"}.mdi-script-text-outline::before{content:\"\\FB9F\"}.mdi-sd::before{content:\"\\F479\"}.mdi-seal::before{content:\"\\F47A\"}.mdi-seal-variant::before{content:\"\\FFFA\"}.mdi-search-web::before{content:\"\\F70E\"}.mdi-seat::before{content:\"\\FC9F\"}.mdi-seat-flat::before{content:\"\\F47B\"}.mdi-seat-flat-angled::before{content:\"\\F47C\"}.mdi-seat-individual-suite::before{content:\"\\F47D\"}.mdi-seat-legroom-extra::before{content:\"\\F47E\"}.mdi-seat-legroom-normal::before{content:\"\\F47F\"}.mdi-seat-legroom-reduced::before{content:\"\\F480\"}.mdi-seat-outline::before{content:\"\\FCA0\"}.mdi-seat-passenger::before{content:\"\\F0274\"}.mdi-seat-recline-extra::before{content:\"\\F481\"}.mdi-seat-recline-normal::before{content:\"\\F482\"}.mdi-seatbelt::before{content:\"\\FCA1\"}.mdi-security::before{content:\"\\F483\"}.mdi-security-network::before{content:\"\\F484\"}.mdi-seed::before{content:\"\\FE45\"}.mdi-seed-outline::before{content:\"\\FE46\"}.mdi-segment::before{content:\"\\FEE8\"}.mdi-select::before{content:\"\\F485\"}.mdi-select-all::before{content:\"\\F486\"}.mdi-select-color::before{content:\"\\FD0D\"}.mdi-select-compare::before{content:\"\\FAD8\"}.mdi-select-drag::before{content:\"\\FA6B\"}.mdi-select-group::before{content:\"\\FF9F\"}.mdi-select-inverse::before{content:\"\\F487\"}.mdi-select-off::before{content:\"\\F488\"}.mdi-select-place::before{content:\"\\FFFB\"}.mdi-select-search::before{content:\"\\F022F\"}.mdi-selection::before{content:\"\\F489\"}.mdi-selection-drag::before{content:\"\\FA6C\"}.mdi-selection-ellipse::before{content:\"\\FD0E\"}.mdi-selection-ellipse-arrow-inside::before{content:\"\\FF3F\"}.mdi-selection-off::before{content:\"\\F776\"}.mdi-selection-search::before{content:\"\\F0230\"}.mdi-send::before{content:\"\\F48A\"}.mdi-send-check::before{content:\"\\F018C\"}.mdi-send-check-outline::before{content:\"\\F018D\"}.mdi-send-circle::before{content:\"\\FE58\"}.mdi-send-circle-outline::before{content:\"\\FE59\"}.mdi-send-clock::before{content:\"\\F018E\"}.mdi-send-clock-outline::before{content:\"\\F018F\"}.mdi-send-lock::before{content:\"\\F7EC\"}.mdi-send-lock-outline::before{content:\"\\F0191\"}.mdi-send-outline::before{content:\"\\F0190\"}.mdi-serial-port::before{content:\"\\F65C\"}.mdi-server::before{content:\"\\F48B\"}.mdi-server-minus::before{content:\"\\F48C\"}.mdi-server-network::before{content:\"\\F48D\"}.mdi-server-network-off::before{content:\"\\F48E\"}.mdi-server-off::before{content:\"\\F48F\"}.mdi-server-plus::before{content:\"\\F490\"}.mdi-server-remove::before{content:\"\\F491\"}.mdi-server-security::before{content:\"\\F492\"}.mdi-set-all::before{content:\"\\F777\"}.mdi-set-center::before{content:\"\\F778\"}.mdi-set-center-right::before{content:\"\\F779\"}.mdi-set-left::before{content:\"\\F77A\"}.mdi-set-left-center::before{content:\"\\F77B\"}.mdi-set-left-right::before{content:\"\\F77C\"}.mdi-set-none::before{content:\"\\F77D\"}.mdi-set-right::before{content:\"\\F77E\"}.mdi-set-top-box::before{content:\"\\F99E\"}.mdi-settings::before{content:\"\\F493\"}.mdi-settings-box::before{content:\"\\F494\"}.mdi-settings-helper::before{content:\"\\FA6D\"}.mdi-settings-outline::before{content:\"\\F8BA\"}.mdi-settings-transfer::before{content:\"\\F007D\"}.mdi-settings-transfer-outline::before{content:\"\\F007E\"}.mdi-shaker::before{content:\"\\F0139\"}.mdi-shaker-outline::before{content:\"\\F013A\"}.mdi-shape::before{content:\"\\F830\"}.mdi-shape-circle-plus::before{content:\"\\F65D\"}.mdi-shape-outline::before{content:\"\\F831\"}.mdi-shape-oval-plus::before{content:\"\\F0225\"}.mdi-shape-plus::before{content:\"\\F495\"}.mdi-shape-polygon-plus::before{content:\"\\F65E\"}.mdi-shape-rectangle-plus::before{content:\"\\F65F\"}.mdi-shape-square-plus::before{content:\"\\F660\"}.mdi-share::before{content:\"\\F496\"}.mdi-share-all::before{content:\"\\F021F\"}.mdi-share-all-outline::before{content:\"\\F0220\"}.mdi-share-circle::before{content:\"\\F01D8\"}.mdi-share-off::before{content:\"\\FF40\"}.mdi-share-off-outline::before{content:\"\\FF41\"}.mdi-share-outline::before{content:\"\\F931\"}.mdi-share-variant::before{content:\"\\F497\"}.mdi-sheep::before{content:\"\\FCA2\"}.mdi-shield::before{content:\"\\F498\"}.mdi-shield-account::before{content:\"\\F88E\"}.mdi-shield-account-outline::before{content:\"\\FA11\"}.mdi-shield-airplane::before{content:\"\\F6BA\"}.mdi-shield-airplane-outline::before{content:\"\\FCA3\"}.mdi-shield-alert::before{content:\"\\FEE9\"}.mdi-shield-alert-outline::before{content:\"\\FEEA\"}.mdi-shield-car::before{content:\"\\FFA0\"}.mdi-shield-check::before{content:\"\\F565\"}.mdi-shield-check-outline::before{content:\"\\FCA4\"}.mdi-shield-cross::before{content:\"\\FCA5\"}.mdi-shield-cross-outline::before{content:\"\\FCA6\"}.mdi-shield-edit::before{content:\"\\F01CB\"}.mdi-shield-edit-outline::before{content:\"\\F01CC\"}.mdi-shield-half-full::before{content:\"\\F77F\"}.mdi-shield-home::before{content:\"\\F689\"}.mdi-shield-home-outline::before{content:\"\\FCA7\"}.mdi-shield-key::before{content:\"\\FBA0\"}.mdi-shield-key-outline::before{content:\"\\FBA1\"}.mdi-shield-link-variant::before{content:\"\\FD0F\"}.mdi-shield-link-variant-outline::before{content:\"\\FD10\"}.mdi-shield-lock::before{content:\"\\F99C\"}.mdi-shield-lock-outline::before{content:\"\\FCA8\"}.mdi-shield-off::before{content:\"\\F99D\"}.mdi-shield-off-outline::before{content:\"\\F99B\"}.mdi-shield-outline::before{content:\"\\F499\"}.mdi-shield-plus::before{content:\"\\FAD9\"}.mdi-shield-plus-outline::before{content:\"\\FADA\"}.mdi-shield-refresh::before{content:\"\\F01CD\"}.mdi-shield-refresh-outline::before{content:\"\\F01CE\"}.mdi-shield-remove::before{content:\"\\FADB\"}.mdi-shield-remove-outline::before{content:\"\\FADC\"}.mdi-shield-search::before{content:\"\\FD76\"}.mdi-shield-star::before{content:\"\\F0166\"}.mdi-shield-star-outline::before{content:\"\\F0167\"}.mdi-shield-sun::before{content:\"\\F007F\"}.mdi-shield-sun-outline::before{content:\"\\F0080\"}.mdi-ship-wheel::before{content:\"\\F832\"}.mdi-shoe-formal::before{content:\"\\FB22\"}.mdi-shoe-heel::before{content:\"\\FB23\"}.mdi-shoe-print::before{content:\"\\FE5A\"}.mdi-shopify::before{content:\"\\FADD\"}.mdi-shopping::before{content:\"\\F49A\"}.mdi-shopping-music::before{content:\"\\F49B\"}.mdi-shopping-outline::before{content:\"\\F0200\"}.mdi-shopping-search::before{content:\"\\FFA1\"}.mdi-shovel::before{content:\"\\F70F\"}.mdi-shovel-off::before{content:\"\\F710\"}.mdi-shower::before{content:\"\\F99F\"}.mdi-shower-head::before{content:\"\\F9A0\"}.mdi-shredder::before{content:\"\\F49C\"}.mdi-shuffle::before{content:\"\\F49D\"}.mdi-shuffle-disabled::before{content:\"\\F49E\"}.mdi-shuffle-variant::before{content:\"\\F49F\"}.mdi-sigma::before{content:\"\\F4A0\"}.mdi-sigma-lower::before{content:\"\\F62B\"}.mdi-sign-caution::before{content:\"\\F4A1\"}.mdi-sign-direction::before{content:\"\\F780\"}.mdi-sign-direction-minus::before{content:\"\\F0022\"}.mdi-sign-direction-plus::before{content:\"\\FFFD\"}.mdi-sign-direction-remove::before{content:\"\\FFFE\"}.mdi-sign-real-estate::before{content:\"\\F0143\"}.mdi-sign-text::before{content:\"\\F781\"}.mdi-signal::before{content:\"\\F4A2\"}.mdi-signal-2g::before{content:\"\\F711\"}.mdi-signal-3g::before{content:\"\\F712\"}.mdi-signal-4g::before{content:\"\\F713\"}.mdi-signal-5g::before{content:\"\\FA6E\"}.mdi-signal-cellular-1::before{content:\"\\F8BB\"}.mdi-signal-cellular-2::before{content:\"\\F8BC\"}.mdi-signal-cellular-3::before{content:\"\\F8BD\"}.mdi-signal-cellular-outline::before{content:\"\\F8BE\"}.mdi-signal-distance-variant::before{content:\"\\FE47\"}.mdi-signal-hspa::before{content:\"\\F714\"}.mdi-signal-hspa-plus::before{content:\"\\F715\"}.mdi-signal-off::before{content:\"\\F782\"}.mdi-signal-variant::before{content:\"\\F60A\"}.mdi-signature::before{content:\"\\FE5B\"}.mdi-signature-freehand::before{content:\"\\FE5C\"}.mdi-signature-image::before{content:\"\\FE5D\"}.mdi-signature-text::before{content:\"\\FE5E\"}.mdi-silo::before{content:\"\\FB24\"}.mdi-silverware::before{content:\"\\F4A3\"}.mdi-silverware-clean::before{content:\"\\FFFF\"}.mdi-silverware-fork::before{content:\"\\F4A4\"}.mdi-silverware-fork-knife::before{content:\"\\FA6F\"}.mdi-silverware-spoon::before{content:\"\\F4A5\"}.mdi-silverware-variant::before{content:\"\\F4A6\"}.mdi-sim::before{content:\"\\F4A7\"}.mdi-sim-alert::before{content:\"\\F4A8\"}.mdi-sim-off::before{content:\"\\F4A9\"}.mdi-sina-weibo::before{content:\"\\FADE\"}.mdi-sitemap::before{content:\"\\F4AA\"}.mdi-skate::before{content:\"\\FD11\"}.mdi-skew-less::before{content:\"\\FD12\"}.mdi-skew-more::before{content:\"\\FD13\"}.mdi-skip-backward::before{content:\"\\F4AB\"}.mdi-skip-backward-outline::before{content:\"\\FF42\"}.mdi-skip-forward::before{content:\"\\F4AC\"}.mdi-skip-forward-outline::before{content:\"\\FF43\"}.mdi-skip-next::before{content:\"\\F4AD\"}.mdi-skip-next-circle::before{content:\"\\F661\"}.mdi-skip-next-circle-outline::before{content:\"\\F662\"}.mdi-skip-next-outline::before{content:\"\\FF44\"}.mdi-skip-previous::before{content:\"\\F4AE\"}.mdi-skip-previous-circle::before{content:\"\\F663\"}.mdi-skip-previous-circle-outline::before{content:\"\\F664\"}.mdi-skip-previous-outline::before{content:\"\\FF45\"}.mdi-skull::before{content:\"\\F68B\"}.mdi-skull-crossbones::before{content:\"\\FBA2\"}.mdi-skull-crossbones-outline::before{content:\"\\FBA3\"}.mdi-skull-outline::before{content:\"\\FBA4\"}.mdi-skype::before{content:\"\\F4AF\"}.mdi-skype-business::before{content:\"\\F4B0\"}.mdi-slack::before{content:\"\\F4B1\"}.mdi-slackware::before{content:\"\\F90A\"}.mdi-slash-forward::before{content:\"\\F0000\"}.mdi-slash-forward-box::before{content:\"\\F0001\"}.mdi-sleep::before{content:\"\\F4B2\"}.mdi-sleep-off::before{content:\"\\F4B3\"}.mdi-slope-downhill::before{content:\"\\FE5F\"}.mdi-slope-uphill::before{content:\"\\FE60\"}.mdi-slot-machine::before{content:\"\\F013F\"}.mdi-slot-machine-outline::before{content:\"\\F0140\"}.mdi-smart-card::before{content:\"\\F00E8\"}.mdi-smart-card-outline::before{content:\"\\F00E9\"}.mdi-smart-card-reader::before{content:\"\\F00EA\"}.mdi-smart-card-reader-outline::before{content:\"\\F00EB\"}.mdi-smog::before{content:\"\\FA70\"}.mdi-smoke-detector::before{content:\"\\F392\"}.mdi-smoking::before{content:\"\\F4B4\"}.mdi-smoking-off::before{content:\"\\F4B5\"}.mdi-snapchat::before{content:\"\\F4B6\"}.mdi-snowflake::before{content:\"\\F716\"}.mdi-snowflake-alert::before{content:\"\\FF46\"}.mdi-snowflake-variant::before{content:\"\\FF47\"}.mdi-snowman::before{content:\"\\F4B7\"}.mdi-soccer::before{content:\"\\F4B8\"}.mdi-soccer-field::before{content:\"\\F833\"}.mdi-sofa::before{content:\"\\F4B9\"}.mdi-solar-panel::before{content:\"\\FD77\"}.mdi-solar-panel-large::before{content:\"\\FD78\"}.mdi-solar-power::before{content:\"\\FA71\"}.mdi-soldering-iron::before{content:\"\\F00BD\"}.mdi-solid::before{content:\"\\F68C\"}.mdi-sort::before{content:\"\\F4BA\"}.mdi-sort-alphabetical::before{content:\"\\F4BB\"}.mdi-sort-alphabetical-ascending::before{content:\"\\F0173\"}.mdi-sort-alphabetical-descending::before{content:\"\\F0174\"}.mdi-sort-ascending::before{content:\"\\F4BC\"}.mdi-sort-descending::before{content:\"\\F4BD\"}.mdi-sort-numeric::before{content:\"\\F4BE\"}.mdi-sort-variant::before{content:\"\\F4BF\"}.mdi-sort-variant-lock::before{content:\"\\FCA9\"}.mdi-sort-variant-lock-open::before{content:\"\\FCAA\"}.mdi-sort-variant-remove::before{content:\"\\F0172\"}.mdi-soundcloud::before{content:\"\\F4C0\"}.mdi-source-branch::before{content:\"\\F62C\"}.mdi-source-commit::before{content:\"\\F717\"}.mdi-source-commit-end::before{content:\"\\F718\"}.mdi-source-commit-end-local::before{content:\"\\F719\"}.mdi-source-commit-local::before{content:\"\\F71A\"}.mdi-source-commit-next-local::before{content:\"\\F71B\"}.mdi-source-commit-start::before{content:\"\\F71C\"}.mdi-source-commit-start-next-local::before{content:\"\\F71D\"}.mdi-source-fork::before{content:\"\\F4C1\"}.mdi-source-merge::before{content:\"\\F62D\"}.mdi-source-pull::before{content:\"\\F4C2\"}.mdi-source-repository::before{content:\"\\FCAB\"}.mdi-source-repository-multiple::before{content:\"\\FCAC\"}.mdi-soy-sauce::before{content:\"\\F7ED\"}.mdi-spa::before{content:\"\\FCAD\"}.mdi-spa-outline::before{content:\"\\FCAE\"}.mdi-space-invaders::before{content:\"\\FBA5\"}.mdi-spade::before{content:\"\\FE48\"}.mdi-speaker::before{content:\"\\F4C3\"}.mdi-speaker-bluetooth::before{content:\"\\F9A1\"}.mdi-speaker-multiple::before{content:\"\\FD14\"}.mdi-speaker-off::before{content:\"\\F4C4\"}.mdi-speaker-wireless::before{content:\"\\F71E\"}.mdi-speedometer::before{content:\"\\F4C5\"}.mdi-speedometer-medium::before{content:\"\\FFA2\"}.mdi-speedometer-slow::before{content:\"\\FFA3\"}.mdi-spellcheck::before{content:\"\\F4C6\"}.mdi-spider::before{content:\"\\F0215\"}.mdi-spider-thread::before{content:\"\\F0216\"}.mdi-spider-web::before{content:\"\\FBA6\"}.mdi-spotify::before{content:\"\\F4C7\"}.mdi-spotlight::before{content:\"\\F4C8\"}.mdi-spotlight-beam::before{content:\"\\F4C9\"}.mdi-spray::before{content:\"\\F665\"}.mdi-spray-bottle::before{content:\"\\FADF\"}.mdi-sprinkler::before{content:\"\\F0081\"}.mdi-sprinkler-variant::before{content:\"\\F0082\"}.mdi-sprout::before{content:\"\\FE49\"}.mdi-sprout-outline::before{content:\"\\FE4A\"}.mdi-square::before{content:\"\\F763\"}.mdi-square-edit-outline::before{content:\"\\F90B\"}.mdi-square-inc::before{content:\"\\F4CA\"}.mdi-square-inc-cash::before{content:\"\\F4CB\"}.mdi-square-medium::before{content:\"\\FA12\"}.mdi-square-medium-outline::before{content:\"\\FA13\"}.mdi-square-outline::before{content:\"\\F762\"}.mdi-square-root::before{content:\"\\F783\"}.mdi-square-root-box::before{content:\"\\F9A2\"}.mdi-square-small::before{content:\"\\FA14\"}.mdi-squeegee::before{content:\"\\FAE0\"}.mdi-ssh::before{content:\"\\F8BF\"}.mdi-stack-exchange::before{content:\"\\F60B\"}.mdi-stack-overflow::before{content:\"\\F4CC\"}.mdi-stadium::before{content:\"\\F001A\"}.mdi-stadium-variant::before{content:\"\\F71F\"}.mdi-stairs::before{content:\"\\F4CD\"}.mdi-stamper::before{content:\"\\FD15\"}.mdi-standard-definition::before{content:\"\\F7EE\"}.mdi-star::before{content:\"\\F4CE\"}.mdi-star-box::before{content:\"\\FA72\"}.mdi-star-box-outline::before{content:\"\\FA73\"}.mdi-star-circle::before{content:\"\\F4CF\"}.mdi-star-circle-outline::before{content:\"\\F9A3\"}.mdi-star-face::before{content:\"\\F9A4\"}.mdi-star-four-points::before{content:\"\\FAE1\"}.mdi-star-four-points-outline::before{content:\"\\FAE2\"}.mdi-star-half::before{content:\"\\F4D0\"}.mdi-star-off::before{content:\"\\F4D1\"}.mdi-star-outline::before{content:\"\\F4D2\"}.mdi-star-three-points::before{content:\"\\FAE3\"}.mdi-star-three-points-outline::before{content:\"\\FAE4\"}.mdi-state-machine::before{content:\"\\F021A\"}.mdi-steam::before{content:\"\\F4D3\"}.mdi-steam-box::before{content:\"\\F90C\"}.mdi-steering::before{content:\"\\F4D4\"}.mdi-steering-off::before{content:\"\\F90D\"}.mdi-step-backward::before{content:\"\\F4D5\"}.mdi-step-backward-2::before{content:\"\\F4D6\"}.mdi-step-forward::before{content:\"\\F4D7\"}.mdi-step-forward-2::before{content:\"\\F4D8\"}.mdi-stethoscope::before{content:\"\\F4D9\"}.mdi-sticker::before{content:\"\\F5D0\"}.mdi-sticker-emoji::before{content:\"\\F784\"}.mdi-stocking::before{content:\"\\F4DA\"}.mdi-stomach::before{content:\"\\F00BE\"}.mdi-stop::before{content:\"\\F4DB\"}.mdi-stop-circle::before{content:\"\\F666\"}.mdi-stop-circle-outline::before{content:\"\\F667\"}.mdi-store::before{content:\"\\F4DC\"}.mdi-store-24-hour::before{content:\"\\F4DD\"}.mdi-storefront::before{content:\"\\F00EC\"}.mdi-stove::before{content:\"\\F4DE\"}.mdi-strategy::before{content:\"\\F0201\"}.mdi-strava::before{content:\"\\FB25\"}.mdi-stretch-to-page::before{content:\"\\FF48\"}.mdi-stretch-to-page-outline::before{content:\"\\FF49\"}.mdi-subdirectory-arrow-left::before{content:\"\\F60C\"}.mdi-subdirectory-arrow-right::before{content:\"\\F60D\"}.mdi-subtitles::before{content:\"\\FA15\"}.mdi-subtitles-outline::before{content:\"\\FA16\"}.mdi-subway::before{content:\"\\F6AB\"}.mdi-subway-alert-variant::before{content:\"\\FD79\"}.mdi-subway-variant::before{content:\"\\F4DF\"}.mdi-summit::before{content:\"\\F785\"}.mdi-sunglasses::before{content:\"\\F4E0\"}.mdi-surround-sound::before{content:\"\\F5C5\"}.mdi-surround-sound-2-0::before{content:\"\\F7EF\"}.mdi-surround-sound-3-1::before{content:\"\\F7F0\"}.mdi-surround-sound-5-1::before{content:\"\\F7F1\"}.mdi-surround-sound-7-1::before{content:\"\\F7F2\"}.mdi-svg::before{content:\"\\F720\"}.mdi-swap-horizontal::before{content:\"\\F4E1\"}.mdi-swap-horizontal-bold::before{content:\"\\FBA9\"}.mdi-swap-horizontal-circle::before{content:\"\\F0002\"}.mdi-swap-horizontal-circle-outline::before{content:\"\\F0003\"}.mdi-swap-horizontal-variant::before{content:\"\\F8C0\"}.mdi-swap-vertical::before{content:\"\\F4E2\"}.mdi-swap-vertical-bold::before{content:\"\\FBAA\"}.mdi-swap-vertical-circle::before{content:\"\\F0004\"}.mdi-swap-vertical-circle-outline::before{content:\"\\F0005\"}.mdi-swap-vertical-variant::before{content:\"\\F8C1\"}.mdi-swim::before{content:\"\\F4E3\"}.mdi-switch::before{content:\"\\F4E4\"}.mdi-sword::before{content:\"\\F4E5\"}.mdi-sword-cross::before{content:\"\\F786\"}.mdi-symfony::before{content:\"\\FAE5\"}.mdi-sync::before{content:\"\\F4E6\"}.mdi-sync-alert::before{content:\"\\F4E7\"}.mdi-sync-off::before{content:\"\\F4E8\"}.mdi-tab::before{content:\"\\F4E9\"}.mdi-tab-minus::before{content:\"\\FB26\"}.mdi-tab-plus::before{content:\"\\F75B\"}.mdi-tab-remove::before{content:\"\\FB27\"}.mdi-tab-unselected::before{content:\"\\F4EA\"}.mdi-table::before{content:\"\\F4EB\"}.mdi-table-border::before{content:\"\\FA17\"}.mdi-table-chair::before{content:\"\\F0083\"}.mdi-table-column::before{content:\"\\F834\"}.mdi-table-column-plus-after::before{content:\"\\F4EC\"}.mdi-table-column-plus-before::before{content:\"\\F4ED\"}.mdi-table-column-remove::before{content:\"\\F4EE\"}.mdi-table-column-width::before{content:\"\\F4EF\"}.mdi-table-edit::before{content:\"\\F4F0\"}.mdi-table-eye::before{content:\"\\F00BF\"}.mdi-table-headers-eye::before{content:\"\\F0248\"}.mdi-table-headers-eye-off::before{content:\"\\F0249\"}.mdi-table-large::before{content:\"\\F4F1\"}.mdi-table-large-plus::before{content:\"\\FFA4\"}.mdi-table-large-remove::before{content:\"\\FFA5\"}.mdi-table-merge-cells::before{content:\"\\F9A5\"}.mdi-table-of-contents::before{content:\"\\F835\"}.mdi-table-plus::before{content:\"\\FA74\"}.mdi-table-remove::before{content:\"\\FA75\"}.mdi-table-row::before{content:\"\\F836\"}.mdi-table-row-height::before{content:\"\\F4F2\"}.mdi-table-row-plus-after::before{content:\"\\F4F3\"}.mdi-table-row-plus-before::before{content:\"\\F4F4\"}.mdi-table-row-remove::before{content:\"\\F4F5\"}.mdi-table-search::before{content:\"\\F90E\"}.mdi-table-settings::before{content:\"\\F837\"}.mdi-table-tennis::before{content:\"\\FE4B\"}.mdi-tablet::before{content:\"\\F4F6\"}.mdi-tablet-android::before{content:\"\\F4F7\"}.mdi-tablet-cellphone::before{content:\"\\F9A6\"}.mdi-tablet-dashboard::before{content:\"\\FEEB\"}.mdi-tablet-ipad::before{content:\"\\F4F8\"}.mdi-taco::before{content:\"\\F761\"}.mdi-tag::before{content:\"\\F4F9\"}.mdi-tag-faces::before{content:\"\\F4FA\"}.mdi-tag-heart::before{content:\"\\F68A\"}.mdi-tag-heart-outline::before{content:\"\\FBAB\"}.mdi-tag-minus::before{content:\"\\F90F\"}.mdi-tag-minus-outline::before{content:\"\\F024A\"}.mdi-tag-multiple::before{content:\"\\F4FB\"}.mdi-tag-off::before{content:\"\\F024B\"}.mdi-tag-off-outline::before{content:\"\\F024C\"}.mdi-tag-outline::before{content:\"\\F4FC\"}.mdi-tag-plus::before{content:\"\\F721\"}.mdi-tag-plus-outline::before{content:\"\\F024D\"}.mdi-tag-remove::before{content:\"\\F722\"}.mdi-tag-remove-outline::before{content:\"\\F024E\"}.mdi-tag-text::before{content:\"\\F024F\"}.mdi-tag-text-outline::before{content:\"\\F4FD\"}.mdi-tank::before{content:\"\\FD16\"}.mdi-tanker-truck::before{content:\"\\F0006\"}.mdi-tape-measure::before{content:\"\\FB28\"}.mdi-target::before{content:\"\\F4FE\"}.mdi-target-account::before{content:\"\\FBAC\"}.mdi-target-variant::before{content:\"\\FA76\"}.mdi-taxi::before{content:\"\\F4FF\"}.mdi-tea::before{content:\"\\FD7A\"}.mdi-tea-outline::before{content:\"\\FD7B\"}.mdi-teach::before{content:\"\\F88F\"}.mdi-teamviewer::before{content:\"\\F500\"}.mdi-telegram::before{content:\"\\F501\"}.mdi-telescope::before{content:\"\\FB29\"}.mdi-television::before{content:\"\\F502\"}.mdi-television-box::before{content:\"\\F838\"}.mdi-television-classic::before{content:\"\\F7F3\"}.mdi-television-classic-off::before{content:\"\\F839\"}.mdi-television-clean::before{content:\"\\F013B\"}.mdi-television-guide::before{content:\"\\F503\"}.mdi-television-off::before{content:\"\\F83A\"}.mdi-television-pause::before{content:\"\\FFA6\"}.mdi-television-play::before{content:\"\\FEEC\"}.mdi-television-stop::before{content:\"\\FFA7\"}.mdi-temperature-celsius::before{content:\"\\F504\"}.mdi-temperature-fahrenheit::before{content:\"\\F505\"}.mdi-temperature-kelvin::before{content:\"\\F506\"}.mdi-tennis::before{content:\"\\FD7C\"}.mdi-tennis-ball::before{content:\"\\F507\"}.mdi-tent::before{content:\"\\F508\"}.mdi-terraform::before{content:\"\\F0084\"}.mdi-terrain::before{content:\"\\F509\"}.mdi-test-tube::before{content:\"\\F668\"}.mdi-test-tube-empty::before{content:\"\\F910\"}.mdi-test-tube-off::before{content:\"\\F911\"}.mdi-text::before{content:\"\\F9A7\"}.mdi-text-recognition::before{content:\"\\F0168\"}.mdi-text-shadow::before{content:\"\\F669\"}.mdi-text-short::before{content:\"\\F9A8\"}.mdi-text-subject::before{content:\"\\F9A9\"}.mdi-text-to-speech::before{content:\"\\F50A\"}.mdi-text-to-speech-off::before{content:\"\\F50B\"}.mdi-textarea::before{content:\"\\F00C0\"}.mdi-textbox::before{content:\"\\F60E\"}.mdi-textbox-password::before{content:\"\\F7F4\"}.mdi-texture::before{content:\"\\F50C\"}.mdi-texture-box::before{content:\"\\F0007\"}.mdi-theater::before{content:\"\\F50D\"}.mdi-theme-light-dark::before{content:\"\\F50E\"}.mdi-thermometer::before{content:\"\\F50F\"}.mdi-thermometer-alert::before{content:\"\\FE61\"}.mdi-thermometer-chevron-down::before{content:\"\\FE62\"}.mdi-thermometer-chevron-up::before{content:\"\\FE63\"}.mdi-thermometer-high::before{content:\"\\F00ED\"}.mdi-thermometer-lines::before{content:\"\\F510\"}.mdi-thermometer-low::before{content:\"\\F00EE\"}.mdi-thermometer-minus::before{content:\"\\FE64\"}.mdi-thermometer-plus::before{content:\"\\FE65\"}.mdi-thermostat::before{content:\"\\F393\"}.mdi-thermostat-box::before{content:\"\\F890\"}.mdi-thought-bubble::before{content:\"\\F7F5\"}.mdi-thought-bubble-outline::before{content:\"\\F7F6\"}.mdi-thumb-down::before{content:\"\\F511\"}.mdi-thumb-down-outline::before{content:\"\\F512\"}.mdi-thumb-up::before{content:\"\\F513\"}.mdi-thumb-up-outline::before{content:\"\\F514\"}.mdi-thumbs-up-down::before{content:\"\\F515\"}.mdi-ticket::before{content:\"\\F516\"}.mdi-ticket-account::before{content:\"\\F517\"}.mdi-ticket-confirmation::before{content:\"\\F518\"}.mdi-ticket-outline::before{content:\"\\F912\"}.mdi-ticket-percent::before{content:\"\\F723\"}.mdi-tie::before{content:\"\\F519\"}.mdi-tilde::before{content:\"\\F724\"}.mdi-timelapse::before{content:\"\\F51A\"}.mdi-timeline::before{content:\"\\FBAD\"}.mdi-timeline-alert::before{content:\"\\FFB2\"}.mdi-timeline-alert-outline::before{content:\"\\FFB5\"}.mdi-timeline-clock::before{content:\"\\F0226\"}.mdi-timeline-clock-outline::before{content:\"\\F0227\"}.mdi-timeline-help::before{content:\"\\FFB6\"}.mdi-timeline-help-outline::before{content:\"\\FFB7\"}.mdi-timeline-outline::before{content:\"\\FBAE\"}.mdi-timeline-plus::before{content:\"\\FFB3\"}.mdi-timeline-plus-outline::before{content:\"\\FFB4\"}.mdi-timeline-text::before{content:\"\\FBAF\"}.mdi-timeline-text-outline::before{content:\"\\FBB0\"}.mdi-timer::before{content:\"\\F51B\"}.mdi-timer-10::before{content:\"\\F51C\"}.mdi-timer-3::before{content:\"\\F51D\"}.mdi-timer-off::before{content:\"\\F51E\"}.mdi-timer-sand::before{content:\"\\F51F\"}.mdi-timer-sand-empty::before{content:\"\\F6AC\"}.mdi-timer-sand-full::before{content:\"\\F78B\"}.mdi-timetable::before{content:\"\\F520\"}.mdi-toaster::before{content:\"\\F0085\"}.mdi-toaster-off::before{content:\"\\F01E2\"}.mdi-toaster-oven::before{content:\"\\FCAF\"}.mdi-toggle-switch::before{content:\"\\F521\"}.mdi-toggle-switch-off::before{content:\"\\F522\"}.mdi-toggle-switch-off-outline::before{content:\"\\FA18\"}.mdi-toggle-switch-outline::before{content:\"\\FA19\"}.mdi-toilet::before{content:\"\\F9AA\"}.mdi-toolbox::before{content:\"\\F9AB\"}.mdi-toolbox-outline::before{content:\"\\F9AC\"}.mdi-tools::before{content:\"\\F0086\"}.mdi-tooltip::before{content:\"\\F523\"}.mdi-tooltip-account::before{content:\"\\F00C\"}.mdi-tooltip-edit::before{content:\"\\F524\"}.mdi-tooltip-image::before{content:\"\\F525\"}.mdi-tooltip-image-outline::before{content:\"\\FBB1\"}.mdi-tooltip-outline::before{content:\"\\F526\"}.mdi-tooltip-plus::before{content:\"\\FBB2\"}.mdi-tooltip-plus-outline::before{content:\"\\F527\"}.mdi-tooltip-text::before{content:\"\\F528\"}.mdi-tooltip-text-outline::before{content:\"\\FBB3\"}.mdi-tooth::before{content:\"\\F8C2\"}.mdi-tooth-outline::before{content:\"\\F529\"}.mdi-toothbrush::before{content:\"\\F0154\"}.mdi-toothbrush-electric::before{content:\"\\F0157\"}.mdi-toothbrush-paste::before{content:\"\\F0155\"}.mdi-tor::before{content:\"\\F52A\"}.mdi-tortoise::before{content:\"\\FD17\"}.mdi-tournament::before{content:\"\\F9AD\"}.mdi-tower-beach::before{content:\"\\F680\"}.mdi-tower-fire::before{content:\"\\F681\"}.mdi-towing::before{content:\"\\F83B\"}.mdi-track-light::before{content:\"\\F913\"}.mdi-trackpad::before{content:\"\\F7F7\"}.mdi-trackpad-lock::before{content:\"\\F932\"}.mdi-tractor::before{content:\"\\F891\"}.mdi-trademark::before{content:\"\\FA77\"}.mdi-traffic-light::before{content:\"\\F52B\"}.mdi-train::before{content:\"\\F52C\"}.mdi-train-car::before{content:\"\\FBB4\"}.mdi-train-variant::before{content:\"\\F8C3\"}.mdi-tram::before{content:\"\\F52D\"}.mdi-tram-side::before{content:\"\\F0008\"}.mdi-transcribe::before{content:\"\\F52E\"}.mdi-transcribe-close::before{content:\"\\F52F\"}.mdi-transfer::before{content:\"\\F0087\"}.mdi-transfer-down::before{content:\"\\FD7D\"}.mdi-transfer-left::before{content:\"\\FD7E\"}.mdi-transfer-right::before{content:\"\\F530\"}.mdi-transfer-up::before{content:\"\\FD7F\"}.mdi-transit-connection::before{content:\"\\FD18\"}.mdi-transit-connection-variant::before{content:\"\\FD19\"}.mdi-transit-detour::before{content:\"\\FFA8\"}.mdi-transit-transfer::before{content:\"\\F6AD\"}.mdi-transition::before{content:\"\\F914\"}.mdi-transition-masked::before{content:\"\\F915\"}.mdi-translate::before{content:\"\\F5CA\"}.mdi-translate-off::before{content:\"\\FE66\"}.mdi-transmission-tower::before{content:\"\\FD1A\"}.mdi-trash-can::before{content:\"\\FA78\"}.mdi-trash-can-outline::before{content:\"\\FA79\"}.mdi-treasure-chest::before{content:\"\\F725\"}.mdi-tree::before{content:\"\\F531\"}.mdi-tree-outline::before{content:\"\\FE4C\"}.mdi-trello::before{content:\"\\F532\"}.mdi-trending-down::before{content:\"\\F533\"}.mdi-trending-neutral::before{content:\"\\F534\"}.mdi-trending-up::before{content:\"\\F535\"}.mdi-triangle::before{content:\"\\F536\"}.mdi-triangle-outline::before{content:\"\\F537\"}.mdi-triforce::before{content:\"\\FBB5\"}.mdi-trophy::before{content:\"\\F538\"}.mdi-trophy-award::before{content:\"\\F539\"}.mdi-trophy-broken::before{content:\"\\FD80\"}.mdi-trophy-outline::before{content:\"\\F53A\"}.mdi-trophy-variant::before{content:\"\\F53B\"}.mdi-trophy-variant-outline::before{content:\"\\F53C\"}.mdi-truck::before{content:\"\\F53D\"}.mdi-truck-check::before{content:\"\\FCB0\"}.mdi-truck-delivery::before{content:\"\\F53E\"}.mdi-truck-fast::before{content:\"\\F787\"}.mdi-truck-trailer::before{content:\"\\F726\"}.mdi-trumpet::before{content:\"\\F00C1\"}.mdi-tshirt-crew::before{content:\"\\FA7A\"}.mdi-tshirt-crew-outline::before{content:\"\\F53F\"}.mdi-tshirt-v::before{content:\"\\FA7B\"}.mdi-tshirt-v-outline::before{content:\"\\F540\"}.mdi-tumble-dryer::before{content:\"\\F916\"}.mdi-tumble-dryer-alert::before{content:\"\\F01E5\"}.mdi-tumble-dryer-off::before{content:\"\\F01E6\"}.mdi-tumblr::before{content:\"\\F541\"}.mdi-tumblr-box::before{content:\"\\F917\"}.mdi-tumblr-reblog::before{content:\"\\F542\"}.mdi-tune::before{content:\"\\F62E\"}.mdi-tune-vertical::before{content:\"\\F66A\"}.mdi-turnstile::before{content:\"\\FCB1\"}.mdi-turnstile-outline::before{content:\"\\FCB2\"}.mdi-turtle::before{content:\"\\FCB3\"}.mdi-twitch::before{content:\"\\F543\"}.mdi-twitter::before{content:\"\\F544\"}.mdi-twitter-box::before{content:\"\\F545\"}.mdi-twitter-circle::before{content:\"\\F546\"}.mdi-twitter-retweet::before{content:\"\\F547\"}.mdi-two-factor-authentication::before{content:\"\\F9AE\"}.mdi-typewriter::before{content:\"\\FF4A\"}.mdi-uber::before{content:\"\\F748\"}.mdi-ubisoft::before{content:\"\\FBB6\"}.mdi-ubuntu::before{content:\"\\F548\"}.mdi-ufo::before{content:\"\\F00EF\"}.mdi-ufo-outline::before{content:\"\\F00F0\"}.mdi-ultra-high-definition::before{content:\"\\F7F8\"}.mdi-umbraco::before{content:\"\\F549\"}.mdi-umbrella::before{content:\"\\F54A\"}.mdi-umbrella-closed::before{content:\"\\F9AF\"}.mdi-umbrella-outline::before{content:\"\\F54B\"}.mdi-undo::before{content:\"\\F54C\"}.mdi-undo-variant::before{content:\"\\F54D\"}.mdi-unfold-less-horizontal::before{content:\"\\F54E\"}.mdi-unfold-less-vertical::before{content:\"\\F75F\"}.mdi-unfold-more-horizontal::before{content:\"\\F54F\"}.mdi-unfold-more-vertical::before{content:\"\\F760\"}.mdi-ungroup::before{content:\"\\F550\"}.mdi-unicode::before{content:\"\\FEED\"}.mdi-unity::before{content:\"\\F6AE\"}.mdi-unreal::before{content:\"\\F9B0\"}.mdi-untappd::before{content:\"\\F551\"}.mdi-update::before{content:\"\\F6AF\"}.mdi-upload::before{content:\"\\F552\"}.mdi-upload-multiple::before{content:\"\\F83C\"}.mdi-upload-network::before{content:\"\\F6F5\"}.mdi-upload-network-outline::before{content:\"\\FCB4\"}.mdi-upload-off::before{content:\"\\F00F1\"}.mdi-upload-off-outline::before{content:\"\\F00F2\"}.mdi-upload-outline::before{content:\"\\FE67\"}.mdi-usb::before{content:\"\\F553\"}.mdi-usb-port::before{content:\"\\F021B\"}.mdi-valve::before{content:\"\\F0088\"}.mdi-valve-closed::before{content:\"\\F0089\"}.mdi-valve-open::before{content:\"\\F008A\"}.mdi-van-passenger::before{content:\"\\F7F9\"}.mdi-van-utility::before{content:\"\\F7FA\"}.mdi-vanish::before{content:\"\\F7FB\"}.mdi-vanity-light::before{content:\"\\F020C\"}.mdi-variable::before{content:\"\\FAE6\"}.mdi-variable-box::before{content:\"\\F013C\"}.mdi-vector-arrange-above::before{content:\"\\F554\"}.mdi-vector-arrange-below::before{content:\"\\F555\"}.mdi-vector-bezier::before{content:\"\\FAE7\"}.mdi-vector-circle::before{content:\"\\F556\"}.mdi-vector-circle-variant::before{content:\"\\F557\"}.mdi-vector-combine::before{content:\"\\F558\"}.mdi-vector-curve::before{content:\"\\F559\"}.mdi-vector-difference::before{content:\"\\F55A\"}.mdi-vector-difference-ab::before{content:\"\\F55B\"}.mdi-vector-difference-ba::before{content:\"\\F55C\"}.mdi-vector-ellipse::before{content:\"\\F892\"}.mdi-vector-intersection::before{content:\"\\F55D\"}.mdi-vector-line::before{content:\"\\F55E\"}.mdi-vector-link::before{content:\"\\F0009\"}.mdi-vector-point::before{content:\"\\F55F\"}.mdi-vector-polygon::before{content:\"\\F560\"}.mdi-vector-polyline::before{content:\"\\F561\"}.mdi-vector-polyline-edit::before{content:\"\\F0250\"}.mdi-vector-polyline-minus::before{content:\"\\F0251\"}.mdi-vector-polyline-plus::before{content:\"\\F0252\"}.mdi-vector-polyline-remove::before{content:\"\\F0253\"}.mdi-vector-radius::before{content:\"\\F749\"}.mdi-vector-rectangle::before{content:\"\\F5C6\"}.mdi-vector-selection::before{content:\"\\F562\"}.mdi-vector-square::before{content:\"\\F001\"}.mdi-vector-triangle::before{content:\"\\F563\"}.mdi-vector-union::before{content:\"\\F564\"}.mdi-venmo::before{content:\"\\F578\"}.mdi-vhs::before{content:\"\\FA1A\"}.mdi-vibrate::before{content:\"\\F566\"}.mdi-vibrate-off::before{content:\"\\FCB5\"}.mdi-video::before{content:\"\\F567\"}.mdi-video-3d::before{content:\"\\F7FC\"}.mdi-video-3d-variant::before{content:\"\\FEEE\"}.mdi-video-4k-box::before{content:\"\\F83D\"}.mdi-video-account::before{content:\"\\F918\"}.mdi-video-check::before{content:\"\\F008B\"}.mdi-video-check-outline::before{content:\"\\F008C\"}.mdi-video-image::before{content:\"\\F919\"}.mdi-video-input-antenna::before{content:\"\\F83E\"}.mdi-video-input-component::before{content:\"\\F83F\"}.mdi-video-input-hdmi::before{content:\"\\F840\"}.mdi-video-input-scart::before{content:\"\\FFA9\"}.mdi-video-input-svideo::before{content:\"\\F841\"}.mdi-video-minus::before{content:\"\\F9B1\"}.mdi-video-off::before{content:\"\\F568\"}.mdi-video-off-outline::before{content:\"\\FBB7\"}.mdi-video-outline::before{content:\"\\FBB8\"}.mdi-video-plus::before{content:\"\\F9B2\"}.mdi-video-stabilization::before{content:\"\\F91A\"}.mdi-video-switch::before{content:\"\\F569\"}.mdi-video-vintage::before{content:\"\\FA1B\"}.mdi-video-wireless::before{content:\"\\FEEF\"}.mdi-video-wireless-outline::before{content:\"\\FEF0\"}.mdi-view-agenda::before{content:\"\\F56A\"}.mdi-view-agenda-outline::before{content:\"\\F0203\"}.mdi-view-array::before{content:\"\\F56B\"}.mdi-view-carousel::before{content:\"\\F56C\"}.mdi-view-column::before{content:\"\\F56D\"}.mdi-view-comfy::before{content:\"\\FE4D\"}.mdi-view-compact::before{content:\"\\FE4E\"}.mdi-view-compact-outline::before{content:\"\\FE4F\"}.mdi-view-dashboard::before{content:\"\\F56E\"}.mdi-view-dashboard-outline::before{content:\"\\FA1C\"}.mdi-view-dashboard-variant::before{content:\"\\F842\"}.mdi-view-day::before{content:\"\\F56F\"}.mdi-view-grid::before{content:\"\\F570\"}.mdi-view-grid-outline::before{content:\"\\F0204\"}.mdi-view-grid-plus::before{content:\"\\FFAA\"}.mdi-view-grid-plus-outline::before{content:\"\\F0205\"}.mdi-view-headline::before{content:\"\\F571\"}.mdi-view-list::before{content:\"\\F572\"}.mdi-view-module::before{content:\"\\F573\"}.mdi-view-parallel::before{content:\"\\F727\"}.mdi-view-quilt::before{content:\"\\F574\"}.mdi-view-sequential::before{content:\"\\F728\"}.mdi-view-split-horizontal::before{content:\"\\FBA7\"}.mdi-view-split-vertical::before{content:\"\\FBA8\"}.mdi-view-stream::before{content:\"\\F575\"}.mdi-view-week::before{content:\"\\F576\"}.mdi-vimeo::before{content:\"\\F577\"}.mdi-violin::before{content:\"\\F60F\"}.mdi-virtual-reality::before{content:\"\\F893\"}.mdi-visual-studio::before{content:\"\\F610\"}.mdi-visual-studio-code::before{content:\"\\FA1D\"}.mdi-vk::before{content:\"\\F579\"}.mdi-vk-box::before{content:\"\\F57A\"}.mdi-vk-circle::before{content:\"\\F57B\"}.mdi-vlc::before{content:\"\\F57C\"}.mdi-voice::before{content:\"\\F5CB\"}.mdi-voice-off::before{content:\"\\FEF1\"}.mdi-voicemail::before{content:\"\\F57D\"}.mdi-volleyball::before{content:\"\\F9B3\"}.mdi-volume-high::before{content:\"\\F57E\"}.mdi-volume-low::before{content:\"\\F57F\"}.mdi-volume-medium::before{content:\"\\F580\"}.mdi-volume-minus::before{content:\"\\F75D\"}.mdi-volume-mute::before{content:\"\\F75E\"}.mdi-volume-off::before{content:\"\\F581\"}.mdi-volume-plus::before{content:\"\\F75C\"}.mdi-volume-source::before{content:\"\\F014B\"}.mdi-volume-variant-off::before{content:\"\\FE68\"}.mdi-volume-vibrate::before{content:\"\\F014C\"}.mdi-vote::before{content:\"\\FA1E\"}.mdi-vote-outline::before{content:\"\\FA1F\"}.mdi-vpn::before{content:\"\\F582\"}.mdi-vuejs::before{content:\"\\F843\"}.mdi-vuetify::before{content:\"\\FE50\"}.mdi-walk::before{content:\"\\F583\"}.mdi-wall::before{content:\"\\F7FD\"}.mdi-wall-sconce::before{content:\"\\F91B\"}.mdi-wall-sconce-flat::before{content:\"\\F91C\"}.mdi-wall-sconce-variant::before{content:\"\\F91D\"}.mdi-wallet::before{content:\"\\F584\"}.mdi-wallet-giftcard::before{content:\"\\F585\"}.mdi-wallet-membership::before{content:\"\\F586\"}.mdi-wallet-outline::before{content:\"\\FBB9\"}.mdi-wallet-plus::before{content:\"\\FFAB\"}.mdi-wallet-plus-outline::before{content:\"\\FFAC\"}.mdi-wallet-travel::before{content:\"\\F587\"}.mdi-wallpaper::before{content:\"\\FE69\"}.mdi-wan::before{content:\"\\F588\"}.mdi-wardrobe::before{content:\"\\FFAD\"}.mdi-wardrobe-outline::before{content:\"\\FFAE\"}.mdi-warehouse::before{content:\"\\FFBB\"}.mdi-washing-machine::before{content:\"\\F729\"}.mdi-washing-machine-alert::before{content:\"\\F01E7\"}.mdi-washing-machine-off::before{content:\"\\F01E8\"}.mdi-watch::before{content:\"\\F589\"}.mdi-watch-export::before{content:\"\\F58A\"}.mdi-watch-export-variant::before{content:\"\\F894\"}.mdi-watch-import::before{content:\"\\F58B\"}.mdi-watch-import-variant::before{content:\"\\F895\"}.mdi-watch-variant::before{content:\"\\F896\"}.mdi-watch-vibrate::before{content:\"\\F6B0\"}.mdi-watch-vibrate-off::before{content:\"\\FCB6\"}.mdi-water::before{content:\"\\F58C\"}.mdi-water-boiler::before{content:\"\\FFAF\"}.mdi-water-boiler-alert::before{content:\"\\F01DE\"}.mdi-water-boiler-off::before{content:\"\\F01DF\"}.mdi-water-off::before{content:\"\\F58D\"}.mdi-water-outline::before{content:\"\\FE6A\"}.mdi-water-percent::before{content:\"\\F58E\"}.mdi-water-pump::before{content:\"\\F58F\"}.mdi-water-pump-off::before{content:\"\\FFB0\"}.mdi-water-well::before{content:\"\\F008D\"}.mdi-water-well-outline::before{content:\"\\F008E\"}.mdi-watermark::before{content:\"\\F612\"}.mdi-wave::before{content:\"\\FF4B\"}.mdi-waves::before{content:\"\\F78C\"}.mdi-waze::before{content:\"\\FBBA\"}.mdi-weather-cloudy::before{content:\"\\F590\"}.mdi-weather-cloudy-alert::before{content:\"\\FF4C\"}.mdi-weather-cloudy-arrow-right::before{content:\"\\FE51\"}.mdi-weather-fog::before{content:\"\\F591\"}.mdi-weather-hail::before{content:\"\\F592\"}.mdi-weather-hazy::before{content:\"\\FF4D\"}.mdi-weather-hurricane::before{content:\"\\F897\"}.mdi-weather-lightning::before{content:\"\\F593\"}.mdi-weather-lightning-rainy::before{content:\"\\F67D\"}.mdi-weather-night::before{content:\"\\F594\"}.mdi-weather-night-partly-cloudy::before{content:\"\\FF4E\"}.mdi-weather-partly-cloudy::before{content:\"\\F595\"}.mdi-weather-partly-lightning::before{content:\"\\FF4F\"}.mdi-weather-partly-rainy::before{content:\"\\FF50\"}.mdi-weather-partly-snowy::before{content:\"\\FF51\"}.mdi-weather-partly-snowy-rainy::before{content:\"\\FF52\"}.mdi-weather-pouring::before{content:\"\\F596\"}.mdi-weather-rainy::before{content:\"\\F597\"}.mdi-weather-snowy::before{content:\"\\F598\"}.mdi-weather-snowy-heavy::before{content:\"\\FF53\"}.mdi-weather-snowy-rainy::before{content:\"\\F67E\"}.mdi-weather-sunny::before{content:\"\\F599\"}.mdi-weather-sunny-alert::before{content:\"\\FF54\"}.mdi-weather-sunset::before{content:\"\\F59A\"}.mdi-weather-sunset-down::before{content:\"\\F59B\"}.mdi-weather-sunset-up::before{content:\"\\F59C\"}.mdi-weather-tornado::before{content:\"\\FF55\"}.mdi-weather-windy::before{content:\"\\F59D\"}.mdi-weather-windy-variant::before{content:\"\\F59E\"}.mdi-web::before{content:\"\\F59F\"}.mdi-web-box::before{content:\"\\FFB1\"}.mdi-web-clock::before{content:\"\\F0275\"}.mdi-webcam::before{content:\"\\F5A0\"}.mdi-webhook::before{content:\"\\F62F\"}.mdi-webpack::before{content:\"\\F72A\"}.mdi-webrtc::before{content:\"\\F0273\"}.mdi-wechat::before{content:\"\\F611\"}.mdi-weight::before{content:\"\\F5A1\"}.mdi-weight-gram::before{content:\"\\FD1B\"}.mdi-weight-kilogram::before{content:\"\\F5A2\"}.mdi-weight-lifter::before{content:\"\\F0188\"}.mdi-weight-pound::before{content:\"\\F9B4\"}.mdi-whatsapp::before{content:\"\\F5A3\"}.mdi-wheelchair-accessibility::before{content:\"\\F5A4\"}.mdi-whistle::before{content:\"\\F9B5\"}.mdi-white-balance-auto::before{content:\"\\F5A5\"}.mdi-white-balance-incandescent::before{content:\"\\F5A6\"}.mdi-white-balance-iridescent::before{content:\"\\F5A7\"}.mdi-white-balance-sunny::before{content:\"\\F5A8\"}.mdi-widgets::before{content:\"\\F72B\"}.mdi-wifi::before{content:\"\\F5A9\"}.mdi-wifi-off::before{content:\"\\F5AA\"}.mdi-wifi-star::before{content:\"\\FE6B\"}.mdi-wifi-strength-1::before{content:\"\\F91E\"}.mdi-wifi-strength-1-alert::before{content:\"\\F91F\"}.mdi-wifi-strength-1-lock::before{content:\"\\F920\"}.mdi-wifi-strength-2::before{content:\"\\F921\"}.mdi-wifi-strength-2-alert::before{content:\"\\F922\"}.mdi-wifi-strength-2-lock::before{content:\"\\F923\"}.mdi-wifi-strength-3::before{content:\"\\F924\"}.mdi-wifi-strength-3-alert::before{content:\"\\F925\"}.mdi-wifi-strength-3-lock::before{content:\"\\F926\"}.mdi-wifi-strength-4::before{content:\"\\F927\"}.mdi-wifi-strength-4-alert::before{content:\"\\F928\"}.mdi-wifi-strength-4-lock::before{content:\"\\F929\"}.mdi-wifi-strength-alert-outline::before{content:\"\\F92A\"}.mdi-wifi-strength-lock-outline::before{content:\"\\F92B\"}.mdi-wifi-strength-off::before{content:\"\\F92C\"}.mdi-wifi-strength-off-outline::before{content:\"\\F92D\"}.mdi-wifi-strength-outline::before{content:\"\\F92E\"}.mdi-wii::before{content:\"\\F5AB\"}.mdi-wiiu::before{content:\"\\F72C\"}.mdi-wikipedia::before{content:\"\\F5AC\"}.mdi-wind-turbine::before{content:\"\\FD81\"}.mdi-window-close::before{content:\"\\F5AD\"}.mdi-window-closed::before{content:\"\\F5AE\"}.mdi-window-closed-variant::before{content:\"\\F0206\"}.mdi-window-maximize::before{content:\"\\F5AF\"}.mdi-window-minimize::before{content:\"\\F5B0\"}.mdi-window-open::before{content:\"\\F5B1\"}.mdi-window-open-variant::before{content:\"\\F0207\"}.mdi-window-restore::before{content:\"\\F5B2\"}.mdi-window-shutter::before{content:\"\\F0147\"}.mdi-window-shutter-alert::before{content:\"\\F0148\"}.mdi-window-shutter-open::before{content:\"\\F0149\"}.mdi-windows::before{content:\"\\F5B3\"}.mdi-windows-classic::before{content:\"\\FA20\"}.mdi-wiper::before{content:\"\\FAE8\"}.mdi-wiper-wash::before{content:\"\\FD82\"}.mdi-wordpress::before{content:\"\\F5B4\"}.mdi-worker::before{content:\"\\F5B5\"}.mdi-wrap::before{content:\"\\F5B6\"}.mdi-wrap-disabled::before{content:\"\\FBBB\"}.mdi-wrench::before{content:\"\\F5B7\"}.mdi-wrench-outline::before{content:\"\\FBBC\"}.mdi-wunderlist::before{content:\"\\F5B8\"}.mdi-xamarin::before{content:\"\\F844\"}.mdi-xamarin-outline::before{content:\"\\F845\"}.mdi-xaml::before{content:\"\\F673\"}.mdi-xbox::before{content:\"\\F5B9\"}.mdi-xbox-controller::before{content:\"\\F5BA\"}.mdi-xbox-controller-battery-alert::before{content:\"\\F74A\"}.mdi-xbox-controller-battery-charging::before{content:\"\\FA21\"}.mdi-xbox-controller-battery-empty::before{content:\"\\F74B\"}.mdi-xbox-controller-battery-full::before{content:\"\\F74C\"}.mdi-xbox-controller-battery-low::before{content:\"\\F74D\"}.mdi-xbox-controller-battery-medium::before{content:\"\\F74E\"}.mdi-xbox-controller-battery-unknown::before{content:\"\\F74F\"}.mdi-xbox-controller-menu::before{content:\"\\FE52\"}.mdi-xbox-controller-off::before{content:\"\\F5BB\"}.mdi-xbox-controller-view::before{content:\"\\FE53\"}.mdi-xda::before{content:\"\\F5BC\"}.mdi-xing::before{content:\"\\F5BD\"}.mdi-xing-box::before{content:\"\\F5BE\"}.mdi-xing-circle::before{content:\"\\F5BF\"}.mdi-xml::before{content:\"\\F5C0\"}.mdi-xmpp::before{content:\"\\F7FE\"}.mdi-yahoo::before{content:\"\\FB2A\"}.mdi-yammer::before{content:\"\\F788\"}.mdi-yeast::before{content:\"\\F5C1\"}.mdi-yelp::before{content:\"\\F5C2\"}.mdi-yin-yang::before{content:\"\\F67F\"}.mdi-yoga::before{content:\"\\F01A7\"}.mdi-youtube::before{content:\"\\F5C3\"}.mdi-youtube-creator-studio::before{content:\"\\F846\"}.mdi-youtube-gaming::before{content:\"\\F847\"}.mdi-youtube-subscription::before{content:\"\\FD1C\"}.mdi-youtube-tv::before{content:\"\\F448\"}.mdi-z-wave::before{content:\"\\FAE9\"}.mdi-zend::before{content:\"\\FAEA\"}.mdi-zigbee::before{content:\"\\FD1D\"}.mdi-zip-box::before{content:\"\\F5C4\"}.mdi-zip-box-outline::before{content:\"\\F001B\"}.mdi-zip-disk::before{content:\"\\FA22\"}.mdi-zodiac-aquarius::before{content:\"\\FA7C\"}.mdi-zodiac-aries::before{content:\"\\FA7D\"}.mdi-zodiac-cancer::before{content:\"\\FA7E\"}.mdi-zodiac-capricorn::before{content:\"\\FA7F\"}.mdi-zodiac-gemini::before{content:\"\\FA80\"}.mdi-zodiac-leo::before{content:\"\\FA81\"}.mdi-zodiac-libra::before{content:\"\\FA82\"}.mdi-zodiac-pisces::before{content:\"\\FA83\"}.mdi-zodiac-sagittarius::before{content:\"\\FA84\"}.mdi-zodiac-scorpio::before{content:\"\\FA85\"}.mdi-zodiac-taurus::before{content:\"\\FA86\"}.mdi-zodiac-virgo::before{content:\"\\FA87\"}.mdi-blank::before{content:\"\\F68C\";visibility:hidden}.mdi-18px.mdi-set,.mdi-18px.mdi:before{font-size:18px}.mdi-24px.mdi-set,.mdi-24px.mdi:before{font-size:24px}.mdi-36px.mdi-set,.mdi-36px.mdi:before{font-size:36px}.mdi-48px.mdi-set,.mdi-48px.mdi:before{font-size:48px}.mdi-dark:before{color:rgba(0,0,0,0.54)}.mdi-dark.mdi-inactive:before{color:rgba(0,0,0,0.26)}.mdi-light:before{color:#fff}.mdi-light.mdi-inactive:before{color:rgba(255,255,255,0.3)}.mdi-rotate-45:before{-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg)}.mdi-rotate-90:before{-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.mdi-rotate-135:before{-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.mdi-rotate-180:before{-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.mdi-rotate-225:before{-webkit-transform:rotate(225deg);-ms-transform:rotate(225deg);transform:rotate(225deg)}.mdi-rotate-270:before{-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.mdi-rotate-315:before{-webkit-transform:rotate(315deg);-ms-transform:rotate(315deg);transform:rotate(315deg)}.mdi-flip-h:before{-webkit-transform:scaleX(-1);transform:scaleX(-1);filter:FlipH;-ms-filter:\"FlipH\"}.mdi-flip-v:before{-webkit-transform:scaleY(-1);transform:scaleY(-1);filter:FlipV;-ms-filter:\"FlipV\"}.mdi-spin:before{-webkit-animation:mdi-spin 2s infinite linear;animation:mdi-spin 2s infinite linear}@-webkit-keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes mdi-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}\n/*# sourceMappingURL=materialdesignicons.css.map */\n\n/*------------------------------------------------------------------*/\n/*\t05) Owl Carousel\n/*------------------------------------------------------------------*/\n/**\n * Owl Carousel v2.3.4\n * Copyright 2013-2018 David Deutsch\n * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE\n */\n .owl-carousel,.owl-carousel .owl-item{-webkit-tap-highlight-color:transparent;position:relative}.owl-carousel{display:none;width:100%;z-index:1}.owl-carousel .owl-stage{position:relative;-ms-touch-action:pan-Y;touch-action:manipulation;-moz-backface-visibility:hidden}.owl-carousel .owl-stage:after{content:\".\";display:block;clear:both;visibility:hidden;line-height:0;height:0}.owl-carousel .owl-stage-outer{position:relative;overflow:hidden;-webkit-transform:translate3d(0,0,0)}.owl-carousel .owl-item,.owl-carousel .owl-wrapper{-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-webkit-transform:translate3d(0,0,0);-moz-transform:translate3d(0,0,0);-ms-transform:translate3d(0,0,0)}.owl-carousel .owl-item{min-height:1px;float:left;-webkit-backface-visibility:hidden;-webkit-touch-callout:none}.owl-carousel .owl-item img{display:block;width:100%}.owl-carousel .owl-dots.disabled,.owl-carousel .owl-nav.disabled{display:none}.no-js .owl-carousel,.owl-carousel.owl-loaded{display:block}.owl-carousel .owl-dot,.owl-carousel .owl-nav .owl-next,.owl-carousel .owl-nav .owl-prev{cursor:pointer;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel .owl-nav button.owl-next,.owl-carousel .owl-nav button.owl-prev,.owl-carousel button.owl-dot{background:0 0;color:inherit;border:none;padding:0!important;font:inherit}.owl-carousel.owl-loading{opacity:0;display:block}.owl-carousel.owl-hidden{opacity:0}.owl-carousel.owl-refresh .owl-item{visibility:hidden}.owl-carousel.owl-drag .owl-item{-ms-touch-action:pan-y;touch-action:pan-y;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.owl-carousel.owl-grab{cursor:move;cursor:grab}.owl-carousel.owl-rtl{direction:rtl}.owl-carousel.owl-rtl .owl-item{float:right}.owl-carousel .animated{animation-duration:1s;animation-fill-mode:both}.owl-carousel .owl-animated-in{z-index:0}.owl-carousel .owl-animated-out{z-index:1}.owl-carousel .fadeOut{animation-name:fadeOut}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.owl-height{transition:height .5s ease-in-out}.owl-carousel .owl-item .owl-lazy{opacity:0;transition:opacity .4s ease}.owl-carousel .owl-item .owl-lazy:not([src]),.owl-carousel .owl-item .owl-lazy[src^=\"\"]{max-height:0}.owl-carousel .owl-item img.owl-lazy{transform-style:preserve-3d}.owl-carousel .owl-video-wrapper{position:relative;height:100%;background:#000}.owl-carousel .owl-video-play-icon{position:absolute;height:80px;width:80px;left:50%;top:50%;margin-left:-40px;margin-top:-40px;background:url(owl.video.play.png) no-repeat;cursor:pointer;z-index:1;-webkit-backface-visibility:hidden;transition:transform .1s ease}.owl-carousel .owl-video-play-icon:hover{-ms-transform:scale(1.3,1.3);transform:scale(1.3,1.3)}.owl-carousel .owl-video-playing .owl-video-play-icon,.owl-carousel .owl-video-playing .owl-video-tn{display:none}.owl-carousel .owl-video-tn{opacity:0;height:100%;background-position:center center;background-repeat:no-repeat;background-size:contain;transition:opacity .4s ease}.owl-carousel .owl-video-frame{position:relative;z-index:1;height:100%;width:100%}\n\n/*------------------------------------------------------------------*/\n/*\t06) Owl Carousel Default\n/*------------------------------------------------------------------*/\n /**\n * Owl Carousel v2.3.4\n * Copyright 2013-2018 David Deutsch\n * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE\n */\n.owl-theme .owl-dots,.owl-theme .owl-nav{text-align:center;-webkit-tap-highlight-color:transparent}.owl-theme .owl-nav{margin-top:10px}.owl-theme .owl-nav [class*=owl-]{color:#FFF;font-size:14px;margin:5px;padding:4px 7px;background:#D6D6D6;display:inline-block;cursor:pointer;border-radius:3px}.owl-theme .owl-nav [class*=owl-]:hover{background:#869791;color:#FFF;text-decoration:none}.owl-theme .owl-nav .disabled{opacity:.5;cursor:default}.owl-theme .owl-nav.disabled+.owl-dots{margin-top:10px}.owl-theme .owl-dots .owl-dot{display:inline-block;zoom:1}.owl-theme .owl-dots .owl-dot span{width:10px;height:10px;margin:5px 7px;background:#D6D6D6;display:block;-webkit-backface-visibility:visible;transition:opacity .2s ease;border-radius:30px}\n\n/*------------------------------------------------------------------*/\n/*\t07) Vegas Slider\n/*------------------------------------------------------------------*/\n.vegas-overlay,.vegas-slide,.vegas-slide-inner,.vegas-timer,.vegas-wrapper{position:absolute;top:0;left:0;bottom:0;right:0;overflow:hidden;border:none;padding:0;margin:0}.vegas-overlay{opacity:.5;background:url(overlays/02.png) center center}.vegas-timer{top:auto;bottom:0;height:2px}.vegas-timer-progress{width:0;height:100%;background:#fff;transition:width ease-out}.vegas-timer-running .vegas-timer-progress{width:100%}.vegas-slide,.vegas-slide-inner{margin:0;padding:0;background:center center no-repeat;-webkit-transform:translateZ(0);transform:translateZ(0);will-change:transform,opacity}body .vegas-container{overflow:hidden!important;position:relative}.vegas-video{min-width:100%;min-height:100%;width:auto;height:auto}body.vegas-container{overflow:auto;position:static;z-index:-2}body.vegas-container>.vegas-overlay,body.vegas-container>.vegas-slide,body.vegas-container>.vegas-timer{position:fixed;z-index:-1}.vegas-transition-blur,.vegas-transition-blur2{opacity:0;-webkit-filter:blur(32px) brightness(1.01);filter:blur(32px) brightness(1.01)}.vegas-transition-blur-in,.vegas-transition-blur2-in{opacity:1;-webkit-filter:blur(0) brightness(1.01);filter:blur(0) brightness(1.01)}.vegas-transition-blur2-out{opacity:0}.vegas-transition-burn,.vegas-transition-burn2{opacity:0;-webkit-filter:contrast(1000%) saturate(1000%);filter:contrast(1000%) saturate(1000%)}.vegas-transition-burn-in,.vegas-transition-burn2-in{opacity:1;-webkit-filter:contrast(100%) saturate(100%);filter:contrast(100%) saturate(100%)}.vegas-transition-burn2-out{opacity:0;-webkit-filter:contrast(1000%) saturate(1000%);filter:contrast(1000%) saturate(1000%)}.vegas-transition-fade,.vegas-transition-fade2{opacity:0}.vegas-transition-fade-in,.vegas-transition-fade2-in{opacity:1}.vegas-transition-fade2-out{opacity:0}.vegas-transition-flash,.vegas-transition-flash2{opacity:0;-webkit-filter:brightness(25);filter:brightness(25)}.vegas-transition-flash-in,.vegas-transition-flash2-in{opacity:1;-webkit-filter:brightness(1);filter:brightness(1)}.vegas-transition-flash2-out{opacity:0;-webkit-filter:brightness(25);filter:brightness(25)}.vegas-transition-negative,.vegas-transition-negative2{opacity:0;-webkit-filter:invert(100%);filter:invert(100%)}.vegas-transition-negative-in,.vegas-transition-negative2-in{opacity:1;-webkit-filter:invert(0);filter:invert(0)}.vegas-transition-negative2-out{opacity:0;-webkit-filter:invert(100%);filter:invert(100%)}.vegas-transition-slideDown,.vegas-transition-slideDown2{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.vegas-transition-slideDown-in,.vegas-transition-slideDown2-in{-webkit-transform:translateY(0);transform:translateY(0)}.vegas-transition-slideDown2-out{-webkit-transform:translateY(100%);transform:translateY(100%)}.vegas-transition-slideLeft,.vegas-transition-slideLeft2{-webkit-transform:translateX(100%);transform:translateX(100%)}.vegas-transition-slideLeft-in,.vegas-transition-slideLeft2-in{-webkit-transform:translateX(0);transform:translateX(0)}.vegas-transition-slideLeft2-out,.vegas-transition-slideRight,.vegas-transition-slideRight2{-webkit-transform:translateX(-100%);transform:translateX(-100%)}.vegas-transition-slideRight-in,.vegas-transition-slideRight2-in{-webkit-transform:translateX(0);transform:translateX(0)}.vegas-transition-slideRight2-out{-webkit-transform:translateX(100%);transform:translateX(100%)}.vegas-transition-slideUp,.vegas-transition-slideUp2{-webkit-transform:translateY(100%);transform:translateY(100%)}.vegas-transition-slideUp-in,.vegas-transition-slideUp2-in{-webkit-transform:translateY(0);transform:translateY(0)}.vegas-transition-slideUp2-out{-webkit-transform:translateY(-100%);transform:translateY(-100%)}.vegas-transition-swirlLeft,.vegas-transition-swirlLeft2{-webkit-transform:scale(2) rotate(35deg);transform:scale(2) rotate(35deg);opacity:0}.vegas-transition-swirlLeft-in,.vegas-transition-swirlLeft2-in{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0);opacity:1}.vegas-transition-swirlLeft2-out,.vegas-transition-swirlRight,.vegas-transition-swirlRight2{-webkit-transform:scale(2) rotate(-35deg);transform:scale(2) rotate(-35deg);opacity:0}.vegas-transition-swirlRight-in,.vegas-transition-swirlRight2-in{-webkit-transform:scale(1) rotate(0);transform:scale(1) rotate(0);opacity:1}.vegas-transition-swirlRight2-out{-webkit-transform:scale(2) rotate(35deg);transform:scale(2) rotate(35deg);opacity:0}.vegas-transition-zoomIn,.vegas-transition-zoomIn2{-webkit-transform:scale(0);transform:scale(0);opacity:0}.vegas-transition-zoomIn-in,.vegas-transition-zoomIn2-in{-webkit-transform:scale(1);transform:scale(1);opacity:1}.vegas-transition-zoomIn2-out,.vegas-transition-zoomOut,.vegas-transition-zoomOut2{-webkit-transform:scale(2);transform:scale(2);opacity:0}.vegas-transition-zoomOut-in,.vegas-transition-zoomOut2-in{-webkit-transform:scale(1);transform:scale(1);opacity:1}.vegas-transition-zoomOut2-out{-webkit-transform:scale(0);transform:scale(0);opacity:0}.vegas-animation-kenburns{-webkit-animation:kenburns ease-out;animation:kenburns ease-out}@-webkit-keyframes kenburns{0%{-webkit-transform:scale(1.5);transform:scale(1.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes kenburns{0%{-webkit-transform:scale(1.5);transform:scale(1.5)}100%{-webkit-transform:scale(1);transform:scale(1)}}.vegas-animation-kenburnsDownLeft{-webkit-animation:kenburnsDownLeft ease-out;animation:kenburnsDownLeft ease-out}@-webkit-keyframes kenburnsDownLeft{0%{-webkit-transform:scale(1.5) translate(10%,-10%);transform:scale(1.5) translate(10%,-10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsDownLeft{0%{-webkit-transform:scale(1.5) translate(10%,-10%);transform:scale(1.5) translate(10%,-10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}.vegas-animation-kenburnsDownRight{-webkit-animation:kenburnsDownRight ease-out;animation:kenburnsDownRight ease-out}@-webkit-keyframes kenburnsDownRight{0%{-webkit-transform:scale(1.5) translate(-10%,-10%);transform:scale(1.5) translate(-10%,-10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsDownRight{0%{-webkit-transform:scale(1.5) translate(-10%,-10%);transform:scale(1.5) translate(-10%,-10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}.vegas-animation-kenburnsDown{-webkit-animation:kenburnsDown ease-out;animation:kenburnsDown ease-out}@-webkit-keyframes kenburnsDown{0%{-webkit-transform:scale(1.5) translate(0,-10%);transform:scale(1.5) translate(0,-10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsDown{0%{-webkit-transform:scale(1.5) translate(0,-10%);transform:scale(1.5) translate(0,-10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}.vegas-animation-kenburnsLeft{-webkit-animation:kenburnsLeft ease-out;animation:kenburnsLeft ease-out}@-webkit-keyframes kenburnsLeft{0%{-webkit-transform:scale(1.5) translate(10%,0);transform:scale(1.5) translate(10%,0)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsLeft{0%{-webkit-transform:scale(1.5) translate(10%,0);transform:scale(1.5) translate(10%,0)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}.vegas-animation-kenburnsRight{-webkit-animation:kenburnsRight ease-out;animation:kenburnsRight ease-out}@-webkit-keyframes kenburnsRight{0%{-webkit-transform:scale(1.5) translate(-10%,0);transform:scale(1.5) translate(-10%,0)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsRight{0%{-webkit-transform:scale(1.5) translate(-10%,0);transform:scale(1.5) translate(-10%,0)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}.vegas-animation-kenburnsUpLeft{-webkit-animation:kenburnsUpLeft ease-out;animation:kenburnsUpLeft ease-out}@-webkit-keyframes kenburnsUpLeft{0%{-webkit-transform:scale(1.5) translate(10%,10%);transform:scale(1.5) translate(10%,10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsUpLeft{0%{-webkit-transform:scale(1.5) translate(10%,10%);transform:scale(1.5) translate(10%,10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}.vegas-animation-kenburnsUpRight{-webkit-animation:kenburnsUpRight ease-out;animation:kenburnsUpRight ease-out}@-webkit-keyframes kenburnsUpRight{0%{-webkit-transform:scale(1.5) translate(-10%,10%);transform:scale(1.5) translate(-10%,10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsUpRight{0%{-webkit-transform:scale(1.5) translate(-10%,10%);transform:scale(1.5) translate(-10%,10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}.vegas-animation-kenburnsUp{-webkit-animation:kenburnsUp ease-out;animation:kenburnsUp ease-out}@-webkit-keyframes kenburnsUp{0%{-webkit-transform:scale(1.5) translate(0,10%);transform:scale(1.5) translate(0,10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}@keyframes kenburnsUp{0%{-webkit-transform:scale(1.5) translate(0,10%);transform:scale(1.5) translate(0,10%)}100%{-webkit-transform:scale(1) translate(0,0);transform:scale(1) translate(0,0)}}\n/*# sourceMappingURL=vegas.min.css.map */\n"
  },
  {
    "path": "website/css/style.css",
    "content": "body {\n  font-size: 16px;\n  font-family: 'Roboto', sans-serif;\n  font-weight: 400;\n  overflow-x: hidden;\n  overflow-y: scroll;\n  position: relative;\n  box-sizing: border-box;\n  color: #636b72;\n}\nul,\nol {\n  padding: 0;\n  margin: 0;\n  list-style: none;\n}\na,\na:hover,\na:focus,\na:active,\na:visited,\na:link {\n  color: inherit;\n  text-decoration: none;\n}\ninput,\ninput:focus,\ntextarea,\ntextarea:focus,\nbutton,\nbutton:focus {\n  outline: none;\n  resize: inherit;\n}\nbutton:focus,\nbutton {\n  border: none;\n}\nsection {\n  overflow: hidden;\n  width: 100%;\n}\n::-moz-selection {\n  background-color: #000;\n  color: #fff;\n}\n::selection {\n  background-color: #000;\n  color: #fff;\n}\n.site-wrapper {\n  position: relative;\n  overflow: hidden;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  body,\n  html {\n    font-size: 14px;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 02.Typography\n/* ---------------------------------------------------------------- */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n  font-family: 'Poppins', sans-serif;\n  text-transform: capitalize;\n  font-weight: 600;\n  line-height: 1.5;\n  color: #000;\n  margin: 0;\n}\nh1 {\n  font-size: 3rem;\n}\nh2 {\n  font-size: 2.25rem;\n}\nh3 {\n  font-size: 2rem;\n}\nh4 {\n  font-size: 1.625rem;\n}\nh5 {\n  font-size: 1.375rem;\n}\nh6 {\n  font-size: 1.125rem;\n}\np {\n  margin: 0;\n  line-height: 28px;\n}\n\n/* ---------------------------------------------------------------- */\n/* 03.Helper Class\n/* ---------------------------------------------------------------- */\n.preview-container {\n  padding-bottom: 52px;\n}\n.preview-container img {\n  height: 370px;\n}\n.section-padding {\n  padding: 65px 0;\n  position: relative;\n}\n.section-heading {\n  text-align: center;\n  margin-bottom: 60px;\n}\n.section-title {\n  text-align: center;\n  position: relative;\n  padding: 0 0 15px;\n  margin-bottom: 15px;\n  font-weight: 600;\n}\n.section-title span {\n  margin-right: 10px;\n  margin-left: 10px;\n  color: #0033cc;\n}\n.section-title::before {\n  position: absolute;\n  content: '';\n  left: 50%;\n  height: 4px;\n  background: #0033cc;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n}\n.section-title::after {\n  bottom: -5px;\n  width: 30px;\n}\n.section-title::before {\n  bottom: 0;\n  width: 33px;\n}\n.section-sub-title {\n  text-align: left;\n  font-size: 1.125rem;\n}\n.pc-section-sub-title {\n  font-size: 24px;\n  font-family: PingFangSC-Regular, PingFang SC;\n  font-weight: 400;\n  color: #9b9b9b;\n  margin-bottom: 22px;\n}\n.section-title-ul {\n  margin: auto;\n}\n.section-title-ul::after {\n  clear: both;\n  content: '';\n  display: block;\n}\n.section-title-ul li {\n  font-size: 24px;\n  font-family: PingFangSC-Medium, PingFang SC;\n  font-weight: 500;\n  color: #444a59;\n  float: left;\n  position: relative;\n  margin-right: 60px;\n}\n.section-title-ul li::before {\n  content: '·';\n  position: absolute;\n  left: -34px;\n}\n.section-title-ul li.first::before {\n  content: '';\n}\n.section-title-ul li.last {\n  margin-right: 0;\n}\n.section-badge {\n  display: inline-block;\n  margin-bottom: 10px;\n  border-radius: 5px;\n  font-size: 14px;\n  padding: 10px 20px;\n  color: #fff !important;\n  background: #15db95;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n}\n.section-sub-btn {\n  margin-top: 60px;\n  width: 226px;\n  background: #2f55ec !important;\n}\n.gray-btn {\n  background: #4a547b !important;\n}\n.mb-3 {\n  width: 400px;\n  position: relative;\n}\n.form-control {\n  background: rgba(187, 192, 212, 0.1);\n  border-radius: 8px;\n  border: 1px solid rgba(187, 192, 212, 0.4);\n  font-size: 14px;\n  font-family: PingFangSC-Regular, PingFang SC;\n  font-weight: 400;\n  color: #9b9b9b;\n  line-height: 20px;\n}\n.default-outline-btn {\n  display: inline-block;\n  overflow: hidden;\n  padding: 20px 14px;\n  border-radius: 5px;\n  text-transform: capitalize;\n  position: relative;\n  color: #fff !important;\n  background: #15db95;\n  -webkit-transition: all 0.25s ease;\n  -ms-transition: all 0.25s ease;\n  -o-transition: all 0.25s ease;\n  transition: all 0.25s ease;\n  -webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);\n}\n.merchant-list {\n  width: 210px;\n  height: 210px;\n\n  text-align: center;\n}\n.merchant-item {\n  width: 210px;\n  height: 210px;\n  display: flex;\n  align-items: center;\n  padding: 0 14px;\n  box-shadow: 0px 0px 40px -5px rgba(74, 84, 123, 0.15);\n  border-radius: 10px;\n}\n.merchant-list img {\n  width: 100%;\n  align-items: center;\n}\n.merchant-img-container {\n  width: 117vw;\n  margin-bottom: 31px;\n  margin-left: 20px;\n  text-align: center;\n}\n.merchant-img-container .col-lg-2 {\n  flex: 0 0 14.285714%;\n  max-width: 14.285714%;\n}\n.pc-footer {\n  height: 334px;\n  background: #303955;\n}\n.pc-footer-menu {\n  margin-top: 70px;\n  margin-bottom: 46px;\n}\n.pc-footer-menu li {\n  display: inline-block;\n  width: 126px;\n  text-align: center;\n  color: #d9d9d9;\n  line-height: 12px;\n  font-size: 12px;\n  margin: 0 !important;\n}\n.pc-footer-contact li {\n  display: inline-block;\n  width: 66px;\n  text-align: center;\n  cursor: pointer;\n  margin: 0 !important;\n  position: relative;\n  opacity: 1 !important;\n}\n.pc-footer-contact li:hover .qr-code-container {\n  display: block;\n}\n\n.contact-us:hover {\n  color: #50597d;\n}\n.contact-us:hover + .qr-code-container {\n  display: block;\n  right: 0;\n  left: initial;\n  top: 80px;\n}\n.qr-code-container {\n  display: none;\n  position: absolute;\n  width: 260px;\n  height: 268px;\n  background: #ffffff;\n  box-shadow: 0px 0px 9px 0px rgba(187, 192, 212, 0.5);\n  border-radius: 8px;\n  bottom: 70px;\n  left: 0;\n  margin-left: -100px;\n  padding: 13px;\n}\n.qr-code-container .icon-qr-code {\n  width: 100%;\n  height: 100%;\n}\n.bottom-center-arrow {\n  background: #ffffff;\n  /* border: 3px solid #bbc0d480; */\n}\n.bottom-center-arrow:after,\n.bottom-center-arrow:before {\n  top: 100%;\n  left: 50%;\n  border: solid transparent;\n  content: ' ';\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none;\n  margin-left: -14px;\n}\n.bottom-center-arrow:after {\n  border-color: rgba(136, 183, 213, 0);\n  border-top-color: #ffffff;\n  border-width: 14px;\n}\n.bottom-center-arrow:before {\n  border-color: rgba(194, 225, 245, 0);\n  border-top-color: #bbc0d480;\n  border-width: 14px;\n  margin-left: -14px;\n}\n.bottom-top-arrow {\n  background: #ffffff;\n  border: 1px solid #bbc0d480;\n}\n.bottom-top-arrow:after,\n.bottom-top-arrow:before {\n  bottom: 100%;\n  left: 50%;\n  border: solid transparent;\n  content: ' ';\n  height: 0;\n  width: 0;\n  position: absolute;\n  pointer-events: none;\n}\n.bottom-top-arrow:after {\n  border-color: rgba(136, 183, 213, 0);\n  border-bottom-color: #ffffff;\n  border-width: 12px;\n  margin-left: -12px;\n}\n.bottom-top-arrow:before {\n  border-color: rgba(194, 225, 245, 0);\n  border-bottom-color: #bbc0d480;\n  border-width: 14px;\n  margin-left: -14px;\n}\n.pc-footer-contact-info {\n  margin-top: 44px;\n  margin-bottom: 74px;\n}\n.default-outline-btn:hover {\n  -webkit-box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n  background: #12bd81;\n  color: #fff !important;\n}\n.blue-text {\n  color: #0095ff !important;\n}\n.blue-btn {\n  background-color: #0095ff !important;\n}\n.default-btn {\n  display: inline-block;\n  overflow: hidden;\n  padding: 20px 40px;\n  border-radius: 5px;\n  text-transform: capitalize;\n  position: relative;\n  color: #fff !important;\n  background: #0033cc;\n  -webkit-transition: all 0.25s ease;\n  -ms-transition: all 0.25s ease;\n  -o-transition: all 0.25s ease;\n  transition: all 0.25s ease;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n}\n.default-btn:hover {\n  background: #1148ee;\n  -webkit-box-shadow: 0 10px 26px 0 rgba(0, 51, 204, 0.2);\n  box-shadow: 0 10px 26px 0 rgba(0, 51, 204, 0.2);\n}\n.default-video-btn {\n  display: inline-block;\n  overflow: hidden;\n  padding: 20px 25px;\n  border-radius: 5px;\n  text-transform: capitalize;\n  position: relative;\n  color: #15db95 !important;\n  background: #fff;\n  margin-left: 10px;\n  text-align: center;\n  transition: all 0.25s linear;\n  -webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);\n}\n@media only screen and (max-width: 750px) {\n  .github,\n  .mobile-hidden {\n    display: none !important;\n  }\n  .team-box .team-card{\n    width: 40%;\n  }\n}\n\n@media only screen and (min-width: 750px) {\n  .pc-hidden {\n    display: none !important;\n  }\n}\n.default-video-btn:hover {\n  -webkit-box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.3);\n  background: #fff;\n}\n.bg-blue-overlay::after {\n  position: absolute;\n  content: '';\n  height: 100%;\n  width: 100%;\n  top: 0;\n  left: 0;\n  z-index: -1;\n  opacity: 0.8;\n  background-position: center;\n  background: #0033cc;\n}\n.item-shadow {\n  -webkit-box-shadow: 0 10px 30px 0 rgba(0, 51, 204, 0.1);\n  box-shadow: 0 10px 20px 0 rgba(0, 51, 204, 0.1);\n  -webkit-transition: all 0.25s linear;\n  -o-transition: all 0.25s linear;\n  -ms-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n}\n.item-shadow:hover {\n  -webkit-box-shadow: 0 10px 30px 0 rgba(0, 51, 204, 0.1);\n  box-shadow: 0 15px 30px 0 rgba(0, 51, 204, 0.15);\n}\n.img-jump {\n  -webkit-animation: imgJump 5s linear 0s infinite normal forwards;\n  animation: imgJump 5s linear 0s infinite normal forwards;\n}\n.pt-minus-70 {\n  padding-top: 70px;\n}\n.pt-50 {\n  padding-top: 50px;\n}\n.scroll-top-btn {\n  position: fixed;\n  bottom: 0;\n  right: 10px;\n  width: 48px;\n  height: 48px;\n  line-height: 48px;\n  font-size: 24px;\n  text-align: center;\n  opacity: 0;\n  border-radius: 5px;\n  visibility: hidden;\n  color: #fff !important;\n  background: #1336d0;\n  overflow: hidden;\n  border-radius: 6px;\n}\n.scroll-top-btn img {\n  width: 100%;\n  height: 100%;\n}\n.scroll-top-btn.active {\n  opacity: 1;\n  visibility: visible;\n  bottom: 10px;\n}\n\n/* Preloader */\n.preloader-wrap {\n  position: fixed;\n  width: 100%;\n  height: 100%;\n  z-index: 4444;\n  top: 0;\n  left: 0;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  background: #0033cc;\n  flex-direction: column;\n}\n.preloader-wrap .preloader-inner {\n  height: 100px;\n  width: 100px;\n  position: relative;\n  margin: 0 auto;\n}\n.preloader-inner .spinner {\n  margin: auto;\n  margin-top: -100px;\n  width: 50px;\n  height: 40px;\n  text-align: center;\n  font-size: 10px;\n}\n.preloader-inner .spinner > div {\n  background-color: #fff;\n  height: 100%;\n  width: 6px;\n  display: inline-block;\n  -webkit-animation: spinnerDelay 1.2s infinite ease-in-out;\n  animation: spinnerDelay 1.2s infinite ease-in-out;\n}\n.preloader-inner .spinner .rect1 {\n  -webkit-animation-delay: -1.1s;\n  animation-delay: -1.1s;\n}\n.preloader-inner .spinner .rect2 {\n  -webkit-animation-delay: -1.1s;\n  animation-delay: -1.1s;\n}\n.preloader-inner .spinner .rect3 {\n  -webkit-animation-delay: -1s;\n  animation-delay: -1s;\n}\n.preloader-inner .spinner .rect4 {\n  -webkit-animation-delay: -0.9s;\n  animation-delay: -0.9s;\n}\n.preloader-inner .spinner .rect5 {\n  -webkit-animation-delay: -0.8s;\n  animation-delay: -0.8s;\n}\n.preloader-inner .sk-circle {\n  margin: 10px auto 100px auto;\n  width: 10px;\n  height: 10px;\n  position: relative;\n  background: #fff;\n  border-radius: 100%;\n  left: -18px;\n  -webkit-animation: spinnerLoad 1.2s infinite ease-in-out;\n  animation: spinnerLoad 1.2s infinite ease-in-out;\n}\n\n/* Transition All Classes */\n.header,\n.scroll-top-btn,\n.default-btn,\n.item-shadow,\n.services-item,\n.services-icon i::before,\n.features-item .features-icon i,\n.hero-video-btn,\n.testimonial-slider .owl-nav span,\n.team-card-img img,\n.team-card-img .team-social,\n.team-card-img .team-social > a,\n.screenshots-slider .owl-item,\n.price-toggle-wrap > a,\n.price-table .price-icon i,\n.blog-tags li a,\n.pagination-link,\n.blog-img > a > img,\n.blog-item,\n.footer-social-links > a,\n.download-btn,\n.screenshots-slider.owl-theme .owl-nav.disabled + .owl-dots .owl-dot span,\n.testimonial-slider.owl-theme .owl-nav.disabled + .owl-dots .owl-dot span,\n.team-social > a,\n.blog-single-meta-box > a:hover {\n  -webkit-transition: all 0.25s linear;\n  -o-transition: all 0.25s linear;\n  -ms-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n}\n\n/* ---------------------------------------------------------------- */\n/* 04.Animaton\n/* ---------------------------------------------------------------- */\n@-webkit-keyframes buttonEffectRight {\n  0% {\n    right: -100%;\n  }\n  100% {\n    right: 100%;\n  }\n}\n@keyframes buttonEffectRight {\n  0% {\n    right: -100%;\n  }\n  100% {\n    right: 100%;\n  }\n}\n@keyframes imgJump {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n  20% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n  41% {\n    -webkit-transform: translateY(-10px);\n    transform: translateY(-10px);\n  }\n  50% {\n    -webkit-transform: translateY(-5px);\n    transform: translateY(-5px);\n  }\n  50% {\n    -webkit-transform: translateY(-5px);\n    transform: translateY(-5px);\n  }\n  80% {\n    -webkit-transform: translateY(0px);\n    transform: translateY(0px);\n  }\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n@-webkit-keyframes imgJump {\n  0% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n  20% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n  41% {\n    -webkit-transform: translateY(-10px);\n    transform: translateY(-10px);\n  }\n  50% {\n    -webkit-transform: translateY(-5px);\n    transform: translateY(-5px);\n  }\n  50% {\n    -webkit-transform: translateY(-5px);\n    transform: translateY(-5px);\n  }\n  80% {\n    -webkit-transform: translateY(0px);\n    transform: translateY(0px);\n  }\n  100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n}\n@keyframes shadowPulse {\n  0% {\n    -webkit-box-shadow: 0 0 0 0 rgba(21, 219, 150, 0.4);\n    box-shadow: 0 0 0 0 rgba(21, 219, 150, 0.4);\n  }\n  70% {\n    -webkit-box-shadow: 0 0 0 40px rgba(21, 219, 150, 0);\n    box-shadow: 0 0 0 40px rgba(21, 219, 150, 0);\n  }\n  100% {\n    -webkit-box-shadow: 0 0 0 0 rgba(21, 219, 150, 0);\n    box-shadow: 0 0 0 0 rgba(21, 219, 150, 0);\n  }\n}\n@-webkit-keyframes shadowPulse {\n  0% {\n    -webkit-box-shadow: 0 0 0 0 rgba(21, 219, 150, 0.4);\n    box-shadow: 0 0 0 0 rgba(21, 219, 150, 0.4);\n  }\n  70% {\n    -webkit-box-shadow: 0 0 0 40px rgba(21, 219, 150, 0);\n    box-shadow: 0 0 0 40px rgba(21, 219, 150, 0);\n  }\n  100% {\n    -webkit-box-shadow: 0 0 0 0 rgba(21, 219, 150, 0);\n    box-shadow: 0 0 0 0 rgba(21, 219, 150, 0);\n  }\n}\n@keyframes stickyMenu {\n  0% {\n    margin-top: -120px;\n    opacity: 0;\n  }\n  50% {\n    margin-top: -64px;\n    opacity: 0;\n  }\n  100% {\n    margin-top: 0;\n    opacity: 1;\n  }\n}\n@keyframes preloader {\n  0% {\n    top: 8px;\n    height: 64px;\n  }\n  50%,\n  100% {\n    top: 24px;\n    height: 32px;\n  }\n}\n@-webkit-keyframes preloader {\n  0% {\n    top: 8px;\n    height: 64px;\n  }\n  50%,\n  100% {\n    top: 24px;\n    height: 32px;\n  }\n}\n@keyframes dashedRotate {\n  0% {\n    transform: rotate(0);\n  }\n  100% {\n    transform: rotate(360deg);\n  }\n}\n@-webkit-keyframes iconPulse {\n  0% {\n    -webkit-transform: scale(0.5);\n    -ms-transform: scale(0.5);\n    -o-transform: scale(0.5);\n    transform: scale(0.5);\n    opacity: 0;\n  }\n  50% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1);\n  }\n}\n@keyframes iconPulse {\n  0% {\n    -webkit-transform: scale(0.5);\n    -ms-transform: scale(0.5);\n    -o-transform: scale(0.5);\n    transform: scale(0.5);\n    opacity: 0;\n  }\n  50% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(1);\n    -ms-transform: scale(1);\n    -o-transform: scale(1);\n    transform: scale(1);\n  }\n}\n@-webkit-keyframes spinnerLoad {\n  1% {\n    top: -15px;\n  }\n  2% {\n    top: 10px;\n  }\n  5% {\n    top: -20px;\n  }\n  10% {\n    left: -10px;\n  }\n  20% {\n    top: -25px;\n  }\n  30% {\n    left: 15px;\n    background: #15db95;\n  }\n  35% {\n    top: 5px;\n  }\n  45% {\n    top: -5px;\n  }\n  50% {\n    top: -5px;\n  }\n  60% {\n    top: -6px;\n  }\n  70% {\n    top: 6px;\n  }\n  80% {\n    top: 6px;\n  }\n  60% {\n    top: -6px;\n  }\n}\n@keyframes spinnerLoad {\n  1% {\n    top: -15px;\n  }\n  2% {\n    top: 10px;\n  }\n  5% {\n    top: -20px;\n  }\n  10% {\n    left: -10px;\n  }\n  20% {\n    top: -25px;\n  }\n  30% {\n    left: 15px;\n    background: #15db95;\n  }\n  35% {\n    top: 5px;\n  }\n  45% {\n    top: -5px;\n  }\n  50% {\n    top: -5px;\n  }\n  60% {\n    top: -6px;\n  }\n  70% {\n    top: 6px;\n  }\n  80% {\n    top: 6px;\n  }\n  60% {\n    top: -6px;\n  }\n}\n@-webkit-keyframes spinnerDelay {\n  0%,\n  40%,\n  100% {\n    -webkit-transform: scaleY(0.4);\n  }\n  20% {\n    -webkit-transform: scaleY(1);\n  }\n}\n@keyframes spinnerDelay {\n  0%,\n  40%,\n  100% {\n    transform: scaleY(0.4);\n    -webkit-transform: scaleY(0.4);\n  }\n  20% {\n    transform: scaleY(1);\n    -webkit-transform: scaleY(1);\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 05.Header\n/* ---------------------------------------------------------------- */\n.header {\n  position: fixed;\n  width: 100%;\n  z-index: 555;\n  padding: 30px 0;\n}\n.header-shrink {\n  top: 0;\n  left: 0;\n  padding: 20px 0;\n  background: #0033cc;\n  -webkit-box-shadow: 0px 13px 35px -12px rgba(0, 0, 0, 0.15);\n  box-shadow: 0px 13px 35px -12px rgba(0, 0, 0, 0.15);\n  -webkit-animation: stickyMenu 0.7s ease-in-out;\n  animation: stickyMenu 0.7s ease-in-out;\n}\n.header .navbar {\n  padding: 0;\n}\n.header .main-menu .navbar-nav .nav-link {\n  margin: 0 0 0 20px;\n  font-weight: 500;\n  font-size: 13px;\n  display: inline-block;\n  padding: 10px 0;\n  text-transform: uppercase;\n  letter-spacing: 0.6px;\n  opacity: 0.7;\n  -webkit-transition: all 0.5s;\n  -o-transition: all 0.5s;\n  transition: all 0.5s;\n  position: relative;\n  color: #fff;\n}\n.header .main-menu .navbar-nav li:first-child .nav-link {\n  margin-left: 0;\n}\n.header .main-menu .nav-link.active,\n.main-menu .nav-item .nav-link:hover {\n  opacity: 1;\n}\n.main-menu .nav-link.active::after {\n  content: '';\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 2px;\n  background-color: #fff;\n}\n.main-menu .navbar-nav .nav-link:not(.active)::after {\n  content: '';\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  width: 100%;\n  height: 2px;\n  background-color: #fff;\n  -webkit-transition: transform 0.5s;\n  -o-transition: transform 0.5s;\n  transition: transform 0.5s;\n  -webkit-transform: scaleX(0);\n  -ms-transform: scaleX(0);\n  -o-transform: scaleX(0);\n  transform: scaleX(0);\n  -webkit-transform-origin: 100% 0;\n  -moz-transform-origin: 100% 0;\n  -ms-transform-origin: 100% 0;\n  -o-transform-origin: 100% 0;\n  transform-origin: 100% 0;\n}\n.main-menu .navbar-nav .nav-link:not(.active):hover::after {\n  -webkit-transform: scaleX(1);\n  -ms-transform: scaleX(1);\n  -o-transform: scaleX(1);\n  transform: scaleX(1);\n  -webkit-transform-origin: 0 0;\n  -moz-transform-origin: 0 0;\n  -ms-transform-origin: 0 0;\n  -o-transform-origin: 0 0;\n  transform-origin: 0 0;\n}\n.navbar-toggler {\n  padding: 0;\n}\n.navbar-brand {\n  padding: 0;\n  margin: 0;\n  font-size: 24px;\n  font-weight: bold;\n  color: #fff !important;\n}\n.navbar-brand:hover {\n  color: #fff !important;\n}\n.navbar-toggler {\n  outline: none;\n  border: none;\n}\n.navbar-toggler {\n  margin-right: 15px;\n}\n.togler-icon-inner > span {\n  display: block;\n  background: #fff;\n  height: 3px;\n  margin: 5px;\n  width: 30px;\n  -webkit-transition: all 0.3s ease;\n  -o-transition: all 0.3s ease;\n  transition: all 0.3s ease;\n}\n.togler-icon-inner > span:nth-child(2) {\n  width: 20px !important;\n  margin-left: auto;\n}\n.togler-icon-inner > span:last-child {\n  margin-bottom: 0;\n}\n.navbar-toggler[aria-expanded='true'] .togler-icon-inner > span:nth-child(1) {\n  -webkit-transform: rotate(-45deg) translate(-5px, 6px);\n  -ms-transform: rotate(-45deg) translate(-5px, 6px);\n  -o-transform: rotate(-45deg) translate(-5px, 6px);\n  transform: rotate(-45deg) translate(-5px, 6px);\n}\n.navbar-toggler[aria-expanded='true'] .togler-icon-inner > span:nth-child(3) {\n  -webkit-transform: rotate(45deg) translate(-5px, -6px);\n  -ms-transform: rotate(45deg) translate(-5px, -6px);\n  -o-transform: rotate(45deg) translate(-5px, -6px);\n  transform: rotate(45deg) translate(-5px, -6px);\n}\n\n.navbar-toggler[aria-expanded='true'] .togler-icon-inner > span:nth-child(2) {\n  opacity: 0;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .header .container,\n  .header,\n  .header ul li {\n    padding: 0;\n  }\n  .header .container {\n    max-width: 100%;\n  }\n  .header .main-menu {\n    background: #0033cc;\n  }\n  .header .main-menu .navbar-nav .nav-link {\n    margin: 0;\n    display: block;\n    padding: 12px 20px;\n    color: #fff;\n  }\n  .header .main-menu .navbar-nav .nav-link:not(.active):hover,\n  .header .main-menu .navbar-nav .nav-link.active {\n    background: rgba(255, 255, 255, 0.15);\n    color: #fff;\n  }\n  .header .main-menu .navbar-nav .nav-link::after {\n    display: none;\n  }\n  .navbar-brand {\n    padding: 20px 0 20px 20px;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 06.Hero Section\n/* ---------------------------------------------------------------- */\n.first-section {\n  overflow: hidden;\n  padding-bottom: 8px;\n}\n.first-section section {\n  overflow: initial;\n}\n.hero-section {\n  position: relative;\n  height: 900px;\n  background-repeat: no-repeat;\n  z-index: 42;\n  background: #0033cc;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 800 400'%3E%3Cdefs%3E%3CradialGradient id='a' cx='396' cy='281' r='514' gradientUnits='userSpaceOnUse'%3E%3Cstop offset='0' stop-color='%230033cc'/%3E%3Cstop offset='1' stop-color='%230033cc'/%3E%3C/radialGradient%3E%3ClinearGradient id='b' gradientUnits='userSpaceOnUse' x1='400' y1='148' x2='400' y2='333'%3E%3Cstop offset='0' stop-color='%23385dff' stop-opacity='0'/%3E%3Cstop offset='1' stop-color='%23385dff' stop-opacity='0.5'/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect fill='url(%23a)' width='800' height='400'/%3E%3Cg fill-opacity='0.5'%3E%3Ccircle fill='url(%23b)' cx='267.5' cy='61' r='300'/%3E%3Ccircle fill='url(%23b)' cx='532.5' cy='61' r='300'/%3E%3Ccircle fill='url(%23b)' cx='400' cy='30' r='300'/%3E%3C/g%3E%3C/svg%3E\");\n  background-size: cover;\n}\n.hero-section::after {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n}\n.hero-section-title {\n  margin-bottom: 30px;\n  line-height: 1.2;\n  color: #fff;\n  text-align: left;\n}\n.hero-section-subtitle {\n  margin: 0 0 40px;\n  font-size: 1.125rem;\n  opacity: 0.85;\n  color: #fff;\n  text-align: left;\n}\n\n/* Hero Button Group */\n.down-scroll {\n  cursor: pointer;\n  color: #15db95 !important;\n  background: #fff;\n  text-align: center;\n  font-size: 16px;\n  position: absolute;\n  left: 50%;\n  z-index: 15;\n  border-radius: 5px;\n  bottom: 25px;\n  width: 48px;\n  height: 48px;\n  line-height: 48px;\n  -webkit-transform: translateX(-50%);\n  -moz-transform: translateX(-50%);\n  -ms-transform: translateX(-50%);\n  transform: translateX(-50%);\n  -webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 10px 20px rgba(0, 0, 0, 0.1);\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .hero-section {\n    padding-top: 80px;\n  }\n  .hero-section .hero-image {\n    display: none;\n  }\n  .hero-section,\n  .hero-section-2,\n  .parallax-bg {\n    text-align: center;\n    background-position: 100% 0;\n  }\n  .hero-section .container .row,\n  .hero-section-2 .container .row,\n  .parallax-bg .container .row {\n    justify-content: center !important;\n  }\n  .hero-section-subtitle {\n    font-size: 1rem;\n  }\n}\n\n/* ------------------------------------------------------------- */\n/* Responsive Media Query\n * Extra small devices (portrait phones, less than 576px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 575.98px) {\n  .hero-section-title {\n    font-size: 2rem;\n  }\n  section .button-group-hero {\n    display: none !important;\n  }\n  .hero-section,\n  .hero-section-2,\n  .parallax-bg {\n    height: 650px !important;\n  }\n  .hero-section,\n  .hero-section-2,\n  .parallax-bg {\n    background-position: 100% 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 07.Services\n/* ---------------------------------------------------------------- */\n.services-item {\n  padding: 30px;\n  background: #fff;\n  position: relative;\n  border-radius: 10px;\n}\n.services-item .services-icon {\n  display: inline-block;\n  height: 40px;\n  width: 40px;\n  margin-bottom: 20px;\n  text-align: center;\n  font-size: 24px;\n  line-height: 40px;\n  border-radius: 10px;\n  background: #0033cc;\n  color: #fff;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n}\n.no-shadow {\n  box-shadow: none !important;\n}\n.services-icon span {\n  position: relative;\n  display: inline-block;\n}\n.services-img {\n  background-color: initial !important;\n}\n.services-img img {\n  width: 100%;\n  height: 100%;\n}\n.not-line:before {\n  background-color: initial !important;\n}\n.box-title {\n  font-size: 24px;\n  font-family: PingFangSC-Semibold, PingFang SC;\n  font-weight: 600;\n  color: #000000;\n  margin-left: 23px;\n}\n.services-body h5 {\n  margin-bottom: 10px;\n}\n.services-body + .services-link {\n  display: inline-block;\n  border-radius: 5px;\n  font-size: 14px;\n  padding: 10px 20px;\n  color: #fff !important;\n  background: #15db95;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n}\n.services-body + .services-link:hover {\n  background: #12bd81;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .services-resp-margin:nth-child(3) {\n    margin-top: 30px;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Extra small devices (portrait phones, less than 576px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 575.98px) {\n  .services-resp-margin {\n    margin-top: 30px;\n  }\n  .services-resp-margin:first-child {\n    margin-top: 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 08.About\n/* ---------------------------------------------------------------- */\n.about {\n  background: #f0f3fc;\n}\n.about-list {\n  margin: 0 0 40px 0;\n}\n.about-list ul > li > i {\n  margin-right: 15px;\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n  text-align: center;\n  display: inline-block;\n  border-radius: 5px;\n  font-size: 10px;\n}\n.about-list ul > li > i img {\n  vertical-align: middle;\n}\n.about-list ul > li {\n  margin-top: 15px;\n  font-weight: 500;\n  color: #111;\n}\n.about-list ul > li:first-child {\n  margin-top: 0;\n}\n.about-container {\n  padding: 0 26px;\n}\n.about-inner h3 {\n  margin-bottom: 15px;\n  line-height: 1.35;\n}\n.about-inner p {\n  margin-bottom: 30px;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Small devices (landscape phones, less than 768px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 767.98px) {\n  .about-inner {\n    margin-top: 50px;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 09.Features\n/* ---------------------------------------------------------------- */\n.features-list {\n  display: inline-block;\n}\n.features-list > li {\n  margin-top: 15px;\n  padding: 20px;\n  border-radius: 5px;\n  -webkit-box-shadow: 0 10px 30px 0 rgba(0, 51, 204, 0.1);\n  box-shadow: 0 10px 20px 0 rgba(0, 51, 204, 0.1);\n}\n.features-list > li:first-child {\n  margin-top: 0;\n}\n.features-list > li h6 {\n  margin-bottom: 10px;\n}\n.features-list i {\n  display: inline-block;\n  margin-right: 20px;\n  font-size: 40px;\n  width: 80px;\n  height: 80px;\n  flex: 0 0 80px;\n  line-height: 80px;\n  border-radius: 5px;\n  text-align: center;\n  color: #fff;\n  background: #0033cc;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n}\n.features-inner > h3 {\n  margin-bottom: 15px;\n}\n.features-inner > p {\n  margin-bottom: 30px;\n}\n.features-image-pattern {\n  position: relative;\n}\n.features-circle {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 500px;\n  height: 500px;\n  border-radius: 50%;\n  -webkit-transform: translateY(-50%);\n  -ms-transform: translateY(-50%);\n  transform: translate(-50%, -50%);\n  background-position: center;\n  background: #0033cc;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .features-image-mb {\n    margin-bottom: 30px;\n  }\n  .features-image-order {\n    order: 2;\n  }\n  .features-circle {\n    display: none;\n  }\n  .features-image-resp {\n    text-align: left !important;\n  }\n}\n.features-row-mt {\n  margin-top: 100px;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Small devices (landscape phones, less than 768px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 767.98px) {\n  .features-image-resp {\n    margin-top: 60px;\n  }\n  .features-row-mt {\n    margin-top: 60px;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 10.How it Works\n/* ---------------------------------------------------------------- */\n.how-it-works-section {\n  position: relative;\n}\n.how-it-works-bg {\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background-color: #0033cc;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 800 800'%3E%3Cg %3E%3Ccircle fill='%230033cc' cx='400' cy='400' r='600'/%3E%3Ccircle fill='%230032c6' cx='400' cy='400' r='500'/%3E%3Ccircle fill='%230030c1' cx='400' cy='400' r='400'/%3E%3Ccircle fill='%23002fbb' cx='400' cy='400' r='300'/%3E%3Ccircle fill='%23002db6' cx='400' cy='400' r='200'/%3E%3Ccircle fill='%23002cb0' cx='400' cy='400' r='100'/%3E%3C/g%3E%3C/svg%3E\");\n  background-size: cover;\n}\n/* How it works inner */\n.how-it-works-inner {\n  margin-bottom: 100px;\n}\n.how-it-works-inner > h3 {\n  margin-bottom: 15px;\n}\n.how-it-works-inner p {\n  margin-bottom: 40px;\n  color: #fff;\n  opacity: 0.85;\n}\n\n/* How it works video */\n.how-it-work-video {\n  position: relative;\n}\n.how-it-work-video a {\n  font-size: 14px;\n}\n.how-it-works-video-btn {\n  position: absolute;\n  text-align: center;\n  height: 80px;\n  width: 80px;\n  line-height: 80px;\n  top: 50%;\n  left: 50%;\n  transform: translate(-50%, -50%);\n  border-radius: 50%;\n  cursor: pointer;\n  font-size: 40px;\n  background: #15db95;\n  color: #fff !important;\n  -webkit-animation: shadowPulse 2s linear infinite;\n  animation: shadowPulse 2s linear infinite;\n  -webkit-box-shadow: 0 0 0 10px rgba(21, 219, 150, 0.4);\n  box-shadow: 0 0 0 10px rgba(21, 219, 150, 0.4);\n}\n\n/* How it work process */\n.how-it-work-item {\n  padding: 0;\n}\n.how-it-work-number {\n  position: relative;\n  z-index: 52;\n  margin-bottom: 40px;\n}\n.how-it-work-item .how-it-work-number::before {\n  content: '';\n  position: absolute;\n  top: 50%;\n  right: -50%;\n  width: 100%;\n  transform: translateY(-50%);\n  box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.15);\n  z-index: -7;\n  border: 2px dashed #fff;\n}\n.how-it-work-item:last-child .how-it-work-number::before {\n  display: none;\n}\n.how-it-work-number > a > span {\n  text-align: center;\n  height: 80px;\n  width: 80px;\n  display: inline-block;\n  line-height: 80px;\n  border-radius: 50%;\n  cursor: pointer;\n  font-size: 26px;\n  color: #000;\n  background: #fff;\n  font-weight: 500;\n  transition: all 0.2s linear;\n  box-shadow: 0 0 0 10px #315ad6, 0 0 0 20px #1a48d1;\n}\n.how-it-work-item.active a > span {\n  color: #fff !important;\n  font-family: 'Poppins', sans-serif;\n  background-position: center;\n  background: #15db95;\n}\n.how-it-work-item:hover .how-it-work-number > a > span {\n  background: #15db95;\n  color: #fff !important;\n}\n.how-it-work-item h6 {\n  color: #fff;\n  font-size: 20px;\n  margin-bottom: 10px;\n}\n.how-it-work-text p {\n  color: #fff;\n  opacity: 0.85;\n}\n.how-it-work-text {\n  padding-left: 15px;\n  padding-right: 15px;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .how-it-work-item:nth-child(1),\n  .how-it-work-item:nth-child(2) {\n    margin-bottom: 50px;\n  }\n  .how-it-work-item:nth-child(2) .how-it-work-number::before {\n    display: none;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Extra small devices (portrait phones, less than 576px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 575.98px) {\n  .how-it-work-item {\n    margin-bottom: 30px;\n  }\n  .how-it-work-item .how-it-work-number::before {\n    display: none !important;\n  }\n  .how-it-work-item:last-child {\n    margin-bottom: 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 11.Screenshots\n/* ---------------------------------------------------------------- */\n.screenshots-slider {\n  position: relative;\n}\n.screenshots-slider .owl-item {\n  -webkit-transform: scale(0.9, 0.9);\n  transform: scale(0.95, 0.95);\n  opacity: 0.6;\n}\n.screenshots-slider .owl-item img,\n.screenshots-slider .owl-item {\n  border-radius: 10px !important;\n}\n.screenshots-slider .active.center {\n  opacity: 1;\n  -webkit-transform: scale(1, 1);\n  transform: scale(1);\n}\n.screenshots-slider.owl-theme .owl-nav button {\n  position: absolute;\n  top: 50%;\n  display: inline-block;\n  border-radius: 5px;\n  font-size: 14px;\n  height: 50px;\n  width: 50px;\n  color: #fff !important;\n  background: #15db95;\n  -webkit-transform: translateY(-50%);\n  -moz-transform: translateY(-50%);\n  transform: translateY(-50%);\n  -webkit-box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n}\n.screenshots-slider.owl-theme .owl-nav button:hover {\n  color: #fff !important;\n  background: #12bd81;\n}\n.screenshots-slider.owl-theme .owl-nav button.owl-next {\n  right: -30px;\n}\n.screenshots-slider.owl-theme .owl-nav button.owl-prev {\n  left: -30px;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Small devices (landscape phones, less than 768px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 767.98px) {\n  .screenshots-slider.owl-theme .owl-nav button.owl-next {\n    right: 0;\n  }\n  .screenshots-slider.owl-theme .owl-nav button.owl-prev {\n    left: 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 12.Pricing\n/* ---------------------------------------------------------------- */\n.price-toggle-wrap {\n  text-align: center;\n  margin-bottom: 60px;\n  display: inline-block;\n  margin: 0 auto 60px auto;\n  padding: 10px;\n  border-radius: 5px;\n  -webkit-box-shadow: 0 10px 30px 0 rgba(0, 51, 204, 0.1);\n  box-shadow: 0 10px 20px 0 rgba(0, 51, 204, 0.1);\n}\n.pricing-tab-content {\n  display: none;\n}\n.pricing-tab-content.active {\n  display: block;\n}\n.price-toggle-wrap > a {\n  padding: 20px 50px;\n  float: left;\n  border-radius: 5px;\n  margin-right: 10px;\n  background-position: center;\n  position: relative;\n  overflow: hidden;\n  background-color: #e8eafd;\n  color: #0033cc;\n}\n.price-toggle-wrap > a.active {\n  background-position: center;\n  background: #0033cc;\n  color: #fff;\n}\n\n/* Price Table */\n.price-table {\n  border-radius: 5px;\n  padding: 40px 0;\n  background: #fff;\n}\n.price-table-active .price-table {\n  background: #0033cc;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n}\n.price-table-active .price-icon span {\n  background: #fff;\n  color: #0033cc;\n}\n.price-table-active h4,\n.price-table-active li,\n.price-table-active .price-body > ul > li::before,\n.price-table-active .price-table h5 {\n  color: #fff !important;\n}\n.price-table .price-header,\n.price-body,\n.price-btn-wrap {\n  padding: 0 30px;\n}\n.price-btn-wrap {\n  text-align: center;\n}\n.price-table .price-header h4 {\n  font-size: 1.4rem;\n  text-transform: capitalize;\n  margin-bottom: 8px;\n}\n.price-icon span {\n  height: 80px;\n  width: 80px;\n  text-align: center;\n  display: block;\n  font-size: 40px;\n  border-radius: 5px;\n  line-height: 80px;\n  background: #0033cc;\n  color: #fff;\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(0, 51, 204, 0.15);\n}\n.price-table .price-value h5 {\n  font-size: 2rem;\n}\n.price-table h5 > sub {\n  vertical-align: initial;\n  bottom: 0;\n}\n.price-body {\n  border-top: 1px solid rgba(0, 0, 0, 0.062);\n  margin: 40px 0;\n  padding-top: 30px;\n  padding-bottom: 30px;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.062);\n}\n.price-table-active .price-body {\n  border-top: 1px solid rgba(255, 255, 255, 0.2);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.2);\n}\n.price-table-active .price-table .price-body > ul > li::after {\n  color: #fff;\n}\n.price-table .price-body > ul {\n  text-align: left;\n}\n.price-table .price-body > ul > li {\n  margin-bottom: 15px;\n}\n.price-table .price-body > ul > li::before {\n  content: '\\f0da';\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 600;\n  margin-right: 15px;\n  color: #15db95;\n}\n.price-table .price-body > ul > li::after {\n  content: '\\f00c';\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 600;\n  color: #15db95;\n  float: right;\n}\n.price-table .price-body > ul > li:last-child {\n  margin-bottom: 0;\n}\n.price-table .default-btn {\n  display: block;\n}\n\n.price-table-active .default-btn {\n  background: #fff;\n  color: #0033cc !important;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .price-table-margin {\n    margin-bottom: 50px;\n  }\n}\n.team-container {\n  width: 100%;\n  overflow-x: auto;\n  margin-bottom: 40px;\n}\n.team-box {\n  text-align: center;\n  padding-top: 20px;\n}\n.team-box::after {\n  clear: both;\n  content: '';\n  display: block;\n}\n.team-card {\n  width: 220px;\n  font-size: 14px;\n  height: 130px;\n  background: #ffffff;\n  box-shadow: 0px 0px 40px 0px rgb(110 127 193 / 10%);\n  border-radius: 20px;\n  margin-right: 32px;\n  padding: 30px 12px;\n  display: inline-block;\n  margin-bottom: 20px;\n  text-align: inherit;\n}\n.team-card img {\n  width: 60px;\n  height: 60px;\n  border-radius: 50%;\n}\n.team-card .team-info {\n  display: inline-block;\n  vertical-align: middle;\n  margin-left: 10px;\n  font-family: PingFangSC-Medium, PingFang SC;\n}\n.team-card .team-info p {\n  font-size: 16px;\n  font-weight: 500;\n  color: #232323;\n  line-height: 30px;\n  margin-bottom: 2px;\n}\n.team-card .team-info span {\n  font-size: 16px;\n  font-weight: 400;\n  color: #7a7a7a;\n  line-height: 30px;\n}\n/* ---------------------------------------------------------------- */\n/* 13.Testimonial Section\n/* ---------------------------------------------------------------- */\n.testimonial-section {\n  position: relative;\n}\n.testimonial-section-bg {\n  width: 100%;\n  height: 100%;\n  background-color: #0033cc;\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='100%25' height='100%25' viewBox='0 0 1600 800'%3E%3Cg %3E%3Cpath fill='%230033cc' d='M486 705.8c-109.3-21.8-223.4-32.2-335.3-19.4C99.5 692.1 49 703 0 719.8V800h843.8c-115.9-33.2-230.8-68.1-347.6-92.2C492.8 707.1 489.4 706.5 486 705.8z'/%3E%3Cpath fill='%230033cc' d='M1600 0H0v719.8c49-16.8 99.5-27.8 150.7-33.5c111.9-12.7 226-2.4 335.3 19.4c3.4 0.7 6.8 1.4 10.2 2c116.8 24 231.7 59 347.6 92.2H1600V0z'/%3E%3Cpath fill='%230033cc' d='M478.4 581c3.2 0.8 6.4 1.7 9.5 2.5c196.2 52.5 388.7 133.5 593.5 176.6c174.2 36.6 349.5 29.2 518.6-10.2V0H0v574.9c52.3-17.6 106.5-27.7 161.1-30.9C268.4 537.4 375.7 554.2 478.4 581z'/%3E%3Cpath fill='%230033cc' d='M0 0v429.4c55.6-18.4 113.5-27.3 171.4-27.7c102.8-0.8 203.2 22.7 299.3 54.5c3 1 5.9 2 8.9 3c183.6 62 365.7 146.1 562.4 192.1c186.7 43.7 376.3 34.4 557.9-12.6V0H0z'/%3E%3Cpath fill='%230033cc' d='M181.8 259.4c98.2 6 191.9 35.2 281.3 72.1c2.8 1.1 5.5 2.3 8.3 3.4c171 71.6 342.7 158.5 531.3 207.7c198.8 51.8 403.4 40.8 597.3-14.8V0H0v283.2C59 263.6 120.6 255.7 181.8 259.4z'/%3E%3Cpath fill='%230035d3' d='M1600 0H0v136.3c62.3-20.9 127.7-27.5 192.2-19.2c93.6 12.1 180.5 47.7 263.3 89.6c2.6 1.3 5.1 2.6 7.7 3.9c158.4 81.1 319.7 170.9 500.3 223.2c210.5 61 430.8 49 636.6-16.6V0z'/%3E%3Cpath fill='%230036d9' d='M454.9 86.3C600.7 177 751.6 269.3 924.1 325c208.6 67.4 431.3 60.8 637.9-5.3c12.8-4.1 25.4-8.4 38.1-12.9V0H288.1c56 21.3 108.7 50.6 159.7 82C450.2 83.4 452.5 84.9 454.9 86.3z'/%3E%3Cpath fill='%230038e0' d='M1600 0H498c118.1 85.8 243.5 164.5 386.8 216.2c191.8 69.2 400 74.7 595 21.1c40.8-11.2 81.1-25.2 120.3-41.7V0z'/%3E%3Cpath fill='%230039e6' d='M1397.5 154.8c47.2-10.6 93.6-25.3 138.6-43.8c21.7-8.9 43-18.8 63.9-29.5V0H643.4c62.9 41.7 129.7 78.2 202.1 107.4C1020.4 178.1 1214.2 196.1 1397.5 154.8z'/%3E%3Cpath fill='%23003bed' d='M1315.3 72.4c75.3-12.6 148.9-37.1 216.8-72.4h-723C966.8 71 1144.7 101 1315.3 72.4z'/%3E%3C/g%3E%3C/svg%3E\");\n  background-attachment: fixed;\n  background-size: cover;\n}\n.testimonial-section .section-title::after,\n.testimonial-section .section-title::before {\n  background: #fff;\n}\n.testimonial-section .section-sub-title {\n  opacity: 0.9;\n}\n.testimonial-item {\n  padding: 30px;\n  background: #fff;\n  position: relative;\n  border-radius: 5px;\n  box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2);\n  margin: 0 0 30px 0;\n}\n.testimonial-item::before {\n  content: '';\n  position: absolute;\n  bottom: -15px;\n  left: 50%;\n  width: 90%;\n  height: 15px;\n  background: #fff;\n  box-shadow: 0 2px 10px 0 rgba(0, 0, 0, 0.2);\n  transform: translateX(-50%);\n  border-radius: 0 0 5px 5px;\n  z-index: -7;\n}\n.testimonial-text p::after {\n  content: '\\f10e';\n  margin-left: 7px;\n}\n.testimonial-text p::before {\n  content: '\\f10d';\n  margin-right: 7px;\n}\n.testimonial-text p::after,\n.testimonial-text p::before {\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 600;\n  display: inline-block;\n  color: #fff;\n  font-size: 10px;\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n  text-align: center;\n  border-radius: 5px;\n  background: #15db95;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n}\n.testimonial-text p {\n  font-style: italic;\n}\n.testimonial-rating {\n  margin-top: 15px;\n}\n.testimonial-rating i {\n  margin-right: 2px;\n  color: #fff;\n  font-size: 10px;\n  border-radius: 5px;\n  width: 24px;\n  height: 24px;\n  line-height: 24px;\n  text-align: center;\n  background: #15db95;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n}\n.testimonial-rating i:last-child {\n  margin-right: 0;\n}\n.testimonial-img {\n  flex: 0 0 100px;\n}\n.testimonial-body {\n  margin-bottom: 30px;\n}\n.testimonial-body img {\n  width: inherit !important;\n  border-radius: 5px;\n  display: inline-block !important;\n  text-align: center;\n}\n\n/* Owl Carousel */\n.testimonial-section .testimonial-slider .owl-dots {\n  margin-top: 60px !important;\n}\n.testimonial-section .owl-theme .owl-dot span {\n  width: 10px;\n  height: 8px;\n  border-radius: inherit;\n  border-color: #fff;\n  background-size: cover;\n  background: #fff;\n  opacity: 0.5;\n  margin-right: 0;\n  -webkit-transition: all 0.25s linear;\n  transition: all 0.25s linear;\n}\n.testimonial-section .owl-theme .owl-dot.active span {\n  width: 20px;\n  opacity: 1 !important;\n}\n\n/* Testimonial Counters */\n.counters {\n  padding-top: 100px;\n}\n.counter-icon {\n  position: relative;\n  display: inline-block;\n  font-size: 50px;\n  width: 100px;\n  height: 100px;\n  line-height: 100px;\n  display: inline-block;\n  text-align: center;\n  color: #fff;\n  border-radius: 50%;\n  margin-bottom: 30px;\n}\n.counter-body h2 {\n  font-size: 38px !important;\n  line-height: 1;\n  margin-bottom: 10px;\n}\n.counter-icon,\n.counter-body p,\n.counter-body h2 {\n  color: #fff;\n}\n.counter-body p {\n  opacity: 0.85;\n}\n.counter-icon::after,\n.counter-icon::before {\n  content: '';\n  display: block;\n  position: absolute;\n  border-radius: 50%;\n  border: 1px solid #fff;\n  left: -20px;\n  right: -20px;\n  top: -20px;\n  bottom: -20px;\n  opacity: 0;\n  animation: iconPulse 1s linear infinite;\n}\n.counter-icon::after {\n  animation-delay: 0.5s;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .counters-item:nth-child(1),\n  .counters-item:nth-child(2) {\n    margin-bottom: 50px;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Extra small devices (portrait phones, less than 576px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 575.98px) {\n  .counters-item {\n    margin-bottom: 30px;\n  }\n  .counters-item:last-child {\n    margin-bottom: 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 14.Our Team\n/* ---------------------------------------------------------------- */\n.team-card {\n  position: relative;\n  border-radius: 10px;\n  background: #fff;\n}\n.team-card .team-img {\n  position: relative;\n  overflow: hidden;\n  border-radius: 10px;\n}\n.team-card .team-img:after {\n  content: '';\n  width: 100%;\n  height: 100%;\n  position: absolute;\n  bottom: -100%;\n  left: 0;\n  transition: all 0.35s ease-in-out 0s;\n  background: #0033cc;\n  opacity: 0.8;\n}\n.team-card:hover .team-img:after {\n  bottom: 0;\n}\n.team-card .team-social {\n  position: absolute;\n  top: -100%;\n  width: 100%;\n  left: 0;\n  height: 100%;\n  z-index: 1;\n  border-radius: 5px;\n  display: none;\n}\n.team-card .team-social li {\n  display: inline-block;\n}\n.team-card:hover .team-social {\n  top: 0;\n  display: flex;\n  justify-content: center;\n  align-items: center;\n  justify-content: center;\n}\n.team-card:hover .team-social a {\n  animation: fadeInUp 0.6s ease-in-out forwards;\n}\n.team-card .team-social li a {\n  display: inline-block;\n  width: 50px;\n  height: 50px;\n  line-height: 50px;\n  background: #15db95;\n  color: #ffffff;\n  border-radius: 5px;\n  transition: all 0.3s ease 0s;\n  margin-right: 5px;\n  border: 2px solid transparent;\n}\n.team-card .team-social li:last-child a {\n  margin-right: 0;\n}\n.team-card:hover .team-social li a:hover {\n  color: #fff;\n  background: transparent;\n  border: 2px solid #fff;\n}\n.team-card .team-card-content {\n  padding: 30px 0;\n}\n.team-card .title {\n  font-size: 20px;\n  text-transform: capitalize;\n  margin: 0 0 10px;\n  position: relative;\n}\n.team-card .desc {\n  display: inline-block;\n  margin-bottom: 10px;\n  border-radius: 5px;\n  font-size: 14px;\n  padding: 10px 20px;\n  color: #fff !important;\n  background: #15db95;\n  text-transform: capitalize;\n  -webkit-box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n  box-shadow: 0 10px 16px 0 rgba(21, 219, 150, 0.15);\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Small devices (landscape phones, less than 768px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 767.98px) {\n  .team-card-margin {\n    margin-top: 30px !important;\n  }\n  .team-card-margin:nth-child(1) {\n    margin-top: 0 !important;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 20.Footer\n/* ---------------------------------------------------------------- */\n.footer {\n  background: rgb(0, 14, 56);\n}\n.footer-top {\n  padding: 80px 0;\n}\n.footer-title {\n  margin-bottom: 30px;\n  font-weight: 500;\n  color: #fff;\n}\n.footer-title::after {\n  content: '';\n  width: 50px;\n  height: 2px;\n  background: #fff;\n  display: block;\n  margin-top: 15px;\n}\n.contact-info-footer {\n  margin-top: 10px;\n}\n.footer li {\n  margin-top: 10px;\n  color: #fff;\n  opacity: 0.6;\n}\n.footer li:first-child {\n  margin-top: 0;\n}\n.footer-links > li::before {\n  content: '\\f105';\n  display: inline-block;\n  margin-right: 10px;\n  font-family: 'Font Awesome 5 Free';\n  font-weight: 600;\n  vertical-align: top;\n}\n.footer-links > li:hover {\n  opacity: 1;\n}\n.footer-logo {\n  display: inline-block;\n  margin-bottom: 20px;\n}\n.footer p {\n  color: #fff;\n  opacity: 0.6;\n}\n.footer-box p i {\n  color: #fff;\n}\n\n/* Footer Social Links */\n.footer-social-links {\n  margin-top: 10px;\n}\n.footer-social-links > a {\n  height: 34px;\n  width: 34px;\n  margin-right: 5px;\n  display: inline-block;\n  line-height: 34px;\n  text-align: center;\n  border-radius: 50%;\n  background: rgba(255, 255, 255, 0.02);\n  color: #fff;\n}\n.footer-social-links > a:last-child {\n  margin-right: 0;\n}\n.footer-social-links > a:hover {\n  background: #12bd81;\n  color: #fff;\n}\n.contact-info-footer li i {\n  margin-right: 10px;\n}\n\n/* Copyright */\n.copyright {\n  padding: 25px 0;\n  background: rgba(255, 255, 255, 0.02);\n  color: #fff;\n  opacity: 0.75;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Medium devices (tablets, less than 992px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 991.98px) {\n  .footer-widget {\n    margin-bottom: 30px;\n  }\n  .footer-widget:nth-child(3),\n  .footer-widget:nth-child(4) {\n    margin-bottom: 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Extra small devices (portrait phones, less than 576px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 575.98px) {\n  .footer-widget {\n    margin-bottom: 30px !important;\n  }\n  .footer-widget:nth-child(4) {\n    margin-bottom: 0 !important;\n  }\n}\n\n/* ------------------------------------------------------------- */\n/* Responsive Media Query\n * Extra small devices (portrait phones, less than 576px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 575.98px) {\n  .signup-form-bg {\n    padding-top: 150px;\n    padding-bottom: 100px;\n    height: auto !important;\n  }\n  .signup-form-header,\n  .signup-form-inner {\n    padding: 15px;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* 24.Home Page Parallax Background\n/* ---------------------------------------------------------------- */\n.bg-jarallax-overlay {\n  position: relative;\n  background: none;\n}\n.bg-jarallax-overlay::before {\n  content: '';\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  color: #fff !important;\n  background-position: center;\n  background: #222;\n  background-size: 200% auto;\n  opacity: 0.75;\n}\n\n/* ---------------------------------------------------------------- */\n/* 25.Home Page Slider\n/* ---------------------------------------------------------------- */\n.hero-slider-wrap {\n  background: initial;\n}\n\n.hero-slider-wrap .vegas-overlay {\n  background: #222;\n  opacity: 0.75;\n}\n\n/* ---------------------------------------------------------------- */\n/* 26.Intro\n/* ---------------------------------------------------------------- */\n.intro-hero-title span {\n  text-transform: uppercase;\n  font-size: 3.5rem;\n  font-weight: 700;\n  display: block;\n  margin-bottom: 10px;\n  max-width: max-content;\n  padding: 10px 20px;\n  margin: 0 auto 15px auto;\n  border: 2px solid #fff;\n}\n.intro-hero-title {\n  color: #fff;\n  font-size: 2rem;\n  margin-bottom: 20px;\n  font-weight: 500;\n}\n.intro-hero-subtitle {\n  font-size: 1rem;\n  margin-bottom: 50px;\n  color: #fff;\n  opacity: 0.9;\n}\n.inner-pages-bg {\n  background: #e5faf7;\n}\n.demo-section,\n.intro-features {\n  padding: 100px 0;\n}\n.demo-item {\n  margin-bottom: 30px;\n  -webkit-box-shadow: 0 10px 30px 0 rgba(0, 0, 0, 0.1);\n  box-shadow: 0 10px 30px 0 rgba(0, 0, 0, 0.1);\n}\n.demo-item:hover {\n  -webkit-box-shadow: 0 20px 40px 0 rgba(0, 0, 0, 0.1);\n  box-shadow: 0 20px 40px 0 rgba(0, 0, 0, 0.1);\n}\n.demo-item .demo-item-link {\n  padding: 30px;\n  display: block;\n  color: #000;\n  background: #fff;\n  font-weight: 600;\n  font-size: 1.125rem;\n  -webkit-transition: all 0.25s ease;\n  -ms-transition: all 0.25s ease;\n  -o-transition: all 0.25s ease;\n  transition: all 0.25s ease;\n}\n.demo-item:hover .demo-item-link {\n  background: #0033cc;\n  color: #fff;\n}\n.demo-img {\n  position: relative;\n  overflow: hidden;\n  background-color: #fff;\n  background-size: cover;\n}\n.demo-img a {\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  cursor: pointer;\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Small devices (landscape phones, less than 768px)\n/* ---------------------------------------------------------------- */\n@media only screen and (min-width: 767.98px) {\n  .demo-margin-resp:last-child .demo-item,\n  .demo-margin-resp:nth-child(7) .demo-item,\n  .demo-margin-inner-page:last-child .demo-item,\n  .demo-margin-inner-page:nth-child(1) .demo-item {\n    margin-bottom: 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Small devices (landscape phones, less than 768px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 767.98px) {\n  .demo-margin-resp:last-child .demo-item {\n    margin-bottom: 0;\n  }\n  .demo-margin-inner-page:last-child .demo-item {\n    margin-bottom: 0;\n  }\n}\n\n/* ---------------------------------------------------------------- */\n/* Responsive Media Query\n * Extra small devices (portrait phones, less than 576px)\n/* ---------------------------------------------------------------- */\n@media only screen and (max-width: 575.98px) {\n  .intro-hero-title > span {\n    font-size: 2.5rem;\n  }\n  .intro-hero-title {\n    font-size: 1.6rem;\n  }\n}\n\n.bg-wave {\n  position: relative;\n  background: linear-gradient(to bottom, #fff, #f9faff);\n}\n\n.bg-wave::before,\n.bg-wave::after {\n  content: '';\n  position: absolute;\n  left: 50%;\n  min-width: 300vw;\n  min-height: 300vw;\n  background-color: #fff;\n  animation-name: rotate;\n  animation-iteration-count: infinite;\n  animation-timing-function: linear;\n}\n\n.bg-wave::before {\n  bottom: 3vh;\n  border-radius: 45%;\n  animation-duration: 12s;\n}\n\n.bg-wave::after {\n  bottom: 0vh;\n  opacity: 0.5;\n  border-radius: 47%;\n  animation-duration: 12s;\n}\n\n@keyframes rotate {\n  0% {\n    transform: translate(-50%, 0) rotateZ(0deg);\n  }\n  50% {\n    transform: translate(-50%, -2%) rotateZ(180deg);\n  }\n  100% {\n    transform: translate(-50%, 0%) rotateZ(360deg);\n  }\n}\n\n.bg-circle::after {\n  content: '';\n  position: absolute;\n  bottom: 0;\n  z-index: -1;\n  width: 100%;\n  height: 100%;\n  border-radius: 100%;\n  transform: translate(11px, -25px) rotate(13deg);\n  background: linear-gradient(160deg, #fff, #f9faff);\n}\n"
  },
  {
    "path": "website/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"zh-CN\">\n\n<head>\n  <!--// Meta Tags //-->\n  <meta charset=\"UTF-8\">\n  <link href=\"http://dooring.cn/uploads/logo_1742fd359da.png\" rel=\"shortcut icon\" type=\"image/vnd.microsoft.icon\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta name=\"description\" content=\"Dooring是一款功能强大，专业可靠的H5可视化页面配置解决方案，致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。\">\n  <meta name=\"keywords\" content=\"H5编辑器,表单设计,可视化,代码编辑器,H5,HTML5,javascript,react,nodejs,前端开发,github,开源\">\n  <meta name=\"author\" content=\"徐小夕\">\n  <!-- <meta name=\"robots\" content=\"noindex, nofollow\"> -->\n  <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n  <meta name=\"sogou_site_verification\" content=\"fvU1Vcgpcc\" />\n  <meta name=\"baidu-site-verification\" content=\"code-UskzpXvPYv\" />\n  <title>H5数据可视化搭建平台</title>\n  <!--// FrameWorks //-->\n  <link rel=\"stylesheet\" href=\"./css/frameworks.css\">\n  <!--// Theme Main Js //-->\n  <link rel=\"stylesheet\" href=\"./css/style.css\">\n</head>\n\n<body data-spy=\"scroll\" data-target=\"#fixedNavbar\" data-offset=\"0\">\n  <!--// Page Wrapper Start //-->\n  <div class=\"page-wrapper\" id=\"home\">\n    <!-- Header Start -->\n    <header class=\"header\">\n      <div class=\"container\">\n        <nav class=\"navbar navbar-expand-lg\">\n          <a class=\"navbar-brand\" href=\"/\">\n            H5-Dooring\n          </a>\n          <!--// .logo //-->\n          <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#fixedNavbar\"\n            aria-controls=\"fixedNavbar\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">\n            <span class=\"togler-icon-inner\">\n              <span class=\"line-1\"></span>\n              <span class=\"line-2\"></span>\n              <span class=\"line-3\"></span>\n            </span>\n          </button>\n          <div class=\"collapse navbar-collapse main-menu justify-content-end\" id=\"fixedNavbar\">\n            <ul class=\"navbar-nav\">\n              <li class=\"nav-item\">\n                <a class=\"nav-link active\" href=\"#\" data-scroll-nav=\"0\">首页</a>\n              </li>\n              <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"#\" data-scroll-nav=\"1\">特点</a>\n              </li>\n              <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"#\" data-scroll-nav=\"2\">介绍</a>\n              </li>\n              <li class=\"nav-item\">\n                <a class=\"nav-link\" href=\"#\" data-scroll-nav=\"4\">问题反馈</a>\n              </li>\n            </ul>\n          </div>\n        </nav>\n        <!--// .navbar-nav //-->\n      </div>\n      <!--// .container //-->\n    </header>\n    <!--// Header End  //-->\n\n    <!--// Hero Section Start //-->\n    <section class=\"first-section\" data-scroll-index=\"0\">\n      <section class=\"hero-section\" data-scroll-index=\"0\">\n        <div class=\"container h-100\">\n          <div class=\"row align-items-center h-100\">\n            <div class=\"col-lg-6 col-md-8 col-sm-12\">\n              <h1 class=\"hero-section-title wow fadeInUp\" data-wow-delay=\"0.2s\">\n                让H5制作，更方便\n              </h1>\n              <p class=\"hero-section-subtitle wow fadeInUp\" data-wow-delay=\"0.3s\">\n                H5-Dooring是一款功能强大，高可扩展的H5可视化页面配置解决方案，致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。\n              </p>\n              <a href=\"http://h5.dooring.cn/h5_plus\" target=\"_blank\" class=\"default-outline-btn wow fadeInUp blue-btn\"\n                data-wow-delay=\"0.4s\">免费体验</a>\n              <a href=\"http://h5.dooring.cn/uploads/WechatIMG3_1758e9753e2.jpeg\" style=\"margin-left: 10px\"\n                target=\"_blank\" class=\"default-outline-btn wow fadeInUp blue-btn\"\n                data-wow-delay=\"0.4s\">GPL商业授权+私有化部署</a>\n              <a href=\"https://github.com/MrXujiang/h5-Dooring\" target=\"_blank\"\n                class=\"default-video-btn github wow fadeInUp blue-text\">在线文档</a>\n            </div>\n            <!--// .col //-->\n            <div class=\"col-lg-6 text-center wow fadeInRight\" style=\"overflow:hidden;padding:0;padding-top: 47px;\">\n              <img src=\"./img/phone@2x.png\" alt=\"Hero image\" style=\"width: 542px; border-radius: 32px\">\n            </div>\n            <!--// .col //-->\n          </div>\n          <!--// .row //-->\n        </div>\n      </section>\n    </section>\n    <!--// Hero Section End  //-->\n    <section class=\"services section-padding mobile-hidden\" data-scroll-index=\"1\">\n      <div class=\"container\">\n        <!--// .row //-->\n        <div class=\"row align-items-center justify-content-center \">\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.1s\">\n            <div class=\"services-item item-shadow\" style=\"box-shadow: none;\">\n              <div class=\"services-icon services-blue-icon services-img no-shadow\">\n                <img src=\"./img/所见即所得.png\" />\n              </div>\n              <span class=\"box-title\">所见即所得</span>\n              <div class=\"services-body\">\n                <p>\n                  无需编程，简单拖拽可视化模板或组件，即可生成精美H5页面\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n            <div class=\"services-item item-shadow\" style=\"box-shadow: none;\">\n              <div class=\"services-icon services-img no-shadow\">\n                <img src=\"./img/代码可移植.png\" />\n              </div>\n              <span class=\"box-title\">代码可移植</span>\n              <div class=\"services-body\">\n                <p>\n                  平台生成的H5前端代码，可植入任何系统，且支持二次开发\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n            <div class=\"services-item item-shadow\" style=\"box-shadow: none;\">\n              <div class=\"services-icon services-img no-shadow\">\n                <img src=\"./img/自动云同步.png\" />\n              </div>\n              <span class=\"box-title\">自动云同步</span>\n              <div class=\"services-body\">\n                <p>\n                  在线制作H5，登录账号同步保存，无需下载客户端.\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <!--// .container //-->\n    </section>\n    <!--// Services Section Start //-->\n    <section class=\"services section-padding pc-hidden\" data-scroll-index=\"2\">\n      <div class=\"container\">\n        <div class=\"row justify-content-center\">\n          <div class=\"col-lg-7\">\n            <div class=\"section-heading\">\n              <h2 class=\"section-title\">产品特点</h2>\n              <p class=\"section-sub-title\">\n                通过不断打磨和迭代，致力于打造功能更强大，操作更便捷的H5营销工具\n              </p>\n            </div>\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n        <div class=\"row align-items-center justify-content-center\">\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.1s\">\n            <div class=\"services-item item-shadow\">\n              <div class=\"services-icon services-blue-icon\">\n                1\n              </div>\n              <span class=\"box-title\">简单方便</span>\n              <div class=\"services-body\">\n                <p>\n                  任何人只需要傻瓜式拖拽或进行简单编辑即可生成精美的H5页面\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n            <div class=\"services-item item-shadow\">\n              <div class=\"services-icon\">\n                2\n              </div>\n              <span class=\"box-title\">插拔式体验</span>\n              <div class=\"services-body\">\n                <p>\n                  产品以GPL协议开源，可植入任何系统，并支持二次开发\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n            <div class=\"services-item item-shadow\">\n              <div class=\"services-icon\">\n                3\n              </div>\n              <span class=\"box-title\">持续迭代，无限可能</span>\n              <div class=\"services-body\">\n                <p>\n                  目前正在持续迭代中，后续可根具需求开发功能更强大的可视化系统.\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <!--// .container //-->\n    </section>\n\n    <section class=\"services section-padding mobile-hidden bg-wave\" data-scroll-index=\"3\">\n      <div class=\"container\" style=\"position:relative; z-index: 3;\">\n        <div class=\"row justify-content-center\">\n          <div class=\"col-lg-8\">\n            <div class=\"section-heading\">\n              <h2 class=\"section-title not-line\">拖拽生成H5页面</h2>\n              <p class=\"section-sub-title pc-section-sub-title text-center \">\n                提供丰富的页面组件，更方便的为使用者搭建更强大的H5落地页\n              </p>\n              <ul class=\"section-title-ul\">\n                <li class=\"first\">产品营销页面</li>\n                <li>企业/个人微官网</li>\n                <li>产品原型</li>\n                <li class=\"last\">H5活动页面</li>\n              </ul>\n              <a href=\"http://h5.dooring.cn/h5_plus\" target=\"_blank\"\n                class=\"default-outline-btn wow fadeInUp  section-sub-btn\" data-wow-delay=\"0.4s\">开始使用</a>\n            </div>\n          </div>\n          <img src=\"./img/pc.png\" class=\"\" />\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n        <div class=\"row align-items-center justify-content-center  pc-hidden\">\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.1s\">\n            <div class=\"services-item item-shadow\">\n              <div class=\"services-icon services-blue-icon\">\n                1\n              </div>\n              <span class=\"box-title\">简单方便</span>\n              <div class=\"services-body\">\n                <p>\n                  任何人只需要傻瓜式拖拽或进行简单编辑即可生成精美的H5页面\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n            <div class=\"services-item item-shadow\">\n              <div class=\"services-icon\">\n                2\n              </div>\n              <span class=\"box-title\">插拔式体验</span>\n              <div class=\"services-body\">\n                <p>\n                  产品以GPL协议开源，可植入任何系统，并支持二次开发\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n          <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n            <div class=\"services-item item-shadow\">\n              <div class=\"services-icon\">\n                3\n              </div>\n              <span class=\"box-title\">持续迭代，无限可能</span>\n              <div class=\"services-body\">\n                <p>\n                  目前正在持续迭代中，后续可根具需求开发功能更强大的可视化系统.\n                </p>\n              </div>\n            </div>\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <!--// .container //-->\n    </section>\n\n    <section class=\"services section-padding mobile-hidden\" data-scroll-index=\"3\">\n      <div class=\"container\">\n        <div class=\"row justify-content-center\">\n          <div class=\"col-lg-8\">\n            <div class=\"section-heading\">\n              <h2 class=\"section-title not-line\">模板灵活配置</h2>\n              <p class=\"section-sub-title pc-section-sub-title text-center \">\n                创建模板，一键复用，多种组件，灵活配置\n              </p>\n              <a href=\"http://h5.dooring.cn/h5_plus\" target=\"_blank\"\n                class=\"default-outline-btn wow fadeInUp  section-sub-btn gray-btn\" data-wow-delay=\"0.4s\">立即注册</a>\n            </div>\n          </div>\n          <img src=\"./img/phone 2.png\" />\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <!--// .container //-->\n    </section>\n\n    <section class=\"services section-padding mobile-hidden bg-circle\" data-scroll-index=\"3\">\n      <div class=\"container\">\n        <div class=\"row justify-content-center\">\n          <div class=\"col-lg-8\">\n            <div class=\"section-heading\">\n              <h2 class=\"section-title not-line\">一次创建多端适配</h2>\n              <p class=\"section-sub-title pc-section-sub-title text-center \">\n                自动适配多个客户端，无需重复配置相同页面，省时更省心\n              </p>\n            </div>\n          </div>\n          <div class=\"big-adaptation-img-container\">\n            <img class=\"col-lg-8 offset-2\" src=\"./img/pad@2x.png\" />\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <!--// .container //-->\n    </section>\n\n    <!--// About Section Start //-->\n    <section class=\"about section-padding  pc-hidden\" data-scroll-index=\"3\" id=\"about\">\n      <div class=\"container\">\n        <div class=\"row align-items-center\">\n          <div class=\"col-md-8 col-lg-8 wow fadeInLeft text-left\">\n            <img src=\"./img/f1.png\" alt=\"About image\" class=\"img-fluid img-jump\">\n          </div>\n          <!--// .col //-->\n          <div class=\"col-md-4 col-lg-4 wow fadeInUp about-container\">\n            <div class=\"about-inner\">\n              <!-- <span class=\"section-badge\">场景展示</span> -->\n              <h3>拖拽式生成H5页面</h3>\n              <p>\n                通过轻松拖拽的方式来快速生成H5页面元素，并提供丰富的页面组件，更方便的为使用者搭建更强大的H5落地页\n              </p>\n            </div>\n            <div class=\"about-list\">\n              <ul>\n                <li><i class=\"fa fa-check\"><img src=\"./img/sale.png\" style=\"width: 12px;height: 14px;\" /></i>产品营销页面</li>\n                <li><i class=\"fa fa-check\"><img src=\"./img/business.png\"\n                      style=\"width: 16px;height: 14px;\" /></i>企业/个人微官网</li>\n                <li><i class=\"fa fa-check\"><img src=\"./img/h5.png\" style=\"width: 11px;height: 16px;\" /></i>产品原型/H5活动页面\n                </li>\n              </ul>\n            </div>\n            <a href=\"http://h5.dooring.cn/h5_plus\" class=\"default-btn\">免费体验\n              <i class=\"ml-2 fa fa-angle-right\"></i>\n            </a>\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <!--// .container //-->\n    </section>\n    <!--// About Section End //-->\n    <!--// Features Section Start //-->\n\n\n    <section id=\"features\" class=\"features-section section-padding  pc-hidden\" data-scroll-index=\"4\">\n      <div class=\"container\">\n        <div class=\"features-row\">\n          <div class=\"col-md-8 col-lg-8 wow fadeInLeft text-center preview-container\">\n            <img src=\"./img/phone@2x.png\" alt=\"About image\" class=\"img-fluid img-jump\">\n          </div>\n          <div class=\"row align-items-center justify-content-between\">\n            <div class=\"col-md-7 col-lg-6 wow fadeInLeft\">\n              <div class=\"features-inner\">\n                <!-- <span class=\"section-badge\">场景展示</span> -->\n                <h2 class=\"section-title\">灵活预览</h2>\n                <p>\n                  自由拖拽，灵活缩放视图，支持H5长页面，移动端真机预览，PC端模拟预览，最大限度的降低使用成本\n                </p>\n                <div class=\"row align-items-center justify-content-center\">\n                  <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.1s\">\n                    <div class=\"services-item item-shadow\">\n                      <div class=\"services-icon services-blue-icon\">\n                        1\n                      </div>\n                      <span class=\"box-title\">移动端适配</span>\n                      <div class=\"services-body\">\n                        <p>\n                          适配不同移动端机型，实时可调整，预览无压力\n                        </p>\n                      </div>\n                    </div>\n                  </div>\n                  <!--// .col //-->\n                  <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n                    <div class=\"services-item item-shadow\">\n                      <div class=\"services-icon\">\n                        2\n                      </div>\n                      <span class=\"box-title\">持续升级</span>\n                      <div class=\"services-body\">\n                        <p>\n                          定期根据用户需求进行系统升级，优化，创造更好的体验\n                        </p>\n                      </div>\n                    </div>\n                  </div>\n                  <!--// .col //-->\n                  <div class=\"col-lg-4 col-md-6 col-sm-6 services-resp-margin wow fadeInUp\" data-wow-delay=\"0.3s\">\n                    <div class=\"services-item item-shadow\">\n                      <div class=\"services-icon\">\n                        3\n                      </div>\n                      <span class=\"box-title\">实时下载</span>\n                      <div class=\"services-body\">\n                        <p>\n                          用户不用担心存储问题，可在平台直接下载对应代码或json文件，更灵活的使用.\n                        </p>\n                      </div>\n                    </div>\n                  </div>\n                  <!--// .col //-->\n                </div>\n\n              </div>\n            </div>\n            <!--// .col //-->\n            <!-- <div class=\"col-md-5 col-lg-5 text-center features-image-resp wow slideInRight\">\n                            <div class=\"features-circle\"></div>\n                            <div class=\"feature-image-wrap wow zoomIn\" data-wow-delay=\"0.8s\">\n                                <img src=\"./img/f2.png\" alt=\"About image\" class=\"img-fluid img-jump\">\n                            </div>\n                        </div> -->\n            <!--// .col //-->\n          </div>\n          <!--// .row //-->\n        </div>\n\n      </div>\n      <!--// .container //-->\n    </section>\n    <!--// Features Section Start //-->\n\n    <!--// How It Works Section End //-->\n\n    <!--// Contact Section Start //-->\n\n\n    <section class=\"services section-padding mobile-hidden\" data-scroll-index=\"3\">\n      <div class=\"container\">\n        <div class=\"row justify-content-center\">\n          <div class=\"col-lg-8\">\n            <div class=\"section-heading\">\n              <h2 class=\"section-title not-line\">优秀案例精彩纷呈</h2>\n              <p class=\"section-sub-title pc-section-sub-title text-center \">\n                优秀案例，一键保存，多次复用，秒出精彩\n              </p>\n              <a href=\"http://h5.dooring.cn/h5_plus\" target=\"_blank\"\n                class=\"default-outline-btn wow fadeInUp  section-sub-btn gray-btn\" data-wow-delay=\"0.4s\">复用案例</a>\n            </div>\n          </div>\n          <div class=\"big-adaptation-img-container\">\n            <img class=\"col-lg-3\" src=\"./img/Bitmap1.png\" />\n            <img class=\"col-lg-3 offset-1\" src=\"./img/Bitmap2.png\" />\n            <img class=\"col-lg-3 offset-1\" src=\"./img/Bitmap3.png\" />\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <!--// .container //-->\n    </section>\n\n    <section class=\"services section-padding mobile-hidden\" data-scroll-index=\"3\">\n      <div class=\"container\">\n        <div class=\"row justify-content-center\">\n          <div class=\"row\">\n          <div class=\"col-lg-12\">\n            <div class=\"section-heading\">\n              <h2 class=\"section-title not-line\">选择Dooring编程更省心</h2>\n              <p class=\"section-sub-title pc-section-sub-title text-center \">\n                800+用户选择使用 Dooring 让编程更高效\n              </p>\n\n            </div>\n          </div>\n          </div>\n          <!--// .col //-->\n        </div>\n        <!--// .row //-->\n      </div>\n      <div class=\"bg-circle\">\n        <div class=\"merchant-img-container row gx-5\">\n          <div class=\"col-lg-2 merchant-list\"><div class=\"merchant-item\"><img src=\"./img/logo3.svg\" /></div></div>\n          <div class=\"col-lg-2 merchant-list\"><div class=\"merchant-item\"><img src=\"./img/101.jpg\" /></div></div>\n          <div class=\"col-lg-2 merchant-list\"><div class=\"merchant-item\"><img src=\"./img/digital.jpg\" /></div></div>\n          <div class=\"col-lg-2 merchant-list\"><div class=\"merchant-item\"><img src=\"./img/siwjie.jpg\" /></div></div>\n        </div>\n\n        <div class=\"big-adaptation-img-container row gx-5\">\n\n        </div>\n      </div>\n      <!--// .container //-->\n    </section>\n\n    <section class=\"contact-section section-padding mobile-hidden\" data-scroll-index=\"5\">\n      <div class=\"container\">\n        <div class=\"row justify-content-center\">\n          <div class=\"col-lg-8\">\n            <div class=\"section-heading\">\n              <h2 class=\"section-title\">联系我们</h2>\n              <p class=\"section-sub-title text-center\">\n                想了解更多？可以通过以下方式联系到作者\n              </p>\n            </div>\n\n          </div>\n          <!--// .col //-->\n        </div>\n\n      </div>\n      <div class=\"team-container\">\n        <div class=\"team-box\">\n          <div class=\"team-card\">\n            <img src=\"./img/徐小夕.jpg\" alt=\"\">\n            <div class=\"team-info\">\n              <p>产品/技术/运营</p>\n              <span>徐小夕</span>\n            </div>\n          </div>\n          <div class=\"team-card\">\n            <img src=\"./img/大风吹.jpg\" alt=\"\">\n            <div class=\"team-info\">\n              <p>产品</p>\n              <span>大风吹</span>\n            </div>\n          </div>\n          <div class=\"team-card\">\n            <img src=\"./img/背完单词看视频.jpg\" alt=\"\">\n            <div class=\"team-info\">\n              <p>技术</p>\n              <span>背完单词看视频</span>\n            </div>\n          </div>\n          <div class=\"team-card\">\n            <img src=\"./img/ralap.jpg\" alt=\"\">\n            <div class=\"team-info\">\n              <p>技术</p>\n              <span>Ralap_C</span>\n            </div>\n          </div>\n        </div>\n        <div class=\"team-box\">\n          <div class=\"team-card\">\n            <img src=\"./img/朝霞.jpg\" alt=\"\">\n            <div class=\"team-info\">\n              <p>技术</p>\n              <span>朝霞</span>\n            </div>\n          </div>\n          <div class=\"team-card\">\n            <img src=\"./img/47.jpg\" alt=\"\">\n            <div class=\"team-info\">\n              <p>设计师</p>\n              <span>47</span>\n            </div>\n          </div>\n          <div class=\"team-card\">\n            <img src=\"./img/黎光.jpg\" alt=\"\">\n            <div class=\"team-info\">\n              <p>运营</p>\n              <span>黎光</span>\n            </div>\n          </div>\n        </div>\n      </div>\n      <div class=\"row align-items-center justify-content-center\">\n        <div class=\"col-lg-8\">\n          <img src=\"./img/map@2x.png\" alt=\"趣谈前端\" style=\"width:100%\">\n        </div>\n        <div class=\"col-lg-4\">\n          <div class=\"mb-3\" style=\"margin-top: -266px;\">\n            <input type=\"email\" class=\"form-control\" id=\"exampleFormControlInput1\" placeholder=\"邮箱／手机号\">\n          </div>\n          <div class=\"mb-3\">\n            <textarea class=\"form-control\" id=\"exampleFormControlTextarea1\" rows=\"8\" placeholder=\"说点什么吧…\"></textarea>\n          </div>\n          <div class=\"mb-3\">\n            <button type=\"button\" class=\"btn btn-secondary btn-lg\" style=\"width: 123px;height: 60px;background: #4A547B;margin-right: 12px;\">发送</button>\n            <button type=\"button\" class=\"btn btn-outline-secondary btn-lg contact-us\" style=\"width: 259px;height: 60px;background: #FFFFFF;border-radius: 8px;\">联系我们</button>\n            <div class=\"qr-code-container bottom-top-arrow\">\n                    <img class=\"icon-qr-code\" src=\"./img/qtqd_code.png\"/>\n                  </div>\n          </div>\n        </div>\n      </div>\n      <!--// .container //-->\n    </section>\n    <!--// Footer Section Start //-->\n    <footer class=\"footer pc-hidden\">\n      <!--// .footer-top //-->\n      <div class=\"copyright\">\n        <div class=\"container\">\n          <div class=\"row align-items-center justify-content-center\">\n            <div class=\"col-lg-9\">\n              <p class=\"text-center\">\n                © Copyright <span id=\"fullYearCopyright\"></span> - 徐小夕\n                <a style=\"margin-left:20px\" href=\"https://beian.miit.gov.cn/#/Integrated/index\"\n                  target=\"_blank\">鄂ICP备18024675号-3</a>\n              </p>\n            </div>\n          </div>\n          <!--// .row //-->\n        </div>\n        <!--// .container //-->\n      </div>\n      <!--// .copyright //-->\n    </footer>\n\n    <footer class=\"footer pc-footer mobile-hidden\">\n      <!--// .footer-top //-->\n\n        <div class=\"container\">\n          <div class=\"row align-items-center justify-content-center\">\n            <div class=\"col-lg-9\">\n              <ul class=\"pc-footer-menu text-center\">\n                <li>\n                  <a href=\"/\"> 主页</a>\n                </li>\n                <li>\n                    <a href=\"http://h5.dooring.cn/doc\" target=\"_blank\"> 介绍</a>\n                </li>\n                <li>\n                     <a href=\"http://h5.dooring.cn/h5?tid=FB593DD0\" target=\"_blank\"> 合作</a>\n                </li>\n                <li>\n                       <a href=\"http://h5.dooring.cn/h5?tid=A71EE8BB\" target=\"_blank\"> 反馈</a>\n                </li>\n              </ul>\n              <ul class=\"pc-footer-contact text-center\">\n                <li>\n                  <img class=\"icon-contact\" src=\"./img/wechat.png\"/>\n                  <div class=\"qr-code-container bottom-center-arrow\">\n                    <img class=\"icon-qr-code\" src=\"./img/qtqd_code.png\"/>\n                  </div>\n                </li>\n                <!-- <li>\n                  <img class=\"icon-contact\" src=\"./img/qq.png\"/>\n                  <div class=\"qr-code-container bottom-center-arrow\">\n                    <img class=\"icon-qr-code\" src=\"./img/wechat.png\"/>\n                  </div>\n                </li> -->\n                <li>\n                  <a href=\"https://www.zhihu.com/people/build800\">\n                    <img class=\"icon-contact\" src=\"./img/zhi.png\"/>\n                </a>\n                  <!-- <div class=\"qr-code-container bottom-center-arrow\">\n                    <img class=\"icon-qr-code\" src=\"./img/wechat.png\"/>\n                  </div> -->\n                </li>\n                <li>\n                  <a href=\"https://github.com/MrXujiang/h5-Dooring\"><img class=\"icon-contact\" src=\"./img/github.png\"/></a>\n                  <!-- <div class=\"qr-code-container bottom-center-arrow\">\n                    <img class=\"icon-qr-code\" src=\"./img/wechat.png\"/>\n                  </div> -->\n                </li>\n              </ul>\n              <p class=\"text-center pc-footer-contact-info\">\n                © Copyright <span id=\"fullYearCopyright\"></span> - H5-Dooring\n                <a style=\"margin-left:20px\" href=\"https://beian.miit.gov.cn/#/Integrated/index\"\n                  target=\"_blank\">鄂ICP备18024675号-3</a>\n              </p>\n            </div>\n          </div>\n          <!--// .row //-->\n        </div>\n        <!--// .container //-->\n\n      <!--// .copyright //-->\n    </footer>\n\n    <!--// Footer Section Start //-->\n    <a href=\"#0\" class=\"scroll-top-btn\" data-scroll-goto=\"0\">\n      <img src=\"./img/TOP.png\" />\n    </a>\n    <!--// Scroll Top //-->\n\n    <div class=\"preloader-wrap\">\n      <div class=\"preloader-inner\">\n        <div class=\"sk-circle\"></div>\n        <div class=\"spinner\">\n          <div class=\"rect1\"></div>\n          <div class=\"rect2\"></div>\n          <div class=\"rect3\"></div>\n          <div class=\"rect4\"></div>\n          <div class=\"rect5\"></div>\n        </div>\n      </div>\n    </div>\n    <!--// Preloader  //-->\n\n  </div>\n  <!--// Page Wrapper End //-->\n\n  <!--// jQuery v3.4.1 //-->\n  <script src=\"./js/jquery.js\"></script>\n  <!--// Plugins Js //-->\n  <script src=\"./js/plugins.js\"></script>\n  <!--// Main Js //-->\n  <script src=\"./js/main.js\"></script>\n</body>\n\n</html>\n"
  },
  {
    "path": "website/js/jquery.js",
    "content": "/*! jQuery v3.4.1 | (c) JS Foundation and other contributors | jquery.org/license */\n!(function(e, t) {\n  'use strict';\n  'object' == typeof module && 'object' == typeof module.exports\n    ? (module.exports = e.document\n        ? t(e, !0)\n        : function(e) {\n            if (!e.document) throw new Error('jQuery requires a window with a document');\n            return t(e);\n          })\n    : t(e);\n})('undefined' != typeof window ? window : this, function(C, e) {\n  'use strict';\n  var t = [],\n    E = C.document,\n    r = Object.getPrototypeOf,\n    s = t.slice,\n    g = t.concat,\n    u = t.push,\n    i = t.indexOf,\n    n = {},\n    o = n.toString,\n    v = n.hasOwnProperty,\n    a = v.toString,\n    l = a.call(Object),\n    y = {},\n    m = function(e) {\n      return 'function' == typeof e && 'number' != typeof e.nodeType;\n    },\n    x = function(e) {\n      return null != e && e === e.window;\n    },\n    c = { type: !0, src: !0, nonce: !0, noModule: !0 };\n  function b(e, t, n) {\n    var r,\n      i,\n      o = (n = n || E).createElement('script');\n    if (((o.text = e), t))\n      for (r in c) (i = t[r] || (t.getAttribute && t.getAttribute(r))) && o.setAttribute(r, i);\n    n.head.appendChild(o).parentNode.removeChild(o);\n  }\n  function w(e) {\n    return null == e\n      ? e + ''\n      : 'object' == typeof e || 'function' == typeof e\n      ? n[o.call(e)] || 'object'\n      : typeof e;\n  }\n  var f = '3.4.1',\n    k = function(e, t) {\n      return new k.fn.init(e, t);\n    },\n    p = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n  function d(e) {\n    var t = !!e && 'length' in e && e.length,\n      n = w(e);\n    return (\n      !m(e) && !x(e) && ('array' === n || 0 === t || ('number' == typeof t && 0 < t && t - 1 in e))\n    );\n  }\n  (k.fn = k.prototype = {\n    jquery: f,\n    constructor: k,\n    length: 0,\n    toArray: function() {\n      return s.call(this);\n    },\n    get: function(e) {\n      return null == e ? s.call(this) : e < 0 ? this[e + this.length] : this[e];\n    },\n    pushStack: function(e) {\n      var t = k.merge(this.constructor(), e);\n      return (t.prevObject = this), t;\n    },\n    each: function(e) {\n      return k.each(this, e);\n    },\n    map: function(n) {\n      return this.pushStack(\n        k.map(this, function(e, t) {\n          return n.call(e, t, e);\n        }),\n      );\n    },\n    slice: function() {\n      return this.pushStack(s.apply(this, arguments));\n    },\n    first: function() {\n      return this.eq(0);\n    },\n    last: function() {\n      return this.eq(-1);\n    },\n    eq: function(e) {\n      var t = this.length,\n        n = +e + (e < 0 ? t : 0);\n      return this.pushStack(0 <= n && n < t ? [this[n]] : []);\n    },\n    end: function() {\n      return this.prevObject || this.constructor();\n    },\n    push: u,\n    sort: t.sort,\n    splice: t.splice,\n  }),\n    (k.extend = k.fn.extend = function() {\n      var e,\n        t,\n        n,\n        r,\n        i,\n        o,\n        a = arguments[0] || {},\n        s = 1,\n        u = arguments.length,\n        l = !1;\n      for (\n        'boolean' == typeof a && ((l = a), (a = arguments[s] || {}), s++),\n          'object' == typeof a || m(a) || (a = {}),\n          s === u && ((a = this), s--);\n        s < u;\n        s++\n      )\n        if (null != (e = arguments[s]))\n          for (t in e)\n            (r = e[t]),\n              '__proto__' !== t &&\n                a !== r &&\n                (l && r && (k.isPlainObject(r) || (i = Array.isArray(r)))\n                  ? ((n = a[t]),\n                    (o = i && !Array.isArray(n) ? [] : i || k.isPlainObject(n) ? n : {}),\n                    (i = !1),\n                    (a[t] = k.extend(l, o, r)))\n                  : void 0 !== r && (a[t] = r));\n      return a;\n    }),\n    k.extend({\n      expando: 'jQuery' + (f + Math.random()).replace(/\\D/g, ''),\n      isReady: !0,\n      error: function(e) {\n        throw new Error(e);\n      },\n      noop: function() {},\n      isPlainObject: function(e) {\n        var t, n;\n        return (\n          !(!e || '[object Object]' !== o.call(e)) &&\n          (!(t = r(e)) ||\n            ('function' == typeof (n = v.call(t, 'constructor') && t.constructor) &&\n              a.call(n) === l))\n        );\n      },\n      isEmptyObject: function(e) {\n        var t;\n        for (t in e) return !1;\n        return !0;\n      },\n      globalEval: function(e, t) {\n        b(e, { nonce: t && t.nonce });\n      },\n      each: function(e, t) {\n        var n,\n          r = 0;\n        if (d(e)) {\n          for (n = e.length; r < n; r++) if (!1 === t.call(e[r], r, e[r])) break;\n        } else for (r in e) if (!1 === t.call(e[r], r, e[r])) break;\n        return e;\n      },\n      trim: function(e) {\n        return null == e ? '' : (e + '').replace(p, '');\n      },\n      makeArray: function(e, t) {\n        var n = t || [];\n        return (\n          null != e && (d(Object(e)) ? k.merge(n, 'string' == typeof e ? [e] : e) : u.call(n, e)), n\n        );\n      },\n      inArray: function(e, t, n) {\n        return null == t ? -1 : i.call(t, e, n);\n      },\n      merge: function(e, t) {\n        for (var n = +t.length, r = 0, i = e.length; r < n; r++) e[i++] = t[r];\n        return (e.length = i), e;\n      },\n      grep: function(e, t, n) {\n        for (var r = [], i = 0, o = e.length, a = !n; i < o; i++) !t(e[i], i) !== a && r.push(e[i]);\n        return r;\n      },\n      map: function(e, t, n) {\n        var r,\n          i,\n          o = 0,\n          a = [];\n        if (d(e)) for (r = e.length; o < r; o++) null != (i = t(e[o], o, n)) && a.push(i);\n        else for (o in e) null != (i = t(e[o], o, n)) && a.push(i);\n        return g.apply([], a);\n      },\n      guid: 1,\n      support: y,\n    }),\n    'function' == typeof Symbol && (k.fn[Symbol.iterator] = t[Symbol.iterator]),\n    k.each(\n      'Boolean Number String Function Array Date RegExp Object Error Symbol'.split(' '),\n      function(e, t) {\n        n['[object ' + t + ']'] = t.toLowerCase();\n      },\n    );\n  var h = (function(n) {\n    var e,\n      d,\n      b,\n      o,\n      i,\n      h,\n      f,\n      g,\n      w,\n      u,\n      l,\n      T,\n      C,\n      a,\n      E,\n      v,\n      s,\n      c,\n      y,\n      k = 'sizzle' + 1 * new Date(),\n      m = n.document,\n      S = 0,\n      r = 0,\n      p = ue(),\n      x = ue(),\n      N = ue(),\n      A = ue(),\n      D = function(e, t) {\n        return e === t && (l = !0), 0;\n      },\n      j = {}.hasOwnProperty,\n      t = [],\n      q = t.pop,\n      L = t.push,\n      H = t.push,\n      O = t.slice,\n      P = function(e, t) {\n        for (var n = 0, r = e.length; n < r; n++) if (e[n] === t) return n;\n        return -1;\n      },\n      R =\n        'checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped',\n      M = '[\\\\x20\\\\t\\\\r\\\\n\\\\f]',\n      I = '(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+',\n      W =\n        '\\\\[' +\n        M +\n        '*(' +\n        I +\n        ')(?:' +\n        M +\n        '*([*^$|!~]?=)' +\n        M +\n        '*(?:\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\"|(' +\n        I +\n        '))|)' +\n        M +\n        '*\\\\]',\n      $ =\n        ':(' +\n        I +\n        ')(?:\\\\(((\\'((?:\\\\\\\\.|[^\\\\\\\\\\'])*)\\'|\"((?:\\\\\\\\.|[^\\\\\\\\\"])*)\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|' +\n        W +\n        ')*)|.*)\\\\)|)',\n      F = new RegExp(M + '+', 'g'),\n      B = new RegExp('^' + M + '+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)' + M + '+$', 'g'),\n      _ = new RegExp('^' + M + '*,' + M + '*'),\n      z = new RegExp('^' + M + '*([>+~]|' + M + ')' + M + '*'),\n      U = new RegExp(M + '|>'),\n      X = new RegExp($),\n      V = new RegExp('^' + I + '$'),\n      G = {\n        ID: new RegExp('^#(' + I + ')'),\n        CLASS: new RegExp('^\\\\.(' + I + ')'),\n        TAG: new RegExp('^(' + I + '|[*])'),\n        ATTR: new RegExp('^' + W),\n        PSEUDO: new RegExp('^' + $),\n        CHILD: new RegExp(\n          '^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(' +\n            M +\n            '*(even|odd|(([+-]|)(\\\\d*)n|)' +\n            M +\n            '*(?:([+-]|)' +\n            M +\n            '*(\\\\d+)|))' +\n            M +\n            '*\\\\)|)',\n          'i',\n        ),\n        bool: new RegExp('^(?:' + R + ')$', 'i'),\n        needsContext: new RegExp(\n          '^' +\n            M +\n            '*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(' +\n            M +\n            '*((?:-\\\\d)?\\\\d*)' +\n            M +\n            '*\\\\)|)(?=[^-]|$)',\n          'i',\n        ),\n      },\n      Y = /HTML$/i,\n      Q = /^(?:input|select|textarea|button)$/i,\n      J = /^h\\d$/i,\n      K = /^[^{]+\\{\\s*\\[native \\w/,\n      Z = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n      ee = /[+~]/,\n      te = new RegExp('\\\\\\\\([\\\\da-f]{1,6}' + M + '?|(' + M + ')|.)', 'ig'),\n      ne = function(e, t, n) {\n        var r = '0x' + t - 65536;\n        return r != r || n\n          ? t\n          : r < 0\n          ? String.fromCharCode(r + 65536)\n          : String.fromCharCode((r >> 10) | 55296, (1023 & r) | 56320);\n      },\n      re = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n      ie = function(e, t) {\n        return t\n          ? '\\0' === e\n            ? '\\ufffd'\n            : e.slice(0, -1) + '\\\\' + e.charCodeAt(e.length - 1).toString(16) + ' '\n          : '\\\\' + e;\n      },\n      oe = function() {\n        T();\n      },\n      ae = be(\n        function(e) {\n          return !0 === e.disabled && 'fieldset' === e.nodeName.toLowerCase();\n        },\n        { dir: 'parentNode', next: 'legend' },\n      );\n    try {\n      H.apply((t = O.call(m.childNodes)), m.childNodes), t[m.childNodes.length].nodeType;\n    } catch (e) {\n      H = {\n        apply: t.length\n          ? function(e, t) {\n              L.apply(e, O.call(t));\n            }\n          : function(e, t) {\n              var n = e.length,\n                r = 0;\n              while ((e[n++] = t[r++]));\n              e.length = n - 1;\n            },\n      };\n    }\n    function se(t, e, n, r) {\n      var i,\n        o,\n        a,\n        s,\n        u,\n        l,\n        c,\n        f = e && e.ownerDocument,\n        p = e ? e.nodeType : 9;\n      if (((n = n || []), 'string' != typeof t || !t || (1 !== p && 9 !== p && 11 !== p))) return n;\n      if (!r && ((e ? e.ownerDocument || e : m) !== C && T(e), (e = e || C), E)) {\n        if (11 !== p && (u = Z.exec(t)))\n          if ((i = u[1])) {\n            if (9 === p) {\n              if (!(a = e.getElementById(i))) return n;\n              if (a.id === i) return n.push(a), n;\n            } else if (f && (a = f.getElementById(i)) && y(e, a) && a.id === i) return n.push(a), n;\n          } else {\n            if (u[2]) return H.apply(n, e.getElementsByTagName(t)), n;\n            if ((i = u[3]) && d.getElementsByClassName && e.getElementsByClassName)\n              return H.apply(n, e.getElementsByClassName(i)), n;\n          }\n        if (\n          d.qsa &&\n          !A[t + ' '] &&\n          (!v || !v.test(t)) &&\n          (1 !== p || 'object' !== e.nodeName.toLowerCase())\n        ) {\n          if (((c = t), (f = e), 1 === p && U.test(t))) {\n            (s = e.getAttribute('id')) ? (s = s.replace(re, ie)) : e.setAttribute('id', (s = k)),\n              (o = (l = h(t)).length);\n            while (o--) l[o] = '#' + s + ' ' + xe(l[o]);\n            (c = l.join(',')), (f = (ee.test(t) && ye(e.parentNode)) || e);\n          }\n          try {\n            return H.apply(n, f.querySelectorAll(c)), n;\n          } catch (e) {\n            A(t, !0);\n          } finally {\n            s === k && e.removeAttribute('id');\n          }\n        }\n      }\n      return g(t.replace(B, '$1'), e, n, r);\n    }\n    function ue() {\n      var r = [];\n      return function e(t, n) {\n        return r.push(t + ' ') > b.cacheLength && delete e[r.shift()], (e[t + ' '] = n);\n      };\n    }\n    function le(e) {\n      return (e[k] = !0), e;\n    }\n    function ce(e) {\n      var t = C.createElement('fieldset');\n      try {\n        return !!e(t);\n      } catch (e) {\n        return !1;\n      } finally {\n        t.parentNode && t.parentNode.removeChild(t), (t = null);\n      }\n    }\n    function fe(e, t) {\n      var n = e.split('|'),\n        r = n.length;\n      while (r--) b.attrHandle[n[r]] = t;\n    }\n    function pe(e, t) {\n      var n = t && e,\n        r = n && 1 === e.nodeType && 1 === t.nodeType && e.sourceIndex - t.sourceIndex;\n      if (r) return r;\n      if (n) while ((n = n.nextSibling)) if (n === t) return -1;\n      return e ? 1 : -1;\n    }\n    function de(t) {\n      return function(e) {\n        return 'input' === e.nodeName.toLowerCase() && e.type === t;\n      };\n    }\n    function he(n) {\n      return function(e) {\n        var t = e.nodeName.toLowerCase();\n        return ('input' === t || 'button' === t) && e.type === n;\n      };\n    }\n    function ge(t) {\n      return function(e) {\n        return 'form' in e\n          ? e.parentNode && !1 === e.disabled\n            ? 'label' in e\n              ? 'label' in e.parentNode\n                ? e.parentNode.disabled === t\n                : e.disabled === t\n              : e.isDisabled === t || (e.isDisabled !== !t && ae(e) === t)\n            : e.disabled === t\n          : 'label' in e && e.disabled === t;\n      };\n    }\n    function ve(a) {\n      return le(function(o) {\n        return (\n          (o = +o),\n          le(function(e, t) {\n            var n,\n              r = a([], e.length, o),\n              i = r.length;\n            while (i--) e[(n = r[i])] && (e[n] = !(t[n] = e[n]));\n          })\n        );\n      });\n    }\n    function ye(e) {\n      return e && 'undefined' != typeof e.getElementsByTagName && e;\n    }\n    for (e in ((d = se.support = {}),\n    (i = se.isXML = function(e) {\n      var t = e.namespaceURI,\n        n = (e.ownerDocument || e).documentElement;\n      return !Y.test(t || (n && n.nodeName) || 'HTML');\n    }),\n    (T = se.setDocument = function(e) {\n      var t,\n        n,\n        r = e ? e.ownerDocument || e : m;\n      return (\n        r !== C &&\n          9 === r.nodeType &&\n          r.documentElement &&\n          ((a = (C = r).documentElement),\n          (E = !i(C)),\n          m !== C &&\n            (n = C.defaultView) &&\n            n.top !== n &&\n            (n.addEventListener\n              ? n.addEventListener('unload', oe, !1)\n              : n.attachEvent && n.attachEvent('onunload', oe)),\n          (d.attributes = ce(function(e) {\n            return (e.className = 'i'), !e.getAttribute('className');\n          })),\n          (d.getElementsByTagName = ce(function(e) {\n            return e.appendChild(C.createComment('')), !e.getElementsByTagName('*').length;\n          })),\n          (d.getElementsByClassName = K.test(C.getElementsByClassName)),\n          (d.getById = ce(function(e) {\n            return (\n              (a.appendChild(e).id = k), !C.getElementsByName || !C.getElementsByName(k).length\n            );\n          })),\n          d.getById\n            ? ((b.filter.ID = function(e) {\n                var t = e.replace(te, ne);\n                return function(e) {\n                  return e.getAttribute('id') === t;\n                };\n              }),\n              (b.find.ID = function(e, t) {\n                if ('undefined' != typeof t.getElementById && E) {\n                  var n = t.getElementById(e);\n                  return n ? [n] : [];\n                }\n              }))\n            : ((b.filter.ID = function(e) {\n                var n = e.replace(te, ne);\n                return function(e) {\n                  var t = 'undefined' != typeof e.getAttributeNode && e.getAttributeNode('id');\n                  return t && t.value === n;\n                };\n              }),\n              (b.find.ID = function(e, t) {\n                if ('undefined' != typeof t.getElementById && E) {\n                  var n,\n                    r,\n                    i,\n                    o = t.getElementById(e);\n                  if (o) {\n                    if ((n = o.getAttributeNode('id')) && n.value === e) return [o];\n                    (i = t.getElementsByName(e)), (r = 0);\n                    while ((o = i[r++]))\n                      if ((n = o.getAttributeNode('id')) && n.value === e) return [o];\n                  }\n                  return [];\n                }\n              })),\n          (b.find.TAG = d.getElementsByTagName\n            ? function(e, t) {\n                return 'undefined' != typeof t.getElementsByTagName\n                  ? t.getElementsByTagName(e)\n                  : d.qsa\n                  ? t.querySelectorAll(e)\n                  : void 0;\n              }\n            : function(e, t) {\n                var n,\n                  r = [],\n                  i = 0,\n                  o = t.getElementsByTagName(e);\n                if ('*' === e) {\n                  while ((n = o[i++])) 1 === n.nodeType && r.push(n);\n                  return r;\n                }\n                return o;\n              }),\n          (b.find.CLASS =\n            d.getElementsByClassName &&\n            function(e, t) {\n              if ('undefined' != typeof t.getElementsByClassName && E)\n                return t.getElementsByClassName(e);\n            }),\n          (s = []),\n          (v = []),\n          (d.qsa = K.test(C.querySelectorAll)) &&\n            (ce(function(e) {\n              (a.appendChild(e).innerHTML =\n                \"<a id='\" +\n                k +\n                \"'></a><select id='\" +\n                k +\n                \"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\"),\n                e.querySelectorAll(\"[msallowcapture^='']\").length &&\n                  v.push('[*^$]=' + M + '*(?:\\'\\'|\"\")'),\n                e.querySelectorAll('[selected]').length ||\n                  v.push('\\\\[' + M + '*(?:value|' + R + ')'),\n                e.querySelectorAll('[id~=' + k + '-]').length || v.push('~='),\n                e.querySelectorAll(':checked').length || v.push(':checked'),\n                e.querySelectorAll('a#' + k + '+*').length || v.push('.#.+[+~]');\n            }),\n            ce(function(e) {\n              e.innerHTML =\n                \"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";\n              var t = C.createElement('input');\n              t.setAttribute('type', 'hidden'),\n                e.appendChild(t).setAttribute('name', 'D'),\n                e.querySelectorAll('[name=d]').length && v.push('name' + M + '*[*^$|!~]?='),\n                2 !== e.querySelectorAll(':enabled').length && v.push(':enabled', ':disabled'),\n                (a.appendChild(e).disabled = !0),\n                2 !== e.querySelectorAll(':disabled').length && v.push(':enabled', ':disabled'),\n                e.querySelectorAll('*,:x'),\n                v.push(',.*:');\n            })),\n          (d.matchesSelector = K.test(\n            (c =\n              a.matches ||\n              a.webkitMatchesSelector ||\n              a.mozMatchesSelector ||\n              a.oMatchesSelector ||\n              a.msMatchesSelector),\n          )) &&\n            ce(function(e) {\n              (d.disconnectedMatch = c.call(e, '*')), c.call(e, \"[s!='']:x\"), s.push('!=', $);\n            }),\n          (v = v.length && new RegExp(v.join('|'))),\n          (s = s.length && new RegExp(s.join('|'))),\n          (t = K.test(a.compareDocumentPosition)),\n          (y =\n            t || K.test(a.contains)\n              ? function(e, t) {\n                  var n = 9 === e.nodeType ? e.documentElement : e,\n                    r = t && t.parentNode;\n                  return (\n                    e === r ||\n                    !(\n                      !r ||\n                      1 !== r.nodeType ||\n                      !(n.contains\n                        ? n.contains(r)\n                        : e.compareDocumentPosition && 16 & e.compareDocumentPosition(r))\n                    )\n                  );\n                }\n              : function(e, t) {\n                  if (t) while ((t = t.parentNode)) if (t === e) return !0;\n                  return !1;\n                }),\n          (D = t\n            ? function(e, t) {\n                if (e === t) return (l = !0), 0;\n                var n = !e.compareDocumentPosition - !t.compareDocumentPosition;\n                return (\n                  n ||\n                  (1 &\n                    (n =\n                      (e.ownerDocument || e) === (t.ownerDocument || t)\n                        ? e.compareDocumentPosition(t)\n                        : 1) ||\n                  (!d.sortDetached && t.compareDocumentPosition(e) === n)\n                    ? e === C || (e.ownerDocument === m && y(m, e))\n                      ? -1\n                      : t === C || (t.ownerDocument === m && y(m, t))\n                      ? 1\n                      : u\n                      ? P(u, e) - P(u, t)\n                      : 0\n                    : 4 & n\n                    ? -1\n                    : 1)\n                );\n              }\n            : function(e, t) {\n                if (e === t) return (l = !0), 0;\n                var n,\n                  r = 0,\n                  i = e.parentNode,\n                  o = t.parentNode,\n                  a = [e],\n                  s = [t];\n                if (!i || !o)\n                  return e === C ? -1 : t === C ? 1 : i ? -1 : o ? 1 : u ? P(u, e) - P(u, t) : 0;\n                if (i === o) return pe(e, t);\n                n = e;\n                while ((n = n.parentNode)) a.unshift(n);\n                n = t;\n                while ((n = n.parentNode)) s.unshift(n);\n                while (a[r] === s[r]) r++;\n                return r ? pe(a[r], s[r]) : a[r] === m ? -1 : s[r] === m ? 1 : 0;\n              })),\n        C\n      );\n    }),\n    (se.matches = function(e, t) {\n      return se(e, null, null, t);\n    }),\n    (se.matchesSelector = function(e, t) {\n      if (\n        ((e.ownerDocument || e) !== C && T(e),\n        d.matchesSelector && E && !A[t + ' '] && (!s || !s.test(t)) && (!v || !v.test(t)))\n      )\n        try {\n          var n = c.call(e, t);\n          if (n || d.disconnectedMatch || (e.document && 11 !== e.document.nodeType)) return n;\n        } catch (e) {\n          A(t, !0);\n        }\n      return 0 < se(t, C, null, [e]).length;\n    }),\n    (se.contains = function(e, t) {\n      return (e.ownerDocument || e) !== C && T(e), y(e, t);\n    }),\n    (se.attr = function(e, t) {\n      (e.ownerDocument || e) !== C && T(e);\n      var n = b.attrHandle[t.toLowerCase()],\n        r = n && j.call(b.attrHandle, t.toLowerCase()) ? n(e, t, !E) : void 0;\n      return void 0 !== r\n        ? r\n        : d.attributes || !E\n        ? e.getAttribute(t)\n        : (r = e.getAttributeNode(t)) && r.specified\n        ? r.value\n        : null;\n    }),\n    (se.escape = function(e) {\n      return (e + '').replace(re, ie);\n    }),\n    (se.error = function(e) {\n      throw new Error('Syntax error, unrecognized expression: ' + e);\n    }),\n    (se.uniqueSort = function(e) {\n      var t,\n        n = [],\n        r = 0,\n        i = 0;\n      if (((l = !d.detectDuplicates), (u = !d.sortStable && e.slice(0)), e.sort(D), l)) {\n        while ((t = e[i++])) t === e[i] && (r = n.push(i));\n        while (r--) e.splice(n[r], 1);\n      }\n      return (u = null), e;\n    }),\n    (o = se.getText = function(e) {\n      var t,\n        n = '',\n        r = 0,\n        i = e.nodeType;\n      if (i) {\n        if (1 === i || 9 === i || 11 === i) {\n          if ('string' == typeof e.textContent) return e.textContent;\n          for (e = e.firstChild; e; e = e.nextSibling) n += o(e);\n        } else if (3 === i || 4 === i) return e.nodeValue;\n      } else while ((t = e[r++])) n += o(t);\n      return n;\n    }),\n    ((b = se.selectors = {\n      cacheLength: 50,\n      createPseudo: le,\n      match: G,\n      attrHandle: {},\n      find: {},\n      relative: {\n        '>': { dir: 'parentNode', first: !0 },\n        ' ': { dir: 'parentNode' },\n        '+': { dir: 'previousSibling', first: !0 },\n        '~': { dir: 'previousSibling' },\n      },\n      preFilter: {\n        ATTR: function(e) {\n          return (\n            (e[1] = e[1].replace(te, ne)),\n            (e[3] = (e[3] || e[4] || e[5] || '').replace(te, ne)),\n            '~=' === e[2] && (e[3] = ' ' + e[3] + ' '),\n            e.slice(0, 4)\n          );\n        },\n        CHILD: function(e) {\n          return (\n            (e[1] = e[1].toLowerCase()),\n            'nth' === e[1].slice(0, 3)\n              ? (e[3] || se.error(e[0]),\n                (e[4] = +(e[4] ? e[5] + (e[6] || 1) : 2 * ('even' === e[3] || 'odd' === e[3]))),\n                (e[5] = +(e[7] + e[8] || 'odd' === e[3])))\n              : e[3] && se.error(e[0]),\n            e\n          );\n        },\n        PSEUDO: function(e) {\n          var t,\n            n = !e[6] && e[2];\n          return G.CHILD.test(e[0])\n            ? null\n            : (e[3]\n                ? (e[2] = e[4] || e[5] || '')\n                : n &&\n                  X.test(n) &&\n                  (t = h(n, !0)) &&\n                  (t = n.indexOf(')', n.length - t) - n.length) &&\n                  ((e[0] = e[0].slice(0, t)), (e[2] = n.slice(0, t))),\n              e.slice(0, 3));\n        },\n      },\n      filter: {\n        TAG: function(e) {\n          var t = e.replace(te, ne).toLowerCase();\n          return '*' === e\n            ? function() {\n                return !0;\n              }\n            : function(e) {\n                return e.nodeName && e.nodeName.toLowerCase() === t;\n              };\n        },\n        CLASS: function(e) {\n          var t = p[e + ' '];\n          return (\n            t ||\n            ((t = new RegExp('(^|' + M + ')' + e + '(' + M + '|$)')) &&\n              p(e, function(e) {\n                return t.test(\n                  ('string' == typeof e.className && e.className) ||\n                    ('undefined' != typeof e.getAttribute && e.getAttribute('class')) ||\n                    '',\n                );\n              }))\n          );\n        },\n        ATTR: function(n, r, i) {\n          return function(e) {\n            var t = se.attr(e, n);\n            return null == t\n              ? '!=' === r\n              : !r ||\n                  ((t += ''),\n                  '=' === r\n                    ? t === i\n                    : '!=' === r\n                    ? t !== i\n                    : '^=' === r\n                    ? i && 0 === t.indexOf(i)\n                    : '*=' === r\n                    ? i && -1 < t.indexOf(i)\n                    : '$=' === r\n                    ? i && t.slice(-i.length) === i\n                    : '~=' === r\n                    ? -1 < (' ' + t.replace(F, ' ') + ' ').indexOf(i)\n                    : '|=' === r && (t === i || t.slice(0, i.length + 1) === i + '-'));\n          };\n        },\n        CHILD: function(h, e, t, g, v) {\n          var y = 'nth' !== h.slice(0, 3),\n            m = 'last' !== h.slice(-4),\n            x = 'of-type' === e;\n          return 1 === g && 0 === v\n            ? function(e) {\n                return !!e.parentNode;\n              }\n            : function(e, t, n) {\n                var r,\n                  i,\n                  o,\n                  a,\n                  s,\n                  u,\n                  l = y !== m ? 'nextSibling' : 'previousSibling',\n                  c = e.parentNode,\n                  f = x && e.nodeName.toLowerCase(),\n                  p = !n && !x,\n                  d = !1;\n                if (c) {\n                  if (y) {\n                    while (l) {\n                      a = e;\n                      while ((a = a[l]))\n                        if (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) return !1;\n                      u = l = 'only' === h && !u && 'nextSibling';\n                    }\n                    return !0;\n                  }\n                  if (((u = [m ? c.firstChild : c.lastChild]), m && p)) {\n                    (d =\n                      (s =\n                        (r =\n                          (i = (o = (a = c)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[\n                            h\n                          ] || [])[0] === S && r[1]) && r[2]),\n                      (a = s && c.childNodes[s]);\n                    while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop()))\n                      if (1 === a.nodeType && ++d && a === e) {\n                        i[h] = [S, s, d];\n                        break;\n                      }\n                  } else if (\n                    (p &&\n                      (d = s =\n                        (r =\n                          (i = (o = (a = e)[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[\n                            h\n                          ] || [])[0] === S && r[1]),\n                    !1 === d)\n                  )\n                    while ((a = (++s && a && a[l]) || (d = s = 0) || u.pop()))\n                      if (\n                        (x ? a.nodeName.toLowerCase() === f : 1 === a.nodeType) &&\n                        ++d &&\n                        (p &&\n                          ((i = (o = a[k] || (a[k] = {}))[a.uniqueID] || (o[a.uniqueID] = {}))[\n                            h\n                          ] = [S, d]),\n                        a === e)\n                      )\n                        break;\n                  return (d -= v) === g || (d % g == 0 && 0 <= d / g);\n                }\n              };\n        },\n        PSEUDO: function(e, o) {\n          var t,\n            a =\n              b.pseudos[e] || b.setFilters[e.toLowerCase()] || se.error('unsupported pseudo: ' + e);\n          return a[k]\n            ? a(o)\n            : 1 < a.length\n            ? ((t = [e, e, '', o]),\n              b.setFilters.hasOwnProperty(e.toLowerCase())\n                ? le(function(e, t) {\n                    var n,\n                      r = a(e, o),\n                      i = r.length;\n                    while (i--) e[(n = P(e, r[i]))] = !(t[n] = r[i]);\n                  })\n                : function(e) {\n                    return a(e, 0, t);\n                  })\n            : a;\n        },\n      },\n      pseudos: {\n        not: le(function(e) {\n          var r = [],\n            i = [],\n            s = f(e.replace(B, '$1'));\n          return s[k]\n            ? le(function(e, t, n, r) {\n                var i,\n                  o = s(e, null, r, []),\n                  a = e.length;\n                while (a--) (i = o[a]) && (e[a] = !(t[a] = i));\n              })\n            : function(e, t, n) {\n                return (r[0] = e), s(r, null, n, i), (r[0] = null), !i.pop();\n              };\n        }),\n        has: le(function(t) {\n          return function(e) {\n            return 0 < se(t, e).length;\n          };\n        }),\n        contains: le(function(t) {\n          return (\n            (t = t.replace(te, ne)),\n            function(e) {\n              return -1 < (e.textContent || o(e)).indexOf(t);\n            }\n          );\n        }),\n        lang: le(function(n) {\n          return (\n            V.test(n || '') || se.error('unsupported lang: ' + n),\n            (n = n.replace(te, ne).toLowerCase()),\n            function(e) {\n              var t;\n              do {\n                if ((t = E ? e.lang : e.getAttribute('xml:lang') || e.getAttribute('lang')))\n                  return (t = t.toLowerCase()) === n || 0 === t.indexOf(n + '-');\n              } while ((e = e.parentNode) && 1 === e.nodeType);\n              return !1;\n            }\n          );\n        }),\n        target: function(e) {\n          var t = n.location && n.location.hash;\n          return t && t.slice(1) === e.id;\n        },\n        root: function(e) {\n          return e === a;\n        },\n        focus: function(e) {\n          return (\n            e === C.activeElement &&\n            (!C.hasFocus || C.hasFocus()) &&\n            !!(e.type || e.href || ~e.tabIndex)\n          );\n        },\n        enabled: ge(!1),\n        disabled: ge(!0),\n        checked: function(e) {\n          var t = e.nodeName.toLowerCase();\n          return ('input' === t && !!e.checked) || ('option' === t && !!e.selected);\n        },\n        selected: function(e) {\n          return e.parentNode && e.parentNode.selectedIndex, !0 === e.selected;\n        },\n        empty: function(e) {\n          for (e = e.firstChild; e; e = e.nextSibling) if (e.nodeType < 6) return !1;\n          return !0;\n        },\n        parent: function(e) {\n          return !b.pseudos.empty(e);\n        },\n        header: function(e) {\n          return J.test(e.nodeName);\n        },\n        input: function(e) {\n          return Q.test(e.nodeName);\n        },\n        button: function(e) {\n          var t = e.nodeName.toLowerCase();\n          return ('input' === t && 'button' === e.type) || 'button' === t;\n        },\n        text: function(e) {\n          var t;\n          return (\n            'input' === e.nodeName.toLowerCase() &&\n            'text' === e.type &&\n            (null == (t = e.getAttribute('type')) || 'text' === t.toLowerCase())\n          );\n        },\n        first: ve(function() {\n          return [0];\n        }),\n        last: ve(function(e, t) {\n          return [t - 1];\n        }),\n        eq: ve(function(e, t, n) {\n          return [n < 0 ? n + t : n];\n        }),\n        even: ve(function(e, t) {\n          for (var n = 0; n < t; n += 2) e.push(n);\n          return e;\n        }),\n        odd: ve(function(e, t) {\n          for (var n = 1; n < t; n += 2) e.push(n);\n          return e;\n        }),\n        lt: ve(function(e, t, n) {\n          for (var r = n < 0 ? n + t : t < n ? t : n; 0 <= --r; ) e.push(r);\n          return e;\n        }),\n        gt: ve(function(e, t, n) {\n          for (var r = n < 0 ? n + t : n; ++r < t; ) e.push(r);\n          return e;\n        }),\n      },\n    }).pseudos.nth = b.pseudos.eq),\n    { radio: !0, checkbox: !0, file: !0, password: !0, image: !0 }))\n      b.pseudos[e] = de(e);\n    for (e in { submit: !0, reset: !0 }) b.pseudos[e] = he(e);\n    function me() {}\n    function xe(e) {\n      for (var t = 0, n = e.length, r = ''; t < n; t++) r += e[t].value;\n      return r;\n    }\n    function be(s, e, t) {\n      var u = e.dir,\n        l = e.next,\n        c = l || u,\n        f = t && 'parentNode' === c,\n        p = r++;\n      return e.first\n        ? function(e, t, n) {\n            while ((e = e[u])) if (1 === e.nodeType || f) return s(e, t, n);\n            return !1;\n          }\n        : function(e, t, n) {\n            var r,\n              i,\n              o,\n              a = [S, p];\n            if (n) {\n              while ((e = e[u])) if ((1 === e.nodeType || f) && s(e, t, n)) return !0;\n            } else\n              while ((e = e[u]))\n                if (1 === e.nodeType || f)\n                  if (\n                    ((i = (o = e[k] || (e[k] = {}))[e.uniqueID] || (o[e.uniqueID] = {})),\n                    l && l === e.nodeName.toLowerCase())\n                  )\n                    e = e[u] || e;\n                  else {\n                    if ((r = i[c]) && r[0] === S && r[1] === p) return (a[2] = r[2]);\n                    if (((i[c] = a)[2] = s(e, t, n))) return !0;\n                  }\n            return !1;\n          };\n    }\n    function we(i) {\n      return 1 < i.length\n        ? function(e, t, n) {\n            var r = i.length;\n            while (r--) if (!i[r](e, t, n)) return !1;\n            return !0;\n          }\n        : i[0];\n    }\n    function Te(e, t, n, r, i) {\n      for (var o, a = [], s = 0, u = e.length, l = null != t; s < u; s++)\n        (o = e[s]) && ((n && !n(o, r, i)) || (a.push(o), l && t.push(s)));\n      return a;\n    }\n    function Ce(d, h, g, v, y, e) {\n      return (\n        v && !v[k] && (v = Ce(v)),\n        y && !y[k] && (y = Ce(y, e)),\n        le(function(e, t, n, r) {\n          var i,\n            o,\n            a,\n            s = [],\n            u = [],\n            l = t.length,\n            c =\n              e ||\n              (function(e, t, n) {\n                for (var r = 0, i = t.length; r < i; r++) se(e, t[r], n);\n                return n;\n              })(h || '*', n.nodeType ? [n] : n, []),\n            f = !d || (!e && h) ? c : Te(c, s, d, n, r),\n            p = g ? (y || (e ? d : l || v) ? [] : t) : f;\n          if ((g && g(f, p, n, r), v)) {\n            (i = Te(p, u)), v(i, [], n, r), (o = i.length);\n            while (o--) (a = i[o]) && (p[u[o]] = !(f[u[o]] = a));\n          }\n          if (e) {\n            if (y || d) {\n              if (y) {\n                (i = []), (o = p.length);\n                while (o--) (a = p[o]) && i.push((f[o] = a));\n                y(null, (p = []), i, r);\n              }\n              o = p.length;\n              while (o--) (a = p[o]) && -1 < (i = y ? P(e, a) : s[o]) && (e[i] = !(t[i] = a));\n            }\n          } else (p = Te(p === t ? p.splice(l, p.length) : p)), y ? y(null, t, p, r) : H.apply(t, p);\n        })\n      );\n    }\n    function Ee(e) {\n      for (\n        var i,\n          t,\n          n,\n          r = e.length,\n          o = b.relative[e[0].type],\n          a = o || b.relative[' '],\n          s = o ? 1 : 0,\n          u = be(\n            function(e) {\n              return e === i;\n            },\n            a,\n            !0,\n          ),\n          l = be(\n            function(e) {\n              return -1 < P(i, e);\n            },\n            a,\n            !0,\n          ),\n          c = [\n            function(e, t, n) {\n              var r = (!o && (n || t !== w)) || ((i = t).nodeType ? u(e, t, n) : l(e, t, n));\n              return (i = null), r;\n            },\n          ];\n        s < r;\n        s++\n      )\n        if ((t = b.relative[e[s].type])) c = [be(we(c), t)];\n        else {\n          if ((t = b.filter[e[s].type].apply(null, e[s].matches))[k]) {\n            for (n = ++s; n < r; n++) if (b.relative[e[n].type]) break;\n            return Ce(\n              1 < s && we(c),\n              1 < s &&\n                xe(e.slice(0, s - 1).concat({ value: ' ' === e[s - 2].type ? '*' : '' })).replace(\n                  B,\n                  '$1',\n                ),\n              t,\n              s < n && Ee(e.slice(s, n)),\n              n < r && Ee((e = e.slice(n))),\n              n < r && xe(e),\n            );\n          }\n          c.push(t);\n        }\n      return we(c);\n    }\n    return (\n      (me.prototype = b.filters = b.pseudos),\n      (b.setFilters = new me()),\n      (h = se.tokenize = function(e, t) {\n        var n,\n          r,\n          i,\n          o,\n          a,\n          s,\n          u,\n          l = x[e + ' '];\n        if (l) return t ? 0 : l.slice(0);\n        (a = e), (s = []), (u = b.preFilter);\n        while (a) {\n          for (o in ((n && !(r = _.exec(a))) ||\n            (r && (a = a.slice(r[0].length) || a), s.push((i = []))),\n          (n = !1),\n          (r = z.exec(a)) &&\n            ((n = r.shift()),\n            i.push({ value: n, type: r[0].replace(B, ' ') }),\n            (a = a.slice(n.length))),\n          b.filter))\n            !(r = G[o].exec(a)) ||\n              (u[o] && !(r = u[o](r))) ||\n              ((n = r.shift()), i.push({ value: n, type: o, matches: r }), (a = a.slice(n.length)));\n          if (!n) break;\n        }\n        return t ? a.length : a ? se.error(e) : x(e, s).slice(0);\n      }),\n      (f = se.compile = function(e, t) {\n        var n,\n          v,\n          y,\n          m,\n          x,\n          r,\n          i = [],\n          o = [],\n          a = N[e + ' '];\n        if (!a) {\n          t || (t = h(e)), (n = t.length);\n          while (n--) (a = Ee(t[n]))[k] ? i.push(a) : o.push(a);\n          (a = N(\n            e,\n            ((v = o),\n            (m = 0 < (y = i).length),\n            (x = 0 < v.length),\n            (r = function(e, t, n, r, i) {\n              var o,\n                a,\n                s,\n                u = 0,\n                l = '0',\n                c = e && [],\n                f = [],\n                p = w,\n                d = e || (x && b.find.TAG('*', i)),\n                h = (S += null == p ? 1 : Math.random() || 0.1),\n                g = d.length;\n              for (i && (w = t === C || t || i); l !== g && null != (o = d[l]); l++) {\n                if (x && o) {\n                  (a = 0), t || o.ownerDocument === C || (T(o), (n = !E));\n                  while ((s = v[a++]))\n                    if (s(o, t || C, n)) {\n                      r.push(o);\n                      break;\n                    }\n                  i && (S = h);\n                }\n                m && ((o = !s && o) && u--, e && c.push(o));\n              }\n              if (((u += l), m && l !== u)) {\n                a = 0;\n                while ((s = y[a++])) s(c, f, t, n);\n                if (e) {\n                  if (0 < u) while (l--) c[l] || f[l] || (f[l] = q.call(r));\n                  f = Te(f);\n                }\n                H.apply(r, f), i && !e && 0 < f.length && 1 < u + y.length && se.uniqueSort(r);\n              }\n              return i && ((S = h), (w = p)), c;\n            }),\n            m ? le(r) : r),\n          )).selector = e;\n        }\n        return a;\n      }),\n      (g = se.select = function(e, t, n, r) {\n        var i,\n          o,\n          a,\n          s,\n          u,\n          l = 'function' == typeof e && e,\n          c = !r && h((e = l.selector || e));\n        if (((n = n || []), 1 === c.length)) {\n          if (\n            2 < (o = c[0] = c[0].slice(0)).length &&\n            'ID' === (a = o[0]).type &&\n            9 === t.nodeType &&\n            E &&\n            b.relative[o[1].type]\n          ) {\n            if (!(t = (b.find.ID(a.matches[0].replace(te, ne), t) || [])[0])) return n;\n            l && (t = t.parentNode), (e = e.slice(o.shift().value.length));\n          }\n          i = G.needsContext.test(e) ? 0 : o.length;\n          while (i--) {\n            if (((a = o[i]), b.relative[(s = a.type)])) break;\n            if (\n              (u = b.find[s]) &&\n              (r = u(a.matches[0].replace(te, ne), (ee.test(o[0].type) && ye(t.parentNode)) || t))\n            ) {\n              if ((o.splice(i, 1), !(e = r.length && xe(o)))) return H.apply(n, r), n;\n              break;\n            }\n          }\n        }\n        return (l || f(e, c))(r, t, !E, n, !t || (ee.test(e) && ye(t.parentNode)) || t), n;\n      }),\n      (d.sortStable =\n        k\n          .split('')\n          .sort(D)\n          .join('') === k),\n      (d.detectDuplicates = !!l),\n      T(),\n      (d.sortDetached = ce(function(e) {\n        return 1 & e.compareDocumentPosition(C.createElement('fieldset'));\n      })),\n      ce(function(e) {\n        return (e.innerHTML = \"<a href='#'></a>\"), '#' === e.firstChild.getAttribute('href');\n      }) ||\n        fe('type|href|height|width', function(e, t, n) {\n          if (!n) return e.getAttribute(t, 'type' === t.toLowerCase() ? 1 : 2);\n        }),\n      (d.attributes &&\n        ce(function(e) {\n          return (\n            (e.innerHTML = '<input/>'),\n            e.firstChild.setAttribute('value', ''),\n            '' === e.firstChild.getAttribute('value')\n          );\n        })) ||\n        fe('value', function(e, t, n) {\n          if (!n && 'input' === e.nodeName.toLowerCase()) return e.defaultValue;\n        }),\n      ce(function(e) {\n        return null == e.getAttribute('disabled');\n      }) ||\n        fe(R, function(e, t, n) {\n          var r;\n          if (!n)\n            return !0 === e[t]\n              ? t.toLowerCase()\n              : (r = e.getAttributeNode(t)) && r.specified\n              ? r.value\n              : null;\n        }),\n      se\n    );\n  })(C);\n  (k.find = h),\n    (k.expr = h.selectors),\n    (k.expr[':'] = k.expr.pseudos),\n    (k.uniqueSort = k.unique = h.uniqueSort),\n    (k.text = h.getText),\n    (k.isXMLDoc = h.isXML),\n    (k.contains = h.contains),\n    (k.escapeSelector = h.escape);\n  var T = function(e, t, n) {\n      var r = [],\n        i = void 0 !== n;\n      while ((e = e[t]) && 9 !== e.nodeType)\n        if (1 === e.nodeType) {\n          if (i && k(e).is(n)) break;\n          r.push(e);\n        }\n      return r;\n    },\n    S = function(e, t) {\n      for (var n = []; e; e = e.nextSibling) 1 === e.nodeType && e !== t && n.push(e);\n      return n;\n    },\n    N = k.expr.match.needsContext;\n  function A(e, t) {\n    return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase();\n  }\n  var D = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i;\n  function j(e, n, r) {\n    return m(n)\n      ? k.grep(e, function(e, t) {\n          return !!n.call(e, t, e) !== r;\n        })\n      : n.nodeType\n      ? k.grep(e, function(e) {\n          return (e === n) !== r;\n        })\n      : 'string' != typeof n\n      ? k.grep(e, function(e) {\n          return -1 < i.call(n, e) !== r;\n        })\n      : k.filter(n, e, r);\n  }\n  (k.filter = function(e, t, n) {\n    var r = t[0];\n    return (\n      n && (e = ':not(' + e + ')'),\n      1 === t.length && 1 === r.nodeType\n        ? k.find.matchesSelector(r, e)\n          ? [r]\n          : []\n        : k.find.matches(\n            e,\n            k.grep(t, function(e) {\n              return 1 === e.nodeType;\n            }),\n          )\n    );\n  }),\n    k.fn.extend({\n      find: function(e) {\n        var t,\n          n,\n          r = this.length,\n          i = this;\n        if ('string' != typeof e)\n          return this.pushStack(\n            k(e).filter(function() {\n              for (t = 0; t < r; t++) if (k.contains(i[t], this)) return !0;\n            }),\n          );\n        for (n = this.pushStack([]), t = 0; t < r; t++) k.find(e, i[t], n);\n        return 1 < r ? k.uniqueSort(n) : n;\n      },\n      filter: function(e) {\n        return this.pushStack(j(this, e || [], !1));\n      },\n      not: function(e) {\n        return this.pushStack(j(this, e || [], !0));\n      },\n      is: function(e) {\n        return !!j(this, 'string' == typeof e && N.test(e) ? k(e) : e || [], !1).length;\n      },\n    });\n  var q,\n    L = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;\n  ((k.fn.init = function(e, t, n) {\n    var r, i;\n    if (!e) return this;\n    if (((n = n || q), 'string' == typeof e)) {\n      if (\n        !(r =\n          '<' === e[0] && '>' === e[e.length - 1] && 3 <= e.length ? [null, e, null] : L.exec(e)) ||\n        (!r[1] && t)\n      )\n        return !t || t.jquery ? (t || n).find(e) : this.constructor(t).find(e);\n      if (r[1]) {\n        if (\n          ((t = t instanceof k ? t[0] : t),\n          k.merge(this, k.parseHTML(r[1], t && t.nodeType ? t.ownerDocument || t : E, !0)),\n          D.test(r[1]) && k.isPlainObject(t))\n        )\n          for (r in t) m(this[r]) ? this[r](t[r]) : this.attr(r, t[r]);\n        return this;\n      }\n      return (i = E.getElementById(r[2])) && ((this[0] = i), (this.length = 1)), this;\n    }\n    return e.nodeType\n      ? ((this[0] = e), (this.length = 1), this)\n      : m(e)\n      ? void 0 !== n.ready\n        ? n.ready(e)\n        : e(k)\n      : k.makeArray(e, this);\n  }).prototype = k.fn),\n    (q = k(E));\n  var H = /^(?:parents|prev(?:Until|All))/,\n    O = { children: !0, contents: !0, next: !0, prev: !0 };\n  function P(e, t) {\n    while ((e = e[t]) && 1 !== e.nodeType);\n    return e;\n  }\n  k.fn.extend({\n    has: function(e) {\n      var t = k(e, this),\n        n = t.length;\n      return this.filter(function() {\n        for (var e = 0; e < n; e++) if (k.contains(this, t[e])) return !0;\n      });\n    },\n    closest: function(e, t) {\n      var n,\n        r = 0,\n        i = this.length,\n        o = [],\n        a = 'string' != typeof e && k(e);\n      if (!N.test(e))\n        for (; r < i; r++)\n          for (n = this[r]; n && n !== t; n = n.parentNode)\n            if (\n              n.nodeType < 11 &&\n              (a ? -1 < a.index(n) : 1 === n.nodeType && k.find.matchesSelector(n, e))\n            ) {\n              o.push(n);\n              break;\n            }\n      return this.pushStack(1 < o.length ? k.uniqueSort(o) : o);\n    },\n    index: function(e) {\n      return e\n        ? 'string' == typeof e\n          ? i.call(k(e), this[0])\n          : i.call(this, e.jquery ? e[0] : e)\n        : this[0] && this[0].parentNode\n        ? this.first().prevAll().length\n        : -1;\n    },\n    add: function(e, t) {\n      return this.pushStack(k.uniqueSort(k.merge(this.get(), k(e, t))));\n    },\n    addBack: function(e) {\n      return this.add(null == e ? this.prevObject : this.prevObject.filter(e));\n    },\n  }),\n    k.each(\n      {\n        parent: function(e) {\n          var t = e.parentNode;\n          return t && 11 !== t.nodeType ? t : null;\n        },\n        parents: function(e) {\n          return T(e, 'parentNode');\n        },\n        parentsUntil: function(e, t, n) {\n          return T(e, 'parentNode', n);\n        },\n        next: function(e) {\n          return P(e, 'nextSibling');\n        },\n        prev: function(e) {\n          return P(e, 'previousSibling');\n        },\n        nextAll: function(e) {\n          return T(e, 'nextSibling');\n        },\n        prevAll: function(e) {\n          return T(e, 'previousSibling');\n        },\n        nextUntil: function(e, t, n) {\n          return T(e, 'nextSibling', n);\n        },\n        prevUntil: function(e, t, n) {\n          return T(e, 'previousSibling', n);\n        },\n        siblings: function(e) {\n          return S((e.parentNode || {}).firstChild, e);\n        },\n        children: function(e) {\n          return S(e.firstChild);\n        },\n        contents: function(e) {\n          return 'undefined' != typeof e.contentDocument\n            ? e.contentDocument\n            : (A(e, 'template') && (e = e.content || e), k.merge([], e.childNodes));\n        },\n      },\n      function(r, i) {\n        k.fn[r] = function(e, t) {\n          var n = k.map(this, i, e);\n          return (\n            'Until' !== r.slice(-5) && (t = e),\n            t && 'string' == typeof t && (n = k.filter(t, n)),\n            1 < this.length && (O[r] || k.uniqueSort(n), H.test(r) && n.reverse()),\n            this.pushStack(n)\n          );\n        };\n      },\n    );\n  var R = /[^\\x20\\t\\r\\n\\f]+/g;\n  function M(e) {\n    return e;\n  }\n  function I(e) {\n    throw e;\n  }\n  function W(e, t, n, r) {\n    var i;\n    try {\n      e && m((i = e.promise))\n        ? i\n            .call(e)\n            .done(t)\n            .fail(n)\n        : e && m((i = e.then))\n        ? i.call(e, t, n)\n        : t.apply(void 0, [e].slice(r));\n    } catch (e) {\n      n.apply(void 0, [e]);\n    }\n  }\n  (k.Callbacks = function(r) {\n    var e, n;\n    r =\n      'string' == typeof r\n        ? ((e = r),\n          (n = {}),\n          k.each(e.match(R) || [], function(e, t) {\n            n[t] = !0;\n          }),\n          n)\n        : k.extend({}, r);\n    var i,\n      t,\n      o,\n      a,\n      s = [],\n      u = [],\n      l = -1,\n      c = function() {\n        for (a = a || r.once, o = i = !0; u.length; l = -1) {\n          t = u.shift();\n          while (++l < s.length)\n            !1 === s[l].apply(t[0], t[1]) && r.stopOnFalse && ((l = s.length), (t = !1));\n        }\n        r.memory || (t = !1), (i = !1), a && (s = t ? [] : '');\n      },\n      f = {\n        add: function() {\n          return (\n            s &&\n              (t && !i && ((l = s.length - 1), u.push(t)),\n              (function n(e) {\n                k.each(e, function(e, t) {\n                  m(t)\n                    ? (r.unique && f.has(t)) || s.push(t)\n                    : t && t.length && 'string' !== w(t) && n(t);\n                });\n              })(arguments),\n              t && !i && c()),\n            this\n          );\n        },\n        remove: function() {\n          return (\n            k.each(arguments, function(e, t) {\n              var n;\n              while (-1 < (n = k.inArray(t, s, n))) s.splice(n, 1), n <= l && l--;\n            }),\n            this\n          );\n        },\n        has: function(e) {\n          return e ? -1 < k.inArray(e, s) : 0 < s.length;\n        },\n        empty: function() {\n          return s && (s = []), this;\n        },\n        disable: function() {\n          return (a = u = []), (s = t = ''), this;\n        },\n        disabled: function() {\n          return !s;\n        },\n        lock: function() {\n          return (a = u = []), t || i || (s = t = ''), this;\n        },\n        locked: function() {\n          return !!a;\n        },\n        fireWith: function(e, t) {\n          return a || ((t = [e, (t = t || []).slice ? t.slice() : t]), u.push(t), i || c()), this;\n        },\n        fire: function() {\n          return f.fireWith(this, arguments), this;\n        },\n        fired: function() {\n          return !!o;\n        },\n      };\n    return f;\n  }),\n    k.extend({\n      Deferred: function(e) {\n        var o = [\n            ['notify', 'progress', k.Callbacks('memory'), k.Callbacks('memory'), 2],\n            [\n              'resolve',\n              'done',\n              k.Callbacks('once memory'),\n              k.Callbacks('once memory'),\n              0,\n              'resolved',\n            ],\n            [\n              'reject',\n              'fail',\n              k.Callbacks('once memory'),\n              k.Callbacks('once memory'),\n              1,\n              'rejected',\n            ],\n          ],\n          i = 'pending',\n          a = {\n            state: function() {\n              return i;\n            },\n            always: function() {\n              return s.done(arguments).fail(arguments), this;\n            },\n            catch: function(e) {\n              return a.then(null, e);\n            },\n            pipe: function() {\n              var i = arguments;\n              return k\n                .Deferred(function(r) {\n                  k.each(o, function(e, t) {\n                    var n = m(i[t[4]]) && i[t[4]];\n                    s[t[1]](function() {\n                      var e = n && n.apply(this, arguments);\n                      e && m(e.promise)\n                        ? e\n                            .promise()\n                            .progress(r.notify)\n                            .done(r.resolve)\n                            .fail(r.reject)\n                        : r[t[0] + 'With'](this, n ? [e] : arguments);\n                    });\n                  }),\n                    (i = null);\n                })\n                .promise();\n            },\n            then: function(t, n, r) {\n              var u = 0;\n              function l(i, o, a, s) {\n                return function() {\n                  var n = this,\n                    r = arguments,\n                    e = function() {\n                      var e, t;\n                      if (!(i < u)) {\n                        if ((e = a.apply(n, r)) === o.promise())\n                          throw new TypeError('Thenable self-resolution');\n                        (t = e && ('object' == typeof e || 'function' == typeof e) && e.then),\n                          m(t)\n                            ? s\n                              ? t.call(e, l(u, o, M, s), l(u, o, I, s))\n                              : (u++,\n                                t.call(e, l(u, o, M, s), l(u, o, I, s), l(u, o, M, o.notifyWith)))\n                            : (a !== M && ((n = void 0), (r = [e])), (s || o.resolveWith)(n, r));\n                      }\n                    },\n                    t = s\n                      ? e\n                      : function() {\n                          try {\n                            e();\n                          } catch (e) {\n                            k.Deferred.exceptionHook && k.Deferred.exceptionHook(e, t.stackTrace),\n                              u <= i + 1 &&\n                                (a !== I && ((n = void 0), (r = [e])), o.rejectWith(n, r));\n                          }\n                        };\n                  i\n                    ? t()\n                    : (k.Deferred.getStackHook && (t.stackTrace = k.Deferred.getStackHook()),\n                      C.setTimeout(t));\n                };\n              }\n              return k\n                .Deferred(function(e) {\n                  o[0][3].add(l(0, e, m(r) ? r : M, e.notifyWith)),\n                    o[1][3].add(l(0, e, m(t) ? t : M)),\n                    o[2][3].add(l(0, e, m(n) ? n : I));\n                })\n                .promise();\n            },\n            promise: function(e) {\n              return null != e ? k.extend(e, a) : a;\n            },\n          },\n          s = {};\n        return (\n          k.each(o, function(e, t) {\n            var n = t[2],\n              r = t[5];\n            (a[t[1]] = n.add),\n              r &&\n                n.add(\n                  function() {\n                    i = r;\n                  },\n                  o[3 - e][2].disable,\n                  o[3 - e][3].disable,\n                  o[0][2].lock,\n                  o[0][3].lock,\n                ),\n              n.add(t[3].fire),\n              (s[t[0]] = function() {\n                return s[t[0] + 'With'](this === s ? void 0 : this, arguments), this;\n              }),\n              (s[t[0] + 'With'] = n.fireWith);\n          }),\n          a.promise(s),\n          e && e.call(s, s),\n          s\n        );\n      },\n      when: function(e) {\n        var n = arguments.length,\n          t = n,\n          r = Array(t),\n          i = s.call(arguments),\n          o = k.Deferred(),\n          a = function(t) {\n            return function(e) {\n              (r[t] = this),\n                (i[t] = 1 < arguments.length ? s.call(arguments) : e),\n                --n || o.resolveWith(r, i);\n            };\n          };\n        if (\n          n <= 1 &&\n          (W(e, o.done(a(t)).resolve, o.reject, !n),\n          'pending' === o.state() || m(i[t] && i[t].then))\n        )\n          return o.then();\n        while (t--) W(i[t], a(t), o.reject);\n        return o.promise();\n      },\n    });\n  var $ = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n  (k.Deferred.exceptionHook = function(e, t) {\n    C.console &&\n      C.console.warn &&\n      e &&\n      $.test(e.name) &&\n      C.console.warn('jQuery.Deferred exception: ' + e.message, e.stack, t);\n  }),\n    (k.readyException = function(e) {\n      C.setTimeout(function() {\n        throw e;\n      });\n    });\n  var F = k.Deferred();\n  function B() {\n    E.removeEventListener('DOMContentLoaded', B), C.removeEventListener('load', B), k.ready();\n  }\n  (k.fn.ready = function(e) {\n    return (\n      F.then(e)['catch'](function(e) {\n        k.readyException(e);\n      }),\n      this\n    );\n  }),\n    k.extend({\n      isReady: !1,\n      readyWait: 1,\n      ready: function(e) {\n        (!0 === e ? --k.readyWait : k.isReady) ||\n          ((k.isReady = !0) !== e && 0 < --k.readyWait) ||\n          F.resolveWith(E, [k]);\n      },\n    }),\n    (k.ready.then = F.then),\n    'complete' === E.readyState || ('loading' !== E.readyState && !E.documentElement.doScroll)\n      ? C.setTimeout(k.ready)\n      : (E.addEventListener('DOMContentLoaded', B), C.addEventListener('load', B));\n  var _ = function(e, t, n, r, i, o, a) {\n      var s = 0,\n        u = e.length,\n        l = null == n;\n      if ('object' === w(n)) for (s in ((i = !0), n)) _(e, t, s, n[s], !0, o, a);\n      else if (\n        void 0 !== r &&\n        ((i = !0),\n        m(r) || (a = !0),\n        l &&\n          (a\n            ? (t.call(e, r), (t = null))\n            : ((l = t),\n              (t = function(e, t, n) {\n                return l.call(k(e), n);\n              }))),\n        t)\n      )\n        for (; s < u; s++) t(e[s], n, a ? r : r.call(e[s], s, t(e[s], n)));\n      return i ? e : l ? t.call(e) : u ? t(e[0], n) : o;\n    },\n    z = /^-ms-/,\n    U = /-([a-z])/g;\n  function X(e, t) {\n    return t.toUpperCase();\n  }\n  function V(e) {\n    return e.replace(z, 'ms-').replace(U, X);\n  }\n  var G = function(e) {\n    return 1 === e.nodeType || 9 === e.nodeType || !+e.nodeType;\n  };\n  function Y() {\n    this.expando = k.expando + Y.uid++;\n  }\n  (Y.uid = 1),\n    (Y.prototype = {\n      cache: function(e) {\n        var t = e[this.expando];\n        return (\n          t ||\n            ((t = {}),\n            G(e) &&\n              (e.nodeType\n                ? (e[this.expando] = t)\n                : Object.defineProperty(e, this.expando, { value: t, configurable: !0 }))),\n          t\n        );\n      },\n      set: function(e, t, n) {\n        var r,\n          i = this.cache(e);\n        if ('string' == typeof t) i[V(t)] = n;\n        else for (r in t) i[V(r)] = t[r];\n        return i;\n      },\n      get: function(e, t) {\n        return void 0 === t ? this.cache(e) : e[this.expando] && e[this.expando][V(t)];\n      },\n      access: function(e, t, n) {\n        return void 0 === t || (t && 'string' == typeof t && void 0 === n)\n          ? this.get(e, t)\n          : (this.set(e, t, n), void 0 !== n ? n : t);\n      },\n      remove: function(e, t) {\n        var n,\n          r = e[this.expando];\n        if (void 0 !== r) {\n          if (void 0 !== t) {\n            n = (t = Array.isArray(t) ? t.map(V) : (t = V(t)) in r ? [t] : t.match(R) || []).length;\n            while (n--) delete r[t[n]];\n          }\n          (void 0 === t || k.isEmptyObject(r)) &&\n            (e.nodeType ? (e[this.expando] = void 0) : delete e[this.expando]);\n        }\n      },\n      hasData: function(e) {\n        var t = e[this.expando];\n        return void 0 !== t && !k.isEmptyObject(t);\n      },\n    });\n  var Q = new Y(),\n    J = new Y(),\n    K = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n    Z = /[A-Z]/g;\n  function ee(e, t, n) {\n    var r, i;\n    if (void 0 === n && 1 === e.nodeType)\n      if (\n        ((r = 'data-' + t.replace(Z, '-$&').toLowerCase()),\n        'string' == typeof (n = e.getAttribute(r)))\n      ) {\n        try {\n          n =\n            'true' === (i = n) ||\n            ('false' !== i &&\n              ('null' === i ? null : i === +i + '' ? +i : K.test(i) ? JSON.parse(i) : i));\n        } catch (e) {}\n        J.set(e, t, n);\n      } else n = void 0;\n    return n;\n  }\n  k.extend({\n    hasData: function(e) {\n      return J.hasData(e) || Q.hasData(e);\n    },\n    data: function(e, t, n) {\n      return J.access(e, t, n);\n    },\n    removeData: function(e, t) {\n      J.remove(e, t);\n    },\n    _data: function(e, t, n) {\n      return Q.access(e, t, n);\n    },\n    _removeData: function(e, t) {\n      Q.remove(e, t);\n    },\n  }),\n    k.fn.extend({\n      data: function(n, e) {\n        var t,\n          r,\n          i,\n          o = this[0],\n          a = o && o.attributes;\n        if (void 0 === n) {\n          if (this.length && ((i = J.get(o)), 1 === o.nodeType && !Q.get(o, 'hasDataAttrs'))) {\n            t = a.length;\n            while (t--)\n              a[t] &&\n                0 === (r = a[t].name).indexOf('data-') &&\n                ((r = V(r.slice(5))), ee(o, r, i[r]));\n            Q.set(o, 'hasDataAttrs', !0);\n          }\n          return i;\n        }\n        return 'object' == typeof n\n          ? this.each(function() {\n              J.set(this, n);\n            })\n          : _(\n              this,\n              function(e) {\n                var t;\n                if (o && void 0 === e)\n                  return void 0 !== (t = J.get(o, n)) ? t : void 0 !== (t = ee(o, n)) ? t : void 0;\n                this.each(function() {\n                  J.set(this, n, e);\n                });\n              },\n              null,\n              e,\n              1 < arguments.length,\n              null,\n              !0,\n            );\n      },\n      removeData: function(e) {\n        return this.each(function() {\n          J.remove(this, e);\n        });\n      },\n    }),\n    k.extend({\n      queue: function(e, t, n) {\n        var r;\n        if (e)\n          return (\n            (t = (t || 'fx') + 'queue'),\n            (r = Q.get(e, t)),\n            n && (!r || Array.isArray(n) ? (r = Q.access(e, t, k.makeArray(n))) : r.push(n)),\n            r || []\n          );\n      },\n      dequeue: function(e, t) {\n        t = t || 'fx';\n        var n = k.queue(e, t),\n          r = n.length,\n          i = n.shift(),\n          o = k._queueHooks(e, t);\n        'inprogress' === i && ((i = n.shift()), r--),\n          i &&\n            ('fx' === t && n.unshift('inprogress'),\n            delete o.stop,\n            i.call(\n              e,\n              function() {\n                k.dequeue(e, t);\n              },\n              o,\n            )),\n          !r && o && o.empty.fire();\n      },\n      _queueHooks: function(e, t) {\n        var n = t + 'queueHooks';\n        return (\n          Q.get(e, n) ||\n          Q.access(e, n, {\n            empty: k.Callbacks('once memory').add(function() {\n              Q.remove(e, [t + 'queue', n]);\n            }),\n          })\n        );\n      },\n    }),\n    k.fn.extend({\n      queue: function(t, n) {\n        var e = 2;\n        return (\n          'string' != typeof t && ((n = t), (t = 'fx'), e--),\n          arguments.length < e\n            ? k.queue(this[0], t)\n            : void 0 === n\n            ? this\n            : this.each(function() {\n                var e = k.queue(this, t, n);\n                k._queueHooks(this, t), 'fx' === t && 'inprogress' !== e[0] && k.dequeue(this, t);\n              })\n        );\n      },\n      dequeue: function(e) {\n        return this.each(function() {\n          k.dequeue(this, e);\n        });\n      },\n      clearQueue: function(e) {\n        return this.queue(e || 'fx', []);\n      },\n      promise: function(e, t) {\n        var n,\n          r = 1,\n          i = k.Deferred(),\n          o = this,\n          a = this.length,\n          s = function() {\n            --r || i.resolveWith(o, [o]);\n          };\n        'string' != typeof e && ((t = e), (e = void 0)), (e = e || 'fx');\n        while (a--) (n = Q.get(o[a], e + 'queueHooks')) && n.empty && (r++, n.empty.add(s));\n        return s(), i.promise(t);\n      },\n    });\n  var te = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n    ne = new RegExp('^(?:([+-])=|)(' + te + ')([a-z%]*)$', 'i'),\n    re = ['Top', 'Right', 'Bottom', 'Left'],\n    ie = E.documentElement,\n    oe = function(e) {\n      return k.contains(e.ownerDocument, e);\n    },\n    ae = { composed: !0 };\n  ie.getRootNode &&\n    (oe = function(e) {\n      return k.contains(e.ownerDocument, e) || e.getRootNode(ae) === e.ownerDocument;\n    });\n  var se = function(e, t) {\n      return (\n        'none' === (e = t || e).style.display ||\n        ('' === e.style.display && oe(e) && 'none' === k.css(e, 'display'))\n      );\n    },\n    ue = function(e, t, n, r) {\n      var i,\n        o,\n        a = {};\n      for (o in t) (a[o] = e.style[o]), (e.style[o] = t[o]);\n      for (o in ((i = n.apply(e, r || [])), t)) e.style[o] = a[o];\n      return i;\n    };\n  function le(e, t, n, r) {\n    var i,\n      o,\n      a = 20,\n      s = r\n        ? function() {\n            return r.cur();\n          }\n        : function() {\n            return k.css(e, t, '');\n          },\n      u = s(),\n      l = (n && n[3]) || (k.cssNumber[t] ? '' : 'px'),\n      c = e.nodeType && (k.cssNumber[t] || ('px' !== l && +u)) && ne.exec(k.css(e, t));\n    if (c && c[3] !== l) {\n      (u /= 2), (l = l || c[3]), (c = +u || 1);\n      while (a--)\n        k.style(e, t, c + l), (1 - o) * (1 - (o = s() / u || 0.5)) <= 0 && (a = 0), (c /= o);\n      (c *= 2), k.style(e, t, c + l), (n = n || []);\n    }\n    return (\n      n &&\n        ((c = +c || +u || 0),\n        (i = n[1] ? c + (n[1] + 1) * n[2] : +n[2]),\n        r && ((r.unit = l), (r.start = c), (r.end = i))),\n      i\n    );\n  }\n  var ce = {};\n  function fe(e, t) {\n    for (var n, r, i, o, a, s, u, l = [], c = 0, f = e.length; c < f; c++)\n      (r = e[c]).style &&\n        ((n = r.style.display),\n        t\n          ? ('none' === n && ((l[c] = Q.get(r, 'display') || null), l[c] || (r.style.display = '')),\n            '' === r.style.display &&\n              se(r) &&\n              (l[c] =\n                ((u = a = o = void 0),\n                (a = (i = r).ownerDocument),\n                (s = i.nodeName),\n                (u = ce[s]) ||\n                  ((o = a.body.appendChild(a.createElement(s))),\n                  (u = k.css(o, 'display')),\n                  o.parentNode.removeChild(o),\n                  'none' === u && (u = 'block'),\n                  (ce[s] = u)))))\n          : 'none' !== n && ((l[c] = 'none'), Q.set(r, 'display', n)));\n    for (c = 0; c < f; c++) null != l[c] && (e[c].style.display = l[c]);\n    return e;\n  }\n  k.fn.extend({\n    show: function() {\n      return fe(this, !0);\n    },\n    hide: function() {\n      return fe(this);\n    },\n    toggle: function(e) {\n      return 'boolean' == typeof e\n        ? e\n          ? this.show()\n          : this.hide()\n        : this.each(function() {\n            se(this) ? k(this).show() : k(this).hide();\n          });\n    },\n  });\n  var pe = /^(?:checkbox|radio)$/i,\n    de = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i,\n    he = /^$|^module$|\\/(?:java|ecma)script/i,\n    ge = {\n      option: [1, \"<select multiple='multiple'>\", '</select>'],\n      thead: [1, '<table>', '</table>'],\n      col: [2, '<table><colgroup>', '</colgroup></table>'],\n      tr: [2, '<table><tbody>', '</tbody></table>'],\n      td: [3, '<table><tbody><tr>', '</tr></tbody></table>'],\n      _default: [0, '', ''],\n    };\n  function ve(e, t) {\n    var n;\n    return (\n      (n =\n        'undefined' != typeof e.getElementsByTagName\n          ? e.getElementsByTagName(t || '*')\n          : 'undefined' != typeof e.querySelectorAll\n          ? e.querySelectorAll(t || '*')\n          : []),\n      void 0 === t || (t && A(e, t)) ? k.merge([e], n) : n\n    );\n  }\n  function ye(e, t) {\n    for (var n = 0, r = e.length; n < r; n++)\n      Q.set(e[n], 'globalEval', !t || Q.get(t[n], 'globalEval'));\n  }\n  (ge.optgroup = ge.option),\n    (ge.tbody = ge.tfoot = ge.colgroup = ge.caption = ge.thead),\n    (ge.th = ge.td);\n  var me,\n    xe,\n    be = /<|&#?\\w+;/;\n  function we(e, t, n, r, i) {\n    for (\n      var o, a, s, u, l, c, f = t.createDocumentFragment(), p = [], d = 0, h = e.length;\n      d < h;\n      d++\n    )\n      if ((o = e[d]) || 0 === o)\n        if ('object' === w(o)) k.merge(p, o.nodeType ? [o] : o);\n        else if (be.test(o)) {\n          (a = a || f.appendChild(t.createElement('div'))),\n            (s = (de.exec(o) || ['', ''])[1].toLowerCase()),\n            (u = ge[s] || ge._default),\n            (a.innerHTML = u[1] + k.htmlPrefilter(o) + u[2]),\n            (c = u[0]);\n          while (c--) a = a.lastChild;\n          k.merge(p, a.childNodes), ((a = f.firstChild).textContent = '');\n        } else p.push(t.createTextNode(o));\n    (f.textContent = ''), (d = 0);\n    while ((o = p[d++]))\n      if (r && -1 < k.inArray(o, r)) i && i.push(o);\n      else if (((l = oe(o)), (a = ve(f.appendChild(o), 'script')), l && ye(a), n)) {\n        c = 0;\n        while ((o = a[c++])) he.test(o.type || '') && n.push(o);\n      }\n    return f;\n  }\n  (me = E.createDocumentFragment().appendChild(E.createElement('div'))),\n    (xe = E.createElement('input')).setAttribute('type', 'radio'),\n    xe.setAttribute('checked', 'checked'),\n    xe.setAttribute('name', 't'),\n    me.appendChild(xe),\n    (y.checkClone = me.cloneNode(!0).cloneNode(!0).lastChild.checked),\n    (me.innerHTML = '<textarea>x</textarea>'),\n    (y.noCloneChecked = !!me.cloneNode(!0).lastChild.defaultValue);\n  var Te = /^key/,\n    Ce = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n    Ee = /^([^.]*)(?:\\.(.+)|)/;\n  function ke() {\n    return !0;\n  }\n  function Se() {\n    return !1;\n  }\n  function Ne(e, t) {\n    return (\n      (e ===\n        (function() {\n          try {\n            return E.activeElement;\n          } catch (e) {}\n        })()) ==\n      ('focus' === t)\n    );\n  }\n  function Ae(e, t, n, r, i, o) {\n    var a, s;\n    if ('object' == typeof t) {\n      for (s in ('string' != typeof n && ((r = r || n), (n = void 0)), t)) Ae(e, s, n, r, t[s], o);\n      return e;\n    }\n    if (\n      (null == r && null == i\n        ? ((i = n), (r = n = void 0))\n        : null == i &&\n          ('string' == typeof n ? ((i = r), (r = void 0)) : ((i = r), (r = n), (n = void 0))),\n      !1 === i)\n    )\n      i = Se;\n    else if (!i) return e;\n    return (\n      1 === o &&\n        ((a = i),\n        ((i = function(e) {\n          return k().off(e), a.apply(this, arguments);\n        }).guid = a.guid || (a.guid = k.guid++))),\n      e.each(function() {\n        k.event.add(this, t, i, r, n);\n      })\n    );\n  }\n  function De(e, i, o) {\n    o\n      ? (Q.set(e, i, !1),\n        k.event.add(e, i, {\n          namespace: !1,\n          handler: function(e) {\n            var t,\n              n,\n              r = Q.get(this, i);\n            if (1 & e.isTrigger && this[i]) {\n              if (r.length) (k.event.special[i] || {}).delegateType && e.stopPropagation();\n              else if (\n                ((r = s.call(arguments)),\n                Q.set(this, i, r),\n                (t = o(this, i)),\n                this[i](),\n                r !== (n = Q.get(this, i)) || t ? Q.set(this, i, !1) : (n = {}),\n                r !== n)\n              )\n                return e.stopImmediatePropagation(), e.preventDefault(), n.value;\n            } else\n              r.length &&\n                (Q.set(this, i, {\n                  value: k.event.trigger(k.extend(r[0], k.Event.prototype), r.slice(1), this),\n                }),\n                e.stopImmediatePropagation());\n          },\n        }))\n      : void 0 === Q.get(e, i) && k.event.add(e, i, ke);\n  }\n  (k.event = {\n    global: {},\n    add: function(t, e, n, r, i) {\n      var o,\n        a,\n        s,\n        u,\n        l,\n        c,\n        f,\n        p,\n        d,\n        h,\n        g,\n        v = Q.get(t);\n      if (v) {\n        n.handler && ((n = (o = n).handler), (i = o.selector)),\n          i && k.find.matchesSelector(ie, i),\n          n.guid || (n.guid = k.guid++),\n          (u = v.events) || (u = v.events = {}),\n          (a = v.handle) ||\n            (a = v.handle = function(e) {\n              return 'undefined' != typeof k && k.event.triggered !== e.type\n                ? k.event.dispatch.apply(t, arguments)\n                : void 0;\n            }),\n          (l = (e = (e || '').match(R) || ['']).length);\n        while (l--)\n          (d = g = (s = Ee.exec(e[l]) || [])[1]),\n            (h = (s[2] || '').split('.').sort()),\n            d &&\n              ((f = k.event.special[d] || {}),\n              (d = (i ? f.delegateType : f.bindType) || d),\n              (f = k.event.special[d] || {}),\n              (c = k.extend(\n                {\n                  type: d,\n                  origType: g,\n                  data: r,\n                  handler: n,\n                  guid: n.guid,\n                  selector: i,\n                  needsContext: i && k.expr.match.needsContext.test(i),\n                  namespace: h.join('.'),\n                },\n                o,\n              )),\n              (p = u[d]) ||\n                (((p = u[d] = []).delegateCount = 0),\n                (f.setup && !1 !== f.setup.call(t, r, h, a)) ||\n                  (t.addEventListener && t.addEventListener(d, a))),\n              f.add && (f.add.call(t, c), c.handler.guid || (c.handler.guid = n.guid)),\n              i ? p.splice(p.delegateCount++, 0, c) : p.push(c),\n              (k.event.global[d] = !0));\n      }\n    },\n    remove: function(e, t, n, r, i) {\n      var o,\n        a,\n        s,\n        u,\n        l,\n        c,\n        f,\n        p,\n        d,\n        h,\n        g,\n        v = Q.hasData(e) && Q.get(e);\n      if (v && (u = v.events)) {\n        l = (t = (t || '').match(R) || ['']).length;\n        while (l--)\n          if (((d = g = (s = Ee.exec(t[l]) || [])[1]), (h = (s[2] || '').split('.').sort()), d)) {\n            (f = k.event.special[d] || {}),\n              (p = u[(d = (r ? f.delegateType : f.bindType) || d)] || []),\n              (s = s[2] && new RegExp('(^|\\\\.)' + h.join('\\\\.(?:.*\\\\.|)') + '(\\\\.|$)')),\n              (a = o = p.length);\n            while (o--)\n              (c = p[o]),\n                (!i && g !== c.origType) ||\n                  (n && n.guid !== c.guid) ||\n                  (s && !s.test(c.namespace)) ||\n                  (r && r !== c.selector && ('**' !== r || !c.selector)) ||\n                  (p.splice(o, 1),\n                  c.selector && p.delegateCount--,\n                  f.remove && f.remove.call(e, c));\n            a &&\n              !p.length &&\n              ((f.teardown && !1 !== f.teardown.call(e, h, v.handle)) ||\n                k.removeEvent(e, d, v.handle),\n              delete u[d]);\n          } else for (d in u) k.event.remove(e, d + t[l], n, r, !0);\n        k.isEmptyObject(u) && Q.remove(e, 'handle events');\n      }\n    },\n    dispatch: function(e) {\n      var t,\n        n,\n        r,\n        i,\n        o,\n        a,\n        s = k.event.fix(e),\n        u = new Array(arguments.length),\n        l = (Q.get(this, 'events') || {})[s.type] || [],\n        c = k.event.special[s.type] || {};\n      for (u[0] = s, t = 1; t < arguments.length; t++) u[t] = arguments[t];\n      if (((s.delegateTarget = this), !c.preDispatch || !1 !== c.preDispatch.call(this, s))) {\n        (a = k.event.handlers.call(this, s, l)), (t = 0);\n        while ((i = a[t++]) && !s.isPropagationStopped()) {\n          (s.currentTarget = i.elem), (n = 0);\n          while ((o = i.handlers[n++]) && !s.isImmediatePropagationStopped())\n            (s.rnamespace && !1 !== o.namespace && !s.rnamespace.test(o.namespace)) ||\n              ((s.handleObj = o),\n              (s.data = o.data),\n              void 0 !==\n                (r = ((k.event.special[o.origType] || {}).handle || o.handler).apply(i.elem, u)) &&\n                !1 === (s.result = r) &&\n                (s.preventDefault(), s.stopPropagation()));\n        }\n        return c.postDispatch && c.postDispatch.call(this, s), s.result;\n      }\n    },\n    handlers: function(e, t) {\n      var n,\n        r,\n        i,\n        o,\n        a,\n        s = [],\n        u = t.delegateCount,\n        l = e.target;\n      if (u && l.nodeType && !('click' === e.type && 1 <= e.button))\n        for (; l !== this; l = l.parentNode || this)\n          if (1 === l.nodeType && ('click' !== e.type || !0 !== l.disabled)) {\n            for (o = [], a = {}, n = 0; n < u; n++)\n              void 0 === a[(i = (r = t[n]).selector + ' ')] &&\n                (a[i] = r.needsContext\n                  ? -1 < k(i, this).index(l)\n                  : k.find(i, this, null, [l]).length),\n                a[i] && o.push(r);\n            o.length && s.push({ elem: l, handlers: o });\n          }\n      return (l = this), u < t.length && s.push({ elem: l, handlers: t.slice(u) }), s;\n    },\n    addProp: function(t, e) {\n      Object.defineProperty(k.Event.prototype, t, {\n        enumerable: !0,\n        configurable: !0,\n        get: m(e)\n          ? function() {\n              if (this.originalEvent) return e(this.originalEvent);\n            }\n          : function() {\n              if (this.originalEvent) return this.originalEvent[t];\n            },\n        set: function(e) {\n          Object.defineProperty(this, t, {\n            enumerable: !0,\n            configurable: !0,\n            writable: !0,\n            value: e,\n          });\n        },\n      });\n    },\n    fix: function(e) {\n      return e[k.expando] ? e : new k.Event(e);\n    },\n    special: {\n      load: { noBubble: !0 },\n      click: {\n        setup: function(e) {\n          var t = this || e;\n          return pe.test(t.type) && t.click && A(t, 'input') && De(t, 'click', ke), !1;\n        },\n        trigger: function(e) {\n          var t = this || e;\n          return pe.test(t.type) && t.click && A(t, 'input') && De(t, 'click'), !0;\n        },\n        _default: function(e) {\n          var t = e.target;\n          return (pe.test(t.type) && t.click && A(t, 'input') && Q.get(t, 'click')) || A(t, 'a');\n        },\n      },\n      beforeunload: {\n        postDispatch: function(e) {\n          void 0 !== e.result && e.originalEvent && (e.originalEvent.returnValue = e.result);\n        },\n      },\n    },\n  }),\n    (k.removeEvent = function(e, t, n) {\n      e.removeEventListener && e.removeEventListener(t, n);\n    }),\n    (k.Event = function(e, t) {\n      if (!(this instanceof k.Event)) return new k.Event(e, t);\n      e && e.type\n        ? ((this.originalEvent = e),\n          (this.type = e.type),\n          (this.isDefaultPrevented =\n            e.defaultPrevented || (void 0 === e.defaultPrevented && !1 === e.returnValue)\n              ? ke\n              : Se),\n          (this.target = e.target && 3 === e.target.nodeType ? e.target.parentNode : e.target),\n          (this.currentTarget = e.currentTarget),\n          (this.relatedTarget = e.relatedTarget))\n        : (this.type = e),\n        t && k.extend(this, t),\n        (this.timeStamp = (e && e.timeStamp) || Date.now()),\n        (this[k.expando] = !0);\n    }),\n    (k.Event.prototype = {\n      constructor: k.Event,\n      isDefaultPrevented: Se,\n      isPropagationStopped: Se,\n      isImmediatePropagationStopped: Se,\n      isSimulated: !1,\n      preventDefault: function() {\n        var e = this.originalEvent;\n        (this.isDefaultPrevented = ke), e && !this.isSimulated && e.preventDefault();\n      },\n      stopPropagation: function() {\n        var e = this.originalEvent;\n        (this.isPropagationStopped = ke), e && !this.isSimulated && e.stopPropagation();\n      },\n      stopImmediatePropagation: function() {\n        var e = this.originalEvent;\n        (this.isImmediatePropagationStopped = ke),\n          e && !this.isSimulated && e.stopImmediatePropagation(),\n          this.stopPropagation();\n      },\n    }),\n    k.each(\n      {\n        altKey: !0,\n        bubbles: !0,\n        cancelable: !0,\n        changedTouches: !0,\n        ctrlKey: !0,\n        detail: !0,\n        eventPhase: !0,\n        metaKey: !0,\n        pageX: !0,\n        pageY: !0,\n        shiftKey: !0,\n        view: !0,\n        char: !0,\n        code: !0,\n        charCode: !0,\n        key: !0,\n        keyCode: !0,\n        button: !0,\n        buttons: !0,\n        clientX: !0,\n        clientY: !0,\n        offsetX: !0,\n        offsetY: !0,\n        pointerId: !0,\n        pointerType: !0,\n        screenX: !0,\n        screenY: !0,\n        targetTouches: !0,\n        toElement: !0,\n        touches: !0,\n        which: function(e) {\n          var t = e.button;\n          return null == e.which && Te.test(e.type)\n            ? null != e.charCode\n              ? e.charCode\n              : e.keyCode\n            : !e.which && void 0 !== t && Ce.test(e.type)\n            ? 1 & t\n              ? 1\n              : 2 & t\n              ? 3\n              : 4 & t\n              ? 2\n              : 0\n            : e.which;\n        },\n      },\n      k.event.addProp,\n    ),\n    k.each({ focus: 'focusin', blur: 'focusout' }, function(e, t) {\n      k.event.special[e] = {\n        setup: function() {\n          return De(this, e, Ne), !1;\n        },\n        trigger: function() {\n          return De(this, e), !0;\n        },\n        delegateType: t,\n      };\n    }),\n    k.each(\n      {\n        mouseenter: 'mouseover',\n        mouseleave: 'mouseout',\n        pointerenter: 'pointerover',\n        pointerleave: 'pointerout',\n      },\n      function(e, i) {\n        k.event.special[e] = {\n          delegateType: i,\n          bindType: i,\n          handle: function(e) {\n            var t,\n              n = e.relatedTarget,\n              r = e.handleObj;\n            return (\n              (n && (n === this || k.contains(this, n))) ||\n                ((e.type = r.origType), (t = r.handler.apply(this, arguments)), (e.type = i)),\n              t\n            );\n          },\n        };\n      },\n    ),\n    k.fn.extend({\n      on: function(e, t, n, r) {\n        return Ae(this, e, t, n, r);\n      },\n      one: function(e, t, n, r) {\n        return Ae(this, e, t, n, r, 1);\n      },\n      off: function(e, t, n) {\n        var r, i;\n        if (e && e.preventDefault && e.handleObj)\n          return (\n            (r = e.handleObj),\n            k(e.delegateTarget).off(\n              r.namespace ? r.origType + '.' + r.namespace : r.origType,\n              r.selector,\n              r.handler,\n            ),\n            this\n          );\n        if ('object' == typeof e) {\n          for (i in e) this.off(i, t, e[i]);\n          return this;\n        }\n        return (\n          (!1 !== t && 'function' != typeof t) || ((n = t), (t = void 0)),\n          !1 === n && (n = Se),\n          this.each(function() {\n            k.event.remove(this, e, n, t);\n          })\n        );\n      },\n    });\n  var je = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n    qe = /<script|<style|<link/i,\n    Le = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n    He = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n  function Oe(e, t) {\n    return (\n      (A(e, 'table') &&\n        A(11 !== t.nodeType ? t : t.firstChild, 'tr') &&\n        k(e).children('tbody')[0]) ||\n      e\n    );\n  }\n  function Pe(e) {\n    return (e.type = (null !== e.getAttribute('type')) + '/' + e.type), e;\n  }\n  function Re(e) {\n    return (\n      'true/' === (e.type || '').slice(0, 5)\n        ? (e.type = e.type.slice(5))\n        : e.removeAttribute('type'),\n      e\n    );\n  }\n  function Me(e, t) {\n    var n, r, i, o, a, s, u, l;\n    if (1 === t.nodeType) {\n      if (Q.hasData(e) && ((o = Q.access(e)), (a = Q.set(t, o)), (l = o.events)))\n        for (i in (delete a.handle, (a.events = {}), l))\n          for (n = 0, r = l[i].length; n < r; n++) k.event.add(t, i, l[i][n]);\n      J.hasData(e) && ((s = J.access(e)), (u = k.extend({}, s)), J.set(t, u));\n    }\n  }\n  function Ie(n, r, i, o) {\n    r = g.apply([], r);\n    var e,\n      t,\n      a,\n      s,\n      u,\n      l,\n      c = 0,\n      f = n.length,\n      p = f - 1,\n      d = r[0],\n      h = m(d);\n    if (h || (1 < f && 'string' == typeof d && !y.checkClone && Le.test(d)))\n      return n.each(function(e) {\n        var t = n.eq(e);\n        h && (r[0] = d.call(this, e, t.html())), Ie(t, r, i, o);\n      });\n    if (\n      f &&\n      ((t = (e = we(r, n[0].ownerDocument, !1, n, o)).firstChild),\n      1 === e.childNodes.length && (e = t),\n      t || o)\n    ) {\n      for (s = (a = k.map(ve(e, 'script'), Pe)).length; c < f; c++)\n        (u = e),\n          c !== p && ((u = k.clone(u, !0, !0)), s && k.merge(a, ve(u, 'script'))),\n          i.call(n[c], u, c);\n      if (s)\n        for (l = a[a.length - 1].ownerDocument, k.map(a, Re), c = 0; c < s; c++)\n          (u = a[c]),\n            he.test(u.type || '') &&\n              !Q.access(u, 'globalEval') &&\n              k.contains(l, u) &&\n              (u.src && 'module' !== (u.type || '').toLowerCase()\n                ? k._evalUrl &&\n                  !u.noModule &&\n                  k._evalUrl(u.src, { nonce: u.nonce || u.getAttribute('nonce') })\n                : b(u.textContent.replace(He, ''), u, l));\n    }\n    return n;\n  }\n  function We(e, t, n) {\n    for (var r, i = t ? k.filter(t, e) : e, o = 0; null != (r = i[o]); o++)\n      n || 1 !== r.nodeType || k.cleanData(ve(r)),\n        r.parentNode && (n && oe(r) && ye(ve(r, 'script')), r.parentNode.removeChild(r));\n    return e;\n  }\n  k.extend({\n    htmlPrefilter: function(e) {\n      return e.replace(je, '<$1></$2>');\n    },\n    clone: function(e, t, n) {\n      var r,\n        i,\n        o,\n        a,\n        s,\n        u,\n        l,\n        c = e.cloneNode(!0),\n        f = oe(e);\n      if (!(y.noCloneChecked || (1 !== e.nodeType && 11 !== e.nodeType) || k.isXMLDoc(e)))\n        for (a = ve(c), r = 0, i = (o = ve(e)).length; r < i; r++)\n          (s = o[r]),\n            (u = a[r]),\n            void 0,\n            'input' === (l = u.nodeName.toLowerCase()) && pe.test(s.type)\n              ? (u.checked = s.checked)\n              : ('input' !== l && 'textarea' !== l) || (u.defaultValue = s.defaultValue);\n      if (t)\n        if (n) for (o = o || ve(e), a = a || ve(c), r = 0, i = o.length; r < i; r++) Me(o[r], a[r]);\n        else Me(e, c);\n      return 0 < (a = ve(c, 'script')).length && ye(a, !f && ve(e, 'script')), c;\n    },\n    cleanData: function(e) {\n      for (var t, n, r, i = k.event.special, o = 0; void 0 !== (n = e[o]); o++)\n        if (G(n)) {\n          if ((t = n[Q.expando])) {\n            if (t.events)\n              for (r in t.events) i[r] ? k.event.remove(n, r) : k.removeEvent(n, r, t.handle);\n            n[Q.expando] = void 0;\n          }\n          n[J.expando] && (n[J.expando] = void 0);\n        }\n    },\n  }),\n    k.fn.extend({\n      detach: function(e) {\n        return We(this, e, !0);\n      },\n      remove: function(e) {\n        return We(this, e);\n      },\n      text: function(e) {\n        return _(\n          this,\n          function(e) {\n            return void 0 === e\n              ? k.text(this)\n              : this.empty().each(function() {\n                  (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) ||\n                    (this.textContent = e);\n                });\n          },\n          null,\n          e,\n          arguments.length,\n        );\n      },\n      append: function() {\n        return Ie(this, arguments, function(e) {\n          (1 !== this.nodeType && 11 !== this.nodeType && 9 !== this.nodeType) ||\n            Oe(this, e).appendChild(e);\n        });\n      },\n      prepend: function() {\n        return Ie(this, arguments, function(e) {\n          if (1 === this.nodeType || 11 === this.nodeType || 9 === this.nodeType) {\n            var t = Oe(this, e);\n            t.insertBefore(e, t.firstChild);\n          }\n        });\n      },\n      before: function() {\n        return Ie(this, arguments, function(e) {\n          this.parentNode && this.parentNode.insertBefore(e, this);\n        });\n      },\n      after: function() {\n        return Ie(this, arguments, function(e) {\n          this.parentNode && this.parentNode.insertBefore(e, this.nextSibling);\n        });\n      },\n      empty: function() {\n        for (var e, t = 0; null != (e = this[t]); t++)\n          1 === e.nodeType && (k.cleanData(ve(e, !1)), (e.textContent = ''));\n        return this;\n      },\n      clone: function(e, t) {\n        return (\n          (e = null != e && e),\n          (t = null == t ? e : t),\n          this.map(function() {\n            return k.clone(this, e, t);\n          })\n        );\n      },\n      html: function(e) {\n        return _(\n          this,\n          function(e) {\n            var t = this[0] || {},\n              n = 0,\n              r = this.length;\n            if (void 0 === e && 1 === t.nodeType) return t.innerHTML;\n            if (\n              'string' == typeof e &&\n              !qe.test(e) &&\n              !ge[(de.exec(e) || ['', ''])[1].toLowerCase()]\n            ) {\n              e = k.htmlPrefilter(e);\n              try {\n                for (; n < r; n++)\n                  1 === (t = this[n] || {}).nodeType && (k.cleanData(ve(t, !1)), (t.innerHTML = e));\n                t = 0;\n              } catch (e) {}\n            }\n            t && this.empty().append(e);\n          },\n          null,\n          e,\n          arguments.length,\n        );\n      },\n      replaceWith: function() {\n        var n = [];\n        return Ie(\n          this,\n          arguments,\n          function(e) {\n            var t = this.parentNode;\n            k.inArray(this, n) < 0 && (k.cleanData(ve(this)), t && t.replaceChild(e, this));\n          },\n          n,\n        );\n      },\n    }),\n    k.each(\n      {\n        appendTo: 'append',\n        prependTo: 'prepend',\n        insertBefore: 'before',\n        insertAfter: 'after',\n        replaceAll: 'replaceWith',\n      },\n      function(e, a) {\n        k.fn[e] = function(e) {\n          for (var t, n = [], r = k(e), i = r.length - 1, o = 0; o <= i; o++)\n            (t = o === i ? this : this.clone(!0)), k(r[o])[a](t), u.apply(n, t.get());\n          return this.pushStack(n);\n        };\n      },\n    );\n  var $e = new RegExp('^(' + te + ')(?!px)[a-z%]+$', 'i'),\n    Fe = function(e) {\n      var t = e.ownerDocument.defaultView;\n      return (t && t.opener) || (t = C), t.getComputedStyle(e);\n    },\n    Be = new RegExp(re.join('|'), 'i');\n  function _e(e, t, n) {\n    var r,\n      i,\n      o,\n      a,\n      s = e.style;\n    return (\n      (n = n || Fe(e)) &&\n        ('' !== (a = n.getPropertyValue(t) || n[t]) || oe(e) || (a = k.style(e, t)),\n        !y.pixelBoxStyles() &&\n          $e.test(a) &&\n          Be.test(t) &&\n          ((r = s.width),\n          (i = s.minWidth),\n          (o = s.maxWidth),\n          (s.minWidth = s.maxWidth = s.width = a),\n          (a = n.width),\n          (s.width = r),\n          (s.minWidth = i),\n          (s.maxWidth = o))),\n      void 0 !== a ? a + '' : a\n    );\n  }\n  function ze(e, t) {\n    return {\n      get: function() {\n        if (!e()) return (this.get = t).apply(this, arguments);\n        delete this.get;\n      },\n    };\n  }\n  !(function() {\n    function e() {\n      if (u) {\n        (s.style.cssText =\n          'position:absolute;left:-11111px;width:60px;margin-top:1px;padding:0;border:0'),\n          (u.style.cssText =\n            'position:relative;display:block;box-sizing:border-box;overflow:scroll;margin:auto;border:1px;padding:1px;width:60%;top:1%'),\n          ie.appendChild(s).appendChild(u);\n        var e = C.getComputedStyle(u);\n        (n = '1%' !== e.top),\n          (a = 12 === t(e.marginLeft)),\n          (u.style.right = '60%'),\n          (o = 36 === t(e.right)),\n          (r = 36 === t(e.width)),\n          (u.style.position = 'absolute'),\n          (i = 12 === t(u.offsetWidth / 3)),\n          ie.removeChild(s),\n          (u = null);\n      }\n    }\n    function t(e) {\n      return Math.round(parseFloat(e));\n    }\n    var n,\n      r,\n      i,\n      o,\n      a,\n      s = E.createElement('div'),\n      u = E.createElement('div');\n    u.style &&\n      ((u.style.backgroundClip = 'content-box'),\n      (u.cloneNode(!0).style.backgroundClip = ''),\n      (y.clearCloneStyle = 'content-box' === u.style.backgroundClip),\n      k.extend(y, {\n        boxSizingReliable: function() {\n          return e(), r;\n        },\n        pixelBoxStyles: function() {\n          return e(), o;\n        },\n        pixelPosition: function() {\n          return e(), n;\n        },\n        reliableMarginLeft: function() {\n          return e(), a;\n        },\n        scrollboxSize: function() {\n          return e(), i;\n        },\n      }));\n  })();\n  var Ue = ['Webkit', 'Moz', 'ms'],\n    Xe = E.createElement('div').style,\n    Ve = {};\n  function Ge(e) {\n    var t = k.cssProps[e] || Ve[e];\n    return (\n      t ||\n      (e in Xe\n        ? e\n        : (Ve[e] =\n            (function(e) {\n              var t = e[0].toUpperCase() + e.slice(1),\n                n = Ue.length;\n              while (n--) if ((e = Ue[n] + t) in Xe) return e;\n            })(e) || e))\n    );\n  }\n  var Ye = /^(none|table(?!-c[ea]).+)/,\n    Qe = /^--/,\n    Je = { position: 'absolute', visibility: 'hidden', display: 'block' },\n    Ke = { letterSpacing: '0', fontWeight: '400' };\n  function Ze(e, t, n) {\n    var r = ne.exec(t);\n    return r ? Math.max(0, r[2] - (n || 0)) + (r[3] || 'px') : t;\n  }\n  function et(e, t, n, r, i, o) {\n    var a = 'width' === t ? 1 : 0,\n      s = 0,\n      u = 0;\n    if (n === (r ? 'border' : 'content')) return 0;\n    for (; a < 4; a += 2)\n      'margin' === n && (u += k.css(e, n + re[a], !0, i)),\n        r\n          ? ('content' === n && (u -= k.css(e, 'padding' + re[a], !0, i)),\n            'margin' !== n && (u -= k.css(e, 'border' + re[a] + 'Width', !0, i)))\n          : ((u += k.css(e, 'padding' + re[a], !0, i)),\n            'padding' !== n\n              ? (u += k.css(e, 'border' + re[a] + 'Width', !0, i))\n              : (s += k.css(e, 'border' + re[a] + 'Width', !0, i)));\n    return (\n      !r &&\n        0 <= o &&\n        (u +=\n          Math.max(0, Math.ceil(e['offset' + t[0].toUpperCase() + t.slice(1)] - o - u - s - 0.5)) ||\n          0),\n      u\n    );\n  }\n  function tt(e, t, n) {\n    var r = Fe(e),\n      i = (!y.boxSizingReliable() || n) && 'border-box' === k.css(e, 'boxSizing', !1, r),\n      o = i,\n      a = _e(e, t, r),\n      s = 'offset' + t[0].toUpperCase() + t.slice(1);\n    if ($e.test(a)) {\n      if (!n) return a;\n      a = 'auto';\n    }\n    return (\n      ((!y.boxSizingReliable() && i) ||\n        'auto' === a ||\n        (!parseFloat(a) && 'inline' === k.css(e, 'display', !1, r))) &&\n        e.getClientRects().length &&\n        ((i = 'border-box' === k.css(e, 'boxSizing', !1, r)), (o = s in e) && (a = e[s])),\n      (a = parseFloat(a) || 0) + et(e, t, n || (i ? 'border' : 'content'), o, r, a) + 'px'\n    );\n  }\n  function nt(e, t, n, r, i) {\n    return new nt.prototype.init(e, t, n, r, i);\n  }\n  k.extend({\n    cssHooks: {\n      opacity: {\n        get: function(e, t) {\n          if (t) {\n            var n = _e(e, 'opacity');\n            return '' === n ? '1' : n;\n          }\n        },\n      },\n    },\n    cssNumber: {\n      animationIterationCount: !0,\n      columnCount: !0,\n      fillOpacity: !0,\n      flexGrow: !0,\n      flexShrink: !0,\n      fontWeight: !0,\n      gridArea: !0,\n      gridColumn: !0,\n      gridColumnEnd: !0,\n      gridColumnStart: !0,\n      gridRow: !0,\n      gridRowEnd: !0,\n      gridRowStart: !0,\n      lineHeight: !0,\n      opacity: !0,\n      order: !0,\n      orphans: !0,\n      widows: !0,\n      zIndex: !0,\n      zoom: !0,\n    },\n    cssProps: {},\n    style: function(e, t, n, r) {\n      if (e && 3 !== e.nodeType && 8 !== e.nodeType && e.style) {\n        var i,\n          o,\n          a,\n          s = V(t),\n          u = Qe.test(t),\n          l = e.style;\n        if ((u || (t = Ge(s)), (a = k.cssHooks[t] || k.cssHooks[s]), void 0 === n))\n          return a && 'get' in a && void 0 !== (i = a.get(e, !1, r)) ? i : l[t];\n        'string' === (o = typeof n) &&\n          (i = ne.exec(n)) &&\n          i[1] &&\n          ((n = le(e, t, i)), (o = 'number')),\n          null != n &&\n            n == n &&\n            ('number' !== o || u || (n += (i && i[3]) || (k.cssNumber[s] ? '' : 'px')),\n            y.clearCloneStyle || '' !== n || 0 !== t.indexOf('background') || (l[t] = 'inherit'),\n            (a && 'set' in a && void 0 === (n = a.set(e, n, r))) ||\n              (u ? l.setProperty(t, n) : (l[t] = n)));\n      }\n    },\n    css: function(e, t, n, r) {\n      var i,\n        o,\n        a,\n        s = V(t);\n      return (\n        Qe.test(t) || (t = Ge(s)),\n        (a = k.cssHooks[t] || k.cssHooks[s]) && 'get' in a && (i = a.get(e, !0, n)),\n        void 0 === i && (i = _e(e, t, r)),\n        'normal' === i && t in Ke && (i = Ke[t]),\n        '' === n || n ? ((o = parseFloat(i)), !0 === n || isFinite(o) ? o || 0 : i) : i\n      );\n    },\n  }),\n    k.each(['height', 'width'], function(e, u) {\n      k.cssHooks[u] = {\n        get: function(e, t, n) {\n          if (t)\n            return !Ye.test(k.css(e, 'display')) ||\n              (e.getClientRects().length && e.getBoundingClientRect().width)\n              ? tt(e, u, n)\n              : ue(e, Je, function() {\n                  return tt(e, u, n);\n                });\n        },\n        set: function(e, t, n) {\n          var r,\n            i = Fe(e),\n            o = !y.scrollboxSize() && 'absolute' === i.position,\n            a = (o || n) && 'border-box' === k.css(e, 'boxSizing', !1, i),\n            s = n ? et(e, u, n, a, i) : 0;\n          return (\n            a &&\n              o &&\n              (s -= Math.ceil(\n                e['offset' + u[0].toUpperCase() + u.slice(1)] -\n                  parseFloat(i[u]) -\n                  et(e, u, 'border', !1, i) -\n                  0.5,\n              )),\n            s &&\n              (r = ne.exec(t)) &&\n              'px' !== (r[3] || 'px') &&\n              ((e.style[u] = t), (t = k.css(e, u))),\n            Ze(0, t, s)\n          );\n        },\n      };\n    }),\n    (k.cssHooks.marginLeft = ze(y.reliableMarginLeft, function(e, t) {\n      if (t)\n        return (\n          (parseFloat(_e(e, 'marginLeft')) ||\n            e.getBoundingClientRect().left -\n              ue(e, { marginLeft: 0 }, function() {\n                return e.getBoundingClientRect().left;\n              })) + 'px'\n        );\n    })),\n    k.each({ margin: '', padding: '', border: 'Width' }, function(i, o) {\n      (k.cssHooks[i + o] = {\n        expand: function(e) {\n          for (var t = 0, n = {}, r = 'string' == typeof e ? e.split(' ') : [e]; t < 4; t++)\n            n[i + re[t] + o] = r[t] || r[t - 2] || r[0];\n          return n;\n        },\n      }),\n        'margin' !== i && (k.cssHooks[i + o].set = Ze);\n    }),\n    k.fn.extend({\n      css: function(e, t) {\n        return _(\n          this,\n          function(e, t, n) {\n            var r,\n              i,\n              o = {},\n              a = 0;\n            if (Array.isArray(t)) {\n              for (r = Fe(e), i = t.length; a < i; a++) o[t[a]] = k.css(e, t[a], !1, r);\n              return o;\n            }\n            return void 0 !== n ? k.style(e, t, n) : k.css(e, t);\n          },\n          e,\n          t,\n          1 < arguments.length,\n        );\n      },\n    }),\n    (((k.Tween = nt).prototype = {\n      constructor: nt,\n      init: function(e, t, n, r, i, o) {\n        (this.elem = e),\n          (this.prop = n),\n          (this.easing = i || k.easing._default),\n          (this.options = t),\n          (this.start = this.now = this.cur()),\n          (this.end = r),\n          (this.unit = o || (k.cssNumber[n] ? '' : 'px'));\n      },\n      cur: function() {\n        var e = nt.propHooks[this.prop];\n        return e && e.get ? e.get(this) : nt.propHooks._default.get(this);\n      },\n      run: function(e) {\n        var t,\n          n = nt.propHooks[this.prop];\n        return (\n          this.options.duration\n            ? (this.pos = t = k.easing[this.easing](\n                e,\n                this.options.duration * e,\n                0,\n                1,\n                this.options.duration,\n              ))\n            : (this.pos = t = e),\n          (this.now = (this.end - this.start) * t + this.start),\n          this.options.step && this.options.step.call(this.elem, this.now, this),\n          n && n.set ? n.set(this) : nt.propHooks._default.set(this),\n          this\n        );\n      },\n    }).init.prototype = nt.prototype),\n    ((nt.propHooks = {\n      _default: {\n        get: function(e) {\n          var t;\n          return 1 !== e.elem.nodeType || (null != e.elem[e.prop] && null == e.elem.style[e.prop])\n            ? e.elem[e.prop]\n            : (t = k.css(e.elem, e.prop, '')) && 'auto' !== t\n            ? t\n            : 0;\n        },\n        set: function(e) {\n          k.fx.step[e.prop]\n            ? k.fx.step[e.prop](e)\n            : 1 !== e.elem.nodeType || (!k.cssHooks[e.prop] && null == e.elem.style[Ge(e.prop)])\n            ? (e.elem[e.prop] = e.now)\n            : k.style(e.elem, e.prop, e.now + e.unit);\n        },\n      },\n    }).scrollTop = nt.propHooks.scrollLeft = {\n      set: function(e) {\n        e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now);\n      },\n    }),\n    (k.easing = {\n      linear: function(e) {\n        return e;\n      },\n      swing: function(e) {\n        return 0.5 - Math.cos(e * Math.PI) / 2;\n      },\n      _default: 'swing',\n    }),\n    (k.fx = nt.prototype.init),\n    (k.fx.step = {});\n  var rt,\n    it,\n    ot,\n    at,\n    st = /^(?:toggle|show|hide)$/,\n    ut = /queueHooks$/;\n  function lt() {\n    it &&\n      (!1 === E.hidden && C.requestAnimationFrame\n        ? C.requestAnimationFrame(lt)\n        : C.setTimeout(lt, k.fx.interval),\n      k.fx.tick());\n  }\n  function ct() {\n    return (\n      C.setTimeout(function() {\n        rt = void 0;\n      }),\n      (rt = Date.now())\n    );\n  }\n  function ft(e, t) {\n    var n,\n      r = 0,\n      i = { height: e };\n    for (t = t ? 1 : 0; r < 4; r += 2 - t) i['margin' + (n = re[r])] = i['padding' + n] = e;\n    return t && (i.opacity = i.width = e), i;\n  }\n  function pt(e, t, n) {\n    for (\n      var r, i = (dt.tweeners[t] || []).concat(dt.tweeners['*']), o = 0, a = i.length;\n      o < a;\n      o++\n    )\n      if ((r = i[o].call(n, t, e))) return r;\n  }\n  function dt(o, e, t) {\n    var n,\n      a,\n      r = 0,\n      i = dt.prefilters.length,\n      s = k.Deferred().always(function() {\n        delete u.elem;\n      }),\n      u = function() {\n        if (a) return !1;\n        for (\n          var e = rt || ct(),\n            t = Math.max(0, l.startTime + l.duration - e),\n            n = 1 - (t / l.duration || 0),\n            r = 0,\n            i = l.tweens.length;\n          r < i;\n          r++\n        )\n          l.tweens[r].run(n);\n        return (\n          s.notifyWith(o, [l, n, t]),\n          n < 1 && i ? t : (i || s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l]), !1)\n        );\n      },\n      l = s.promise({\n        elem: o,\n        props: k.extend({}, e),\n        opts: k.extend(!0, { specialEasing: {}, easing: k.easing._default }, t),\n        originalProperties: e,\n        originalOptions: t,\n        startTime: rt || ct(),\n        duration: t.duration,\n        tweens: [],\n        createTween: function(e, t) {\n          var n = k.Tween(o, l.opts, e, t, l.opts.specialEasing[e] || l.opts.easing);\n          return l.tweens.push(n), n;\n        },\n        stop: function(e) {\n          var t = 0,\n            n = e ? l.tweens.length : 0;\n          if (a) return this;\n          for (a = !0; t < n; t++) l.tweens[t].run(1);\n          return (\n            e ? (s.notifyWith(o, [l, 1, 0]), s.resolveWith(o, [l, e])) : s.rejectWith(o, [l, e]),\n            this\n          );\n        },\n      }),\n      c = l.props;\n    for (\n      !(function(e, t) {\n        var n, r, i, o, a;\n        for (n in e)\n          if (\n            ((i = t[(r = V(n))]),\n            (o = e[n]),\n            Array.isArray(o) && ((i = o[1]), (o = e[n] = o[0])),\n            n !== r && ((e[r] = o), delete e[n]),\n            (a = k.cssHooks[r]) && ('expand' in a))\n          )\n            for (n in ((o = a.expand(o)), delete e[r], o)) (n in e) || ((e[n] = o[n]), (t[n] = i));\n          else t[r] = i;\n      })(c, l.opts.specialEasing);\n      r < i;\n      r++\n    )\n      if ((n = dt.prefilters[r].call(l, o, c, l.opts)))\n        return m(n.stop) && (k._queueHooks(l.elem, l.opts.queue).stop = n.stop.bind(n)), n;\n    return (\n      k.map(c, pt, l),\n      m(l.opts.start) && l.opts.start.call(o, l),\n      l\n        .progress(l.opts.progress)\n        .done(l.opts.done, l.opts.complete)\n        .fail(l.opts.fail)\n        .always(l.opts.always),\n      k.fx.timer(k.extend(u, { elem: o, anim: l, queue: l.opts.queue })),\n      l\n    );\n  }\n  (k.Animation = k.extend(dt, {\n    tweeners: {\n      '*': [\n        function(e, t) {\n          var n = this.createTween(e, t);\n          return le(n.elem, e, ne.exec(t), n), n;\n        },\n      ],\n    },\n    tweener: function(e, t) {\n      m(e) ? ((t = e), (e = ['*'])) : (e = e.match(R));\n      for (var n, r = 0, i = e.length; r < i; r++)\n        (n = e[r]), (dt.tweeners[n] = dt.tweeners[n] || []), dt.tweeners[n].unshift(t);\n    },\n    prefilters: [\n      function(e, t, n) {\n        var r,\n          i,\n          o,\n          a,\n          s,\n          u,\n          l,\n          c,\n          f = 'width' in t || 'height' in t,\n          p = this,\n          d = {},\n          h = e.style,\n          g = e.nodeType && se(e),\n          v = Q.get(e, 'fxshow');\n        for (r in (n.queue ||\n          (null == (a = k._queueHooks(e, 'fx')).unqueued &&\n            ((a.unqueued = 0),\n            (s = a.empty.fire),\n            (a.empty.fire = function() {\n              a.unqueued || s();\n            })),\n          a.unqueued++,\n          p.always(function() {\n            p.always(function() {\n              a.unqueued--, k.queue(e, 'fx').length || a.empty.fire();\n            });\n          })),\n        t))\n          if (((i = t[r]), st.test(i))) {\n            if ((delete t[r], (o = o || 'toggle' === i), i === (g ? 'hide' : 'show'))) {\n              if ('show' !== i || !v || void 0 === v[r]) continue;\n              g = !0;\n            }\n            d[r] = (v && v[r]) || k.style(e, r);\n          }\n        if ((u = !k.isEmptyObject(t)) || !k.isEmptyObject(d))\n          for (r in (f &&\n            1 === e.nodeType &&\n            ((n.overflow = [h.overflow, h.overflowX, h.overflowY]),\n            null == (l = v && v.display) && (l = Q.get(e, 'display')),\n            'none' === (c = k.css(e, 'display')) &&\n              (l\n                ? (c = l)\n                : (fe([e], !0), (l = e.style.display || l), (c = k.css(e, 'display')), fe([e]))),\n            ('inline' === c || ('inline-block' === c && null != l)) &&\n              'none' === k.css(e, 'float') &&\n              (u ||\n                (p.done(function() {\n                  h.display = l;\n                }),\n                null == l && ((c = h.display), (l = 'none' === c ? '' : c))),\n              (h.display = 'inline-block'))),\n          n.overflow &&\n            ((h.overflow = 'hidden'),\n            p.always(function() {\n              (h.overflow = n.overflow[0]),\n                (h.overflowX = n.overflow[1]),\n                (h.overflowY = n.overflow[2]);\n            })),\n          (u = !1),\n          d))\n            u ||\n              (v ? 'hidden' in v && (g = v.hidden) : (v = Q.access(e, 'fxshow', { display: l })),\n              o && (v.hidden = !g),\n              g && fe([e], !0),\n              p.done(function() {\n                for (r in (g || fe([e]), Q.remove(e, 'fxshow'), d)) k.style(e, r, d[r]);\n              })),\n              (u = pt(g ? v[r] : 0, r, p)),\n              r in v || ((v[r] = u.start), g && ((u.end = u.start), (u.start = 0)));\n      },\n    ],\n    prefilter: function(e, t) {\n      t ? dt.prefilters.unshift(e) : dt.prefilters.push(e);\n    },\n  })),\n    (k.speed = function(e, t, n) {\n      var r =\n        e && 'object' == typeof e\n          ? k.extend({}, e)\n          : {\n              complete: n || (!n && t) || (m(e) && e),\n              duration: e,\n              easing: (n && t) || (t && !m(t) && t),\n            };\n      return (\n        k.fx.off\n          ? (r.duration = 0)\n          : 'number' != typeof r.duration &&\n            (r.duration in k.fx.speeds\n              ? (r.duration = k.fx.speeds[r.duration])\n              : (r.duration = k.fx.speeds._default)),\n        (null != r.queue && !0 !== r.queue) || (r.queue = 'fx'),\n        (r.old = r.complete),\n        (r.complete = function() {\n          m(r.old) && r.old.call(this), r.queue && k.dequeue(this, r.queue);\n        }),\n        r\n      );\n    }),\n    k.fn.extend({\n      fadeTo: function(e, t, n, r) {\n        return this.filter(se)\n          .css('opacity', 0)\n          .show()\n          .end()\n          .animate({ opacity: t }, e, n, r);\n      },\n      animate: function(t, e, n, r) {\n        var i = k.isEmptyObject(t),\n          o = k.speed(e, n, r),\n          a = function() {\n            var e = dt(this, k.extend({}, t), o);\n            (i || Q.get(this, 'finish')) && e.stop(!0);\n          };\n        return (a.finish = a), i || !1 === o.queue ? this.each(a) : this.queue(o.queue, a);\n      },\n      stop: function(i, e, o) {\n        var a = function(e) {\n          var t = e.stop;\n          delete e.stop, t(o);\n        };\n        return (\n          'string' != typeof i && ((o = e), (e = i), (i = void 0)),\n          e && !1 !== i && this.queue(i || 'fx', []),\n          this.each(function() {\n            var e = !0,\n              t = null != i && i + 'queueHooks',\n              n = k.timers,\n              r = Q.get(this);\n            if (t) r[t] && r[t].stop && a(r[t]);\n            else for (t in r) r[t] && r[t].stop && ut.test(t) && a(r[t]);\n            for (t = n.length; t--; )\n              n[t].elem !== this ||\n                (null != i && n[t].queue !== i) ||\n                (n[t].anim.stop(o), (e = !1), n.splice(t, 1));\n            (!e && o) || k.dequeue(this, i);\n          })\n        );\n      },\n      finish: function(a) {\n        return (\n          !1 !== a && (a = a || 'fx'),\n          this.each(function() {\n            var e,\n              t = Q.get(this),\n              n = t[a + 'queue'],\n              r = t[a + 'queueHooks'],\n              i = k.timers,\n              o = n ? n.length : 0;\n            for (\n              t.finish = !0,\n                k.queue(this, a, []),\n                r && r.stop && r.stop.call(this, !0),\n                e = i.length;\n              e--;\n\n            )\n              i[e].elem === this && i[e].queue === a && (i[e].anim.stop(!0), i.splice(e, 1));\n            for (e = 0; e < o; e++) n[e] && n[e].finish && n[e].finish.call(this);\n            delete t.finish;\n          })\n        );\n      },\n    }),\n    k.each(['toggle', 'show', 'hide'], function(e, r) {\n      var i = k.fn[r];\n      k.fn[r] = function(e, t, n) {\n        return null == e || 'boolean' == typeof e\n          ? i.apply(this, arguments)\n          : this.animate(ft(r, !0), e, t, n);\n      };\n    }),\n    k.each(\n      {\n        slideDown: ft('show'),\n        slideUp: ft('hide'),\n        slideToggle: ft('toggle'),\n        fadeIn: { opacity: 'show' },\n        fadeOut: { opacity: 'hide' },\n        fadeToggle: { opacity: 'toggle' },\n      },\n      function(e, r) {\n        k.fn[e] = function(e, t, n) {\n          return this.animate(r, e, t, n);\n        };\n      },\n    ),\n    (k.timers = []),\n    (k.fx.tick = function() {\n      var e,\n        t = 0,\n        n = k.timers;\n      for (rt = Date.now(); t < n.length; t++) (e = n[t])() || n[t] !== e || n.splice(t--, 1);\n      n.length || k.fx.stop(), (rt = void 0);\n    }),\n    (k.fx.timer = function(e) {\n      k.timers.push(e), k.fx.start();\n    }),\n    (k.fx.interval = 13),\n    (k.fx.start = function() {\n      it || ((it = !0), lt());\n    }),\n    (k.fx.stop = function() {\n      it = null;\n    }),\n    (k.fx.speeds = { slow: 600, fast: 200, _default: 400 }),\n    (k.fn.delay = function(r, e) {\n      return (\n        (r = (k.fx && k.fx.speeds[r]) || r),\n        (e = e || 'fx'),\n        this.queue(e, function(e, t) {\n          var n = C.setTimeout(e, r);\n          t.stop = function() {\n            C.clearTimeout(n);\n          };\n        })\n      );\n    }),\n    (ot = E.createElement('input')),\n    (at = E.createElement('select').appendChild(E.createElement('option'))),\n    (ot.type = 'checkbox'),\n    (y.checkOn = '' !== ot.value),\n    (y.optSelected = at.selected),\n    ((ot = E.createElement('input')).value = 't'),\n    (ot.type = 'radio'),\n    (y.radioValue = 't' === ot.value);\n  var ht,\n    gt = k.expr.attrHandle;\n  k.fn.extend({\n    attr: function(e, t) {\n      return _(this, k.attr, e, t, 1 < arguments.length);\n    },\n    removeAttr: function(e) {\n      return this.each(function() {\n        k.removeAttr(this, e);\n      });\n    },\n  }),\n    k.extend({\n      attr: function(e, t, n) {\n        var r,\n          i,\n          o = e.nodeType;\n        if (3 !== o && 8 !== o && 2 !== o)\n          return 'undefined' == typeof e.getAttribute\n            ? k.prop(e, t, n)\n            : ((1 === o && k.isXMLDoc(e)) ||\n                (i = k.attrHooks[t.toLowerCase()] || (k.expr.match.bool.test(t) ? ht : void 0)),\n              void 0 !== n\n                ? null === n\n                  ? void k.removeAttr(e, t)\n                  : i && 'set' in i && void 0 !== (r = i.set(e, n, t))\n                  ? r\n                  : (e.setAttribute(t, n + ''), n)\n                : i && 'get' in i && null !== (r = i.get(e, t))\n                ? r\n                : null == (r = k.find.attr(e, t))\n                ? void 0\n                : r);\n      },\n      attrHooks: {\n        type: {\n          set: function(e, t) {\n            if (!y.radioValue && 'radio' === t && A(e, 'input')) {\n              var n = e.value;\n              return e.setAttribute('type', t), n && (e.value = n), t;\n            }\n          },\n        },\n      },\n      removeAttr: function(e, t) {\n        var n,\n          r = 0,\n          i = t && t.match(R);\n        if (i && 1 === e.nodeType) while ((n = i[r++])) e.removeAttribute(n);\n      },\n    }),\n    (ht = {\n      set: function(e, t, n) {\n        return !1 === t ? k.removeAttr(e, n) : e.setAttribute(n, n), n;\n      },\n    }),\n    k.each(k.expr.match.bool.source.match(/\\w+/g), function(e, t) {\n      var a = gt[t] || k.find.attr;\n      gt[t] = function(e, t, n) {\n        var r,\n          i,\n          o = t.toLowerCase();\n        return n || ((i = gt[o]), (gt[o] = r), (r = null != a(e, t, n) ? o : null), (gt[o] = i)), r;\n      };\n    });\n  var vt = /^(?:input|select|textarea|button)$/i,\n    yt = /^(?:a|area)$/i;\n  function mt(e) {\n    return (e.match(R) || []).join(' ');\n  }\n  function xt(e) {\n    return (e.getAttribute && e.getAttribute('class')) || '';\n  }\n  function bt(e) {\n    return Array.isArray(e) ? e : ('string' == typeof e && e.match(R)) || [];\n  }\n  k.fn.extend({\n    prop: function(e, t) {\n      return _(this, k.prop, e, t, 1 < arguments.length);\n    },\n    removeProp: function(e) {\n      return this.each(function() {\n        delete this[k.propFix[e] || e];\n      });\n    },\n  }),\n    k.extend({\n      prop: function(e, t, n) {\n        var r,\n          i,\n          o = e.nodeType;\n        if (3 !== o && 8 !== o && 2 !== o)\n          return (\n            (1 === o && k.isXMLDoc(e)) || ((t = k.propFix[t] || t), (i = k.propHooks[t])),\n            void 0 !== n\n              ? i && 'set' in i && void 0 !== (r = i.set(e, n, t))\n                ? r\n                : (e[t] = n)\n              : i && 'get' in i && null !== (r = i.get(e, t))\n              ? r\n              : e[t]\n          );\n      },\n      propHooks: {\n        tabIndex: {\n          get: function(e) {\n            var t = k.find.attr(e, 'tabindex');\n            return t\n              ? parseInt(t, 10)\n              : vt.test(e.nodeName) || (yt.test(e.nodeName) && e.href)\n              ? 0\n              : -1;\n          },\n        },\n      },\n      propFix: { for: 'htmlFor', class: 'className' },\n    }),\n    y.optSelected ||\n      (k.propHooks.selected = {\n        get: function(e) {\n          var t = e.parentNode;\n          return t && t.parentNode && t.parentNode.selectedIndex, null;\n        },\n        set: function(e) {\n          var t = e.parentNode;\n          t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex);\n        },\n      }),\n    k.each(\n      [\n        'tabIndex',\n        'readOnly',\n        'maxLength',\n        'cellSpacing',\n        'cellPadding',\n        'rowSpan',\n        'colSpan',\n        'useMap',\n        'frameBorder',\n        'contentEditable',\n      ],\n      function() {\n        k.propFix[this.toLowerCase()] = this;\n      },\n    ),\n    k.fn.extend({\n      addClass: function(t) {\n        var e,\n          n,\n          r,\n          i,\n          o,\n          a,\n          s,\n          u = 0;\n        if (m(t))\n          return this.each(function(e) {\n            k(this).addClass(t.call(this, e, xt(this)));\n          });\n        if ((e = bt(t)).length)\n          while ((n = this[u++]))\n            if (((i = xt(n)), (r = 1 === n.nodeType && ' ' + mt(i) + ' '))) {\n              a = 0;\n              while ((o = e[a++])) r.indexOf(' ' + o + ' ') < 0 && (r += o + ' ');\n              i !== (s = mt(r)) && n.setAttribute('class', s);\n            }\n        return this;\n      },\n      removeClass: function(t) {\n        var e,\n          n,\n          r,\n          i,\n          o,\n          a,\n          s,\n          u = 0;\n        if (m(t))\n          return this.each(function(e) {\n            k(this).removeClass(t.call(this, e, xt(this)));\n          });\n        if (!arguments.length) return this.attr('class', '');\n        if ((e = bt(t)).length)\n          while ((n = this[u++]))\n            if (((i = xt(n)), (r = 1 === n.nodeType && ' ' + mt(i) + ' '))) {\n              a = 0;\n              while ((o = e[a++]))\n                while (-1 < r.indexOf(' ' + o + ' ')) r = r.replace(' ' + o + ' ', ' ');\n              i !== (s = mt(r)) && n.setAttribute('class', s);\n            }\n        return this;\n      },\n      toggleClass: function(i, t) {\n        var o = typeof i,\n          a = 'string' === o || Array.isArray(i);\n        return 'boolean' == typeof t && a\n          ? t\n            ? this.addClass(i)\n            : this.removeClass(i)\n          : m(i)\n          ? this.each(function(e) {\n              k(this).toggleClass(i.call(this, e, xt(this), t), t);\n            })\n          : this.each(function() {\n              var e, t, n, r;\n              if (a) {\n                (t = 0), (n = k(this)), (r = bt(i));\n                while ((e = r[t++])) n.hasClass(e) ? n.removeClass(e) : n.addClass(e);\n              } 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__') || ''));\n            });\n      },\n      hasClass: function(e) {\n        var t,\n          n,\n          r = 0;\n        t = ' ' + e + ' ';\n        while ((n = this[r++]))\n          if (1 === n.nodeType && -1 < (' ' + mt(xt(n)) + ' ').indexOf(t)) return !0;\n        return !1;\n      },\n    });\n  var wt = /\\r/g;\n  k.fn.extend({\n    val: function(n) {\n      var r,\n        e,\n        i,\n        t = this[0];\n      return arguments.length\n        ? ((i = m(n)),\n          this.each(function(e) {\n            var t;\n            1 === this.nodeType &&\n              (null == (t = i ? n.call(this, e, k(this).val()) : n)\n                ? (t = '')\n                : 'number' == typeof t\n                ? (t += '')\n                : Array.isArray(t) &&\n                  (t = k.map(t, function(e) {\n                    return null == e ? '' : e + '';\n                  })),\n              ((r = k.valHooks[this.type] || k.valHooks[this.nodeName.toLowerCase()]) &&\n                'set' in r &&\n                void 0 !== r.set(this, t, 'value')) ||\n                (this.value = t));\n          }))\n        : t\n        ? (r = k.valHooks[t.type] || k.valHooks[t.nodeName.toLowerCase()]) &&\n          'get' in r &&\n          void 0 !== (e = r.get(t, 'value'))\n          ? e\n          : 'string' == typeof (e = t.value)\n          ? e.replace(wt, '')\n          : null == e\n          ? ''\n          : e\n        : void 0;\n    },\n  }),\n    k.extend({\n      valHooks: {\n        option: {\n          get: function(e) {\n            var t = k.find.attr(e, 'value');\n            return null != t ? t : mt(k.text(e));\n          },\n        },\n        select: {\n          get: function(e) {\n            var t,\n              n,\n              r,\n              i = e.options,\n              o = e.selectedIndex,\n              a = 'select-one' === e.type,\n              s = a ? null : [],\n              u = a ? o + 1 : i.length;\n            for (r = o < 0 ? u : a ? o : 0; r < u; r++)\n              if (\n                ((n = i[r]).selected || r === o) &&\n                !n.disabled &&\n                (!n.parentNode.disabled || !A(n.parentNode, 'optgroup'))\n              ) {\n                if (((t = k(n).val()), a)) return t;\n                s.push(t);\n              }\n            return s;\n          },\n          set: function(e, t) {\n            var n,\n              r,\n              i = e.options,\n              o = k.makeArray(t),\n              a = i.length;\n            while (a--)\n              ((r = i[a]).selected = -1 < k.inArray(k.valHooks.option.get(r), o)) && (n = !0);\n            return n || (e.selectedIndex = -1), o;\n          },\n        },\n      },\n    }),\n    k.each(['radio', 'checkbox'], function() {\n      (k.valHooks[this] = {\n        set: function(e, t) {\n          if (Array.isArray(t)) return (e.checked = -1 < k.inArray(k(e).val(), t));\n        },\n      }),\n        y.checkOn ||\n          (k.valHooks[this].get = function(e) {\n            return null === e.getAttribute('value') ? 'on' : e.value;\n          });\n    }),\n    (y.focusin = 'onfocusin' in C);\n  var Tt = /^(?:focusinfocus|focusoutblur)$/,\n    Ct = function(e) {\n      e.stopPropagation();\n    };\n  k.extend(k.event, {\n    trigger: function(e, t, n, r) {\n      var i,\n        o,\n        a,\n        s,\n        u,\n        l,\n        c,\n        f,\n        p = [n || E],\n        d = v.call(e, 'type') ? e.type : e,\n        h = v.call(e, 'namespace') ? e.namespace.split('.') : [];\n      if (\n        ((o = f = a = n = n || E),\n        3 !== n.nodeType &&\n          8 !== n.nodeType &&\n          !Tt.test(d + k.event.triggered) &&\n          (-1 < d.indexOf('.') && ((d = (h = d.split('.')).shift()), h.sort()),\n          (u = d.indexOf(':') < 0 && 'on' + d),\n          ((e = e[k.expando] ? e : new k.Event(d, 'object' == typeof e && e)).isTrigger = r\n            ? 2\n            : 3),\n          (e.namespace = h.join('.')),\n          (e.rnamespace = e.namespace\n            ? new RegExp('(^|\\\\.)' + h.join('\\\\.(?:.*\\\\.|)') + '(\\\\.|$)')\n            : null),\n          (e.result = void 0),\n          e.target || (e.target = n),\n          (t = null == t ? [e] : k.makeArray(t, [e])),\n          (c = k.event.special[d] || {}),\n          r || !c.trigger || !1 !== c.trigger.apply(n, t)))\n      ) {\n        if (!r && !c.noBubble && !x(n)) {\n          for (s = c.delegateType || d, Tt.test(s + d) || (o = o.parentNode); o; o = o.parentNode)\n            p.push(o), (a = o);\n          a === (n.ownerDocument || E) && p.push(a.defaultView || a.parentWindow || C);\n        }\n        i = 0;\n        while ((o = p[i++]) && !e.isPropagationStopped())\n          (f = o),\n            (e.type = 1 < i ? s : c.bindType || d),\n            (l = (Q.get(o, 'events') || {})[e.type] && Q.get(o, 'handle')) && l.apply(o, t),\n            (l = u && o[u]) &&\n              l.apply &&\n              G(o) &&\n              ((e.result = l.apply(o, t)), !1 === e.result && e.preventDefault());\n        return (\n          (e.type = d),\n          r ||\n            e.isDefaultPrevented() ||\n            (c._default && !1 !== c._default.apply(p.pop(), t)) ||\n            !G(n) ||\n            (u &&\n              m(n[d]) &&\n              !x(n) &&\n              ((a = n[u]) && (n[u] = null),\n              (k.event.triggered = d),\n              e.isPropagationStopped() && f.addEventListener(d, Ct),\n              n[d](),\n              e.isPropagationStopped() && f.removeEventListener(d, Ct),\n              (k.event.triggered = void 0),\n              a && (n[u] = a))),\n          e.result\n        );\n      }\n    },\n    simulate: function(e, t, n) {\n      var r = k.extend(new k.Event(), n, { type: e, isSimulated: !0 });\n      k.event.trigger(r, null, t);\n    },\n  }),\n    k.fn.extend({\n      trigger: function(e, t) {\n        return this.each(function() {\n          k.event.trigger(e, t, this);\n        });\n      },\n      triggerHandler: function(e, t) {\n        var n = this[0];\n        if (n) return k.event.trigger(e, t, n, !0);\n      },\n    }),\n    y.focusin ||\n      k.each({ focus: 'focusin', blur: 'focusout' }, function(n, r) {\n        var i = function(e) {\n          k.event.simulate(r, e.target, k.event.fix(e));\n        };\n        k.event.special[r] = {\n          setup: function() {\n            var e = this.ownerDocument || this,\n              t = Q.access(e, r);\n            t || e.addEventListener(n, i, !0), Q.access(e, r, (t || 0) + 1);\n          },\n          teardown: function() {\n            var e = this.ownerDocument || this,\n              t = Q.access(e, r) - 1;\n            t ? Q.access(e, r, t) : (e.removeEventListener(n, i, !0), Q.remove(e, r));\n          },\n        };\n      });\n  var Et = C.location,\n    kt = Date.now(),\n    St = /\\?/;\n  k.parseXML = function(e) {\n    var t;\n    if (!e || 'string' != typeof e) return null;\n    try {\n      t = new C.DOMParser().parseFromString(e, 'text/xml');\n    } catch (e) {\n      t = void 0;\n    }\n    return (t && !t.getElementsByTagName('parsererror').length) || k.error('Invalid XML: ' + e), t;\n  };\n  var Nt = /\\[\\]$/,\n    At = /\\r?\\n/g,\n    Dt = /^(?:submit|button|image|reset|file)$/i,\n    jt = /^(?:input|select|textarea|keygen)/i;\n  function qt(n, e, r, i) {\n    var t;\n    if (Array.isArray(e))\n      k.each(e, function(e, t) {\n        r || Nt.test(n)\n          ? i(n, t)\n          : qt(n + '[' + ('object' == typeof t && null != t ? e : '') + ']', t, r, i);\n      });\n    else if (r || 'object' !== w(e)) i(n, e);\n    else for (t in e) qt(n + '[' + t + ']', e[t], r, i);\n  }\n  (k.param = function(e, t) {\n    var n,\n      r = [],\n      i = function(e, t) {\n        var n = m(t) ? t() : t;\n        r[r.length] = encodeURIComponent(e) + '=' + encodeURIComponent(null == n ? '' : n);\n      };\n    if (null == e) return '';\n    if (Array.isArray(e) || (e.jquery && !k.isPlainObject(e)))\n      k.each(e, function() {\n        i(this.name, this.value);\n      });\n    else for (n in e) qt(n, e[n], t, i);\n    return r.join('&');\n  }),\n    k.fn.extend({\n      serialize: function() {\n        return k.param(this.serializeArray());\n      },\n      serializeArray: function() {\n        return this.map(function() {\n          var e = k.prop(this, 'elements');\n          return e ? k.makeArray(e) : this;\n        })\n          .filter(function() {\n            var e = this.type;\n            return (\n              this.name &&\n              !k(this).is(':disabled') &&\n              jt.test(this.nodeName) &&\n              !Dt.test(e) &&\n              (this.checked || !pe.test(e))\n            );\n          })\n          .map(function(e, t) {\n            var n = k(this).val();\n            return null == n\n              ? null\n              : Array.isArray(n)\n              ? k.map(n, function(e) {\n                  return { name: t.name, value: e.replace(At, '\\r\\n') };\n                })\n              : { name: t.name, value: n.replace(At, '\\r\\n') };\n          })\n          .get();\n      },\n    });\n  var Lt = /%20/g,\n    Ht = /#.*$/,\n    Ot = /([?&])_=[^&]*/,\n    Pt = /^(.*?):[ \\t]*([^\\r\\n]*)$/gm,\n    Rt = /^(?:GET|HEAD)$/,\n    Mt = /^\\/\\//,\n    It = {},\n    Wt = {},\n    $t = '*/'.concat('*'),\n    Ft = E.createElement('a');\n  function Bt(o) {\n    return function(e, t) {\n      'string' != typeof e && ((t = e), (e = '*'));\n      var n,\n        r = 0,\n        i = e.toLowerCase().match(R) || [];\n      if (m(t))\n        while ((n = i[r++]))\n          '+' === n[0]\n            ? ((n = n.slice(1) || '*'), (o[n] = o[n] || []).unshift(t))\n            : (o[n] = o[n] || []).push(t);\n    };\n  }\n  function _t(t, i, o, a) {\n    var s = {},\n      u = t === Wt;\n    function l(e) {\n      var r;\n      return (\n        (s[e] = !0),\n        k.each(t[e] || [], function(e, t) {\n          var n = t(i, o, a);\n          return 'string' != typeof n || u || s[n]\n            ? u\n              ? !(r = n)\n              : void 0\n            : (i.dataTypes.unshift(n), l(n), !1);\n        }),\n        r\n      );\n    }\n    return l(i.dataTypes[0]) || (!s['*'] && l('*'));\n  }\n  function zt(e, t) {\n    var n,\n      r,\n      i = k.ajaxSettings.flatOptions || {};\n    for (n in t) void 0 !== t[n] && ((i[n] ? e : r || (r = {}))[n] = t[n]);\n    return r && k.extend(!0, e, r), e;\n  }\n  (Ft.href = Et.href),\n    k.extend({\n      active: 0,\n      lastModified: {},\n      etag: {},\n      ajaxSettings: {\n        url: Et.href,\n        type: 'GET',\n        isLocal: /^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(Et.protocol),\n        global: !0,\n        processData: !0,\n        async: !0,\n        contentType: 'application/x-www-form-urlencoded; charset=UTF-8',\n        accepts: {\n          '*': $t,\n          text: 'text/plain',\n          html: 'text/html',\n          xml: 'application/xml, text/xml',\n          json: 'application/json, text/javascript',\n        },\n        contents: { xml: /\\bxml\\b/, html: /\\bhtml/, json: /\\bjson\\b/ },\n        responseFields: { xml: 'responseXML', text: 'responseText', json: 'responseJSON' },\n        converters: {\n          '* text': String,\n          'text html': !0,\n          'text json': JSON.parse,\n          'text xml': k.parseXML,\n        },\n        flatOptions: { url: !0, context: !0 },\n      },\n      ajaxSetup: function(e, t) {\n        return t ? zt(zt(e, k.ajaxSettings), t) : zt(k.ajaxSettings, e);\n      },\n      ajaxPrefilter: Bt(It),\n      ajaxTransport: Bt(Wt),\n      ajax: function(e, t) {\n        'object' == typeof e && ((t = e), (e = void 0)), (t = t || {});\n        var c,\n          f,\n          p,\n          n,\n          d,\n          r,\n          h,\n          g,\n          i,\n          o,\n          v = k.ajaxSetup({}, t),\n          y = v.context || v,\n          m = v.context && (y.nodeType || y.jquery) ? k(y) : k.event,\n          x = k.Deferred(),\n          b = k.Callbacks('once memory'),\n          w = v.statusCode || {},\n          a = {},\n          s = {},\n          u = 'canceled',\n          T = {\n            readyState: 0,\n            getResponseHeader: function(e) {\n              var t;\n              if (h) {\n                if (!n) {\n                  n = {};\n                  while ((t = Pt.exec(p)))\n                    n[t[1].toLowerCase() + ' '] = (n[t[1].toLowerCase() + ' '] || []).concat(t[2]);\n                }\n                t = n[e.toLowerCase() + ' '];\n              }\n              return null == t ? null : t.join(', ');\n            },\n            getAllResponseHeaders: function() {\n              return h ? p : null;\n            },\n            setRequestHeader: function(e, t) {\n              return (\n                null == h && ((e = s[e.toLowerCase()] = s[e.toLowerCase()] || e), (a[e] = t)), this\n              );\n            },\n            overrideMimeType: function(e) {\n              return null == h && (v.mimeType = e), this;\n            },\n            statusCode: function(e) {\n              var t;\n              if (e)\n                if (h) T.always(e[T.status]);\n                else for (t in e) w[t] = [w[t], e[t]];\n              return this;\n            },\n            abort: function(e) {\n              var t = e || u;\n              return c && c.abort(t), l(0, t), this;\n            },\n          };\n        if (\n          (x.promise(T),\n          (v.url = ((e || v.url || Et.href) + '').replace(Mt, Et.protocol + '//')),\n          (v.type = t.method || t.type || v.method || v.type),\n          (v.dataTypes = (v.dataType || '*').toLowerCase().match(R) || ['']),\n          null == v.crossDomain)\n        ) {\n          r = E.createElement('a');\n          try {\n            (r.href = v.url),\n              (r.href = r.href),\n              (v.crossDomain = Ft.protocol + '//' + Ft.host != r.protocol + '//' + r.host);\n          } catch (e) {\n            v.crossDomain = !0;\n          }\n        }\n        if (\n          (v.data &&\n            v.processData &&\n            'string' != typeof v.data &&\n            (v.data = k.param(v.data, v.traditional)),\n          _t(It, v, t, T),\n          h)\n        )\n          return T;\n        for (i in ((g = k.event && v.global) && 0 == k.active++ && k.event.trigger('ajaxStart'),\n        (v.type = v.type.toUpperCase()),\n        (v.hasContent = !Rt.test(v.type)),\n        (f = v.url.replace(Ht, '')),\n        v.hasContent\n          ? v.data &&\n            v.processData &&\n            0 === (v.contentType || '').indexOf('application/x-www-form-urlencoded') &&\n            (v.data = v.data.replace(Lt, '+'))\n          : ((o = v.url.slice(f.length)),\n            v.data &&\n              (v.processData || 'string' == typeof v.data) &&\n              ((f += (St.test(f) ? '&' : '?') + v.data), delete v.data),\n            !1 === v.cache &&\n              ((f = f.replace(Ot, '$1')), (o = (St.test(f) ? '&' : '?') + '_=' + kt++ + o)),\n            (v.url = f + o)),\n        v.ifModified &&\n          (k.lastModified[f] && T.setRequestHeader('If-Modified-Since', k.lastModified[f]),\n          k.etag[f] && T.setRequestHeader('If-None-Match', k.etag[f])),\n        ((v.data && v.hasContent && !1 !== v.contentType) || t.contentType) &&\n          T.setRequestHeader('Content-Type', v.contentType),\n        T.setRequestHeader(\n          'Accept',\n          v.dataTypes[0] && v.accepts[v.dataTypes[0]]\n            ? v.accepts[v.dataTypes[0]] + ('*' !== v.dataTypes[0] ? ', ' + $t + '; q=0.01' : '')\n            : v.accepts['*'],\n        ),\n        v.headers))\n          T.setRequestHeader(i, v.headers[i]);\n        if (v.beforeSend && (!1 === v.beforeSend.call(y, T, v) || h)) return T.abort();\n        if (\n          ((u = 'abort'),\n          b.add(v.complete),\n          T.done(v.success),\n          T.fail(v.error),\n          (c = _t(Wt, v, t, T)))\n        ) {\n          if (((T.readyState = 1), g && m.trigger('ajaxSend', [T, v]), h)) return T;\n          v.async &&\n            0 < v.timeout &&\n            (d = C.setTimeout(function() {\n              T.abort('timeout');\n            }, v.timeout));\n          try {\n            (h = !1), c.send(a, l);\n          } catch (e) {\n            if (h) throw e;\n            l(-1, e);\n          }\n        } else l(-1, 'No Transport');\n        function l(e, t, n, r) {\n          var i,\n            o,\n            a,\n            s,\n            u,\n            l = t;\n          h ||\n            ((h = !0),\n            d && C.clearTimeout(d),\n            (c = void 0),\n            (p = r || ''),\n            (T.readyState = 0 < e ? 4 : 0),\n            (i = (200 <= e && e < 300) || 304 === e),\n            n &&\n              (s = (function(e, t, n) {\n                var r,\n                  i,\n                  o,\n                  a,\n                  s = e.contents,\n                  u = e.dataTypes;\n                while ('*' === u[0])\n                  u.shift(),\n                    void 0 === r && (r = e.mimeType || t.getResponseHeader('Content-Type'));\n                if (r)\n                  for (i in s)\n                    if (s[i] && s[i].test(r)) {\n                      u.unshift(i);\n                      break;\n                    }\n                if (u[0] in n) o = u[0];\n                else {\n                  for (i in n) {\n                    if (!u[0] || e.converters[i + ' ' + u[0]]) {\n                      o = i;\n                      break;\n                    }\n                    a || (a = i);\n                  }\n                  o = o || a;\n                }\n                if (o) return o !== u[0] && u.unshift(o), n[o];\n              })(v, T, n)),\n            (s = (function(e, t, n, r) {\n              var i,\n                o,\n                a,\n                s,\n                u,\n                l = {},\n                c = e.dataTypes.slice();\n              if (c[1]) for (a in e.converters) l[a.toLowerCase()] = e.converters[a];\n              o = c.shift();\n              while (o)\n                if (\n                  (e.responseFields[o] && (n[e.responseFields[o]] = t),\n                  !u && r && e.dataFilter && (t = e.dataFilter(t, e.dataType)),\n                  (u = o),\n                  (o = c.shift()))\n                )\n                  if ('*' === o) o = u;\n                  else if ('*' !== u && u !== o) {\n                    if (!(a = l[u + ' ' + o] || l['* ' + o]))\n                      for (i in l)\n                        if (\n                          (s = i.split(' '))[1] === o &&\n                          (a = l[u + ' ' + s[0]] || l['* ' + s[0]])\n                        ) {\n                          !0 === a ? (a = l[i]) : !0 !== l[i] && ((o = s[0]), c.unshift(s[1]));\n                          break;\n                        }\n                    if (!0 !== a)\n                      if (a && e['throws']) t = a(t);\n                      else\n                        try {\n                          t = a(t);\n                        } catch (e) {\n                          return {\n                            state: 'parsererror',\n                            error: a ? e : 'No conversion from ' + u + ' to ' + o,\n                          };\n                        }\n                  }\n              return { state: 'success', data: t };\n            })(v, s, T, i)),\n            i\n              ? (v.ifModified &&\n                  ((u = T.getResponseHeader('Last-Modified')) && (k.lastModified[f] = u),\n                  (u = T.getResponseHeader('etag')) && (k.etag[f] = u)),\n                204 === e || 'HEAD' === v.type\n                  ? (l = 'nocontent')\n                  : 304 === e\n                  ? (l = 'notmodified')\n                  : ((l = s.state), (o = s.data), (i = !(a = s.error))))\n              : ((a = l), (!e && l) || ((l = 'error'), e < 0 && (e = 0))),\n            (T.status = e),\n            (T.statusText = (t || l) + ''),\n            i ? x.resolveWith(y, [o, l, T]) : x.rejectWith(y, [T, l, a]),\n            T.statusCode(w),\n            (w = void 0),\n            g && m.trigger(i ? 'ajaxSuccess' : 'ajaxError', [T, v, i ? o : a]),\n            b.fireWith(y, [T, l]),\n            g && (m.trigger('ajaxComplete', [T, v]), --k.active || k.event.trigger('ajaxStop')));\n        }\n        return T;\n      },\n      getJSON: function(e, t, n) {\n        return k.get(e, t, n, 'json');\n      },\n      getScript: function(e, t) {\n        return k.get(e, void 0, t, 'script');\n      },\n    }),\n    k.each(['get', 'post'], function(e, i) {\n      k[i] = function(e, t, n, r) {\n        return (\n          m(t) && ((r = r || n), (n = t), (t = void 0)),\n          k.ajax(\n            k.extend(\n              { url: e, type: i, dataType: r, data: t, success: n },\n              k.isPlainObject(e) && e,\n            ),\n          )\n        );\n      };\n    }),\n    (k._evalUrl = function(e, t) {\n      return k.ajax({\n        url: e,\n        type: 'GET',\n        dataType: 'script',\n        cache: !0,\n        async: !1,\n        global: !1,\n        converters: { 'text script': function() {} },\n        dataFilter: function(e) {\n          k.globalEval(e, t);\n        },\n      });\n    }),\n    k.fn.extend({\n      wrapAll: function(e) {\n        var t;\n        return (\n          this[0] &&\n            (m(e) && (e = e.call(this[0])),\n            (t = k(e, this[0].ownerDocument)\n              .eq(0)\n              .clone(!0)),\n            this[0].parentNode && t.insertBefore(this[0]),\n            t\n              .map(function() {\n                var e = this;\n                while (e.firstElementChild) e = e.firstElementChild;\n                return e;\n              })\n              .append(this)),\n          this\n        );\n      },\n      wrapInner: function(n) {\n        return m(n)\n          ? this.each(function(e) {\n              k(this).wrapInner(n.call(this, e));\n            })\n          : this.each(function() {\n              var e = k(this),\n                t = e.contents();\n              t.length ? t.wrapAll(n) : e.append(n);\n            });\n      },\n      wrap: function(t) {\n        var n = m(t);\n        return this.each(function(e) {\n          k(this).wrapAll(n ? t.call(this, e) : t);\n        });\n      },\n      unwrap: function(e) {\n        return (\n          this.parent(e)\n            .not('body')\n            .each(function() {\n              k(this).replaceWith(this.childNodes);\n            }),\n          this\n        );\n      },\n    }),\n    (k.expr.pseudos.hidden = function(e) {\n      return !k.expr.pseudos.visible(e);\n    }),\n    (k.expr.pseudos.visible = function(e) {\n      return !!(e.offsetWidth || e.offsetHeight || e.getClientRects().length);\n    }),\n    (k.ajaxSettings.xhr = function() {\n      try {\n        return new C.XMLHttpRequest();\n      } catch (e) {}\n    });\n  var Ut = { 0: 200, 1223: 204 },\n    Xt = k.ajaxSettings.xhr();\n  (y.cors = !!Xt && 'withCredentials' in Xt),\n    (y.ajax = Xt = !!Xt),\n    k.ajaxTransport(function(i) {\n      var o, a;\n      if (y.cors || (Xt && !i.crossDomain))\n        return {\n          send: function(e, t) {\n            var n,\n              r = i.xhr();\n            if ((r.open(i.type, i.url, i.async, i.username, i.password), i.xhrFields))\n              for (n in i.xhrFields) r[n] = i.xhrFields[n];\n            for (n in (i.mimeType && r.overrideMimeType && r.overrideMimeType(i.mimeType),\n            i.crossDomain || e['X-Requested-With'] || (e['X-Requested-With'] = 'XMLHttpRequest'),\n            e))\n              r.setRequestHeader(n, e[n]);\n            (o = function(e) {\n              return function() {\n                o &&\n                  ((o = a = r.onload = r.onerror = r.onabort = r.ontimeout = r.onreadystatechange = null),\n                  'abort' === e\n                    ? r.abort()\n                    : 'error' === e\n                    ? 'number' != typeof r.status\n                      ? t(0, 'error')\n                      : t(r.status, r.statusText)\n                    : t(\n                        Ut[r.status] || r.status,\n                        r.statusText,\n                        'text' !== (r.responseType || 'text') || 'string' != typeof r.responseText\n                          ? { binary: r.response }\n                          : { text: r.responseText },\n                        r.getAllResponseHeaders(),\n                      ));\n              };\n            }),\n              (r.onload = o()),\n              (a = r.onerror = r.ontimeout = o('error')),\n              void 0 !== r.onabort\n                ? (r.onabort = a)\n                : (r.onreadystatechange = function() {\n                    4 === r.readyState &&\n                      C.setTimeout(function() {\n                        o && a();\n                      });\n                  }),\n              (o = o('abort'));\n            try {\n              r.send((i.hasContent && i.data) || null);\n            } catch (e) {\n              if (o) throw e;\n            }\n          },\n          abort: function() {\n            o && o();\n          },\n        };\n    }),\n    k.ajaxPrefilter(function(e) {\n      e.crossDomain && (e.contents.script = !1);\n    }),\n    k.ajaxSetup({\n      accepts: {\n        script:\n          'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript',\n      },\n      contents: { script: /\\b(?:java|ecma)script\\b/ },\n      converters: {\n        'text script': function(e) {\n          return k.globalEval(e), e;\n        },\n      },\n    }),\n    k.ajaxPrefilter('script', function(e) {\n      void 0 === e.cache && (e.cache = !1), e.crossDomain && (e.type = 'GET');\n    }),\n    k.ajaxTransport('script', function(n) {\n      var r, i;\n      if (n.crossDomain || n.scriptAttrs)\n        return {\n          send: function(e, t) {\n            (r = k('<script>')\n              .attr(n.scriptAttrs || {})\n              .prop({ charset: n.scriptCharset, src: n.url })\n              .on(\n                'load error',\n                (i = function(e) {\n                  r.remove(), (i = null), e && t('error' === e.type ? 404 : 200, e.type);\n                }),\n              )),\n              E.head.appendChild(r[0]);\n          },\n          abort: function() {\n            i && i();\n          },\n        };\n    });\n  var Vt,\n    Gt = [],\n    Yt = /(=)\\?(?=&|$)|\\?\\?/;\n  k.ajaxSetup({\n    jsonp: 'callback',\n    jsonpCallback: function() {\n      var e = Gt.pop() || k.expando + '_' + kt++;\n      return (this[e] = !0), e;\n    },\n  }),\n    k.ajaxPrefilter('json jsonp', function(e, t, n) {\n      var r,\n        i,\n        o,\n        a =\n          !1 !== e.jsonp &&\n          (Yt.test(e.url)\n            ? 'url'\n            : 'string' == typeof e.data &&\n              0 === (e.contentType || '').indexOf('application/x-www-form-urlencoded') &&\n              Yt.test(e.data) &&\n              'data');\n      if (a || 'jsonp' === e.dataTypes[0])\n        return (\n          (r = e.jsonpCallback = m(e.jsonpCallback) ? e.jsonpCallback() : e.jsonpCallback),\n          a\n            ? (e[a] = e[a].replace(Yt, '$1' + r))\n            : !1 !== e.jsonp && (e.url += (St.test(e.url) ? '&' : '?') + e.jsonp + '=' + r),\n          (e.converters['script json'] = function() {\n            return o || k.error(r + ' was not called'), o[0];\n          }),\n          (e.dataTypes[0] = 'json'),\n          (i = C[r]),\n          (C[r] = function() {\n            o = arguments;\n          }),\n          n.always(function() {\n            void 0 === i ? k(C).removeProp(r) : (C[r] = i),\n              e[r] && ((e.jsonpCallback = t.jsonpCallback), Gt.push(r)),\n              o && m(i) && i(o[0]),\n              (o = i = void 0);\n          }),\n          'script'\n        );\n    }),\n    (y.createHTMLDocument =\n      (((Vt = E.implementation.createHTMLDocument('').body).innerHTML =\n        '<form></form><form></form>'),\n      2 === Vt.childNodes.length)),\n    (k.parseHTML = function(e, t, n) {\n      return 'string' != typeof e\n        ? []\n        : ('boolean' == typeof t && ((n = t), (t = !1)),\n          t ||\n            (y.createHTMLDocument\n              ? (((r = (t = E.implementation.createHTMLDocument('')).createElement('base')).href =\n                  E.location.href),\n                t.head.appendChild(r))\n              : (t = E)),\n          (o = !n && []),\n          (i = D.exec(e))\n            ? [t.createElement(i[1])]\n            : ((i = we([e], t, o)), o && o.length && k(o).remove(), k.merge([], i.childNodes)));\n      var r, i, o;\n    }),\n    (k.fn.load = function(e, t, n) {\n      var r,\n        i,\n        o,\n        a = this,\n        s = e.indexOf(' ');\n      return (\n        -1 < s && ((r = mt(e.slice(s))), (e = e.slice(0, s))),\n        m(t) ? ((n = t), (t = void 0)) : t && 'object' == typeof t && (i = 'POST'),\n        0 < a.length &&\n          k\n            .ajax({ url: e, type: i || 'GET', dataType: 'html', data: t })\n            .done(function(e) {\n              (o = arguments),\n                a.html(\n                  r\n                    ? k('<div>')\n                        .append(k.parseHTML(e))\n                        .find(r)\n                    : e,\n                );\n            })\n            .always(\n              n &&\n                function(e, t) {\n                  a.each(function() {\n                    n.apply(this, o || [e.responseText, t, e]);\n                  });\n                },\n            ),\n        this\n      );\n    }),\n    k.each(\n      ['ajaxStart', 'ajaxStop', 'ajaxComplete', 'ajaxError', 'ajaxSuccess', 'ajaxSend'],\n      function(e, t) {\n        k.fn[t] = function(e) {\n          return this.on(t, e);\n        };\n      },\n    ),\n    (k.expr.pseudos.animated = function(t) {\n      return k.grep(k.timers, function(e) {\n        return t === e.elem;\n      }).length;\n    }),\n    (k.offset = {\n      setOffset: function(e, t, n) {\n        var r,\n          i,\n          o,\n          a,\n          s,\n          u,\n          l = k.css(e, 'position'),\n          c = k(e),\n          f = {};\n        'static' === l && (e.style.position = 'relative'),\n          (s = c.offset()),\n          (o = k.css(e, 'top')),\n          (u = k.css(e, 'left')),\n          ('absolute' === l || 'fixed' === l) && -1 < (o + u).indexOf('auto')\n            ? ((a = (r = c.position()).top), (i = r.left))\n            : ((a = parseFloat(o) || 0), (i = parseFloat(u) || 0)),\n          m(t) && (t = t.call(e, n, k.extend({}, s))),\n          null != t.top && (f.top = t.top - s.top + a),\n          null != t.left && (f.left = t.left - s.left + i),\n          'using' in t ? t.using.call(e, f) : c.css(f);\n      },\n    }),\n    k.fn.extend({\n      offset: function(t) {\n        if (arguments.length)\n          return void 0 === t\n            ? this\n            : this.each(function(e) {\n                k.offset.setOffset(this, t, e);\n              });\n        var e,\n          n,\n          r = this[0];\n        return r\n          ? r.getClientRects().length\n            ? ((e = r.getBoundingClientRect()),\n              (n = r.ownerDocument.defaultView),\n              { top: e.top + n.pageYOffset, left: e.left + n.pageXOffset })\n            : { top: 0, left: 0 }\n          : void 0;\n      },\n      position: function() {\n        if (this[0]) {\n          var e,\n            t,\n            n,\n            r = this[0],\n            i = { top: 0, left: 0 };\n          if ('fixed' === k.css(r, 'position')) t = r.getBoundingClientRect();\n          else {\n            (t = this.offset()), (n = r.ownerDocument), (e = r.offsetParent || n.documentElement);\n            while (\n              e &&\n              (e === n.body || e === n.documentElement) &&\n              'static' === k.css(e, 'position')\n            )\n              e = e.parentNode;\n            e &&\n              e !== r &&\n              1 === e.nodeType &&\n              (((i = k(e).offset()).top += k.css(e, 'borderTopWidth', !0)),\n              (i.left += k.css(e, 'borderLeftWidth', !0)));\n          }\n          return {\n            top: t.top - i.top - k.css(r, 'marginTop', !0),\n            left: t.left - i.left - k.css(r, 'marginLeft', !0),\n          };\n        }\n      },\n      offsetParent: function() {\n        return this.map(function() {\n          var e = this.offsetParent;\n          while (e && 'static' === k.css(e, 'position')) e = e.offsetParent;\n          return e || ie;\n        });\n      },\n    }),\n    k.each({ scrollLeft: 'pageXOffset', scrollTop: 'pageYOffset' }, function(t, i) {\n      var o = 'pageYOffset' === i;\n      k.fn[t] = function(e) {\n        return _(\n          this,\n          function(e, t, n) {\n            var r;\n            if ((x(e) ? (r = e) : 9 === e.nodeType && (r = e.defaultView), void 0 === n))\n              return r ? r[i] : e[t];\n            r ? r.scrollTo(o ? r.pageXOffset : n, o ? n : r.pageYOffset) : (e[t] = n);\n          },\n          t,\n          e,\n          arguments.length,\n        );\n      };\n    }),\n    k.each(['top', 'left'], function(e, n) {\n      k.cssHooks[n] = ze(y.pixelPosition, function(e, t) {\n        if (t) return (t = _e(e, n)), $e.test(t) ? k(e).position()[n] + 'px' : t;\n      });\n    }),\n    k.each({ Height: 'height', Width: 'width' }, function(a, s) {\n      k.each({ padding: 'inner' + a, content: s, '': 'outer' + a }, function(r, o) {\n        k.fn[o] = function(e, t) {\n          var n = arguments.length && (r || 'boolean' != typeof e),\n            i = r || (!0 === e || !0 === t ? 'margin' : 'border');\n          return _(\n            this,\n            function(e, t, n) {\n              var r;\n              return x(e)\n                ? 0 === o.indexOf('outer')\n                  ? e['inner' + a]\n                  : e.document.documentElement['client' + a]\n                : 9 === e.nodeType\n                ? ((r = e.documentElement),\n                  Math.max(\n                    e.body['scroll' + a],\n                    r['scroll' + a],\n                    e.body['offset' + a],\n                    r['offset' + a],\n                    r['client' + a],\n                  ))\n                : void 0 === n\n                ? k.css(e, t, i)\n                : k.style(e, t, n, i);\n            },\n            s,\n            n ? e : void 0,\n            n,\n          );\n        };\n      });\n    }),\n    k.each(\n      'blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu'.split(\n        ' ',\n      ),\n      function(e, n) {\n        k.fn[n] = function(e, t) {\n          return 0 < arguments.length ? this.on(n, null, e, t) : this.trigger(n);\n        };\n      },\n    ),\n    k.fn.extend({\n      hover: function(e, t) {\n        return this.mouseenter(e).mouseleave(t || e);\n      },\n    }),\n    k.fn.extend({\n      bind: function(e, t, n) {\n        return this.on(e, null, t, n);\n      },\n      unbind: function(e, t) {\n        return this.off(e, null, t);\n      },\n      delegate: function(e, t, n, r) {\n        return this.on(t, e, n, r);\n      },\n      undelegate: function(e, t, n) {\n        return 1 === arguments.length ? this.off(e, '**') : this.off(t, e || '**', n);\n      },\n    }),\n    (k.proxy = function(e, t) {\n      var n, r, i;\n      if (('string' == typeof t && ((n = e[t]), (t = e), (e = n)), m(e)))\n        return (\n          (r = s.call(arguments, 2)),\n          ((i = function() {\n            return e.apply(t || this, r.concat(s.call(arguments)));\n          }).guid = e.guid = e.guid || k.guid++),\n          i\n        );\n    }),\n    (k.holdReady = function(e) {\n      e ? k.readyWait++ : k.ready(!0);\n    }),\n    (k.isArray = Array.isArray),\n    (k.parseJSON = JSON.parse),\n    (k.nodeName = A),\n    (k.isFunction = m),\n    (k.isWindow = x),\n    (k.camelCase = V),\n    (k.type = w),\n    (k.now = Date.now),\n    (k.isNumeric = function(e) {\n      var t = k.type(e);\n      return ('number' === t || 'string' === t) && !isNaN(e - parseFloat(e));\n    }),\n    'function' == typeof define &&\n      define.amd &&\n      define('jquery', [], function() {\n        return k;\n      });\n  var Qt = C.jQuery,\n    Jt = C.$;\n  return (\n    (k.noConflict = function(e) {\n      return C.$ === k && (C.$ = Jt), e && C.jQuery === k && (C.jQuery = Qt), k;\n    }),\n    e || (C.jQuery = C.$ = k),\n    k\n  );\n});\n"
  },
  {
    "path": "website/js/main.js",
    "content": "jQuery(document).ready(function() {\n  'use strict';\n\n  // Call all ready functions\n  appinocks_navbarFixed(),\n    appinocks_navScrollSpy(),\n    appinocks_counterUp(),\n    appinocks_magnificPopupVideo(),\n    // appinocks_owl_carousel(),\n    appinocks_pricingTab(),\n    appinocks_copyrightDynamicYear(),\n    appinocks_preloader(),\n    appinocks_scrollIt(),\n    new WOW().init();\n});\n\n/*  ---------------------------------------------------\n    1.Navbar Fixed\n    --------------------------------------------------- */\nfunction appinocks_navbarFixed() {\n  'use-strict';\n\n  // Variables\n  var scrollTop = jQuery(window).scrollTop(),\n    navbarMenu = jQuery('.header'),\n    navbarLink = jQuery('.navbar-nav>li>a'),\n    scrollTopBtn = jQuery('.scroll-top-btn'),\n    downloadBtn = jQuery('#downloadBtn'),\n    downScroll = jQuery('.down-scroll'),\n    navbarHamburgerBtn = jQuery('.navbar-hamburger');\n\n  // Window On Scroll Add Class Shrink\n  jQuery(window).on('scroll', function() {\n    let scrollTop = jQuery(this).scrollTop();\n    if (scrollTop > 80) {\n      navbarMenu.addClass('header-shrink');\n      scrollTopBtn.addClass('active');\n    } else {\n      navbarMenu.removeClass('header-shrink');\n      scrollTopBtn.removeClass('active');\n    }\n  });\n\n  if (scrollTop > 100) {\n    navbarMenu.addClass('header-shrink');\n    scrollTopBtn.addClass('active');\n  } else {\n    navbarMenu.removeClass('header-shrink');\n    scrollTopBtn.removeClass('active');\n  }\n\n  navbarLink.on('click', function() {\n    jQuery('.navbar-collapse').collapse('hide');\n    navbarHamburgerBtn.toggleClass('active');\n  });\n}\n\n/*  ---------------------------------------------------\n    2.Navbar Scroll Spy\n    --------------------------------------------------- */\nfunction appinocks_navScrollSpy() {\n  'use-strict';\n\n  // Scroll Spy\n  jQuery('body').scrollspy({\n    target: '#fixedNavbar',\n    offset: 95,\n  });\n}\n\n/*  ---------------------------------------------------\n    3.Counters\n    --------------------------------------------------- */\nfunction appinocks_counterUp() {\n  'use-strict';\n\n  jQuery('.counter').counterUp({\n    delay: 15,\n    time: 2000,\n  });\n}\n\n/*  -----------------------------------------------------\n    4.Owl Carousel\n    ----------------------------------------------------- */\n\nfunction appinocks_owl_carousel() {\n  'use-strict';\n\n  // Variables\n  var screenshotsSlider = jQuery('.screenshots-slider');\n\n  // Partners Slider\n  screenshotsSlider.owlCarousel({\n    loop: true,\n    margin: 30,\n    nav: true,\n    dots: false,\n    center: true,\n    stagePadding: 0,\n    smartSpeed: 1000,\n    animateOut: 'fadeOut',\n    autoplay: true,\n    autoplayTimeout: 3000,\n    autoplayHoverPause: true,\n    navText: ['<span><</span>', '<span>></span>'],\n    responsive: {\n      0: {\n        items: 2,\n        center: false,\n      },\n      600: {\n        items: 3,\n      },\n      768: {\n        items: 3,\n      },\n      1000: {\n        items: 4,\n      },\n    },\n  });\n}\n\n/*  -----------------------------------------------------\n    5.Magnific Popup\n    ----------------------------------------------------- */\n\nfunction appinocks_magnificPopupVideo() {\n  'use-strict';\n\n  // Variables\n  var videoPopupItem = jQuery('.popup-youtube, .popup-vimeo, .popup-gmaps');\n\n  videoPopupItem.magnificPopup({\n    disableOn: 700,\n    type: 'iframe',\n    mainClass: 'mfp-fade',\n    removalDelay: 160,\n    preloader: false,\n    fixedContentPos: false,\n  });\n}\n\n/*  -----------------------------------------------------\n    6.Pricing Tab\n    ----------------------------------------------------- */\n\nfunction appinocks_pricingTab() {\n  'use-scrict';\n\n  // Variables\n  var pricingTabLink = jQuery('.price-toggle-wrap > a'),\n    pricingTabContent = jQuery('.pricing-tab-content');\n\n  pricingTabLink.on('click', function() {\n    pricingTabLink.removeClass('active');\n    jQuery(this).addClass('active');\n    pricingTabContent.removeClass('active');\n    pricingTabContent.eq(jQuery(this).index()).addClass('active animated fadeInUp');\n  });\n}\n\n/*  -----------------------------------------------------\n    7.Copyright\n    ----------------------------------------------------- */\n\nfunction appinocks_copyrightDynamicYear() {\n  'use-strict';\n\n  // Variables\n  var fullYearCopyright = jQuery('#fullYearCopyright'),\n    getFullYearDate = new Date().getFullYear();\n\n  fullYearCopyright.text(getFullYearDate);\n}\n\n/*  -----------------------------------------------------\n    9.Preloader\n    ----------------------------------------------------- */\n\nfunction appinocks_preloader() {\n  'use-strict';\n\n  // Variables\n  var preloaderWrap = jQuery('.preloader-wrap'),\n    loaderInner = jQuery('.preloader-wrap .preloader-inner');\n\n  jQuery(window).load('body', function() {\n    loaderInner.fadeOut();\n    preloaderWrap.delay(350).fadeOut('slow');\n  });\n}\n\n/*  -----------------------------------------------------\n    10.ScrollIt\n    ----------------------------------------------------- */\n\nfunction appinocks_scrollIt() {\n  'use-strict';\n\n  jQuery.scrollIt({\n    upKey: 38,\n    downKey: 40,\n    easing: 'swing',\n    scrollTime: 600,\n    activeClass: 'active',\n    onPageChange: null,\n    topOffset: -15,\n  });\n}\n\n/*  -----------------------------------------------------\n    11.ScrollUp\n    ----------------------------------------------------- */\n\nfunction appinocks_scrollUp() {\n  'use-strict';\n\n  jQuery('.scroll-top-btn').on('click', function(event) {\n    event.preventDefault();\n\n    jQuery('html, body').animate(\n      {\n        scrollTop: jQuery(jQuery.attr(this, 'href')).offset().top,\n      },\n      500,\n    );\n  });\n}\n\nappinocks_scrollUp();\n"
  },
  {
    "path": "website/js/plugins.js",
    "content": "/*\n\t01) Magnific Popup\n\t02) Popper\n  03) Bootstrap\n  04) Jarallax Elements\n  05) Jarallax\n  06) WOW \n  07) Waypoints \n  08) Counter Up\n  09) jQuery Easing \n  10) ScrollIt\n  11) MBYTBPLAYER \n  12) Owl Carousel\n  13) Zepto Js\n  14) Vegas Slider\n*/\n\n/*------------------------------------------------------------------*/\n/*\t01) Magnific Popup\n/*------------------------------------------------------------------*/\n\n/*! Magnific Popup - v1.1.0 - 2016-02-20\n * http://dimsemenov.com/plugins/magnific-popup/\n * Copyright (c) 2016 Dmitry Semenov; */\n!(function(a) {\n  'function' == typeof define && define.amd\n    ? define(['jquery'], a)\n    : a('object' == typeof exports ? require('jquery') : window.jQuery || window.Zepto);\n})(function(a) {\n  var b,\n    c,\n    d,\n    e,\n    f,\n    g,\n    h = 'Close',\n    i = 'BeforeClose',\n    j = 'AfterClose',\n    k = 'BeforeAppend',\n    l = 'MarkupParse',\n    m = 'Open',\n    n = 'Change',\n    o = 'mfp',\n    p = '.' + o,\n    q = 'mfp-ready',\n    r = 'mfp-removing',\n    s = 'mfp-prevent-close',\n    t = function() {},\n    u = !!window.jQuery,\n    v = a(window),\n    w = function(a, c) {\n      b.ev.on(o + a + p, c);\n    },\n    x = function(b, c, d, e) {\n      var f = document.createElement('div');\n      return (\n        (f.className = 'mfp-' + b),\n        d && (f.innerHTML = d),\n        e ? c && c.appendChild(f) : ((f = a(f)), c && f.appendTo(c)),\n        f\n      );\n    },\n    y = function(c, d) {\n      b.ev.triggerHandler(o + c, d),\n        b.st.callbacks &&\n          ((c = c.charAt(0).toLowerCase() + c.slice(1)),\n          b.st.callbacks[c] && b.st.callbacks[c].apply(b, a.isArray(d) ? d : [d]));\n    },\n    z = function(c) {\n      return (\n        (c === g && b.currTemplate.closeBtn) ||\n          ((b.currTemplate.closeBtn = a(b.st.closeMarkup.replace('%title%', b.st.tClose))),\n          (g = c)),\n        b.currTemplate.closeBtn\n      );\n    },\n    A = function() {\n      a.magnificPopup.instance || ((b = new t()), b.init(), (a.magnificPopup.instance = b));\n    },\n    B = function() {\n      var a = document.createElement('p').style,\n        b = ['ms', 'O', 'Moz', 'Webkit'];\n      if (void 0 !== a.transition) return !0;\n      for (; b.length; ) if (b.pop() + 'Transition' in a) return !0;\n      return !1;\n    };\n  (t.prototype = {\n    constructor: t,\n    init: function() {\n      var c = navigator.appVersion;\n      (b.isLowIE = b.isIE8 = document.all && !document.addEventListener),\n        (b.isAndroid = /android/gi.test(c)),\n        (b.isIOS = /iphone|ipad|ipod/gi.test(c)),\n        (b.supportsTransition = B()),\n        (b.probablyMobile =\n          b.isAndroid ||\n          b.isIOS ||\n          /(Opera Mini)|Kindle|webOS|BlackBerry|(Opera Mobi)|(Windows Phone)|IEMobile/i.test(\n            navigator.userAgent,\n          )),\n        (d = a(document)),\n        (b.popupsCache = {});\n    },\n    open: function(c) {\n      var e;\n      if (c.isObj === !1) {\n        (b.items = c.items.toArray()), (b.index = 0);\n        var g,\n          h = c.items;\n        for (e = 0; e < h.length; e++)\n          if (((g = h[e]), g.parsed && (g = g.el[0]), g === c.el[0])) {\n            b.index = e;\n            break;\n          }\n      } else (b.items = a.isArray(c.items) ? c.items : [c.items]), (b.index = c.index || 0);\n      if (b.isOpen) return void b.updateItemHTML();\n      (b.types = []),\n        (f = ''),\n        c.mainEl && c.mainEl.length ? (b.ev = c.mainEl.eq(0)) : (b.ev = d),\n        c.key\n          ? (b.popupsCache[c.key] || (b.popupsCache[c.key] = {}),\n            (b.currTemplate = b.popupsCache[c.key]))\n          : (b.currTemplate = {}),\n        (b.st = a.extend(!0, {}, a.magnificPopup.defaults, c)),\n        (b.fixedContentPos =\n          'auto' === b.st.fixedContentPos ? !b.probablyMobile : b.st.fixedContentPos),\n        b.st.modal &&\n          ((b.st.closeOnContentClick = !1),\n          (b.st.closeOnBgClick = !1),\n          (b.st.showCloseBtn = !1),\n          (b.st.enableEscapeKey = !1)),\n        b.bgOverlay ||\n          ((b.bgOverlay = x('bg').on('click' + p, function() {\n            b.close();\n          })),\n          (b.wrap = x('wrap')\n            .attr('tabindex', -1)\n            .on('click' + p, function(a) {\n              b._checkIfClose(a.target) && b.close();\n            })),\n          (b.container = x('container', b.wrap))),\n        (b.contentContainer = x('content')),\n        b.st.preloader && (b.preloader = x('preloader', b.container, b.st.tLoading));\n      var i = a.magnificPopup.modules;\n      for (e = 0; e < i.length; e++) {\n        var j = i[e];\n        (j = j.charAt(0).toUpperCase() + j.slice(1)), b['init' + j].call(b);\n      }\n      y('BeforeOpen'),\n        b.st.showCloseBtn &&\n          (b.st.closeBtnInside\n            ? (w(l, function(a, b, c, d) {\n                c.close_replaceWith = z(d.type);\n              }),\n              (f += ' mfp-close-btn-in'))\n            : b.wrap.append(z())),\n        b.st.alignTop && (f += ' mfp-align-top'),\n        b.fixedContentPos\n          ? b.wrap.css({ overflow: b.st.overflowY, overflowX: 'hidden', overflowY: b.st.overflowY })\n          : b.wrap.css({ top: v.scrollTop(), position: 'absolute' }),\n        (b.st.fixedBgPos === !1 || ('auto' === b.st.fixedBgPos && !b.fixedContentPos)) &&\n          b.bgOverlay.css({ height: d.height(), position: 'absolute' }),\n        b.st.enableEscapeKey &&\n          d.on('keyup' + p, function(a) {\n            27 === a.keyCode && b.close();\n          }),\n        v.on('resize' + p, function() {\n          b.updateSize();\n        }),\n        b.st.closeOnContentClick || (f += ' mfp-auto-cursor'),\n        f && b.wrap.addClass(f);\n      var k = (b.wH = v.height()),\n        n = {};\n      if (b.fixedContentPos && b._hasScrollBar(k)) {\n        var o = b._getScrollbarSize();\n        o && (n.marginRight = o);\n      }\n      b.fixedContentPos &&\n        (b.isIE7 ? a('body, html').css('overflow', 'hidden') : (n.overflow = 'hidden'));\n      var r = b.st.mainClass;\n      return (\n        b.isIE7 && (r += ' mfp-ie7'),\n        r && b._addClassToMFP(r),\n        b.updateItemHTML(),\n        y('BuildControls'),\n        a('html').css(n),\n        b.bgOverlay.add(b.wrap).prependTo(b.st.prependTo || a(document.body)),\n        (b._lastFocusedEl = document.activeElement),\n        setTimeout(function() {\n          b.content ? (b._addClassToMFP(q), b._setFocus()) : b.bgOverlay.addClass(q),\n            d.on('focusin' + p, b._onFocusIn);\n        }, 16),\n        (b.isOpen = !0),\n        b.updateSize(k),\n        y(m),\n        c\n      );\n    },\n    close: function() {\n      b.isOpen &&\n        (y(i),\n        (b.isOpen = !1),\n        b.st.removalDelay && !b.isLowIE && b.supportsTransition\n          ? (b._addClassToMFP(r),\n            setTimeout(function() {\n              b._close();\n            }, b.st.removalDelay))\n          : b._close());\n    },\n    _close: function() {\n      y(h);\n      var c = r + ' ' + q + ' ';\n      if (\n        (b.bgOverlay.detach(),\n        b.wrap.detach(),\n        b.container.empty(),\n        b.st.mainClass && (c += b.st.mainClass + ' '),\n        b._removeClassFromMFP(c),\n        b.fixedContentPos)\n      ) {\n        var e = { marginRight: '' };\n        b.isIE7 ? a('body, html').css('overflow', '') : (e.overflow = ''), a('html').css(e);\n      }\n      d.off('keyup' + p + ' focusin' + p),\n        b.ev.off(p),\n        b.wrap.attr('class', 'mfp-wrap').removeAttr('style'),\n        b.bgOverlay.attr('class', 'mfp-bg'),\n        b.container.attr('class', 'mfp-container'),\n        !b.st.showCloseBtn ||\n          (b.st.closeBtnInside && b.currTemplate[b.currItem.type] !== !0) ||\n          (b.currTemplate.closeBtn && b.currTemplate.closeBtn.detach()),\n        b.st.autoFocusLast && b._lastFocusedEl && a(b._lastFocusedEl).focus(),\n        (b.currItem = null),\n        (b.content = null),\n        (b.currTemplate = null),\n        (b.prevHeight = 0),\n        y(j);\n    },\n    updateSize: function(a) {\n      if (b.isIOS) {\n        var c = document.documentElement.clientWidth / window.innerWidth,\n          d = window.innerHeight * c;\n        b.wrap.css('height', d), (b.wH = d);\n      } else b.wH = a || v.height();\n      b.fixedContentPos || b.wrap.css('height', b.wH), y('Resize');\n    },\n    updateItemHTML: function() {\n      var c = b.items[b.index];\n      b.contentContainer.detach(),\n        b.content && b.content.detach(),\n        c.parsed || (c = b.parseEl(b.index));\n      var d = c.type;\n      if (\n        (y('BeforeChange', [b.currItem ? b.currItem.type : '', d]),\n        (b.currItem = c),\n        !b.currTemplate[d])\n      ) {\n        var f = b.st[d] ? b.st[d].markup : !1;\n        y('FirstMarkupParse', f), f ? (b.currTemplate[d] = a(f)) : (b.currTemplate[d] = !0);\n      }\n      e && e !== c.type && b.container.removeClass('mfp-' + e + '-holder');\n      var g = b['get' + d.charAt(0).toUpperCase() + d.slice(1)](c, b.currTemplate[d]);\n      b.appendContent(g, d),\n        (c.preloaded = !0),\n        y(n, c),\n        (e = c.type),\n        b.container.prepend(b.contentContainer),\n        y('AfterChange');\n    },\n    appendContent: function(a, c) {\n      (b.content = a),\n        a\n          ? b.st.showCloseBtn && b.st.closeBtnInside && b.currTemplate[c] === !0\n            ? b.content.find('.mfp-close').length || b.content.append(z())\n            : (b.content = a)\n          : (b.content = ''),\n        y(k),\n        b.container.addClass('mfp-' + c + '-holder'),\n        b.contentContainer.append(b.content);\n    },\n    parseEl: function(c) {\n      var d,\n        e = b.items[c];\n      if ((e.tagName ? (e = { el: a(e) }) : ((d = e.type), (e = { data: e, src: e.src })), e.el)) {\n        for (var f = b.types, g = 0; g < f.length; g++)\n          if (e.el.hasClass('mfp-' + f[g])) {\n            d = f[g];\n            break;\n          }\n        (e.src = e.el.attr('data-mfp-src')), e.src || (e.src = e.el.attr('href'));\n      }\n      return (\n        (e.type = d || b.st.type || 'inline'),\n        (e.index = c),\n        (e.parsed = !0),\n        (b.items[c] = e),\n        y('ElementParse', e),\n        b.items[c]\n      );\n    },\n    addGroup: function(a, c) {\n      var d = function(d) {\n        (d.mfpEl = this), b._openClick(d, a, c);\n      };\n      c || (c = {});\n      var e = 'click.magnificPopup';\n      (c.mainEl = a),\n        c.items\n          ? ((c.isObj = !0), a.off(e).on(e, d))\n          : ((c.isObj = !1),\n            c.delegate ? a.off(e).on(e, c.delegate, d) : ((c.items = a), a.off(e).on(e, d)));\n    },\n    _openClick: function(c, d, e) {\n      var f = void 0 !== e.midClick ? e.midClick : a.magnificPopup.defaults.midClick;\n      if (f || !(2 === c.which || c.ctrlKey || c.metaKey || c.altKey || c.shiftKey)) {\n        var g = void 0 !== e.disableOn ? e.disableOn : a.magnificPopup.defaults.disableOn;\n        if (g)\n          if (a.isFunction(g)) {\n            if (!g.call(b)) return !0;\n          } else if (v.width() < g) return !0;\n        c.type && (c.preventDefault(), b.isOpen && c.stopPropagation()),\n          (e.el = a(c.mfpEl)),\n          e.delegate && (e.items = d.find(e.delegate)),\n          b.open(e);\n      }\n    },\n    updateStatus: function(a, d) {\n      if (b.preloader) {\n        c !== a && b.container.removeClass('mfp-s-' + c),\n          d || 'loading' !== a || (d = b.st.tLoading);\n        var e = { status: a, text: d };\n        y('UpdateStatus', e),\n          (a = e.status),\n          (d = e.text),\n          b.preloader.html(d),\n          b.preloader.find('a').on('click', function(a) {\n            a.stopImmediatePropagation();\n          }),\n          b.container.addClass('mfp-s-' + a),\n          (c = a);\n      }\n    },\n    _checkIfClose: function(c) {\n      if (!a(c).hasClass(s)) {\n        var d = b.st.closeOnContentClick,\n          e = b.st.closeOnBgClick;\n        if (d && e) return !0;\n        if (!b.content || a(c).hasClass('mfp-close') || (b.preloader && c === b.preloader[0]))\n          return !0;\n        if (c === b.content[0] || a.contains(b.content[0], c)) {\n          if (d) return !0;\n        } else if (e && a.contains(document, c)) return !0;\n        return !1;\n      }\n    },\n    _addClassToMFP: function(a) {\n      b.bgOverlay.addClass(a), b.wrap.addClass(a);\n    },\n    _removeClassFromMFP: function(a) {\n      this.bgOverlay.removeClass(a), b.wrap.removeClass(a);\n    },\n    _hasScrollBar: function(a) {\n      return (b.isIE7 ? d.height() : document.body.scrollHeight) > (a || v.height());\n    },\n    _setFocus: function() {\n      (b.st.focus ? b.content.find(b.st.focus).eq(0) : b.wrap).focus();\n    },\n    _onFocusIn: function(c) {\n      return c.target === b.wrap[0] || a.contains(b.wrap[0], c.target)\n        ? void 0\n        : (b._setFocus(), !1);\n    },\n    _parseMarkup: function(b, c, d) {\n      var e;\n      d.data && (c = a.extend(d.data, c)),\n        y(l, [b, c, d]),\n        a.each(c, function(c, d) {\n          if (void 0 === d || d === !1) return !0;\n          if (((e = c.split('_')), e.length > 1)) {\n            var f = b.find(p + '-' + e[0]);\n            if (f.length > 0) {\n              var g = e[1];\n              'replaceWith' === g\n                ? f[0] !== d[0] && f.replaceWith(d)\n                : 'img' === g\n                ? f.is('img')\n                  ? f.attr('src', d)\n                  : f.replaceWith(\n                      a('<img>')\n                        .attr('src', d)\n                        .attr('class', f.attr('class')),\n                    )\n                : f.attr(e[1], d);\n            }\n          } else b.find(p + '-' + c).html(d);\n        });\n    },\n    _getScrollbarSize: function() {\n      if (void 0 === b.scrollbarSize) {\n        var a = document.createElement('div');\n        (a.style.cssText =\n          'width: 99px; height: 99px; overflow: scroll; position: absolute; top: -9999px;'),\n          document.body.appendChild(a),\n          (b.scrollbarSize = a.offsetWidth - a.clientWidth),\n          document.body.removeChild(a);\n      }\n      return b.scrollbarSize;\n    },\n  }),\n    (a.magnificPopup = {\n      instance: null,\n      proto: t.prototype,\n      modules: [],\n      open: function(b, c) {\n        return (\n          A(),\n          (b = b ? a.extend(!0, {}, b) : {}),\n          (b.isObj = !0),\n          (b.index = c || 0),\n          this.instance.open(b)\n        );\n      },\n      close: function() {\n        return a.magnificPopup.instance && a.magnificPopup.instance.close();\n      },\n      registerModule: function(b, c) {\n        c.options && (a.magnificPopup.defaults[b] = c.options),\n          a.extend(this.proto, c.proto),\n          this.modules.push(b);\n      },\n      defaults: {\n        disableOn: 0,\n        key: null,\n        midClick: !1,\n        mainClass: '',\n        preloader: !0,\n        focus: '',\n        closeOnContentClick: !1,\n        closeOnBgClick: !0,\n        closeBtnInside: !0,\n        showCloseBtn: !0,\n        enableEscapeKey: !0,\n        modal: !1,\n        alignTop: !1,\n        removalDelay: 0,\n        prependTo: null,\n        fixedContentPos: 'auto',\n        fixedBgPos: 'auto',\n        overflowY: 'auto',\n        closeMarkup: '<button title=\"%title%\" type=\"button\" class=\"mfp-close\">&#215;</button>',\n        tClose: 'Close (Esc)',\n        tLoading: 'Loading...',\n        autoFocusLast: !0,\n      },\n    }),\n    (a.fn.magnificPopup = function(c) {\n      A();\n      var d = a(this);\n      if ('string' == typeof c)\n        if ('open' === c) {\n          var e,\n            f = u ? d.data('magnificPopup') : d[0].magnificPopup,\n            g = parseInt(arguments[1], 10) || 0;\n          f.items\n            ? (e = f.items[g])\n            : ((e = d), f.delegate && (e = e.find(f.delegate)), (e = e.eq(g))),\n            b._openClick({ mfpEl: e }, d, f);\n        } else b.isOpen && b[c].apply(b, Array.prototype.slice.call(arguments, 1));\n      else\n        (c = a.extend(!0, {}, c)),\n          u ? d.data('magnificPopup', c) : (d[0].magnificPopup = c),\n          b.addGroup(d, c);\n      return d;\n    });\n  var C,\n    D,\n    E,\n    F = 'inline',\n    G = function() {\n      E && (D.after(E.addClass(C)).detach(), (E = null));\n    };\n  a.magnificPopup.registerModule(F, {\n    options: { hiddenClass: 'hide', markup: '', tNotFound: 'Content not found' },\n    proto: {\n      initInline: function() {\n        b.types.push(F),\n          w(h + '.' + F, function() {\n            G();\n          });\n      },\n      getInline: function(c, d) {\n        if ((G(), c.src)) {\n          var e = b.st.inline,\n            f = a(c.src);\n          if (f.length) {\n            var g = f[0].parentNode;\n            g &&\n              g.tagName &&\n              (D || ((C = e.hiddenClass), (D = x(C)), (C = 'mfp-' + C)),\n              (E = f\n                .after(D)\n                .detach()\n                .removeClass(C))),\n              b.updateStatus('ready');\n          } else b.updateStatus('error', e.tNotFound), (f = a('<div>'));\n          return (c.inlineElement = f), f;\n        }\n        return b.updateStatus('ready'), b._parseMarkup(d, {}, c), d;\n      },\n    },\n  });\n  var H,\n    I = 'ajax',\n    J = function() {\n      H && a(document.body).removeClass(H);\n    },\n    K = function() {\n      J(), b.req && b.req.abort();\n    };\n  a.magnificPopup.registerModule(I, {\n    options: {\n      settings: null,\n      cursor: 'mfp-ajax-cur',\n      tError: '<a href=\"%url%\">The content</a> could not be loaded.',\n    },\n    proto: {\n      initAjax: function() {\n        b.types.push(I), (H = b.st.ajax.cursor), w(h + '.' + I, K), w('BeforeChange.' + I, K);\n      },\n      getAjax: function(c) {\n        H && a(document.body).addClass(H), b.updateStatus('loading');\n        var d = a.extend(\n          {\n            url: c.src,\n            success: function(d, e, f) {\n              var g = { data: d, xhr: f };\n              y('ParseAjax', g),\n                b.appendContent(a(g.data), I),\n                (c.finished = !0),\n                J(),\n                b._setFocus(),\n                setTimeout(function() {\n                  b.wrap.addClass(q);\n                }, 16),\n                b.updateStatus('ready'),\n                y('AjaxContentAdded');\n            },\n            error: function() {\n              J(),\n                (c.finished = c.loadError = !0),\n                b.updateStatus('error', b.st.ajax.tError.replace('%url%', c.src));\n            },\n          },\n          b.st.ajax.settings,\n        );\n        return (b.req = a.ajax(d)), '';\n      },\n    },\n  });\n  var L,\n    M = function(c) {\n      if (c.data && void 0 !== c.data.title) return c.data.title;\n      var d = b.st.image.titleSrc;\n      if (d) {\n        if (a.isFunction(d)) return d.call(b, c);\n        if (c.el) return c.el.attr(d) || '';\n      }\n      return '';\n    };\n  a.magnificPopup.registerModule('image', {\n    options: {\n      markup:\n        '<div class=\"mfp-figure\"><div class=\"mfp-close\"></div><figure><div class=\"mfp-img\"></div><figcaption><div class=\"mfp-bottom-bar\"><div class=\"mfp-title\"></div><div class=\"mfp-counter\"></div></div></figcaption></figure></div>',\n      cursor: 'mfp-zoom-out-cur',\n      titleSrc: 'title',\n      verticalFit: !0,\n      tError: '<a href=\"%url%\">The image</a> could not be loaded.',\n    },\n    proto: {\n      initImage: function() {\n        var c = b.st.image,\n          d = '.image';\n        b.types.push('image'),\n          w(m + d, function() {\n            'image' === b.currItem.type && c.cursor && a(document.body).addClass(c.cursor);\n          }),\n          w(h + d, function() {\n            c.cursor && a(document.body).removeClass(c.cursor), v.off('resize' + p);\n          }),\n          w('Resize' + d, b.resizeImage),\n          b.isLowIE && w('AfterChange', b.resizeImage);\n      },\n      resizeImage: function() {\n        var a = b.currItem;\n        if (a && a.img && b.st.image.verticalFit) {\n          var c = 0;\n          b.isLowIE &&\n            (c =\n              parseInt(a.img.css('padding-top'), 10) + parseInt(a.img.css('padding-bottom'), 10)),\n            a.img.css('max-height', b.wH - c);\n        }\n      },\n      _onImageHasSize: function(a) {\n        a.img &&\n          ((a.hasSize = !0),\n          L && clearInterval(L),\n          (a.isCheckingImgSize = !1),\n          y('ImageHasSize', a),\n          a.imgHidden && (b.content && b.content.removeClass('mfp-loading'), (a.imgHidden = !1)));\n      },\n      findImageSize: function(a) {\n        var c = 0,\n          d = a.img[0],\n          e = function(f) {\n            L && clearInterval(L),\n              (L = setInterval(function() {\n                return d.naturalWidth > 0\n                  ? void b._onImageHasSize(a)\n                  : (c > 200 && clearInterval(L),\n                    c++,\n                    void (3 === c ? e(10) : 40 === c ? e(50) : 100 === c && e(500)));\n              }, f));\n          };\n        e(1);\n      },\n      getImage: function(c, d) {\n        var e = 0,\n          f = function() {\n            c &&\n              (c.img[0].complete\n                ? (c.img.off('.mfploader'),\n                  c === b.currItem && (b._onImageHasSize(c), b.updateStatus('ready')),\n                  (c.hasSize = !0),\n                  (c.loaded = !0),\n                  y('ImageLoadComplete'))\n                : (e++, 200 > e ? setTimeout(f, 100) : g()));\n          },\n          g = function() {\n            c &&\n              (c.img.off('.mfploader'),\n              c === b.currItem &&\n                (b._onImageHasSize(c), b.updateStatus('error', h.tError.replace('%url%', c.src))),\n              (c.hasSize = !0),\n              (c.loaded = !0),\n              (c.loadError = !0));\n          },\n          h = b.st.image,\n          i = d.find('.mfp-img');\n        if (i.length) {\n          var j = document.createElement('img');\n          (j.className = 'mfp-img'),\n            c.el && c.el.find('img').length && (j.alt = c.el.find('img').attr('alt')),\n            (c.img = a(j)\n              .on('load.mfploader', f)\n              .on('error.mfploader', g)),\n            (j.src = c.src),\n            i.is('img') && (c.img = c.img.clone()),\n            (j = c.img[0]),\n            j.naturalWidth > 0 ? (c.hasSize = !0) : j.width || (c.hasSize = !1);\n        }\n        return (\n          b._parseMarkup(d, { title: M(c), img_replaceWith: c.img }, c),\n          b.resizeImage(),\n          c.hasSize\n            ? (L && clearInterval(L),\n              c.loadError\n                ? (d.addClass('mfp-loading'),\n                  b.updateStatus('error', h.tError.replace('%url%', c.src)))\n                : (d.removeClass('mfp-loading'), b.updateStatus('ready')),\n              d)\n            : (b.updateStatus('loading'),\n              (c.loading = !0),\n              c.hasSize || ((c.imgHidden = !0), d.addClass('mfp-loading'), b.findImageSize(c)),\n              d)\n        );\n      },\n    },\n  });\n  var N,\n    O = function() {\n      return void 0 === N && (N = void 0 !== document.createElement('p').style.MozTransform), N;\n    };\n  a.magnificPopup.registerModule('zoom', {\n    options: {\n      enabled: !1,\n      easing: 'ease-in-out',\n      duration: 300,\n      opener: function(a) {\n        return a.is('img') ? a : a.find('img');\n      },\n    },\n    proto: {\n      initZoom: function() {\n        var a,\n          c = b.st.zoom,\n          d = '.zoom';\n        if (c.enabled && b.supportsTransition) {\n          var e,\n            f,\n            g = c.duration,\n            j = function(a) {\n              var b = a\n                  .clone()\n                  .removeAttr('style')\n                  .removeAttr('class')\n                  .addClass('mfp-animated-image'),\n                d = 'all ' + c.duration / 1e3 + 's ' + c.easing,\n                e = {\n                  position: 'fixed',\n                  zIndex: 9999,\n                  left: 0,\n                  top: 0,\n                  '-webkit-backface-visibility': 'hidden',\n                },\n                f = 'transition';\n              return (e['-webkit-' + f] = e['-moz-' + f] = e['-o-' + f] = e[f] = d), b.css(e), b;\n            },\n            k = function() {\n              b.content.css('visibility', 'visible');\n            };\n          w('BuildControls' + d, function() {\n            if (b._allowZoom()) {\n              if (\n                (clearTimeout(e),\n                b.content.css('visibility', 'hidden'),\n                (a = b._getItemToZoom()),\n                !a)\n              )\n                return void k();\n              (f = j(a)),\n                f.css(b._getOffset()),\n                b.wrap.append(f),\n                (e = setTimeout(function() {\n                  f.css(b._getOffset(!0)),\n                    (e = setTimeout(function() {\n                      k(),\n                        setTimeout(function() {\n                          f.remove(), (a = f = null), y('ZoomAnimationEnded');\n                        }, 16);\n                    }, g));\n                }, 16));\n            }\n          }),\n            w(i + d, function() {\n              if (b._allowZoom()) {\n                if ((clearTimeout(e), (b.st.removalDelay = g), !a)) {\n                  if (((a = b._getItemToZoom()), !a)) return;\n                  f = j(a);\n                }\n                f.css(b._getOffset(!0)),\n                  b.wrap.append(f),\n                  b.content.css('visibility', 'hidden'),\n                  setTimeout(function() {\n                    f.css(b._getOffset());\n                  }, 16);\n              }\n            }),\n            w(h + d, function() {\n              b._allowZoom() && (k(), f && f.remove(), (a = null));\n            });\n        }\n      },\n      _allowZoom: function() {\n        return 'image' === b.currItem.type;\n      },\n      _getItemToZoom: function() {\n        return b.currItem.hasSize ? b.currItem.img : !1;\n      },\n      _getOffset: function(c) {\n        var d;\n        d = c ? b.currItem.img : b.st.zoom.opener(b.currItem.el || b.currItem);\n        var e = d.offset(),\n          f = parseInt(d.css('padding-top'), 10),\n          g = parseInt(d.css('padding-bottom'), 10);\n        e.top -= a(window).scrollTop() - f;\n        var h = { width: d.width(), height: (u ? d.innerHeight() : d[0].offsetHeight) - g - f };\n        return (\n          O()\n            ? (h['-moz-transform'] = h.transform = 'translate(' + e.left + 'px,' + e.top + 'px)')\n            : ((h.left = e.left), (h.top = e.top)),\n          h\n        );\n      },\n    },\n  });\n  var P = 'iframe',\n    Q = '//about:blank',\n    R = function(a) {\n      if (b.currTemplate[P]) {\n        var c = b.currTemplate[P].find('iframe');\n        c.length && (a || (c[0].src = Q), b.isIE8 && c.css('display', a ? 'block' : 'none'));\n      }\n    };\n  a.magnificPopup.registerModule(P, {\n    options: {\n      markup:\n        '<div class=\"mfp-iframe-scaler\"><div class=\"mfp-close\"></div><iframe class=\"mfp-iframe\" src=\"//about:blank\" frameborder=\"0\" allowfullscreen></iframe></div>',\n      srcAction: 'iframe_src',\n      patterns: {\n        youtube: {\n          index: 'youtube.com',\n          id: 'v=',\n          src: 'https://www.youtube.com/embed/%id%?autoplay=1',\n        },\n        vimeo: {\n          index: 'vimeo.com/',\n          id: '/',\n          src: 'https://player.vimeo.com/video/%id%?autoplay=1',\n        },\n        gmaps: { index: '//maps.google.', src: '%id%&output=embed' },\n      },\n    },\n    proto: {\n      initIframe: function() {\n        b.types.push(P),\n          w('BeforeChange', function(a, b, c) {\n            b !== c && (b === P ? R() : c === P && R(!0));\n          }),\n          w(h + '.' + P, function() {\n            R();\n          });\n      },\n      getIframe: function(c, d) {\n        var e = c.src,\n          f = b.st.iframe;\n        a.each(f.patterns, function() {\n          return e.indexOf(this.index) > -1\n            ? (this.id &&\n                (e =\n                  'string' == typeof this.id\n                    ? e.substr(e.lastIndexOf(this.id) + this.id.length, e.length)\n                    : this.id.call(this, e)),\n              (e = this.src.replace('%id%', e)),\n              !1)\n            : void 0;\n        });\n        var g = {};\n        return (\n          f.srcAction && (g[f.srcAction] = e), b._parseMarkup(d, g, c), b.updateStatus('ready'), d\n        );\n      },\n    },\n  });\n  var S = function(a) {\n      var c = b.items.length;\n      return a > c - 1 ? a - c : 0 > a ? c + a : a;\n    },\n    T = function(a, b, c) {\n      return a.replace(/%curr%/gi, b + 1).replace(/%total%/gi, c);\n    };\n  a.magnificPopup.registerModule('gallery', {\n    options: {\n      enabled: !1,\n      arrowMarkup:\n        '<button title=\"%title%\" type=\"button\" class=\"mfp-arrow mfp-arrow-%dir%\"></button>',\n      preload: [0, 2],\n      navigateByImgClick: !0,\n      arrows: !0,\n      tPrev: 'Previous (Left arrow key)',\n      tNext: 'Next (Right arrow key)',\n      tCounter: '%curr% of %total%',\n    },\n    proto: {\n      initGallery: function() {\n        var c = b.st.gallery,\n          e = '.mfp-gallery';\n        return (\n          (b.direction = !0),\n          c && c.enabled\n            ? ((f += ' mfp-gallery'),\n              w(m + e, function() {\n                c.navigateByImgClick &&\n                  b.wrap.on('click' + e, '.mfp-img', function() {\n                    return b.items.length > 1 ? (b.next(), !1) : void 0;\n                  }),\n                  d.on('keydown' + e, function(a) {\n                    37 === a.keyCode ? b.prev() : 39 === a.keyCode && b.next();\n                  });\n              }),\n              w('UpdateStatus' + e, function(a, c) {\n                c.text && (c.text = T(c.text, b.currItem.index, b.items.length));\n              }),\n              w(l + e, function(a, d, e, f) {\n                var g = b.items.length;\n                e.counter = g > 1 ? T(c.tCounter, f.index, g) : '';\n              }),\n              w('BuildControls' + e, function() {\n                if (b.items.length > 1 && c.arrows && !b.arrowLeft) {\n                  var d = c.arrowMarkup,\n                    e = (b.arrowLeft = a(\n                      d.replace(/%title%/gi, c.tPrev).replace(/%dir%/gi, 'left'),\n                    ).addClass(s)),\n                    f = (b.arrowRight = a(\n                      d.replace(/%title%/gi, c.tNext).replace(/%dir%/gi, 'right'),\n                    ).addClass(s));\n                  e.click(function() {\n                    b.prev();\n                  }),\n                    f.click(function() {\n                      b.next();\n                    }),\n                    b.container.append(e.add(f));\n                }\n              }),\n              w(n + e, function() {\n                b._preloadTimeout && clearTimeout(b._preloadTimeout),\n                  (b._preloadTimeout = setTimeout(function() {\n                    b.preloadNearbyImages(), (b._preloadTimeout = null);\n                  }, 16));\n              }),\n              void w(h + e, function() {\n                d.off(e), b.wrap.off('click' + e), (b.arrowRight = b.arrowLeft = null);\n              }))\n            : !1\n        );\n      },\n      next: function() {\n        (b.direction = !0), (b.index = S(b.index + 1)), b.updateItemHTML();\n      },\n      prev: function() {\n        (b.direction = !1), (b.index = S(b.index - 1)), b.updateItemHTML();\n      },\n      goTo: function(a) {\n        (b.direction = a >= b.index), (b.index = a), b.updateItemHTML();\n      },\n      preloadNearbyImages: function() {\n        var a,\n          c = b.st.gallery.preload,\n          d = Math.min(c[0], b.items.length),\n          e = Math.min(c[1], b.items.length);\n        for (a = 1; a <= (b.direction ? e : d); a++) b._preloadItem(b.index + a);\n        for (a = 1; a <= (b.direction ? d : e); a++) b._preloadItem(b.index - a);\n      },\n      _preloadItem: function(c) {\n        if (((c = S(c)), !b.items[c].preloaded)) {\n          var d = b.items[c];\n          d.parsed || (d = b.parseEl(c)),\n            y('LazyLoad', d),\n            'image' === d.type &&\n              (d.img = a('<img class=\"mfp-img\" />')\n                .on('load.mfploader', function() {\n                  d.hasSize = !0;\n                })\n                .on('error.mfploader', function() {\n                  (d.hasSize = !0), (d.loadError = !0), y('LazyLoadError', d);\n                })\n                .attr('src', d.src)),\n            (d.preloaded = !0);\n        }\n      },\n    },\n  });\n  var U = 'retina';\n  a.magnificPopup.registerModule(U, {\n    options: {\n      replaceSrc: function(a) {\n        return a.src.replace(/\\.\\w+$/, function(a) {\n          return '@2x' + a;\n        });\n      },\n      ratio: 1,\n    },\n    proto: {\n      initRetina: function() {\n        if (window.devicePixelRatio > 1) {\n          var a = b.st.retina,\n            c = a.ratio;\n          (c = isNaN(c) ? c() : c),\n            c > 1 &&\n              (w('ImageHasSize.' + U, function(a, b) {\n                b.img.css({ 'max-width': b.img[0].naturalWidth / c, width: '100%' });\n              }),\n              w('ElementParse.' + U, function(b, d) {\n                d.src = a.replaceSrc(d, c);\n              }));\n        }\n      },\n    },\n  }),\n    A();\n});\n\n/*------------------------------------------------------------------*/\n/*\t02) Popper\n/*------------------------------------------------------------------*/\n\n/*\n Copyright (C) Federico Zivolo 2019\n Distributed under the MIT License (license terms are at http://opensource.org/licenses/MIT).\n */ (function(\n  e,\n  t,\n) {\n  'object' == typeof exports && 'undefined' != typeof module\n    ? (module.exports = t())\n    : 'function' == typeof define && define.amd\n    ? define(t)\n    : (e.Popper = t());\n})(this, function() {\n  'use strict';\n  function e(e) {\n    return e && '[object Function]' === {}.toString.call(e);\n  }\n  function t(e, t) {\n    if (1 !== e.nodeType) return [];\n    var o = e.ownerDocument.defaultView,\n      n = o.getComputedStyle(e, null);\n    return t ? n[t] : n;\n  }\n  function o(e) {\n    return 'HTML' === e.nodeName ? e : e.parentNode || e.host;\n  }\n  function n(e) {\n    if (!e) return document.body;\n    switch (e.nodeName) {\n      case 'HTML':\n      case 'BODY':\n        return e.ownerDocument.body;\n      case '#document':\n        return e.body;\n    }\n    var i = t(e),\n      r = i.overflow,\n      p = i.overflowX,\n      s = i.overflowY;\n    return /(auto|scroll|overlay)/.test(r + s + p) ? e : n(o(e));\n  }\n  function r(e) {\n    return 11 === e ? pe : 10 === e ? se : pe || se;\n  }\n  function p(e) {\n    if (!e) return document.documentElement;\n    for (\n      var o = r(10) ? document.body : null, n = e.offsetParent || null;\n      n === o && e.nextElementSibling;\n\n    )\n      n = (e = e.nextElementSibling).offsetParent;\n    var i = n && n.nodeName;\n    return i && 'BODY' !== i && 'HTML' !== i\n      ? -1 !== ['TH', 'TD', 'TABLE'].indexOf(n.nodeName) && 'static' === t(n, 'position')\n        ? p(n)\n        : n\n      : e\n      ? e.ownerDocument.documentElement\n      : document.documentElement;\n  }\n  function s(e) {\n    var t = e.nodeName;\n    return 'BODY' !== t && ('HTML' === t || p(e.firstElementChild) === e);\n  }\n  function d(e) {\n    return null === e.parentNode ? e : d(e.parentNode);\n  }\n  function a(e, t) {\n    if (!e || !e.nodeType || !t || !t.nodeType) return document.documentElement;\n    var o = e.compareDocumentPosition(t) & Node.DOCUMENT_POSITION_FOLLOWING,\n      n = o ? e : t,\n      i = o ? t : e,\n      r = document.createRange();\n    r.setStart(n, 0), r.setEnd(i, 0);\n    var l = r.commonAncestorContainer;\n    if ((e !== l && t !== l) || n.contains(i)) return s(l) ? l : p(l);\n    var f = d(e);\n    return f.host ? a(f.host, t) : a(e, d(t).host);\n  }\n  function l(e) {\n    var t = 1 < arguments.length && void 0 !== arguments[1] ? arguments[1] : 'top',\n      o = 'top' === t ? 'scrollTop' : 'scrollLeft',\n      n = e.nodeName;\n    if ('BODY' === n || 'HTML' === n) {\n      var i = e.ownerDocument.documentElement,\n        r = e.ownerDocument.scrollingElement || i;\n      return r[o];\n    }\n    return e[o];\n  }\n  function f(e, t) {\n    var o = 2 < arguments.length && void 0 !== arguments[2] && arguments[2],\n      n = l(t, 'top'),\n      i = l(t, 'left'),\n      r = o ? -1 : 1;\n    return (e.top += n * r), (e.bottom += n * r), (e.left += i * r), (e.right += i * r), e;\n  }\n  function m(e, t) {\n    var o = 'x' === t ? 'Left' : 'Top',\n      n = 'Left' == o ? 'Right' : 'Bottom';\n    return parseFloat(e['border' + o + 'Width'], 10) + parseFloat(e['border' + n + 'Width'], 10);\n  }\n  function h(e, t, o, n) {\n    return ee(\n      t['offset' + e],\n      t['scroll' + e],\n      o['client' + e],\n      o['offset' + e],\n      o['scroll' + e],\n      r(10)\n        ? parseInt(o['offset' + e]) +\n            parseInt(n['margin' + ('Height' === e ? 'Top' : 'Left')]) +\n            parseInt(n['margin' + ('Height' === e ? 'Bottom' : 'Right')])\n        : 0,\n    );\n  }\n  function c(e) {\n    var t = e.body,\n      o = e.documentElement,\n      n = r(10) && getComputedStyle(o);\n    return { height: h('Height', t, o, n), width: h('Width', t, o, n) };\n  }\n  function g(e) {\n    return fe({}, e, { right: e.left + e.width, bottom: e.top + e.height });\n  }\n  function u(e) {\n    var o = {};\n    try {\n      if (r(10)) {\n        o = e.getBoundingClientRect();\n        var n = l(e, 'top'),\n          i = l(e, 'left');\n        (o.top += n), (o.left += i), (o.bottom += n), (o.right += i);\n      } else o = e.getBoundingClientRect();\n    } catch (t) {}\n    var p = { left: o.left, top: o.top, width: o.right - o.left, height: o.bottom - o.top },\n      s = 'HTML' === e.nodeName ? c(e.ownerDocument) : {},\n      d = s.width || e.clientWidth || p.right - p.left,\n      a = s.height || e.clientHeight || p.bottom - p.top,\n      f = e.offsetWidth - d,\n      h = e.offsetHeight - a;\n    if (f || h) {\n      var u = t(e);\n      (f -= m(u, 'x')), (h -= m(u, 'y')), (p.width -= f), (p.height -= h);\n    }\n    return g(p);\n  }\n  function b(e, o) {\n    var i = 2 < arguments.length && void 0 !== arguments[2] && arguments[2],\n      p = r(10),\n      s = 'HTML' === o.nodeName,\n      d = u(e),\n      a = u(o),\n      l = n(e),\n      m = t(o),\n      h = parseFloat(m.borderTopWidth, 10),\n      c = parseFloat(m.borderLeftWidth, 10);\n    i && s && ((a.top = ee(a.top, 0)), (a.left = ee(a.left, 0)));\n    var b = g({\n      top: d.top - a.top - h,\n      left: d.left - a.left - c,\n      width: d.width,\n      height: d.height,\n    });\n    if (((b.marginTop = 0), (b.marginLeft = 0), !p && s)) {\n      var w = parseFloat(m.marginTop, 10),\n        y = parseFloat(m.marginLeft, 10);\n      (b.top -= h - w),\n        (b.bottom -= h - w),\n        (b.left -= c - y),\n        (b.right -= c - y),\n        (b.marginTop = w),\n        (b.marginLeft = y);\n    }\n    return (p && !i ? o.contains(l) : o === l && 'BODY' !== l.nodeName) && (b = f(b, o)), b;\n  }\n  function w(e) {\n    var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1],\n      o = e.ownerDocument.documentElement,\n      n = b(e, o),\n      i = ee(o.clientWidth, window.innerWidth || 0),\n      r = ee(o.clientHeight, window.innerHeight || 0),\n      p = t ? 0 : l(o),\n      s = t ? 0 : l(o, 'left'),\n      d = { top: p - n.top + n.marginTop, left: s - n.left + n.marginLeft, width: i, height: r };\n    return g(d);\n  }\n  function y(e) {\n    var n = e.nodeName;\n    if ('BODY' === n || 'HTML' === n) return !1;\n    if ('fixed' === t(e, 'position')) return !0;\n    var i = o(e);\n    return !!i && y(i);\n  }\n  function E(e) {\n    if (!e || !e.parentElement || r()) return document.documentElement;\n    for (var o = e.parentElement; o && 'none' === t(o, 'transform'); ) o = o.parentElement;\n    return o || document.documentElement;\n  }\n  function v(e, t, i, r) {\n    var p = 4 < arguments.length && void 0 !== arguments[4] && arguments[4],\n      s = { top: 0, left: 0 },\n      d = p ? E(e) : a(e, t);\n    if ('viewport' === r) s = w(d, p);\n    else {\n      var l;\n      'scrollParent' === r\n        ? ((l = n(o(t))), 'BODY' === l.nodeName && (l = e.ownerDocument.documentElement))\n        : 'window' === r\n        ? (l = e.ownerDocument.documentElement)\n        : (l = r);\n      var f = b(l, d, p);\n      if ('HTML' === l.nodeName && !y(d)) {\n        var m = c(e.ownerDocument),\n          h = m.height,\n          g = m.width;\n        (s.top += f.top - f.marginTop),\n          (s.bottom = h + f.top),\n          (s.left += f.left - f.marginLeft),\n          (s.right = g + f.left);\n      } else s = f;\n    }\n    i = i || 0;\n    var u = 'number' == typeof i;\n    return (\n      (s.left += u ? i : i.left || 0),\n      (s.top += u ? i : i.top || 0),\n      (s.right -= u ? i : i.right || 0),\n      (s.bottom -= u ? i : i.bottom || 0),\n      s\n    );\n  }\n  function x(e) {\n    var t = e.width,\n      o = e.height;\n    return t * o;\n  }\n  function O(e, t, o, n, i) {\n    var r = 5 < arguments.length && void 0 !== arguments[5] ? arguments[5] : 0;\n    if (-1 === e.indexOf('auto')) return e;\n    var p = v(o, n, r, i),\n      s = {\n        top: { width: p.width, height: t.top - p.top },\n        right: { width: p.right - t.right, height: p.height },\n        bottom: { width: p.width, height: p.bottom - t.bottom },\n        left: { width: t.left - p.left, height: p.height },\n      },\n      d = Object.keys(s)\n        .map(function(e) {\n          return fe({ key: e }, s[e], { area: x(s[e]) });\n        })\n        .sort(function(e, t) {\n          return t.area - e.area;\n        }),\n      a = d.filter(function(e) {\n        var t = e.width,\n          n = e.height;\n        return t >= o.clientWidth && n >= o.clientHeight;\n      }),\n      l = 0 < a.length ? a[0].key : d[0].key,\n      f = e.split('-')[1];\n    return l + (f ? '-' + f : '');\n  }\n  function L(e, t, o) {\n    var n = 3 < arguments.length && void 0 !== arguments[3] ? arguments[3] : null,\n      i = n ? E(t) : a(t, o);\n    return b(o, i, n);\n  }\n  function S(e) {\n    var t = e.ownerDocument.defaultView,\n      o = t.getComputedStyle(e),\n      n = parseFloat(o.marginTop || 0) + parseFloat(o.marginBottom || 0),\n      i = parseFloat(o.marginLeft || 0) + parseFloat(o.marginRight || 0),\n      r = { width: e.offsetWidth + i, height: e.offsetHeight + n };\n    return r;\n  }\n  function T(e) {\n    var t = { left: 'right', right: 'left', bottom: 'top', top: 'bottom' };\n    return e.replace(/left|right|bottom|top/g, function(e) {\n      return t[e];\n    });\n  }\n  function D(e, t, o) {\n    o = o.split('-')[0];\n    var n = S(e),\n      i = { width: n.width, height: n.height },\n      r = -1 !== ['right', 'left'].indexOf(o),\n      p = r ? 'top' : 'left',\n      s = r ? 'left' : 'top',\n      d = r ? 'height' : 'width',\n      a = r ? 'width' : 'height';\n    return (i[p] = t[p] + t[d] / 2 - n[d] / 2), (i[s] = o === s ? t[s] - n[a] : t[T(s)]), i;\n  }\n  function C(e, t) {\n    return Array.prototype.find ? e.find(t) : e.filter(t)[0];\n  }\n  function N(e, t, o) {\n    if (Array.prototype.findIndex)\n      return e.findIndex(function(e) {\n        return e[t] === o;\n      });\n    var n = C(e, function(e) {\n      return e[t] === o;\n    });\n    return e.indexOf(n);\n  }\n  function P(t, o, n) {\n    var i = void 0 === n ? t : t.slice(0, N(t, 'name', n));\n    return (\n      i.forEach(function(t) {\n        t['function'] && console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n        var n = t['function'] || t.fn;\n        t.enabled &&\n          e(n) &&\n          ((o.offsets.popper = g(o.offsets.popper)),\n          (o.offsets.reference = g(o.offsets.reference)),\n          (o = n(o, t)));\n      }),\n      o\n    );\n  }\n  function k() {\n    if (!this.state.isDestroyed) {\n      var e = {\n        instance: this,\n        styles: {},\n        arrowStyles: {},\n        attributes: {},\n        flipped: !1,\n        offsets: {},\n      };\n      (e.offsets.reference = L(\n        this.state,\n        this.popper,\n        this.reference,\n        this.options.positionFixed,\n      )),\n        (e.placement = O(\n          this.options.placement,\n          e.offsets.reference,\n          this.popper,\n          this.reference,\n          this.options.modifiers.flip.boundariesElement,\n          this.options.modifiers.flip.padding,\n        )),\n        (e.originalPlacement = e.placement),\n        (e.positionFixed = this.options.positionFixed),\n        (e.offsets.popper = D(this.popper, e.offsets.reference, e.placement)),\n        (e.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'),\n        (e = P(this.modifiers, e)),\n        this.state.isCreated\n          ? this.options.onUpdate(e)\n          : ((this.state.isCreated = !0), this.options.onCreate(e));\n    }\n  }\n  function W(e, t) {\n    return e.some(function(e) {\n      var o = e.name,\n        n = e.enabled;\n      return n && o === t;\n    });\n  }\n  function H(e) {\n    for (\n      var t = [!1, 'ms', 'Webkit', 'Moz', 'O'], o = e.charAt(0).toUpperCase() + e.slice(1), n = 0;\n      n < t.length;\n      n++\n    ) {\n      var i = t[n],\n        r = i ? '' + i + o : e;\n      if ('undefined' != typeof document.body.style[r]) return r;\n    }\n    return null;\n  }\n  function B() {\n    return (\n      (this.state.isDestroyed = !0),\n      W(this.modifiers, 'applyStyle') &&\n        (this.popper.removeAttribute('x-placement'),\n        (this.popper.style.position = ''),\n        (this.popper.style.top = ''),\n        (this.popper.style.left = ''),\n        (this.popper.style.right = ''),\n        (this.popper.style.bottom = ''),\n        (this.popper.style.willChange = ''),\n        (this.popper.style[H('transform')] = '')),\n      this.disableEventListeners(),\n      this.options.removeOnDestroy && this.popper.parentNode.removeChild(this.popper),\n      this\n    );\n  }\n  function A(e) {\n    var t = e.ownerDocument;\n    return t ? t.defaultView : window;\n  }\n  function M(e, t, o, i) {\n    var r = 'BODY' === e.nodeName,\n      p = r ? e.ownerDocument.defaultView : e;\n    p.addEventListener(t, o, { passive: !0 }), r || M(n(p.parentNode), t, o, i), i.push(p);\n  }\n  function F(e, t, o, i) {\n    (o.updateBound = i), A(e).addEventListener('resize', o.updateBound, { passive: !0 });\n    var r = n(e);\n    return (\n      M(r, 'scroll', o.updateBound, o.scrollParents),\n      (o.scrollElement = r),\n      (o.eventsEnabled = !0),\n      o\n    );\n  }\n  function I() {\n    this.state.eventsEnabled ||\n      (this.state = F(this.reference, this.options, this.state, this.scheduleUpdate));\n  }\n  function R(e, t) {\n    return (\n      A(e).removeEventListener('resize', t.updateBound),\n      t.scrollParents.forEach(function(e) {\n        e.removeEventListener('scroll', t.updateBound);\n      }),\n      (t.updateBound = null),\n      (t.scrollParents = []),\n      (t.scrollElement = null),\n      (t.eventsEnabled = !1),\n      t\n    );\n  }\n  function U() {\n    this.state.eventsEnabled &&\n      (cancelAnimationFrame(this.scheduleUpdate), (this.state = R(this.reference, this.state)));\n  }\n  function Y(e) {\n    return '' !== e && !isNaN(parseFloat(e)) && isFinite(e);\n  }\n  function j(e, t) {\n    Object.keys(t).forEach(function(o) {\n      var n = '';\n      -1 !== ['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(o) &&\n        Y(t[o]) &&\n        (n = 'px'),\n        (e.style[o] = t[o] + n);\n    });\n  }\n  function V(e, t) {\n    Object.keys(t).forEach(function(o) {\n      var n = t[o];\n      !1 === n ? e.removeAttribute(o) : e.setAttribute(o, t[o]);\n    });\n  }\n  function q(e, t) {\n    var o = e.offsets,\n      n = o.popper,\n      i = o.reference,\n      r = $,\n      p = function(e) {\n        return e;\n      },\n      s = r(i.width),\n      d = r(n.width),\n      a = -1 !== ['left', 'right'].indexOf(e.placement),\n      l = -1 !== e.placement.indexOf('-'),\n      f = t ? (a || l || s % 2 == d % 2 ? r : Z) : p,\n      m = t ? r : p;\n    return {\n      left: f(1 == s % 2 && 1 == d % 2 && !l && t ? n.left - 1 : n.left),\n      top: m(n.top),\n      bottom: m(n.bottom),\n      right: f(n.right),\n    };\n  }\n  function K(e, t, o) {\n    var n = C(e, function(e) {\n        var o = e.name;\n        return o === t;\n      }),\n      i =\n        !!n &&\n        e.some(function(e) {\n          return e.name === o && e.enabled && e.order < n.order;\n        });\n    if (!i) {\n      var r = '`' + t + '`';\n      console.warn(\n        '`' +\n          o +\n          '`' +\n          ' modifier is required by ' +\n          r +\n          ' modifier in order to work, be sure to include it before ' +\n          r +\n          '!',\n      );\n    }\n    return i;\n  }\n  function z(e) {\n    return 'end' === e ? 'start' : 'start' === e ? 'end' : e;\n  }\n  function G(e) {\n    var t = 1 < arguments.length && void 0 !== arguments[1] && arguments[1],\n      o = ce.indexOf(e),\n      n = ce.slice(o + 1).concat(ce.slice(0, o));\n    return t ? n.reverse() : n;\n  }\n  function _(e, t, o, n) {\n    var i = e.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/),\n      r = +i[1],\n      p = i[2];\n    if (!r) return e;\n    if (0 === p.indexOf('%')) {\n      var s;\n      switch (p) {\n        case '%p':\n          s = o;\n          break;\n        case '%':\n        case '%r':\n        default:\n          s = n;\n      }\n      var d = g(s);\n      return (d[t] / 100) * r;\n    }\n    if ('vh' === p || 'vw' === p) {\n      var a;\n      return (\n        (a =\n          'vh' === p\n            ? ee(document.documentElement.clientHeight, window.innerHeight || 0)\n            : ee(document.documentElement.clientWidth, window.innerWidth || 0)),\n        (a / 100) * r\n      );\n    }\n    return r;\n  }\n  function X(e, t, o, n) {\n    var i = [0, 0],\n      r = -1 !== ['right', 'left'].indexOf(n),\n      p = e.split(/(\\+|\\-)/).map(function(e) {\n        return e.trim();\n      }),\n      s = p.indexOf(\n        C(p, function(e) {\n          return -1 !== e.search(/,|\\s/);\n        }),\n      );\n    p[s] &&\n      -1 === p[s].indexOf(',') &&\n      console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n    var d = /\\s*,\\s*|\\s+/,\n      a =\n        -1 === s\n          ? [p]\n          : [p.slice(0, s).concat([p[s].split(d)[0]]), [p[s].split(d)[1]].concat(p.slice(s + 1))];\n    return (\n      (a = a.map(function(e, n) {\n        var i = (1 === n ? !r : r) ? 'height' : 'width',\n          p = !1;\n        return e\n          .reduce(function(e, t) {\n            return '' === e[e.length - 1] && -1 !== ['+', '-'].indexOf(t)\n              ? ((e[e.length - 1] = t), (p = !0), e)\n              : p\n              ? ((e[e.length - 1] += t), (p = !1), e)\n              : e.concat(t);\n          }, [])\n          .map(function(e) {\n            return _(e, i, t, o);\n          });\n      })),\n      a.forEach(function(e, t) {\n        e.forEach(function(o, n) {\n          Y(o) && (i[t] += o * ('-' === e[n - 1] ? -1 : 1));\n        });\n      }),\n      i\n    );\n  }\n  function J(e, t) {\n    var o,\n      n = t.offset,\n      i = e.placement,\n      r = e.offsets,\n      p = r.popper,\n      s = r.reference,\n      d = i.split('-')[0];\n    return (\n      (o = Y(+n) ? [+n, 0] : X(n, p, s, d)),\n      'left' === d\n        ? ((p.top += o[0]), (p.left -= o[1]))\n        : 'right' === d\n        ? ((p.top += o[0]), (p.left += o[1]))\n        : 'top' === d\n        ? ((p.left += o[0]), (p.top -= o[1]))\n        : 'bottom' === d && ((p.left += o[0]), (p.top += o[1])),\n      (e.popper = p),\n      e\n    );\n  }\n  for (\n    var Q = Math.min,\n      Z = Math.floor,\n      $ = Math.round,\n      ee = Math.max,\n      te = 'undefined' != typeof window && 'undefined' != typeof document,\n      oe = ['Edge', 'Trident', 'Firefox'],\n      ne = 0,\n      ie = 0;\n    ie < oe.length;\n    ie += 1\n  )\n    if (te && 0 <= navigator.userAgent.indexOf(oe[ie])) {\n      ne = 1;\n      break;\n    }\n  var i = te && window.Promise,\n    re = i\n      ? function(e) {\n          var t = !1;\n          return function() {\n            t ||\n              ((t = !0),\n              window.Promise.resolve().then(function() {\n                (t = !1), e();\n              }));\n          };\n        }\n      : function(e) {\n          var t = !1;\n          return function() {\n            t ||\n              ((t = !0),\n              setTimeout(function() {\n                (t = !1), e();\n              }, ne));\n          };\n        },\n    pe = te && !!(window.MSInputMethodContext && document.documentMode),\n    se = te && /MSIE 10/.test(navigator.userAgent),\n    de = function(e, t) {\n      if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function');\n    },\n    ae = (function() {\n      function e(e, t) {\n        for (var o, n = 0; n < t.length; n++)\n          (o = t[n]),\n            (o.enumerable = o.enumerable || !1),\n            (o.configurable = !0),\n            'value' in o && (o.writable = !0),\n            Object.defineProperty(e, o.key, o);\n      }\n      return function(t, o, n) {\n        return o && e(t.prototype, o), n && e(t, n), t;\n      };\n    })(),\n    le = function(e, t, o) {\n      return (\n        t in e\n          ? Object.defineProperty(e, t, {\n              value: o,\n              enumerable: !0,\n              configurable: !0,\n              writable: !0,\n            })\n          : (e[t] = o),\n        e\n      );\n    },\n    fe =\n      Object.assign ||\n      function(e) {\n        for (var t, o = 1; o < arguments.length; o++)\n          for (var n in ((t = arguments[o]), t))\n            Object.prototype.hasOwnProperty.call(t, n) && (e[n] = t[n]);\n        return e;\n      },\n    me = te && /Firefox/i.test(navigator.userAgent),\n    he = [\n      'auto-start',\n      'auto',\n      'auto-end',\n      'top-start',\n      'top',\n      'top-end',\n      'right-start',\n      'right',\n      'right-end',\n      'bottom-end',\n      'bottom',\n      'bottom-start',\n      'left-end',\n      'left',\n      'left-start',\n    ],\n    ce = he.slice(3),\n    ge = { FLIP: 'flip', CLOCKWISE: 'clockwise', COUNTERCLOCKWISE: 'counterclockwise' },\n    ue = (function() {\n      function t(o, n) {\n        var i = this,\n          r = 2 < arguments.length && void 0 !== arguments[2] ? arguments[2] : {};\n        de(this, t),\n          (this.scheduleUpdate = function() {\n            return requestAnimationFrame(i.update);\n          }),\n          (this.update = re(this.update.bind(this))),\n          (this.options = fe({}, t.Defaults, r)),\n          (this.state = { isDestroyed: !1, isCreated: !1, scrollParents: [] }),\n          (this.reference = o && o.jquery ? o[0] : o),\n          (this.popper = n && n.jquery ? n[0] : n),\n          (this.options.modifiers = {}),\n          Object.keys(fe({}, t.Defaults.modifiers, r.modifiers)).forEach(function(e) {\n            i.options.modifiers[e] = fe(\n              {},\n              t.Defaults.modifiers[e] || {},\n              r.modifiers ? r.modifiers[e] : {},\n            );\n          }),\n          (this.modifiers = Object.keys(this.options.modifiers)\n            .map(function(e) {\n              return fe({ name: e }, i.options.modifiers[e]);\n            })\n            .sort(function(e, t) {\n              return e.order - t.order;\n            })),\n          this.modifiers.forEach(function(t) {\n            t.enabled && e(t.onLoad) && t.onLoad(i.reference, i.popper, i.options, t, i.state);\n          }),\n          this.update();\n        var p = this.options.eventsEnabled;\n        p && this.enableEventListeners(), (this.state.eventsEnabled = p);\n      }\n      return (\n        ae(t, [\n          {\n            key: 'update',\n            value: function() {\n              return k.call(this);\n            },\n          },\n          {\n            key: 'destroy',\n            value: function() {\n              return B.call(this);\n            },\n          },\n          {\n            key: 'enableEventListeners',\n            value: function() {\n              return I.call(this);\n            },\n          },\n          {\n            key: 'disableEventListeners',\n            value: function() {\n              return U.call(this);\n            },\n          },\n        ]),\n        t\n      );\n    })();\n  return (\n    (ue.Utils = ('undefined' == typeof window ? global : window).PopperUtils),\n    (ue.placements = he),\n    (ue.Defaults = {\n      placement: 'bottom',\n      positionFixed: !1,\n      eventsEnabled: !0,\n      removeOnDestroy: !1,\n      onCreate: function() {},\n      onUpdate: function() {},\n      modifiers: {\n        shift: {\n          order: 100,\n          enabled: !0,\n          fn: function(e) {\n            var t = e.placement,\n              o = t.split('-')[0],\n              n = t.split('-')[1];\n            if (n) {\n              var i = e.offsets,\n                r = i.reference,\n                p = i.popper,\n                s = -1 !== ['bottom', 'top'].indexOf(o),\n                d = s ? 'left' : 'top',\n                a = s ? 'width' : 'height',\n                l = { start: le({}, d, r[d]), end: le({}, d, r[d] + r[a] - p[a]) };\n              e.offsets.popper = fe({}, p, l[n]);\n            }\n            return e;\n          },\n        },\n        offset: { order: 200, enabled: !0, fn: J, offset: 0 },\n        preventOverflow: {\n          order: 300,\n          enabled: !0,\n          fn: function(e, t) {\n            var o = t.boundariesElement || p(e.instance.popper);\n            e.instance.reference === o && (o = p(o));\n            var n = H('transform'),\n              i = e.instance.popper.style,\n              r = i.top,\n              s = i.left,\n              d = i[n];\n            (i.top = ''), (i.left = ''), (i[n] = '');\n            var a = v(e.instance.popper, e.instance.reference, t.padding, o, e.positionFixed);\n            (i.top = r), (i.left = s), (i[n] = d), (t.boundaries = a);\n            var l = t.priority,\n              f = e.offsets.popper,\n              m = {\n                primary: function(e) {\n                  var o = f[e];\n                  return (\n                    f[e] < a[e] && !t.escapeWithReference && (o = ee(f[e], a[e])), le({}, e, o)\n                  );\n                },\n                secondary: function(e) {\n                  var o = 'right' === e ? 'left' : 'top',\n                    n = f[o];\n                  return (\n                    f[e] > a[e] &&\n                      !t.escapeWithReference &&\n                      (n = Q(f[o], a[e] - ('right' === e ? f.width : f.height))),\n                    le({}, o, n)\n                  );\n                },\n              };\n            return (\n              l.forEach(function(e) {\n                var t = -1 === ['left', 'top'].indexOf(e) ? 'secondary' : 'primary';\n                f = fe({}, f, m[t](e));\n              }),\n              (e.offsets.popper = f),\n              e\n            );\n          },\n          priority: ['left', 'right', 'top', 'bottom'],\n          padding: 5,\n          boundariesElement: 'scrollParent',\n        },\n        keepTogether: {\n          order: 400,\n          enabled: !0,\n          fn: function(e) {\n            var t = e.offsets,\n              o = t.popper,\n              n = t.reference,\n              i = e.placement.split('-')[0],\n              r = Z,\n              p = -1 !== ['top', 'bottom'].indexOf(i),\n              s = p ? 'right' : 'bottom',\n              d = p ? 'left' : 'top',\n              a = p ? 'width' : 'height';\n            return (\n              o[s] < r(n[d]) && (e.offsets.popper[d] = r(n[d]) - o[a]),\n              o[d] > r(n[s]) && (e.offsets.popper[d] = r(n[s])),\n              e\n            );\n          },\n        },\n        arrow: {\n          order: 500,\n          enabled: !0,\n          fn: function(e, o) {\n            var n;\n            if (!K(e.instance.modifiers, 'arrow', 'keepTogether')) return e;\n            var i = o.element;\n            if ('string' == typeof i) {\n              if (((i = e.instance.popper.querySelector(i)), !i)) return e;\n            } else if (!e.instance.popper.contains(i))\n              return (\n                console.warn('WARNING: `arrow.element` must be child of its popper element!'), e\n              );\n            var r = e.placement.split('-')[0],\n              p = e.offsets,\n              s = p.popper,\n              d = p.reference,\n              a = -1 !== ['left', 'right'].indexOf(r),\n              l = a ? 'height' : 'width',\n              f = a ? 'Top' : 'Left',\n              m = f.toLowerCase(),\n              h = a ? 'left' : 'top',\n              c = a ? 'bottom' : 'right',\n              u = S(i)[l];\n            d[c] - u < s[m] && (e.offsets.popper[m] -= s[m] - (d[c] - u)),\n              d[m] + u > s[c] && (e.offsets.popper[m] += d[m] + u - s[c]),\n              (e.offsets.popper = g(e.offsets.popper));\n            var b = d[m] + d[l] / 2 - u / 2,\n              w = t(e.instance.popper),\n              y = parseFloat(w['margin' + f], 10),\n              E = parseFloat(w['border' + f + 'Width'], 10),\n              v = b - e.offsets.popper[m] - y - E;\n            return (\n              (v = ee(Q(s[l] - u, v), 0)),\n              (e.arrowElement = i),\n              (e.offsets.arrow = ((n = {}), le(n, m, $(v)), le(n, h, ''), n)),\n              e\n            );\n          },\n          element: '[x-arrow]',\n        },\n        flip: {\n          order: 600,\n          enabled: !0,\n          fn: function(e, t) {\n            if (W(e.instance.modifiers, 'inner')) return e;\n            if (e.flipped && e.placement === e.originalPlacement) return e;\n            var o = v(\n                e.instance.popper,\n                e.instance.reference,\n                t.padding,\n                t.boundariesElement,\n                e.positionFixed,\n              ),\n              n = e.placement.split('-')[0],\n              i = T(n),\n              r = e.placement.split('-')[1] || '',\n              p = [];\n            switch (t.behavior) {\n              case ge.FLIP:\n                p = [n, i];\n                break;\n              case ge.CLOCKWISE:\n                p = G(n);\n                break;\n              case ge.COUNTERCLOCKWISE:\n                p = G(n, !0);\n                break;\n              default:\n                p = t.behavior;\n            }\n            return (\n              p.forEach(function(s, d) {\n                if (n !== s || p.length === d + 1) return e;\n                (n = e.placement.split('-')[0]), (i = T(n));\n                var a = e.offsets.popper,\n                  l = e.offsets.reference,\n                  f = Z,\n                  m =\n                    ('left' === n && f(a.right) > f(l.left)) ||\n                    ('right' === n && f(a.left) < f(l.right)) ||\n                    ('top' === n && f(a.bottom) > f(l.top)) ||\n                    ('bottom' === n && f(a.top) < f(l.bottom)),\n                  h = f(a.left) < f(o.left),\n                  c = f(a.right) > f(o.right),\n                  g = f(a.top) < f(o.top),\n                  u = f(a.bottom) > f(o.bottom),\n                  b =\n                    ('left' === n && h) ||\n                    ('right' === n && c) ||\n                    ('top' === n && g) ||\n                    ('bottom' === n && u),\n                  w = -1 !== ['top', 'bottom'].indexOf(n),\n                  y =\n                    !!t.flipVariations &&\n                    ((w && 'start' === r && h) ||\n                      (w && 'end' === r && c) ||\n                      (!w && 'start' === r && g) ||\n                      (!w && 'end' === r && u));\n                (m || b || y) &&\n                  ((e.flipped = !0),\n                  (m || b) && (n = p[d + 1]),\n                  y && (r = z(r)),\n                  (e.placement = n + (r ? '-' + r : '')),\n                  (e.offsets.popper = fe(\n                    {},\n                    e.offsets.popper,\n                    D(e.instance.popper, e.offsets.reference, e.placement),\n                  )),\n                  (e = P(e.instance.modifiers, e, 'flip')));\n              }),\n              e\n            );\n          },\n          behavior: 'flip',\n          padding: 5,\n          boundariesElement: 'viewport',\n        },\n        inner: {\n          order: 700,\n          enabled: !1,\n          fn: function(e) {\n            var t = e.placement,\n              o = t.split('-')[0],\n              n = e.offsets,\n              i = n.popper,\n              r = n.reference,\n              p = -1 !== ['left', 'right'].indexOf(o),\n              s = -1 === ['top', 'left'].indexOf(o);\n            return (\n              (i[p ? 'left' : 'top'] = r[o] - (s ? i[p ? 'width' : 'height'] : 0)),\n              (e.placement = T(t)),\n              (e.offsets.popper = g(i)),\n              e\n            );\n          },\n        },\n        hide: {\n          order: 800,\n          enabled: !0,\n          fn: function(e) {\n            if (!K(e.instance.modifiers, 'hide', 'preventOverflow')) return e;\n            var t = e.offsets.reference,\n              o = C(e.instance.modifiers, function(e) {\n                return 'preventOverflow' === e.name;\n              }).boundaries;\n            if (t.bottom < o.top || t.left > o.right || t.top > o.bottom || t.right < o.left) {\n              if (!0 === e.hide) return e;\n              (e.hide = !0), (e.attributes['x-out-of-boundaries'] = '');\n            } else {\n              if (!1 === e.hide) return e;\n              (e.hide = !1), (e.attributes['x-out-of-boundaries'] = !1);\n            }\n            return e;\n          },\n        },\n        computeStyle: {\n          order: 850,\n          enabled: !0,\n          fn: function(e, t) {\n            var o = t.x,\n              n = t.y,\n              i = e.offsets.popper,\n              r = C(e.instance.modifiers, function(e) {\n                return 'applyStyle' === e.name;\n              }).gpuAcceleration;\n            void 0 !== r &&\n              console.warn(\n                'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!',\n              );\n            var s,\n              d,\n              a = void 0 === r ? t.gpuAcceleration : r,\n              l = p(e.instance.popper),\n              f = u(l),\n              m = { position: i.position },\n              h = q(e, 2 > window.devicePixelRatio || !me),\n              c = 'bottom' === o ? 'top' : 'bottom',\n              g = 'right' === n ? 'left' : 'right',\n              b = H('transform');\n            if (\n              ((d =\n                'bottom' == c\n                  ? 'HTML' === l.nodeName\n                    ? -l.clientHeight + h.bottom\n                    : -f.height + h.bottom\n                  : h.top),\n              (s =\n                'right' == g\n                  ? 'HTML' === l.nodeName\n                    ? -l.clientWidth + h.right\n                    : -f.width + h.right\n                  : h.left),\n              a && b)\n            )\n              (m[b] = 'translate3d(' + s + 'px, ' + d + 'px, 0)'),\n                (m[c] = 0),\n                (m[g] = 0),\n                (m.willChange = 'transform');\n            else {\n              var w = 'bottom' == c ? -1 : 1,\n                y = 'right' == g ? -1 : 1;\n              (m[c] = d * w), (m[g] = s * y), (m.willChange = c + ', ' + g);\n            }\n            var E = { 'x-placement': e.placement };\n            return (\n              (e.attributes = fe({}, E, e.attributes)),\n              (e.styles = fe({}, m, e.styles)),\n              (e.arrowStyles = fe({}, e.offsets.arrow, e.arrowStyles)),\n              e\n            );\n          },\n          gpuAcceleration: !0,\n          x: 'bottom',\n          y: 'right',\n        },\n        applyStyle: {\n          order: 900,\n          enabled: !0,\n          fn: function(e) {\n            return (\n              j(e.instance.popper, e.styles),\n              V(e.instance.popper, e.attributes),\n              e.arrowElement &&\n                Object.keys(e.arrowStyles).length &&\n                j(e.arrowElement, e.arrowStyles),\n              e\n            );\n          },\n          onLoad: function(e, t, o, n, i) {\n            var r = L(i, t, e, o.positionFixed),\n              p = O(\n                o.placement,\n                r,\n                t,\n                e,\n                o.modifiers.flip.boundariesElement,\n                o.modifiers.flip.padding,\n              );\n            return (\n              t.setAttribute('x-placement', p),\n              j(t, { position: o.positionFixed ? 'fixed' : 'absolute' }),\n              o\n            );\n          },\n          gpuAcceleration: void 0,\n        },\n      },\n    }),\n    ue\n  );\n});\n//# sourceMappingURL=popper.min.js.map\n\n/*------------------------------------------------------------------*/\n/*\t03) Bootstrap\n/*------------------------------------------------------------------*/\n\n/*!\n * Bootstrap v4.3.1 (https://getbootstrap.com/)\n * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n!(function(t, e) {\n  'object' == typeof exports && 'undefined' != typeof module\n    ? e(exports, require('jquery'), require('popper.js'))\n    : 'function' == typeof define && define.amd\n    ? define(['exports', 'jquery', 'popper.js'], e)\n    : e(((t = t || self).bootstrap = {}), t.jQuery, t.Popper);\n})(this, function(t, g, u) {\n  'use strict';\n  function i(t, e) {\n    for (var n = 0; n < e.length; n++) {\n      var i = e[n];\n      (i.enumerable = i.enumerable || !1),\n        (i.configurable = !0),\n        'value' in i && (i.writable = !0),\n        Object.defineProperty(t, i.key, i);\n    }\n  }\n  function s(t, e, n) {\n    return e && i(t.prototype, e), n && i(t, n), t;\n  }\n  function l(o) {\n    for (var t = 1; t < arguments.length; t++) {\n      var r = null != arguments[t] ? arguments[t] : {},\n        e = Object.keys(r);\n      'function' == typeof Object.getOwnPropertySymbols &&\n        (e = e.concat(\n          Object.getOwnPropertySymbols(r).filter(function(t) {\n            return Object.getOwnPropertyDescriptor(r, t).enumerable;\n          }),\n        )),\n        e.forEach(function(t) {\n          var e, n, i;\n          (e = o),\n            (i = r[(n = t)]),\n            n in e\n              ? Object.defineProperty(e, n, {\n                  value: i,\n                  enumerable: !0,\n                  configurable: !0,\n                  writable: !0,\n                })\n              : (e[n] = i);\n        });\n    }\n    return o;\n  }\n  (g = g && g.hasOwnProperty('default') ? g.default : g),\n    (u = u && u.hasOwnProperty('default') ? u.default : u);\n  var e = 'transitionend';\n  function n(t) {\n    var e = this,\n      n = !1;\n    return (\n      g(this).one(_.TRANSITION_END, function() {\n        n = !0;\n      }),\n      setTimeout(function() {\n        n || _.triggerTransitionEnd(e);\n      }, t),\n      this\n    );\n  }\n  var _ = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function(t) {\n      for (; (t += ~~(1e6 * Math.random())), document.getElementById(t); );\n      return t;\n    },\n    getSelectorFromElement: function(t) {\n      var e = t.getAttribute('data-target');\n      if (!e || '#' === e) {\n        var n = t.getAttribute('href');\n        e = n && '#' !== n ? n.trim() : '';\n      }\n      try {\n        return document.querySelector(e) ? e : null;\n      } catch (t) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function(t) {\n      if (!t) return 0;\n      var e = g(t).css('transition-duration'),\n        n = g(t).css('transition-delay'),\n        i = parseFloat(e),\n        o = parseFloat(n);\n      return i || o\n        ? ((e = e.split(',')[0]), (n = n.split(',')[0]), 1e3 * (parseFloat(e) + parseFloat(n)))\n        : 0;\n    },\n    reflow: function(t) {\n      return t.offsetHeight;\n    },\n    triggerTransitionEnd: function(t) {\n      g(t).trigger(e);\n    },\n    supportsTransitionEnd: function() {\n      return Boolean(e);\n    },\n    isElement: function(t) {\n      return (t[0] || t).nodeType;\n    },\n    typeCheckConfig: function(t, e, n) {\n      for (var i in n)\n        if (Object.prototype.hasOwnProperty.call(n, i)) {\n          var o = n[i],\n            r = e[i],\n            s =\n              r && _.isElement(r)\n                ? 'element'\n                : ((a = r),\n                  {}.toString\n                    .call(a)\n                    .match(/\\s([a-z]+)/i)[1]\n                    .toLowerCase());\n          if (!new RegExp(o).test(s))\n            throw new Error(\n              t.toUpperCase() +\n                ': Option \"' +\n                i +\n                '\" provided type \"' +\n                s +\n                '\" but expected type \"' +\n                o +\n                '\".',\n            );\n        }\n      var a;\n    },\n    findShadowRoot: function(t) {\n      if (!document.documentElement.attachShadow) return null;\n      if ('function' != typeof t.getRootNode)\n        return t instanceof ShadowRoot ? t : t.parentNode ? _.findShadowRoot(t.parentNode) : null;\n      var e = t.getRootNode();\n      return e instanceof ShadowRoot ? e : null;\n    },\n  };\n  (g.fn.emulateTransitionEnd = n),\n    (g.event.special[_.TRANSITION_END] = {\n      bindType: e,\n      delegateType: e,\n      handle: function(t) {\n        if (g(t.target).is(this)) return t.handleObj.handler.apply(this, arguments);\n      },\n    });\n  var o = 'alert',\n    r = 'bs.alert',\n    a = '.' + r,\n    c = g.fn[o],\n    h = { CLOSE: 'close' + a, CLOSED: 'closed' + a, CLICK_DATA_API: 'click' + a + '.data-api' },\n    f = 'alert',\n    d = 'fade',\n    m = 'show',\n    p = (function() {\n      function i(t) {\n        this._element = t;\n      }\n      var t = i.prototype;\n      return (\n        (t.close = function(t) {\n          var e = this._element;\n          t && (e = this._getRootElement(t)),\n            this._triggerCloseEvent(e).isDefaultPrevented() || this._removeElement(e);\n        }),\n        (t.dispose = function() {\n          g.removeData(this._element, r), (this._element = null);\n        }),\n        (t._getRootElement = function(t) {\n          var e = _.getSelectorFromElement(t),\n            n = !1;\n          return e && (n = document.querySelector(e)), n || (n = g(t).closest('.' + f)[0]), n;\n        }),\n        (t._triggerCloseEvent = function(t) {\n          var e = g.Event(h.CLOSE);\n          return g(t).trigger(e), e;\n        }),\n        (t._removeElement = function(e) {\n          var n = this;\n          if ((g(e).removeClass(m), g(e).hasClass(d))) {\n            var t = _.getTransitionDurationFromElement(e);\n            g(e)\n              .one(_.TRANSITION_END, function(t) {\n                return n._destroyElement(e, t);\n              })\n              .emulateTransitionEnd(t);\n          } else this._destroyElement(e);\n        }),\n        (t._destroyElement = function(t) {\n          g(t)\n            .detach()\n            .trigger(h.CLOSED)\n            .remove();\n        }),\n        (i._jQueryInterface = function(n) {\n          return this.each(function() {\n            var t = g(this),\n              e = t.data(r);\n            e || ((e = new i(this)), t.data(r, e)), 'close' === n && e[n](this);\n          });\n        }),\n        (i._handleDismiss = function(e) {\n          return function(t) {\n            t && t.preventDefault(), e.close(this);\n          };\n        }),\n        s(i, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n        ]),\n        i\n      );\n    })();\n  g(document).on(h.CLICK_DATA_API, '[data-dismiss=\"alert\"]', p._handleDismiss(new p())),\n    (g.fn[o] = p._jQueryInterface),\n    (g.fn[o].Constructor = p),\n    (g.fn[o].noConflict = function() {\n      return (g.fn[o] = c), p._jQueryInterface;\n    });\n  var v = 'button',\n    y = 'bs.button',\n    E = '.' + y,\n    C = '.data-api',\n    T = g.fn[v],\n    S = 'active',\n    b = 'btn',\n    I = 'focus',\n    D = '[data-toggle^=\"button\"]',\n    w = '[data-toggle=\"buttons\"]',\n    A = 'input:not([type=\"hidden\"])',\n    N = '.active',\n    O = '.btn',\n    k = { CLICK_DATA_API: 'click' + E + C, FOCUS_BLUR_DATA_API: 'focus' + E + C + ' blur' + E + C },\n    P = (function() {\n      function n(t) {\n        this._element = t;\n      }\n      var t = n.prototype;\n      return (\n        (t.toggle = function() {\n          var t = !0,\n            e = !0,\n            n = g(this._element).closest(w)[0];\n          if (n) {\n            var i = this._element.querySelector(A);\n            if (i) {\n              if ('radio' === i.type)\n                if (i.checked && this._element.classList.contains(S)) t = !1;\n                else {\n                  var o = n.querySelector(N);\n                  o && g(o).removeClass(S);\n                }\n              if (t) {\n                if (\n                  i.hasAttribute('disabled') ||\n                  n.hasAttribute('disabled') ||\n                  i.classList.contains('disabled') ||\n                  n.classList.contains('disabled')\n                )\n                  return;\n                (i.checked = !this._element.classList.contains(S)), g(i).trigger('change');\n              }\n              i.focus(), (e = !1);\n            }\n          }\n          e && this._element.setAttribute('aria-pressed', !this._element.classList.contains(S)),\n            t && g(this._element).toggleClass(S);\n        }),\n        (t.dispose = function() {\n          g.removeData(this._element, y), (this._element = null);\n        }),\n        (n._jQueryInterface = function(e) {\n          return this.each(function() {\n            var t = g(this).data(y);\n            t || ((t = new n(this)), g(this).data(y, t)), 'toggle' === e && t[e]();\n          });\n        }),\n        s(n, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n        ]),\n        n\n      );\n    })();\n  g(document)\n    .on(k.CLICK_DATA_API, D, function(t) {\n      t.preventDefault();\n      var e = t.target;\n      g(e).hasClass(b) || (e = g(e).closest(O)), P._jQueryInterface.call(g(e), 'toggle');\n    })\n    .on(k.FOCUS_BLUR_DATA_API, D, function(t) {\n      var e = g(t.target).closest(O)[0];\n      g(e).toggleClass(I, /^focus(in)?$/.test(t.type));\n    }),\n    (g.fn[v] = P._jQueryInterface),\n    (g.fn[v].Constructor = P),\n    (g.fn[v].noConflict = function() {\n      return (g.fn[v] = T), P._jQueryInterface;\n    });\n  var L = 'carousel',\n    j = 'bs.carousel',\n    H = '.' + j,\n    R = '.data-api',\n    x = g.fn[L],\n    F = { interval: 5e3, keyboard: !0, slide: !1, pause: 'hover', wrap: !0, touch: !0 },\n    U = {\n      interval: '(number|boolean)',\n      keyboard: 'boolean',\n      slide: '(boolean|string)',\n      pause: '(string|boolean)',\n      wrap: 'boolean',\n      touch: 'boolean',\n    },\n    W = 'next',\n    q = 'prev',\n    M = 'left',\n    K = 'right',\n    Q = {\n      SLIDE: 'slide' + H,\n      SLID: 'slid' + H,\n      KEYDOWN: 'keydown' + H,\n      MOUSEENTER: 'mouseenter' + H,\n      MOUSELEAVE: 'mouseleave' + H,\n      TOUCHSTART: 'touchstart' + H,\n      TOUCHMOVE: 'touchmove' + H,\n      TOUCHEND: 'touchend' + H,\n      POINTERDOWN: 'pointerdown' + H,\n      POINTERUP: 'pointerup' + H,\n      DRAG_START: 'dragstart' + H,\n      LOAD_DATA_API: 'load' + H + R,\n      CLICK_DATA_API: 'click' + H + R,\n    },\n    B = 'carousel',\n    V = 'active',\n    Y = 'slide',\n    z = 'carousel-item-right',\n    X = 'carousel-item-left',\n    $ = 'carousel-item-next',\n    G = 'carousel-item-prev',\n    J = 'pointer-event',\n    Z = '.active',\n    tt = '.active.carousel-item',\n    et = '.carousel-item',\n    nt = '.carousel-item img',\n    it = '.carousel-item-next, .carousel-item-prev',\n    ot = '.carousel-indicators',\n    rt = '[data-slide], [data-slide-to]',\n    st = '[data-ride=\"carousel\"]',\n    at = { TOUCH: 'touch', PEN: 'pen' },\n    lt = (function() {\n      function r(t, e) {\n        (this._items = null),\n          (this._interval = null),\n          (this._activeElement = null),\n          (this._isPaused = !1),\n          (this._isSliding = !1),\n          (this.touchTimeout = null),\n          (this.touchStartX = 0),\n          (this.touchDeltaX = 0),\n          (this._config = this._getConfig(e)),\n          (this._element = t),\n          (this._indicatorsElement = this._element.querySelector(ot)),\n          (this._touchSupported =\n            'ontouchstart' in document.documentElement || 0 < navigator.maxTouchPoints),\n          (this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent)),\n          this._addEventListeners();\n      }\n      var t = r.prototype;\n      return (\n        (t.next = function() {\n          this._isSliding || this._slide(W);\n        }),\n        (t.nextWhenVisible = function() {\n          !document.hidden &&\n            g(this._element).is(':visible') &&\n            'hidden' !== g(this._element).css('visibility') &&\n            this.next();\n        }),\n        (t.prev = function() {\n          this._isSliding || this._slide(q);\n        }),\n        (t.pause = function(t) {\n          t || (this._isPaused = !0),\n            this._element.querySelector(it) &&\n              (_.triggerTransitionEnd(this._element), this.cycle(!0)),\n            clearInterval(this._interval),\n            (this._interval = null);\n        }),\n        (t.cycle = function(t) {\n          t || (this._isPaused = !1),\n            this._interval && (clearInterval(this._interval), (this._interval = null)),\n            this._config.interval &&\n              !this._isPaused &&\n              (this._interval = setInterval(\n                (document.visibilityState ? this.nextWhenVisible : this.next).bind(this),\n                this._config.interval,\n              ));\n        }),\n        (t.to = function(t) {\n          var e = this;\n          this._activeElement = this._element.querySelector(tt);\n          var n = this._getItemIndex(this._activeElement);\n          if (!(t > this._items.length - 1 || t < 0))\n            if (this._isSliding)\n              g(this._element).one(Q.SLID, function() {\n                return e.to(t);\n              });\n            else {\n              if (n === t) return this.pause(), void this.cycle();\n              var i = n < t ? W : q;\n              this._slide(i, this._items[t]);\n            }\n        }),\n        (t.dispose = function() {\n          g(this._element).off(H),\n            g.removeData(this._element, j),\n            (this._items = null),\n            (this._config = null),\n            (this._element = null),\n            (this._interval = null),\n            (this._isPaused = null),\n            (this._isSliding = null),\n            (this._activeElement = null),\n            (this._indicatorsElement = null);\n        }),\n        (t._getConfig = function(t) {\n          return (t = l({}, F, t)), _.typeCheckConfig(L, t, U), t;\n        }),\n        (t._handleSwipe = function() {\n          var t = Math.abs(this.touchDeltaX);\n          if (!(t <= 40)) {\n            var e = t / this.touchDeltaX;\n            0 < e && this.prev(), e < 0 && this.next();\n          }\n        }),\n        (t._addEventListeners = function() {\n          var e = this;\n          this._config.keyboard &&\n            g(this._element).on(Q.KEYDOWN, function(t) {\n              return e._keydown(t);\n            }),\n            'hover' === this._config.pause &&\n              g(this._element)\n                .on(Q.MOUSEENTER, function(t) {\n                  return e.pause(t);\n                })\n                .on(Q.MOUSELEAVE, function(t) {\n                  return e.cycle(t);\n                }),\n            this._config.touch && this._addTouchEventListeners();\n        }),\n        (t._addTouchEventListeners = function() {\n          var n = this;\n          if (this._touchSupported) {\n            var e = function(t) {\n                n._pointerEvent && at[t.originalEvent.pointerType.toUpperCase()]\n                  ? (n.touchStartX = t.originalEvent.clientX)\n                  : n._pointerEvent || (n.touchStartX = t.originalEvent.touches[0].clientX);\n              },\n              i = function(t) {\n                n._pointerEvent &&\n                  at[t.originalEvent.pointerType.toUpperCase()] &&\n                  (n.touchDeltaX = t.originalEvent.clientX - n.touchStartX),\n                  n._handleSwipe(),\n                  'hover' === n._config.pause &&\n                    (n.pause(),\n                    n.touchTimeout && clearTimeout(n.touchTimeout),\n                    (n.touchTimeout = setTimeout(function(t) {\n                      return n.cycle(t);\n                    }, 500 + n._config.interval)));\n              };\n            g(this._element.querySelectorAll(nt)).on(Q.DRAG_START, function(t) {\n              return t.preventDefault();\n            }),\n              this._pointerEvent\n                ? (g(this._element).on(Q.POINTERDOWN, function(t) {\n                    return e(t);\n                  }),\n                  g(this._element).on(Q.POINTERUP, function(t) {\n                    return i(t);\n                  }),\n                  this._element.classList.add(J))\n                : (g(this._element).on(Q.TOUCHSTART, function(t) {\n                    return e(t);\n                  }),\n                  g(this._element).on(Q.TOUCHMOVE, function(t) {\n                    var e;\n                    (e = t).originalEvent.touches && 1 < e.originalEvent.touches.length\n                      ? (n.touchDeltaX = 0)\n                      : (n.touchDeltaX = e.originalEvent.touches[0].clientX - n.touchStartX);\n                  }),\n                  g(this._element).on(Q.TOUCHEND, function(t) {\n                    return i(t);\n                  }));\n          }\n        }),\n        (t._keydown = function(t) {\n          if (!/input|textarea/i.test(t.target.tagName))\n            switch (t.which) {\n              case 37:\n                t.preventDefault(), this.prev();\n                break;\n              case 39:\n                t.preventDefault(), this.next();\n            }\n        }),\n        (t._getItemIndex = function(t) {\n          return (\n            (this._items =\n              t && t.parentNode ? [].slice.call(t.parentNode.querySelectorAll(et)) : []),\n            this._items.indexOf(t)\n          );\n        }),\n        (t._getItemByDirection = function(t, e) {\n          var n = t === W,\n            i = t === q,\n            o = this._getItemIndex(e),\n            r = this._items.length - 1;\n          if (((i && 0 === o) || (n && o === r)) && !this._config.wrap) return e;\n          var s = (o + (t === q ? -1 : 1)) % this._items.length;\n          return -1 === s ? this._items[this._items.length - 1] : this._items[s];\n        }),\n        (t._triggerSlideEvent = function(t, e) {\n          var n = this._getItemIndex(t),\n            i = this._getItemIndex(this._element.querySelector(tt)),\n            o = g.Event(Q.SLIDE, { relatedTarget: t, direction: e, from: i, to: n });\n          return g(this._element).trigger(o), o;\n        }),\n        (t._setActiveIndicatorElement = function(t) {\n          if (this._indicatorsElement) {\n            var e = [].slice.call(this._indicatorsElement.querySelectorAll(Z));\n            g(e).removeClass(V);\n            var n = this._indicatorsElement.children[this._getItemIndex(t)];\n            n && g(n).addClass(V);\n          }\n        }),\n        (t._slide = function(t, e) {\n          var n,\n            i,\n            o,\n            r = this,\n            s = this._element.querySelector(tt),\n            a = this._getItemIndex(s),\n            l = e || (s && this._getItemByDirection(t, s)),\n            c = this._getItemIndex(l),\n            h = Boolean(this._interval);\n          if (\n            ((o = t === W ? ((n = X), (i = $), M) : ((n = z), (i = G), K)), l && g(l).hasClass(V))\n          )\n            this._isSliding = !1;\n          else if (!this._triggerSlideEvent(l, o).isDefaultPrevented() && s && l) {\n            (this._isSliding = !0), h && this.pause(), this._setActiveIndicatorElement(l);\n            var u = g.Event(Q.SLID, { relatedTarget: l, direction: o, from: a, to: c });\n            if (g(this._element).hasClass(Y)) {\n              g(l).addClass(i), _.reflow(l), g(s).addClass(n), g(l).addClass(n);\n              var f = parseInt(l.getAttribute('data-interval'), 10);\n              this._config.interval = f\n                ? ((this._config.defaultInterval =\n                    this._config.defaultInterval || this._config.interval),\n                  f)\n                : this._config.defaultInterval || this._config.interval;\n              var d = _.getTransitionDurationFromElement(s);\n              g(s)\n                .one(_.TRANSITION_END, function() {\n                  g(l)\n                    .removeClass(n + ' ' + i)\n                    .addClass(V),\n                    g(s).removeClass(V + ' ' + i + ' ' + n),\n                    (r._isSliding = !1),\n                    setTimeout(function() {\n                      return g(r._element).trigger(u);\n                    }, 0);\n                })\n                .emulateTransitionEnd(d);\n            } else\n              g(s).removeClass(V),\n                g(l).addClass(V),\n                (this._isSliding = !1),\n                g(this._element).trigger(u);\n            h && this.cycle();\n          }\n        }),\n        (r._jQueryInterface = function(i) {\n          return this.each(function() {\n            var t = g(this).data(j),\n              e = l({}, F, g(this).data());\n            'object' == typeof i && (e = l({}, e, i));\n            var n = 'string' == typeof i ? i : e.slide;\n            if ((t || ((t = new r(this, e)), g(this).data(j, t)), 'number' == typeof i)) t.to(i);\n            else if ('string' == typeof n) {\n              if ('undefined' == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n              t[n]();\n            } else e.interval && e.ride && (t.pause(), t.cycle());\n          });\n        }),\n        (r._dataApiClickHandler = function(t) {\n          var e = _.getSelectorFromElement(this);\n          if (e) {\n            var n = g(e)[0];\n            if (n && g(n).hasClass(B)) {\n              var i = l({}, g(n).data(), g(this).data()),\n                o = this.getAttribute('data-slide-to');\n              o && (i.interval = !1),\n                r._jQueryInterface.call(g(n), i),\n                o &&\n                  g(n)\n                    .data(j)\n                    .to(o),\n                t.preventDefault();\n            }\n          }\n        }),\n        s(r, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return F;\n            },\n          },\n        ]),\n        r\n      );\n    })();\n  g(document).on(Q.CLICK_DATA_API, rt, lt._dataApiClickHandler),\n    g(window).on(Q.LOAD_DATA_API, function() {\n      for (var t = [].slice.call(document.querySelectorAll(st)), e = 0, n = t.length; e < n; e++) {\n        var i = g(t[e]);\n        lt._jQueryInterface.call(i, i.data());\n      }\n    }),\n    (g.fn[L] = lt._jQueryInterface),\n    (g.fn[L].Constructor = lt),\n    (g.fn[L].noConflict = function() {\n      return (g.fn[L] = x), lt._jQueryInterface;\n    });\n  var ct = 'collapse',\n    ht = 'bs.collapse',\n    ut = '.' + ht,\n    ft = g.fn[ct],\n    dt = { toggle: !0, parent: '' },\n    gt = { toggle: 'boolean', parent: '(string|element)' },\n    _t = {\n      SHOW: 'show' + ut,\n      SHOWN: 'shown' + ut,\n      HIDE: 'hide' + ut,\n      HIDDEN: 'hidden' + ut,\n      CLICK_DATA_API: 'click' + ut + '.data-api',\n    },\n    mt = 'show',\n    pt = 'collapse',\n    vt = 'collapsing',\n    yt = 'collapsed',\n    Et = 'width',\n    Ct = 'height',\n    Tt = '.show, .collapsing',\n    St = '[data-toggle=\"collapse\"]',\n    bt = (function() {\n      function a(e, t) {\n        (this._isTransitioning = !1),\n          (this._element = e),\n          (this._config = this._getConfig(t)),\n          (this._triggerArray = [].slice.call(\n            document.querySelectorAll(\n              '[data-toggle=\"collapse\"][href=\"#' +\n                e.id +\n                '\"],[data-toggle=\"collapse\"][data-target=\"#' +\n                e.id +\n                '\"]',\n            ),\n          ));\n        for (\n          var n = [].slice.call(document.querySelectorAll(St)), i = 0, o = n.length;\n          i < o;\n          i++\n        ) {\n          var r = n[i],\n            s = _.getSelectorFromElement(r),\n            a = [].slice.call(document.querySelectorAll(s)).filter(function(t) {\n              return t === e;\n            });\n          null !== s && 0 < a.length && ((this._selector = s), this._triggerArray.push(r));\n        }\n        (this._parent = this._config.parent ? this._getParent() : null),\n          this._config.parent || this._addAriaAndCollapsedClass(this._element, this._triggerArray),\n          this._config.toggle && this.toggle();\n      }\n      var t = a.prototype;\n      return (\n        (t.toggle = function() {\n          g(this._element).hasClass(mt) ? this.hide() : this.show();\n        }),\n        (t.show = function() {\n          var t,\n            e,\n            n = this;\n          if (\n            !this._isTransitioning &&\n            !g(this._element).hasClass(mt) &&\n            (this._parent &&\n              0 ===\n                (t = [].slice.call(this._parent.querySelectorAll(Tt)).filter(function(t) {\n                  return 'string' == typeof n._config.parent\n                    ? t.getAttribute('data-parent') === n._config.parent\n                    : t.classList.contains(pt);\n                })).length &&\n              (t = null),\n            !(\n              t &&\n              (e = g(t)\n                .not(this._selector)\n                .data(ht)) &&\n              e._isTransitioning\n            ))\n          ) {\n            var i = g.Event(_t.SHOW);\n            if ((g(this._element).trigger(i), !i.isDefaultPrevented())) {\n              t &&\n                (a._jQueryInterface.call(g(t).not(this._selector), 'hide'),\n                e || g(t).data(ht, null));\n              var o = this._getDimension();\n              g(this._element)\n                .removeClass(pt)\n                .addClass(vt),\n                (this._element.style[o] = 0),\n                this._triggerArray.length &&\n                  g(this._triggerArray)\n                    .removeClass(yt)\n                    .attr('aria-expanded', !0),\n                this.setTransitioning(!0);\n              var r = 'scroll' + (o[0].toUpperCase() + o.slice(1)),\n                s = _.getTransitionDurationFromElement(this._element);\n              g(this._element)\n                .one(_.TRANSITION_END, function() {\n                  g(n._element)\n                    .removeClass(vt)\n                    .addClass(pt)\n                    .addClass(mt),\n                    (n._element.style[o] = ''),\n                    n.setTransitioning(!1),\n                    g(n._element).trigger(_t.SHOWN);\n                })\n                .emulateTransitionEnd(s),\n                (this._element.style[o] = this._element[r] + 'px');\n            }\n          }\n        }),\n        (t.hide = function() {\n          var t = this;\n          if (!this._isTransitioning && g(this._element).hasClass(mt)) {\n            var e = g.Event(_t.HIDE);\n            if ((g(this._element).trigger(e), !e.isDefaultPrevented())) {\n              var n = this._getDimension();\n              (this._element.style[n] = this._element.getBoundingClientRect()[n] + 'px'),\n                _.reflow(this._element),\n                g(this._element)\n                  .addClass(vt)\n                  .removeClass(pt)\n                  .removeClass(mt);\n              var i = this._triggerArray.length;\n              if (0 < i)\n                for (var o = 0; o < i; o++) {\n                  var r = this._triggerArray[o],\n                    s = _.getSelectorFromElement(r);\n                  if (null !== s)\n                    g([].slice.call(document.querySelectorAll(s))).hasClass(mt) ||\n                      g(r)\n                        .addClass(yt)\n                        .attr('aria-expanded', !1);\n                }\n              this.setTransitioning(!0);\n              this._element.style[n] = '';\n              var a = _.getTransitionDurationFromElement(this._element);\n              g(this._element)\n                .one(_.TRANSITION_END, function() {\n                  t.setTransitioning(!1),\n                    g(t._element)\n                      .removeClass(vt)\n                      .addClass(pt)\n                      .trigger(_t.HIDDEN);\n                })\n                .emulateTransitionEnd(a);\n            }\n          }\n        }),\n        (t.setTransitioning = function(t) {\n          this._isTransitioning = t;\n        }),\n        (t.dispose = function() {\n          g.removeData(this._element, ht),\n            (this._config = null),\n            (this._parent = null),\n            (this._element = null),\n            (this._triggerArray = null),\n            (this._isTransitioning = null);\n        }),\n        (t._getConfig = function(t) {\n          return ((t = l({}, dt, t)).toggle = Boolean(t.toggle)), _.typeCheckConfig(ct, t, gt), t;\n        }),\n        (t._getDimension = function() {\n          return g(this._element).hasClass(Et) ? Et : Ct;\n        }),\n        (t._getParent = function() {\n          var t,\n            n = this;\n          _.isElement(this._config.parent)\n            ? ((t = this._config.parent),\n              'undefined' != typeof this._config.parent.jquery && (t = this._config.parent[0]))\n            : (t = document.querySelector(this._config.parent));\n          var e = '[data-toggle=\"collapse\"][data-parent=\"' + this._config.parent + '\"]',\n            i = [].slice.call(t.querySelectorAll(e));\n          return (\n            g(i).each(function(t, e) {\n              n._addAriaAndCollapsedClass(a._getTargetFromElement(e), [e]);\n            }),\n            t\n          );\n        }),\n        (t._addAriaAndCollapsedClass = function(t, e) {\n          var n = g(t).hasClass(mt);\n          e.length &&\n            g(e)\n              .toggleClass(yt, !n)\n              .attr('aria-expanded', n);\n        }),\n        (a._getTargetFromElement = function(t) {\n          var e = _.getSelectorFromElement(t);\n          return e ? document.querySelector(e) : null;\n        }),\n        (a._jQueryInterface = function(i) {\n          return this.each(function() {\n            var t = g(this),\n              e = t.data(ht),\n              n = l({}, dt, t.data(), 'object' == typeof i && i ? i : {});\n            if (\n              (!e && n.toggle && /show|hide/.test(i) && (n.toggle = !1),\n              e || ((e = new a(this, n)), t.data(ht, e)),\n              'string' == typeof i)\n            ) {\n              if ('undefined' == typeof e[i]) throw new TypeError('No method named \"' + i + '\"');\n              e[i]();\n            }\n          });\n        }),\n        s(a, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return dt;\n            },\n          },\n        ]),\n        a\n      );\n    })();\n  g(document).on(_t.CLICK_DATA_API, St, function(t) {\n    'A' === t.currentTarget.tagName && t.preventDefault();\n    var n = g(this),\n      e = _.getSelectorFromElement(this),\n      i = [].slice.call(document.querySelectorAll(e));\n    g(i).each(function() {\n      var t = g(this),\n        e = t.data(ht) ? 'toggle' : n.data();\n      bt._jQueryInterface.call(t, e);\n    });\n  }),\n    (g.fn[ct] = bt._jQueryInterface),\n    (g.fn[ct].Constructor = bt),\n    (g.fn[ct].noConflict = function() {\n      return (g.fn[ct] = ft), bt._jQueryInterface;\n    });\n  var It = 'dropdown',\n    Dt = 'bs.dropdown',\n    wt = '.' + Dt,\n    At = '.data-api',\n    Nt = g.fn[It],\n    Ot = new RegExp('38|40|27'),\n    kt = {\n      HIDE: 'hide' + wt,\n      HIDDEN: 'hidden' + wt,\n      SHOW: 'show' + wt,\n      SHOWN: 'shown' + wt,\n      CLICK: 'click' + wt,\n      CLICK_DATA_API: 'click' + wt + At,\n      KEYDOWN_DATA_API: 'keydown' + wt + At,\n      KEYUP_DATA_API: 'keyup' + wt + At,\n    },\n    Pt = 'disabled',\n    Lt = 'show',\n    jt = 'dropup',\n    Ht = 'dropright',\n    Rt = 'dropleft',\n    xt = 'dropdown-menu-right',\n    Ft = 'position-static',\n    Ut = '[data-toggle=\"dropdown\"]',\n    Wt = '.dropdown form',\n    qt = '.dropdown-menu',\n    Mt = '.navbar-nav',\n    Kt = '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)',\n    Qt = 'top-start',\n    Bt = 'top-end',\n    Vt = 'bottom-start',\n    Yt = 'bottom-end',\n    zt = 'right-start',\n    Xt = 'left-start',\n    $t = { offset: 0, flip: !0, boundary: 'scrollParent', reference: 'toggle', display: 'dynamic' },\n    Gt = {\n      offset: '(number|string|function)',\n      flip: 'boolean',\n      boundary: '(string|element)',\n      reference: '(string|element)',\n      display: 'string',\n    },\n    Jt = (function() {\n      function c(t, e) {\n        (this._element = t),\n          (this._popper = null),\n          (this._config = this._getConfig(e)),\n          (this._menu = this._getMenuElement()),\n          (this._inNavbar = this._detectNavbar()),\n          this._addEventListeners();\n      }\n      var t = c.prototype;\n      return (\n        (t.toggle = function() {\n          if (!this._element.disabled && !g(this._element).hasClass(Pt)) {\n            var t = c._getParentFromElement(this._element),\n              e = g(this._menu).hasClass(Lt);\n            if ((c._clearMenus(), !e)) {\n              var n = { relatedTarget: this._element },\n                i = g.Event(kt.SHOW, n);\n              if ((g(t).trigger(i), !i.isDefaultPrevented())) {\n                if (!this._inNavbar) {\n                  if ('undefined' == typeof u)\n                    throw new TypeError(\n                      \"Bootstrap's dropdowns require Popper.js (https://popper.js.org/)\",\n                    );\n                  var o = this._element;\n                  'parent' === this._config.reference\n                    ? (o = t)\n                    : _.isElement(this._config.reference) &&\n                      ((o = this._config.reference),\n                      'undefined' != typeof this._config.reference.jquery &&\n                        (o = this._config.reference[0])),\n                    'scrollParent' !== this._config.boundary && g(t).addClass(Ft),\n                    (this._popper = new u(o, this._menu, this._getPopperConfig()));\n                }\n                'ontouchstart' in document.documentElement &&\n                  0 === g(t).closest(Mt).length &&\n                  g(document.body)\n                    .children()\n                    .on('mouseover', null, g.noop),\n                  this._element.focus(),\n                  this._element.setAttribute('aria-expanded', !0),\n                  g(this._menu).toggleClass(Lt),\n                  g(t)\n                    .toggleClass(Lt)\n                    .trigger(g.Event(kt.SHOWN, n));\n              }\n            }\n          }\n        }),\n        (t.show = function() {\n          if (\n            !(this._element.disabled || g(this._element).hasClass(Pt) || g(this._menu).hasClass(Lt))\n          ) {\n            var t = { relatedTarget: this._element },\n              e = g.Event(kt.SHOW, t),\n              n = c._getParentFromElement(this._element);\n            g(n).trigger(e),\n              e.isDefaultPrevented() ||\n                (g(this._menu).toggleClass(Lt),\n                g(n)\n                  .toggleClass(Lt)\n                  .trigger(g.Event(kt.SHOWN, t)));\n          }\n        }),\n        (t.hide = function() {\n          if (\n            !this._element.disabled &&\n            !g(this._element).hasClass(Pt) &&\n            g(this._menu).hasClass(Lt)\n          ) {\n            var t = { relatedTarget: this._element },\n              e = g.Event(kt.HIDE, t),\n              n = c._getParentFromElement(this._element);\n            g(n).trigger(e),\n              e.isDefaultPrevented() ||\n                (g(this._menu).toggleClass(Lt),\n                g(n)\n                  .toggleClass(Lt)\n                  .trigger(g.Event(kt.HIDDEN, t)));\n          }\n        }),\n        (t.dispose = function() {\n          g.removeData(this._element, Dt),\n            g(this._element).off(wt),\n            (this._element = null),\n            (this._menu = null) !== this._popper && (this._popper.destroy(), (this._popper = null));\n        }),\n        (t.update = function() {\n          (this._inNavbar = this._detectNavbar()),\n            null !== this._popper && this._popper.scheduleUpdate();\n        }),\n        (t._addEventListeners = function() {\n          var e = this;\n          g(this._element).on(kt.CLICK, function(t) {\n            t.preventDefault(), t.stopPropagation(), e.toggle();\n          });\n        }),\n        (t._getConfig = function(t) {\n          return (\n            (t = l({}, this.constructor.Default, g(this._element).data(), t)),\n            _.typeCheckConfig(It, t, this.constructor.DefaultType),\n            t\n          );\n        }),\n        (t._getMenuElement = function() {\n          if (!this._menu) {\n            var t = c._getParentFromElement(this._element);\n            t && (this._menu = t.querySelector(qt));\n          }\n          return this._menu;\n        }),\n        (t._getPlacement = function() {\n          var t = g(this._element.parentNode),\n            e = Vt;\n          return (\n            t.hasClass(jt)\n              ? ((e = Qt), g(this._menu).hasClass(xt) && (e = Bt))\n              : t.hasClass(Ht)\n              ? (e = zt)\n              : t.hasClass(Rt)\n              ? (e = Xt)\n              : g(this._menu).hasClass(xt) && (e = Yt),\n            e\n          );\n        }),\n        (t._detectNavbar = function() {\n          return 0 < g(this._element).closest('.navbar').length;\n        }),\n        (t._getOffset = function() {\n          var e = this,\n            t = {};\n          return (\n            'function' == typeof this._config.offset\n              ? (t.fn = function(t) {\n                  return (\n                    (t.offsets = l({}, t.offsets, e._config.offset(t.offsets, e._element) || {})), t\n                  );\n                })\n              : (t.offset = this._config.offset),\n            t\n          );\n        }),\n        (t._getPopperConfig = function() {\n          var t = {\n            placement: this._getPlacement(),\n            modifiers: {\n              offset: this._getOffset(),\n              flip: { enabled: this._config.flip },\n              preventOverflow: { boundariesElement: this._config.boundary },\n            },\n          };\n          return 'static' === this._config.display && (t.modifiers.applyStyle = { enabled: !1 }), t;\n        }),\n        (c._jQueryInterface = function(e) {\n          return this.each(function() {\n            var t = g(this).data(Dt);\n            if (\n              (t || ((t = new c(this, 'object' == typeof e ? e : null)), g(this).data(Dt, t)),\n              'string' == typeof e)\n            ) {\n              if ('undefined' == typeof t[e]) throw new TypeError('No method named \"' + e + '\"');\n              t[e]();\n            }\n          });\n        }),\n        (c._clearMenus = function(t) {\n          if (!t || (3 !== t.which && ('keyup' !== t.type || 9 === t.which)))\n            for (\n              var e = [].slice.call(document.querySelectorAll(Ut)), n = 0, i = e.length;\n              n < i;\n              n++\n            ) {\n              var o = c._getParentFromElement(e[n]),\n                r = g(e[n]).data(Dt),\n                s = { relatedTarget: e[n] };\n              if ((t && 'click' === t.type && (s.clickEvent = t), r)) {\n                var a = r._menu;\n                if (\n                  g(o).hasClass(Lt) &&\n                  !(\n                    t &&\n                    (('click' === t.type && /input|textarea/i.test(t.target.tagName)) ||\n                      ('keyup' === t.type && 9 === t.which)) &&\n                    g.contains(o, t.target)\n                  )\n                ) {\n                  var l = g.Event(kt.HIDE, s);\n                  g(o).trigger(l),\n                    l.isDefaultPrevented() ||\n                      ('ontouchstart' in document.documentElement &&\n                        g(document.body)\n                          .children()\n                          .off('mouseover', null, g.noop),\n                      e[n].setAttribute('aria-expanded', 'false'),\n                      g(a).removeClass(Lt),\n                      g(o)\n                        .removeClass(Lt)\n                        .trigger(g.Event(kt.HIDDEN, s)));\n                }\n              }\n            }\n        }),\n        (c._getParentFromElement = function(t) {\n          var e,\n            n = _.getSelectorFromElement(t);\n          return n && (e = document.querySelector(n)), e || t.parentNode;\n        }),\n        (c._dataApiKeydownHandler = function(t) {\n          if (\n            (/input|textarea/i.test(t.target.tagName)\n              ? !(\n                  32 === t.which ||\n                  (27 !== t.which &&\n                    ((40 !== t.which && 38 !== t.which) || g(t.target).closest(qt).length))\n                )\n              : Ot.test(t.which)) &&\n            (t.preventDefault(), t.stopPropagation(), !this.disabled && !g(this).hasClass(Pt))\n          ) {\n            var e = c._getParentFromElement(this),\n              n = g(e).hasClass(Lt);\n            if (n && (!n || (27 !== t.which && 32 !== t.which))) {\n              var i = [].slice.call(e.querySelectorAll(Kt));\n              if (0 !== i.length) {\n                var o = i.indexOf(t.target);\n                38 === t.which && 0 < o && o--,\n                  40 === t.which && o < i.length - 1 && o++,\n                  o < 0 && (o = 0),\n                  i[o].focus();\n              }\n            } else {\n              if (27 === t.which) {\n                var r = e.querySelector(Ut);\n                g(r).trigger('focus');\n              }\n              g(this).trigger('click');\n            }\n          }\n        }),\n        s(c, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return $t;\n            },\n          },\n          {\n            key: 'DefaultType',\n            get: function() {\n              return Gt;\n            },\n          },\n        ]),\n        c\n      );\n    })();\n  g(document)\n    .on(kt.KEYDOWN_DATA_API, Ut, Jt._dataApiKeydownHandler)\n    .on(kt.KEYDOWN_DATA_API, qt, Jt._dataApiKeydownHandler)\n    .on(kt.CLICK_DATA_API + ' ' + kt.KEYUP_DATA_API, Jt._clearMenus)\n    .on(kt.CLICK_DATA_API, Ut, function(t) {\n      t.preventDefault(), t.stopPropagation(), Jt._jQueryInterface.call(g(this), 'toggle');\n    })\n    .on(kt.CLICK_DATA_API, Wt, function(t) {\n      t.stopPropagation();\n    }),\n    (g.fn[It] = Jt._jQueryInterface),\n    (g.fn[It].Constructor = Jt),\n    (g.fn[It].noConflict = function() {\n      return (g.fn[It] = Nt), Jt._jQueryInterface;\n    });\n  var Zt = 'modal',\n    te = 'bs.modal',\n    ee = '.' + te,\n    ne = g.fn[Zt],\n    ie = { backdrop: !0, keyboard: !0, focus: !0, show: !0 },\n    oe = { backdrop: '(boolean|string)', keyboard: 'boolean', focus: 'boolean', show: 'boolean' },\n    re = {\n      HIDE: 'hide' + ee,\n      HIDDEN: 'hidden' + ee,\n      SHOW: 'show' + ee,\n      SHOWN: 'shown' + ee,\n      FOCUSIN: 'focusin' + ee,\n      RESIZE: 'resize' + ee,\n      CLICK_DISMISS: 'click.dismiss' + ee,\n      KEYDOWN_DISMISS: 'keydown.dismiss' + ee,\n      MOUSEUP_DISMISS: 'mouseup.dismiss' + ee,\n      MOUSEDOWN_DISMISS: 'mousedown.dismiss' + ee,\n      CLICK_DATA_API: 'click' + ee + '.data-api',\n    },\n    se = 'modal-dialog-scrollable',\n    ae = 'modal-scrollbar-measure',\n    le = 'modal-backdrop',\n    ce = 'modal-open',\n    he = 'fade',\n    ue = 'show',\n    fe = '.modal-dialog',\n    de = '.modal-body',\n    ge = '[data-toggle=\"modal\"]',\n    _e = '[data-dismiss=\"modal\"]',\n    me = '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    pe = '.sticky-top',\n    ve = (function() {\n      function o(t, e) {\n        (this._config = this._getConfig(e)),\n          (this._element = t),\n          (this._dialog = t.querySelector(fe)),\n          (this._backdrop = null),\n          (this._isShown = !1),\n          (this._isBodyOverflowing = !1),\n          (this._ignoreBackdropClick = !1),\n          (this._isTransitioning = !1),\n          (this._scrollbarWidth = 0);\n      }\n      var t = o.prototype;\n      return (\n        (t.toggle = function(t) {\n          return this._isShown ? this.hide() : this.show(t);\n        }),\n        (t.show = function(t) {\n          var e = this;\n          if (!this._isShown && !this._isTransitioning) {\n            g(this._element).hasClass(he) && (this._isTransitioning = !0);\n            var n = g.Event(re.SHOW, { relatedTarget: t });\n            g(this._element).trigger(n),\n              this._isShown ||\n                n.isDefaultPrevented() ||\n                ((this._isShown = !0),\n                this._checkScrollbar(),\n                this._setScrollbar(),\n                this._adjustDialog(),\n                this._setEscapeEvent(),\n                this._setResizeEvent(),\n                g(this._element).on(re.CLICK_DISMISS, _e, function(t) {\n                  return e.hide(t);\n                }),\n                g(this._dialog).on(re.MOUSEDOWN_DISMISS, function() {\n                  g(e._element).one(re.MOUSEUP_DISMISS, function(t) {\n                    g(t.target).is(e._element) && (e._ignoreBackdropClick = !0);\n                  });\n                }),\n                this._showBackdrop(function() {\n                  return e._showElement(t);\n                }));\n          }\n        }),\n        (t.hide = function(t) {\n          var e = this;\n          if ((t && t.preventDefault(), this._isShown && !this._isTransitioning)) {\n            var n = g.Event(re.HIDE);\n            if ((g(this._element).trigger(n), this._isShown && !n.isDefaultPrevented())) {\n              this._isShown = !1;\n              var i = g(this._element).hasClass(he);\n              if (\n                (i && (this._isTransitioning = !0),\n                this._setEscapeEvent(),\n                this._setResizeEvent(),\n                g(document).off(re.FOCUSIN),\n                g(this._element).removeClass(ue),\n                g(this._element).off(re.CLICK_DISMISS),\n                g(this._dialog).off(re.MOUSEDOWN_DISMISS),\n                i)\n              ) {\n                var o = _.getTransitionDurationFromElement(this._element);\n                g(this._element)\n                  .one(_.TRANSITION_END, function(t) {\n                    return e._hideModal(t);\n                  })\n                  .emulateTransitionEnd(o);\n              } else this._hideModal();\n            }\n          }\n        }),\n        (t.dispose = function() {\n          [window, this._element, this._dialog].forEach(function(t) {\n            return g(t).off(ee);\n          }),\n            g(document).off(re.FOCUSIN),\n            g.removeData(this._element, te),\n            (this._config = null),\n            (this._element = null),\n            (this._dialog = null),\n            (this._backdrop = null),\n            (this._isShown = null),\n            (this._isBodyOverflowing = null),\n            (this._ignoreBackdropClick = null),\n            (this._isTransitioning = null),\n            (this._scrollbarWidth = null);\n        }),\n        (t.handleUpdate = function() {\n          this._adjustDialog();\n        }),\n        (t._getConfig = function(t) {\n          return (t = l({}, ie, t)), _.typeCheckConfig(Zt, t, oe), t;\n        }),\n        (t._showElement = function(t) {\n          var e = this,\n            n = g(this._element).hasClass(he);\n          (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE) ||\n            document.body.appendChild(this._element),\n            (this._element.style.display = 'block'),\n            this._element.removeAttribute('aria-hidden'),\n            this._element.setAttribute('aria-modal', !0),\n            g(this._dialog).hasClass(se)\n              ? (this._dialog.querySelector(de).scrollTop = 0)\n              : (this._element.scrollTop = 0),\n            n && _.reflow(this._element),\n            g(this._element).addClass(ue),\n            this._config.focus && this._enforceFocus();\n          var i = g.Event(re.SHOWN, { relatedTarget: t }),\n            o = function() {\n              e._config.focus && e._element.focus(),\n                (e._isTransitioning = !1),\n                g(e._element).trigger(i);\n            };\n          if (n) {\n            var r = _.getTransitionDurationFromElement(this._dialog);\n            g(this._dialog)\n              .one(_.TRANSITION_END, o)\n              .emulateTransitionEnd(r);\n          } else o();\n        }),\n        (t._enforceFocus = function() {\n          var e = this;\n          g(document)\n            .off(re.FOCUSIN)\n            .on(re.FOCUSIN, function(t) {\n              document !== t.target &&\n                e._element !== t.target &&\n                0 === g(e._element).has(t.target).length &&\n                e._element.focus();\n            });\n        }),\n        (t._setEscapeEvent = function() {\n          var e = this;\n          this._isShown && this._config.keyboard\n            ? g(this._element).on(re.KEYDOWN_DISMISS, function(t) {\n                27 === t.which && (t.preventDefault(), e.hide());\n              })\n            : this._isShown || g(this._element).off(re.KEYDOWN_DISMISS);\n        }),\n        (t._setResizeEvent = function() {\n          var e = this;\n          this._isShown\n            ? g(window).on(re.RESIZE, function(t) {\n                return e.handleUpdate(t);\n              })\n            : g(window).off(re.RESIZE);\n        }),\n        (t._hideModal = function() {\n          var t = this;\n          (this._element.style.display = 'none'),\n            this._element.setAttribute('aria-hidden', !0),\n            this._element.removeAttribute('aria-modal'),\n            (this._isTransitioning = !1),\n            this._showBackdrop(function() {\n              g(document.body).removeClass(ce),\n                t._resetAdjustments(),\n                t._resetScrollbar(),\n                g(t._element).trigger(re.HIDDEN);\n            });\n        }),\n        (t._removeBackdrop = function() {\n          this._backdrop && (g(this._backdrop).remove(), (this._backdrop = null));\n        }),\n        (t._showBackdrop = function(t) {\n          var e = this,\n            n = g(this._element).hasClass(he) ? he : '';\n          if (this._isShown && this._config.backdrop) {\n            if (\n              ((this._backdrop = document.createElement('div')),\n              (this._backdrop.className = le),\n              n && this._backdrop.classList.add(n),\n              g(this._backdrop).appendTo(document.body),\n              g(this._element).on(re.CLICK_DISMISS, function(t) {\n                e._ignoreBackdropClick\n                  ? (e._ignoreBackdropClick = !1)\n                  : t.target === t.currentTarget &&\n                    ('static' === e._config.backdrop ? e._element.focus() : e.hide());\n              }),\n              n && _.reflow(this._backdrop),\n              g(this._backdrop).addClass(ue),\n              !t)\n            )\n              return;\n            if (!n) return void t();\n            var i = _.getTransitionDurationFromElement(this._backdrop);\n            g(this._backdrop)\n              .one(_.TRANSITION_END, t)\n              .emulateTransitionEnd(i);\n          } else if (!this._isShown && this._backdrop) {\n            g(this._backdrop).removeClass(ue);\n            var o = function() {\n              e._removeBackdrop(), t && t();\n            };\n            if (g(this._element).hasClass(he)) {\n              var r = _.getTransitionDurationFromElement(this._backdrop);\n              g(this._backdrop)\n                .one(_.TRANSITION_END, o)\n                .emulateTransitionEnd(r);\n            } else o();\n          } else t && t();\n        }),\n        (t._adjustDialog = function() {\n          var t = this._element.scrollHeight > document.documentElement.clientHeight;\n          !this._isBodyOverflowing &&\n            t &&\n            (this._element.style.paddingLeft = this._scrollbarWidth + 'px'),\n            this._isBodyOverflowing &&\n              !t &&\n              (this._element.style.paddingRight = this._scrollbarWidth + 'px');\n        }),\n        (t._resetAdjustments = function() {\n          (this._element.style.paddingLeft = ''), (this._element.style.paddingRight = '');\n        }),\n        (t._checkScrollbar = function() {\n          var t = document.body.getBoundingClientRect();\n          (this._isBodyOverflowing = t.left + t.right < window.innerWidth),\n            (this._scrollbarWidth = this._getScrollbarWidth());\n        }),\n        (t._setScrollbar = function() {\n          var o = this;\n          if (this._isBodyOverflowing) {\n            var t = [].slice.call(document.querySelectorAll(me)),\n              e = [].slice.call(document.querySelectorAll(pe));\n            g(t).each(function(t, e) {\n              var n = e.style.paddingRight,\n                i = g(e).css('padding-right');\n              g(e)\n                .data('padding-right', n)\n                .css('padding-right', parseFloat(i) + o._scrollbarWidth + 'px');\n            }),\n              g(e).each(function(t, e) {\n                var n = e.style.marginRight,\n                  i = g(e).css('margin-right');\n                g(e)\n                  .data('margin-right', n)\n                  .css('margin-right', parseFloat(i) - o._scrollbarWidth + 'px');\n              });\n            var n = document.body.style.paddingRight,\n              i = g(document.body).css('padding-right');\n            g(document.body)\n              .data('padding-right', n)\n              .css('padding-right', parseFloat(i) + this._scrollbarWidth + 'px');\n          }\n          g(document.body).addClass(ce);\n        }),\n        (t._resetScrollbar = function() {\n          var t = [].slice.call(document.querySelectorAll(me));\n          g(t).each(function(t, e) {\n            var n = g(e).data('padding-right');\n            g(e).removeData('padding-right'), (e.style.paddingRight = n || '');\n          });\n          var e = [].slice.call(document.querySelectorAll('' + pe));\n          g(e).each(function(t, e) {\n            var n = g(e).data('margin-right');\n            'undefined' != typeof n &&\n              g(e)\n                .css('margin-right', n)\n                .removeData('margin-right');\n          });\n          var n = g(document.body).data('padding-right');\n          g(document.body).removeData('padding-right'),\n            (document.body.style.paddingRight = n || '');\n        }),\n        (t._getScrollbarWidth = function() {\n          var t = document.createElement('div');\n          (t.className = ae), document.body.appendChild(t);\n          var e = t.getBoundingClientRect().width - t.clientWidth;\n          return document.body.removeChild(t), e;\n        }),\n        (o._jQueryInterface = function(n, i) {\n          return this.each(function() {\n            var t = g(this).data(te),\n              e = l({}, ie, g(this).data(), 'object' == typeof n && n ? n : {});\n            if ((t || ((t = new o(this, e)), g(this).data(te, t)), 'string' == typeof n)) {\n              if ('undefined' == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n              t[n](i);\n            } else e.show && t.show(i);\n          });\n        }),\n        s(o, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return ie;\n            },\n          },\n        ]),\n        o\n      );\n    })();\n  g(document).on(re.CLICK_DATA_API, ge, function(t) {\n    var e,\n      n = this,\n      i = _.getSelectorFromElement(this);\n    i && (e = document.querySelector(i));\n    var o = g(e).data(te) ? 'toggle' : l({}, g(e).data(), g(this).data());\n    ('A' !== this.tagName && 'AREA' !== this.tagName) || t.preventDefault();\n    var r = g(e).one(re.SHOW, function(t) {\n      t.isDefaultPrevented() ||\n        r.one(re.HIDDEN, function() {\n          g(n).is(':visible') && n.focus();\n        });\n    });\n    ve._jQueryInterface.call(g(e), o, this);\n  }),\n    (g.fn[Zt] = ve._jQueryInterface),\n    (g.fn[Zt].Constructor = ve),\n    (g.fn[Zt].noConflict = function() {\n      return (g.fn[Zt] = ne), ve._jQueryInterface;\n    });\n  var ye = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'],\n    Ee = {\n      '*': ['class', 'dir', 'id', 'lang', 'role', /^aria-[\\w-]*$/i],\n      a: ['target', 'href', 'title', 'rel'],\n      area: [],\n      b: [],\n      br: [],\n      col: [],\n      code: [],\n      div: [],\n      em: [],\n      hr: [],\n      h1: [],\n      h2: [],\n      h3: [],\n      h4: [],\n      h5: [],\n      h6: [],\n      i: [],\n      img: ['src', 'alt', 'title', 'width', 'height'],\n      li: [],\n      ol: [],\n      p: [],\n      pre: [],\n      s: [],\n      small: [],\n      span: [],\n      sub: [],\n      sup: [],\n      strong: [],\n      u: [],\n      ul: [],\n    },\n    Ce = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi,\n    Te = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n  function Se(t, s, e) {\n    if (0 === t.length) return t;\n    if (e && 'function' == typeof e) return e(t);\n    for (\n      var n = new window.DOMParser().parseFromString(t, 'text/html'),\n        a = Object.keys(s),\n        l = [].slice.call(n.body.querySelectorAll('*')),\n        i = function(t, e) {\n          var n = l[t],\n            i = n.nodeName.toLowerCase();\n          if (-1 === a.indexOf(n.nodeName.toLowerCase()))\n            return n.parentNode.removeChild(n), 'continue';\n          var o = [].slice.call(n.attributes),\n            r = [].concat(s['*'] || [], s[i] || []);\n          o.forEach(function(t) {\n            (function(t, e) {\n              var n = t.nodeName.toLowerCase();\n              if (-1 !== e.indexOf(n))\n                return (\n                  -1 === ye.indexOf(n) || Boolean(t.nodeValue.match(Ce) || t.nodeValue.match(Te))\n                );\n              for (\n                var i = e.filter(function(t) {\n                    return t instanceof RegExp;\n                  }),\n                  o = 0,\n                  r = i.length;\n                o < r;\n                o++\n              )\n                if (n.match(i[o])) return !0;\n              return !1;\n            })(t, r) || n.removeAttribute(t.nodeName);\n          });\n        },\n        o = 0,\n        r = l.length;\n      o < r;\n      o++\n    )\n      i(o);\n    return n.body.innerHTML;\n  }\n  var be = 'tooltip',\n    Ie = 'bs.tooltip',\n    De = '.' + Ie,\n    we = g.fn[be],\n    Ae = 'bs-tooltip',\n    Ne = new RegExp('(^|\\\\s)' + Ae + '\\\\S+', 'g'),\n    Oe = ['sanitize', 'whiteList', 'sanitizeFn'],\n    ke = {\n      animation: 'boolean',\n      template: 'string',\n      title: '(string|element|function)',\n      trigger: 'string',\n      delay: '(number|object)',\n      html: 'boolean',\n      selector: '(string|boolean)',\n      placement: '(string|function)',\n      offset: '(number|string|function)',\n      container: '(string|element|boolean)',\n      fallbackPlacement: '(string|array)',\n      boundary: '(string|element)',\n      sanitize: 'boolean',\n      sanitizeFn: '(null|function)',\n      whiteList: 'object',\n    },\n    Pe = { AUTO: 'auto', TOP: 'top', RIGHT: 'right', BOTTOM: 'bottom', LEFT: 'left' },\n    Le = {\n      animation: !0,\n      template:\n        '<div class=\"tooltip\" role=\"tooltip\"><div class=\"arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n      trigger: 'hover focus',\n      title: '',\n      delay: 0,\n      html: !1,\n      selector: !1,\n      placement: 'top',\n      offset: 0,\n      container: !1,\n      fallbackPlacement: 'flip',\n      boundary: 'scrollParent',\n      sanitize: !0,\n      sanitizeFn: null,\n      whiteList: Ee,\n    },\n    je = 'show',\n    He = 'out',\n    Re = {\n      HIDE: 'hide' + De,\n      HIDDEN: 'hidden' + De,\n      SHOW: 'show' + De,\n      SHOWN: 'shown' + De,\n      INSERTED: 'inserted' + De,\n      CLICK: 'click' + De,\n      FOCUSIN: 'focusin' + De,\n      FOCUSOUT: 'focusout' + De,\n      MOUSEENTER: 'mouseenter' + De,\n      MOUSELEAVE: 'mouseleave' + De,\n    },\n    xe = 'fade',\n    Fe = 'show',\n    Ue = '.tooltip-inner',\n    We = '.arrow',\n    qe = 'hover',\n    Me = 'focus',\n    Ke = 'click',\n    Qe = 'manual',\n    Be = (function() {\n      function i(t, e) {\n        if ('undefined' == typeof u)\n          throw new TypeError(\"Bootstrap's tooltips require Popper.js (https://popper.js.org/)\");\n        (this._isEnabled = !0),\n          (this._timeout = 0),\n          (this._hoverState = ''),\n          (this._activeTrigger = {}),\n          (this._popper = null),\n          (this.element = t),\n          (this.config = this._getConfig(e)),\n          (this.tip = null),\n          this._setListeners();\n      }\n      var t = i.prototype;\n      return (\n        (t.enable = function() {\n          this._isEnabled = !0;\n        }),\n        (t.disable = function() {\n          this._isEnabled = !1;\n        }),\n        (t.toggleEnabled = function() {\n          this._isEnabled = !this._isEnabled;\n        }),\n        (t.toggle = function(t) {\n          if (this._isEnabled)\n            if (t) {\n              var e = this.constructor.DATA_KEY,\n                n = g(t.currentTarget).data(e);\n              n ||\n                ((n = new this.constructor(t.currentTarget, this._getDelegateConfig())),\n                g(t.currentTarget).data(e, n)),\n                (n._activeTrigger.click = !n._activeTrigger.click),\n                n._isWithActiveTrigger() ? n._enter(null, n) : n._leave(null, n);\n            } else {\n              if (g(this.getTipElement()).hasClass(Fe)) return void this._leave(null, this);\n              this._enter(null, this);\n            }\n        }),\n        (t.dispose = function() {\n          clearTimeout(this._timeout),\n            g.removeData(this.element, this.constructor.DATA_KEY),\n            g(this.element).off(this.constructor.EVENT_KEY),\n            g(this.element)\n              .closest('.modal')\n              .off('hide.bs.modal'),\n            this.tip && g(this.tip).remove(),\n            (this._isEnabled = null),\n            (this._timeout = null),\n            (this._hoverState = null),\n            (this._activeTrigger = null) !== this._popper && this._popper.destroy(),\n            (this._popper = null),\n            (this.element = null),\n            (this.config = null),\n            (this.tip = null);\n        }),\n        (t.show = function() {\n          var e = this;\n          if ('none' === g(this.element).css('display'))\n            throw new Error('Please use show on visible elements');\n          var t = g.Event(this.constructor.Event.SHOW);\n          if (this.isWithContent() && this._isEnabled) {\n            g(this.element).trigger(t);\n            var n = _.findShadowRoot(this.element),\n              i = g.contains(\n                null !== n ? n : this.element.ownerDocument.documentElement,\n                this.element,\n              );\n            if (t.isDefaultPrevented() || !i) return;\n            var o = this.getTipElement(),\n              r = _.getUID(this.constructor.NAME);\n            o.setAttribute('id', r),\n              this.element.setAttribute('aria-describedby', r),\n              this.setContent(),\n              this.config.animation && g(o).addClass(xe);\n            var s =\n                'function' == typeof this.config.placement\n                  ? this.config.placement.call(this, o, this.element)\n                  : this.config.placement,\n              a = this._getAttachment(s);\n            this.addAttachmentClass(a);\n            var l = this._getContainer();\n            g(o).data(this.constructor.DATA_KEY, this),\n              g.contains(this.element.ownerDocument.documentElement, this.tip) || g(o).appendTo(l),\n              g(this.element).trigger(this.constructor.Event.INSERTED),\n              (this._popper = new u(this.element, o, {\n                placement: a,\n                modifiers: {\n                  offset: this._getOffset(),\n                  flip: { behavior: this.config.fallbackPlacement },\n                  arrow: { element: We },\n                  preventOverflow: { boundariesElement: this.config.boundary },\n                },\n                onCreate: function(t) {\n                  t.originalPlacement !== t.placement && e._handlePopperPlacementChange(t);\n                },\n                onUpdate: function(t) {\n                  return e._handlePopperPlacementChange(t);\n                },\n              })),\n              g(o).addClass(Fe),\n              'ontouchstart' in document.documentElement &&\n                g(document.body)\n                  .children()\n                  .on('mouseover', null, g.noop);\n            var c = function() {\n              e.config.animation && e._fixTransition();\n              var t = e._hoverState;\n              (e._hoverState = null),\n                g(e.element).trigger(e.constructor.Event.SHOWN),\n                t === He && e._leave(null, e);\n            };\n            if (g(this.tip).hasClass(xe)) {\n              var h = _.getTransitionDurationFromElement(this.tip);\n              g(this.tip)\n                .one(_.TRANSITION_END, c)\n                .emulateTransitionEnd(h);\n            } else c();\n          }\n        }),\n        (t.hide = function(t) {\n          var e = this,\n            n = this.getTipElement(),\n            i = g.Event(this.constructor.Event.HIDE),\n            o = function() {\n              e._hoverState !== je && n.parentNode && n.parentNode.removeChild(n),\n                e._cleanTipClass(),\n                e.element.removeAttribute('aria-describedby'),\n                g(e.element).trigger(e.constructor.Event.HIDDEN),\n                null !== e._popper && e._popper.destroy(),\n                t && t();\n            };\n          if ((g(this.element).trigger(i), !i.isDefaultPrevented())) {\n            if (\n              (g(n).removeClass(Fe),\n              'ontouchstart' in document.documentElement &&\n                g(document.body)\n                  .children()\n                  .off('mouseover', null, g.noop),\n              (this._activeTrigger[Ke] = !1),\n              (this._activeTrigger[Me] = !1),\n              (this._activeTrigger[qe] = !1),\n              g(this.tip).hasClass(xe))\n            ) {\n              var r = _.getTransitionDurationFromElement(n);\n              g(n)\n                .one(_.TRANSITION_END, o)\n                .emulateTransitionEnd(r);\n            } else o();\n            this._hoverState = '';\n          }\n        }),\n        (t.update = function() {\n          null !== this._popper && this._popper.scheduleUpdate();\n        }),\n        (t.isWithContent = function() {\n          return Boolean(this.getTitle());\n        }),\n        (t.addAttachmentClass = function(t) {\n          g(this.getTipElement()).addClass(Ae + '-' + t);\n        }),\n        (t.getTipElement = function() {\n          return (this.tip = this.tip || g(this.config.template)[0]), this.tip;\n        }),\n        (t.setContent = function() {\n          var t = this.getTipElement();\n          this.setElementContent(g(t.querySelectorAll(Ue)), this.getTitle()),\n            g(t).removeClass(xe + ' ' + Fe);\n        }),\n        (t.setElementContent = function(t, e) {\n          'object' != typeof e || (!e.nodeType && !e.jquery)\n            ? this.config.html\n              ? (this.config.sanitize && (e = Se(e, this.config.whiteList, this.config.sanitizeFn)),\n                t.html(e))\n              : t.text(e)\n            : this.config.html\n            ? g(e)\n                .parent()\n                .is(t) || t.empty().append(e)\n            : t.text(g(e).text());\n        }),\n        (t.getTitle = function() {\n          var t = this.element.getAttribute('data-original-title');\n          return (\n            t ||\n              (t =\n                'function' == typeof this.config.title\n                  ? this.config.title.call(this.element)\n                  : this.config.title),\n            t\n          );\n        }),\n        (t._getOffset = function() {\n          var e = this,\n            t = {};\n          return (\n            'function' == typeof this.config.offset\n              ? (t.fn = function(t) {\n                  return (\n                    (t.offsets = l({}, t.offsets, e.config.offset(t.offsets, e.element) || {})), t\n                  );\n                })\n              : (t.offset = this.config.offset),\n            t\n          );\n        }),\n        (t._getContainer = function() {\n          return !1 === this.config.container\n            ? document.body\n            : _.isElement(this.config.container)\n            ? g(this.config.container)\n            : g(document).find(this.config.container);\n        }),\n        (t._getAttachment = function(t) {\n          return Pe[t.toUpperCase()];\n        }),\n        (t._setListeners = function() {\n          var i = this;\n          this.config.trigger.split(' ').forEach(function(t) {\n            if ('click' === t)\n              g(i.element).on(i.constructor.Event.CLICK, i.config.selector, function(t) {\n                return i.toggle(t);\n              });\n            else if (t !== Qe) {\n              var e = t === qe ? i.constructor.Event.MOUSEENTER : i.constructor.Event.FOCUSIN,\n                n = t === qe ? i.constructor.Event.MOUSELEAVE : i.constructor.Event.FOCUSOUT;\n              g(i.element)\n                .on(e, i.config.selector, function(t) {\n                  return i._enter(t);\n                })\n                .on(n, i.config.selector, function(t) {\n                  return i._leave(t);\n                });\n            }\n          }),\n            g(this.element)\n              .closest('.modal')\n              .on('hide.bs.modal', function() {\n                i.element && i.hide();\n              }),\n            this.config.selector\n              ? (this.config = l({}, this.config, { trigger: 'manual', selector: '' }))\n              : this._fixTitle();\n        }),\n        (t._fixTitle = function() {\n          var t = typeof this.element.getAttribute('data-original-title');\n          (this.element.getAttribute('title') || 'string' !== t) &&\n            (this.element.setAttribute(\n              'data-original-title',\n              this.element.getAttribute('title') || '',\n            ),\n            this.element.setAttribute('title', ''));\n        }),\n        (t._enter = function(t, e) {\n          var n = this.constructor.DATA_KEY;\n          (e = e || g(t.currentTarget).data(n)) ||\n            ((e = new this.constructor(t.currentTarget, this._getDelegateConfig())),\n            g(t.currentTarget).data(n, e)),\n            t && (e._activeTrigger['focusin' === t.type ? Me : qe] = !0),\n            g(e.getTipElement()).hasClass(Fe) || e._hoverState === je\n              ? (e._hoverState = je)\n              : (clearTimeout(e._timeout),\n                (e._hoverState = je),\n                e.config.delay && e.config.delay.show\n                  ? (e._timeout = setTimeout(function() {\n                      e._hoverState === je && e.show();\n                    }, e.config.delay.show))\n                  : e.show());\n        }),\n        (t._leave = function(t, e) {\n          var n = this.constructor.DATA_KEY;\n          (e = e || g(t.currentTarget).data(n)) ||\n            ((e = new this.constructor(t.currentTarget, this._getDelegateConfig())),\n            g(t.currentTarget).data(n, e)),\n            t && (e._activeTrigger['focusout' === t.type ? Me : qe] = !1),\n            e._isWithActiveTrigger() ||\n              (clearTimeout(e._timeout),\n              (e._hoverState = He),\n              e.config.delay && e.config.delay.hide\n                ? (e._timeout = setTimeout(function() {\n                    e._hoverState === He && e.hide();\n                  }, e.config.delay.hide))\n                : e.hide());\n        }),\n        (t._isWithActiveTrigger = function() {\n          for (var t in this._activeTrigger) if (this._activeTrigger[t]) return !0;\n          return !1;\n        }),\n        (t._getConfig = function(t) {\n          var e = g(this.element).data();\n          return (\n            Object.keys(e).forEach(function(t) {\n              -1 !== Oe.indexOf(t) && delete e[t];\n            }),\n            'number' ==\n              typeof (t = l({}, this.constructor.Default, e, 'object' == typeof t && t ? t : {}))\n                .delay && (t.delay = { show: t.delay, hide: t.delay }),\n            'number' == typeof t.title && (t.title = t.title.toString()),\n            'number' == typeof t.content && (t.content = t.content.toString()),\n            _.typeCheckConfig(be, t, this.constructor.DefaultType),\n            t.sanitize && (t.template = Se(t.template, t.whiteList, t.sanitizeFn)),\n            t\n          );\n        }),\n        (t._getDelegateConfig = function() {\n          var t = {};\n          if (this.config)\n            for (var e in this.config)\n              this.constructor.Default[e] !== this.config[e] && (t[e] = this.config[e]);\n          return t;\n        }),\n        (t._cleanTipClass = function() {\n          var t = g(this.getTipElement()),\n            e = t.attr('class').match(Ne);\n          null !== e && e.length && t.removeClass(e.join(''));\n        }),\n        (t._handlePopperPlacementChange = function(t) {\n          var e = t.instance;\n          (this.tip = e.popper),\n            this._cleanTipClass(),\n            this.addAttachmentClass(this._getAttachment(t.placement));\n        }),\n        (t._fixTransition = function() {\n          var t = this.getTipElement(),\n            e = this.config.animation;\n          null === t.getAttribute('x-placement') &&\n            (g(t).removeClass(xe),\n            (this.config.animation = !1),\n            this.hide(),\n            this.show(),\n            (this.config.animation = e));\n        }),\n        (i._jQueryInterface = function(n) {\n          return this.each(function() {\n            var t = g(this).data(Ie),\n              e = 'object' == typeof n && n;\n            if (\n              (t || !/dispose|hide/.test(n)) &&\n              (t || ((t = new i(this, e)), g(this).data(Ie, t)), 'string' == typeof n)\n            ) {\n              if ('undefined' == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n              t[n]();\n            }\n          });\n        }),\n        s(i, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return Le;\n            },\n          },\n          {\n            key: 'NAME',\n            get: function() {\n              return be;\n            },\n          },\n          {\n            key: 'DATA_KEY',\n            get: function() {\n              return Ie;\n            },\n          },\n          {\n            key: 'Event',\n            get: function() {\n              return Re;\n            },\n          },\n          {\n            key: 'EVENT_KEY',\n            get: function() {\n              return De;\n            },\n          },\n          {\n            key: 'DefaultType',\n            get: function() {\n              return ke;\n            },\n          },\n        ]),\n        i\n      );\n    })();\n  (g.fn[be] = Be._jQueryInterface),\n    (g.fn[be].Constructor = Be),\n    (g.fn[be].noConflict = function() {\n      return (g.fn[be] = we), Be._jQueryInterface;\n    });\n  var Ve = 'popover',\n    Ye = 'bs.popover',\n    ze = '.' + Ye,\n    Xe = g.fn[Ve],\n    $e = 'bs-popover',\n    Ge = new RegExp('(^|\\\\s)' + $e + '\\\\S+', 'g'),\n    Je = l({}, Be.Default, {\n      placement: 'right',\n      trigger: 'click',\n      content: '',\n      template:\n        '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-header\"></h3><div class=\"popover-body\"></div></div>',\n    }),\n    Ze = l({}, Be.DefaultType, { content: '(string|element|function)' }),\n    tn = 'fade',\n    en = 'show',\n    nn = '.popover-header',\n    on = '.popover-body',\n    rn = {\n      HIDE: 'hide' + ze,\n      HIDDEN: 'hidden' + ze,\n      SHOW: 'show' + ze,\n      SHOWN: 'shown' + ze,\n      INSERTED: 'inserted' + ze,\n      CLICK: 'click' + ze,\n      FOCUSIN: 'focusin' + ze,\n      FOCUSOUT: 'focusout' + ze,\n      MOUSEENTER: 'mouseenter' + ze,\n      MOUSELEAVE: 'mouseleave' + ze,\n    },\n    sn = (function(t) {\n      var e, n;\n      function i() {\n        return t.apply(this, arguments) || this;\n      }\n      (n = t),\n        ((e = i).prototype = Object.create(n.prototype)),\n        ((e.prototype.constructor = e).__proto__ = n);\n      var o = i.prototype;\n      return (\n        (o.isWithContent = function() {\n          return this.getTitle() || this._getContent();\n        }),\n        (o.addAttachmentClass = function(t) {\n          g(this.getTipElement()).addClass($e + '-' + t);\n        }),\n        (o.getTipElement = function() {\n          return (this.tip = this.tip || g(this.config.template)[0]), this.tip;\n        }),\n        (o.setContent = function() {\n          var t = g(this.getTipElement());\n          this.setElementContent(t.find(nn), this.getTitle());\n          var e = this._getContent();\n          'function' == typeof e && (e = e.call(this.element)),\n            this.setElementContent(t.find(on), e),\n            t.removeClass(tn + ' ' + en);\n        }),\n        (o._getContent = function() {\n          return this.element.getAttribute('data-content') || this.config.content;\n        }),\n        (o._cleanTipClass = function() {\n          var t = g(this.getTipElement()),\n            e = t.attr('class').match(Ge);\n          null !== e && 0 < e.length && t.removeClass(e.join(''));\n        }),\n        (i._jQueryInterface = function(n) {\n          return this.each(function() {\n            var t = g(this).data(Ye),\n              e = 'object' == typeof n ? n : null;\n            if (\n              (t || !/dispose|hide/.test(n)) &&\n              (t || ((t = new i(this, e)), g(this).data(Ye, t)), 'string' == typeof n)\n            ) {\n              if ('undefined' == typeof t[n]) throw new TypeError('No method named \"' + n + '\"');\n              t[n]();\n            }\n          });\n        }),\n        s(i, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return Je;\n            },\n          },\n          {\n            key: 'NAME',\n            get: function() {\n              return Ve;\n            },\n          },\n          {\n            key: 'DATA_KEY',\n            get: function() {\n              return Ye;\n            },\n          },\n          {\n            key: 'Event',\n            get: function() {\n              return rn;\n            },\n          },\n          {\n            key: 'EVENT_KEY',\n            get: function() {\n              return ze;\n            },\n          },\n          {\n            key: 'DefaultType',\n            get: function() {\n              return Ze;\n            },\n          },\n        ]),\n        i\n      );\n    })(Be);\n  (g.fn[Ve] = sn._jQueryInterface),\n    (g.fn[Ve].Constructor = sn),\n    (g.fn[Ve].noConflict = function() {\n      return (g.fn[Ve] = Xe), sn._jQueryInterface;\n    });\n  var an = 'scrollspy',\n    ln = 'bs.scrollspy',\n    cn = '.' + ln,\n    hn = g.fn[an],\n    un = { offset: 10, method: 'auto', target: '' },\n    fn = { offset: 'number', method: 'string', target: '(string|element)' },\n    dn = {\n      ACTIVATE: 'activate' + cn,\n      SCROLL: 'scroll' + cn,\n      LOAD_DATA_API: 'load' + cn + '.data-api',\n    },\n    gn = 'dropdown-item',\n    _n = 'active',\n    mn = '[data-spy=\"scroll\"]',\n    pn = '.nav, .list-group',\n    vn = '.nav-link',\n    yn = '.nav-item',\n    En = '.list-group-item',\n    Cn = '.dropdown',\n    Tn = '.dropdown-item',\n    Sn = '.dropdown-toggle',\n    bn = 'offset',\n    In = 'position',\n    Dn = (function() {\n      function n(t, e) {\n        var n = this;\n        (this._element = t),\n          (this._scrollElement = 'BODY' === t.tagName ? window : t),\n          (this._config = this._getConfig(e)),\n          (this._selector =\n            this._config.target +\n            ' ' +\n            vn +\n            ',' +\n            this._config.target +\n            ' ' +\n            En +\n            ',' +\n            this._config.target +\n            ' ' +\n            Tn),\n          (this._offsets = []),\n          (this._targets = []),\n          (this._activeTarget = null),\n          (this._scrollHeight = 0),\n          g(this._scrollElement).on(dn.SCROLL, function(t) {\n            return n._process(t);\n          }),\n          this.refresh(),\n          this._process();\n      }\n      var t = n.prototype;\n      return (\n        (t.refresh = function() {\n          var e = this,\n            t = this._scrollElement === this._scrollElement.window ? bn : In,\n            o = 'auto' === this._config.method ? t : this._config.method,\n            r = o === In ? this._getScrollTop() : 0;\n          (this._offsets = []),\n            (this._targets = []),\n            (this._scrollHeight = this._getScrollHeight()),\n            [].slice\n              .call(document.querySelectorAll(this._selector))\n              .map(function(t) {\n                var e,\n                  n = _.getSelectorFromElement(t);\n                if ((n && (e = document.querySelector(n)), e)) {\n                  var i = e.getBoundingClientRect();\n                  if (i.width || i.height) return [g(e)[o]().top + r, n];\n                }\n                return null;\n              })\n              .filter(function(t) {\n                return t;\n              })\n              .sort(function(t, e) {\n                return t[0] - e[0];\n              })\n              .forEach(function(t) {\n                e._offsets.push(t[0]), e._targets.push(t[1]);\n              });\n        }),\n        (t.dispose = function() {\n          g.removeData(this._element, ln),\n            g(this._scrollElement).off(cn),\n            (this._element = null),\n            (this._scrollElement = null),\n            (this._config = null),\n            (this._selector = null),\n            (this._offsets = null),\n            (this._targets = null),\n            (this._activeTarget = null),\n            (this._scrollHeight = null);\n        }),\n        (t._getConfig = function(t) {\n          if ('string' != typeof (t = l({}, un, 'object' == typeof t && t ? t : {})).target) {\n            var e = g(t.target).attr('id');\n            e || ((e = _.getUID(an)), g(t.target).attr('id', e)), (t.target = '#' + e);\n          }\n          return _.typeCheckConfig(an, t, fn), t;\n        }),\n        (t._getScrollTop = function() {\n          return this._scrollElement === window\n            ? this._scrollElement.pageYOffset\n            : this._scrollElement.scrollTop;\n        }),\n        (t._getScrollHeight = function() {\n          return (\n            this._scrollElement.scrollHeight ||\n            Math.max(document.body.scrollHeight, document.documentElement.scrollHeight)\n          );\n        }),\n        (t._getOffsetHeight = function() {\n          return this._scrollElement === window\n            ? window.innerHeight\n            : this._scrollElement.getBoundingClientRect().height;\n        }),\n        (t._process = function() {\n          var t = this._getScrollTop() + this._config.offset,\n            e = this._getScrollHeight(),\n            n = this._config.offset + e - this._getOffsetHeight();\n          if ((this._scrollHeight !== e && this.refresh(), n <= t)) {\n            var i = this._targets[this._targets.length - 1];\n            this._activeTarget !== i && this._activate(i);\n          } else {\n            if (this._activeTarget && t < this._offsets[0] && 0 < this._offsets[0])\n              return (this._activeTarget = null), void this._clear();\n            for (var o = this._offsets.length; o--; ) {\n              this._activeTarget !== this._targets[o] &&\n                t >= this._offsets[o] &&\n                ('undefined' == typeof this._offsets[o + 1] || t < this._offsets[o + 1]) &&\n                this._activate(this._targets[o]);\n            }\n          }\n        }),\n        (t._activate = function(e) {\n          (this._activeTarget = e), this._clear();\n          var t = this._selector.split(',').map(function(t) {\n              return t + '[data-target=\"' + e + '\"],' + t + '[href=\"' + e + '\"]';\n            }),\n            n = g([].slice.call(document.querySelectorAll(t.join(','))));\n          n.hasClass(gn)\n            ? (n\n                .closest(Cn)\n                .find(Sn)\n                .addClass(_n),\n              n.addClass(_n))\n            : (n.addClass(_n),\n              n\n                .parents(pn)\n                .prev(vn + ', ' + En)\n                .addClass(_n),\n              n\n                .parents(pn)\n                .prev(yn)\n                .children(vn)\n                .addClass(_n)),\n            g(this._scrollElement).trigger(dn.ACTIVATE, { relatedTarget: e });\n        }),\n        (t._clear = function() {\n          [].slice\n            .call(document.querySelectorAll(this._selector))\n            .filter(function(t) {\n              return t.classList.contains(_n);\n            })\n            .forEach(function(t) {\n              return t.classList.remove(_n);\n            });\n        }),\n        (n._jQueryInterface = function(e) {\n          return this.each(function() {\n            var t = g(this).data(ln);\n            if (\n              (t || ((t = new n(this, 'object' == typeof e && e)), g(this).data(ln, t)),\n              'string' == typeof e)\n            ) {\n              if ('undefined' == typeof t[e]) throw new TypeError('No method named \"' + e + '\"');\n              t[e]();\n            }\n          });\n        }),\n        s(n, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return un;\n            },\n          },\n        ]),\n        n\n      );\n    })();\n  g(window).on(dn.LOAD_DATA_API, function() {\n    for (var t = [].slice.call(document.querySelectorAll(mn)), e = t.length; e--; ) {\n      var n = g(t[e]);\n      Dn._jQueryInterface.call(n, n.data());\n    }\n  }),\n    (g.fn[an] = Dn._jQueryInterface),\n    (g.fn[an].Constructor = Dn),\n    (g.fn[an].noConflict = function() {\n      return (g.fn[an] = hn), Dn._jQueryInterface;\n    });\n  var wn = 'bs.tab',\n    An = '.' + wn,\n    Nn = g.fn.tab,\n    On = {\n      HIDE: 'hide' + An,\n      HIDDEN: 'hidden' + An,\n      SHOW: 'show' + An,\n      SHOWN: 'shown' + An,\n      CLICK_DATA_API: 'click' + An + '.data-api',\n    },\n    kn = 'dropdown-menu',\n    Pn = 'active',\n    Ln = 'disabled',\n    jn = 'fade',\n    Hn = 'show',\n    Rn = '.dropdown',\n    xn = '.nav, .list-group',\n    Fn = '.active',\n    Un = '> li > .active',\n    Wn = '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    qn = '.dropdown-toggle',\n    Mn = '> .dropdown-menu .active',\n    Kn = (function() {\n      function i(t) {\n        this._element = t;\n      }\n      var t = i.prototype;\n      return (\n        (t.show = function() {\n          var n = this;\n          if (\n            !(\n              (this._element.parentNode &&\n                this._element.parentNode.nodeType === Node.ELEMENT_NODE &&\n                g(this._element).hasClass(Pn)) ||\n              g(this._element).hasClass(Ln)\n            )\n          ) {\n            var t,\n              i,\n              e = g(this._element).closest(xn)[0],\n              o = _.getSelectorFromElement(this._element);\n            if (e) {\n              var r = 'UL' === e.nodeName || 'OL' === e.nodeName ? Un : Fn;\n              i = (i = g.makeArray(g(e).find(r)))[i.length - 1];\n            }\n            var s = g.Event(On.HIDE, { relatedTarget: this._element }),\n              a = g.Event(On.SHOW, { relatedTarget: i });\n            if (\n              (i && g(i).trigger(s),\n              g(this._element).trigger(a),\n              !a.isDefaultPrevented() && !s.isDefaultPrevented())\n            ) {\n              o && (t = document.querySelector(o)), this._activate(this._element, e);\n              var l = function() {\n                var t = g.Event(On.HIDDEN, { relatedTarget: n._element }),\n                  e = g.Event(On.SHOWN, { relatedTarget: i });\n                g(i).trigger(t), g(n._element).trigger(e);\n              };\n              t ? this._activate(t, t.parentNode, l) : l();\n            }\n          }\n        }),\n        (t.dispose = function() {\n          g.removeData(this._element, wn), (this._element = null);\n        }),\n        (t._activate = function(t, e, n) {\n          var i = this,\n            o = (!e || ('UL' !== e.nodeName && 'OL' !== e.nodeName)\n              ? g(e).children(Fn)\n              : g(e).find(Un))[0],\n            r = n && o && g(o).hasClass(jn),\n            s = function() {\n              return i._transitionComplete(t, o, n);\n            };\n          if (o && r) {\n            var a = _.getTransitionDurationFromElement(o);\n            g(o)\n              .removeClass(Hn)\n              .one(_.TRANSITION_END, s)\n              .emulateTransitionEnd(a);\n          } else s();\n        }),\n        (t._transitionComplete = function(t, e, n) {\n          if (e) {\n            g(e).removeClass(Pn);\n            var i = g(e.parentNode).find(Mn)[0];\n            i && g(i).removeClass(Pn),\n              'tab' === e.getAttribute('role') && e.setAttribute('aria-selected', !1);\n          }\n          if (\n            (g(t).addClass(Pn),\n            'tab' === t.getAttribute('role') && t.setAttribute('aria-selected', !0),\n            _.reflow(t),\n            t.classList.contains(jn) && t.classList.add(Hn),\n            t.parentNode && g(t.parentNode).hasClass(kn))\n          ) {\n            var o = g(t).closest(Rn)[0];\n            if (o) {\n              var r = [].slice.call(o.querySelectorAll(qn));\n              g(r).addClass(Pn);\n            }\n            t.setAttribute('aria-expanded', !0);\n          }\n          n && n();\n        }),\n        (i._jQueryInterface = function(n) {\n          return this.each(function() {\n            var t = g(this),\n              e = t.data(wn);\n            if ((e || ((e = new i(this)), t.data(wn, e)), 'string' == typeof n)) {\n              if ('undefined' == typeof e[n]) throw new TypeError('No method named \"' + n + '\"');\n              e[n]();\n            }\n          });\n        }),\n        s(i, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n        ]),\n        i\n      );\n    })();\n  g(document).on(On.CLICK_DATA_API, Wn, function(t) {\n    t.preventDefault(), Kn._jQueryInterface.call(g(this), 'show');\n  }),\n    (g.fn.tab = Kn._jQueryInterface),\n    (g.fn.tab.Constructor = Kn),\n    (g.fn.tab.noConflict = function() {\n      return (g.fn.tab = Nn), Kn._jQueryInterface;\n    });\n  var Qn = 'toast',\n    Bn = 'bs.toast',\n    Vn = '.' + Bn,\n    Yn = g.fn[Qn],\n    zn = {\n      CLICK_DISMISS: 'click.dismiss' + Vn,\n      HIDE: 'hide' + Vn,\n      HIDDEN: 'hidden' + Vn,\n      SHOW: 'show' + Vn,\n      SHOWN: 'shown' + Vn,\n    },\n    Xn = 'fade',\n    $n = 'hide',\n    Gn = 'show',\n    Jn = 'showing',\n    Zn = { animation: 'boolean', autohide: 'boolean', delay: 'number' },\n    ti = { animation: !0, autohide: !0, delay: 500 },\n    ei = '[data-dismiss=\"toast\"]',\n    ni = (function() {\n      function i(t, e) {\n        (this._element = t),\n          (this._config = this._getConfig(e)),\n          (this._timeout = null),\n          this._setListeners();\n      }\n      var t = i.prototype;\n      return (\n        (t.show = function() {\n          var t = this;\n          g(this._element).trigger(zn.SHOW),\n            this._config.animation && this._element.classList.add(Xn);\n          var e = function() {\n            t._element.classList.remove(Jn),\n              t._element.classList.add(Gn),\n              g(t._element).trigger(zn.SHOWN),\n              t._config.autohide && t.hide();\n          };\n          if (\n            (this._element.classList.remove($n),\n            this._element.classList.add(Jn),\n            this._config.animation)\n          ) {\n            var n = _.getTransitionDurationFromElement(this._element);\n            g(this._element)\n              .one(_.TRANSITION_END, e)\n              .emulateTransitionEnd(n);\n          } else e();\n        }),\n        (t.hide = function(t) {\n          var e = this;\n          this._element.classList.contains(Gn) &&\n            (g(this._element).trigger(zn.HIDE),\n            t\n              ? this._close()\n              : (this._timeout = setTimeout(function() {\n                  e._close();\n                }, this._config.delay)));\n        }),\n        (t.dispose = function() {\n          clearTimeout(this._timeout),\n            (this._timeout = null),\n            this._element.classList.contains(Gn) && this._element.classList.remove(Gn),\n            g(this._element).off(zn.CLICK_DISMISS),\n            g.removeData(this._element, Bn),\n            (this._element = null),\n            (this._config = null);\n        }),\n        (t._getConfig = function(t) {\n          return (\n            (t = l({}, ti, g(this._element).data(), 'object' == typeof t && t ? t : {})),\n            _.typeCheckConfig(Qn, t, this.constructor.DefaultType),\n            t\n          );\n        }),\n        (t._setListeners = function() {\n          var t = this;\n          g(this._element).on(zn.CLICK_DISMISS, ei, function() {\n            return t.hide(!0);\n          });\n        }),\n        (t._close = function() {\n          var t = this,\n            e = function() {\n              t._element.classList.add($n), g(t._element).trigger(zn.HIDDEN);\n            };\n          if ((this._element.classList.remove(Gn), this._config.animation)) {\n            var n = _.getTransitionDurationFromElement(this._element);\n            g(this._element)\n              .one(_.TRANSITION_END, e)\n              .emulateTransitionEnd(n);\n          } else e();\n        }),\n        (i._jQueryInterface = function(n) {\n          return this.each(function() {\n            var t = g(this),\n              e = t.data(Bn);\n            if (\n              (e || ((e = new i(this, 'object' == typeof n && n)), t.data(Bn, e)),\n              'string' == typeof n)\n            ) {\n              if ('undefined' == typeof e[n]) throw new TypeError('No method named \"' + n + '\"');\n              e[n](this);\n            }\n          });\n        }),\n        s(i, null, [\n          {\n            key: 'VERSION',\n            get: function() {\n              return '4.3.1';\n            },\n          },\n          {\n            key: 'DefaultType',\n            get: function() {\n              return Zn;\n            },\n          },\n          {\n            key: 'Default',\n            get: function() {\n              return ti;\n            },\n          },\n        ]),\n        i\n      );\n    })();\n  (g.fn[Qn] = ni._jQueryInterface),\n    (g.fn[Qn].Constructor = ni),\n    (g.fn[Qn].noConflict = function() {\n      return (g.fn[Qn] = Yn), ni._jQueryInterface;\n    }),\n    (function() {\n      if ('undefined' == typeof g)\n        throw new TypeError(\n          \"Bootstrap's JavaScript requires jQuery. jQuery must be included before Bootstrap's JavaScript.\",\n        );\n      var t = g.fn.jquery.split(' ')[0].split('.');\n      if ((t[0] < 2 && t[1] < 9) || (1 === t[0] && 9 === t[1] && t[2] < 1) || 4 <= t[0])\n        throw new Error(\n          \"Bootstrap's JavaScript requires at least jQuery v1.9.1 but less than v4.0.0\",\n        );\n    })(),\n    (t.Util = _),\n    (t.Alert = p),\n    (t.Button = P),\n    (t.Carousel = lt),\n    (t.Collapse = bt),\n    (t.Dropdown = Jt),\n    (t.Modal = ve),\n    (t.Popover = sn),\n    (t.Scrollspy = Dn),\n    (t.Tab = Kn),\n    (t.Toast = ni),\n    (t.Tooltip = Be),\n    Object.defineProperty(t, '__esModule', { value: !0 });\n});\n//# sourceMappingURL=bootstrap.min.js.map\n\n/*------------------------------------------------------------------*/\n/*\t04) Jarallax Elements\n/*------------------------------------------------------------------*/\n\n/*!\n * Name    : Elements Extension for Jarallax\n * Version : 1.0.0\n * Author  : nK <https://nkdev.info>\n * GitHub  : https://github.com/nk-o/jarallax\n */ !(function(n) {\n  var o = {};\n  function r(t) {\n    if (o[t]) return o[t].exports;\n    var e = (o[t] = { i: t, l: !1, exports: {} });\n    return n[t].call(e.exports, e, e.exports, r), (e.l = !0), e.exports;\n  }\n  (r.m = n),\n    (r.c = o),\n    (r.d = function(t, e, n) {\n      r.o(t, e) || Object.defineProperty(t, e, { enumerable: !0, get: n });\n    }),\n    (r.r = function(t) {\n      'undefined' != typeof Symbol &&\n        Symbol.toStringTag &&\n        Object.defineProperty(t, Symbol.toStringTag, { value: 'Module' }),\n        Object.defineProperty(t, '__esModule', { value: !0 });\n    }),\n    (r.t = function(e, t) {\n      if ((1 & t && (e = r(e)), 8 & t)) return e;\n      if (4 & t && 'object' == typeof e && e && e.__esModule) return e;\n      var n = Object.create(null);\n      if (\n        (r.r(n),\n        Object.defineProperty(n, 'default', { enumerable: !0, value: e }),\n        2 & t && 'string' != typeof e)\n      )\n        for (var o in e)\n          r.d(\n            n,\n            o,\n            function(t) {\n              return e[t];\n            }.bind(null, o),\n          );\n      return n;\n    }),\n    (r.n = function(t) {\n      var e =\n        t && t.__esModule\n          ? function() {\n              return t.default;\n            }\n          : function() {\n              return t;\n            };\n      return r.d(e, 'a', e), e;\n    }),\n    (r.o = function(t, e) {\n      return Object.prototype.hasOwnProperty.call(t, e);\n    }),\n    (r.p = ''),\n    r((r.s = 0));\n})([\n  function(t, e, n) {\n    t.exports = n(1);\n  },\n  function(t, e, n) {\n    'use strict';\n    var o = r(n(2));\n    function r(t) {\n      return t && t.__esModule ? t : { default: t };\n    }\n    (0, r(n(3)).default)(),\n      (0, o.default)(function() {\n        'undefined' != typeof jarallax &&\n          jarallax(document.querySelectorAll('[data-jarallax-element]'));\n      });\n  },\n  function(t, e, n) {\n    'use strict';\n    t.exports = function(t) {\n      'complete' === document.readyState || 'interactive' === document.readyState\n        ? t.call()\n        : document.attachEvent\n        ? document.attachEvent('onreadystatechange', function() {\n            'interactive' === document.readyState && t.call();\n          })\n        : document.addEventListener && document.addEventListener('DOMContentLoaded', t);\n    };\n  },\n  function(t, e, n) {\n    'use strict';\n    Object.defineProperty(e, '__esModule', { value: !0 }),\n      (e.default = function() {\n        var t = 0 < arguments.length && void 0 !== arguments[0] ? arguments[0] : i.default.jarallax;\n        if (void 0 === t) return;\n        var e = t.constructor;\n        [\n          'initImg',\n          'canInitParallax',\n          'init',\n          'destroy',\n          'clipContainer',\n          'coverImage',\n          'isVisible',\n          'onScroll',\n          'onResize',\n        ].forEach(function(f) {\n          var y = e.prototype[f];\n          e.prototype[f] = function() {\n            var t = this,\n              e = arguments || [];\n            if (\n              ('initImg' === f &&\n                null !== t.$item.getAttribute('data-jarallax-element') &&\n                ((t.options.type = 'element'),\n                (t.pureOptions.speed =\n                  t.$item.getAttribute('data-jarallax-element') || t.pureOptions.speed)),\n              'element' !== t.options.type)\n            )\n              return y.apply(t, e);\n            switch (((t.pureOptions.threshold = t.$item.getAttribute('data-threshold') || ''), f)) {\n              case 'init':\n                var n = t.pureOptions.speed.split(' ');\n                (t.options.speed = t.pureOptions.speed || 0),\n                  (t.options.speedY = n[0] ? parseFloat(n[0]) : 0),\n                  (t.options.speedX = n[1] ? parseFloat(n[1]) : 0);\n                var o = t.pureOptions.threshold.split(' ');\n                (t.options.thresholdY = o[0] ? parseFloat(o[0]) : null),\n                  (t.options.thresholdX = o[1] ? parseFloat(o[1]) : null),\n                  y.apply(t, e);\n                var r = t.$item.getAttribute('data-jarallax-original-styles');\n                return r && t.$item.setAttribute('style', r), !0;\n              case 'onResize':\n                var i = t.css(t.$item, 'transform');\n                t.css(t.$item, { transform: '' });\n                var a = t.$item.getBoundingClientRect();\n                (t.itemData = {\n                  width: a.width,\n                  height: a.height,\n                  y: a.top + t.getWindowData().y,\n                  x: a.left,\n                }),\n                  t.css(t.$item, { transform: i });\n                break;\n              case 'onScroll':\n                var l = t.getWindowData(),\n                  s = (l.y + l.height / 2 - t.itemData.y - t.itemData.height / 2) / (l.height / 2),\n                  u = s * t.options.speedY,\n                  c = s * t.options.speedX,\n                  d = u,\n                  p = c;\n                null !== t.options.thresholdY && u > t.options.thresholdY && (d = 0),\n                  null !== t.options.thresholdX && c > t.options.thresholdX && (p = 0),\n                  t.css(t.$item, { transform: 'translate3d(' + p + 'px,' + d + 'px,0)' });\n                break;\n              case 'initImg':\n              case 'isVisible':\n              case 'clipContainer':\n              case 'coverImage':\n                return !0;\n            }\n            return y.apply(t, e);\n          };\n        });\n      });\n    var o,\n      r = n(4),\n      i = (o = r) && o.__esModule ? o : { default: o };\n  },\n  function(n, t, e) {\n    'use strict';\n    (function(t) {\n      var e;\n      (e =\n        'undefined' != typeof window\n          ? window\n          : void 0 !== t\n          ? t\n          : 'undefined' != typeof self\n          ? self\n          : {}),\n        (n.exports = e);\n    }.call(this, e(5)));\n  },\n  function(t, e, n) {\n    'use strict';\n    var o,\n      r =\n        'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator\n          ? function(t) {\n              return typeof t;\n            }\n          : function(t) {\n              return t &&\n                'function' == typeof Symbol &&\n                t.constructor === Symbol &&\n                t !== Symbol.prototype\n                ? 'symbol'\n                : typeof t;\n            };\n    o = (function() {\n      return this;\n    })();\n    try {\n      o = o || new Function('return this')();\n    } catch (t) {\n      'object' === ('undefined' == typeof window ? 'undefined' : r(window)) && (o = window);\n    }\n    t.exports = o;\n  },\n]);\n//# sourceMappingURL=jarallax-element.min.js.map\n\n/*------------------------------------------------------------------*/\n/*\t05) Jarallax\n/*------------------------------------------------------------------*/\n\n/*!\n * Name    : Just Another Parallax [Jarallax]\n * Version : 1.11.0\n * Author  : nK <https://nkdev.info>\n * GitHub  : https://github.com/nk-o/jarallax\n */ !(function(n) {\n  var i = {};\n  function o(e) {\n    if (i[e]) return i[e].exports;\n    var t = (i[e] = { i: e, l: !1, exports: {} });\n    return n[e].call(t.exports, t, t.exports, o), (t.l = !0), t.exports;\n  }\n  (o.m = n),\n    (o.c = i),\n    (o.d = function(e, t, n) {\n      o.o(e, t) || Object.defineProperty(e, t, { enumerable: !0, get: n });\n    }),\n    (o.r = function(e) {\n      'undefined' != typeof Symbol &&\n        Symbol.toStringTag &&\n        Object.defineProperty(e, Symbol.toStringTag, { value: 'Module' }),\n        Object.defineProperty(e, '__esModule', { value: !0 });\n    }),\n    (o.t = function(t, e) {\n      if ((1 & e && (t = o(t)), 8 & e)) return t;\n      if (4 & e && 'object' == typeof t && t && t.__esModule) return t;\n      var n = Object.create(null);\n      if (\n        (o.r(n),\n        Object.defineProperty(n, 'default', { enumerable: !0, value: t }),\n        2 & e && 'string' != typeof t)\n      )\n        for (var i in t)\n          o.d(\n            n,\n            i,\n            function(e) {\n              return t[e];\n            }.bind(null, i),\n          );\n      return n;\n    }),\n    (o.n = function(e) {\n      var t =\n        e && e.__esModule\n          ? function() {\n              return e.default;\n            }\n          : function() {\n              return e;\n            };\n      return o.d(t, 'a', t), t;\n    }),\n    (o.o = function(e, t) {\n      return Object.prototype.hasOwnProperty.call(e, t);\n    }),\n    (o.p = ''),\n    o((o.s = 11));\n})([\n  ,\n  ,\n  function(e, t, n) {\n    'use strict';\n    e.exports = function(e) {\n      'complete' === document.readyState || 'interactive' === document.readyState\n        ? e.call()\n        : document.attachEvent\n        ? document.attachEvent('onreadystatechange', function() {\n            'interactive' === document.readyState && e.call();\n          })\n        : document.addEventListener && document.addEventListener('DOMContentLoaded', e);\n    };\n  },\n  ,\n  function(n, e, t) {\n    'use strict';\n    (function(e) {\n      var t;\n      (t =\n        'undefined' != typeof window\n          ? window\n          : void 0 !== e\n          ? e\n          : 'undefined' != typeof self\n          ? self\n          : {}),\n        (n.exports = t);\n    }.call(this, t(5)));\n  },\n  function(e, t, n) {\n    'use strict';\n    var i,\n      o =\n        'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator\n          ? function(e) {\n              return typeof e;\n            }\n          : function(e) {\n              return e &&\n                'function' == typeof Symbol &&\n                e.constructor === Symbol &&\n                e !== Symbol.prototype\n                ? 'symbol'\n                : typeof e;\n            };\n    i = (function() {\n      return this;\n    })();\n    try {\n      i = i || new Function('return this')();\n    } catch (e) {\n      'object' === ('undefined' == typeof window ? 'undefined' : o(window)) && (i = window);\n    }\n    e.exports = i;\n  },\n  ,\n  ,\n  ,\n  ,\n  ,\n  function(e, t, n) {\n    e.exports = n(12);\n  },\n  function(e, t, n) {\n    'use strict';\n    var i =\n        'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator\n          ? function(e) {\n              return typeof e;\n            }\n          : function(e) {\n              return e &&\n                'function' == typeof Symbol &&\n                e.constructor === Symbol &&\n                e !== Symbol.prototype\n                ? 'symbol'\n                : typeof e;\n            },\n      o = l(n(2)),\n      a = n(4),\n      r = l(n(13));\n    function l(e) {\n      return e && e.__esModule ? e : { default: e };\n    }\n    var s = a.window.jarallax;\n    if (\n      ((a.window.jarallax = r.default),\n      (a.window.jarallax.noConflict = function() {\n        return (a.window.jarallax = s), this;\n      }),\n      void 0 !== a.jQuery)\n    ) {\n      var c = function() {\n        var e = arguments || [];\n        Array.prototype.unshift.call(e, this);\n        var t = r.default.apply(a.window, e);\n        return 'object' !== (void 0 === t ? 'undefined' : i(t)) ? t : this;\n      };\n      c.constructor = r.default.constructor;\n      var u = a.jQuery.fn.jarallax;\n      (a.jQuery.fn.jarallax = c),\n        (a.jQuery.fn.jarallax.noConflict = function() {\n          return (a.jQuery.fn.jarallax = u), this;\n        });\n    }\n    (0, o.default)(function() {\n      (0, r.default)(document.querySelectorAll('[data-jarallax]'));\n    });\n  },\n  function(e, I, P) {\n    'use strict';\n    (function(e) {\n      Object.defineProperty(I, '__esModule', { value: !0 });\n      var s = function(e, t) {\n          if (Array.isArray(e)) return e;\n          if (Symbol.iterator in Object(e))\n            return (function(e, t) {\n              var n = [],\n                i = !0,\n                o = !1,\n                a = void 0;\n              try {\n                for (\n                  var r, l = e[Symbol.iterator]();\n                  !(i = (r = l.next()).done) && (n.push(r.value), !t || n.length !== t);\n                  i = !0\n                );\n              } catch (e) {\n                (o = !0), (a = e);\n              } finally {\n                try {\n                  !i && l.return && l.return();\n                } finally {\n                  if (o) throw a;\n                }\n              }\n              return n;\n            })(e, t);\n          throw new TypeError('Invalid attempt to destructure non-iterable instance');\n        },\n        t = function(e, t, n) {\n          return t && i(e.prototype, t), n && i(e, n), e;\n        };\n      function i(e, t) {\n        for (var n = 0; n < t.length; n++) {\n          var i = t[n];\n          (i.enumerable = i.enumerable || !1),\n            (i.configurable = !0),\n            'value' in i && (i.writable = !0),\n            Object.defineProperty(e, i.key, i);\n        }\n      }\n      var c =\n          'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator\n            ? function(e) {\n                return typeof e;\n              }\n            : function(e) {\n                return e &&\n                  'function' == typeof Symbol &&\n                  e.constructor === Symbol &&\n                  e !== Symbol.prototype\n                  ? 'symbol'\n                  : typeof e;\n              },\n        n = r(P(2)),\n        o = r(P(14)),\n        a = P(4);\n      function r(e) {\n        return e && e.__esModule ? e : { default: e };\n      }\n      var u =\n          -1 < navigator.userAgent.indexOf('MSIE ') ||\n          -1 < navigator.userAgent.indexOf('Trident/') ||\n          -1 < navigator.userAgent.indexOf('Edge/'),\n        l = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n          navigator.userAgent,\n        ),\n        d = (function() {\n          for (\n            var e = 'transform WebkitTransform MozTransform'.split(' '),\n              t = document.createElement('div'),\n              n = 0;\n            n < e.length;\n            n++\n          )\n            if (t && void 0 !== t.style[e[n]]) return e[n];\n          return !1;\n        })(),\n        m = void 0;\n      var v = void 0,\n        b = void 0,\n        p = void 0,\n        f = !1,\n        g = !1;\n      function y(e) {\n        (v = a.window.innerWidth || document.documentElement.clientWidth),\n          (b = l\n            ? (!m &&\n                document.body &&\n                (((m = document.createElement('div')).style.cssText =\n                  'position: fixed; top: -9999px; left: 0; height: 100vh; width: 0;'),\n                document.body.appendChild(m)),\n              (m ? m.clientHeight : 0) ||\n                a.window.innerHeight ||\n                document.documentElement.clientHeight)\n            : a.window.innerHeight || document.documentElement.clientHeight),\n          'object' !== (void 0 === e ? 'undefined' : c(e)) ||\n            ('load' !== e.type && 'dom-loaded' !== e.type) ||\n            (f = !0);\n      }\n      y(),\n        a.window.addEventListener('resize', y),\n        a.window.addEventListener('orientationchange', y),\n        a.window.addEventListener('load', y),\n        (0, n.default)(function() {\n          y({ type: 'dom-loaded' });\n        });\n      var h = [],\n        x = !1;\n      function w() {\n        if (h.length) {\n          p =\n            void 0 !== a.window.pageYOffset\n              ? a.window.pageYOffset\n              : (document.documentElement || document.body.parentNode || document.body).scrollTop;\n          var t = f || !x || x.width !== v || x.height !== b,\n            n = g || t || !x || x.y !== p;\n          (g = f = !1),\n            (t || n) &&\n              (h.forEach(function(e) {\n                t && e.onResize(), n && e.onScroll();\n              }),\n              (x = { width: v, height: b, y: p })),\n            (0, o.default)(w);\n        }\n      }\n      var A =\n          !!e.ResizeObserver &&\n          new e.ResizeObserver(function(e) {\n            e &&\n              e.length &&\n              (0, o.default)(function() {\n                e.forEach(function(e) {\n                  e.target && e.target.jarallax && (f || e.target.jarallax.onResize(), (g = !0));\n                });\n              });\n          }),\n        $ = 0,\n        S =\n          (t(j, [\n            {\n              key: 'css',\n              value: function(t, n) {\n                return 'string' == typeof n\n                  ? a.window.getComputedStyle(t).getPropertyValue(n)\n                  : (n.transform && d && (n[d] = n.transform),\n                    Object.keys(n).forEach(function(e) {\n                      t.style[e] = n[e];\n                    }),\n                    t);\n              },\n            },\n            {\n              key: 'extend',\n              value: function(n) {\n                var i = arguments;\n                return (\n                  (n = n || {}),\n                  Object.keys(arguments).forEach(function(t) {\n                    i[t] &&\n                      Object.keys(i[t]).forEach(function(e) {\n                        n[e] = i[t][e];\n                      });\n                  }),\n                  n\n                );\n              },\n            },\n            {\n              key: 'getWindowData',\n              value: function() {\n                return { width: v, height: b, y: p };\n              },\n            },\n            {\n              key: 'initImg',\n              value: function() {\n                var e = this,\n                  t = e.options.imgElement;\n                return (\n                  t && 'string' == typeof t && (t = e.$item.querySelector(t)),\n                  t instanceof Element || (t = null),\n                  t &&\n                    (e.options.keepImg\n                      ? (e.image.$item = t.cloneNode(!0))\n                      : ((e.image.$item = t), (e.image.$itemParent = t.parentNode)),\n                    (e.image.useImgTag = !0)),\n                  !(\n                    !e.image.$item &&\n                    (null === e.image.src &&\n                      ((e.image.src =\n                        'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'),\n                      (e.image.bgImage = e.css(e.$item, 'background-image'))),\n                    !e.image.bgImage || 'none' === e.image.bgImage)\n                  )\n                );\n              },\n            },\n            {\n              key: 'canInitParallax',\n              value: function() {\n                return d && !this.options.disableParallax();\n              },\n            },\n            {\n              key: 'init',\n              value: function() {\n                var e = this,\n                  t = {\n                    position: 'absolute',\n                    top: 0,\n                    left: 0,\n                    width: '100%',\n                    height: '100%',\n                    overflow: 'hidden',\n                    pointerEvents: 'none',\n                  },\n                  n = {};\n                if (!e.options.keepImg) {\n                  var i = e.$item.getAttribute('style');\n                  if (\n                    (i && e.$item.setAttribute('data-jarallax-original-styles', i),\n                    e.image.useImgTag)\n                  ) {\n                    var o = e.image.$item.getAttribute('style');\n                    o && e.image.$item.setAttribute('data-jarallax-original-styles', o);\n                  }\n                }\n                if (\n                  ('static' === e.css(e.$item, 'position') &&\n                    e.css(e.$item, { position: 'relative' }),\n                  'auto' === e.css(e.$item, 'z-index') && e.css(e.$item, { zIndex: 0 }),\n                  (e.image.$container = document.createElement('div')),\n                  e.css(e.image.$container, t),\n                  e.css(e.image.$container, { 'z-index': e.options.zIndex }),\n                  u && e.css(e.image.$container, { opacity: 0.9999 }),\n                  e.image.$container.setAttribute('id', 'jarallax-container-' + e.instanceID),\n                  e.$item.appendChild(e.image.$container),\n                  e.image.useImgTag\n                    ? (n = e.extend(\n                        {\n                          'object-fit': e.options.imgSize,\n                          'object-position': e.options.imgPosition,\n                          'font-family':\n                            'object-fit: ' +\n                            e.options.imgSize +\n                            '; object-position: ' +\n                            e.options.imgPosition +\n                            ';',\n                          'max-width': 'none',\n                        },\n                        t,\n                        n,\n                      ))\n                    : ((e.image.$item = document.createElement('div')),\n                      e.image.src &&\n                        (n = e.extend(\n                          {\n                            'background-position': e.options.imgPosition,\n                            'background-size': e.options.imgSize,\n                            'background-repeat': e.options.imgRepeat,\n                            'background-image': e.image.bgImage || 'url(\"' + e.image.src + '\")',\n                          },\n                          t,\n                          n,\n                        ))),\n                  ('opacity' !== e.options.type &&\n                    'scale' !== e.options.type &&\n                    'scale-opacity' !== e.options.type &&\n                    1 !== e.options.speed) ||\n                    (e.image.position = 'absolute'),\n                  'fixed' === e.image.position)\n                )\n                  for (var a = 0, r = e.$item; null !== r && r !== document && 0 === a; ) {\n                    var l =\n                      e.css(r, '-webkit-transform') ||\n                      e.css(r, '-moz-transform') ||\n                      e.css(r, 'transform');\n                    l && 'none' !== l && ((a = 1), (e.image.position = 'absolute')),\n                      (r = r.parentNode);\n                  }\n                (n.position = e.image.position),\n                  e.css(e.image.$item, n),\n                  e.image.$container.appendChild(e.image.$item),\n                  e.onResize(),\n                  e.onScroll(!0),\n                  e.options.automaticResize && A && A.observe(e.$item),\n                  e.options.onInit && e.options.onInit.call(e),\n                  'none' !== e.css(e.$item, 'background-image') &&\n                    e.css(e.$item, { 'background-image': 'none' }),\n                  e.addToParallaxList();\n              },\n            },\n            {\n              key: 'addToParallaxList',\n              value: function() {\n                h.push(this), 1 === h.length && w();\n              },\n            },\n            {\n              key: 'removeFromParallaxList',\n              value: function() {\n                var n = this;\n                h.forEach(function(e, t) {\n                  e.instanceID === n.instanceID && h.splice(t, 1);\n                });\n              },\n            },\n            {\n              key: 'destroy',\n              value: function() {\n                var e = this;\n                e.removeFromParallaxList();\n                var t = e.$item.getAttribute('data-jarallax-original-styles');\n                if (\n                  (e.$item.removeAttribute('data-jarallax-original-styles'),\n                  t ? e.$item.setAttribute('style', t) : e.$item.removeAttribute('style'),\n                  e.image.useImgTag)\n                ) {\n                  var n = e.image.$item.getAttribute('data-jarallax-original-styles');\n                  e.image.$item.removeAttribute('data-jarallax-original-styles'),\n                    n\n                      ? e.image.$item.setAttribute('style', t)\n                      : e.image.$item.removeAttribute('style'),\n                    e.image.$itemParent && e.image.$itemParent.appendChild(e.image.$item);\n                }\n                e.$clipStyles && e.$clipStyles.parentNode.removeChild(e.$clipStyles),\n                  e.image.$container &&\n                    e.image.$container.parentNode.removeChild(e.image.$container),\n                  e.options.onDestroy && e.options.onDestroy.call(e),\n                  delete e.$item.jarallax;\n              },\n            },\n            {\n              key: 'clipContainer',\n              value: function() {\n                if ('fixed' === this.image.position) {\n                  var e = this,\n                    t = e.image.$container.getBoundingClientRect(),\n                    n = t.width,\n                    i = t.height;\n                  e.$clipStyles ||\n                    ((e.$clipStyles = document.createElement('style')),\n                    e.$clipStyles.setAttribute('type', 'text/css'),\n                    e.$clipStyles.setAttribute('id', 'jarallax-clip-' + e.instanceID),\n                    (document.head || document.getElementsByTagName('head')[0]).appendChild(\n                      e.$clipStyles,\n                    ));\n                  var o =\n                    '#jarallax-container-' +\n                    e.instanceID +\n                    ' {\\n           clip: rect(0 ' +\n                    n +\n                    'px ' +\n                    i +\n                    'px 0);\\n           clip: rect(0, ' +\n                    n +\n                    'px, ' +\n                    i +\n                    'px, 0);\\n        }';\n                  e.$clipStyles.styleSheet\n                    ? (e.$clipStyles.styleSheet.cssText = o)\n                    : (e.$clipStyles.innerHTML = o);\n                }\n              },\n            },\n            {\n              key: 'coverImage',\n              value: function() {\n                var e = this,\n                  t = e.image.$container.getBoundingClientRect(),\n                  n = t.height,\n                  i = e.options.speed,\n                  o = 'scroll' === e.options.type || 'scroll-opacity' === e.options.type,\n                  a = 0,\n                  r = n,\n                  l = 0;\n                return (\n                  o &&\n                    (i < 0\n                      ? ((a = i * Math.max(n, b)), b < n && (a -= i * (n - b)))\n                      : (a = i * (n + b)),\n                    1 < i\n                      ? (r = Math.abs(a - b))\n                      : i < 0\n                      ? (r = a / i + Math.abs(a))\n                      : (r += (b - n) * (1 - i)),\n                    (a /= 2)),\n                  (e.parallaxScrollDistance = a),\n                  (l = o ? (b - r) / 2 : (n - r) / 2),\n                  e.css(e.image.$item, {\n                    height: r + 'px',\n                    marginTop: l + 'px',\n                    left: 'fixed' === e.image.position ? t.left + 'px' : '0',\n                    width: t.width + 'px',\n                  }),\n                  e.options.onCoverImage && e.options.onCoverImage.call(e),\n                  { image: { height: r, marginTop: l }, container: t }\n                );\n              },\n            },\n            {\n              key: 'isVisible',\n              value: function() {\n                return this.isElementInViewport || !1;\n              },\n            },\n            {\n              key: 'onScroll',\n              value: function(e) {\n                var t = this,\n                  n = t.$item.getBoundingClientRect(),\n                  i = n.top,\n                  o = n.height,\n                  a = {},\n                  r = n;\n                if (\n                  (t.options.elementInViewport &&\n                    (r = t.options.elementInViewport.getBoundingClientRect()),\n                  (t.isElementInViewport =\n                    0 <= r.bottom && 0 <= r.right && r.top <= b && r.left <= v),\n                  e || t.isElementInViewport)\n                ) {\n                  var l = Math.max(0, i),\n                    s = Math.max(0, o + i),\n                    c = Math.max(0, -i),\n                    u = Math.max(0, i + o - b),\n                    d = Math.max(0, o - (i + o - b)),\n                    m = Math.max(0, -i + b - o),\n                    p = 1 - (2 * (b - i)) / (b + o),\n                    f = 1;\n                  if (\n                    (o < b ? (f = 1 - (c || u) / o) : s <= b ? (f = s / b) : d <= b && (f = d / b),\n                    ('opacity' !== t.options.type &&\n                      'scale-opacity' !== t.options.type &&\n                      'scroll-opacity' !== t.options.type) ||\n                      ((a.transform = 'translate3d(0,0,0)'), (a.opacity = f)),\n                    'scale' === t.options.type || 'scale-opacity' === t.options.type)\n                  ) {\n                    var g = 1;\n                    t.options.speed < 0\n                      ? (g -= t.options.speed * f)\n                      : (g += t.options.speed * (1 - f)),\n                      (a.transform = 'scale(' + g + ') translate3d(0,0,0)');\n                  }\n                  if ('scroll' === t.options.type || 'scroll-opacity' === t.options.type) {\n                    var y = t.parallaxScrollDistance * p;\n                    'absolute' === t.image.position && (y -= i),\n                      (a.transform = 'translate3d(0,' + y + 'px,0)');\n                  }\n                  t.css(t.image.$item, a),\n                    t.options.onScroll &&\n                      t.options.onScroll.call(t, {\n                        section: n,\n                        beforeTop: l,\n                        beforeTopEnd: s,\n                        afterTop: c,\n                        beforeBottom: u,\n                        beforeBottomEnd: d,\n                        afterBottom: m,\n                        visiblePercent: f,\n                        fromViewportCenter: p,\n                      });\n                }\n              },\n            },\n            {\n              key: 'onResize',\n              value: function() {\n                this.coverImage(), this.clipContainer();\n              },\n            },\n          ]),\n          j);\n      function j(e, t) {\n        !(function(e, t) {\n          if (!(e instanceof t)) throw new TypeError('Cannot call a class as a function');\n        })(this, j);\n        var n = this;\n        (n.instanceID = $++),\n          (n.$item = e),\n          (n.defaults = {\n            type: 'scroll',\n            speed: 0.5,\n            imgSrc: null,\n            imgElement: '.jarallax-img',\n            imgSize: 'cover',\n            imgPosition: '50% 50%',\n            imgRepeat: 'no-repeat',\n            keepImg: !1,\n            elementInViewport: null,\n            zIndex: -100,\n            disableParallax: !1,\n            disableVideo: !1,\n            automaticResize: !0,\n            videoSrc: null,\n            videoStartTime: 0,\n            videoEndTime: 0,\n            videoVolume: 0,\n            videoLoop: !0,\n            videoPlayOnlyVisible: !0,\n            videoLazyLoading: !0,\n            onScroll: null,\n            onInit: null,\n            onDestroy: null,\n            onCoverImage: null,\n          });\n        var i = n.$item.dataset || {},\n          o = {};\n        if (\n          (Object.keys(i).forEach(function(e) {\n            var t = e.substr(0, 1).toLowerCase() + e.substr(1);\n            t && void 0 !== n.defaults[t] && (o[t] = i[e]);\n          }),\n          (n.options = n.extend({}, n.defaults, o, t)),\n          (n.pureOptions = n.extend({}, n.options)),\n          Object.keys(n.options).forEach(function(e) {\n            'true' === n.options[e]\n              ? (n.options[e] = !0)\n              : 'false' === n.options[e] && (n.options[e] = !1);\n          }),\n          (n.options.speed = Math.min(2, Math.max(-1, parseFloat(n.options.speed)))),\n          'string' == typeof n.options.disableParallax &&\n            (n.options.disableParallax = new RegExp(n.options.disableParallax)),\n          n.options.disableParallax instanceof RegExp)\n        ) {\n          var a = n.options.disableParallax;\n          n.options.disableParallax = function() {\n            return a.test(navigator.userAgent);\n          };\n        }\n        if (\n          ('function' != typeof n.options.disableParallax &&\n            (n.options.disableParallax = function() {\n              return !1;\n            }),\n          'string' == typeof n.options.disableVideo &&\n            (n.options.disableVideo = new RegExp(n.options.disableVideo)),\n          n.options.disableVideo instanceof RegExp)\n        ) {\n          var r = n.options.disableVideo;\n          n.options.disableVideo = function() {\n            return r.test(navigator.userAgent);\n          };\n        }\n        'function' != typeof n.options.disableVideo &&\n          (n.options.disableVideo = function() {\n            return !1;\n          });\n        var l = n.options.elementInViewport;\n        l &&\n          'object' === (void 0 === l ? 'undefined' : c(l)) &&\n          void 0 !== l.length &&\n          (l = s(l, 1)[0]);\n        l instanceof Element || (l = null),\n          (n.options.elementInViewport = l),\n          (n.image = {\n            src: n.options.imgSrc || null,\n            $container: null,\n            useImgTag: !1,\n            position: /iPad|iPhone|iPod|Android/.test(navigator.userAgent) ? 'absolute' : 'fixed',\n          }),\n          n.initImg() && n.canInitParallax() && n.init();\n      }\n      function E(e, t) {\n        ('object' === ('undefined' == typeof HTMLElement ? 'undefined' : c(HTMLElement))\n          ? e instanceof HTMLElement\n          : e &&\n            'object' === (void 0 === e ? 'undefined' : c(e)) &&\n            null !== e &&\n            1 === e.nodeType &&\n            'string' == typeof e.nodeName) && (e = [e]);\n        for (\n          var n = t, i = Array.prototype.slice.call(arguments, 2), o = e.length, a = 0, r = void 0;\n          a < o;\n          a++\n        )\n          if (\n            ('object' === (void 0 === n ? 'undefined' : c(n)) || void 0 === n\n              ? e[a].jarallax || (e[a].jarallax = new S(e[a], n))\n              : e[a].jarallax && (r = e[a].jarallax[n].apply(e[a].jarallax, i)),\n            void 0 !== r)\n          )\n            return r;\n        return e;\n      }\n      (E.constructor = S), (I.default = E);\n    }.call(this, P(5)));\n  },\n  function(e, t, n) {\n    'use strict';\n    var i = n(15),\n      o =\n        i.requestAnimationFrame ||\n        i.webkitRequestAnimationFrame ||\n        i.mozRequestAnimationFrame ||\n        function(e) {\n          var t = +new Date(),\n            n = Math.max(0, 16 - (t - a)),\n            i = setTimeout(e, n);\n          return (a = t), i;\n        },\n      a = +new Date();\n    var r =\n      i.cancelAnimationFrame ||\n      i.webkitCancelAnimationFrame ||\n      i.mozCancelAnimationFrame ||\n      clearTimeout;\n    Function.prototype.bind && ((o = o.bind(i)), (r = r.bind(i))), ((e.exports = o).cancel = r);\n  },\n  function(n, e, t) {\n    'use strict';\n    (function(e) {\n      var t;\n      (t =\n        'undefined' != typeof window\n          ? window\n          : void 0 !== e\n          ? e\n          : 'undefined' != typeof self\n          ? self\n          : {}),\n        (n.exports = t);\n    }.call(this, t(5)));\n  },\n]);\n//# sourceMappingURL=jarallax.min.js.map\n\n/*------------------------------------------------------------------*/\n/*\t06) WOW \n/*------------------------------------------------------------------*/\n\n/*! WOW - v1.1.2 - 2015-04-07\n * Copyright (c) 2015 Matthieu Aussaguel; Licensed MIT */ (function() {\n  var a,\n    b,\n    c,\n    d,\n    e,\n    f = function(a, b) {\n      return function() {\n        return a.apply(b, arguments);\n      };\n    },\n    g =\n      [].indexOf ||\n      function(a) {\n        for (var b = 0, c = this.length; c > b; b++) if (b in this && this[b] === a) return b;\n        return -1;\n      };\n  (b = (function() {\n    function a() {}\n    return (\n      (a.prototype.extend = function(a, b) {\n        var c, d;\n        for (c in b) (d = b[c]), null == a[c] && (a[c] = d);\n        return a;\n      }),\n      (a.prototype.isMobile = function(a) {\n        return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(a);\n      }),\n      (a.prototype.createEvent = function(a, b, c, d) {\n        var e;\n        return (\n          null == b && (b = !1),\n          null == c && (c = !1),\n          null == d && (d = null),\n          null != document.createEvent\n            ? ((e = document.createEvent('CustomEvent')), e.initCustomEvent(a, b, c, d))\n            : null != document.createEventObject\n            ? ((e = document.createEventObject()), (e.eventType = a))\n            : (e.eventName = a),\n          e\n        );\n      }),\n      (a.prototype.emitEvent = function(a, b) {\n        return null != a.dispatchEvent\n          ? a.dispatchEvent(b)\n          : b in (null != a)\n          ? a[b]()\n          : 'on' + b in (null != a)\n          ? a['on' + b]()\n          : void 0;\n      }),\n      (a.prototype.addEvent = function(a, b, c) {\n        return null != a.addEventListener\n          ? a.addEventListener(b, c, !1)\n          : null != a.attachEvent\n          ? a.attachEvent('on' + b, c)\n          : (a[b] = c);\n      }),\n      (a.prototype.removeEvent = function(a, b, c) {\n        return null != a.removeEventListener\n          ? a.removeEventListener(b, c, !1)\n          : null != a.detachEvent\n          ? a.detachEvent('on' + b, c)\n          : delete a[b];\n      }),\n      (a.prototype.innerHeight = function() {\n        return 'innerHeight' in window ? window.innerHeight : document.documentElement.clientHeight;\n      }),\n      a\n    );\n  })()),\n    (c =\n      this.WeakMap ||\n      this.MozWeakMap ||\n      (c = (function() {\n        function a() {\n          (this.keys = []), (this.values = []);\n        }\n        return (\n          (a.prototype.get = function(a) {\n            var b, c, d, e, f;\n            for (f = this.keys, b = d = 0, e = f.length; e > d; b = ++d)\n              if (((c = f[b]), c === a)) return this.values[b];\n          }),\n          (a.prototype.set = function(a, b) {\n            var c, d, e, f, g;\n            for (g = this.keys, c = e = 0, f = g.length; f > e; c = ++e)\n              if (((d = g[c]), d === a)) return void (this.values[c] = b);\n            return this.keys.push(a), this.values.push(b);\n          }),\n          a\n        );\n      })())),\n    (a =\n      this.MutationObserver ||\n      this.WebkitMutationObserver ||\n      this.MozMutationObserver ||\n      (a = (function() {\n        function a() {\n          'undefined' != typeof console &&\n            null !== console &&\n            console.warn('MutationObserver is not supported by your browser.'),\n            'undefined' != typeof console &&\n              null !== console &&\n              console.warn(\n                'WOW.js cannot detect dom mutations, please call .sync() after loading new content.',\n              );\n        }\n        return (a.notSupported = !0), (a.prototype.observe = function() {}), a;\n      })())),\n    (d =\n      this.getComputedStyle ||\n      function(a) {\n        return (\n          (this.getPropertyValue = function(b) {\n            var c;\n            return (\n              'float' === b && (b = 'styleFloat'),\n              e.test(b) &&\n                b.replace(e, function(a, b) {\n                  return b.toUpperCase();\n                }),\n              (null != (c = a.currentStyle) ? c[b] : void 0) || null\n            );\n          }),\n          this\n        );\n      }),\n    (e = /(\\-([a-z]){1})/g),\n    (this.WOW = (function() {\n      function e(a) {\n        null == a && (a = {}),\n          (this.scrollCallback = f(this.scrollCallback, this)),\n          (this.scrollHandler = f(this.scrollHandler, this)),\n          (this.resetAnimation = f(this.resetAnimation, this)),\n          (this.start = f(this.start, this)),\n          (this.scrolled = !0),\n          (this.config = this.util().extend(a, this.defaults)),\n          (this.animationNameCache = new c()),\n          (this.wowEvent = this.util().createEvent(this.config.boxClass));\n      }\n      return (\n        (e.prototype.defaults = {\n          boxClass: 'wow',\n          animateClass: 'animated',\n          offset: 0,\n          mobile: !0,\n          live: !0,\n          callback: null,\n        }),\n        (e.prototype.init = function() {\n          var a;\n          return (\n            (this.element = window.document.documentElement),\n            'interactive' === (a = document.readyState) || 'complete' === a\n              ? this.start()\n              : this.util().addEvent(document, 'DOMContentLoaded', this.start),\n            (this.finished = [])\n          );\n        }),\n        (e.prototype.start = function() {\n          var b, c, d, e;\n          if (\n            ((this.stopped = !1),\n            (this.boxes = function() {\n              var a, c, d, e;\n              for (\n                d = this.element.querySelectorAll('.' + this.config.boxClass),\n                  e = [],\n                  a = 0,\n                  c = d.length;\n                c > a;\n                a++\n              )\n                (b = d[a]), e.push(b);\n              return e;\n            }.call(this)),\n            (this.all = function() {\n              var a, c, d, e;\n              for (d = this.boxes, e = [], a = 0, c = d.length; c > a; a++) (b = d[a]), e.push(b);\n              return e;\n            }.call(this)),\n            this.boxes.length)\n          )\n            if (this.disabled()) this.resetStyle();\n            else\n              for (e = this.boxes, c = 0, d = e.length; d > c; c++)\n                (b = e[c]), this.applyStyle(b, !0);\n          return (\n            this.disabled() ||\n              (this.util().addEvent(window, 'scroll', this.scrollHandler),\n              this.util().addEvent(window, 'resize', this.scrollHandler),\n              (this.interval = setInterval(this.scrollCallback, 50))),\n            this.config.live\n              ? new a(\n                  (function(a) {\n                    return function(b) {\n                      var c, d, e, f, g;\n                      for (g = [], c = 0, d = b.length; d > c; c++)\n                        (f = b[c]),\n                          g.push(\n                            function() {\n                              var a, b, c, d;\n                              for (c = f.addedNodes || [], d = [], a = 0, b = c.length; b > a; a++)\n                                (e = c[a]), d.push(this.doSync(e));\n                              return d;\n                            }.call(a),\n                          );\n                      return g;\n                    };\n                  })(this),\n                ).observe(document.body, { childList: !0, subtree: !0 })\n              : void 0\n          );\n        }),\n        (e.prototype.stop = function() {\n          return (\n            (this.stopped = !0),\n            this.util().removeEvent(window, 'scroll', this.scrollHandler),\n            this.util().removeEvent(window, 'resize', this.scrollHandler),\n            null != this.interval ? clearInterval(this.interval) : void 0\n          );\n        }),\n        (e.prototype.sync = function() {\n          return a.notSupported ? this.doSync(this.element) : void 0;\n        }),\n        (e.prototype.doSync = function(a) {\n          var b, c, d, e, f;\n          if ((null == a && (a = this.element), 1 === a.nodeType)) {\n            for (\n              a = a.parentNode || a,\n                e = a.querySelectorAll('.' + this.config.boxClass),\n                f = [],\n                c = 0,\n                d = e.length;\n              d > c;\n              c++\n            )\n              (b = e[c]),\n                g.call(this.all, b) < 0\n                  ? (this.boxes.push(b),\n                    this.all.push(b),\n                    this.stopped || this.disabled() ? this.resetStyle() : this.applyStyle(b, !0),\n                    f.push((this.scrolled = !0)))\n                  : f.push(void 0);\n            return f;\n          }\n        }),\n        (e.prototype.show = function(a) {\n          return (\n            this.applyStyle(a),\n            (a.className = a.className + ' ' + this.config.animateClass),\n            null != this.config.callback && this.config.callback(a),\n            this.util().emitEvent(a, this.wowEvent),\n            this.util().addEvent(a, 'animationend', this.resetAnimation),\n            this.util().addEvent(a, 'oanimationend', this.resetAnimation),\n            this.util().addEvent(a, 'webkitAnimationEnd', this.resetAnimation),\n            this.util().addEvent(a, 'MSAnimationEnd', this.resetAnimation),\n            a\n          );\n        }),\n        (e.prototype.applyStyle = function(a, b) {\n          var c, d, e;\n          return (\n            (d = a.getAttribute('data-wow-duration')),\n            (c = a.getAttribute('data-wow-delay')),\n            (e = a.getAttribute('data-wow-iteration')),\n            this.animate(\n              (function(f) {\n                return function() {\n                  return f.customStyle(a, b, d, c, e);\n                };\n              })(this),\n            )\n          );\n        }),\n        (e.prototype.animate = (function() {\n          return 'requestAnimationFrame' in window\n            ? function(a) {\n                return window.requestAnimationFrame(a);\n              }\n            : function(a) {\n                return a();\n              };\n        })()),\n        (e.prototype.resetStyle = function() {\n          var a, b, c, d, e;\n          for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++)\n            (a = d[b]), e.push((a.style.visibility = 'visible'));\n          return e;\n        }),\n        (e.prototype.resetAnimation = function(a) {\n          var b;\n          return a.type.toLowerCase().indexOf('animationend') >= 0\n            ? ((b = a.target || a.srcElement),\n              (b.className = b.className.replace(this.config.animateClass, '').trim()))\n            : void 0;\n        }),\n        (e.prototype.customStyle = function(a, b, c, d, e) {\n          return (\n            b && this.cacheAnimationName(a),\n            (a.style.visibility = b ? 'hidden' : 'visible'),\n            c && this.vendorSet(a.style, { animationDuration: c }),\n            d && this.vendorSet(a.style, { animationDelay: d }),\n            e && this.vendorSet(a.style, { animationIterationCount: e }),\n            this.vendorSet(a.style, { animationName: b ? 'none' : this.cachedAnimationName(a) }),\n            a\n          );\n        }),\n        (e.prototype.vendors = ['moz', 'webkit']),\n        (e.prototype.vendorSet = function(a, b) {\n          var c, d, e, f;\n          d = [];\n          for (c in b)\n            (e = b[c]),\n              (a['' + c] = e),\n              d.push(\n                function() {\n                  var b, d, g, h;\n                  for (g = this.vendors, h = [], b = 0, d = g.length; d > b; b++)\n                    (f = g[b]), h.push((a['' + f + c.charAt(0).toUpperCase() + c.substr(1)] = e));\n                  return h;\n                }.call(this),\n              );\n          return d;\n        }),\n        (e.prototype.vendorCSS = function(a, b) {\n          var c, e, f, g, h, i;\n          for (\n            h = d(a), g = h.getPropertyCSSValue(b), f = this.vendors, c = 0, e = f.length;\n            e > c;\n            c++\n          )\n            (i = f[c]), (g = g || h.getPropertyCSSValue('-' + i + '-' + b));\n          return g;\n        }),\n        (e.prototype.animationName = function(a) {\n          var b;\n          try {\n            b = this.vendorCSS(a, 'animation-name').cssText;\n          } catch (c) {\n            b = d(a).getPropertyValue('animation-name');\n          }\n          return 'none' === b ? '' : b;\n        }),\n        (e.prototype.cacheAnimationName = function(a) {\n          return this.animationNameCache.set(a, this.animationName(a));\n        }),\n        (e.prototype.cachedAnimationName = function(a) {\n          return this.animationNameCache.get(a);\n        }),\n        (e.prototype.scrollHandler = function() {\n          return (this.scrolled = !0);\n        }),\n        (e.prototype.scrollCallback = function() {\n          var a;\n          return !this.scrolled ||\n            ((this.scrolled = !1),\n            (this.boxes = function() {\n              var b, c, d, e;\n              for (d = this.boxes, e = [], b = 0, c = d.length; c > b; b++)\n                (a = d[b]), a && (this.isVisible(a) ? this.show(a) : e.push(a));\n              return e;\n            }.call(this)),\n            this.boxes.length || this.config.live)\n            ? void 0\n            : this.stop();\n        }),\n        (e.prototype.offsetTop = function(a) {\n          for (var b; void 0 === a.offsetTop; ) a = a.parentNode;\n          for (b = a.offsetTop; (a = a.offsetParent); ) b += a.offsetTop;\n          return b;\n        }),\n        (e.prototype.isVisible = function(a) {\n          var b, c, d, e, f;\n          return (\n            (c = a.getAttribute('data-wow-offset') || this.config.offset),\n            (f = window.pageYOffset),\n            (e = f + Math.min(this.element.clientHeight, this.util().innerHeight()) - c),\n            (d = this.offsetTop(a)),\n            (b = d + a.clientHeight),\n            e >= d && b >= f\n          );\n        }),\n        (e.prototype.util = function() {\n          return null != this._util ? this._util : (this._util = new b());\n        }),\n        (e.prototype.disabled = function() {\n          return !this.config.mobile && this.util().isMobile(navigator.userAgent);\n        }),\n        e\n      );\n    })());\n}.call(this));\n\n/*------------------------------------------------------------------*/\n/*\t07) Waypoints \n/*------------------------------------------------------------------*/\n\n/*!\nWaypoints - 4.0.0\nCopyright Â© 2011-2015 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blog/master/licenses.txt\n*/\n!(function() {\n  'use strict';\n  function t(o) {\n    if (!o) throw new Error('No options passed to Waypoint constructor');\n    if (!o.element) throw new Error('No element option passed to Waypoint constructor');\n    if (!o.handler) throw new Error('No handler option passed to Waypoint constructor');\n    (this.key = 'waypoint-' + e),\n      (this.options = t.Adapter.extend({}, t.defaults, o)),\n      (this.element = this.options.element),\n      (this.adapter = new t.Adapter(this.element)),\n      (this.callback = o.handler),\n      (this.axis = this.options.horizontal ? 'horizontal' : 'vertical'),\n      (this.enabled = this.options.enabled),\n      (this.triggerPoint = null),\n      (this.group = t.Group.findOrCreate({ name: this.options.group, axis: this.axis })),\n      (this.context = t.Context.findOrCreateByElement(this.options.context)),\n      t.offsetAliases[this.options.offset] &&\n        (this.options.offset = t.offsetAliases[this.options.offset]),\n      this.group.add(this),\n      this.context.add(this),\n      (i[this.key] = this),\n      (e += 1);\n  }\n  var e = 0,\n    i = {};\n  (t.prototype.queueTrigger = function(t) {\n    this.group.queueTrigger(this, t);\n  }),\n    (t.prototype.trigger = function(t) {\n      this.enabled && this.callback && this.callback.apply(this, t);\n    }),\n    (t.prototype.destroy = function() {\n      this.context.remove(this), this.group.remove(this), delete i[this.key];\n    }),\n    (t.prototype.disable = function() {\n      return (this.enabled = !1), this;\n    }),\n    (t.prototype.enable = function() {\n      return this.context.refresh(), (this.enabled = !0), this;\n    }),\n    (t.prototype.next = function() {\n      return this.group.next(this);\n    }),\n    (t.prototype.previous = function() {\n      return this.group.previous(this);\n    }),\n    (t.invokeAll = function(t) {\n      var e = [];\n      for (var o in i) e.push(i[o]);\n      for (var n = 0, r = e.length; r > n; n++) e[n][t]();\n    }),\n    (t.destroyAll = function() {\n      t.invokeAll('destroy');\n    }),\n    (t.disableAll = function() {\n      t.invokeAll('disable');\n    }),\n    (t.enableAll = function() {\n      t.invokeAll('enable');\n    }),\n    (t.refreshAll = function() {\n      t.Context.refreshAll();\n    }),\n    (t.viewportHeight = function() {\n      return window.innerHeight || document.documentElement.clientHeight;\n    }),\n    (t.viewportWidth = function() {\n      return document.documentElement.clientWidth;\n    }),\n    (t.adapters = []),\n    (t.defaults = {\n      context: window,\n      continuous: !0,\n      enabled: !0,\n      group: 'default',\n      horizontal: !1,\n      offset: 0,\n    }),\n    (t.offsetAliases = {\n      'bottom-in-view': function() {\n        return this.context.innerHeight() - this.adapter.outerHeight();\n      },\n      'right-in-view': function() {\n        return this.context.innerWidth() - this.adapter.outerWidth();\n      },\n    }),\n    (window.Waypoint = t);\n})(),\n  (function() {\n    'use strict';\n    function t(t) {\n      window.setTimeout(t, 1e3 / 60);\n    }\n    function e(t) {\n      (this.element = t),\n        (this.Adapter = n.Adapter),\n        (this.adapter = new this.Adapter(t)),\n        (this.key = 'waypoint-context-' + i),\n        (this.didScroll = !1),\n        (this.didResize = !1),\n        (this.oldScroll = { x: this.adapter.scrollLeft(), y: this.adapter.scrollTop() }),\n        (this.waypoints = { vertical: {}, horizontal: {} }),\n        (t.waypointContextKey = this.key),\n        (o[t.waypointContextKey] = this),\n        (i += 1),\n        this.createThrottledScrollHandler(),\n        this.createThrottledResizeHandler();\n    }\n    var i = 0,\n      o = {},\n      n = window.Waypoint,\n      r = window.onload;\n    (e.prototype.add = function(t) {\n      var e = t.options.horizontal ? 'horizontal' : 'vertical';\n      (this.waypoints[e][t.key] = t), this.refresh();\n    }),\n      (e.prototype.checkEmpty = function() {\n        var t = this.Adapter.isEmptyObject(this.waypoints.horizontal),\n          e = this.Adapter.isEmptyObject(this.waypoints.vertical);\n        t && e && (this.adapter.off('.waypoints'), delete o[this.key]);\n      }),\n      (e.prototype.createThrottledResizeHandler = function() {\n        function t() {\n          e.handleResize(), (e.didResize = !1);\n        }\n        var e = this;\n        this.adapter.on('resize.waypoints', function() {\n          e.didResize || ((e.didResize = !0), n.requestAnimationFrame(t));\n        });\n      }),\n      (e.prototype.createThrottledScrollHandler = function() {\n        function t() {\n          e.handleScroll(), (e.didScroll = !1);\n        }\n        var e = this;\n        this.adapter.on('scroll.waypoints', function() {\n          (!e.didScroll || n.isTouch) && ((e.didScroll = !0), n.requestAnimationFrame(t));\n        });\n      }),\n      (e.prototype.handleResize = function() {\n        n.Context.refreshAll();\n      }),\n      (e.prototype.handleScroll = function() {\n        var t = {},\n          e = {\n            horizontal: {\n              newScroll: this.adapter.scrollLeft(),\n              oldScroll: this.oldScroll.x,\n              forward: 'right',\n              backward: 'left',\n            },\n            vertical: {\n              newScroll: this.adapter.scrollTop(),\n              oldScroll: this.oldScroll.y,\n              forward: 'down',\n              backward: 'up',\n            },\n          };\n        for (var i in e) {\n          var o = e[i],\n            n = o.newScroll > o.oldScroll,\n            r = n ? o.forward : o.backward;\n          for (var s in this.waypoints[i]) {\n            var a = this.waypoints[i][s],\n              l = o.oldScroll < a.triggerPoint,\n              h = o.newScroll >= a.triggerPoint,\n              p = l && h,\n              u = !l && !h;\n            (p || u) && (a.queueTrigger(r), (t[a.group.id] = a.group));\n          }\n        }\n        for (var c in t) t[c].flushTriggers();\n        this.oldScroll = { x: e.horizontal.newScroll, y: e.vertical.newScroll };\n      }),\n      (e.prototype.innerHeight = function() {\n        return this.element == this.element.window\n          ? n.viewportHeight()\n          : this.adapter.innerHeight();\n      }),\n      (e.prototype.remove = function(t) {\n        delete this.waypoints[t.axis][t.key], this.checkEmpty();\n      }),\n      (e.prototype.innerWidth = function() {\n        return this.element == this.element.window ? n.viewportWidth() : this.adapter.innerWidth();\n      }),\n      (e.prototype.destroy = function() {\n        var t = [];\n        for (var e in this.waypoints) for (var i in this.waypoints[e]) t.push(this.waypoints[e][i]);\n        for (var o = 0, n = t.length; n > o; o++) t[o].destroy();\n      }),\n      (e.prototype.refresh = function() {\n        var t,\n          e = this.element == this.element.window,\n          i = e ? void 0 : this.adapter.offset(),\n          o = {};\n        this.handleScroll(),\n          (t = {\n            horizontal: {\n              contextOffset: e ? 0 : i.left,\n              contextScroll: e ? 0 : this.oldScroll.x,\n              contextDimension: this.innerWidth(),\n              oldScroll: this.oldScroll.x,\n              forward: 'right',\n              backward: 'left',\n              offsetProp: 'left',\n            },\n            vertical: {\n              contextOffset: e ? 0 : i.top,\n              contextScroll: e ? 0 : this.oldScroll.y,\n              contextDimension: this.innerHeight(),\n              oldScroll: this.oldScroll.y,\n              forward: 'down',\n              backward: 'up',\n              offsetProp: 'top',\n            },\n          });\n        for (var r in t) {\n          var s = t[r];\n          for (var a in this.waypoints[r]) {\n            var l,\n              h,\n              p,\n              u,\n              c,\n              d = this.waypoints[r][a],\n              f = d.options.offset,\n              w = d.triggerPoint,\n              y = 0,\n              g = null == w;\n            d.element !== d.element.window && (y = d.adapter.offset()[s.offsetProp]),\n              'function' == typeof f\n                ? (f = f.apply(d))\n                : 'string' == typeof f &&\n                  ((f = parseFloat(f)),\n                  d.options.offset.indexOf('%') > -1 &&\n                    (f = Math.ceil((s.contextDimension * f) / 100))),\n              (l = s.contextScroll - s.contextOffset),\n              (d.triggerPoint = y + l - f),\n              (h = w < s.oldScroll),\n              (p = d.triggerPoint >= s.oldScroll),\n              (u = h && p),\n              (c = !h && !p),\n              !g && u\n                ? (d.queueTrigger(s.backward), (o[d.group.id] = d.group))\n                : !g && c\n                ? (d.queueTrigger(s.forward), (o[d.group.id] = d.group))\n                : g &&\n                  s.oldScroll >= d.triggerPoint &&\n                  (d.queueTrigger(s.forward), (o[d.group.id] = d.group));\n          }\n        }\n        return (\n          n.requestAnimationFrame(function() {\n            for (var t in o) o[t].flushTriggers();\n          }),\n          this\n        );\n      }),\n      (e.findOrCreateByElement = function(t) {\n        return e.findByElement(t) || new e(t);\n      }),\n      (e.refreshAll = function() {\n        for (var t in o) o[t].refresh();\n      }),\n      (e.findByElement = function(t) {\n        return o[t.waypointContextKey];\n      }),\n      (window.onload = function() {\n        r && r(), e.refreshAll();\n      }),\n      (n.requestAnimationFrame = function(e) {\n        var i =\n          window.requestAnimationFrame ||\n          window.mozRequestAnimationFrame ||\n          window.webkitRequestAnimationFrame ||\n          t;\n        i.call(window, e);\n      }),\n      (n.Context = e);\n  })(),\n  (function() {\n    'use strict';\n    function t(t, e) {\n      return t.triggerPoint - e.triggerPoint;\n    }\n    function e(t, e) {\n      return e.triggerPoint - t.triggerPoint;\n    }\n    function i(t) {\n      (this.name = t.name),\n        (this.axis = t.axis),\n        (this.id = this.name + '-' + this.axis),\n        (this.waypoints = []),\n        this.clearTriggerQueues(),\n        (o[this.axis][this.name] = this);\n    }\n    var o = { vertical: {}, horizontal: {} },\n      n = window.Waypoint;\n    (i.prototype.add = function(t) {\n      this.waypoints.push(t);\n    }),\n      (i.prototype.clearTriggerQueues = function() {\n        this.triggerQueues = { up: [], down: [], left: [], right: [] };\n      }),\n      (i.prototype.flushTriggers = function() {\n        for (var i in this.triggerQueues) {\n          var o = this.triggerQueues[i],\n            n = 'up' === i || 'left' === i;\n          o.sort(n ? e : t);\n          for (var r = 0, s = o.length; s > r; r += 1) {\n            var a = o[r];\n            (a.options.continuous || r === o.length - 1) && a.trigger([i]);\n          }\n        }\n        this.clearTriggerQueues();\n      }),\n      (i.prototype.next = function(e) {\n        this.waypoints.sort(t);\n        var i = n.Adapter.inArray(e, this.waypoints),\n          o = i === this.waypoints.length - 1;\n        return o ? null : this.waypoints[i + 1];\n      }),\n      (i.prototype.previous = function(e) {\n        this.waypoints.sort(t);\n        var i = n.Adapter.inArray(e, this.waypoints);\n        return i ? this.waypoints[i - 1] : null;\n      }),\n      (i.prototype.queueTrigger = function(t, e) {\n        this.triggerQueues[e].push(t);\n      }),\n      (i.prototype.remove = function(t) {\n        var e = n.Adapter.inArray(t, this.waypoints);\n        e > -1 && this.waypoints.splice(e, 1);\n      }),\n      (i.prototype.first = function() {\n        return this.waypoints[0];\n      }),\n      (i.prototype.last = function() {\n        return this.waypoints[this.waypoints.length - 1];\n      }),\n      (i.findOrCreate = function(t) {\n        return o[t.axis][t.name] || new i(t);\n      }),\n      (n.Group = i);\n  })(),\n  (function() {\n    'use strict';\n    function t(t) {\n      this.$element = e(t);\n    }\n    var e = window.jQuery,\n      i = window.Waypoint;\n    e.each(\n      [\n        'innerHeight',\n        'innerWidth',\n        'off',\n        'offset',\n        'on',\n        'outerHeight',\n        'outerWidth',\n        'scrollLeft',\n        'scrollTop',\n      ],\n      function(e, i) {\n        t.prototype[i] = function() {\n          var t = Array.prototype.slice.call(arguments);\n          return this.$element[i].apply(this.$element, t);\n        };\n      },\n    ),\n      e.each(['extend', 'inArray', 'isEmptyObject'], function(i, o) {\n        t[o] = e[o];\n      }),\n      i.adapters.push({ name: 'jquery', Adapter: t }),\n      (i.Adapter = t);\n  })(),\n  (function() {\n    'use strict';\n    function t(t) {\n      return function() {\n        var i = [],\n          o = arguments[0];\n        return (\n          t.isFunction(arguments[0]) &&\n            ((o = t.extend({}, arguments[1])), (o.handler = arguments[0])),\n          this.each(function() {\n            var n = t.extend({}, o, { element: this });\n            'string' == typeof n.context && (n.context = t(this).closest(n.context)[0]),\n              i.push(new e(n));\n          }),\n          i\n        );\n      };\n    }\n    var e = window.Waypoint;\n    window.jQuery && (window.jQuery.fn.waypoint = t(window.jQuery)),\n      window.Zepto && (window.Zepto.fn.waypoint = t(window.Zepto));\n  })();\n\n/*------------------------------------------------------------------*/\n/*\t08) Counter Up \n/*------------------------------------------------------------------*/\n\n/*!\n * jquery.counterup.js 2.1.0\n *\n * Copyright 2013, Benjamin Intal http://gambit.ph @bfintal\n * Released under the GPL v2 License\n *\n * Amended by Jeremy Paris, Ciro Mattia Gonano and others\n *\n * Date: Feb 24, 2017\n */\n!(function(e) {\n  'use strict';\n  e.fn.counterUp = function(t) {\n    var m,\n      g = e.extend(\n        {\n          time: 400,\n          delay: 10,\n          offset: 100,\n          beginAt: 0,\n          formatter: !1,\n          context: 'window',\n          callback: function() {},\n        },\n        t,\n      );\n    return this.each(function() {\n      var p = e(this),\n        h = {\n          time: e(this).data('counterup-time') || g.time,\n          delay: e(this).data('counterup-delay') || g.delay,\n          offset: e(this).data('counterup-offset') || g.offset,\n          beginAt: e(this).data('counterup-beginat') || g.beginAt,\n          context: e(this).data('counterup-context') || g.context,\n        };\n      p.waypoint(\n        function(t) {\n          !(function() {\n            var t = [],\n              e = h.time / h.delay,\n              a = p.attr('data-num') ? p.attr('data-num') : p.text(),\n              n = /[0-9]+,[0-9]+/.test(a),\n              u = ((a = a.replace(/,/g, '')).split('.')[1] || []).length;\n            h.beginAt > a && (h.beginAt = a);\n            var o = /[0-9]+:[0-9]+:[0-9]+/.test(a);\n            if (o) {\n              var r = a.split(':'),\n                i = 1;\n              for (m = 0; 0 < r.length; ) (m += i * parseInt(r.pop(), 10)), (i *= 60);\n            }\n            for (var c = e; c >= (h.beginAt / a) * e; c--) {\n              var s = parseFloat((a / e) * c).toFixed(u);\n              if (o) {\n                s = parseInt((m / e) * c);\n                var f = parseInt(s / 3600) % 24,\n                  l = parseInt(s / 60) % 60,\n                  d = parseInt(s % 60, 10);\n                s =\n                  (f < 10 ? '0' + f : f) +\n                  ':' +\n                  (l < 10 ? '0' + l : l) +\n                  ':' +\n                  (d < 10 ? '0' + d : d);\n              }\n              if (n)\n                for (; /(\\d+)(\\d{3})/.test(s.toString()); )\n                  s = s.toString().replace(/(\\d+)(\\d{3})/, '$1,$2');\n              g.formatter && (s = g.formatter.call(this, s)), t.unshift(s);\n            }\n            p.data('counterup-nums', t), p.text(h.beginAt);\n            p.data('counterup-func', function() {\n              p.data('counterup-nums')\n                ? (p.html(p.data('counterup-nums').shift()),\n                  p.data('counterup-nums').length\n                    ? setTimeout(p.data('counterup-func'), h.delay)\n                    : (p.data('counterup-nums', null),\n                      p.data('counterup-func', null),\n                      g.callback.call(this)))\n                : g.callback.call(this);\n            }),\n              setTimeout(p.data('counterup-func'), h.delay);\n          })(),\n            this.destroy();\n        },\n        { offset: h.offset + '%', context: h.context },\n      );\n    });\n  };\n})(jQuery);\n\n/*------------------------------------------------------------------*/\n/*\t09) jQuery Easing\n/*------------------------------------------------------------------*/\n/*\n * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/\n *\n * Uses the built in easing capabilities added In jQuery 1.1\n * to offer multiple easing options\n *\n * TERMS OF USE - jQuery Easing\n *\n * Open source under the BSD License.\n *\n * Copyright Â© 2008 George McGinley Smith\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n *\n * Redistributions of source code must retain the above copyright notice, this list of\n * conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright notice, this list\n * of conditions and the following disclaimer in the documentation and/or other materials\n * provided with the distribution.\n *\n * Neither the name of the author nor the names of contributors may be used to endorse\n * or promote 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\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n *  COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE\n *  GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED\n * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING\n *  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n * OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n */\n\n// t: current time, b: begInnIng value, c: change In value, d: duration\n(jQuery.easing.jswing = jQuery.easing.swing),\n  jQuery.extend(jQuery.easing, {\n    def: 'easeOutQuad',\n    swing: function(n, e, t, u, a) {\n      return jQuery.easing[jQuery.easing.def](n, e, t, u, a);\n    },\n    easeInQuad: function(n, e, t, u, a) {\n      return u * (e /= a) * e + t;\n    },\n    easeOutQuad: function(n, e, t, u, a) {\n      return -u * (e /= a) * (e - 2) + t;\n    },\n    easeInOutQuad: function(n, e, t, u, a) {\n      return (e /= a / 2) < 1 ? (u / 2) * e * e + t : (-u / 2) * (--e * (e - 2) - 1) + t;\n    },\n    easeInCubic: function(n, e, t, u, a) {\n      return u * (e /= a) * e * e + t;\n    },\n    easeOutCubic: function(n, e, t, u, a) {\n      return u * ((e = e / a - 1) * e * e + 1) + t;\n    },\n    easeInOutCubic: function(n, e, t, u, a) {\n      return (e /= a / 2) < 1 ? (u / 2) * e * e * e + t : (u / 2) * ((e -= 2) * e * e + 2) + t;\n    },\n    easeInQuart: function(n, e, t, u, a) {\n      return u * (e /= a) * e * e * e + t;\n    },\n    easeOutQuart: function(n, e, t, u, a) {\n      return -u * ((e = e / a - 1) * e * e * e - 1) + t;\n    },\n    easeInOutQuart: function(n, e, t, u, a) {\n      return (e /= a / 2) < 1\n        ? (u / 2) * e * e * e * e + t\n        : (-u / 2) * ((e -= 2) * e * e * e - 2) + t;\n    },\n    easeInQuint: function(n, e, t, u, a) {\n      return u * (e /= a) * e * e * e * e + t;\n    },\n    easeOutQuint: function(n, e, t, u, a) {\n      return u * ((e = e / a - 1) * e * e * e * e + 1) + t;\n    },\n    easeInOutQuint: function(n, e, t, u, a) {\n      return (e /= a / 2) < 1\n        ? (u / 2) * e * e * e * e * e + t\n        : (u / 2) * ((e -= 2) * e * e * e * e + 2) + t;\n    },\n    easeInSine: function(n, e, t, u, a) {\n      return -u * Math.cos((e / a) * (Math.PI / 2)) + u + t;\n    },\n    easeOutSine: function(n, e, t, u, a) {\n      return u * Math.sin((e / a) * (Math.PI / 2)) + t;\n    },\n    easeInOutSine: function(n, e, t, u, a) {\n      return (-u / 2) * (Math.cos((Math.PI * e) / a) - 1) + t;\n    },\n    easeInExpo: function(n, e, t, u, a) {\n      return 0 == e ? t : u * Math.pow(2, 10 * (e / a - 1)) + t;\n    },\n    easeOutExpo: function(n, e, t, u, a) {\n      return e == a ? t + u : u * (1 - Math.pow(2, (-10 * e) / a)) + t;\n    },\n    easeInOutExpo: function(n, e, t, u, a) {\n      return 0 == e\n        ? t\n        : e == a\n        ? t + u\n        : (e /= a / 2) < 1\n        ? (u / 2) * Math.pow(2, 10 * (e - 1)) + t\n        : (u / 2) * (2 - Math.pow(2, -10 * --e)) + t;\n    },\n    easeInCirc: function(n, e, t, u, a) {\n      return -u * (Math.sqrt(1 - (e /= a) * e) - 1) + t;\n    },\n    easeOutCirc: function(n, e, t, u, a) {\n      return u * Math.sqrt(1 - (e = e / a - 1) * e) + t;\n    },\n    easeInOutCirc: function(n, e, t, u, a) {\n      return (e /= a / 2) < 1\n        ? (-u / 2) * (Math.sqrt(1 - e * e) - 1) + t\n        : (u / 2) * (Math.sqrt(1 - (e -= 2) * e) + 1) + t;\n    },\n    easeInElastic: function(n, e, t, u, a) {\n      var r = 1.70158,\n        i = 0,\n        s = u;\n      if (0 == e) return t;\n      if (1 == (e /= a)) return t + u;\n      if (((i = i || 0.3 * a), s < Math.abs(u))) {\n        s = u;\n        r = i / 4;\n      } else r = (i / (2 * Math.PI)) * Math.asin(u / s);\n      return -s * Math.pow(2, 10 * (e -= 1)) * Math.sin(((e * a - r) * (2 * Math.PI)) / i) + t;\n    },\n    easeOutElastic: function(n, e, t, u, a) {\n      var r = 1.70158,\n        i = 0,\n        s = u;\n      if (0 == e) return t;\n      if (1 == (e /= a)) return t + u;\n      if (((i = i || 0.3 * a), s < Math.abs(u))) {\n        s = u;\n        r = i / 4;\n      } else r = (i / (2 * Math.PI)) * Math.asin(u / s);\n      return s * Math.pow(2, -10 * e) * Math.sin(((e * a - r) * (2 * Math.PI)) / i) + u + t;\n    },\n    easeInOutElastic: function(n, e, t, u, a) {\n      var r = 1.70158,\n        i = 0,\n        s = u;\n      if (0 == e) return t;\n      if (2 == (e /= a / 2)) return t + u;\n      if (((i = i || a * (0.3 * 1.5)), s < Math.abs(u))) {\n        s = u;\n        r = i / 4;\n      } else r = (i / (2 * Math.PI)) * Math.asin(u / s);\n      return e < 1\n        ? s * Math.pow(2, 10 * (e -= 1)) * Math.sin(((e * a - r) * (2 * Math.PI)) / i) * -0.5 + t\n        : s * Math.pow(2, -10 * (e -= 1)) * Math.sin(((e * a - r) * (2 * Math.PI)) / i) * 0.5 +\n            u +\n            t;\n    },\n    easeInBack: function(n, e, t, u, a, r) {\n      return null == r && (r = 1.70158), u * (e /= a) * e * ((r + 1) * e - r) + t;\n    },\n    easeOutBack: function(n, e, t, u, a, r) {\n      return null == r && (r = 1.70158), u * ((e = e / a - 1) * e * ((r + 1) * e + r) + 1) + t;\n    },\n    easeInOutBack: function(n, e, t, u, a, r) {\n      return (\n        null == r && (r = 1.70158),\n        (e /= a / 2) < 1\n          ? (u / 2) * (e * e * ((1 + (r *= 1.525)) * e - r)) + t\n          : (u / 2) * ((e -= 2) * e * ((1 + (r *= 1.525)) * e + r) + 2) + t\n      );\n    },\n    easeInBounce: function(n, e, t, u, a) {\n      return u - jQuery.easing.easeOutBounce(n, a - e, 0, u, a) + t;\n    },\n    easeOutBounce: function(n, e, t, u, a) {\n      return (e /= a) < 1 / 2.75\n        ? u * (7.5625 * e * e) + t\n        : e < 2 / 2.75\n        ? u * (7.5625 * (e -= 1.5 / 2.75) * e + 0.75) + t\n        : e < 2.5 / 2.75\n        ? u * (7.5625 * (e -= 2.25 / 2.75) * e + 0.9375) + t\n        : u * (7.5625 * (e -= 2.625 / 2.75) * e + 0.984375) + t;\n    },\n    easeInOutBounce: function(n, e, t, u, a) {\n      return e < a / 2\n        ? 0.5 * jQuery.easing.easeInBounce(n, 2 * e, 0, u, a) + t\n        : 0.5 * jQuery.easing.easeOutBounce(n, 2 * e - a, 0, u, a) + 0.5 * u + t;\n    },\n  });\n\n/*------------------------------------------------------------------*/\n/*\t10) ScrollIt\n/*------------------------------------------------------------------*/\n(function(e) {\n  'use strict';\n  var t = 'ScrollIt',\n    n = '1.0.3';\n  var r = {\n    upKey: 38,\n    downKey: 40,\n    easing: 'linear',\n    scrollTime: 600,\n    activeClass: 'active',\n    onPageChange: null,\n    topOffset: 0,\n  };\n  e.scrollIt = function(t) {\n    var n = e.extend(r, t),\n      i = 0,\n      s = e('[data-scroll-index]:last').attr('data-scroll-index');\n    var o = function(t) {\n      if (t < 0 || t > s) return;\n      var r = e('[data-scroll-index=' + t + ']').offset().top + n.topOffset + 1;\n      e('html,body').animate({ scrollTop: r, easing: n.easing }, n.scrollTime);\n    };\n    var u = function(t) {\n      var n =\n        e(t.target)\n          .closest('[data-scroll-nav]')\n          .attr('data-scroll-nav') ||\n        e(t.target)\n          .closest('[data-scroll-goto]')\n          .attr('data-scroll-goto');\n      o(parseInt(n));\n    };\n    var a = function(t) {\n      var r = t.which;\n      if (e('html,body').is(':animated') && (r == n.upKey || r == n.downKey)) {\n        return false;\n      }\n      if (r == n.upKey && i > 0) {\n        o(parseInt(i) - 1);\n        return false;\n      } else if (r == n.downKey && i < s) {\n        o(parseInt(i) + 1);\n        return false;\n      }\n      return true;\n    };\n    var f = function(t) {\n      if (n.onPageChange && t && i != t) n.onPageChange(t);\n      i = t;\n      e('[data-scroll-nav]').removeClass(n.activeClass);\n      e('[data-scroll-nav=' + t + ']').addClass(n.activeClass);\n    };\n    var l = function() {\n      var t = e(window).scrollTop();\n      var r = e('[data-scroll-index]').filter(function(r, i) {\n        return (\n          t >= e(i).offset().top + n.topOffset &&\n          t < e(i).offset().top + n.topOffset + e(i).outerHeight()\n        );\n      });\n      var i = r.first().attr('data-scroll-index');\n      f(i);\n    };\n    e(window)\n      .on('scroll', l)\n      .scroll();\n    e(window).on('keydown', a);\n    e('body').on('click', '[data-scroll-nav], [data-scroll-goto]', function(e) {\n      e.preventDefault();\n      u(e);\n    });\n  };\n})(jQuery);\n\n/*------------------------------------------------------------------*/\n/*\t11) MBYTBPLAYER \n/*------------------------------------------------------------------*/\n\n/*jquery.mb.YTPlayer 05-04-2019\n _ jquery.mb.components \n _ email: matbicoc@gmail.com \n _ Copyright (c) 2001-2019. Matteo Bicocchi (Pupunzi); \n _ blog: http://pupunzi.open-lab.com \n _ Open Lab s.r.l., Florence - Italy \n */\n\nvar ytp = ytp || {};\nfunction onYouTubeIframeAPIReady() {\n  ytp.YTAPIReady || ((ytp.YTAPIReady = !0), jQuery(document).trigger('YTAPIReady'));\n}\nvar getYTPVideoID = function(e) {\n  var r, t;\n  return (\n    0 < e.indexOf('youtu.be') || 0 < e.indexOf('youtube.com/embed')\n      ? (r = (t =\n          0 < (r = e.substr(e.lastIndexOf('/') + 1, e.length)).indexOf('?list=')\n            ? r.substr(r.lastIndexOf('='), r.length)\n            : null)\n          ? r.substr(0, r.lastIndexOf('?'))\n          : r)\n      : (t =\n          -1 < e.indexOf('http')\n            ? ((r = e.match(/[\\\\?&]v=([^&#]*)/)[1]),\n              0 < e.indexOf('list=') ? e.match(/[\\\\?&]list=([^&#]*)/)[1] : null)\n            : (r = 15 < e.length ? null : e)\n            ? null\n            : e),\n    { videoID: r, playlistID: t }\n  );\n};\nfunction iOSversion() {\n  if (/iP(hone|od|ad)/.test(navigator.platform)) {\n    var e = navigator.appVersion.match(/OS (\\d+)_(\\d+)_?(\\d+)?/);\n    return [parseInt(e[1], 10), parseInt(e[2], 10), parseInt(e[3] || 0, 10)];\n  }\n}\n!(function(jQuery, ytp) {\n  (jQuery.mbYTPlayer = {\n    name: 'jquery.mb.YTPlayer',\n    version: '3.2.10',\n    build: '7430',\n    author: 'Matteo Bicocchi (pupunzi)',\n    apiKey: '',\n    defaults: {\n      videoURL: null,\n      containment: 'body',\n      ratio: 'auto',\n      fadeOnStartTime: 1e3,\n      startAt: 0,\n      stopAt: 0,\n      autoPlay: !0,\n      coverImage: !1,\n      loop: !0,\n      addRaster: !1,\n      mask: !1,\n      opacity: 1,\n      quality: 'default',\n      vol: 50,\n      mute: !1,\n      showControls: !0,\n      anchor: 'center,center',\n      showAnnotations: !1,\n      cc_load_policy: !1,\n      showYTLogo: !0,\n      useOnMobile: !0,\n      mobileFallbackImage: null,\n      playOnlyIfVisible: !1,\n      onScreenPercentage: 30,\n      stopMovieOnBlur: !0,\n      realFullscreen: !0,\n      optimizeDisplay: !0,\n      abundance: 0.3,\n      gaTrack: !0,\n      remember_last_time: !1,\n      addFilters: !1,\n      onReady: function(e) {},\n      onError: function(e, r) {},\n    },\n    controls: {\n      play: 'P',\n      pause: 'p',\n      mute: 'M',\n      unmute: 'A',\n      onlyYT: 'O',\n      showSite: 'R',\n      ytLogo: 'Y',\n    },\n    controlBar: null,\n    locationProtocol: 'https:',\n    defaultFilters: {\n      grayscale: { value: 0, unit: '%' },\n      hue_rotate: { value: 0, unit: 'deg' },\n      invert: { value: 0, unit: '%' },\n      opacity: { value: 0, unit: '%' },\n      saturate: { value: 0, unit: '%' },\n      sepia: { value: 0, unit: '%' },\n      brightness: { value: 0, unit: '%' },\n      contrast: { value: 0, unit: '%' },\n      blur: { value: 0, unit: 'px' },\n    },\n    buildPlayer: function(options) {\n      if (ytp.YTAPIReady || void 0 !== window.YT)\n        setTimeout(function() {\n          jQuery(document).trigger('YTAPIReady'), (ytp.YTAPIReady = !0);\n        }, 100);\n      else {\n        jQuery('#YTAPI').remove();\n        var tag = jQuery('<script>').attr({\n          src: 'https://www.youtube.com/iframe_api?v=' + jQuery.mbYTPlayer.version,\n          id: 'YTAPI',\n        });\n        jQuery('head').prepend(tag);\n      }\n      function isIframe() {\n        var r = !1;\n        try {\n          self.location.href != top.location.href && (r = !0);\n        } catch (e) {\n          r = !0;\n        }\n        return r;\n      }\n      return this.each(function() {\n        var YTPlayer = this,\n          $YTPlayer = jQuery(YTPlayer);\n        $YTPlayer.hide(),\n          (YTPlayer.loop = 0),\n          (YTPlayer.state = 0),\n          (YTPlayer.filters = jQuery.extend(!0, {}, jQuery.mbYTPlayer.defaultFilters)),\n          (YTPlayer.filtersEnabled = !0),\n          (YTPlayer.id = YTPlayer.id || 'YTP_' + new Date().getTime()),\n          $YTPlayer.addClass('mb_YTPlayer');\n        var property =\n          $YTPlayer.data('property') && 'string' == typeof $YTPlayer.data('property')\n            ? eval('(' + $YTPlayer.data('property') + ')')\n            : $YTPlayer.data('property');\n        'object' != typeof property && (property = {}),\n          (YTPlayer.opt = jQuery.extend(\n            !0,\n            {},\n            jQuery.mbYTPlayer.defaults,\n            YTPlayer.opt,\n            options,\n            property,\n          )),\n          (YTPlayer.opt.elementId = YTPlayer.id),\n          0 === YTPlayer.opt.vol && ((YTPlayer.opt.vol = 1), (YTPlayer.opt.mute = !0)),\n          YTPlayer.opt.autoPlay &&\n            0 == YTPlayer.opt.mute &&\n            jQuery.mbBrowser.chrome &&\n            (jQuery(document).one('mousedown.YTPstart', function() {\n              $YTPlayer.YTPPlay();\n            }),\n            console.info(\n              'YTPlayer info: On Webkit browsers you can not autoplay the video if the audio is on.',\n            )),\n          YTPlayer.opt.loop && 'boolean' == typeof YTPlayer.opt.loop && (YTPlayer.opt.loop = 9999);\n        var fullScreenAvailable =\n          document.fullscreenEnabled ||\n          document.webkitFullscreenEnabled ||\n          document.mozFullScreenEnabled ||\n          document.msFullscreenEnabled;\n        (YTPlayer.opt.realFullscreen =\n          !(isIframe() || !fullScreenAvailable) && YTPlayer.opt.realFullscreen),\n          (YTPlayer.opt.showAnnotations = YTPlayer.opt.showAnnotations ? '1' : '3'),\n          (YTPlayer.opt.cc_load_policy = YTPlayer.opt.cc_load_policy ? '1' : '0'),\n          (YTPlayer.opt.coverImage = YTPlayer.opt.coverImage || YTPlayer.opt.backgroundImage),\n          jQuery.mbBrowser.msie && jQuery.mbBrowser.version < 9 && (YTPlayer.opt.opacity = 1),\n          (YTPlayer.opt.containment =\n            'self' === YTPlayer.opt.containment ? $YTPlayer : jQuery(YTPlayer.opt.containment)),\n          (YTPlayer.isRetina = window.retina || 1 < window.devicePixelRatio),\n          (YTPlayer.opt.ratio = 'auto' === YTPlayer.opt.ratio ? 16 / 9 : YTPlayer.opt.ratio),\n          (YTPlayer.opt.ratio = eval(YTPlayer.opt.ratio)),\n          (YTPlayer.orig_containment_background = YTPlayer.opt.containment.css('background-image')),\n          $YTPlayer.attr('id') || $YTPlayer.attr('id', 'ytp_' + new Date().getTime()),\n          (YTPlayer.playerID = 'iframe_' + YTPlayer.id),\n          (YTPlayer.isAlone = !1),\n          (YTPlayer.hasFocus = !0),\n          (YTPlayer.videoID = YTPlayer.opt.videoURL\n            ? getYTPVideoID(YTPlayer.opt.videoURL).videoID\n            : !!$YTPlayer.attr('href') && getYTPVideoID($YTPlayer.attr('href')).videoID),\n          (YTPlayer.playlistID = YTPlayer.opt.videoURL\n            ? getYTPVideoID(YTPlayer.opt.videoURL).playlistID\n            : !!$YTPlayer.attr('href') && getYTPVideoID($YTPlayer.attr('href')).playlistID);\n        var start_from_last = 0;\n        if (\n          (jQuery.mbCookie.get('YTPlayer_start_from' + YTPlayer.videoID) &&\n            (start_from_last = parseFloat(\n              jQuery.mbCookie.get('YTPlayer_start_from' + YTPlayer.videoID),\n            )),\n          YTPlayer.opt.remember_last_time &&\n            start_from_last &&\n            ((YTPlayer.start_from_last = start_from_last),\n            jQuery.mbCookie.remove('YTPlayer_start_from' + YTPlayer.videoID)),\n          (YTPlayer.isPlayer = $YTPlayer.is(YTPlayer.opt.containment)),\n          (YTPlayer.isBackground = YTPlayer.opt.containment.is('body')),\n          !YTPlayer.isBackground || !ytp.backgroundIsInited)\n        ) {\n          if (\n            (YTPlayer.isPlayer && $YTPlayer.show(),\n            (YTPlayer.overlay = jQuery('<div/>')\n              .css({ position: 'absolute', top: 0, left: 0, width: '100%', height: '100%' })\n              .addClass('YTPOverlay')),\n            YTPlayer.opt.coverImage || YTPlayer.orig_containment_background)\n          ) {\n            var bgndURL = YTPlayer.opt.coverImage\n              ? 'url(' + YTPlayer.opt.coverImage + ') center center'\n              : YTPlayer.orig_containment_background;\n            YTPlayer.opt.containment.css({\n              background: bgndURL,\n              backgroundColor: '#000',\n              backgroundSize: 'cover',\n              backgroundRepeat: 'no-repeat',\n            });\n          }\n          (YTPlayer.wrapper = jQuery('<div/>')\n            .attr('id', 'wrapper_' + YTPlayer.id)\n            .css({\n              position: 'absolute',\n              zIndex: 0,\n              minWidth: '100%',\n              minHeight: '100%',\n              left: 0,\n              top: 0,\n              overflow: 'hidden',\n              opacity: 0,\n            })\n            .addClass('mbYTP_wrapper')),\n            YTPlayer.isPlayer &&\n              ((YTPlayer.inlinePlayButton = jQuery('<div/>')\n                .addClass('inlinePlayButton')\n                .html(jQuery.mbYTPlayer.controls.play)),\n              $YTPlayer.append(YTPlayer.inlinePlayButton),\n              YTPlayer.inlinePlayButton.on('click', function(e) {\n                $YTPlayer.YTPPlay(), e.stopPropagation();\n              }),\n              YTPlayer.opt.autoPlay && YTPlayer.inlinePlayButton.hide(),\n              YTPlayer.overlay\n                .on('click', function() {\n                  $YTPlayer.YTPTogglePlay();\n                })\n                .css({ cursor: 'pointer' }));\n          var playerBox = jQuery('<div/>')\n            .attr('id', YTPlayer.playerID)\n            .addClass('playerBox');\n          if (\n            (playerBox.css({\n              position: 'absolute',\n              zIndex: 0,\n              width: '100%',\n              height: '100%',\n              top: 0,\n              left: 0,\n              overflow: 'hidden',\n              opacity: 1,\n            }),\n            YTPlayer.wrapper.append(playerBox),\n            playerBox.after(YTPlayer.overlay),\n            YTPlayer.isPlayer &&\n              ((YTPlayer.inlineWrapper = jQuery('<div/>').addClass('inline-YTPlayer')),\n              YTPlayer.inlineWrapper.css({\n                position: 'relative',\n                maxWidth: YTPlayer.opt.containment.css('width'),\n              }),\n              YTPlayer.opt.containment.css({\n                position: 'relative',\n                paddingBottom: '56.25%',\n                overflow: 'hidden',\n                height: 0,\n              }),\n              YTPlayer.opt.containment.wrap(YTPlayer.inlineWrapper)),\n            YTPlayer.opt.containment\n              .children()\n              .not('script, style')\n              .each(function() {\n                'static' == jQuery(this).css('position') &&\n                  jQuery(this).css('position', 'relative');\n              }),\n            YTPlayer.isBackground\n              ? (jQuery('body').css({ boxSizing: 'border-box' }),\n                YTPlayer.wrapper.css({ position: 'fixed', top: 0, left: 0, zIndex: 0 }))\n              : 'static' == YTPlayer.opt.containment.css('position') &&\n                (YTPlayer.opt.containment.css({ position: 'relative' }), $YTPlayer.show()),\n            YTPlayer.opt.containment.prepend(YTPlayer.wrapper),\n            YTPlayer.isBackground ||\n              YTPlayer.overlay\n                .on('mouseenter', function() {\n                  YTPlayer.controlBar &&\n                    YTPlayer.controlBar.length &&\n                    YTPlayer.controlBar.addClass('visible');\n                })\n                .on('mouseleave', function() {\n                  YTPlayer.controlBar &&\n                    YTPlayer.controlBar.length &&\n                    YTPlayer.controlBar.removeClass('visible');\n                }),\n            jQuery.mbBrowser.mobile && !YTPlayer.opt.useOnMobile)\n          )\n            return (\n              YTPlayer.opt.mobileFallbackImage &&\n                (YTPlayer.wrapper.css({\n                  backgroundImage: 'url(' + YTPlayer.opt.mobileFallbackImage + ')',\n                  backgroundPosition: 'center center',\n                  backgroundSize: 'cover',\n                  backgroundRepeat: 'no-repeat',\n                  opacity: 1,\n                }),\n                YTPlayer.wrapper.css({ opacity: 1 })),\n              $YTPlayer\n            );\n          jQuery.mbBrowser.mobile &&\n            YTPlayer.opt.autoPlay &&\n            YTPlayer.opt.useOnMobile &&\n            jQuery('body').one('touchstart', function() {\n              YTPlayer.player.playVideo();\n            }),\n            jQuery(document).one('YTAPIReady', function() {\n              $YTPlayer.trigger('YTAPIReady_' + YTPlayer.id), (ytp.YTAPIReady = !0);\n            }),\n            (YTPlayer.isOnScreen = jQuery.mbYTPlayer.isOnScreen(\n              YTPlayer,\n              YTPlayer.opt.onScreenPercentage,\n            )),\n            $YTPlayer.one('YTAPIReady_' + YTPlayer.id, function() {\n              var o = this,\n                t = jQuery(o);\n              (o.isBackground && ytp.backgroundIsInited) ||\n                o.isInit ||\n                (o.isBackground && (ytp.backgroundIsInited = !0),\n                (o.opt.autoPlay = void 0 === o.opt.autoPlay ? !!o.isBackground : o.opt.autoPlay),\n                (o.opt.vol = o.opt.vol ? o.opt.vol : 100),\n                jQuery.mbYTPlayer.getDataFromAPI(o),\n                jQuery(o).on('YTPChanged', function(e) {\n                  if (!o.isInit) {\n                    o.isInit = !0;\n                    var r = {\n                      modestbranding: 1,\n                      autoplay: 0,\n                      controls: 0,\n                      showinfo: 0,\n                      rel: 0,\n                      enablejsapi: 1,\n                      version: 3,\n                      playerapiid: o.playerID,\n                      origin: '*',\n                      allowfullscreen: !0,\n                      wmode: 'transparent',\n                      iv_load_policy: o.opt.showAnnotations,\n                      cc_load_policy: o.opt.cc_load_policy,\n                      playsinline: jQuery.mbBrowser.mobile ? 1 : 0,\n                      html5: document.createElement('video').canPlayType ? 1 : 0,\n                    };\n                    new YT.Player(o.playerID, {\n                      playerVars: r,\n                      events: {\n                        onReady: function(e) {\n                          (o.player = e.target),\n                            o.player.loadVideoById({\n                              videoId: o.videoID.toString(),\n                              suggestedQuality: o.opt.quality,\n                            }),\n                            t.trigger('YTPlayerIsReady_' + o.id);\n                        },\n                        onStateChange: function(e) {\n                          if ('function' == typeof e.target.getPlayerState) {\n                            var r = e.target.getPlayerState();\n                            if (o.preventTrigger || o.isStarting) o.preventTrigger = !1;\n                            else {\n                              var t;\n                              switch (\n                                ((o.state = r),\n                                e.data == YT.PlayerState.PLAYING &&\n                                  e.target.setPlaybackQuality(o.opt.quality),\n                                r)\n                              ) {\n                                case -1:\n                                  t = 'YTPUnstarted';\n                                  break;\n                                case 0:\n                                  t = 'YTPRealEnd';\n                                  break;\n                                case 1:\n                                  (t = 'YTPPlay'),\n                                    o.controlBar.length &&\n                                      o.controlBar\n                                        .find('.mb_YTPPlayPause')\n                                        .html(jQuery.mbYTPlayer.controls.pause),\n                                    o.isPlayer && o.inlinePlayButton.hide(),\n                                    jQuery(document).off('mousedown.YTPstart');\n                                  break;\n                                case 2:\n                                  (t = 'YTPPause'),\n                                    o.controlBar.length &&\n                                      o.controlBar\n                                        .find('.mb_YTPPlayPause')\n                                        .html(jQuery.mbYTPlayer.controls.play),\n                                    o.isPlayer && o.inlinePlayButton.show();\n                                  break;\n                                case 3:\n                                  o.player.setPlaybackQuality(o.opt.quality),\n                                    (t = 'YTPBuffering'),\n                                    o.controlBar.length &&\n                                      o.controlBar\n                                        .find('.mb_YTPPlayPause')\n                                        .html(jQuery.mbYTPlayer.controls.play);\n                                  break;\n                                case 5:\n                                  t = 'YTPCued';\n                              }\n                              var a = jQuery.Event(t);\n                              (a.time = o.currentTime), jQuery(o).trigger(a);\n                            }\n                          }\n                        },\n                        onPlaybackQualityChange: function(e) {\n                          var r = e.target.getPlaybackQuality(),\n                            t = jQuery.Event('YTPQualityChange');\n                          (t.quality = r), jQuery(o).trigger(t);\n                        },\n                        onError: function(e) {\n                          switch (\n                            ('function' == typeof o.opt.onError && o.opt.onError(t, e), e.data)\n                          ) {\n                            case 2:\n                              console.error(\n                                'video ID:: ' +\n                                  o.videoID +\n                                  ': The request contains an invalid parameter value. For example, this error occurs if you specify a video ID that does not have 11 characters, or if the video ID contains invalid characters, such as exclamation points or asterisks.',\n                              );\n                              break;\n                            case 5:\n                              console.error(\n                                'video ID:: ' +\n                                  o.videoID +\n                                  ': The requested content cannot be played in an HTML5 player or another error related to the HTML5 player has occurred.',\n                              );\n                              break;\n                            case 100:\n                              console.error(\n                                'video ID:: ' +\n                                  o.videoID +\n                                  ': The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private.',\n                              );\n                              break;\n                            case 101:\n                            case 150:\n                              console.error(\n                                'video ID:: ' +\n                                  o.videoID +\n                                  ': The owner of the requested video does not allow it to be played in embedded players.',\n                              );\n                          }\n                          o.isList && jQuery(o).YTPPlayNext();\n                        },\n                      },\n                    }),\n                      t.on('YTPlayerIsReady_' + o.id, function() {\n                        if (o.isReady) return this;\n                        (o.playerEl = o.player.getIframe()),\n                          jQuery(o.playerEl).unselectable(),\n                          t.optimizeDisplay(),\n                          jQuery(window)\n                            .off('resize.YTP_' + o.id)\n                            .on('resize.YTP_' + o.id, function() {\n                              t.optimizeDisplay();\n                            }),\n                          o.opt.remember_last_time &&\n                            jQuery(window).on('unload.YTP_' + o.id, function() {\n                              var e = o.player.getCurrentTime();\n                              jQuery.mbCookie.set('YTPlayer_start_from' + o.videoID, e, 0);\n                            }),\n                          t.YTPCheckForState();\n                      });\n                  }\n                }));\n            }),\n            $YTPlayer.off('YTPTime.mask'),\n            jQuery.mbYTPlayer.applyMask(YTPlayer);\n        }\n      });\n    },\n    isOnScreen: function(e, r) {\n      r = r || 10;\n      var t = e.wrapper,\n        a = jQuery(window).scrollTop(),\n        o = a + jQuery(window).height(),\n        n = (t.height() * r) / 100,\n        i = t.offset().top + n;\n      return t.offset().top + (t.height() - n) <= o && a <= i;\n    },\n    getDataFromAPI: function(n) {\n      (n.videoData = jQuery.mbStorage.get('YTPlayer_data_' + n.videoID)),\n        n.videoData\n          ? (setTimeout(function() {\n              n.dataReceived = !0;\n              var e = jQuery.Event('YTPChanged');\n              (e.time = n.currentTime),\n                (e.videoId = n.videoID),\n                (e.opt = n.opt),\n                jQuery(n).trigger(e);\n              var r = jQuery.Event('YTPData');\n              for (var t in ((r.prop = {}), n.videoData)) r.prop[t] = n.videoData[t];\n              jQuery(n).trigger(r);\n            }, n.opt.fadeOnStartTime),\n            (n.hasData = !0))\n          : jQuery.mbYTPlayer.apiKey\n          ? jQuery.getJSON(\n              'https://www.googleapis.com/youtube/v3/videos?id=' +\n                n.videoID +\n                '&key=' +\n                jQuery.mbYTPlayer.apiKey +\n                '&part=snippet',\n              function(e) {\n                n.dataReceived = !0;\n                var r,\n                  t = jQuery.Event('YTPChanged');\n                (t.time = n.currentTime),\n                  (t.videoId = n.videoID),\n                  jQuery(n).trigger(t),\n                  e.items[0]\n                    ? ((r = e.items[0].snippet),\n                      (n.videoData = {}),\n                      (n.videoData.id = n.videoID),\n                      (n.videoData.channelTitle = r.channelTitle),\n                      (n.videoData.title = r.title),\n                      (n.videoData.description =\n                        r.description.length < 400\n                          ? r.description\n                          : r.description.substring(0, 400) + ' ...'),\n                      (n.videoData.thumb_max = r.thumbnails.maxres\n                        ? r.thumbnails.maxres.url\n                        : null),\n                      (n.videoData.thumb_high = r.thumbnails.high ? r.thumbnails.high.url : null),\n                      (n.videoData.thumb_medium = r.thumbnails.medium\n                        ? r.thumbnails.medium.url\n                        : null),\n                      jQuery.mbStorage.set('YTPlayer_data_' + n.videoID, n.videoData),\n                      (n.hasData = !0))\n                    : ((n.videoData = {}), (n.hasData = !1));\n                var a = jQuery.Event('YTPData');\n                for (var o in ((a.prop = {}), n.videoData)) a.prop[o] = n.videoData[o];\n                jQuery(n).trigger(a);\n              },\n            )\n          : (setTimeout(function() {\n              var e = jQuery.Event('YTPChanged');\n              (e.time = n.currentTime), (e.videoId = n.videoID), jQuery(n).trigger(e);\n            }, 10),\n            (n.videoData = null)),\n        (n.opt.ratio = 'auto' == n.opt.ratio ? 16 / 9 : n.opt.ratio),\n        n.isPlayer &&\n          !n.opt.autoPlay &&\n          ((n.loading = jQuery('<div/>')\n            .addClass('loading')\n            .html('Loading')\n            .hide()),\n          jQuery(n).append(n.loading),\n          n.loading.fadeIn());\n    },\n    removeStoredData: function() {\n      jQuery.mbStorage.remove();\n    },\n    getVideoData: function() {\n      return this.get(0).videoData;\n    },\n    getVideoID: function() {\n      return this.get(0).videoID || !1;\n    },\n    getPlaylistID: function() {\n      return this.get(0).playlistID || !1;\n    },\n    setVideoQuality: function(e) {\n      var r = this.get(0);\n      return (\n        jQuery(r).YTPPause(),\n        (r.opt.quality = e),\n        r.player.setPlaybackQuality(e),\n        jQuery(r).YTPPlay(),\n        this\n      );\n    },\n    getVideoQuality: function() {\n      return this.get(0).player.getPlaybackQuality();\n    },\n    playlist: function(e, r, t) {\n      var a = this.get(0);\n      return (\n        (a.isList = !0),\n        r && (e = jQuery.shuffle(e)),\n        a.videoID ||\n          ((a.videos = e),\n          (a.videoCounter = 1),\n          (a.videoLength = e.length),\n          jQuery(a).data('property', e[0]),\n          jQuery(a).YTPlayer()),\n        'function' == typeof t &&\n          jQuery(a).on('YTPChanged', function() {\n            t(a);\n          }),\n        jQuery(a).on('YTPEnd', function() {\n          jQuery(a).YTPPlayNext();\n        }),\n        this\n      );\n    },\n    playNext: function() {\n      var e = this.get(0);\n      return (\n        e.videoCounter++,\n        e.videoCounter > e.videoLength && (e.videoCounter = 1),\n        jQuery(e).YTPPlayIndex(e.videoCounter),\n        this\n      );\n    },\n    playPrev: function() {\n      var e = this.get(0);\n      return (\n        e.videoCounter--,\n        e.videoCounter <= 0 && (e.videoCounter = e.videoLength),\n        jQuery(e).YTPPlayIndex(e.videoCounter),\n        this\n      );\n    },\n    playIndex: function(e) {\n      var r = this.get(0);\n      r.checkForStartAt && (clearInterval(r.checkForStartAt), clearInterval(r.getState)),\n        (r.videoCounter = e),\n        r.videoCounter >= r.videoLength && (r.videoCounter = r.videoLength);\n      var t = r.videos[r.videoCounter - 1];\n      return jQuery(r).YTPChangeVideo(t), this;\n    },\n    changeVideo: function(e) {\n      var r = this,\n        t = r.get(0);\n      (t.opt.startAt = 0),\n        (t.opt.stopAt = 0),\n        (t.opt.mask = !1),\n        (t.opt.mute = !0),\n        (t.opt.autoPlay = !0),\n        (t.opt.addFilters = !1),\n        (t.opt.coverImage = !1),\n        (t.hasData = !1),\n        (t.hasChanged = !0),\n        (t.player.loopTime = void 0),\n        e && jQuery.extend(t.opt, e),\n        (t.videoID = getYTPVideoID(t.opt.videoURL).videoID),\n        t.opt.loop && 'boolean' == typeof t.opt.loop && (t.opt.loop = 9999),\n        t.wrapper.css({ background: 'none' }),\n        jQuery(t.playerEl).CSSAnimate({ opacity: 0 }, t.opt.fadeOnStartTime, function() {\n          jQuery.mbYTPlayer.getDataFromAPI(t),\n            r.YTPGetPlayer().loadVideoById({ videoId: t.videoID, suggestedQuality: t.opt.quality }),\n            r.YTPPause(),\n            r.optimizeDisplay(),\n            r.YTPCheckForState();\n        });\n      var a = jQuery.Event('YTPChangeVideo');\n      return (a.time = t.currentTime), jQuery(t).trigger(a), jQuery.mbYTPlayer.applyMask(t), this;\n    },\n    getPlayer: function() {\n      var e = this.get(0);\n      return (e.isReady && e.player) || null;\n    },\n    playerDestroy: function() {\n      var e = this.get(0);\n      return (\n        e.isReady &&\n          ((ytp.YTAPIReady = !0),\n          (ytp.backgroundIsInited = !1),\n          (e.isInit = !1),\n          (e.videoID = null),\n          (e.isReady = !1),\n          e.wrapper.remove(),\n          jQuery('#controlBar_' + e.id).remove(),\n          clearInterval(e.checkForStartAt),\n          clearInterval(e.getState)),\n        this\n      );\n    },\n    fullscreen: function(real) {\n      var YTPlayer = this.get(0);\n      void 0 === real && (real = eval(YTPlayer.opt.realFullscreen));\n      var controls = jQuery('#controlBar_' + YTPlayer.id),\n        fullScreenBtn = controls.find('.mb_OnlyYT'),\n        videoWrapper = YTPlayer.isPlayer ? YTPlayer.opt.containment : YTPlayer.wrapper;\n      if (real) {\n        var fullscreenchange = jQuery.mbBrowser.mozilla\n          ? 'mozfullscreenchange'\n          : jQuery.mbBrowser.webkit\n          ? 'webkitfullscreenchange'\n          : 'fullscreenchange';\n        jQuery(document)\n          .off(fullscreenchange)\n          .on(fullscreenchange, function() {\n            RunPrefixMethod(document, 'IsFullScreen') || RunPrefixMethod(document, 'FullScreen')\n              ? (jQuery(YTPlayer).YTPSetVideoQuality('default'),\n                jQuery(YTPlayer).trigger('YTPFullScreenStart'))\n              : ((YTPlayer.isAlone = !1),\n                fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT),\n                jQuery(YTPlayer).YTPSetVideoQuality(YTPlayer.opt.quality),\n                videoWrapper.removeClass('YTPFullscreen'),\n                videoWrapper.CSSAnimate(\n                  { opacity: YTPlayer.opt.opacity },\n                  YTPlayer.opt.fadeOnStartTime,\n                ),\n                videoWrapper.css({ zIndex: 0 }),\n                YTPlayer.isBackground\n                  ? jQuery('body').after(controls)\n                  : YTPlayer.wrapper.before(controls),\n                jQuery(window).resize(),\n                jQuery(YTPlayer).trigger('YTPFullScreenEnd'));\n          });\n      }\n      if (YTPlayer.isAlone)\n        jQuery(document).off('mousemove.YTPlayer'),\n          clearTimeout(YTPlayer.hideCursor),\n          YTPlayer.overlay.css({ cursor: 'auto' }),\n          real\n            ? cancelFullscreen()\n            : (videoWrapper.CSSAnimate(\n                { opacity: YTPlayer.opt.opacity },\n                YTPlayer.opt.fadeOnStartTime,\n              ),\n              videoWrapper.css({ zIndex: 0 })),\n          fullScreenBtn.html(jQuery.mbYTPlayer.controls.onlyYT),\n          (YTPlayer.isAlone = !1);\n      else {\n        function hideMouse() {\n          YTPlayer.overlay.css({ cursor: 'none' });\n        }\n        jQuery(document).on('mousemove.YTPlayer', function(e) {\n          YTPlayer.overlay.css({ cursor: 'auto' }),\n            clearTimeout(YTPlayer.hideCursor),\n            jQuery(e.target)\n              .parents()\n              .is('.mb_YTPBar') || (YTPlayer.hideCursor = setTimeout(hideMouse, 3e3));\n        }),\n          hideMouse(),\n          real\n            ? (videoWrapper.css({ opacity: 0 }),\n              videoWrapper.addClass('YTPFullscreen'),\n              launchFullscreen(videoWrapper.get(0)),\n              setTimeout(function() {\n                videoWrapper.CSSAnimate({ opacity: 1 }, 2 * YTPlayer.opt.fadeOnStartTime),\n                  videoWrapper.append(controls),\n                  jQuery(YTPlayer).optimizeDisplay(),\n                  YTPlayer.player.seekTo(YTPlayer.player.getCurrentTime() + 0.1, !0);\n              }, YTPlayer.opt.fadeOnStartTime))\n            : videoWrapper\n                .css({ zIndex: 1e4 })\n                .CSSAnimate({ opacity: 1 }, 2 * YTPlayer.opt.fadeOnStartTime),\n          fullScreenBtn.html(jQuery.mbYTPlayer.controls.showSite),\n          (YTPlayer.isAlone = !0);\n      }\n      function RunPrefixMethod(e, r) {\n        for (var t, a, o = ['webkit', 'moz', 'ms', 'o', ''], n = 0; n < o.length && !e[t]; ) {\n          if (\n            ((t = r),\n            '' == o[n] && (t = t.substr(0, 1).toLowerCase() + t.substr(1)),\n            'undefined' != (a = typeof e[(t = o[n] + t)]))\n          )\n            return (o = [o[n]]), 'function' == a ? e[t]() : e[t];\n          n++;\n        }\n      }\n      function launchFullscreen(e) {\n        RunPrefixMethod(e, 'RequestFullScreen');\n      }\n      function cancelFullscreen() {\n        (RunPrefixMethod(document, 'FullScreen') || RunPrefixMethod(document, 'IsFullScreen')) &&\n          RunPrefixMethod(document, 'CancelFullScreen');\n      }\n      return this;\n    },\n    toggleLoops: function() {\n      var e = this.get(0),\n        r = e.opt;\n      return (\n        1 == r.loop\n          ? (r.loop = 0)\n          : (r.startAt ? e.player.seekTo(r.startAt) : e.player.playVideo(), (r.loop = 1)),\n        this\n      );\n    },\n    play: function() {\n      var e = this.get(0),\n        r = jQuery(e);\n      return (\n        e.isReady &&\n          (setTimeout(function() {\n            r.YTPSetAbundance(e.opt.abundance);\n          }, 300),\n          e.player.playVideo(),\n          jQuery(e.playerEl).css({ opacity: 1 }),\n          e.wrapper.css({ backgroundImage: 'none' }),\n          e.wrapper.CSSAnimate({ opacity: e.isAlone ? 1 : e.opt.opacity }, e.opt.fadeOnStartTime),\n          jQuery('#controlBar_' + e.id)\n            .find('.mb_YTPPlayPause')\n            .html(jQuery.mbYTPlayer.controls.pause),\n          (e.state = 1)),\n        this\n      );\n    },\n    togglePlay: function(e) {\n      var r = this.get(0);\n      return (\n        r.isReady &&\n          (1 == r.state ? this.YTPPause() : this.YTPPlay(), 'function' == typeof e && e(r.state)),\n        this\n      );\n    },\n    stop: function() {\n      var e = this.get(0);\n      return (\n        e.isReady &&\n          (jQuery('#controlBar_' + e.id)\n            .find('.mb_YTPPlayPause')\n            .html(jQuery.mbYTPlayer.controls.play),\n          e.player.stopVideo()),\n        this\n      );\n    },\n    pause: function() {\n      var e = this.get(0);\n      return (\n        e.isReady &&\n          (e.opt.abundance < 0.2 && this.YTPSetAbundance(0.2),\n          e.player.pauseVideo(),\n          (e.state = 2)),\n        this\n      );\n    },\n    seekTo: function(e) {\n      var r = this.get(0);\n      return r.isReady && r.player.seekTo(e, !0), this;\n    },\n    setVolume: function(e) {\n      var r = this.get(0);\n      return (\n        r.isReady &&\n          ((r.opt.vol = e),\n          this.YTPUnmute(),\n          r.player.setVolume(r.opt.vol),\n          r.volumeBar && r.volumeBar.length && r.volumeBar.updateSliderVal(e)),\n        this\n      );\n    },\n    getVolume: function() {\n      var e = this.get(0);\n      return e.isReady ? e.player.getVolume() : this;\n    },\n    toggleVolume: function() {\n      var e = this.get(0);\n      return (\n        e.isReady &&\n          (e.isMute\n            ? (jQuery.mbBrowser.mobile || this.YTPSetVolume(e.opt.vol), this.YTPUnmute())\n            : this.YTPMute()),\n        this\n      );\n    },\n    mute: function() {\n      var e = this.get(0);\n      if (!e.isReady) return this;\n      if (e.isMute) return this;\n      e.player.mute(),\n        (e.isMute = !0),\n        e.player.setVolume(0),\n        e.volumeBar &&\n          e.volumeBar.length &&\n          10 < e.volumeBar.width() &&\n          e.volumeBar.updateSliderVal(0),\n        jQuery('#controlBar_' + e.id)\n          .find('.mb_YTPMuteUnmute')\n          .html(jQuery.mbYTPlayer.controls.unmute),\n        jQuery(e).addClass('isMuted'),\n        e.volumeBar && e.volumeBar.length && e.volumeBar.addClass('muted');\n      var r = jQuery.Event('YTPMuted');\n      return (r.time = e.currentTime), e.preventTrigger || jQuery(e).trigger(r), this;\n    },\n    unmute: function() {\n      var e = this.get(0);\n      if (!e.isReady) return this;\n      if (!e.isMute) return this;\n      e.player.unMute(),\n        (e.isMute = !1),\n        jQuery(e).YTPSetVolume(e.opt.vol),\n        e.volumeBar &&\n          e.volumeBar.length &&\n          e.volumeBar.updateSliderVal(10 < e.opt.vol ? e.opt.vol : 10),\n        jQuery('#controlBar_' + e.id)\n          .find('.mb_YTPMuteUnmute')\n          .html(jQuery.mbYTPlayer.controls.mute),\n        jQuery(e).removeClass('isMuted'),\n        e.volumeBar && e.volumeBar.length && e.volumeBar.removeClass('muted');\n      var r = jQuery.Event('YTPUnmuted');\n      return (r.time = e.currentTime), e.preventTrigger || jQuery(e).trigger(r), this;\n    },\n    applyFilter: function(e, r) {\n      var t = this.get(0);\n      if (!t.isReady) return this;\n      (t.filters[e].value = r), t.filtersEnabled && this.YTPEnableFilters();\n    },\n    applyFilters: function(e) {\n      var r = this,\n        t = r.get(0);\n      if (!t.isReady)\n        return (\n          jQuery(t).on('YTPReady', function() {\n            r.YTPApplyFilters(e);\n          }),\n          this\n        );\n      for (var a in e) r.YTPApplyFilter(a, e[a]);\n      r.trigger('YTPFiltersApplied');\n    },\n    toggleFilter: function(e, r) {\n      var t = this.get(0);\n      return (\n        t.isReady &&\n          (t.filters[e].value ? (t.filters[e].value = 0) : (t.filters[e].value = r),\n          t.filtersEnabled && jQuery(t).YTPEnableFilters()),\n        this\n      );\n    },\n    toggleFilters: function(e) {\n      var r = this.get(0);\n      return (\n        r.isReady &&\n          (r.filtersEnabled\n            ? (jQuery(r).trigger('YTPDisableFilters'), jQuery(r).YTPDisableFilters())\n            : (jQuery(r).YTPEnableFilters(), jQuery(r).trigger('YTPEnableFilters')),\n          'function' == typeof e && e(r.filtersEnabled)),\n        this\n      );\n    },\n    disableFilters: function() {\n      var e = this.get(0);\n      if (!e.isReady) return this;\n      var r = jQuery(e.playerEl);\n      return r.css('-webkit-filter', ''), r.css('filter', ''), (e.filtersEnabled = !1), this;\n    },\n    enableFilters: function() {\n      var e = this.get(0);\n      if (!e.isReady) return this;\n      var r = jQuery(e.playerEl),\n        t = '';\n      for (var a in e.filters)\n        e.filters[a].value &&\n          (t += a.replace('_', '-') + '(' + e.filters[a].value + e.filters[a].unit + ') ');\n      return r.css('-webkit-filter', t), r.css('filter', t), (e.filtersEnabled = !0), this;\n    },\n    removeFilter: function(e, r) {\n      var t = this.get(0);\n      if (!t.isReady) return this;\n      if (('function' == typeof e && ((r = e), (e = null)), e))\n        this.YTPApplyFilter(e, 0), 'function' == typeof r && r(e);\n      else {\n        for (var a in t.filters) this.YTPApplyFilter(a, 0);\n        'function' == typeof r && r(a),\n          (t.filters = jQuery.extend(!0, {}, jQuery.mbYTPlayer.defaultFilters));\n      }\n      var o = jQuery.Event('YTPFiltersApplied');\n      return this.trigger(o), this;\n    },\n    getFilters: function() {\n      var e = this.get(0);\n      return e.isReady ? e.filters : this;\n    },\n    addMask: function(e) {\n      var r = this.get(0);\n      e || (e = r.actualMask);\n      var t = jQuery('<img/>')\n        .attr('src', e)\n        .on('load', function() {\n          r.overlay.CSSAnimate({ opacity: 0 }, r.opt.fadeOnStartTime, function() {\n            (r.hasMask = !0),\n              t.remove(),\n              r.overlay.css({\n                backgroundImage: 'url(' + e + ')',\n                backgroundRepeat: 'no-repeat',\n                backgroundPosition: 'center center',\n                backgroundSize: 'cover',\n              }),\n              r.overlay.CSSAnimate({ opacity: 1 }, r.opt.fadeOnStartTime);\n          });\n        });\n      return this;\n    },\n    removeMask: function() {\n      var e = this.get(0);\n      return (\n        e.overlay.CSSAnimate({ opacity: 0 }, e.opt.fadeOnStartTime, function() {\n          (e.hasMask = !1),\n            e.overlay.css({\n              backgroundImage: '',\n              backgroundRepeat: '',\n              backgroundPosition: '',\n              backgroundSize: '',\n            }),\n            e.overlay.CSSAnimate({ opacity: 1 }, e.opt.fadeOnStartTime);\n        }),\n        this\n      );\n    },\n    applyMask: function(t) {\n      var a = jQuery(t);\n      if ((a.off('YTPTime.mask'), t.opt.mask))\n        if ('string' == typeof t.opt.mask) a.YTPAddMask(t.opt.mask), (t.actualMask = t.opt.mask);\n        else if ('object' == typeof t.opt.mask) {\n          for (var e in (console.debug(t.opt.mask), t.opt.mask))\n            if (t.opt.mask[e]) jQuery('<img/>').attr('src', t.opt.mask[e]);\n          t.opt.mask[0] && a.YTPAddMask(t.opt.mask[0]),\n            a.on('YTPTime.mask', function(e) {\n              for (var r in t.opt.mask)\n                e.time == r &&\n                  (t.opt.mask[r]\n                    ? (a.YTPAddMask(t.opt.mask[r]), (t.actualMask = t.opt.mask[r]))\n                    : a.YTPRemoveMask());\n            });\n        }\n    },\n    toggleMask: function() {\n      var e = this.get(0),\n        r = jQuery(e);\n      return e.hasMask ? r.YTPRemoveMask() : r.YTPAddMask(), this;\n    },\n    manageProgress: function() {\n      var e = this.get(0),\n        r = jQuery('#controlBar_' + e.id),\n        t = r.find('.mb_YTPProgress'),\n        a = r.find('.mb_YTPLoaded'),\n        o = r.find('.mb_YTPseekbar'),\n        n = t.outerWidth(),\n        i = Math.floor(e.player.getCurrentTime()),\n        l = Math.floor(e.player.getDuration()),\n        s = (i * n) / l,\n        u = 100 * e.player.getVideoLoadedFraction();\n      return (\n        a.css({ left: 0, width: u + '%' }),\n        o.css({ left: 0, width: s }),\n        { totalTime: l, currentTime: i }\n      );\n    },\n    buildControls: function(YTPlayer) {\n      if ((jQuery('#controlBar_' + YTPlayer.id).remove(), YTPlayer.opt.showControls)) {\n        if (\n          ((YTPlayer.opt.showYTLogo = YTPlayer.opt.showYTLogo || YTPlayer.opt.printUrl),\n          !jQuery('#controlBar_' + YTPlayer.id).length)\n        ) {\n          YTPlayer.controlBar = jQuery('<div/>')\n            .attr('id', 'controlBar_' + YTPlayer.id)\n            .addClass('mb_YTPBar')\n            .css({\n              whiteSpace: 'noWrap',\n              position: YTPlayer.isBackground ? 'fixed' : 'absolute',\n              zIndex: YTPlayer.isBackground ? 1e4 : 1e3,\n            })\n            .hide()\n            .on('click', function(e) {\n              e.stopPropagation();\n            });\n          var buttonBar = jQuery('<div/>').addClass('buttonBar'),\n            playpause = jQuery('<span>' + jQuery.mbYTPlayer.controls.play + '</span>')\n              .addClass('mb_YTPPlayPause ytpicon')\n              .on('click', function(e) {\n                e.stopPropagation(), jQuery(YTPlayer).YTPTogglePlay();\n              }),\n            MuteUnmute = jQuery('<span>' + jQuery.mbYTPlayer.controls.mute + '</span>')\n              .addClass('mb_YTPMuteUnmute ytpicon')\n              .on('click', function(e) {\n                e.stopPropagation(), jQuery(YTPlayer).YTPToggleVolume();\n              }),\n            volumeBar = jQuery('<div/>')\n              .addClass('mb_YTPVolumeBar')\n              .css({ display: 'inline-block' });\n          YTPlayer.volumeBar = volumeBar;\n          var idx = jQuery('<span/>').addClass('mb_YTPTime'),\n            vURL = YTPlayer.opt.videoURL ? YTPlayer.opt.videoURL : '';\n          vURL.indexOf('http') < 0 &&\n            (vURL = 'https://www.youtube.com/watch?v=' + YTPlayer.opt.videoURL);\n          var movieUrl = jQuery('<span/>')\n              .html(jQuery.mbYTPlayer.controls.ytLogo)\n              .addClass('mb_YTPUrl ytpicon')\n              .attr('title', 'view on YouTube')\n              .on('click', function() {\n                window.open(vURL, 'viewOnYT');\n              }),\n            onlyVideo = jQuery('<span/>')\n              .html(jQuery.mbYTPlayer.controls.onlyYT)\n              .addClass('mb_OnlyYT ytpicon')\n              .on('click', function(e) {\n                e.stopPropagation(), jQuery(YTPlayer).YTPFullscreen(YTPlayer.opt.realFullscreen);\n              }),\n            progressBar = jQuery('<div/>')\n              .addClass('mb_YTPProgress')\n              .css('position', 'absolute')\n              .on('click', function(e) {\n                e.stopPropagation(),\n                  timeBar.css({ width: e.clientX - timeBar.offset().left }),\n                  (YTPlayer.timeW = e.clientX - timeBar.offset().left),\n                  YTPlayer.controlBar.find('.mb_YTPLoaded').css({ width: 0 });\n                var r = Math.floor(YTPlayer.player.getDuration());\n                (YTPlayer.goto = (timeBar.outerWidth() * r) / progressBar.outerWidth()),\n                  YTPlayer.player.seekTo(parseFloat(YTPlayer.goto), !0),\n                  YTPlayer.controlBar.find('.mb_YTPLoaded').css({ width: 0 });\n              }),\n            loadedBar = jQuery('<div/>')\n              .addClass('mb_YTPLoaded')\n              .css('position', 'absolute'),\n            timeBar = jQuery('<div/>')\n              .addClass('mb_YTPseekbar')\n              .css('position', 'absolute');\n          progressBar.append(loadedBar).append(timeBar),\n            buttonBar\n              .append(playpause)\n              .append(MuteUnmute)\n              .append(volumeBar)\n              .append(idx),\n            YTPlayer.opt.showYTLogo && buttonBar.append(movieUrl),\n            (YTPlayer.isBackground ||\n              (eval(YTPlayer.opt.realFullscreen) && !YTPlayer.isBackground)) &&\n              buttonBar.append(onlyVideo),\n            YTPlayer.controlBar.append(buttonBar).append(progressBar),\n            YTPlayer.isBackground\n              ? jQuery('body').after(YTPlayer.controlBar)\n              : (YTPlayer.controlBar.addClass('inlinePlayer'),\n                YTPlayer.wrapper.before(YTPlayer.controlBar)),\n            volumeBar.simpleSlider({\n              initialval: YTPlayer.opt.vol,\n              scale: 100,\n              orientation: 'h',\n              callback: function(e) {\n                0 == e.value ? jQuery(YTPlayer).YTPMute() : jQuery(YTPlayer).YTPUnmute(),\n                  YTPlayer.player.setVolume(e.value),\n                  YTPlayer.isMute || (YTPlayer.opt.vol = e.value);\n              },\n            });\n        }\n      } else YTPlayer.controlBar = !1;\n    },\n    checkForState: function() {\n      var YTPlayer = this.get(0),\n        $YTPlayer = jQuery(YTPlayer);\n      clearInterval(YTPlayer.getState);\n      var interval = 100;\n      if (!jQuery.contains(document, YTPlayer))\n        return (\n          $YTPlayer.YTPPlayerDestroy(),\n          clearInterval(YTPlayer.getState),\n          void clearInterval(YTPlayer.checkForStartAt)\n        );\n      jQuery.mbYTPlayer.checkForStart(YTPlayer),\n        (YTPlayer.getState = setInterval(function() {\n          var $YTPlayer = jQuery(YTPlayer);\n          if (YTPlayer.isReady) {\n            var prog = jQuery(YTPlayer).YTPManageProgress(),\n              stopAt = YTPlayer.opt.stopAt > YTPlayer.opt.startAt ? YTPlayer.opt.stopAt : 0;\n            if (\n              ((stopAt = stopAt < YTPlayer.player.getDuration() ? stopAt : 0),\n              YTPlayer.currentTime != prog.currentTime)\n            ) {\n              var YTPEvent = jQuery.Event('YTPTime');\n              (YTPEvent.time = YTPlayer.currentTime), jQuery(YTPlayer).trigger(YTPEvent);\n            }\n            if (\n              ((YTPlayer.currentTime = prog.currentTime),\n              (YTPlayer.totalTime = YTPlayer.player.getDuration()),\n              0 == YTPlayer.player.getVolume()\n                ? $YTPlayer.addClass('isMuted')\n                : $YTPlayer.removeClass('isMuted'),\n              YTPlayer.opt.showControls &&\n                (prog.totalTime\n                  ? YTPlayer.controlBar\n                      .find('.mb_YTPTime')\n                      .html(\n                        jQuery.mbYTPlayer.formatTime(prog.currentTime) +\n                          ' / ' +\n                          jQuery.mbYTPlayer.formatTime(prog.totalTime),\n                      )\n                  : YTPlayer.controlBar.find('.mb_YTPTime').html('-- : -- / -- : --')),\n              eval(YTPlayer.opt.stopMovieOnBlur) &&\n                (document.hasFocus()\n                  ? document.hasFocus() &&\n                    !YTPlayer.hasFocus &&\n                    -1 != YTPlayer.state &&\n                    0 != YTPlayer.state &&\n                    ((YTPlayer.hasFocus = !0), (YTPlayer.preventTrigger = !0), $YTPlayer.YTPPlay())\n                  : 1 == YTPlayer.state &&\n                    ((YTPlayer.hasFocus = !1),\n                    (YTPlayer.preventTrigger = !0),\n                    $YTPlayer.YTPPause())),\n              YTPlayer.opt.playOnlyIfVisible)\n            ) {\n              var isOnScreen = jQuery.mbYTPlayer.isOnScreen(\n                YTPlayer,\n                YTPlayer.opt.onScreenPercentage,\n              );\n              isOnScreen || 1 != YTPlayer.state\n                ? isOnScreen &&\n                  !YTPlayer.isOnScreen &&\n                  ((YTPlayer.isOnScreen = !0), YTPlayer.player.playVideo())\n                : ((YTPlayer.isOnScreen = !1), $YTPlayer.YTPPause());\n            }\n            if (\n              (YTPlayer.controlBar.length &&\n              YTPlayer.controlBar.outerWidth() <= 400 &&\n              !YTPlayer.isCompact\n                ? (YTPlayer.controlBar.addClass('compact'),\n                  (YTPlayer.isCompact = !0),\n                  !YTPlayer.isMute &&\n                    YTPlayer.volumeBar &&\n                    YTPlayer.volumeBar.updateSliderVal(YTPlayer.opt.vol))\n                : YTPlayer.controlBar.length &&\n                  400 < YTPlayer.controlBar.outerWidth() &&\n                  YTPlayer.isCompact &&\n                  (YTPlayer.controlBar.removeClass('compact'),\n                  (YTPlayer.isCompact = !1),\n                  !YTPlayer.isMute &&\n                    YTPlayer.volumeBar &&\n                    YTPlayer.volumeBar.updateSliderVal(YTPlayer.opt.vol)),\n              0 < YTPlayer.player.getPlayerState() &&\n                (parseFloat(YTPlayer.player.getDuration() - YTPlayer.opt.fadeOnStartTime / 1e3) <\n                  YTPlayer.player.getCurrentTime() ||\n                  (0 < stopAt && parseFloat(YTPlayer.player.getCurrentTime()) >= stopAt)))\n            ) {\n              if (YTPlayer.isEnded) return;\n              if (\n                ((YTPlayer.isEnded = !0),\n                setTimeout(function() {\n                  YTPlayer.isEnded = !1;\n                }, 1e3),\n                YTPlayer.isList)\n              ) {\n                if (\n                  !YTPlayer.opt.loop ||\n                  (0 < YTPlayer.opt.loop && YTPlayer.player.loopTime === YTPlayer.opt.loop - 1)\n                ) {\n                  (YTPlayer.player.loopTime = void 0), clearInterval(YTPlayer.getState);\n                  var YTPEnd = jQuery.Event('YTPEnd');\n                  return (\n                    (YTPEnd.time = YTPlayer.currentTime), void jQuery(YTPlayer).trigger(YTPEnd)\n                  );\n                }\n              } else if (\n                !YTPlayer.opt.loop ||\n                (0 < YTPlayer.opt.loop && YTPlayer.player.loopTime === YTPlayer.opt.loop - 1)\n              ) {\n                if (\n                  ((YTPlayer.player.loopTime = void 0),\n                  (YTPlayer.state = 2),\n                  YTPlayer.opt.coverImage || YTPlayer.orig_containment_background)\n                ) {\n                  var bgndURL = YTPlayer.opt.coverImage\n                    ? 'url(' + YTPlayer.opt.coverImage + ') center center'\n                    : YTPlayer.orig_containment_background;\n                  YTPlayer.opt.containment.css({ background: bgndURL, backgroundSize: 'cover' });\n                }\n                return (\n                  jQuery(YTPlayer).YTPPause(),\n                  void YTPlayer.wrapper.CSSAnimate(\n                    { opacity: 0 },\n                    YTPlayer.opt.fadeOnStartTime,\n                    function() {\n                      YTPlayer.controlBar.length &&\n                        YTPlayer.controlBar\n                          .find('.mb_YTPPlayPause')\n                          .html(jQuery.mbYTPlayer.controls.play);\n                      var e = jQuery.Event('YTPEnd');\n                      if (\n                        ((e.time = YTPlayer.currentTime),\n                        jQuery(YTPlayer).trigger(e),\n                        YTPlayer.player.seekTo(YTPlayer.opt.startAt, !0),\n                        YTPlayer.opt.coverImage || YTPlayer.orig_containment_background)\n                      ) {\n                        var r = YTPlayer.opt.coverImage\n                          ? 'url(' + YTPlayer.opt.coverImage + ') center center'\n                          : YTPlayer.orig_containment_background;\n                        YTPlayer.opt.containment.css({ background: r, backgroundSize: 'cover' });\n                      }\n                    },\n                  )\n                );\n              }\n              (YTPlayer.player.loopTime = YTPlayer.player.loopTime\n                ? ++YTPlayer.player.loopTime\n                : 1),\n                (YTPlayer.opt.startAt = YTPlayer.opt.startAt || 1),\n                (YTPlayer.preventTrigger = !0),\n                (YTPlayer.state = 2),\n                YTPlayer.player.seekTo(YTPlayer.opt.startAt, !0);\n            }\n          }\n        }, interval));\n    },\n    checkForStart: function(YTPlayer) {\n      var $YTPlayer = jQuery(YTPlayer);\n      if (jQuery.contains(document, YTPlayer)) {\n        if ((jQuery.mbYTPlayer.buildControls(YTPlayer), YTPlayer.overlay))\n          if (YTPlayer.opt.addRaster) {\n            var classN = 'dot' == YTPlayer.opt.addRaster ? 'raster-dot' : 'raster';\n            YTPlayer.overlay.addClass(YTPlayer.isRetina ? classN + ' retina' : classN);\n          } else\n            YTPlayer.overlay.removeClass(function(e, r) {\n              var t = r.split(' '),\n                a = [];\n              return (\n                jQuery.each(t, function(e, r) {\n                  /raster.*/.test(r) && a.push(r);\n                }),\n                a.push('retina'),\n                a.join(' ')\n              );\n            });\n        (YTPlayer.preventTrigger = !0),\n          (YTPlayer.state = 2),\n          (YTPlayer.preventTrigger = !0),\n          YTPlayer.player.mute(),\n          YTPlayer.player.playVideo(),\n          (YTPlayer.isStarting = !0);\n        var startAt = YTPlayer.start_from_last\n          ? YTPlayer.start_from_last\n          : YTPlayer.opt.startAt\n          ? YTPlayer.opt.startAt\n          : 1;\n        return (\n          (YTPlayer.preventTrigger = !0),\n          (YTPlayer.checkForStartAt = setInterval(function() {\n            YTPlayer.player.mute(), YTPlayer.player.seekTo(startAt, !0);\n            var canPlayVideo =\n              YTPlayer.player.getVideoLoadedFraction() >= startAt / YTPlayer.player.getDuration();\n            if (\n              0 < YTPlayer.player.getDuration() &&\n              YTPlayer.player.getCurrentTime() >= startAt &&\n              canPlayVideo\n            ) {\n              (YTPlayer.start_from_last = null),\n                (YTPlayer.preventTrigger = !0),\n                $YTPlayer.YTPPause(),\n                clearInterval(YTPlayer.checkForStartAt),\n                'function' == typeof YTPlayer.opt.onReady && YTPlayer.opt.onReady(YTPlayer),\n                (YTPlayer.isReady = !0),\n                $YTPlayer.YTPRemoveFilter(),\n                YTPlayer.opt.addFilters\n                  ? $YTPlayer.YTPApplyFilters(YTPlayer.opt.addFilters)\n                  : $YTPlayer.YTPApplyFilters(),\n                $YTPlayer.YTPEnableFilters();\n              var YTPready = jQuery.Event('YTPReady');\n              if (\n                ((YTPready.time = YTPlayer.currentTime),\n                $YTPlayer.trigger(YTPready),\n                (YTPlayer.state = 2),\n                YTPlayer.opt.mute\n                  ? $YTPlayer.YTPMute()\n                  : (YTPlayer.opt.autoPlay &&\n                      (console.debug(\n                        \"To make the video 'auto-play' you must mute the audio according with the latest vendor policy\",\n                      ),\n                      YTPlayer.player.mute()),\n                    YTPlayer.player.unMute()),\n                'undefined' != typeof _gaq && eval(YTPlayer.opt.gaTrack)\n                  ? _gaq.push([\n                      '_trackEvent',\n                      'YTPlayer',\n                      'Play',\n                      YTPlayer.hasData ? YTPlayer.videoData.title : YTPlayer.videoID.toString(),\n                    ])\n                  : 'undefined' != typeof ga &&\n                    eval(YTPlayer.opt.gaTrack) &&\n                    ga(\n                      'send',\n                      'event',\n                      'YTPlayer',\n                      'play',\n                      YTPlayer.hasData ? YTPlayer.videoData.title : YTPlayer.videoID.toString(),\n                    ),\n                YTPlayer.opt.autoPlay)\n              ) {\n                var YTPStart = jQuery.Event('YTPStart');\n                (YTPStart.time = YTPlayer.currentTime),\n                  jQuery(YTPlayer).trigger(YTPStart),\n                  (YTPlayer.isStarting = !1),\n                  'mac' == jQuery.mbBrowser.os.name &&\n                    jQuery.mbBrowser.safari &&\n                    jQuery('body').one('mousedown.YTPstart', function() {\n                      $YTPlayer.YTPPlay();\n                    }),\n                  $YTPlayer.YTPPlay();\n              } else\n                (YTPlayer.preventTrigger = !0),\n                  $YTPlayer.YTPPause(),\n                  YTPlayer.start_from_last && YTPlayer.player.seekTo(startAt, !0),\n                  setTimeout(function() {\n                    (YTPlayer.preventTrigger = !0),\n                      $YTPlayer.YTPPause(),\n                      YTPlayer.isPlayer ||\n                        (YTPlayer.opt.coverImage\n                          ? (YTPlayer.wrapper.css({ opacity: 0 }),\n                            setTimeout(function() {\n                              if (YTPlayer.opt.coverImage || YTPlayer.orig_containment_background) {\n                                var e = YTPlayer.opt.coverImage\n                                  ? 'url(' + YTPlayer.opt.coverImage + ') center center'\n                                  : YTPlayer.orig_containment_background;\n                                YTPlayer.wrapper.css({\n                                  background: e,\n                                  backgroundSize: 'cover',\n                                  backgroundRepeat: 'no-repeat',\n                                });\n                              }\n                            }, YTPlayer.opt.fadeOnStartTime))\n                          : (jQuery(YTPlayer.playerEl).CSSAnimate(\n                              { opacity: 1 },\n                              YTPlayer.opt.fadeOnStartTime,\n                            ),\n                            YTPlayer.wrapper.CSSAnimate(\n                              { opacity: YTPlayer.isAlone ? 1 : YTPlayer.opt.opacity },\n                              YTPlayer.opt.fadeOnStartTime,\n                            ))),\n                      (YTPlayer.isStarting = !1);\n                  }, 500),\n                  YTPlayer.controlBar.length &&\n                    YTPlayer.controlBar\n                      .find('.mb_YTPPlayPause')\n                      .html(jQuery.mbYTPlayer.controls.play);\n              YTPlayer.isPlayer &&\n                !YTPlayer.opt.autoPlay &&\n                YTPlayer.loading &&\n                YTPlayer.loading.length &&\n                (YTPlayer.loading.html('Ready'),\n                setTimeout(function() {\n                  YTPlayer.loading.fadeOut();\n                }, 100)),\n                YTPlayer.controlBar &&\n                  YTPlayer.controlBar.length &&\n                  YTPlayer.controlBar.slideDown(1e3);\n            }\n            'mac' == jQuery.mbBrowser.os.name &&\n              jQuery.mbBrowser.safari &&\n              (YTPlayer.player.playVideo(), 0 <= startAt && YTPlayer.player.seekTo(startAt, !0));\n          }, 100)),\n          $YTPlayer\n        );\n      }\n      $YTPlayer.YTPPlayerDestroy();\n    },\n    getTime: function() {\n      var e = this.get(0);\n      return jQuery.mbYTPlayer.formatTime(e.currentTime);\n    },\n    getTotalTime: function(e) {\n      var r = this.get(0);\n      return jQuery.mbYTPlayer.formatTime(r.totalTime);\n    },\n    formatTime: function(e) {\n      var r = Math.floor(e / 60),\n        t = Math.floor(e - 60 * r);\n      return (r <= 9 ? '0' + r : r) + ' : ' + (t <= 9 ? '0' + t : t);\n    },\n    setAnchor: function(e) {\n      this.optimizeDisplay(e);\n    },\n    getAnchor: function() {\n      return this.get(0).opt.anchor;\n    },\n    setAbundance: function(e, r) {\n      var t = this.get(0);\n      return r && (t.opt.abundance = e), this.optimizeDisplay(t.opt.anchor, e), this;\n    },\n    getAbundance: function() {\n      return this.get(0).opt.abundance;\n    },\n    setOption: function(e, r) {\n      var t = this.get(0);\n      return (t.opt[e] = r), this;\n    },\n  }),\n    (jQuery.fn.optimizeDisplay = function(anchor, abundanceX) {\n      var YTPlayer = this.get(0),\n        vid = {},\n        el = YTPlayer.wrapper,\n        iframe = jQuery(YTPlayer.playerEl);\n      (YTPlayer.opt.anchor = anchor || YTPlayer.opt.anchor),\n        (YTPlayer.opt.anchor =\n          'undefined ' != typeof YTPlayer.opt.anchor ? YTPlayer.opt.anchor : 'center,center');\n      var YTPAlign = YTPlayer.opt.anchor.split(','),\n        ab = abundanceX || YTPlayer.opt.abundance;\n      if (YTPlayer.opt.optimizeDisplay) {\n        var abundance = el.height() * ab,\n          win = {};\n        (win.width = el.outerWidth()),\n          (win.height = el.outerHeight() + abundance),\n          (YTPlayer.opt.ratio = 'auto' === YTPlayer.opt.ratio ? 16 / 9 : YTPlayer.opt.ratio),\n          (YTPlayer.opt.ratio = eval(YTPlayer.opt.ratio)),\n          (vid.width = win.width + abundance),\n          (vid.height = Math.ceil(vid.width / YTPlayer.opt.ratio)),\n          (vid.marginTop = Math.ceil(-(vid.height - win.height + abundance) / 2)),\n          (vid.marginLeft = -abundance / 2);\n        var lowest = vid.height < win.height;\n        for (var a in (lowest &&\n          ((vid.height = win.height + abundance),\n          (vid.width = Math.ceil(vid.height * YTPlayer.opt.ratio)),\n          (vid.marginTop = -abundance / 2),\n          (vid.marginLeft = Math.ceil(-(vid.width - win.width) / 2))),\n        YTPAlign))\n          if (YTPAlign.hasOwnProperty(a)) {\n            var al = YTPAlign[a].replace(/ /g, '');\n            switch (al) {\n              case 'top':\n                vid.marginTop = -abundance;\n                break;\n              case 'bottom':\n                vid.marginTop = Math.ceil(-(vid.height - win.height) - abundance / 2);\n                break;\n              case 'left':\n                vid.marginLeft = -abundance;\n                break;\n              case 'right':\n                vid.marginLeft = Math.ceil(-(vid.width - win.width) + abundance / 2);\n            }\n          }\n      } else (vid.width = '100%'), (vid.height = '100%'), (vid.marginTop = 0), (vid.marginLeft = 0);\n      iframe.css({\n        width: vid.width,\n        height: vid.height,\n        marginTop: vid.marginTop,\n        marginLeft: vid.marginLeft,\n        maxWidth: 'initial',\n      });\n    }),\n    (jQuery.shuffle = function(e) {\n      for (var r = e.slice(), t = r.length, a = t; a--; ) {\n        var o = parseInt(Math.random() * t),\n          n = r[a];\n        (r[a] = r[o]), (r[o] = n);\n      }\n      return r;\n    }),\n    (jQuery.fn.unselectable = function() {\n      return this.each(function() {\n        jQuery(this)\n          .css({ '-moz-user-select': 'none', '-webkit-user-select': 'none', 'user-select': 'none' })\n          .attr('unselectable', 'on');\n      });\n    }),\n    (jQuery.fn.YTPlayer = jQuery.mbYTPlayer.buildPlayer),\n    (jQuery.fn.mb_YTPlayer = jQuery.mbYTPlayer.buildPlayer),\n    (jQuery.fn.YTPCheckForState = jQuery.mbYTPlayer.checkForState),\n    (jQuery.fn.YTPGetPlayer = jQuery.mbYTPlayer.getPlayer),\n    (jQuery.fn.YTPGetVideoID = jQuery.mbYTPlayer.getVideoID),\n    (jQuery.fn.YTPGetPlaylistID = jQuery.mbYTPlayer.getPlaylistID),\n    (jQuery.fn.YTPChangeVideo = jQuery.fn.YTPChangeMovie = jQuery.mbYTPlayer.changeVideo),\n    (jQuery.fn.YTPPlayerDestroy = jQuery.mbYTPlayer.playerDestroy),\n    (jQuery.fn.YTPPlay = jQuery.mbYTPlayer.play),\n    (jQuery.fn.YTPTogglePlay = jQuery.mbYTPlayer.togglePlay),\n    (jQuery.fn.YTPStop = jQuery.mbYTPlayer.stop),\n    (jQuery.fn.YTPPause = jQuery.mbYTPlayer.pause),\n    (jQuery.fn.YTPSeekTo = jQuery.mbYTPlayer.seekTo),\n    (jQuery.fn.YTPlaylist = jQuery.mbYTPlayer.playlist),\n    (jQuery.fn.YTPPlayNext = jQuery.mbYTPlayer.playNext),\n    (jQuery.fn.YTPPlayPrev = jQuery.mbYTPlayer.playPrev),\n    (jQuery.fn.YTPPlayIndex = jQuery.mbYTPlayer.playIndex),\n    (jQuery.fn.YTPMute = jQuery.mbYTPlayer.mute),\n    (jQuery.fn.YTPUnmute = jQuery.mbYTPlayer.unmute),\n    (jQuery.fn.YTPToggleVolume = jQuery.mbYTPlayer.toggleVolume),\n    (jQuery.fn.YTPSetVolume = jQuery.mbYTPlayer.setVolume),\n    (jQuery.fn.YTPGetVolume = jQuery.mbYTPlayer.getVolume),\n    (jQuery.fn.YTPGetVideoData = jQuery.mbYTPlayer.getVideoData),\n    (jQuery.fn.YTPFullscreen = jQuery.mbYTPlayer.fullscreen),\n    (jQuery.fn.YTPToggleLoops = jQuery.mbYTPlayer.toggleLoops),\n    (jQuery.fn.YTPManageProgress = jQuery.mbYTPlayer.manageProgress),\n    (jQuery.fn.YTPSetVideoQuality = jQuery.mbYTPlayer.setVideoQuality),\n    (jQuery.fn.YTPGetVideoQuality = jQuery.mbYTPlayer.getVideoQuality),\n    (jQuery.fn.YTPApplyFilter = jQuery.mbYTPlayer.applyFilter),\n    (jQuery.fn.YTPApplyFilters = jQuery.mbYTPlayer.applyFilters),\n    (jQuery.fn.YTPToggleFilter = jQuery.mbYTPlayer.toggleFilter),\n    (jQuery.fn.YTPToggleFilters = jQuery.mbYTPlayer.toggleFilters),\n    (jQuery.fn.YTPRemoveFilter = jQuery.mbYTPlayer.removeFilter),\n    (jQuery.fn.YTPDisableFilters = jQuery.mbYTPlayer.disableFilters),\n    (jQuery.fn.YTPEnableFilters = jQuery.mbYTPlayer.enableFilters),\n    (jQuery.fn.YTPGetFilters = jQuery.mbYTPlayer.getFilters),\n    (jQuery.fn.YTPGetTime = jQuery.mbYTPlayer.getTime),\n    (jQuery.fn.YTPGetTotalTime = jQuery.mbYTPlayer.getTotalTime),\n    (jQuery.fn.YTPAddMask = jQuery.mbYTPlayer.addMask),\n    (jQuery.fn.YTPRemoveMask = jQuery.mbYTPlayer.removeMask),\n    (jQuery.fn.YTPToggleMask = jQuery.mbYTPlayer.toggleMask),\n    (jQuery.fn.YTPGetAbundance = jQuery.mbYTPlayer.getAbundance),\n    (jQuery.fn.YTPSetAbundance = jQuery.mbYTPlayer.setAbundance),\n    (jQuery.fn.YTPSetAnchor = jQuery.mbYTPlayer.setAnchor),\n    (jQuery.fn.YTPGetAnchor = jQuery.mbYTPlayer.getAnchor),\n    (jQuery.fn.YTPSetOption = jQuery.mbYTPlayer.setOption);\n})(jQuery, ytp);\nvar nAgt = navigator.userAgent;\nfunction isTouchSupported() {\n  var e = nAgt.msMaxTouchPoints,\n    r = 'ontouchstart' in document.createElement('div');\n  return !(!e && !r);\n}\n(jQuery.browser = jQuery.browser || {}),\n  (jQuery.browser.mozilla = !1),\n  (jQuery.browser.webkit = !1),\n  (jQuery.browser.opera = !1),\n  (jQuery.browser.safari = !1),\n  (jQuery.browser.chrome = !1),\n  (jQuery.browser.androidStock = !1),\n  (jQuery.browser.msie = !1),\n  (jQuery.browser.edge = !1),\n  (jQuery.browser.ua = nAgt);\nvar getOS = function() {\n    var e = { version: 'Unknown version', name: 'Unknown OS' };\n    return (\n      -1 != navigator.appVersion.indexOf('Win') && (e.name = 'Windows'),\n      -1 != navigator.appVersion.indexOf('Mac') &&\n        navigator.appVersion.indexOf('Mobile') < 0 &&\n        (e.name = 'Mac'),\n      -1 != navigator.appVersion.indexOf('Linux') && (e.name = 'Linux'),\n      /Mac OS X/.test(nAgt) &&\n        !/Mobile/.test(nAgt) &&\n        ((e.version = /Mac OS X (10[\\.\\_\\d]+)/.exec(nAgt)[1]),\n        (e.version = e.version.replace(/_/g, '.').substring(0, 5))),\n      /Windows/.test(nAgt) && (e.version = 'Unknown.Unknown'),\n      /Windows NT 5.1/.test(nAgt) && (e.version = '5.1'),\n      /Windows NT 6.0/.test(nAgt) && (e.version = '6.0'),\n      /Windows NT 6.1/.test(nAgt) && (e.version = '6.1'),\n      /Windows NT 6.2/.test(nAgt) && (e.version = '6.2'),\n      /Windows NT 10.0/.test(nAgt) && (e.version = '10.0'),\n      /Linux/.test(nAgt) && /Linux/.test(nAgt) && (e.version = 'Unknown.Unknown'),\n      (e.name = e.name.toLowerCase()),\n      (e.major_version = 'Unknown'),\n      (e.minor_version = 'Unknown'),\n      'Unknown.Unknown' != e.version &&\n        ((e.major_version = parseFloat(e.version.split('.')[0])),\n        (e.minor_version = parseFloat(e.version.split('.')[1]))),\n      e\n    );\n  },\n  nameOffset,\n  verOffset,\n  ix;\nif (\n  ((jQuery.browser.os = getOS()),\n  (jQuery.browser.hasTouch = isTouchSupported()),\n  (jQuery.browser.name = navigator.appName),\n  (jQuery.browser.fullVersion = '' + parseFloat(navigator.appVersion)),\n  (jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10)),\n  -1 != (verOffset = nAgt.indexOf('Opera')))\n)\n  (jQuery.browser.opera = !0),\n    (jQuery.browser.name = 'Opera'),\n    (jQuery.browser.fullVersion = nAgt.substring(verOffset + 6)),\n    -1 != (verOffset = nAgt.indexOf('Version')) &&\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8));\nelse if (-1 != (verOffset = nAgt.indexOf('OPR')))\n  (jQuery.browser.opera = !0),\n    (jQuery.browser.name = 'Opera'),\n    (jQuery.browser.fullVersion = nAgt.substring(verOffset + 4));\nelse if (-1 != (verOffset = nAgt.indexOf('MSIE')))\n  (jQuery.browser.msie = !0),\n    (jQuery.browser.name = 'Microsoft Internet Explorer'),\n    (jQuery.browser.fullVersion = nAgt.substring(verOffset + 5));\nelse if (-1 != nAgt.indexOf('Trident')) {\n  (jQuery.browser.msie = !0), (jQuery.browser.name = 'Microsoft Internet Explorer');\n  var start = nAgt.indexOf('rv:') + 3,\n    end = start + 4;\n  jQuery.browser.fullVersion = nAgt.substring(start, end);\n} else\n  -1 != (verOffset = nAgt.indexOf('Edge'))\n    ? ((jQuery.browser.edge = !0),\n      (jQuery.browser.name = 'Microsoft Edge'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 5)))\n    : -1 != (verOffset = nAgt.indexOf('Chrome'))\n    ? ((jQuery.browser.webkit = !0),\n      (jQuery.browser.chrome = !0),\n      (jQuery.browser.name = 'Chrome'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)))\n    : -1 < nAgt.indexOf('mozilla/5.0') &&\n      -1 < nAgt.indexOf('android ') &&\n      -1 < nAgt.indexOf('applewebkit') &&\n      !(-1 < nAgt.indexOf('chrome'))\n    ? ((verOffset = nAgt.indexOf('Chrome')),\n      (jQuery.browser.webkit = !0),\n      (jQuery.browser.androidStock = !0),\n      (jQuery.browser.name = 'androidStock'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)))\n    : -1 != (verOffset = nAgt.indexOf('Safari'))\n    ? ((jQuery.browser.webkit = !0),\n      (jQuery.browser.safari = !0),\n      (jQuery.browser.name = 'Safari'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)),\n      -1 != (verOffset = nAgt.indexOf('Version')) &&\n        (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)))\n    : -1 != (verOffset = nAgt.indexOf('AppleWebkit'))\n    ? ((jQuery.browser.webkit = !0),\n      (jQuery.browser.safari = !0),\n      (jQuery.browser.name = 'Safari'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)),\n      -1 != (verOffset = nAgt.indexOf('Version')) &&\n        (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)))\n    : -1 != (verOffset = nAgt.indexOf('Firefox'))\n    ? ((jQuery.browser.mozilla = !0),\n      (jQuery.browser.name = 'Firefox'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)))\n    : (nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/')) &&\n      ((jQuery.browser.name = nAgt.substring(nameOffset, verOffset)),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 1)),\n      jQuery.browser.name.toLowerCase() == jQuery.browser.name.toUpperCase() &&\n        (jQuery.browser.name = navigator.appName));\nfunction uncamel(e) {\n  return e.replace(/([A-Z])/g, function(e) {\n    return '-' + e.toLowerCase();\n  });\n}\nfunction setUnit(e, r) {\n  return 'string' != typeof e || e.match(/^[\\-0-9\\.]+jQuery/) ? '' + e + r : e;\n}\nfunction setFilter(e, r, t) {\n  var a = uncamel(r),\n    o = jQuery.browser.mozilla ? '' : jQuery.CSS.sfx;\n  (e[o + 'filter'] = e[o + 'filter'] || ''),\n    (t = setUnit(\n      t > jQuery.CSS.filters[r].max ? jQuery.CSS.filters[r].max : t,\n      jQuery.CSS.filters[r].unit,\n    )),\n    (e[o + 'filter'] += a + '(' + t + ') '),\n    delete e[r];\n}\n-1 != (ix = jQuery.browser.fullVersion.indexOf(';')) &&\n  (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)),\n  -1 != (ix = jQuery.browser.fullVersion.indexOf(' ')) &&\n    (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)),\n  (jQuery.browser.majorVersion = parseInt('' + jQuery.browser.fullVersion, 10)),\n  isNaN(jQuery.browser.majorVersion) &&\n    ((jQuery.browser.fullVersion = '' + parseFloat(navigator.appVersion)),\n    (jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10))),\n  (jQuery.browser.version = jQuery.browser.majorVersion),\n  (jQuery.browser.android = /Android/i.test(nAgt)),\n  (jQuery.browser.blackberry = /BlackBerry|BB|PlayBook/i.test(nAgt)),\n  (jQuery.browser.ios = /iPhone|iPad|iPod|webOS/i.test(nAgt)),\n  (jQuery.browser.operaMobile = /Opera Mini/i.test(nAgt)),\n  (jQuery.browser.windowsMobile = /IEMobile|Windows Phone/i.test(nAgt)),\n  (jQuery.browser.kindle = /Kindle|Silk/i.test(nAgt)),\n  (jQuery.browser.mobile =\n    jQuery.browser.android ||\n    jQuery.browser.blackberry ||\n    jQuery.browser.ios ||\n    jQuery.browser.windowsMobile ||\n    jQuery.browser.operaMobile ||\n    jQuery.browser.kindle),\n  (jQuery.isMobile = jQuery.browser.mobile),\n  (jQuery.isTablet = jQuery.browser.mobile && 765 < jQuery(window).width()),\n  (jQuery.isAndroidDefault = jQuery.browser.android && !/chrome/i.test(nAgt)),\n  (jQuery.mbBrowser = jQuery.browser),\n  (jQuery.browser.versionCompare = function(e, r) {\n    if ('stringstring' != typeof e + typeof r) return !1;\n    for (\n      var t = e.split('.'), a = r.split('.'), o = 0, n = Math.max(t.length, a.length);\n      o < n;\n      o++\n    ) {\n      if ((t[o] && !a[o] && 0 < parseInt(t[o])) || parseInt(t[o]) > parseInt(a[o])) return 1;\n      if ((a[o] && !t[o] && 0 < parseInt(a[o])) || parseInt(t[o]) < parseInt(a[o])) return -1;\n    }\n    return 0;\n  }),\n  (jQuery.support.CSStransition = (function() {\n    var e = (document.body || document.documentElement).style;\n    return (\n      void 0 !== e.transition ||\n      void 0 !== e.WebkitTransition ||\n      void 0 !== e.MozTransition ||\n      void 0 !== e.MsTransition ||\n      void 0 !== e.OTransition\n    );\n  })()),\n  (jQuery.CSS = {\n    name: 'mb.CSSAnimate',\n    author: 'Matteo Bicocchi',\n    version: '2.0.0',\n    transitionEnd: 'transitionEnd',\n    sfx: '',\n    filters: {\n      blur: { min: 0, max: 100, unit: 'px' },\n      brightness: { min: 0, max: 400, unit: '%' },\n      contrast: { min: 0, max: 400, unit: '%' },\n      grayscale: { min: 0, max: 100, unit: '%' },\n      hueRotate: { min: 0, max: 360, unit: 'deg' },\n      invert: { min: 0, max: 100, unit: '%' },\n      saturate: { min: 0, max: 400, unit: '%' },\n      sepia: { min: 0, max: 100, unit: '%' },\n    },\n    normalizeCss: function(e) {\n      var r = jQuery.extend(!0, {}, e);\n      for (var t in (jQuery.browser.webkit || jQuery.browser.opera\n        ? (jQuery.CSS.sfx = '-webkit-')\n        : jQuery.browser.mozilla\n        ? (jQuery.CSS.sfx = '-moz-')\n        : jQuery.browser.msie && (jQuery.CSS.sfx = '-ms-'),\n      (jQuery.CSS.sfx = ''),\n      r)) {\n        if (\n          ('transform' === t && ((r[jQuery.CSS.sfx + 'transform'] = r[t]), delete r[t]),\n          'transform-origin' === t &&\n            ((r[jQuery.CSS.sfx + 'transform-origin'] = e[t]), delete r[t]),\n          'filter' !== t ||\n            jQuery.browser.mozilla ||\n            ((r[jQuery.CSS.sfx + 'filter'] = e[t]), delete r[t]),\n          'blur' === t && setFilter(r, 'blur', e[t]),\n          'brightness' === t && setFilter(r, 'brightness', e[t]),\n          'contrast' === t && setFilter(r, 'contrast', e[t]),\n          'grayscale' === t && setFilter(r, 'grayscale', e[t]),\n          'hueRotate' === t && setFilter(r, 'hueRotate', e[t]),\n          'invert' === t && setFilter(r, 'invert', e[t]),\n          'saturate' === t && setFilter(r, 'saturate', e[t]),\n          'sepia' === t && setFilter(r, 'sepia', e[t]),\n          'x' === t)\n        ) {\n          var a = jQuery.CSS.sfx + 'transform';\n          (r[a] = r[a] || ''), (r[a] += ' translateX(' + setUnit(e[t], 'px') + ')'), delete r[t];\n        }\n        'y' === t &&\n          ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n          (r[a] += ' translateY(' + setUnit(e[t], 'px') + ')'),\n          delete r[t]),\n          'z' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' translateZ(' + setUnit(e[t], 'px') + ')'),\n            delete r[t]),\n          'rotate' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' rotate(' + setUnit(e[t], 'deg') + ')'),\n            delete r[t]),\n          'rotateX' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' rotateX(' + setUnit(e[t], 'deg') + ')'),\n            delete r[t]),\n          'rotateY' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' rotateY(' + setUnit(e[t], 'deg') + ')'),\n            delete r[t]),\n          'rotateZ' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' rotateZ(' + setUnit(e[t], 'deg') + ')'),\n            delete r[t]),\n          'scale' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' scale(' + setUnit(e[t], '') + ')'),\n            delete r[t]),\n          'scaleX' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' scaleX(' + setUnit(e[t], '') + ')'),\n            delete r[t]),\n          'scaleY' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' scaleY(' + setUnit(e[t], '') + ')'),\n            delete r[t]),\n          'scaleZ' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' scaleZ(' + setUnit(e[t], '') + ')'),\n            delete r[t]),\n          'skew' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' skew(' + setUnit(e[t], 'deg') + ')'),\n            delete r[t]),\n          'skewX' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' skewX(' + setUnit(e[t], 'deg') + ')'),\n            delete r[t]),\n          'skewY' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' skewY(' + setUnit(e[t], 'deg') + ')'),\n            delete r[t]),\n          'perspective' === t &&\n            ((r[(a = jQuery.CSS.sfx + 'transform')] = r[a] || ''),\n            (r[a] += ' perspective(' + setUnit(e[t], 'px') + ')'),\n            delete r[t]);\n      }\n      return r;\n    },\n    getProp: function(e) {\n      var r,\n        t = [];\n      for (r in e) t.indexOf(r) < 0 && t.push(uncamel(r));\n      return t.join(',');\n    },\n    animate: function(l, s, u, y, d) {\n      return this.each(function() {\n        function e() {\n          (r.called = !0),\n            (r.CSSAIsRunning = !1),\n            t.off(jQuery.CSS.transitionEnd + '.' + r.id),\n            clearTimeout(r.timeout),\n            t.css(jQuery.CSS.sfx + 'transition', ''),\n            'function' == typeof d && d.apply(r),\n            'function' == typeof r.CSSqueue && (r.CSSqueue(), (r.CSSqueue = null));\n        }\n        var r = this,\n          t = jQuery(this);\n        r.id = r.id || 'CSSA_' + new Date().getTime();\n        var a = a || { type: 'noEvent' };\n        if (\n          r.CSSAIsRunning &&\n          r.eventType == a.type &&\n          !jQuery.browser.msie &&\n          jQuery.browser.version <= 9\n        )\n          r.CSSqueue = function() {\n            t.CSSAnimate(l, s, u, y, d);\n          };\n        else if (((r.CSSqueue = null), (r.eventType = a.type), 0 !== t.length && l)) {\n          if (\n            ((l = jQuery.normalizeCss(l)),\n            (r.CSSAIsRunning = !0),\n            'function' == typeof s && ((d = s), (s = jQuery.fx.speeds._default)),\n            'function' == typeof u && ((y = u), (u = 0)),\n            'string' == typeof u && ((d = u), (u = 0)),\n            'function' == typeof y && ((d = y), (y = 'cubic-bezier(0.65,0.03,0.36,0.72)')),\n            'string' == typeof s)\n          )\n            for (var o in jQuery.fx.speeds) {\n              if (s == o) {\n                s = jQuery.fx.speeds[o];\n                break;\n              }\n              s = jQuery.fx.speeds._default;\n            }\n          if (\n            (s || (s = jQuery.fx.speeds._default),\n            'string' == typeof d && ((y = d), (d = null)),\n            jQuery.support.CSStransition)\n          ) {\n            var n = {\n              default: 'ease',\n              in: 'ease-in',\n              out: 'ease-out',\n              'in-out': 'ease-in-out',\n              snap: 'cubic-bezier(0,1,.5,1)',\n              easeOutCubic: 'cubic-bezier(.215,.61,.355,1)',\n              easeInOutCubic: 'cubic-bezier(.645,.045,.355,1)',\n              easeInCirc: 'cubic-bezier(.6,.04,.98,.335)',\n              easeOutCirc: 'cubic-bezier(.075,.82,.165,1)',\n              easeInOutCirc: 'cubic-bezier(.785,.135,.15,.86)',\n              easeInExpo: 'cubic-bezier(.95,.05,.795,.035)',\n              easeOutExpo: 'cubic-bezier(.19,1,.22,1)',\n              easeInOutExpo: 'cubic-bezier(1,0,0,1)',\n              easeInQuad: 'cubic-bezier(.55,.085,.68,.53)',\n              easeOutQuad: 'cubic-bezier(.25,.46,.45,.94)',\n              easeInOutQuad: 'cubic-bezier(.455,.03,.515,.955)',\n              easeInQuart: 'cubic-bezier(.895,.03,.685,.22)',\n              easeOutQuart: 'cubic-bezier(.165,.84,.44,1)',\n              easeInOutQuart: 'cubic-bezier(.77,0,.175,1)',\n              easeInQuint: 'cubic-bezier(.755,.05,.855,.06)',\n              easeOutQuint: 'cubic-bezier(.23,1,.32,1)',\n              easeInOutQuint: 'cubic-bezier(.86,0,.07,1)',\n              easeInSine: 'cubic-bezier(.47,0,.745,.715)',\n              easeOutSine: 'cubic-bezier(.39,.575,.565,1)',\n              easeInOutSine: 'cubic-bezier(.445,.05,.55,.95)',\n              easeInBack: 'cubic-bezier(.6,-.28,.735,.045)',\n              easeOutBack: 'cubic-bezier(.175, .885,.32,1.275)',\n              easeInOutBack: 'cubic-bezier(.68,-.55,.265,1.55)',\n            };\n            n[y] && (y = n[y]),\n              t.off(jQuery.CSS.transitionEnd + '.' + r.id),\n              (n = jQuery.CSS.getProp(l));\n            var i = {};\n            jQuery.extend(i, l),\n              (i[jQuery.CSS.sfx + 'transition-property'] = n),\n              (i[jQuery.CSS.sfx + 'transition-duration'] = s + 'ms'),\n              (i[jQuery.CSS.sfx + 'transition-delay'] = u + 'ms'),\n              (i[jQuery.CSS.sfx + 'transition-timing-function'] = y),\n              setTimeout(function() {\n                t.one(jQuery.CSS.transitionEnd + '.' + r.id, e), t.css(i);\n              }, 1),\n              (r.timeout = setTimeout(function() {\n                r.called || !d\n                  ? ((r.called = !1), (r.CSSAIsRunning = !1))\n                  : (t.css(jQuery.CSS.sfx + 'transition', ''),\n                    d.apply(r),\n                    (r.CSSAIsRunning = !1),\n                    'function' == typeof r.CSSqueue && (r.CSSqueue(), (r.CSSqueue = null)));\n              }, s + u + 10));\n          } else {\n            for (n in l)\n              'transform' === n && delete l[n],\n                'filter' === n && delete l[n],\n                'transform-origin' === n && delete l[n],\n                'auto' === l[n] && delete l[n],\n                'x' === n && ((a = l[n]), (l[(o = 'left')] = a), delete l[n]),\n                'y' === n && ((a = l[n]), (l[(o = 'top')] = a), delete l[n]),\n                ('-ms-transform' !== n && '-ms-filter' !== n) || delete l[n];\n            t.delay(u).animate(l, s, d);\n          }\n        }\n      });\n    },\n  }),\n  (jQuery.fn.CSSAnimate = jQuery.CSS.animate),\n  (jQuery.normalizeCss = jQuery.CSS.normalizeCss),\n  (jQuery.fn.css3 = function(t) {\n    return this.each(function() {\n      var e = jQuery(this),\n        r = jQuery.normalizeCss(t);\n      e.css(r);\n    });\n  });\nvar nAgt = navigator.userAgent;\nfunction isTouchSupported() {\n  var e = nAgt.msMaxTouchPoints,\n    r = 'ontouchstart' in document.createElement('div');\n  return !(!e && !r);\n}\n(jQuery.browser = jQuery.browser || {}),\n  (jQuery.browser.mozilla = !1),\n  (jQuery.browser.webkit = !1),\n  (jQuery.browser.opera = !1),\n  (jQuery.browser.safari = !1),\n  (jQuery.browser.chrome = !1),\n  (jQuery.browser.androidStock = !1),\n  (jQuery.browser.msie = !1),\n  (jQuery.browser.edge = !1),\n  (jQuery.browser.ua = nAgt);\nvar getOS = function() {\n    var e = { version: 'Unknown version', name: 'Unknown OS' };\n    return (\n      -1 != navigator.appVersion.indexOf('Win') && (e.name = 'Windows'),\n      -1 != navigator.appVersion.indexOf('Mac') &&\n        navigator.appVersion.indexOf('Mobile') < 0 &&\n        (e.name = 'Mac'),\n      -1 != navigator.appVersion.indexOf('Linux') && (e.name = 'Linux'),\n      /Mac OS X/.test(nAgt) &&\n        !/Mobile/.test(nAgt) &&\n        ((e.version = /Mac OS X (10[\\.\\_\\d]+)/.exec(nAgt)[1]),\n        (e.version = e.version.replace(/_/g, '.').substring(0, 5))),\n      /Windows/.test(nAgt) && (e.version = 'Unknown.Unknown'),\n      /Windows NT 5.1/.test(nAgt) && (e.version = '5.1'),\n      /Windows NT 6.0/.test(nAgt) && (e.version = '6.0'),\n      /Windows NT 6.1/.test(nAgt) && (e.version = '6.1'),\n      /Windows NT 6.2/.test(nAgt) && (e.version = '6.2'),\n      /Windows NT 10.0/.test(nAgt) && (e.version = '10.0'),\n      /Linux/.test(nAgt) && /Linux/.test(nAgt) && (e.version = 'Unknown.Unknown'),\n      (e.name = e.name.toLowerCase()),\n      (e.major_version = 'Unknown'),\n      (e.minor_version = 'Unknown'),\n      'Unknown.Unknown' != e.version &&\n        ((e.major_version = parseFloat(e.version.split('.')[0])),\n        (e.minor_version = parseFloat(e.version.split('.')[1]))),\n      e\n    );\n  },\n  nameOffset,\n  verOffset,\n  ix;\nif (\n  ((jQuery.browser.os = getOS()),\n  (jQuery.browser.hasTouch = isTouchSupported()),\n  (jQuery.browser.name = navigator.appName),\n  (jQuery.browser.fullVersion = '' + parseFloat(navigator.appVersion)),\n  (jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10)),\n  -1 != (verOffset = nAgt.indexOf('Opera')))\n)\n  (jQuery.browser.opera = !0),\n    (jQuery.browser.name = 'Opera'),\n    (jQuery.browser.fullVersion = nAgt.substring(verOffset + 6)),\n    -1 != (verOffset = nAgt.indexOf('Version')) &&\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8));\nelse if (-1 != (verOffset = nAgt.indexOf('OPR')))\n  (jQuery.browser.opera = !0),\n    (jQuery.browser.name = 'Opera'),\n    (jQuery.browser.fullVersion = nAgt.substring(verOffset + 4));\nelse if (-1 != (verOffset = nAgt.indexOf('MSIE')))\n  (jQuery.browser.msie = !0),\n    (jQuery.browser.name = 'Microsoft Internet Explorer'),\n    (jQuery.browser.fullVersion = nAgt.substring(verOffset + 5));\nelse if (-1 != nAgt.indexOf('Trident')) {\n  (jQuery.browser.msie = !0), (jQuery.browser.name = 'Microsoft Internet Explorer');\n  var start = nAgt.indexOf('rv:') + 3,\n    end = start + 4;\n  jQuery.browser.fullVersion = nAgt.substring(start, end);\n} else\n  -1 != (verOffset = nAgt.indexOf('Edge'))\n    ? ((jQuery.browser.edge = !0),\n      (jQuery.browser.name = 'Microsoft Edge'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 5)))\n    : -1 != (verOffset = nAgt.indexOf('Chrome'))\n    ? ((jQuery.browser.webkit = !0),\n      (jQuery.browser.chrome = !0),\n      (jQuery.browser.name = 'Chrome'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)))\n    : -1 < nAgt.indexOf('mozilla/5.0') &&\n      -1 < nAgt.indexOf('android ') &&\n      -1 < nAgt.indexOf('applewebkit') &&\n      !(-1 < nAgt.indexOf('chrome'))\n    ? ((verOffset = nAgt.indexOf('Chrome')),\n      (jQuery.browser.webkit = !0),\n      (jQuery.browser.androidStock = !0),\n      (jQuery.browser.name = 'androidStock'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)))\n    : -1 != (verOffset = nAgt.indexOf('Safari'))\n    ? ((jQuery.browser.webkit = !0),\n      (jQuery.browser.safari = !0),\n      (jQuery.browser.name = 'Safari'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)),\n      -1 != (verOffset = nAgt.indexOf('Version')) &&\n        (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)))\n    : -1 != (verOffset = nAgt.indexOf('AppleWebkit'))\n    ? ((jQuery.browser.webkit = !0),\n      (jQuery.browser.safari = !0),\n      (jQuery.browser.name = 'Safari'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 7)),\n      -1 != (verOffset = nAgt.indexOf('Version')) &&\n        (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)))\n    : -1 != (verOffset = nAgt.indexOf('Firefox'))\n    ? ((jQuery.browser.mozilla = !0),\n      (jQuery.browser.name = 'Firefox'),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 8)))\n    : (nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/')) &&\n      ((jQuery.browser.name = nAgt.substring(nameOffset, verOffset)),\n      (jQuery.browser.fullVersion = nAgt.substring(verOffset + 1)),\n      jQuery.browser.name.toLowerCase() == jQuery.browser.name.toUpperCase() &&\n        (jQuery.browser.name = navigator.appName));\n-1 != (ix = jQuery.browser.fullVersion.indexOf(';')) &&\n  (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)),\n  -1 != (ix = jQuery.browser.fullVersion.indexOf(' ')) &&\n    (jQuery.browser.fullVersion = jQuery.browser.fullVersion.substring(0, ix)),\n  (jQuery.browser.majorVersion = parseInt('' + jQuery.browser.fullVersion, 10)),\n  isNaN(jQuery.browser.majorVersion) &&\n    ((jQuery.browser.fullVersion = '' + parseFloat(navigator.appVersion)),\n    (jQuery.browser.majorVersion = parseInt(navigator.appVersion, 10))),\n  (jQuery.browser.version = jQuery.browser.majorVersion),\n  (jQuery.browser.android = /Android/i.test(nAgt)),\n  (jQuery.browser.blackberry = /BlackBerry|BB|PlayBook/i.test(nAgt)),\n  (jQuery.browser.ios = /iPhone|iPad|iPod|webOS/i.test(nAgt)),\n  (jQuery.browser.operaMobile = /Opera Mini/i.test(nAgt)),\n  (jQuery.browser.windowsMobile = /IEMobile|Windows Phone/i.test(nAgt)),\n  (jQuery.browser.kindle = /Kindle|Silk/i.test(nAgt)),\n  (jQuery.browser.mobile =\n    jQuery.browser.android ||\n    jQuery.browser.blackberry ||\n    jQuery.browser.ios ||\n    jQuery.browser.windowsMobile ||\n    jQuery.browser.operaMobile ||\n    jQuery.browser.kindle),\n  (jQuery.isMobile = jQuery.browser.mobile),\n  (jQuery.isTablet = jQuery.browser.mobile && 765 < jQuery(window).width()),\n  (jQuery.isAndroidDefault = jQuery.browser.android && !/chrome/i.test(nAgt)),\n  (jQuery.mbBrowser = jQuery.browser),\n  (jQuery.browser.versionCompare = function(e, r) {\n    if ('stringstring' != typeof e + typeof r) return !1;\n    for (\n      var t = e.split('.'), a = r.split('.'), o = 0, n = Math.max(t.length, a.length);\n      o < n;\n      o++\n    ) {\n      if ((t[o] && !a[o] && 0 < parseInt(t[o])) || parseInt(t[o]) > parseInt(a[o])) return 1;\n      if ((a[o] && !t[o] && 0 < parseInt(a[o])) || parseInt(t[o]) < parseInt(a[o])) return -1;\n    }\n    return 0;\n  }),\n  (function(o) {\n    (o.simpleSlider = {\n      defaults: { initialval: 0, scale: 100, orientation: 'h', readonly: !1, callback: !1 },\n      events: {\n        start: o.browser.mobile ? 'touchstart' : 'mousedown',\n        end: o.browser.mobile ? 'touchend' : 'mouseup',\n        move: o.browser.mobile ? 'touchmove' : 'mousemove',\n      },\n      init: function(a) {\n        return this.each(function() {\n          var r = this,\n            t = o(r);\n          t.addClass('simpleSlider'),\n            (r.opt = {}),\n            o.extend(r.opt, o.simpleSlider.defaults, a),\n            o.extend(r.opt, t.data());\n          var e = 'h' == r.opt.orientation ? 'horizontal' : 'vertical';\n          (e = o('<div/>')\n            .addClass('level')\n            .addClass(e)),\n            t.prepend(e),\n            (r.level = e),\n            t.css({ cursor: 'default' }),\n            'auto' == r.opt.scale && (r.opt.scale = o(r).outerWidth()),\n            t.updateSliderVal(),\n            r.opt.readonly ||\n              (t.on(o.simpleSlider.events.start, function(e) {\n                o.browser.mobile && (e = e.changedTouches[0]),\n                  (r.canSlide = !0),\n                  t.updateSliderVal(e),\n                  'h' == r.opt.orientation\n                    ? t.css({ cursor: 'col-resize' })\n                    : t.css({ cursor: 'row-resize' }),\n                  o.browser.mobile || (e.preventDefault(), e.stopPropagation());\n              }),\n              o(document)\n                .on(o.simpleSlider.events.move, function(e) {\n                  o.browser.mobile && (e = e.changedTouches[0]),\n                    r.canSlide &&\n                      (o(document).css({ cursor: 'default' }),\n                      t.updateSliderVal(e),\n                      o.browser.mobile || (e.preventDefault(), e.stopPropagation()));\n                })\n                .on(o.simpleSlider.events.end, function() {\n                  o(document).css({ cursor: 'auto' }), (r.canSlide = !1), t.css({ cursor: 'auto' });\n                }));\n        });\n      },\n      updateSliderVal: function(e) {\n        var r = this.get(0);\n        if (r.opt) {\n          r.opt.initialval =\n            'number' == typeof r.opt.initialval ? r.opt.initialval : r.opt.initialval(r);\n          var t = o(r).outerWidth(),\n            a = o(r).outerHeight();\n          (r.x =\n            'object' == typeof e\n              ? e.clientX + document.body.scrollLeft - this.offset().left\n              : 'number' == typeof e\n              ? (e * t) / r.opt.scale\n              : (r.opt.initialval * t) / r.opt.scale),\n            (r.y =\n              'object' == typeof e\n                ? e.clientY + document.body.scrollTop - this.offset().top\n                : 'number' == typeof e\n                ? ((r.opt.scale - r.opt.initialval - e) * a) / r.opt.scale\n                : (r.opt.initialval * a) / r.opt.scale),\n            (r.y = this.outerHeight() - r.y),\n            (r.scaleX = (r.x * r.opt.scale) / t),\n            (r.scaleY = (r.y * r.opt.scale) / a),\n            (r.outOfRangeX =\n              r.scaleX > r.opt.scale ? r.scaleX - r.opt.scale : r.scaleX < 0 ? r.scaleX : 0),\n            (r.outOfRangeY =\n              r.scaleY > r.opt.scale ? r.scaleY - r.opt.scale : r.scaleY < 0 ? r.scaleY : 0),\n            (r.outOfRange = 'h' == r.opt.orientation ? r.outOfRangeX : r.outOfRangeY),\n            (r.value =\n              void 0 !== e\n                ? 'h' == r.opt.orientation\n                  ? r.x >= this.outerWidth()\n                    ? r.opt.scale\n                    : r.x <= 0\n                    ? 0\n                    : r.scaleX\n                  : r.y >= this.outerHeight()\n                  ? r.opt.scale\n                  : r.y <= 0\n                  ? 0\n                  : r.scaleY\n                : 'h' == r.opt.orientation\n                ? r.scaleX\n                : r.scaleY),\n            'h' == r.opt.orientation\n              ? r.level.width(Math.floor((100 * r.x) / t) + '%')\n              : r.level.height(Math.floor((100 * r.y) / a)),\n            'function' == typeof r.opt.callback && r.opt.callback(r);\n        }\n      },\n    }),\n      (o.fn.simpleSlider = o.simpleSlider.init),\n      (o.fn.updateSliderVal = o.simpleSlider.updateSliderVal);\n  })(jQuery),\n  (function(r) {\n    (r.mbCookie = {\n      set: function(e, r, t, a) {\n        'object' == typeof r && (r = JSON.stringify(r)), (a = a ? '; domain=' + a : '');\n        var o = new Date(),\n          n = '';\n        0 < t && (o.setTime(o.getTime() + 864e5 * t), (n = '; expires=' + o.toGMTString())),\n          (document.cookie = e + '=' + r + n + '; path=/' + a);\n      },\n      get: function(r) {\n        r += '=';\n        for (var e = document.cookie.split(';'), t = 0; t < e.length; t++) {\n          for (var a = e[t]; ' ' == a.charAt(0); ) a = a.substring(1, a.length);\n          if (0 == a.indexOf(r))\n            try {\n              return JSON.parse(a.substring(r.length, a.length));\n            } catch (e) {\n              return a.substring(r.length, a.length);\n            }\n        }\n        return null;\n      },\n      remove: function(e) {\n        r.mbCookie.set(e, '', -1);\n      },\n    }),\n      (r.mbStorage = {\n        set: function(e, r) {\n          'object' == typeof r && (r = JSON.stringify(r)), localStorage.setItem(e, r);\n        },\n        get: function(r) {\n          if (!localStorage[r]) return null;\n          try {\n            return JSON.parse(localStorage[r]);\n          } catch (e) {\n            return localStorage[r];\n          }\n        },\n        remove: function(e) {\n          e ? localStorage.removeItem(e) : localStorage.clear();\n        },\n      });\n  })(jQuery);\n\n/*------------------------------------------------------------------*/\n/*\t12) Owl Carousel\n/*------------------------------------------------------------------*/\n/**\n * Owl Carousel v2.3.4\n * Copyright 2013-2018 David Deutsch\n * Licensed under: SEE LICENSE IN https://github.com/OwlCarousel2/OwlCarousel2/blob/master/LICENSE\n */\n!(function(a, b, c, d) {\n  function e(b, c) {\n    (this.settings = null),\n      (this.options = a.extend({}, e.Defaults, c)),\n      (this.$element = a(b)),\n      (this._handlers = {}),\n      (this._plugins = {}),\n      (this._supress = {}),\n      (this._current = null),\n      (this._speed = null),\n      (this._coordinates = []),\n      (this._breakpoint = null),\n      (this._width = null),\n      (this._items = []),\n      (this._clones = []),\n      (this._mergers = []),\n      (this._widths = []),\n      (this._invalidated = {}),\n      (this._pipe = []),\n      (this._drag = {\n        time: null,\n        target: null,\n        pointer: null,\n        stage: { start: null, current: null },\n        direction: null,\n      }),\n      (this._states = {\n        current: {},\n        tags: { initializing: ['busy'], animating: ['busy'], dragging: ['interacting'] },\n      }),\n      a.each(\n        ['onResize', 'onThrottledResize'],\n        a.proxy(function(b, c) {\n          this._handlers[c] = a.proxy(this[c], this);\n        }, this),\n      ),\n      a.each(\n        e.Plugins,\n        a.proxy(function(a, b) {\n          this._plugins[a.charAt(0).toLowerCase() + a.slice(1)] = new b(this);\n        }, this),\n      ),\n      a.each(\n        e.Workers,\n        a.proxy(function(b, c) {\n          this._pipe.push({ filter: c.filter, run: a.proxy(c.run, this) });\n        }, this),\n      ),\n      this.setup(),\n      this.initialize();\n  }\n  (e.Defaults = {\n    items: 3,\n    loop: !1,\n    center: !1,\n    rewind: !1,\n    checkVisibility: !0,\n    mouseDrag: !0,\n    touchDrag: !0,\n    pullDrag: !0,\n    freeDrag: !1,\n    margin: 0,\n    stagePadding: 0,\n    merge: !1,\n    mergeFit: !0,\n    autoWidth: !1,\n    startPosition: 0,\n    rtl: !1,\n    smartSpeed: 250,\n    fluidSpeed: !1,\n    dragEndSpeed: !1,\n    responsive: {},\n    responsiveRefreshRate: 200,\n    responsiveBaseElement: b,\n    fallbackEasing: 'swing',\n    slideTransition: '',\n    info: !1,\n    nestedItemSelector: !1,\n    itemElement: 'div',\n    stageElement: 'div',\n    refreshClass: 'owl-refresh',\n    loadedClass: 'owl-loaded',\n    loadingClass: 'owl-loading',\n    rtlClass: 'owl-rtl',\n    responsiveClass: 'owl-responsive',\n    dragClass: 'owl-drag',\n    itemClass: 'owl-item',\n    stageClass: 'owl-stage',\n    stageOuterClass: 'owl-stage-outer',\n    grabClass: 'owl-grab',\n  }),\n    (e.Width = { Default: 'default', Inner: 'inner', Outer: 'outer' }),\n    (e.Type = { Event: 'event', State: 'state' }),\n    (e.Plugins = {}),\n    (e.Workers = [\n      {\n        filter: ['width', 'settings'],\n        run: function() {\n          this._width = this.$element.width();\n        },\n      },\n      {\n        filter: ['width', 'items', 'settings'],\n        run: function(a) {\n          a.current = this._items && this._items[this.relative(this._current)];\n        },\n      },\n      {\n        filter: ['items', 'settings'],\n        run: function() {\n          this.$stage.children('.cloned').remove();\n        },\n      },\n      {\n        filter: ['width', 'items', 'settings'],\n        run: function(a) {\n          var b = this.settings.margin || '',\n            c = !this.settings.autoWidth,\n            d = this.settings.rtl,\n            e = { width: 'auto', 'margin-left': d ? b : '', 'margin-right': d ? '' : b };\n          !c && this.$stage.children().css(e), (a.css = e);\n        },\n      },\n      {\n        filter: ['width', 'items', 'settings'],\n        run: function(a) {\n          var b = (this.width() / this.settings.items).toFixed(3) - this.settings.margin,\n            c = null,\n            d = this._items.length,\n            e = !this.settings.autoWidth,\n            f = [];\n          for (a.items = { merge: !1, width: b }; d--; )\n            (c = this._mergers[d]),\n              (c = (this.settings.mergeFit && Math.min(c, this.settings.items)) || c),\n              (a.items.merge = c > 1 || a.items.merge),\n              (f[d] = e ? b * c : this._items[d].width());\n          this._widths = f;\n        },\n      },\n      {\n        filter: ['items', 'settings'],\n        run: function() {\n          var b = [],\n            c = this._items,\n            d = this.settings,\n            e = Math.max(2 * d.items, 4),\n            f = 2 * Math.ceil(c.length / 2),\n            g = d.loop && c.length ? (d.rewind ? e : Math.max(e, f)) : 0,\n            h = '',\n            i = '';\n          for (g /= 2; g > 0; )\n            b.push(this.normalize(b.length / 2, !0)),\n              (h += c[b[b.length - 1]][0].outerHTML),\n              b.push(this.normalize(c.length - 1 - (b.length - 1) / 2, !0)),\n              (i = c[b[b.length - 1]][0].outerHTML + i),\n              (g -= 1);\n          (this._clones = b),\n            a(h)\n              .addClass('cloned')\n              .appendTo(this.$stage),\n            a(i)\n              .addClass('cloned')\n              .prependTo(this.$stage);\n        },\n      },\n      {\n        filter: ['width', 'items', 'settings'],\n        run: function() {\n          for (\n            var a = this.settings.rtl ? 1 : -1,\n              b = this._clones.length + this._items.length,\n              c = -1,\n              d = 0,\n              e = 0,\n              f = [];\n            ++c < b;\n\n          )\n            (d = f[c - 1] || 0),\n              (e = this._widths[this.relative(c)] + this.settings.margin),\n              f.push(d + e * a);\n          this._coordinates = f;\n        },\n      },\n      {\n        filter: ['width', 'items', 'settings'],\n        run: function() {\n          var a = this.settings.stagePadding,\n            b = this._coordinates,\n            c = {\n              width: Math.ceil(Math.abs(b[b.length - 1])) + 2 * a,\n              'padding-left': a || '',\n              'padding-right': a || '',\n            };\n          this.$stage.css(c);\n        },\n      },\n      {\n        filter: ['width', 'items', 'settings'],\n        run: function(a) {\n          var b = this._coordinates.length,\n            c = !this.settings.autoWidth,\n            d = this.$stage.children();\n          if (c && a.items.merge)\n            for (; b--; ) (a.css.width = this._widths[this.relative(b)]), d.eq(b).css(a.css);\n          else c && ((a.css.width = a.items.width), d.css(a.css));\n        },\n      },\n      {\n        filter: ['items'],\n        run: function() {\n          this._coordinates.length < 1 && this.$stage.removeAttr('style');\n        },\n      },\n      {\n        filter: ['width', 'items', 'settings'],\n        run: function(a) {\n          (a.current = a.current ? this.$stage.children().index(a.current) : 0),\n            (a.current = Math.max(this.minimum(), Math.min(this.maximum(), a.current))),\n            this.reset(a.current);\n        },\n      },\n      {\n        filter: ['position'],\n        run: function() {\n          this.animate(this.coordinates(this._current));\n        },\n      },\n      {\n        filter: ['width', 'position', 'items', 'settings'],\n        run: function() {\n          var a,\n            b,\n            c,\n            d,\n            e = this.settings.rtl ? 1 : -1,\n            f = 2 * this.settings.stagePadding,\n            g = this.coordinates(this.current()) + f,\n            h = g + this.width() * e,\n            i = [];\n          for (c = 0, d = this._coordinates.length; c < d; c++)\n            (a = this._coordinates[c - 1] || 0),\n              (b = Math.abs(this._coordinates[c]) + f * e),\n              ((this.op(a, '<=', g) && this.op(a, '>', h)) ||\n                (this.op(b, '<', g) && this.op(b, '>', h))) &&\n                i.push(c);\n          this.$stage.children('.active').removeClass('active'),\n            this.$stage.children(':eq(' + i.join('), :eq(') + ')').addClass('active'),\n            this.$stage.children('.center').removeClass('center'),\n            this.settings.center &&\n              this.$stage\n                .children()\n                .eq(this.current())\n                .addClass('center');\n        },\n      },\n    ]),\n    (e.prototype.initializeStage = function() {\n      (this.$stage = this.$element.find('.' + this.settings.stageClass)),\n        this.$stage.length ||\n          (this.$element.addClass(this.options.loadingClass),\n          (this.$stage = a('<' + this.settings.stageElement + '>', {\n            class: this.settings.stageClass,\n          }).wrap(a('<div/>', { class: this.settings.stageOuterClass }))),\n          this.$element.append(this.$stage.parent()));\n    }),\n    (e.prototype.initializeItems = function() {\n      var b = this.$element.find('.owl-item');\n      if (b.length)\n        return (\n          (this._items = b.get().map(function(b) {\n            return a(b);\n          })),\n          (this._mergers = this._items.map(function() {\n            return 1;\n          })),\n          void this.refresh()\n        );\n      this.replace(this.$element.children().not(this.$stage.parent())),\n        this.isVisible() ? this.refresh() : this.invalidate('width'),\n        this.$element.removeClass(this.options.loadingClass).addClass(this.options.loadedClass);\n    }),\n    (e.prototype.initialize = function() {\n      if (\n        (this.enter('initializing'),\n        this.trigger('initialize'),\n        this.$element.toggleClass(this.settings.rtlClass, this.settings.rtl),\n        this.settings.autoWidth && !this.is('pre-loading'))\n      ) {\n        var a, b, c;\n        (a = this.$element.find('img')),\n          (b = this.settings.nestedItemSelector ? '.' + this.settings.nestedItemSelector : d),\n          (c = this.$element.children(b).width()),\n          a.length && c <= 0 && this.preloadAutoWidthImages(a);\n      }\n      this.initializeStage(),\n        this.initializeItems(),\n        this.registerEventHandlers(),\n        this.leave('initializing'),\n        this.trigger('initialized');\n    }),\n    (e.prototype.isVisible = function() {\n      return !this.settings.checkVisibility || this.$element.is(':visible');\n    }),\n    (e.prototype.setup = function() {\n      var b = this.viewport(),\n        c = this.options.responsive,\n        d = -1,\n        e = null;\n      c\n        ? (a.each(c, function(a) {\n            a <= b && a > d && (d = Number(a));\n          }),\n          (e = a.extend({}, this.options, c[d])),\n          'function' == typeof e.stagePadding && (e.stagePadding = e.stagePadding()),\n          delete e.responsive,\n          e.responsiveClass &&\n            this.$element.attr(\n              'class',\n              this.$element\n                .attr('class')\n                .replace(\n                  new RegExp('(' + this.options.responsiveClass + '-)\\\\S+\\\\s', 'g'),\n                  '$1' + d,\n                ),\n            ))\n        : (e = a.extend({}, this.options)),\n        this.trigger('change', { property: { name: 'settings', value: e } }),\n        (this._breakpoint = d),\n        (this.settings = e),\n        this.invalidate('settings'),\n        this.trigger('changed', { property: { name: 'settings', value: this.settings } });\n    }),\n    (e.prototype.optionsLogic = function() {\n      this.settings.autoWidth && ((this.settings.stagePadding = !1), (this.settings.merge = !1));\n    }),\n    (e.prototype.prepare = function(b) {\n      var c = this.trigger('prepare', { content: b });\n      return (\n        c.data ||\n          (c.data = a('<' + this.settings.itemElement + '/>')\n            .addClass(this.options.itemClass)\n            .append(b)),\n        this.trigger('prepared', { content: c.data }),\n        c.data\n      );\n    }),\n    (e.prototype.update = function() {\n      for (\n        var b = 0,\n          c = this._pipe.length,\n          d = a.proxy(function(a) {\n            return this[a];\n          }, this._invalidated),\n          e = {};\n        b < c;\n\n      )\n        (this._invalidated.all || a.grep(this._pipe[b].filter, d).length > 0) &&\n          this._pipe[b].run(e),\n          b++;\n      (this._invalidated = {}), !this.is('valid') && this.enter('valid');\n    }),\n    (e.prototype.width = function(a) {\n      switch ((a = a || e.Width.Default)) {\n        case e.Width.Inner:\n        case e.Width.Outer:\n          return this._width;\n        default:\n          return this._width - 2 * this.settings.stagePadding + this.settings.margin;\n      }\n    }),\n    (e.prototype.refresh = function() {\n      this.enter('refreshing'),\n        this.trigger('refresh'),\n        this.setup(),\n        this.optionsLogic(),\n        this.$element.addClass(this.options.refreshClass),\n        this.update(),\n        this.$element.removeClass(this.options.refreshClass),\n        this.leave('refreshing'),\n        this.trigger('refreshed');\n    }),\n    (e.prototype.onThrottledResize = function() {\n      b.clearTimeout(this.resizeTimer),\n        (this.resizeTimer = b.setTimeout(\n          this._handlers.onResize,\n          this.settings.responsiveRefreshRate,\n        ));\n    }),\n    (e.prototype.onResize = function() {\n      return (\n        !!this._items.length &&\n        this._width !== this.$element.width() &&\n          !!this.isVisible() &&\n            (this.enter('resizing'),\n            this.trigger('resize').isDefaultPrevented()\n              ? (this.leave('resizing'), !1)\n              : (this.invalidate('width'),\n                this.refresh(),\n                this.leave('resizing'),\n                void this.trigger('resized')))\n      );\n    }),\n    (e.prototype.registerEventHandlers = function() {\n      a.support.transition &&\n        this.$stage.on(a.support.transition.end + '.owl.core', a.proxy(this.onTransitionEnd, this)),\n        !1 !== this.settings.responsive && this.on(b, 'resize', this._handlers.onThrottledResize),\n        this.settings.mouseDrag &&\n          (this.$element.addClass(this.options.dragClass),\n          this.$stage.on('mousedown.owl.core', a.proxy(this.onDragStart, this)),\n          this.$stage.on('dragstart.owl.core selectstart.owl.core', function() {\n            return !1;\n          })),\n        this.settings.touchDrag &&\n          (this.$stage.on('touchstart.owl.core', a.proxy(this.onDragStart, this)),\n          this.$stage.on('touchcancel.owl.core', a.proxy(this.onDragEnd, this)));\n    }),\n    (e.prototype.onDragStart = function(b) {\n      var d = null;\n      3 !== b.which &&\n        (a.support.transform\n          ? ((d = this.$stage\n              .css('transform')\n              .replace(/.*\\(|\\)| /g, '')\n              .split(',')),\n            (d = { x: d[16 === d.length ? 12 : 4], y: d[16 === d.length ? 13 : 5] }))\n          : ((d = this.$stage.position()),\n            (d = {\n              x: this.settings.rtl\n                ? d.left + this.$stage.width() - this.width() + this.settings.margin\n                : d.left,\n              y: d.top,\n            })),\n        this.is('animating') &&\n          (a.support.transform ? this.animate(d.x) : this.$stage.stop(),\n          this.invalidate('position')),\n        this.$element.toggleClass(this.options.grabClass, 'mousedown' === b.type),\n        this.speed(0),\n        (this._drag.time = new Date().getTime()),\n        (this._drag.target = a(b.target)),\n        (this._drag.stage.start = d),\n        (this._drag.stage.current = d),\n        (this._drag.pointer = this.pointer(b)),\n        a(c).on('mouseup.owl.core touchend.owl.core', a.proxy(this.onDragEnd, this)),\n        a(c).one(\n          'mousemove.owl.core touchmove.owl.core',\n          a.proxy(function(b) {\n            var d = this.difference(this._drag.pointer, this.pointer(b));\n            a(c).on('mousemove.owl.core touchmove.owl.core', a.proxy(this.onDragMove, this)),\n              (Math.abs(d.x) < Math.abs(d.y) && this.is('valid')) ||\n                (b.preventDefault(), this.enter('dragging'), this.trigger('drag'));\n          }, this),\n        ));\n    }),\n    (e.prototype.onDragMove = function(a) {\n      var b = null,\n        c = null,\n        d = null,\n        e = this.difference(this._drag.pointer, this.pointer(a)),\n        f = this.difference(this._drag.stage.start, e);\n      this.is('dragging') &&\n        (a.preventDefault(),\n        this.settings.loop\n          ? ((b = this.coordinates(this.minimum())),\n            (c = this.coordinates(this.maximum() + 1) - b),\n            (f.x = ((((f.x - b) % c) + c) % c) + b))\n          : ((b = this.settings.rtl\n              ? this.coordinates(this.maximum())\n              : this.coordinates(this.minimum())),\n            (c = this.settings.rtl\n              ? this.coordinates(this.minimum())\n              : this.coordinates(this.maximum())),\n            (d = this.settings.pullDrag ? (-1 * e.x) / 5 : 0),\n            (f.x = Math.max(Math.min(f.x, b + d), c + d))),\n        (this._drag.stage.current = f),\n        this.animate(f.x));\n    }),\n    (e.prototype.onDragEnd = function(b) {\n      var d = this.difference(this._drag.pointer, this.pointer(b)),\n        e = this._drag.stage.current,\n        f = (d.x > 0) ^ this.settings.rtl ? 'left' : 'right';\n      a(c).off('.owl.core'),\n        this.$element.removeClass(this.options.grabClass),\n        ((0 !== d.x && this.is('dragging')) || !this.is('valid')) &&\n          (this.speed(this.settings.dragEndSpeed || this.settings.smartSpeed),\n          this.current(this.closest(e.x, 0 !== d.x ? f : this._drag.direction)),\n          this.invalidate('position'),\n          this.update(),\n          (this._drag.direction = f),\n          (Math.abs(d.x) > 3 || new Date().getTime() - this._drag.time > 300) &&\n            this._drag.target.one('click.owl.core', function() {\n              return !1;\n            })),\n        this.is('dragging') && (this.leave('dragging'), this.trigger('dragged'));\n    }),\n    (e.prototype.closest = function(b, c) {\n      var e = -1,\n        f = 30,\n        g = this.width(),\n        h = this.coordinates();\n      return (\n        this.settings.freeDrag ||\n          a.each(\n            h,\n            a.proxy(function(a, i) {\n              return (\n                'left' === c && b > i - f && b < i + f\n                  ? (e = a)\n                  : 'right' === c && b > i - g - f && b < i - g + f\n                  ? (e = a + 1)\n                  : this.op(b, '<', i) &&\n                    this.op(b, '>', h[a + 1] !== d ? h[a + 1] : i - g) &&\n                    (e = 'left' === c ? a + 1 : a),\n                -1 === e\n              );\n            }, this),\n          ),\n        this.settings.loop ||\n          (this.op(b, '>', h[this.minimum()])\n            ? (e = b = this.minimum())\n            : this.op(b, '<', h[this.maximum()]) && (e = b = this.maximum())),\n        e\n      );\n    }),\n    (e.prototype.animate = function(b) {\n      var c = this.speed() > 0;\n      this.is('animating') && this.onTransitionEnd(),\n        c && (this.enter('animating'), this.trigger('translate')),\n        a.support.transform3d && a.support.transition\n          ? this.$stage.css({\n              transform: 'translate3d(' + b + 'px,0px,0px)',\n              transition:\n                this.speed() / 1e3 +\n                's' +\n                (this.settings.slideTransition ? ' ' + this.settings.slideTransition : ''),\n            })\n          : c\n          ? this.$stage.animate(\n              { left: b + 'px' },\n              this.speed(),\n              this.settings.fallbackEasing,\n              a.proxy(this.onTransitionEnd, this),\n            )\n          : this.$stage.css({ left: b + 'px' });\n    }),\n    (e.prototype.is = function(a) {\n      return this._states.current[a] && this._states.current[a] > 0;\n    }),\n    (e.prototype.current = function(a) {\n      if (a === d) return this._current;\n      if (0 === this._items.length) return d;\n      if (((a = this.normalize(a)), this._current !== a)) {\n        var b = this.trigger('change', { property: { name: 'position', value: a } });\n        b.data !== d && (a = this.normalize(b.data)),\n          (this._current = a),\n          this.invalidate('position'),\n          this.trigger('changed', { property: { name: 'position', value: this._current } });\n      }\n      return this._current;\n    }),\n    (e.prototype.invalidate = function(b) {\n      return (\n        'string' === a.type(b) &&\n          ((this._invalidated[b] = !0), this.is('valid') && this.leave('valid')),\n        a.map(this._invalidated, function(a, b) {\n          return b;\n        })\n      );\n    }),\n    (e.prototype.reset = function(a) {\n      (a = this.normalize(a)) !== d &&\n        ((this._speed = 0),\n        (this._current = a),\n        this.suppress(['translate', 'translated']),\n        this.animate(this.coordinates(a)),\n        this.release(['translate', 'translated']));\n    }),\n    (e.prototype.normalize = function(a, b) {\n      var c = this._items.length,\n        e = b ? 0 : this._clones.length;\n      return (\n        !this.isNumeric(a) || c < 1\n          ? (a = d)\n          : (a < 0 || a >= c + e) && (a = ((((a - e / 2) % c) + c) % c) + e / 2),\n        a\n      );\n    }),\n    (e.prototype.relative = function(a) {\n      return (a -= this._clones.length / 2), this.normalize(a, !0);\n    }),\n    (e.prototype.maximum = function(a) {\n      var b,\n        c,\n        d,\n        e = this.settings,\n        f = this._coordinates.length;\n      if (e.loop) f = this._clones.length / 2 + this._items.length - 1;\n      else if (e.autoWidth || e.merge) {\n        if ((b = this._items.length))\n          for (\n            c = this._items[--b].width(), d = this.$element.width();\n            b-- && !((c += this._items[b].width() + this.settings.margin) > d);\n\n          );\n        f = b + 1;\n      } else f = e.center ? this._items.length - 1 : this._items.length - e.items;\n      return a && (f -= this._clones.length / 2), Math.max(f, 0);\n    }),\n    (e.prototype.minimum = function(a) {\n      return a ? 0 : this._clones.length / 2;\n    }),\n    (e.prototype.items = function(a) {\n      return a === d ? this._items.slice() : ((a = this.normalize(a, !0)), this._items[a]);\n    }),\n    (e.prototype.mergers = function(a) {\n      return a === d ? this._mergers.slice() : ((a = this.normalize(a, !0)), this._mergers[a]);\n    }),\n    (e.prototype.clones = function(b) {\n      var c = this._clones.length / 2,\n        e = c + this._items.length,\n        f = function(a) {\n          return a % 2 == 0 ? e + a / 2 : c - (a + 1) / 2;\n        };\n      return b === d\n        ? a.map(this._clones, function(a, b) {\n            return f(b);\n          })\n        : a.map(this._clones, function(a, c) {\n            return a === b ? f(c) : null;\n          });\n    }),\n    (e.prototype.speed = function(a) {\n      return a !== d && (this._speed = a), this._speed;\n    }),\n    (e.prototype.coordinates = function(b) {\n      var c,\n        e = 1,\n        f = b - 1;\n      return b === d\n        ? a.map(\n            this._coordinates,\n            a.proxy(function(a, b) {\n              return this.coordinates(b);\n            }, this),\n          )\n        : (this.settings.center\n            ? (this.settings.rtl && ((e = -1), (f = b + 1)),\n              (c = this._coordinates[b]),\n              (c += ((this.width() - c + (this._coordinates[f] || 0)) / 2) * e))\n            : (c = this._coordinates[f] || 0),\n          (c = Math.ceil(c)));\n    }),\n    (e.prototype.duration = function(a, b, c) {\n      return 0 === c\n        ? 0\n        : Math.min(Math.max(Math.abs(b - a), 1), 6) * Math.abs(c || this.settings.smartSpeed);\n    }),\n    (e.prototype.to = function(a, b) {\n      var c = this.current(),\n        d = null,\n        e = a - this.relative(c),\n        f = (e > 0) - (e < 0),\n        g = this._items.length,\n        h = this.minimum(),\n        i = this.maximum();\n      this.settings.loop\n        ? (!this.settings.rewind && Math.abs(e) > g / 2 && (e += -1 * f * g),\n          (a = c + e),\n          (d = ((((a - h) % g) + g) % g) + h) !== a &&\n            d - e <= i &&\n            d - e > 0 &&\n            ((c = d - e), (a = d), this.reset(c)))\n        : this.settings.rewind\n        ? ((i += 1), (a = ((a % i) + i) % i))\n        : (a = Math.max(h, Math.min(i, a))),\n        this.speed(this.duration(c, a, b)),\n        this.current(a),\n        this.isVisible() && this.update();\n    }),\n    (e.prototype.next = function(a) {\n      (a = a || !1), this.to(this.relative(this.current()) + 1, a);\n    }),\n    (e.prototype.prev = function(a) {\n      (a = a || !1), this.to(this.relative(this.current()) - 1, a);\n    }),\n    (e.prototype.onTransitionEnd = function(a) {\n      if (\n        a !== d &&\n        (a.stopPropagation(), (a.target || a.srcElement || a.originalTarget) !== this.$stage.get(0))\n      )\n        return !1;\n      this.leave('animating'), this.trigger('translated');\n    }),\n    (e.prototype.viewport = function() {\n      var d;\n      return (\n        this.options.responsiveBaseElement !== b\n          ? (d = a(this.options.responsiveBaseElement).width())\n          : b.innerWidth\n          ? (d = b.innerWidth)\n          : c.documentElement && c.documentElement.clientWidth\n          ? (d = c.documentElement.clientWidth)\n          : console.warn('Can not detect viewport width.'),\n        d\n      );\n    }),\n    (e.prototype.replace = function(b) {\n      this.$stage.empty(),\n        (this._items = []),\n        b && (b = b instanceof jQuery ? b : a(b)),\n        this.settings.nestedItemSelector && (b = b.find('.' + this.settings.nestedItemSelector)),\n        b\n          .filter(function() {\n            return 1 === this.nodeType;\n          })\n          .each(\n            a.proxy(function(a, b) {\n              (b = this.prepare(b)),\n                this.$stage.append(b),\n                this._items.push(b),\n                this._mergers.push(\n                  1 *\n                    b\n                      .find('[data-merge]')\n                      .addBack('[data-merge]')\n                      .attr('data-merge') || 1,\n                );\n            }, this),\n          ),\n        this.reset(this.isNumeric(this.settings.startPosition) ? this.settings.startPosition : 0),\n        this.invalidate('items');\n    }),\n    (e.prototype.add = function(b, c) {\n      var e = this.relative(this._current);\n      (c = c === d ? this._items.length : this.normalize(c, !0)),\n        (b = b instanceof jQuery ? b : a(b)),\n        this.trigger('add', { content: b, position: c }),\n        (b = this.prepare(b)),\n        0 === this._items.length || c === this._items.length\n          ? (0 === this._items.length && this.$stage.append(b),\n            0 !== this._items.length && this._items[c - 1].after(b),\n            this._items.push(b),\n            this._mergers.push(\n              1 *\n                b\n                  .find('[data-merge]')\n                  .addBack('[data-merge]')\n                  .attr('data-merge') || 1,\n            ))\n          : (this._items[c].before(b),\n            this._items.splice(c, 0, b),\n            this._mergers.splice(\n              c,\n              0,\n              1 *\n                b\n                  .find('[data-merge]')\n                  .addBack('[data-merge]')\n                  .attr('data-merge') || 1,\n            )),\n        this._items[e] && this.reset(this._items[e].index()),\n        this.invalidate('items'),\n        this.trigger('added', { content: b, position: c });\n    }),\n    (e.prototype.remove = function(a) {\n      (a = this.normalize(a, !0)) !== d &&\n        (this.trigger('remove', { content: this._items[a], position: a }),\n        this._items[a].remove(),\n        this._items.splice(a, 1),\n        this._mergers.splice(a, 1),\n        this.invalidate('items'),\n        this.trigger('removed', { content: null, position: a }));\n    }),\n    (e.prototype.preloadAutoWidthImages = function(b) {\n      b.each(\n        a.proxy(function(b, c) {\n          this.enter('pre-loading'),\n            (c = a(c)),\n            a(new Image())\n              .one(\n                'load',\n                a.proxy(function(a) {\n                  c.attr('src', a.target.src),\n                    c.css('opacity', 1),\n                    this.leave('pre-loading'),\n                    !this.is('pre-loading') && !this.is('initializing') && this.refresh();\n                }, this),\n              )\n              .attr('src', c.attr('src') || c.attr('data-src') || c.attr('data-src-retina'));\n        }, this),\n      );\n    }),\n    (e.prototype.destroy = function() {\n      this.$element.off('.owl.core'),\n        this.$stage.off('.owl.core'),\n        a(c).off('.owl.core'),\n        !1 !== this.settings.responsive &&\n          (b.clearTimeout(this.resizeTimer),\n          this.off(b, 'resize', this._handlers.onThrottledResize));\n      for (var d in this._plugins) this._plugins[d].destroy();\n      this.$stage.children('.cloned').remove(),\n        this.$stage.unwrap(),\n        this.$stage\n          .children()\n          .contents()\n          .unwrap(),\n        this.$stage.children().unwrap(),\n        this.$stage.remove(),\n        this.$element\n          .removeClass(this.options.refreshClass)\n          .removeClass(this.options.loadingClass)\n          .removeClass(this.options.loadedClass)\n          .removeClass(this.options.rtlClass)\n          .removeClass(this.options.dragClass)\n          .removeClass(this.options.grabClass)\n          .attr(\n            'class',\n            this.$element\n              .attr('class')\n              .replace(new RegExp(this.options.responsiveClass + '-\\\\S+\\\\s', 'g'), ''),\n          )\n          .removeData('owl.carousel');\n    }),\n    (e.prototype.op = function(a, b, c) {\n      var d = this.settings.rtl;\n      switch (b) {\n        case '<':\n          return d ? a > c : a < c;\n        case '>':\n          return d ? a < c : a > c;\n        case '>=':\n          return d ? a <= c : a >= c;\n        case '<=':\n          return d ? a >= c : a <= c;\n      }\n    }),\n    (e.prototype.on = function(a, b, c, d) {\n      a.addEventListener\n        ? a.addEventListener(b, c, d)\n        : a.attachEvent && a.attachEvent('on' + b, c);\n    }),\n    (e.prototype.off = function(a, b, c, d) {\n      a.removeEventListener\n        ? a.removeEventListener(b, c, d)\n        : a.detachEvent && a.detachEvent('on' + b, c);\n    }),\n    (e.prototype.trigger = function(b, c, d, f, g) {\n      var h = { item: { count: this._items.length, index: this.current() } },\n        i = a.camelCase(\n          a\n            .grep(['on', b, d], function(a) {\n              return a;\n            })\n            .join('-')\n            .toLowerCase(),\n        ),\n        j = a.Event(\n          [b, 'owl', d || 'carousel'].join('.').toLowerCase(),\n          a.extend({ relatedTarget: this }, h, c),\n        );\n      return (\n        this._supress[b] ||\n          (a.each(this._plugins, function(a, b) {\n            b.onTrigger && b.onTrigger(j);\n          }),\n          this.register({ type: e.Type.Event, name: b }),\n          this.$element.trigger(j),\n          this.settings && 'function' == typeof this.settings[i] && this.settings[i].call(this, j)),\n        j\n      );\n    }),\n    (e.prototype.enter = function(b) {\n      a.each(\n        [b].concat(this._states.tags[b] || []),\n        a.proxy(function(a, b) {\n          this._states.current[b] === d && (this._states.current[b] = 0), this._states.current[b]++;\n        }, this),\n      );\n    }),\n    (e.prototype.leave = function(b) {\n      a.each(\n        [b].concat(this._states.tags[b] || []),\n        a.proxy(function(a, b) {\n          this._states.current[b]--;\n        }, this),\n      );\n    }),\n    (e.prototype.register = function(b) {\n      if (b.type === e.Type.Event) {\n        if (\n          (a.event.special[b.name] || (a.event.special[b.name] = {}), !a.event.special[b.name].owl)\n        ) {\n          var c = a.event.special[b.name]._default;\n          (a.event.special[b.name]._default = function(a) {\n            return !c || !c.apply || (a.namespace && -1 !== a.namespace.indexOf('owl'))\n              ? a.namespace && a.namespace.indexOf('owl') > -1\n              : c.apply(this, arguments);\n          }),\n            (a.event.special[b.name].owl = !0);\n        }\n      } else\n        b.type === e.Type.State &&\n          (this._states.tags[b.name]\n            ? (this._states.tags[b.name] = this._states.tags[b.name].concat(b.tags))\n            : (this._states.tags[b.name] = b.tags),\n          (this._states.tags[b.name] = a.grep(\n            this._states.tags[b.name],\n            a.proxy(function(c, d) {\n              return a.inArray(c, this._states.tags[b.name]) === d;\n            }, this),\n          )));\n    }),\n    (e.prototype.suppress = function(b) {\n      a.each(\n        b,\n        a.proxy(function(a, b) {\n          this._supress[b] = !0;\n        }, this),\n      );\n    }),\n    (e.prototype.release = function(b) {\n      a.each(\n        b,\n        a.proxy(function(a, b) {\n          delete this._supress[b];\n        }, this),\n      );\n    }),\n    (e.prototype.pointer = function(a) {\n      var c = { x: null, y: null };\n      return (\n        (a = a.originalEvent || a || b.event),\n        (a =\n          a.touches && a.touches.length\n            ? a.touches[0]\n            : a.changedTouches && a.changedTouches.length\n            ? a.changedTouches[0]\n            : a),\n        a.pageX ? ((c.x = a.pageX), (c.y = a.pageY)) : ((c.x = a.clientX), (c.y = a.clientY)),\n        c\n      );\n    }),\n    (e.prototype.isNumeric = function(a) {\n      return !isNaN(parseFloat(a));\n    }),\n    (e.prototype.difference = function(a, b) {\n      return { x: a.x - b.x, y: a.y - b.y };\n    }),\n    (a.fn.owlCarousel = function(b) {\n      var c = Array.prototype.slice.call(arguments, 1);\n      return this.each(function() {\n        var d = a(this),\n          f = d.data('owl.carousel');\n        f ||\n          ((f = new e(this, 'object' == typeof b && b)),\n          d.data('owl.carousel', f),\n          a.each(['next', 'prev', 'to', 'destroy', 'refresh', 'replace', 'add', 'remove'], function(\n            b,\n            c,\n          ) {\n            f.register({ type: e.Type.Event, name: c }),\n              f.$element.on(\n                c + '.owl.carousel.core',\n                a.proxy(function(a) {\n                  a.namespace &&\n                    a.relatedTarget !== this &&\n                    (this.suppress([c]),\n                    f[c].apply(this, [].slice.call(arguments, 1)),\n                    this.release([c]));\n                }, f),\n              );\n          })),\n          'string' == typeof b && '_' !== b.charAt(0) && f[b].apply(f, c);\n      });\n    }),\n    (a.fn.owlCarousel.Constructor = e);\n})(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    var e = function(b) {\n      (this._core = b),\n        (this._interval = null),\n        (this._visible = null),\n        (this._handlers = {\n          'initialized.owl.carousel': a.proxy(function(a) {\n            a.namespace && this._core.settings.autoRefresh && this.watch();\n          }, this),\n        }),\n        (this._core.options = a.extend({}, e.Defaults, this._core.options)),\n        this._core.$element.on(this._handlers);\n    };\n    (e.Defaults = { autoRefresh: !0, autoRefreshInterval: 500 }),\n      (e.prototype.watch = function() {\n        this._interval ||\n          ((this._visible = this._core.isVisible()),\n          (this._interval = b.setInterval(\n            a.proxy(this.refresh, this),\n            this._core.settings.autoRefreshInterval,\n          )));\n      }),\n      (e.prototype.refresh = function() {\n        this._core.isVisible() !== this._visible &&\n          ((this._visible = !this._visible),\n          this._core.$element.toggleClass('owl-hidden', !this._visible),\n          this._visible && this._core.invalidate('width') && this._core.refresh());\n      }),\n      (e.prototype.destroy = function() {\n        var a, c;\n        b.clearInterval(this._interval);\n        for (a in this._handlers) this._core.$element.off(a, this._handlers[a]);\n        for (c in Object.getOwnPropertyNames(this))\n          'function' != typeof this[c] && (this[c] = null);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.AutoRefresh = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    var e = function(b) {\n      (this._core = b),\n        (this._loaded = []),\n        (this._handlers = {\n          'initialized.owl.carousel change.owl.carousel resized.owl.carousel': a.proxy(function(b) {\n            if (\n              b.namespace &&\n              this._core.settings &&\n              this._core.settings.lazyLoad &&\n              ((b.property && 'position' == b.property.name) || 'initialized' == b.type)\n            ) {\n              var c = this._core.settings,\n                e = (c.center && Math.ceil(c.items / 2)) || c.items,\n                f = (c.center && -1 * e) || 0,\n                g =\n                  (b.property && b.property.value !== d ? b.property.value : this._core.current()) +\n                  f,\n                h = this._core.clones().length,\n                i = a.proxy(function(a, b) {\n                  this.load(b);\n                }, this);\n              for (\n                c.lazyLoadEager > 0 &&\n                ((e += c.lazyLoadEager), c.loop && ((g -= c.lazyLoadEager), e++));\n                f++ < e;\n\n              )\n                this.load(h / 2 + this._core.relative(g)),\n                  h && a.each(this._core.clones(this._core.relative(g)), i),\n                  g++;\n            }\n          }, this),\n        }),\n        (this._core.options = a.extend({}, e.Defaults, this._core.options)),\n        this._core.$element.on(this._handlers);\n    };\n    (e.Defaults = { lazyLoad: !1, lazyLoadEager: 0 }),\n      (e.prototype.load = function(c) {\n        var d = this._core.$stage.children().eq(c),\n          e = d && d.find('.owl-lazy');\n        !e ||\n          a.inArray(d.get(0), this._loaded) > -1 ||\n          (e.each(\n            a.proxy(function(c, d) {\n              var e,\n                f = a(d),\n                g =\n                  (b.devicePixelRatio > 1 && f.attr('data-src-retina')) ||\n                  f.attr('data-src') ||\n                  f.attr('data-srcset');\n              this._core.trigger('load', { element: f, url: g }, 'lazy'),\n                f.is('img')\n                  ? f\n                      .one(\n                        'load.owl.lazy',\n                        a.proxy(function() {\n                          f.css('opacity', 1),\n                            this._core.trigger('loaded', { element: f, url: g }, 'lazy');\n                        }, this),\n                      )\n                      .attr('src', g)\n                  : f.is('source')\n                  ? f\n                      .one(\n                        'load.owl.lazy',\n                        a.proxy(function() {\n                          this._core.trigger('loaded', { element: f, url: g }, 'lazy');\n                        }, this),\n                      )\n                      .attr('srcset', g)\n                  : ((e = new Image()),\n                    (e.onload = a.proxy(function() {\n                      f.css({ 'background-image': 'url(\"' + g + '\")', opacity: '1' }),\n                        this._core.trigger('loaded', { element: f, url: g }, 'lazy');\n                    }, this)),\n                    (e.src = g));\n            }, this),\n          ),\n          this._loaded.push(d.get(0)));\n      }),\n      (e.prototype.destroy = function() {\n        var a, b;\n        for (a in this.handlers) this._core.$element.off(a, this.handlers[a]);\n        for (b in Object.getOwnPropertyNames(this))\n          'function' != typeof this[b] && (this[b] = null);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.Lazy = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    var e = function(c) {\n      (this._core = c),\n        (this._previousHeight = null),\n        (this._handlers = {\n          'initialized.owl.carousel refreshed.owl.carousel': a.proxy(function(a) {\n            a.namespace && this._core.settings.autoHeight && this.update();\n          }, this),\n          'changed.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              this._core.settings.autoHeight &&\n              'position' === a.property.name &&\n              this.update();\n          }, this),\n          'loaded.owl.lazy': a.proxy(function(a) {\n            a.namespace &&\n              this._core.settings.autoHeight &&\n              a.element.closest('.' + this._core.settings.itemClass).index() ===\n                this._core.current() &&\n              this.update();\n          }, this),\n        }),\n        (this._core.options = a.extend({}, e.Defaults, this._core.options)),\n        this._core.$element.on(this._handlers),\n        (this._intervalId = null);\n      var d = this;\n      a(b).on('load', function() {\n        d._core.settings.autoHeight && d.update();\n      }),\n        a(b).resize(function() {\n          d._core.settings.autoHeight &&\n            (null != d._intervalId && clearTimeout(d._intervalId),\n            (d._intervalId = setTimeout(function() {\n              d.update();\n            }, 250)));\n        });\n    };\n    (e.Defaults = { autoHeight: !1, autoHeightClass: 'owl-height' }),\n      (e.prototype.update = function() {\n        var b = this._core._current,\n          c = b + this._core.settings.items,\n          d = this._core.settings.lazyLoad,\n          e = this._core.$stage\n            .children()\n            .toArray()\n            .slice(b, c),\n          f = [],\n          g = 0;\n        a.each(e, function(b, c) {\n          f.push(a(c).height());\n        }),\n          (g = Math.max.apply(null, f)),\n          g <= 1 && d && this._previousHeight && (g = this._previousHeight),\n          (this._previousHeight = g),\n          this._core.$stage\n            .parent()\n            .height(g)\n            .addClass(this._core.settings.autoHeightClass);\n      }),\n      (e.prototype.destroy = function() {\n        var a, b;\n        for (a in this._handlers) this._core.$element.off(a, this._handlers[a]);\n        for (b in Object.getOwnPropertyNames(this))\n          'function' != typeof this[b] && (this[b] = null);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.AutoHeight = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    var e = function(b) {\n      (this._core = b),\n        (this._videos = {}),\n        (this._playing = null),\n        (this._handlers = {\n          'initialized.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              this._core.register({ type: 'state', name: 'playing', tags: ['interacting'] });\n          }, this),\n          'resize.owl.carousel': a.proxy(function(a) {\n            a.namespace && this._core.settings.video && this.isInFullScreen() && a.preventDefault();\n          }, this),\n          'refreshed.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              this._core.is('resizing') &&\n              this._core.$stage.find('.cloned .owl-video-frame').remove();\n          }, this),\n          'changed.owl.carousel': a.proxy(function(a) {\n            a.namespace && 'position' === a.property.name && this._playing && this.stop();\n          }, this),\n          'prepared.owl.carousel': a.proxy(function(b) {\n            if (b.namespace) {\n              var c = a(b.content).find('.owl-video');\n              c.length && (c.css('display', 'none'), this.fetch(c, a(b.content)));\n            }\n          }, this),\n        }),\n        (this._core.options = a.extend({}, e.Defaults, this._core.options)),\n        this._core.$element.on(this._handlers),\n        this._core.$element.on(\n          'click.owl.video',\n          '.owl-video-play-icon',\n          a.proxy(function(a) {\n            this.play(a);\n          }, this),\n        );\n    };\n    (e.Defaults = { video: !1, videoHeight: !1, videoWidth: !1 }),\n      (e.prototype.fetch = function(a, b) {\n        var c = (function() {\n            return a.attr('data-vimeo-id')\n              ? 'vimeo'\n              : a.attr('data-vzaar-id')\n              ? 'vzaar'\n              : 'youtube';\n          })(),\n          d = a.attr('data-vimeo-id') || a.attr('data-youtube-id') || a.attr('data-vzaar-id'),\n          e = a.attr('data-width') || this._core.settings.videoWidth,\n          f = a.attr('data-height') || this._core.settings.videoHeight,\n          g = a.attr('href');\n        if (!g) throw new Error('Missing video URL.');\n        if (\n          ((d = g.match(\n            /(http:|https:|)\\/\\/(player.|www.|app.)?(vimeo\\.com|youtu(be\\.com|\\.be|be\\.googleapis\\.com|be\\-nocookie\\.com)|vzaar\\.com)\\/(video\\/|videos\\/|embed\\/|channels\\/.+\\/|groups\\/.+\\/|watch\\?v=|v\\/)?([A-Za-z0-9._%-]*)(\\&\\S+)?/,\n          )),\n          d[3].indexOf('youtu') > -1)\n        )\n          c = 'youtube';\n        else if (d[3].indexOf('vimeo') > -1) c = 'vimeo';\n        else {\n          if (!(d[3].indexOf('vzaar') > -1)) throw new Error('Video URL not supported.');\n          c = 'vzaar';\n        }\n        (d = d[6]),\n          (this._videos[g] = { type: c, id: d, width: e, height: f }),\n          b.attr('data-video', g),\n          this.thumbnail(a, this._videos[g]);\n      }),\n      (e.prototype.thumbnail = function(b, c) {\n        var d,\n          e,\n          f,\n          g = c.width && c.height ? 'width:' + c.width + 'px;height:' + c.height + 'px;' : '',\n          h = b.find('img'),\n          i = 'src',\n          j = '',\n          k = this._core.settings,\n          l = function(c) {\n            (e = '<div class=\"owl-video-play-icon\"></div>'),\n              (d = k.lazyLoad\n                ? a('<div/>', { class: 'owl-video-tn ' + j, srcType: c })\n                : a('<div/>', {\n                    class: 'owl-video-tn',\n                    style: 'opacity:1;background-image:url(' + c + ')',\n                  })),\n              b.after(d),\n              b.after(e);\n          };\n        if (\n          (b.wrap(a('<div/>', { class: 'owl-video-wrapper', style: g })),\n          this._core.settings.lazyLoad && ((i = 'data-src'), (j = 'owl-lazy')),\n          h.length)\n        )\n          return l(h.attr(i)), h.remove(), !1;\n        'youtube' === c.type\n          ? ((f = '//img.youtube.com/vi/' + c.id + '/hqdefault.jpg'), l(f))\n          : 'vimeo' === c.type\n          ? a.ajax({\n              type: 'GET',\n              url: '//vimeo.com/api/v2/video/' + c.id + '.json',\n              jsonp: 'callback',\n              dataType: 'jsonp',\n              success: function(a) {\n                (f = a[0].thumbnail_large), l(f);\n              },\n            })\n          : 'vzaar' === c.type &&\n            a.ajax({\n              type: 'GET',\n              url: '//vzaar.com/api/videos/' + c.id + '.json',\n              jsonp: 'callback',\n              dataType: 'jsonp',\n              success: function(a) {\n                (f = a.framegrab_url), l(f);\n              },\n            });\n      }),\n      (e.prototype.stop = function() {\n        this._core.trigger('stop', null, 'video'),\n          this._playing.find('.owl-video-frame').remove(),\n          this._playing.removeClass('owl-video-playing'),\n          (this._playing = null),\n          this._core.leave('playing'),\n          this._core.trigger('stopped', null, 'video');\n      }),\n      (e.prototype.play = function(b) {\n        var c,\n          d = a(b.target),\n          e = d.closest('.' + this._core.settings.itemClass),\n          f = this._videos[e.attr('data-video')],\n          g = f.width || '100%',\n          h = f.height || this._core.$stage.height();\n        this._playing ||\n          (this._core.enter('playing'),\n          this._core.trigger('play', null, 'video'),\n          (e = this._core.items(this._core.relative(e.index()))),\n          this._core.reset(e.index()),\n          (c = a(\n            '<iframe frameborder=\"0\" allowfullscreen mozallowfullscreen webkitAllowFullScreen ></iframe>',\n          )),\n          c.attr('height', h),\n          c.attr('width', g),\n          'youtube' === f.type\n            ? c.attr('src', '//www.youtube.com/embed/' + f.id + '?autoplay=1&rel=0&v=' + f.id)\n            : 'vimeo' === f.type\n            ? c.attr('src', '//player.vimeo.com/video/' + f.id + '?autoplay=1')\n            : 'vzaar' === f.type &&\n              c.attr('src', '//view.vzaar.com/' + f.id + '/player?autoplay=true'),\n          a(c)\n            .wrap('<div class=\"owl-video-frame\" />')\n            .insertAfter(e.find('.owl-video')),\n          (this._playing = e.addClass('owl-video-playing')));\n      }),\n      (e.prototype.isInFullScreen = function() {\n        var b = c.fullscreenElement || c.mozFullScreenElement || c.webkitFullscreenElement;\n        return (\n          b &&\n          a(b)\n            .parent()\n            .hasClass('owl-video-frame')\n        );\n      }),\n      (e.prototype.destroy = function() {\n        var a, b;\n        this._core.$element.off('click.owl.video');\n        for (a in this._handlers) this._core.$element.off(a, this._handlers[a]);\n        for (b in Object.getOwnPropertyNames(this))\n          'function' != typeof this[b] && (this[b] = null);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.Video = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    var e = function(b) {\n      (this.core = b),\n        (this.core.options = a.extend({}, e.Defaults, this.core.options)),\n        (this.swapping = !0),\n        (this.previous = d),\n        (this.next = d),\n        (this.handlers = {\n          'change.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              'position' == a.property.name &&\n              ((this.previous = this.core.current()), (this.next = a.property.value));\n          }, this),\n          'drag.owl.carousel dragged.owl.carousel translated.owl.carousel': a.proxy(function(a) {\n            a.namespace && (this.swapping = 'translated' == a.type);\n          }, this),\n          'translate.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              this.swapping &&\n              (this.core.options.animateOut || this.core.options.animateIn) &&\n              this.swap();\n          }, this),\n        }),\n        this.core.$element.on(this.handlers);\n    };\n    (e.Defaults = { animateOut: !1, animateIn: !1 }),\n      (e.prototype.swap = function() {\n        if (1 === this.core.settings.items && a.support.animation && a.support.transition) {\n          this.core.speed(0);\n          var b,\n            c = a.proxy(this.clear, this),\n            d = this.core.$stage.children().eq(this.previous),\n            e = this.core.$stage.children().eq(this.next),\n            f = this.core.settings.animateIn,\n            g = this.core.settings.animateOut;\n          this.core.current() !== this.previous &&\n            (g &&\n              ((b = this.core.coordinates(this.previous) - this.core.coordinates(this.next)),\n              d\n                .one(a.support.animation.end, c)\n                .css({ left: b + 'px' })\n                .addClass('animated owl-animated-out')\n                .addClass(g)),\n            f &&\n              e\n                .one(a.support.animation.end, c)\n                .addClass('animated owl-animated-in')\n                .addClass(f));\n        }\n      }),\n      (e.prototype.clear = function(b) {\n        a(b.target)\n          .css({ left: '' })\n          .removeClass('animated owl-animated-out owl-animated-in')\n          .removeClass(this.core.settings.animateIn)\n          .removeClass(this.core.settings.animateOut),\n          this.core.onTransitionEnd();\n      }),\n      (e.prototype.destroy = function() {\n        var a, b;\n        for (a in this.handlers) this.core.$element.off(a, this.handlers[a]);\n        for (b in Object.getOwnPropertyNames(this))\n          'function' != typeof this[b] && (this[b] = null);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.Animate = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    var e = function(b) {\n      (this._core = b),\n        (this._call = null),\n        (this._time = 0),\n        (this._timeout = 0),\n        (this._paused = !0),\n        (this._handlers = {\n          'changed.owl.carousel': a.proxy(function(a) {\n            a.namespace && 'settings' === a.property.name\n              ? this._core.settings.autoplay\n                ? this.play()\n                : this.stop()\n              : a.namespace && 'position' === a.property.name && this._paused && (this._time = 0);\n          }, this),\n          'initialized.owl.carousel': a.proxy(function(a) {\n            a.namespace && this._core.settings.autoplay && this.play();\n          }, this),\n          'play.owl.autoplay': a.proxy(function(a, b, c) {\n            a.namespace && this.play(b, c);\n          }, this),\n          'stop.owl.autoplay': a.proxy(function(a) {\n            a.namespace && this.stop();\n          }, this),\n          'mouseover.owl.autoplay': a.proxy(function() {\n            this._core.settings.autoplayHoverPause && this._core.is('rotating') && this.pause();\n          }, this),\n          'mouseleave.owl.autoplay': a.proxy(function() {\n            this._core.settings.autoplayHoverPause && this._core.is('rotating') && this.play();\n          }, this),\n          'touchstart.owl.core': a.proxy(function() {\n            this._core.settings.autoplayHoverPause && this._core.is('rotating') && this.pause();\n          }, this),\n          'touchend.owl.core': a.proxy(function() {\n            this._core.settings.autoplayHoverPause && this.play();\n          }, this),\n        }),\n        this._core.$element.on(this._handlers),\n        (this._core.options = a.extend({}, e.Defaults, this._core.options));\n    };\n    (e.Defaults = {\n      autoplay: !1,\n      autoplayTimeout: 5e3,\n      autoplayHoverPause: !1,\n      autoplaySpeed: !1,\n    }),\n      (e.prototype._next = function(d) {\n        (this._call = b.setTimeout(\n          a.proxy(this._next, this, d),\n          this._timeout * (Math.round(this.read() / this._timeout) + 1) - this.read(),\n        )),\n          this._core.is('interacting') ||\n            c.hidden ||\n            this._core.next(d || this._core.settings.autoplaySpeed);\n      }),\n      (e.prototype.read = function() {\n        return new Date().getTime() - this._time;\n      }),\n      (e.prototype.play = function(c, d) {\n        var e;\n        this._core.is('rotating') || this._core.enter('rotating'),\n          (c = c || this._core.settings.autoplayTimeout),\n          (e = Math.min(this._time % (this._timeout || c), c)),\n          this._paused\n            ? ((this._time = this.read()), (this._paused = !1))\n            : b.clearTimeout(this._call),\n          (this._time += (this.read() % c) - e),\n          (this._timeout = c),\n          (this._call = b.setTimeout(a.proxy(this._next, this, d), c - e));\n      }),\n      (e.prototype.stop = function() {\n        this._core.is('rotating') &&\n          ((this._time = 0),\n          (this._paused = !0),\n          b.clearTimeout(this._call),\n          this._core.leave('rotating'));\n      }),\n      (e.prototype.pause = function() {\n        this._core.is('rotating') &&\n          !this._paused &&\n          ((this._time = this.read()), (this._paused = !0), b.clearTimeout(this._call));\n      }),\n      (e.prototype.destroy = function() {\n        var a, b;\n        this.stop();\n        for (a in this._handlers) this._core.$element.off(a, this._handlers[a]);\n        for (b in Object.getOwnPropertyNames(this))\n          'function' != typeof this[b] && (this[b] = null);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.autoplay = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    'use strict';\n    var e = function(b) {\n      (this._core = b),\n        (this._initialized = !1),\n        (this._pages = []),\n        (this._controls = {}),\n        (this._templates = []),\n        (this.$element = this._core.$element),\n        (this._overrides = { next: this._core.next, prev: this._core.prev, to: this._core.to }),\n        (this._handlers = {\n          'prepared.owl.carousel': a.proxy(function(b) {\n            b.namespace &&\n              this._core.settings.dotsData &&\n              this._templates.push(\n                '<div class=\"' +\n                  this._core.settings.dotClass +\n                  '\">' +\n                  a(b.content)\n                    .find('[data-dot]')\n                    .addBack('[data-dot]')\n                    .attr('data-dot') +\n                  '</div>',\n              );\n          }, this),\n          'added.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              this._core.settings.dotsData &&\n              this._templates.splice(a.position, 0, this._templates.pop());\n          }, this),\n          'remove.owl.carousel': a.proxy(function(a) {\n            a.namespace && this._core.settings.dotsData && this._templates.splice(a.position, 1);\n          }, this),\n          'changed.owl.carousel': a.proxy(function(a) {\n            a.namespace && 'position' == a.property.name && this.draw();\n          }, this),\n          'initialized.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              !this._initialized &&\n              (this._core.trigger('initialize', null, 'navigation'),\n              this.initialize(),\n              this.update(),\n              this.draw(),\n              (this._initialized = !0),\n              this._core.trigger('initialized', null, 'navigation'));\n          }, this),\n          'refreshed.owl.carousel': a.proxy(function(a) {\n            a.namespace &&\n              this._initialized &&\n              (this._core.trigger('refresh', null, 'navigation'),\n              this.update(),\n              this.draw(),\n              this._core.trigger('refreshed', null, 'navigation'));\n          }, this),\n        }),\n        (this._core.options = a.extend({}, e.Defaults, this._core.options)),\n        this.$element.on(this._handlers);\n    };\n    (e.Defaults = {\n      nav: !1,\n      navText: [\n        '<span aria-label=\"Previous\">&#x2039;</span>',\n        '<span aria-label=\"Next\">&#x203a;</span>',\n      ],\n      navSpeed: !1,\n      navElement: 'button type=\"button\" role=\"presentation\"',\n      navContainer: !1,\n      navContainerClass: 'owl-nav',\n      navClass: ['owl-prev', 'owl-next'],\n      slideBy: 1,\n      dotClass: 'owl-dot',\n      dotsClass: 'owl-dots',\n      dots: !0,\n      dotsEach: !1,\n      dotsData: !1,\n      dotsSpeed: !1,\n      dotsContainer: !1,\n    }),\n      (e.prototype.initialize = function() {\n        var b,\n          c = this._core.settings;\n        (this._controls.$relative = (c.navContainer\n          ? a(c.navContainer)\n          : a('<div>')\n              .addClass(c.navContainerClass)\n              .appendTo(this.$element)\n        ).addClass('disabled')),\n          (this._controls.$previous = a('<' + c.navElement + '>')\n            .addClass(c.navClass[0])\n            .html(c.navText[0])\n            .prependTo(this._controls.$relative)\n            .on(\n              'click',\n              a.proxy(function(a) {\n                this.prev(c.navSpeed);\n              }, this),\n            )),\n          (this._controls.$next = a('<' + c.navElement + '>')\n            .addClass(c.navClass[1])\n            .html(c.navText[1])\n            .appendTo(this._controls.$relative)\n            .on(\n              'click',\n              a.proxy(function(a) {\n                this.next(c.navSpeed);\n              }, this),\n            )),\n          c.dotsData ||\n            (this._templates = [\n              a('<button role=\"button\">')\n                .addClass(c.dotClass)\n                .append(a('<span>'))\n                .prop('outerHTML'),\n            ]),\n          (this._controls.$absolute = (c.dotsContainer\n            ? a(c.dotsContainer)\n            : a('<div>')\n                .addClass(c.dotsClass)\n                .appendTo(this.$element)\n          ).addClass('disabled')),\n          this._controls.$absolute.on(\n            'click',\n            'button',\n            a.proxy(function(b) {\n              var d = a(b.target)\n                .parent()\n                .is(this._controls.$absolute)\n                ? a(b.target).index()\n                : a(b.target)\n                    .parent()\n                    .index();\n              b.preventDefault(), this.to(d, c.dotsSpeed);\n            }, this),\n          );\n        for (b in this._overrides) this._core[b] = a.proxy(this[b], this);\n      }),\n      (e.prototype.destroy = function() {\n        var a, b, c, d, e;\n        e = this._core.settings;\n        for (a in this._handlers) this.$element.off(a, this._handlers[a]);\n        for (b in this._controls)\n          '$relative' === b && e.navContainer\n            ? this._controls[b].html('')\n            : this._controls[b].remove();\n        for (d in this.overides) this._core[d] = this._overrides[d];\n        for (c in Object.getOwnPropertyNames(this))\n          'function' != typeof this[c] && (this[c] = null);\n      }),\n      (e.prototype.update = function() {\n        var a,\n          b,\n          c,\n          d = this._core.clones().length / 2,\n          e = d + this._core.items().length,\n          f = this._core.maximum(!0),\n          g = this._core.settings,\n          h = g.center || g.autoWidth || g.dotsData ? 1 : g.dotsEach || g.items;\n        if (\n          ('page' !== g.slideBy && (g.slideBy = Math.min(g.slideBy, g.items)),\n          g.dots || 'page' == g.slideBy)\n        )\n          for (this._pages = [], a = d, b = 0, c = 0; a < e; a++) {\n            if (b >= h || 0 === b) {\n              if (\n                (this._pages.push({ start: Math.min(f, a - d), end: a - d + h - 1 }),\n                Math.min(f, a - d) === f)\n              )\n                break;\n              (b = 0), ++c;\n            }\n            b += this._core.mergers(this._core.relative(a));\n          }\n      }),\n      (e.prototype.draw = function() {\n        var b,\n          c = this._core.settings,\n          d = this._core.items().length <= c.items,\n          e = this._core.relative(this._core.current()),\n          f = c.loop || c.rewind;\n        this._controls.$relative.toggleClass('disabled', !c.nav || d),\n          c.nav &&\n            (this._controls.$previous.toggleClass('disabled', !f && e <= this._core.minimum(!0)),\n            this._controls.$next.toggleClass('disabled', !f && e >= this._core.maximum(!0))),\n          this._controls.$absolute.toggleClass('disabled', !c.dots || d),\n          c.dots &&\n            ((b = this._pages.length - this._controls.$absolute.children().length),\n            c.dotsData && 0 !== b\n              ? this._controls.$absolute.html(this._templates.join(''))\n              : b > 0\n              ? this._controls.$absolute.append(new Array(b + 1).join(this._templates[0]))\n              : b < 0 &&\n                this._controls.$absolute\n                  .children()\n                  .slice(b)\n                  .remove(),\n            this._controls.$absolute.find('.active').removeClass('active'),\n            this._controls.$absolute\n              .children()\n              .eq(a.inArray(this.current(), this._pages))\n              .addClass('active'));\n      }),\n      (e.prototype.onTrigger = function(b) {\n        var c = this._core.settings;\n        b.page = {\n          index: a.inArray(this.current(), this._pages),\n          count: this._pages.length,\n          size: c && (c.center || c.autoWidth || c.dotsData ? 1 : c.dotsEach || c.items),\n        };\n      }),\n      (e.prototype.current = function() {\n        var b = this._core.relative(this._core.current());\n        return a\n          .grep(\n            this._pages,\n            a.proxy(function(a, c) {\n              return a.start <= b && a.end >= b;\n            }, this),\n          )\n          .pop();\n      }),\n      (e.prototype.getPosition = function(b) {\n        var c,\n          d,\n          e = this._core.settings;\n        return (\n          'page' == e.slideBy\n            ? ((c = a.inArray(this.current(), this._pages)),\n              (d = this._pages.length),\n              b ? ++c : --c,\n              (c = this._pages[((c % d) + d) % d].start))\n            : ((c = this._core.relative(this._core.current())),\n              (d = this._core.items().length),\n              b ? (c += e.slideBy) : (c -= e.slideBy)),\n          c\n        );\n      }),\n      (e.prototype.next = function(b) {\n        a.proxy(this._overrides.to, this._core)(this.getPosition(!0), b);\n      }),\n      (e.prototype.prev = function(b) {\n        a.proxy(this._overrides.to, this._core)(this.getPosition(!1), b);\n      }),\n      (e.prototype.to = function(b, c, d) {\n        var e;\n        !d && this._pages.length\n          ? ((e = this._pages.length),\n            a.proxy(this._overrides.to, this._core)(this._pages[((b % e) + e) % e].start, c))\n          : a.proxy(this._overrides.to, this._core)(b, c);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.Navigation = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    'use strict';\n    var e = function(c) {\n      (this._core = c),\n        (this._hashes = {}),\n        (this.$element = this._core.$element),\n        (this._handlers = {\n          'initialized.owl.carousel': a.proxy(function(c) {\n            c.namespace &&\n              'URLHash' === this._core.settings.startPosition &&\n              a(b).trigger('hashchange.owl.navigation');\n          }, this),\n          'prepared.owl.carousel': a.proxy(function(b) {\n            if (b.namespace) {\n              var c = a(b.content)\n                .find('[data-hash]')\n                .addBack('[data-hash]')\n                .attr('data-hash');\n              if (!c) return;\n              this._hashes[c] = b.content;\n            }\n          }, this),\n          'changed.owl.carousel': a.proxy(function(c) {\n            if (c.namespace && 'position' === c.property.name) {\n              var d = this._core.items(this._core.relative(this._core.current())),\n                e = a\n                  .map(this._hashes, function(a, b) {\n                    return a === d ? b : null;\n                  })\n                  .join();\n              if (!e || b.location.hash.slice(1) === e) return;\n              b.location.hash = e;\n            }\n          }, this),\n        }),\n        (this._core.options = a.extend({}, e.Defaults, this._core.options)),\n        this.$element.on(this._handlers),\n        a(b).on(\n          'hashchange.owl.navigation',\n          a.proxy(function(a) {\n            var c = b.location.hash.substring(1),\n              e = this._core.$stage.children(),\n              f = this._hashes[c] && e.index(this._hashes[c]);\n            f !== d && f !== this._core.current() && this._core.to(this._core.relative(f), !1, !0);\n          }, this),\n        );\n    };\n    (e.Defaults = { URLhashListener: !1 }),\n      (e.prototype.destroy = function() {\n        var c, d;\n        a(b).off('hashchange.owl.navigation');\n        for (c in this._handlers) this._core.$element.off(c, this._handlers[c]);\n        for (d in Object.getOwnPropertyNames(this))\n          'function' != typeof this[d] && (this[d] = null);\n      }),\n      (a.fn.owlCarousel.Constructor.Plugins.Hash = e);\n  })(window.Zepto || window.jQuery, window, document),\n  (function(a, b, c, d) {\n    function e(b, c) {\n      var e = !1,\n        f = b.charAt(0).toUpperCase() + b.slice(1);\n      return (\n        a.each((b + ' ' + h.join(f + ' ') + f).split(' '), function(a, b) {\n          if (g[b] !== d) return (e = !c || b), !1;\n        }),\n        e\n      );\n    }\n    function f(a) {\n      return e(a, !0);\n    }\n    var g = a('<support>').get(0).style,\n      h = 'Webkit Moz O ms'.split(' '),\n      i = {\n        transition: {\n          end: {\n            WebkitTransition: 'webkitTransitionEnd',\n            MozTransition: 'transitionend',\n            OTransition: 'oTransitionEnd',\n            transition: 'transitionend',\n          },\n        },\n        animation: {\n          end: {\n            WebkitAnimation: 'webkitAnimationEnd',\n            MozAnimation: 'animationend',\n            OAnimation: 'oAnimationEnd',\n            animation: 'animationend',\n          },\n        },\n      },\n      j = {\n        csstransforms: function() {\n          return !!e('transform');\n        },\n        csstransforms3d: function() {\n          return !!e('perspective');\n        },\n        csstransitions: function() {\n          return !!e('transition');\n        },\n        cssanimations: function() {\n          return !!e('animation');\n        },\n      };\n    j.csstransitions() &&\n      ((a.support.transition = new String(f('transition'))),\n      (a.support.transition.end = i.transition.end[a.support.transition])),\n      j.cssanimations() &&\n        ((a.support.animation = new String(f('animation'))),\n        (a.support.animation.end = i.animation.end[a.support.animation])),\n      j.csstransforms() &&\n        ((a.support.transform = new String(f('transform'))),\n        (a.support.transform3d = j.csstransforms3d()));\n  })(window.Zepto || window.jQuery, window, document);\n\n/*------------------------------------------------------------------*/\n/*\t13) Zepto Js\n/*------------------------------------------------------------------*/\n/* Zepto v1.2.0 - zepto event ajax form ie - zeptojs.com/license */\n!(function(t, e) {\n  'function' == typeof define && define.amd\n    ? define(function() {\n        return e(t);\n      })\n    : e(t);\n})(this, function(t) {\n  var e = (function() {\n    function $(t) {\n      return null == t ? String(t) : S[C.call(t)] || 'object';\n    }\n    function F(t) {\n      return 'function' == $(t);\n    }\n    function k(t) {\n      return null != t && t == t.window;\n    }\n    function M(t) {\n      return null != t && t.nodeType == t.DOCUMENT_NODE;\n    }\n    function R(t) {\n      return 'object' == $(t);\n    }\n    function Z(t) {\n      return R(t) && !k(t) && Object.getPrototypeOf(t) == Object.prototype;\n    }\n    function z(t) {\n      var e = !!t && 'length' in t && t.length,\n        n = r.type(t);\n      return (\n        'function' != n &&\n        !k(t) &&\n        ('array' == n || 0 === e || ('number' == typeof e && e > 0 && e - 1 in t))\n      );\n    }\n    function q(t) {\n      return a.call(t, function(t) {\n        return null != t;\n      });\n    }\n    function H(t) {\n      return t.length > 0 ? r.fn.concat.apply([], t) : t;\n    }\n    function I(t) {\n      return t\n        .replace(/::/g, '/')\n        .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')\n        .replace(/([a-z\\d])([A-Z])/g, '$1_$2')\n        .replace(/_/g, '-')\n        .toLowerCase();\n    }\n    function V(t) {\n      return t in l ? l[t] : (l[t] = new RegExp('(^|\\\\s)' + t + '(\\\\s|$)'));\n    }\n    function _(t, e) {\n      return 'number' != typeof e || h[I(t)] ? e : e + 'px';\n    }\n    function B(t) {\n      var e, n;\n      return (\n        c[t] ||\n          ((e = f.createElement(t)),\n          f.body.appendChild(e),\n          (n = getComputedStyle(e, '').getPropertyValue('display')),\n          e.parentNode.removeChild(e),\n          'none' == n && (n = 'block'),\n          (c[t] = n)),\n        c[t]\n      );\n    }\n    function U(t) {\n      return 'children' in t\n        ? u.call(t.children)\n        : r.map(t.childNodes, function(t) {\n            return 1 == t.nodeType ? t : void 0;\n          });\n    }\n    function X(t, e) {\n      var n,\n        r = t ? t.length : 0;\n      for (n = 0; r > n; n++) this[n] = t[n];\n      (this.length = r), (this.selector = e || '');\n    }\n    function J(t, r, i) {\n      for (n in r)\n        i && (Z(r[n]) || L(r[n]))\n          ? (Z(r[n]) && !Z(t[n]) && (t[n] = {}),\n            L(r[n]) && !L(t[n]) && (t[n] = []),\n            J(t[n], r[n], i))\n          : r[n] !== e && (t[n] = r[n]);\n    }\n    function W(t, e) {\n      return null == e ? r(t) : r(t).filter(e);\n    }\n    function Y(t, e, n, r) {\n      return F(e) ? e.call(t, n, r) : e;\n    }\n    function G(t, e, n) {\n      null == n ? t.removeAttribute(e) : t.setAttribute(e, n);\n    }\n    function K(t, n) {\n      var r = t.className || '',\n        i = r && r.baseVal !== e;\n      return n === e ? (i ? r.baseVal : r) : void (i ? (r.baseVal = n) : (t.className = n));\n    }\n    function Q(t) {\n      try {\n        return t\n          ? 'true' == t ||\n              ('false' == t\n                ? !1\n                : 'null' == t\n                ? null\n                : +t + '' == t\n                ? +t\n                : /^[\\[\\{]/.test(t)\n                ? r.parseJSON(t)\n                : t)\n          : t;\n      } catch (e) {\n        return t;\n      }\n    }\n    function tt(t, e) {\n      e(t);\n      for (var n = 0, r = t.childNodes.length; r > n; n++) tt(t.childNodes[n], e);\n    }\n    var e,\n      n,\n      r,\n      i,\n      O,\n      P,\n      o = [],\n      s = o.concat,\n      a = o.filter,\n      u = o.slice,\n      f = t.document,\n      c = {},\n      l = {},\n      h = {\n        'column-count': 1,\n        columns: 1,\n        'font-weight': 1,\n        'line-height': 1,\n        opacity: 1,\n        'z-index': 1,\n        zoom: 1,\n      },\n      p = /^\\s*<(\\w+|!)[^>]*>/,\n      d = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n      m = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n      g = /^(?:body|html)$/i,\n      v = /([A-Z])/g,\n      y = ['val', 'css', 'html', 'text', 'data', 'width', 'height', 'offset'],\n      x = ['after', 'prepend', 'before', 'append'],\n      b = f.createElement('table'),\n      E = f.createElement('tr'),\n      j = {\n        tr: f.createElement('tbody'),\n        tbody: b,\n        thead: b,\n        tfoot: b,\n        td: E,\n        th: E,\n        '*': f.createElement('div'),\n      },\n      w = /complete|loaded|interactive/,\n      T = /^[\\w-]*$/,\n      S = {},\n      C = S.toString,\n      N = {},\n      A = f.createElement('div'),\n      D = {\n        tabindex: 'tabIndex',\n        readonly: 'readOnly',\n        for: 'htmlFor',\n        class: 'className',\n        maxlength: 'maxLength',\n        cellspacing: 'cellSpacing',\n        cellpadding: 'cellPadding',\n        rowspan: 'rowSpan',\n        colspan: 'colSpan',\n        usemap: 'useMap',\n        frameborder: 'frameBorder',\n        contenteditable: 'contentEditable',\n      },\n      L =\n        Array.isArray ||\n        function(t) {\n          return t instanceof Array;\n        };\n    return (\n      (N.matches = function(t, e) {\n        if (!e || !t || 1 !== t.nodeType) return !1;\n        var n =\n          t.matches ||\n          t.webkitMatchesSelector ||\n          t.mozMatchesSelector ||\n          t.oMatchesSelector ||\n          t.matchesSelector;\n        if (n) return n.call(t, e);\n        var r,\n          i = t.parentNode,\n          o = !i;\n        return o && (i = A).appendChild(t), (r = ~N.qsa(i, e).indexOf(t)), o && A.removeChild(t), r;\n      }),\n      (O = function(t) {\n        return t.replace(/-+(.)?/g, function(t, e) {\n          return e ? e.toUpperCase() : '';\n        });\n      }),\n      (P = function(t) {\n        return a.call(t, function(e, n) {\n          return t.indexOf(e) == n;\n        });\n      }),\n      (N.fragment = function(t, n, i) {\n        var o, s, a;\n        return (\n          d.test(t) && (o = r(f.createElement(RegExp.$1))),\n          o ||\n            (t.replace && (t = t.replace(m, '<$1></$2>')),\n            n === e && (n = p.test(t) && RegExp.$1),\n            n in j || (n = '*'),\n            (a = j[n]),\n            (a.innerHTML = '' + t),\n            (o = r.each(u.call(a.childNodes), function() {\n              a.removeChild(this);\n            }))),\n          Z(i) &&\n            ((s = r(o)),\n            r.each(i, function(t, e) {\n              y.indexOf(t) > -1 ? s[t](e) : s.attr(t, e);\n            })),\n          o\n        );\n      }),\n      (N.Z = function(t, e) {\n        return new X(t, e);\n      }),\n      (N.isZ = function(t) {\n        return t instanceof N.Z;\n      }),\n      (N.init = function(t, n) {\n        var i;\n        if (!t) return N.Z();\n        if ('string' == typeof t)\n          if (((t = t.trim()), '<' == t[0] && p.test(t)))\n            (i = N.fragment(t, RegExp.$1, n)), (t = null);\n          else {\n            if (n !== e) return r(n).find(t);\n            i = N.qsa(f, t);\n          }\n        else {\n          if (F(t)) return r(f).ready(t);\n          if (N.isZ(t)) return t;\n          if (L(t)) i = q(t);\n          else if (R(t)) (i = [t]), (t = null);\n          else if (p.test(t)) (i = N.fragment(t.trim(), RegExp.$1, n)), (t = null);\n          else {\n            if (n !== e) return r(n).find(t);\n            i = N.qsa(f, t);\n          }\n        }\n        return N.Z(i, t);\n      }),\n      (r = function(t, e) {\n        return N.init(t, e);\n      }),\n      (r.extend = function(t) {\n        var e,\n          n = u.call(arguments, 1);\n        return (\n          'boolean' == typeof t && ((e = t), (t = n.shift())),\n          n.forEach(function(n) {\n            J(t, n, e);\n          }),\n          t\n        );\n      }),\n      (N.qsa = function(t, e) {\n        var n,\n          r = '#' == e[0],\n          i = !r && '.' == e[0],\n          o = r || i ? e.slice(1) : e,\n          s = T.test(o);\n        return t.getElementById && s && r\n          ? (n = t.getElementById(o))\n            ? [n]\n            : []\n          : 1 !== t.nodeType && 9 !== t.nodeType && 11 !== t.nodeType\n          ? []\n          : u.call(\n              s && !r && t.getElementsByClassName\n                ? i\n                  ? t.getElementsByClassName(o)\n                  : t.getElementsByTagName(e)\n                : t.querySelectorAll(e),\n            );\n      }),\n      (r.contains = f.documentElement.contains\n        ? function(t, e) {\n            return t !== e && t.contains(e);\n          }\n        : function(t, e) {\n            for (; e && (e = e.parentNode); ) if (e === t) return !0;\n            return !1;\n          }),\n      (r.type = $),\n      (r.isFunction = F),\n      (r.isWindow = k),\n      (r.isArray = L),\n      (r.isPlainObject = Z),\n      (r.isEmptyObject = function(t) {\n        var e;\n        for (e in t) return !1;\n        return !0;\n      }),\n      (r.isNumeric = function(t) {\n        var e = Number(t),\n          n = typeof t;\n        return (\n          (null != t &&\n            'boolean' != n &&\n            ('string' != n || t.length) &&\n            !isNaN(e) &&\n            isFinite(e)) ||\n          !1\n        );\n      }),\n      (r.inArray = function(t, e, n) {\n        return o.indexOf.call(e, t, n);\n      }),\n      (r.camelCase = O),\n      (r.trim = function(t) {\n        return null == t ? '' : String.prototype.trim.call(t);\n      }),\n      (r.uuid = 0),\n      (r.support = {}),\n      (r.expr = {}),\n      (r.noop = function() {}),\n      (r.map = function(t, e) {\n        var n,\n          i,\n          o,\n          r = [];\n        if (z(t)) for (i = 0; i < t.length; i++) (n = e(t[i], i)), null != n && r.push(n);\n        else for (o in t) (n = e(t[o], o)), null != n && r.push(n);\n        return H(r);\n      }),\n      (r.each = function(t, e) {\n        var n, r;\n        if (z(t)) {\n          for (n = 0; n < t.length; n++) if (e.call(t[n], n, t[n]) === !1) return t;\n        } else for (r in t) if (e.call(t[r], r, t[r]) === !1) return t;\n        return t;\n      }),\n      (r.grep = function(t, e) {\n        return a.call(t, e);\n      }),\n      t.JSON && (r.parseJSON = JSON.parse),\n      r.each('Boolean Number String Function Array Date RegExp Object Error'.split(' '), function(\n        t,\n        e,\n      ) {\n        S['[object ' + e + ']'] = e.toLowerCase();\n      }),\n      (r.fn = {\n        constructor: N.Z,\n        length: 0,\n        forEach: o.forEach,\n        reduce: o.reduce,\n        push: o.push,\n        sort: o.sort,\n        splice: o.splice,\n        indexOf: o.indexOf,\n        concat: function() {\n          var t,\n            e,\n            n = [];\n          for (t = 0; t < arguments.length; t++)\n            (e = arguments[t]), (n[t] = N.isZ(e) ? e.toArray() : e);\n          return s.apply(N.isZ(this) ? this.toArray() : this, n);\n        },\n        map: function(t) {\n          return r(\n            r.map(this, function(e, n) {\n              return t.call(e, n, e);\n            }),\n          );\n        },\n        slice: function() {\n          return r(u.apply(this, arguments));\n        },\n        ready: function(t) {\n          return (\n            w.test(f.readyState) && f.body\n              ? t(r)\n              : f.addEventListener(\n                  'DOMContentLoaded',\n                  function() {\n                    t(r);\n                  },\n                  !1,\n                ),\n            this\n          );\n        },\n        get: function(t) {\n          return t === e ? u.call(this) : this[t >= 0 ? t : t + this.length];\n        },\n        toArray: function() {\n          return this.get();\n        },\n        size: function() {\n          return this.length;\n        },\n        remove: function() {\n          return this.each(function() {\n            null != this.parentNode && this.parentNode.removeChild(this);\n          });\n        },\n        each: function(t) {\n          return (\n            o.every.call(this, function(e, n) {\n              return t.call(e, n, e) !== !1;\n            }),\n            this\n          );\n        },\n        filter: function(t) {\n          return F(t)\n            ? this.not(this.not(t))\n            : r(\n                a.call(this, function(e) {\n                  return N.matches(e, t);\n                }),\n              );\n        },\n        add: function(t, e) {\n          return r(P(this.concat(r(t, e))));\n        },\n        is: function(t) {\n          return this.length > 0 && N.matches(this[0], t);\n        },\n        not: function(t) {\n          var n = [];\n          if (F(t) && t.call !== e)\n            this.each(function(e) {\n              t.call(this, e) || n.push(this);\n            });\n          else {\n            var i = 'string' == typeof t ? this.filter(t) : z(t) && F(t.item) ? u.call(t) : r(t);\n            this.forEach(function(t) {\n              i.indexOf(t) < 0 && n.push(t);\n            });\n          }\n          return r(n);\n        },\n        has: function(t) {\n          return this.filter(function() {\n            return R(t)\n              ? r.contains(this, t)\n              : r(this)\n                  .find(t)\n                  .size();\n          });\n        },\n        eq: function(t) {\n          return -1 === t ? this.slice(t) : this.slice(t, +t + 1);\n        },\n        first: function() {\n          var t = this[0];\n          return t && !R(t) ? t : r(t);\n        },\n        last: function() {\n          var t = this[this.length - 1];\n          return t && !R(t) ? t : r(t);\n        },\n        find: function(t) {\n          var e,\n            n = this;\n          return (e = t\n            ? 'object' == typeof t\n              ? r(t).filter(function() {\n                  var t = this;\n                  return o.some.call(n, function(e) {\n                    return r.contains(e, t);\n                  });\n                })\n              : 1 == this.length\n              ? r(N.qsa(this[0], t))\n              : this.map(function() {\n                  return N.qsa(this, t);\n                })\n            : r());\n        },\n        closest: function(t, e) {\n          var n = [],\n            i = 'object' == typeof t && r(t);\n          return (\n            this.each(function(r, o) {\n              for (; o && !(i ? i.indexOf(o) >= 0 : N.matches(o, t)); )\n                o = o !== e && !M(o) && o.parentNode;\n              o && n.indexOf(o) < 0 && n.push(o);\n            }),\n            r(n)\n          );\n        },\n        parents: function(t) {\n          for (var e = [], n = this; n.length > 0; )\n            n = r.map(n, function(t) {\n              return (t = t.parentNode) && !M(t) && e.indexOf(t) < 0 ? (e.push(t), t) : void 0;\n            });\n          return W(e, t);\n        },\n        parent: function(t) {\n          return W(P(this.pluck('parentNode')), t);\n        },\n        children: function(t) {\n          return W(\n            this.map(function() {\n              return U(this);\n            }),\n            t,\n          );\n        },\n        contents: function() {\n          return this.map(function() {\n            return this.contentDocument || u.call(this.childNodes);\n          });\n        },\n        siblings: function(t) {\n          return W(\n            this.map(function(t, e) {\n              return a.call(U(e.parentNode), function(t) {\n                return t !== e;\n              });\n            }),\n            t,\n          );\n        },\n        empty: function() {\n          return this.each(function() {\n            this.innerHTML = '';\n          });\n        },\n        pluck: function(t) {\n          return r.map(this, function(e) {\n            return e[t];\n          });\n        },\n        show: function() {\n          return this.each(function() {\n            'none' == this.style.display && (this.style.display = ''),\n              'none' == getComputedStyle(this, '').getPropertyValue('display') &&\n                (this.style.display = B(this.nodeName));\n          });\n        },\n        replaceWith: function(t) {\n          return this.before(t).remove();\n        },\n        wrap: function(t) {\n          var e = F(t);\n          if (this[0] && !e)\n            var n = r(t).get(0),\n              i = n.parentNode || this.length > 1;\n          return this.each(function(o) {\n            r(this).wrapAll(e ? t.call(this, o) : i ? n.cloneNode(!0) : n);\n          });\n        },\n        wrapAll: function(t) {\n          if (this[0]) {\n            r(this[0]).before((t = r(t)));\n            for (var e; (e = t.children()).length; ) t = e.first();\n            r(t).append(this);\n          }\n          return this;\n        },\n        wrapInner: function(t) {\n          var e = F(t);\n          return this.each(function(n) {\n            var i = r(this),\n              o = i.contents(),\n              s = e ? t.call(this, n) : t;\n            o.length ? o.wrapAll(s) : i.append(s);\n          });\n        },\n        unwrap: function() {\n          return (\n            this.parent().each(function() {\n              r(this).replaceWith(r(this).children());\n            }),\n            this\n          );\n        },\n        clone: function() {\n          return this.map(function() {\n            return this.cloneNode(!0);\n          });\n        },\n        hide: function() {\n          return this.css('display', 'none');\n        },\n        toggle: function(t) {\n          return this.each(function() {\n            var n = r(this);\n            (t === e ? 'none' == n.css('display') : t) ? n.show() : n.hide();\n          });\n        },\n        prev: function(t) {\n          return r(this.pluck('previousElementSibling')).filter(t || '*');\n        },\n        next: function(t) {\n          return r(this.pluck('nextElementSibling')).filter(t || '*');\n        },\n        html: function(t) {\n          return 0 in arguments\n            ? this.each(function(e) {\n                var n = this.innerHTML;\n                r(this)\n                  .empty()\n                  .append(Y(this, t, e, n));\n              })\n            : 0 in this\n            ? this[0].innerHTML\n            : null;\n        },\n        text: function(t) {\n          return 0 in arguments\n            ? this.each(function(e) {\n                var n = Y(this, t, e, this.textContent);\n                this.textContent = null == n ? '' : '' + n;\n              })\n            : 0 in this\n            ? this.pluck('textContent').join('')\n            : null;\n        },\n        attr: function(t, r) {\n          var i;\n          return 'string' != typeof t || 1 in arguments\n            ? this.each(function(e) {\n                if (1 === this.nodeType)\n                  if (R(t)) for (n in t) G(this, n, t[n]);\n                  else G(this, t, Y(this, r, e, this.getAttribute(t)));\n              })\n            : 0 in this && 1 == this[0].nodeType && null != (i = this[0].getAttribute(t))\n            ? i\n            : e;\n        },\n        removeAttr: function(t) {\n          return this.each(function() {\n            1 === this.nodeType &&\n              t.split(' ').forEach(function(t) {\n                G(this, t);\n              }, this);\n          });\n        },\n        prop: function(t, e) {\n          return (\n            (t = D[t] || t),\n            1 in arguments\n              ? this.each(function(n) {\n                  this[t] = Y(this, e, n, this[t]);\n                })\n              : this[0] && this[0][t]\n          );\n        },\n        removeProp: function(t) {\n          return (\n            (t = D[t] || t),\n            this.each(function() {\n              delete this[t];\n            })\n          );\n        },\n        data: function(t, n) {\n          var r = 'data-' + t.replace(v, '-$1').toLowerCase(),\n            i = 1 in arguments ? this.attr(r, n) : this.attr(r);\n          return null !== i ? Q(i) : e;\n        },\n        val: function(t) {\n          return 0 in arguments\n            ? (null == t && (t = ''),\n              this.each(function(e) {\n                this.value = Y(this, t, e, this.value);\n              }))\n            : this[0] &&\n                (this[0].multiple\n                  ? r(this[0])\n                      .find('option')\n                      .filter(function() {\n                        return this.selected;\n                      })\n                      .pluck('value')\n                  : this[0].value);\n        },\n        offset: function(e) {\n          if (e)\n            return this.each(function(t) {\n              var n = r(this),\n                i = Y(this, e, t, n.offset()),\n                o = n.offsetParent().offset(),\n                s = { top: i.top - o.top, left: i.left - o.left };\n              'static' == n.css('position') && (s.position = 'relative'), n.css(s);\n            });\n          if (!this.length) return null;\n          if (f.documentElement !== this[0] && !r.contains(f.documentElement, this[0]))\n            return { top: 0, left: 0 };\n          var n = this[0].getBoundingClientRect();\n          return {\n            left: n.left + t.pageXOffset,\n            top: n.top + t.pageYOffset,\n            width: Math.round(n.width),\n            height: Math.round(n.height),\n          };\n        },\n        css: function(t, e) {\n          if (arguments.length < 2) {\n            var i = this[0];\n            if ('string' == typeof t) {\n              if (!i) return;\n              return i.style[O(t)] || getComputedStyle(i, '').getPropertyValue(t);\n            }\n            if (L(t)) {\n              if (!i) return;\n              var o = {},\n                s = getComputedStyle(i, '');\n              return (\n                r.each(t, function(t, e) {\n                  o[e] = i.style[O(e)] || s.getPropertyValue(e);\n                }),\n                o\n              );\n            }\n          }\n          var a = '';\n          if ('string' == $(t))\n            e || 0 === e\n              ? (a = I(t) + ':' + _(t, e))\n              : this.each(function() {\n                  this.style.removeProperty(I(t));\n                });\n          else\n            for (n in t)\n              t[n] || 0 === t[n]\n                ? (a += I(n) + ':' + _(n, t[n]) + ';')\n                : this.each(function() {\n                    this.style.removeProperty(I(n));\n                  });\n          return this.each(function() {\n            this.style.cssText += ';' + a;\n          });\n        },\n        index: function(t) {\n          return t\n            ? this.indexOf(r(t)[0])\n            : this.parent()\n                .children()\n                .indexOf(this[0]);\n        },\n        hasClass: function(t) {\n          return t\n            ? o.some.call(\n                this,\n                function(t) {\n                  return this.test(K(t));\n                },\n                V(t),\n              )\n            : !1;\n        },\n        addClass: function(t) {\n          return t\n            ? this.each(function(e) {\n                if ('className' in this) {\n                  i = [];\n                  var n = K(this),\n                    o = Y(this, t, e, n);\n                  o.split(/\\s+/g).forEach(function(t) {\n                    r(this).hasClass(t) || i.push(t);\n                  }, this),\n                    i.length && K(this, n + (n ? ' ' : '') + i.join(' '));\n                }\n              })\n            : this;\n        },\n        removeClass: function(t) {\n          return this.each(function(n) {\n            if ('className' in this) {\n              if (t === e) return K(this, '');\n              (i = K(this)),\n                Y(this, t, n, i)\n                  .split(/\\s+/g)\n                  .forEach(function(t) {\n                    i = i.replace(V(t), ' ');\n                  }),\n                K(this, i.trim());\n            }\n          });\n        },\n        toggleClass: function(t, n) {\n          return t\n            ? this.each(function(i) {\n                var o = r(this),\n                  s = Y(this, t, i, K(this));\n                s.split(/\\s+/g).forEach(function(t) {\n                  (n === e ? !o.hasClass(t) : n) ? o.addClass(t) : o.removeClass(t);\n                });\n              })\n            : this;\n        },\n        scrollTop: function(t) {\n          if (this.length) {\n            var n = 'scrollTop' in this[0];\n            return t === e\n              ? n\n                ? this[0].scrollTop\n                : this[0].pageYOffset\n              : this.each(\n                  n\n                    ? function() {\n                        this.scrollTop = t;\n                      }\n                    : function() {\n                        this.scrollTo(this.scrollX, t);\n                      },\n                );\n          }\n        },\n        scrollLeft: function(t) {\n          if (this.length) {\n            var n = 'scrollLeft' in this[0];\n            return t === e\n              ? n\n                ? this[0].scrollLeft\n                : this[0].pageXOffset\n              : this.each(\n                  n\n                    ? function() {\n                        this.scrollLeft = t;\n                      }\n                    : function() {\n                        this.scrollTo(t, this.scrollY);\n                      },\n                );\n          }\n        },\n        position: function() {\n          if (this.length) {\n            var t = this[0],\n              e = this.offsetParent(),\n              n = this.offset(),\n              i = g.test(e[0].nodeName) ? { top: 0, left: 0 } : e.offset();\n            return (\n              (n.top -= parseFloat(r(t).css('margin-top')) || 0),\n              (n.left -= parseFloat(r(t).css('margin-left')) || 0),\n              (i.top += parseFloat(r(e[0]).css('border-top-width')) || 0),\n              (i.left += parseFloat(r(e[0]).css('border-left-width')) || 0),\n              { top: n.top - i.top, left: n.left - i.left }\n            );\n          }\n        },\n        offsetParent: function() {\n          return this.map(function() {\n            for (\n              var t = this.offsetParent || f.body;\n              t && !g.test(t.nodeName) && 'static' == r(t).css('position');\n\n            )\n              t = t.offsetParent;\n            return t;\n          });\n        },\n      }),\n      (r.fn.detach = r.fn.remove),\n      ['width', 'height'].forEach(function(t) {\n        var n = t.replace(/./, function(t) {\n          return t[0].toUpperCase();\n        });\n        r.fn[t] = function(i) {\n          var o,\n            s = this[0];\n          return i === e\n            ? k(s)\n              ? s['inner' + n]\n              : M(s)\n              ? s.documentElement['scroll' + n]\n              : (o = this.offset()) && o[t]\n            : this.each(function(e) {\n                (s = r(this)), s.css(t, Y(this, i, e, s[t]()));\n              });\n        };\n      }),\n      x.forEach(function(n, i) {\n        var o = i % 2;\n        (r.fn[n] = function() {\n          var n,\n            a,\n            s = r.map(arguments, function(t) {\n              var i = [];\n              return (\n                (n = $(t)),\n                'array' == n\n                  ? (t.forEach(function(t) {\n                      return t.nodeType !== e\n                        ? i.push(t)\n                        : r.zepto.isZ(t)\n                        ? (i = i.concat(t.get()))\n                        : void (i = i.concat(N.fragment(t)));\n                    }),\n                    i)\n                  : 'object' == n || null == t\n                  ? t\n                  : N.fragment(t)\n              );\n            }),\n            u = this.length > 1;\n          return s.length < 1\n            ? this\n            : this.each(function(e, n) {\n                (a = o ? n : n.parentNode),\n                  (n = 0 == i ? n.nextSibling : 1 == i ? n.firstChild : 2 == i ? n : null);\n                var c = r.contains(f.documentElement, a);\n                s.forEach(function(e) {\n                  if (u) e = e.cloneNode(!0);\n                  else if (!a) return r(e).remove();\n                  a.insertBefore(e, n),\n                    c &&\n                      tt(e, function(e) {\n                        if (\n                          !(\n                            null == e.nodeName ||\n                            'SCRIPT' !== e.nodeName.toUpperCase() ||\n                            (e.type && 'text/javascript' !== e.type) ||\n                            e.src\n                          )\n                        ) {\n                          var n = e.ownerDocument ? e.ownerDocument.defaultView : t;\n                          n.eval.call(n, e.innerHTML);\n                        }\n                      });\n                });\n              });\n        }),\n          (r.fn[o ? n + 'To' : 'insert' + (i ? 'Before' : 'After')] = function(t) {\n            return r(t)[n](this), this;\n          });\n      }),\n      (N.Z.prototype = X.prototype = r.fn),\n      (N.uniq = P),\n      (N.deserializeValue = Q),\n      (r.zepto = N),\n      r\n    );\n  })();\n  return (\n    (t.Zepto = e),\n    void 0 === t.$ && (t.$ = e),\n    (function(e) {\n      function h(t) {\n        return t._zid || (t._zid = n++);\n      }\n      function p(t, e, n, r) {\n        if (((e = d(e)), e.ns)) var i = m(e.ns);\n        return (a[h(t)] || []).filter(function(t) {\n          return (\n            t &&\n            (!e.e || t.e == e.e) &&\n            (!e.ns || i.test(t.ns)) &&\n            (!n || h(t.fn) === h(n)) &&\n            (!r || t.sel == r)\n          );\n        });\n      }\n      function d(t) {\n        var e = ('' + t).split('.');\n        return {\n          e: e[0],\n          ns: e\n            .slice(1)\n            .sort()\n            .join(' '),\n        };\n      }\n      function m(t) {\n        return new RegExp('(?:^| )' + t.replace(' ', ' .* ?') + '(?: |$)');\n      }\n      function g(t, e) {\n        return (t.del && !f && t.e in c) || !!e;\n      }\n      function v(t) {\n        return l[t] || (f && c[t]) || t;\n      }\n      function y(t, n, i, o, s, u, f) {\n        var c = h(t),\n          p = a[c] || (a[c] = []);\n        n.split(/\\s/).forEach(function(n) {\n          if ('ready' == n) return e(document).ready(i);\n          var a = d(n);\n          (a.fn = i),\n            (a.sel = s),\n            a.e in l &&\n              (i = function(t) {\n                var n = t.relatedTarget;\n                return !n || (n !== this && !e.contains(this, n))\n                  ? a.fn.apply(this, arguments)\n                  : void 0;\n              }),\n            (a.del = u);\n          var c = u || i;\n          (a.proxy = function(e) {\n            if (((e = T(e)), !e.isImmediatePropagationStopped())) {\n              e.data = o;\n              var n = c.apply(t, e._args == r ? [e] : [e].concat(e._args));\n              return n === !1 && (e.preventDefault(), e.stopPropagation()), n;\n            }\n          }),\n            (a.i = p.length),\n            p.push(a),\n            'addEventListener' in t && t.addEventListener(v(a.e), a.proxy, g(a, f));\n        });\n      }\n      function x(t, e, n, r, i) {\n        var o = h(t);\n        (e || '').split(/\\s/).forEach(function(e) {\n          p(t, e, n, r).forEach(function(e) {\n            delete a[o][e.i],\n              'removeEventListener' in t && t.removeEventListener(v(e.e), e.proxy, g(e, i));\n          });\n        });\n      }\n      function T(t, n) {\n        return (\n          (n || !t.isDefaultPrevented) &&\n            (n || (n = t),\n            e.each(w, function(e, r) {\n              var i = n[e];\n              (t[e] = function() {\n                return (this[r] = b), i && i.apply(n, arguments);\n              }),\n                (t[r] = E);\n            }),\n            t.timeStamp || (t.timeStamp = Date.now()),\n            (n.defaultPrevented !== r\n              ? n.defaultPrevented\n              : 'returnValue' in n\n              ? n.returnValue === !1\n              : n.getPreventDefault && n.getPreventDefault()) && (t.isDefaultPrevented = b)),\n          t\n        );\n      }\n      function S(t) {\n        var e,\n          n = { originalEvent: t };\n        for (e in t) j.test(e) || t[e] === r || (n[e] = t[e]);\n        return T(n, t);\n      }\n      var r,\n        n = 1,\n        i = Array.prototype.slice,\n        o = e.isFunction,\n        s = function(t) {\n          return 'string' == typeof t;\n        },\n        a = {},\n        u = {},\n        f = 'onfocusin' in t,\n        c = { focus: 'focusin', blur: 'focusout' },\n        l = { mouseenter: 'mouseover', mouseleave: 'mouseout' };\n      (u.click = u.mousedown = u.mouseup = u.mousemove = 'MouseEvents'),\n        (e.event = { add: y, remove: x }),\n        (e.proxy = function(t, n) {\n          var r = 2 in arguments && i.call(arguments, 2);\n          if (o(t)) {\n            var a = function() {\n              return t.apply(n, r ? r.concat(i.call(arguments)) : arguments);\n            };\n            return (a._zid = h(t)), a;\n          }\n          if (s(n)) return r ? (r.unshift(t[n], t), e.proxy.apply(null, r)) : e.proxy(t[n], t);\n          throw new TypeError('expected function');\n        }),\n        (e.fn.bind = function(t, e, n) {\n          return this.on(t, e, n);\n        }),\n        (e.fn.unbind = function(t, e) {\n          return this.off(t, e);\n        }),\n        (e.fn.one = function(t, e, n, r) {\n          return this.on(t, e, n, r, 1);\n        });\n      var b = function() {\n          return !0;\n        },\n        E = function() {\n          return !1;\n        },\n        j = /^([A-Z]|returnValue$|layer[XY]$|webkitMovement[XY]$)/,\n        w = {\n          preventDefault: 'isDefaultPrevented',\n          stopImmediatePropagation: 'isImmediatePropagationStopped',\n          stopPropagation: 'isPropagationStopped',\n        };\n      (e.fn.delegate = function(t, e, n) {\n        return this.on(e, t, n);\n      }),\n        (e.fn.undelegate = function(t, e, n) {\n          return this.off(e, t, n);\n        }),\n        (e.fn.live = function(t, n) {\n          return e(document.body).delegate(this.selector, t, n), this;\n        }),\n        (e.fn.die = function(t, n) {\n          return e(document.body).undelegate(this.selector, t, n), this;\n        }),\n        (e.fn.on = function(t, n, a, u, f) {\n          var c,\n            l,\n            h = this;\n          return t && !s(t)\n            ? (e.each(t, function(t, e) {\n                h.on(t, n, a, e, f);\n              }),\n              h)\n            : (s(n) || o(u) || u === !1 || ((u = a), (a = n), (n = r)),\n              (u === r || a === !1) && ((u = a), (a = r)),\n              u === !1 && (u = E),\n              h.each(function(r, o) {\n                f &&\n                  (c = function(t) {\n                    return x(o, t.type, u), u.apply(this, arguments);\n                  }),\n                  n &&\n                    (l = function(t) {\n                      var r,\n                        s = e(t.target)\n                          .closest(n, o)\n                          .get(0);\n                      return s && s !== o\n                        ? ((r = e.extend(S(t), { currentTarget: s, liveFired: o })),\n                          (c || u).apply(s, [r].concat(i.call(arguments, 1))))\n                        : void 0;\n                    }),\n                  y(o, t, u, a, n, l || c);\n              }));\n        }),\n        (e.fn.off = function(t, n, i) {\n          var a = this;\n          return t && !s(t)\n            ? (e.each(t, function(t, e) {\n                a.off(t, n, e);\n              }),\n              a)\n            : (s(n) || o(i) || i === !1 || ((i = n), (n = r)),\n              i === !1 && (i = E),\n              a.each(function() {\n                x(this, t, i, n);\n              }));\n        }),\n        (e.fn.trigger = function(t, n) {\n          return (\n            (t = s(t) || e.isPlainObject(t) ? e.Event(t) : T(t)),\n            (t._args = n),\n            this.each(function() {\n              t.type in c && 'function' == typeof this[t.type]\n                ? this[t.type]()\n                : 'dispatchEvent' in this\n                ? this.dispatchEvent(t)\n                : e(this).triggerHandler(t, n);\n            })\n          );\n        }),\n        (e.fn.triggerHandler = function(t, n) {\n          var r, i;\n          return (\n            this.each(function(o, a) {\n              (r = S(s(t) ? e.Event(t) : t)),\n                (r._args = n),\n                (r.target = a),\n                e.each(p(a, t.type || t), function(t, e) {\n                  return (i = e.proxy(r)), r.isImmediatePropagationStopped() ? !1 : void 0;\n                });\n            }),\n            i\n          );\n        }),\n        'focusin focusout focus blur load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select keydown keypress keyup error'\n          .split(' ')\n          .forEach(function(t) {\n            e.fn[t] = function(e) {\n              return 0 in arguments ? this.bind(t, e) : this.trigger(t);\n            };\n          }),\n        (e.Event = function(t, e) {\n          s(t) || ((e = t), (t = e.type));\n          var n = document.createEvent(u[t] || 'Events'),\n            r = !0;\n          if (e) for (var i in e) 'bubbles' == i ? (r = !!e[i]) : (n[i] = e[i]);\n          return n.initEvent(t, r, !0), T(n);\n        });\n    })(e),\n    (function(e) {\n      function p(t, n, r) {\n        var i = e.Event(n);\n        return e(t).trigger(i, r), !i.isDefaultPrevented();\n      }\n      function d(t, e, n, i) {\n        return t.global ? p(e || r, n, i) : void 0;\n      }\n      function m(t) {\n        t.global && 0 === e.active++ && d(t, null, 'ajaxStart');\n      }\n      function g(t) {\n        t.global && !--e.active && d(t, null, 'ajaxStop');\n      }\n      function v(t, e) {\n        var n = e.context;\n        return e.beforeSend.call(n, t, e) === !1 || d(e, n, 'ajaxBeforeSend', [t, e]) === !1\n          ? !1\n          : void d(e, n, 'ajaxSend', [t, e]);\n      }\n      function y(t, e, n, r) {\n        var i = n.context,\n          o = 'success';\n        n.success.call(i, t, o, e),\n          r && r.resolveWith(i, [t, o, e]),\n          d(n, i, 'ajaxSuccess', [e, n, t]),\n          b(o, e, n);\n      }\n      function x(t, e, n, r, i) {\n        var o = r.context;\n        r.error.call(o, n, e, t),\n          i && i.rejectWith(o, [n, e, t]),\n          d(r, o, 'ajaxError', [n, r, t || e]),\n          b(e, n, r);\n      }\n      function b(t, e, n) {\n        var r = n.context;\n        n.complete.call(r, e, t), d(n, r, 'ajaxComplete', [e, n]), g(n);\n      }\n      function E(t, e, n) {\n        if (n.dataFilter == j) return t;\n        var r = n.context;\n        return n.dataFilter.call(r, t, e);\n      }\n      function j() {}\n      function w(t) {\n        return (\n          t && (t = t.split(';', 2)[0]),\n          (t && (t == c ? 'html' : t == f ? 'json' : a.test(t) ? 'script' : u.test(t) && 'xml')) ||\n            'text'\n        );\n      }\n      function T(t, e) {\n        return '' == e ? t : (t + '&' + e).replace(/[&?]{1,2}/, '?');\n      }\n      function S(t) {\n        t.processData &&\n          t.data &&\n          'string' != e.type(t.data) &&\n          (t.data = e.param(t.data, t.traditional)),\n          !t.data ||\n            (t.type && 'GET' != t.type.toUpperCase() && 'jsonp' != t.dataType) ||\n            ((t.url = T(t.url, t.data)), (t.data = void 0));\n      }\n      function C(t, n, r, i) {\n        return (\n          e.isFunction(n) && ((i = r), (r = n), (n = void 0)),\n          e.isFunction(r) || ((i = r), (r = void 0)),\n          { url: t, data: n, success: r, dataType: i }\n        );\n      }\n      function O(t, n, r, i) {\n        var o,\n          s = e.isArray(n),\n          a = e.isPlainObject(n);\n        e.each(n, function(n, u) {\n          (o = e.type(u)),\n            i && (n = r ? i : i + '[' + (a || 'object' == o || 'array' == o ? n : '') + ']'),\n            !i && s\n              ? t.add(u.name, u.value)\n              : 'array' == o || (!r && 'object' == o)\n              ? O(t, u, r, n)\n              : t.add(n, u);\n        });\n      }\n      var i,\n        o,\n        n = +new Date(),\n        r = t.document,\n        s = /<script\\b[^<]*(?:(?!<\\/script>)<[^<]*)*<\\/script>/gi,\n        a = /^(?:text|application)\\/javascript/i,\n        u = /^(?:text|application)\\/xml/i,\n        f = 'application/json',\n        c = 'text/html',\n        l = /^\\s*$/,\n        h = r.createElement('a');\n      (h.href = t.location.href),\n        (e.active = 0),\n        (e.ajaxJSONP = function(i, o) {\n          if (!('type' in i)) return e.ajax(i);\n          var c,\n            p,\n            s = i.jsonpCallback,\n            a = (e.isFunction(s) ? s() : s) || 'Zepto' + n++,\n            u = r.createElement('script'),\n            f = t[a],\n            l = function(t) {\n              e(u).triggerHandler('error', t || 'abort');\n            },\n            h = { abort: l };\n          return (\n            o && o.promise(h),\n            e(u).on('load error', function(n, r) {\n              clearTimeout(p),\n                e(u)\n                  .off()\n                  .remove(),\n                'error' != n.type && c ? y(c[0], h, i, o) : x(null, r || 'error', h, i, o),\n                (t[a] = f),\n                c && e.isFunction(f) && f(c[0]),\n                (f = c = void 0);\n            }),\n            v(h, i) === !1\n              ? (l('abort'), h)\n              : ((t[a] = function() {\n                  c = arguments;\n                }),\n                (u.src = i.url.replace(/\\?(.+)=\\?/, '?$1=' + a)),\n                r.head.appendChild(u),\n                i.timeout > 0 &&\n                  (p = setTimeout(function() {\n                    l('timeout');\n                  }, i.timeout)),\n                h)\n          );\n        }),\n        (e.ajaxSettings = {\n          type: 'GET',\n          beforeSend: j,\n          success: j,\n          error: j,\n          complete: j,\n          context: null,\n          global: !0,\n          xhr: function() {\n            return new t.XMLHttpRequest();\n          },\n          accepts: {\n            script: 'text/javascript, application/javascript, application/x-javascript',\n            json: f,\n            xml: 'application/xml, text/xml',\n            html: c,\n            text: 'text/plain',\n          },\n          crossDomain: !1,\n          timeout: 0,\n          processData: !0,\n          cache: !0,\n          dataFilter: j,\n        }),\n        (e.ajax = function(n) {\n          var u,\n            f,\n            s = e.extend({}, n || {}),\n            a = e.Deferred && e.Deferred();\n          for (i in e.ajaxSettings) void 0 === s[i] && (s[i] = e.ajaxSettings[i]);\n          m(s),\n            s.crossDomain ||\n              ((u = r.createElement('a')),\n              (u.href = s.url),\n              (u.href = u.href),\n              (s.crossDomain = h.protocol + '//' + h.host != u.protocol + '//' + u.host)),\n            s.url || (s.url = t.location.toString()),\n            (f = s.url.indexOf('#')) > -1 && (s.url = s.url.slice(0, f)),\n            S(s);\n          var c = s.dataType,\n            p = /\\?.+=\\?/.test(s.url);\n          if (\n            (p && (c = 'jsonp'),\n            (s.cache !== !1 && ((n && n.cache === !0) || ('script' != c && 'jsonp' != c))) ||\n              (s.url = T(s.url, '_=' + Date.now())),\n            'jsonp' == c)\n          )\n            return (\n              p ||\n                (s.url = T(s.url, s.jsonp ? s.jsonp + '=?' : s.jsonp === !1 ? '' : 'callback=?')),\n              e.ajaxJSONP(s, a)\n            );\n          var P,\n            d = s.accepts[c],\n            g = {},\n            b = function(t, e) {\n              g[t.toLowerCase()] = [t, e];\n            },\n            C = /^([\\w-]+:)\\/\\//.test(s.url) ? RegExp.$1 : t.location.protocol,\n            N = s.xhr(),\n            O = N.setRequestHeader;\n          if (\n            (a && a.promise(N),\n            s.crossDomain || b('X-Requested-With', 'XMLHttpRequest'),\n            b('Accept', d || '*/*'),\n            (d = s.mimeType || d) &&\n              (d.indexOf(',') > -1 && (d = d.split(',', 2)[0]),\n              N.overrideMimeType && N.overrideMimeType(d)),\n            (s.contentType || (s.contentType !== !1 && s.data && 'GET' != s.type.toUpperCase())) &&\n              b('Content-Type', s.contentType || 'application/x-www-form-urlencoded'),\n            s.headers)\n          )\n            for (o in s.headers) b(o, s.headers[o]);\n          if (\n            ((N.setRequestHeader = b),\n            (N.onreadystatechange = function() {\n              if (4 == N.readyState) {\n                (N.onreadystatechange = j), clearTimeout(P);\n                var t,\n                  n = !1;\n                if (\n                  (N.status >= 200 && N.status < 300) ||\n                  304 == N.status ||\n                  (0 == N.status && 'file:' == C)\n                ) {\n                  if (\n                    ((c = c || w(s.mimeType || N.getResponseHeader('content-type'))),\n                    'arraybuffer' == N.responseType || 'blob' == N.responseType)\n                  )\n                    t = N.response;\n                  else {\n                    t = N.responseText;\n                    try {\n                      (t = E(t, c, s)),\n                        'script' == c\n                          ? (1, eval)(t)\n                          : 'xml' == c\n                          ? (t = N.responseXML)\n                          : 'json' == c && (t = l.test(t) ? null : e.parseJSON(t));\n                    } catch (r) {\n                      n = r;\n                    }\n                    if (n) return x(n, 'parsererror', N, s, a);\n                  }\n                  y(t, N, s, a);\n                } else x(N.statusText || null, N.status ? 'error' : 'abort', N, s, a);\n              }\n            }),\n            v(N, s) === !1)\n          )\n            return N.abort(), x(null, 'abort', N, s, a), N;\n          var A = 'async' in s ? s.async : !0;\n          if ((N.open(s.type, s.url, A, s.username, s.password), s.xhrFields))\n            for (o in s.xhrFields) N[o] = s.xhrFields[o];\n          for (o in g) O.apply(N, g[o]);\n          return (\n            s.timeout > 0 &&\n              (P = setTimeout(function() {\n                (N.onreadystatechange = j), N.abort(), x(null, 'timeout', N, s, a);\n              }, s.timeout)),\n            N.send(s.data ? s.data : null),\n            N\n          );\n        }),\n        (e.get = function() {\n          return e.ajax(C.apply(null, arguments));\n        }),\n        (e.post = function() {\n          var t = C.apply(null, arguments);\n          return (t.type = 'POST'), e.ajax(t);\n        }),\n        (e.getJSON = function() {\n          var t = C.apply(null, arguments);\n          return (t.dataType = 'json'), e.ajax(t);\n        }),\n        (e.fn.load = function(t, n, r) {\n          if (!this.length) return this;\n          var a,\n            i = this,\n            o = t.split(/\\s/),\n            u = C(t, n, r),\n            f = u.success;\n          return (\n            o.length > 1 && ((u.url = o[0]), (a = o[1])),\n            (u.success = function(t) {\n              i.html(\n                a\n                  ? e('<div>')\n                      .html(t.replace(s, ''))\n                      .find(a)\n                  : t,\n              ),\n                f && f.apply(i, arguments);\n            }),\n            e.ajax(u),\n            this\n          );\n        });\n      var N = encodeURIComponent;\n      e.param = function(t, n) {\n        var r = [];\n        return (\n          (r.add = function(t, n) {\n            e.isFunction(n) && (n = n()), null == n && (n = ''), this.push(N(t) + '=' + N(n));\n          }),\n          O(r, t, n),\n          r.join('&').replace(/%20/g, '+')\n        );\n      };\n    })(e),\n    (function(t) {\n      (t.fn.serializeArray = function() {\n        var e,\n          n,\n          r = [],\n          i = function(t) {\n            return t.forEach ? t.forEach(i) : void r.push({ name: e, value: t });\n          };\n        return (\n          this[0] &&\n            t.each(this[0].elements, function(r, o) {\n              (n = o.type),\n                (e = o.name),\n                e &&\n                  'fieldset' != o.nodeName.toLowerCase() &&\n                  !o.disabled &&\n                  'submit' != n &&\n                  'reset' != n &&\n                  'button' != n &&\n                  'file' != n &&\n                  (('radio' != n && 'checkbox' != n) || o.checked) &&\n                  i(t(o).val());\n            }),\n          r\n        );\n      }),\n        (t.fn.serialize = function() {\n          var t = [];\n          return (\n            this.serializeArray().forEach(function(e) {\n              t.push(encodeURIComponent(e.name) + '=' + encodeURIComponent(e.value));\n            }),\n            t.join('&')\n          );\n        }),\n        (t.fn.submit = function(e) {\n          if (0 in arguments) this.bind('submit', e);\n          else if (this.length) {\n            var n = t.Event('submit');\n            this.eq(0).trigger(n), n.isDefaultPrevented() || this.get(0).submit();\n          }\n          return this;\n        });\n    })(e),\n    (function() {\n      try {\n        getComputedStyle(void 0);\n      } catch (e) {\n        var n = getComputedStyle;\n        t.getComputedStyle = function(t, e) {\n          try {\n            return n(t, e);\n          } catch (r) {\n            return null;\n          }\n        };\n      }\n    })(),\n    e\n  );\n});\n\n/*------------------------------------------------------------------*/\n/*\t14) Vegas Slider\n/*------------------------------------------------------------------*/\n/*!-----------------------------------------------------------------------------\n * Vegas - Fullscreen Backgrounds and Slideshows.\n * v2.4.4 - built 2018-10-30\n * Licensed under the MIT License.\n * http://vegas.jaysalvat.com/\n * ----------------------------------------------------------------------------\n * Copyright (C) 2010-2018 Jay Salvat\n * http://jaysalvat.com/\n * --------------------------------------------------------------------------*/\n!(function(b) {\n  'use strict';\n  var e = {\n      slide: 0,\n      delay: 5e3,\n      loop: !0,\n      preload: !1,\n      preloadImage: !1,\n      preloadVideo: !1,\n      timer: !0,\n      overlay: !1,\n      autoplay: !0,\n      shuffle: !1,\n      cover: !0,\n      color: null,\n      align: 'center',\n      valign: 'center',\n      firstTransition: null,\n      firstTransitionDuration: null,\n      transition: 'fade',\n      transitionDuration: 1e3,\n      transitionRegister: [],\n      animation: null,\n      animationDuration: 'auto',\n      animationRegister: [],\n      slidesToKeep: 1,\n      init: function() {},\n      play: function() {},\n      pause: function() {},\n      walk: function() {},\n      slides: [],\n    },\n    n = {},\n    t = function(t, s) {\n      (this.elmt = t),\n        (this.settings = b.extend({}, e, b.vegas.defaults, s)),\n        (this.slide = this.settings.slide),\n        (this.total = this.settings.slides.length),\n        (this.noshow = this.total < 2),\n        (this.paused = !this.settings.autoplay || this.noshow),\n        (this.ended = !1),\n        (this.$elmt = b(t)),\n        (this.$timer = null),\n        (this.$overlay = null),\n        (this.$slide = null),\n        (this.timeout = null),\n        (this.first = !0),\n        (this.transitions = [\n          'fade',\n          'fade2',\n          'blur',\n          'blur2',\n          'flash',\n          'flash2',\n          'negative',\n          'negative2',\n          'burn',\n          'burn2',\n          'slideLeft',\n          'slideLeft2',\n          'slideRight',\n          'slideRight2',\n          'slideUp',\n          'slideUp2',\n          'slideDown',\n          'slideDown2',\n          'zoomIn',\n          'zoomIn2',\n          'zoomOut',\n          'zoomOut2',\n          'swirlLeft',\n          'swirlLeft2',\n          'swirlRight',\n          'swirlRight2',\n        ]),\n        (this.animations = [\n          'kenburns',\n          'kenburnsLeft',\n          'kenburnsRight',\n          'kenburnsUp',\n          'kenburnsUpLeft',\n          'kenburnsUpRight',\n          'kenburnsDown',\n          'kenburnsDownLeft',\n          'kenburnsDownRight',\n        ]),\n        this.settings.transitionRegister instanceof Array == !1 &&\n          (this.settings.transitionRegister = [this.settings.transitionRegister]),\n        this.settings.animationRegister instanceof Array == !1 &&\n          (this.settings.animationRegister = [this.settings.animationRegister]),\n        (this.transitions = this.transitions.concat(this.settings.transitionRegister)),\n        (this.animations = this.animations.concat(this.settings.animationRegister)),\n        (this.support = {\n          objectFit: 'objectFit' in document.body.style,\n          transition:\n            'transition' in document.body.style || 'WebkitTransition' in document.body.style,\n          video: b.vegas.isVideoCompatible(),\n        }),\n        !0 === this.settings.shuffle && this.shuffle(),\n        this._init();\n    };\n  (t.prototype = {\n    _init: function() {\n      var t,\n        s,\n        i,\n        e = 'BODY' === this.elmt.tagName,\n        n = this.settings.timer,\n        o = this.settings.overlay,\n        a = this;\n      this._preload(),\n        e ||\n          (this.$elmt.css('height', this.$elmt.css('height')),\n          (t = b('<div class=\"vegas-wrapper\">')\n            .css('overflow', this.$elmt.css('overflow'))\n            .css('padding', this.$elmt.css('padding'))),\n          this.$elmt.css('padding') ||\n            t\n              .css('padding-top', this.$elmt.css('padding-top'))\n              .css('padding-bottom', this.$elmt.css('padding-bottom'))\n              .css('padding-left', this.$elmt.css('padding-left'))\n              .css('padding-right', this.$elmt.css('padding-right')),\n          this.$elmt\n            .clone(!0)\n            .children()\n            .appendTo(t),\n          (this.elmt.innerHTML = '')),\n        n &&\n          this.support.transition &&\n          ((i = b('<div class=\"vegas-timer\"><div class=\"vegas-timer-progress\">')),\n          (this.$timer = i),\n          this.$elmt.prepend(i)),\n        o &&\n          ((s = b('<div class=\"vegas-overlay\">')),\n          'string' == typeof o && s.css('background-image', 'url(' + o + ')'),\n          (this.$overlay = s),\n          this.$elmt.prepend(s)),\n        this.$elmt.addClass('vegas-container'),\n        e || this.$elmt.append(t),\n        setTimeout(function() {\n          a.trigger('init'), a._goto(a.slide), a.settings.autoplay && a.trigger('play');\n        }, 1);\n    },\n    _preload: function() {\n      var t;\n      for (t = 0; t < this.settings.slides.length; t++)\n        (this.settings.preload || this.settings.preloadImages) &&\n          this.settings.slides[t].src &&\n          (new Image().src = this.settings.slides[t].src),\n          (this.settings.preload || this.settings.preloadVideos) &&\n            this.support.video &&\n            this.settings.slides[t].video &&\n            (this.settings.slides[t].video instanceof Array\n              ? this._video(this.settings.slides[t].video)\n              : this._video(this.settings.slides[t].video.src));\n    },\n    _random: function(t) {\n      return t[Math.floor(Math.random() * t.length)];\n    },\n    _slideShow: function() {\n      var t = this;\n      1 < this.total &&\n        !this.ended &&\n        !this.paused &&\n        !this.noshow &&\n        (this.timeout = setTimeout(function() {\n          t.next();\n        }, this._options('delay')));\n    },\n    _timer: function(t) {\n      var s = this;\n      clearTimeout(this.timeout),\n        this.$timer &&\n          (this.$timer\n            .removeClass('vegas-timer-running')\n            .find('div')\n            .css('transition-duration', '0ms'),\n          this.ended ||\n            this.paused ||\n            this.noshow ||\n            (t &&\n              setTimeout(function() {\n                s.$timer\n                  .addClass('vegas-timer-running')\n                  .find('div')\n                  .css('transition-duration', s._options('delay') - 100 + 'ms');\n              }, 100)));\n    },\n    _video: function(t) {\n      var s,\n        i,\n        e = t.toString();\n      return n[e]\n        ? n[e]\n        : (t instanceof Array == !1 && (t = [t]),\n          ((s = document.createElement('video')).preload = !0),\n          t.forEach(function(t) {\n            ((i = document.createElement('source')).src = t), s.appendChild(i);\n          }),\n          (n[e] = s));\n    },\n    _fadeOutSound: function(t, s) {\n      var i = this,\n        e = s / 10,\n        n = t.volume - 0.09;\n      0 < n\n        ? ((t.volume = n),\n          setTimeout(function() {\n            i._fadeOutSound(t, s);\n          }, e))\n        : t.pause();\n    },\n    _fadeInSound: function(t, s) {\n      var i = this,\n        e = s / 10,\n        n = t.volume + 0.09;\n      n < 1 &&\n        ((t.volume = n),\n        setTimeout(function() {\n          i._fadeInSound(t, s);\n        }, e));\n    },\n    _options: function(t, s) {\n      return (\n        void 0 === s && (s = this.slide),\n        void 0 !== this.settings.slides[s][t] ? this.settings.slides[s][t] : this.settings[t]\n      );\n    },\n    _goto: function(t) {\n      void 0 === this.settings.slides[t] && (t = 0), (this.slide = t);\n      var s,\n        i,\n        e,\n        n,\n        o,\n        a = this.$elmt.children('.vegas-slide'),\n        r = this.settings.slides[t].src,\n        h = this.settings.slides[t].video,\n        d = this._options('delay'),\n        l = this._options('align'),\n        g = this._options('valign'),\n        u = this._options('cover'),\n        c = this._options('color') || this.$elmt.css('background-color'),\n        p = this,\n        m = a.length,\n        f = this._options('transition'),\n        v = this._options('transitionDuration'),\n        y = this._options('animation'),\n        _ = this._options('animationDuration');\n      function w() {\n        p._timer(!0),\n          setTimeout(function() {\n            f &&\n              (p.support.transition\n                ? (a\n                    .css('transition', 'all ' + v + 'ms')\n                    .addClass('vegas-transition-' + f + '-out'),\n                  a.each(function() {\n                    var t = a.find('video').get(0);\n                    t && ((t.volume = 1), p._fadeOutSound(t, v));\n                  }),\n                  s.css('transition', 'all ' + v + 'ms').addClass('vegas-transition-' + f + '-in'))\n                : s.fadeIn(v));\n            for (var t = 0; t < a.length - p.settings.slidesToKeep; t++) a.eq(t).remove();\n            p.trigger('walk'), p._slideShow();\n          }, 100);\n      }\n      this.settings.firstTransition && this.first && (f = this.settings.firstTransition || f),\n        this.settings.firstTransitionDuration &&\n          this.first &&\n          (v = this.settings.firstTransitionDuration || v),\n        this.first && (this.first = !1),\n        'repeat' !== u && (!0 === u ? (u = 'cover') : !1 === u && (u = 'contain')),\n        ('random' === f || f instanceof Array) &&\n          (f = f instanceof Array ? this._random(f) : this._random(this.transitions)),\n        ('random' === y || y instanceof Array) &&\n          (y = y instanceof Array ? this._random(y) : this._random(this.animations)),\n        ('auto' === v || d < v) && (v = d),\n        'auto' === _ && (_ = d),\n        (s = b('<div class=\"vegas-slide\"></div>')),\n        this.support.transition && f && s.addClass('vegas-transition-' + f),\n        this.support.video && h\n          ? (((n = h instanceof Array ? this._video(h) : this._video(h.src)).loop =\n              void 0 === h.loop || h.loop),\n            (n.muted = void 0 === h.mute || h.mute),\n            !1 === n.muted ? ((n.volume = 0), this._fadeInSound(n, v)) : n.pause(),\n            (e = b(n)\n              .addClass('vegas-video')\n              .css('background-color', c)),\n            this.support.objectFit\n              ? e\n                  .css('object-position', l + ' ' + g)\n                  .css('object-fit', u)\n                  .css('width', '100%')\n                  .css('height', '100%')\n              : 'contain' === u && e.css('width', '100%').css('height', '100%'),\n            s.append(e))\n          : ((o = new Image()),\n            (i = b('<div class=\"vegas-slide-inner\"></div>')\n              .css('background-image', 'url(\"' + r + '\")')\n              .css('background-color', c)\n              .css('background-position', l + ' ' + g)),\n            'repeat' === u ? i.css('background-repeat', 'repeat') : i.css('background-size', u),\n            this.support.transition &&\n              y &&\n              i.addClass('vegas-animation-' + y).css('animation-duration', _ + 'ms'),\n            s.append(i)),\n        this.support.transition || s.css('display', 'none'),\n        m ? a.eq(m - 1).after(s) : this.$elmt.prepend(s),\n        a.css('transition', 'all 0ms').each(function() {\n          (this.className = 'vegas-slide'),\n            'VIDEO' === this.tagName && (this.className += ' vegas-video'),\n            f &&\n              ((this.className += ' vegas-transition-' + f),\n              (this.className += ' vegas-transition-' + f + '-in'));\n        }),\n        p._timer(!1),\n        n\n          ? (4 === n.readyState && (n.currentTime = 0), n.play(), w())\n          : ((o.src = r), o.complete ? w() : (o.onload = w));\n    },\n    _end: function() {\n      this.settings.autoplay ? (this.ended = !1) : (this.ended = !0),\n        this._timer(!1),\n        this.trigger('end');\n    },\n    shuffle: function() {\n      for (var t, s, i = this.total - 1; 0 < i; i--)\n        (s = Math.floor(Math.random() * (i + 1))),\n          (t = this.settings.slides[i]),\n          (this.settings.slides[i] = this.settings.slides[s]),\n          (this.settings.slides[s] = t);\n    },\n    play: function() {\n      this.paused && ((this.paused = !1), this.next(), this.trigger('play'));\n    },\n    pause: function() {\n      this._timer(!1), (this.paused = !0), this.trigger('pause');\n    },\n    toggle: function() {\n      this.paused ? this.play() : this.pause();\n    },\n    playing: function() {\n      return !this.paused && !this.noshow;\n    },\n    current: function(t) {\n      return t ? { slide: this.slide, data: this.settings.slides[this.slide] } : this.slide;\n    },\n    jump: function(t) {\n      t < 0 || t > this.total - 1 || t === this.slide || ((this.slide = t), this._goto(this.slide));\n    },\n    next: function() {\n      if ((this.slide++, this.slide >= this.total)) {\n        if (!this.settings.loop) return this._end();\n        this.slide = 0;\n      }\n      this._goto(this.slide);\n    },\n    previous: function() {\n      if ((this.slide--, this.slide < 0)) {\n        if (!this.settings.loop) return void this.slide++;\n        this.slide = this.total - 1;\n      }\n      this._goto(this.slide);\n    },\n    trigger: function(t) {\n      var s = [];\n      (s = 'init' === t ? [this.settings] : [this.slide, this.settings.slides[this.slide]]),\n        this.$elmt.trigger('vegas' + t, s),\n        'function' == typeof this.settings[t] && this.settings[t].apply(this.$elmt, s);\n    },\n    options: function(t, s) {\n      var i = this.settings.slides.slice();\n      if ('object' == typeof t) this.settings = b.extend({}, e, b.vegas.defaults, t);\n      else {\n        if ('string' != typeof t) return this.settings;\n        if (void 0 === s) return this.settings[t];\n        this.settings[t] = s;\n      }\n      this.settings.slides !== i &&\n        ((this.total = this.settings.slides.length),\n        (this.noshow = this.total < 2),\n        this._preload());\n    },\n    destroy: function() {\n      clearTimeout(this.timeout),\n        this.$elmt.removeClass('vegas-container'),\n        this.$elmt.find('> .vegas-slide').remove(),\n        this.$elmt\n          .find('> .vegas-wrapper')\n          .clone(!0)\n          .children()\n          .appendTo(this.$elmt),\n        this.$elmt.find('> .vegas-wrapper').remove(),\n        this.settings.timer && this.$timer.remove(),\n        this.settings.overlay && this.$overlay.remove(),\n        (this.elmt._vegas = null);\n    },\n  }),\n    (b.fn.vegas = function(s) {\n      var i,\n        e = arguments,\n        n = !1;\n      if (void 0 === s || 'object' == typeof s)\n        return this.each(function() {\n          this._vegas || (this._vegas = new t(this, s));\n        });\n      if ('string' == typeof s) {\n        if (\n          (this.each(function() {\n            var t = this._vegas;\n            if (!t) throw new Error('No Vegas applied to this element.');\n            'function' == typeof t[s] && '_' !== s[0]\n              ? (i = t[s].apply(t, [].slice.call(e, 1)))\n              : (n = !0);\n          }),\n          n)\n        )\n          throw new Error('No method \"' + s + '\" in Vegas.');\n        return void 0 !== i ? i : this;\n      }\n    }),\n    (b.vegas = {}),\n    (b.vegas.defaults = e),\n    (b.vegas.isVideoCompatible = function() {\n      return !/(Android|webOS|Phone|iPad|iPod|BlackBerry|Windows Phone)/i.test(navigator.userAgent);\n    });\n})(window.jQuery || window.Zepto);\n//# sourceMappingURL=vegas.min.js.map\n"
  },
  {
    "path": "zh.md",
    "content": "> 让H5制作像搭积木一样简单!\n\n<p align=\"center\">\n    <img src=\"http://cdn.dooring.cn/dr/logo.ff7fc6bb.png\" width=\"260\" alt=\"H5编辑器,H5制作神器,H5 editor,lowcode\">\n</p>\n<h1 align=\"center\">欢迎使用 H5-Dooring 👋</h1>\n<p>\n  <img alt=\"Version\" src=\"https://img.shields.io/badge/version-1.2-blue.svg?cacheSeconds=2592000\" />\n  <a href=\"https://juejin.im/post/6864410873709592584/\" target=\"_blank\">\n    <img alt=\"Documentation\" src=\"https://img.shields.io/badge/documentation-yes-brightgreen.svg\" />\n  </a>\n  <a href=\"#\" target=\"_blank\">\n    <img alt=\"license:GPL3.0\" src=\"https://img.shields.io/badge/license-GPL3.0-yellow.svg\" />\n  </a>\n</p>\n\n> H5-Dooring是一款功能强大，专业可靠的H5可视化页面配置解决方案，致力于提供一套简单方便、专业可靠、无限可能的H5落地页最佳实践。技术栈以react和typescript为主， 后台采用nodejs开发, 正在探索h5-lowcode解决方案。\n\n<img src=\"http://cdn.dooring.cn/dr/123.png\" alt=\"H5-Dooring编辑器预览图\" width=\"100%\" />\n\n| 主页🏠     | 演示✨ |  文档📦  |  教程 |  更多 |\n| ----------- | ----------- | ----------- | ----------- | ----------- |\n| [website](http://h5.dooring.cn) | [Demo](http://h5.dooring.cn/h5_plus) | [Document](http://h5.dooring.cn/doc) | [视频&Video](https://www.zhihu.com/zvideo/1406394315950653440) | [wiki](https://github.com/MrXujiang/h5-Dooring/wiki)\n\n简体中文 | [English](./readme.md)\n\n相关产品: \n\n- [V6.Dooring | 大屏可视化编辑器](https://github.com/MrXujiang/v6.dooring.public)\n- [dooring-electron-lowcode | dooring桌面端软件](https://github.com/MrXujiang/dooring-electron-lowcode)\n\n👤 **徐小夕**\n\n* Website: http://h5.dooring.cn\n* Github: [@MrXujiang](https://github.com/MrXujiang)\n\n## 🤝 贡献和支持\n\n> 欢迎提供问题和功能需求, 如果大家有好的点子和优化建议, 也欢迎提pr参与我们的共建. [issues page](https://github.com/MrXujiang/h5-Dooring/issues).\n\n> 如果觉得项目还不错, 就点个star吧~\n\n答疑清单: http://h5.dooring.cn/docz/source-list/H5-Dooring/guide\n\n## 私有化部署文档\n\n地址: http://h5.dooring.cn/docz\n\n## 联系作者\n\n<img src=\"http://next-admin.com/tech.png\" width=120 />\n\n\n### 特点\n1. 编辑器\n    - [x] 参考线\n    - [x] 基础组件\n    - [x] 可视化组件\n    - [x] 媒体组件\n    - [x] 商品组件\n    - [x] 拖拽器\n    - [x] 配置面板\n    - [x] 表单设计器\n    - [x] (多)页面管理(复制,编辑, 删除, 新建)\n    - [x] 组件动画\n    - [x] 组件交互\n    - [x] 数据源管理\n    - [x] 快速预览\n    - [x] 真机预览\n    - [x] 撤销、重做\n    - [x] 微信分享\n    - [x] 快捷键\n    - [x] 模版库\n    - [x] 桌面端软件Dooring-electron, 支持离线使用\n\n\n2. 增强功能\n    - [x] 上传 json，一键转换为 H5\n    - [x] 图片库\n    - [x] 出码能力(下载源码, 下载dist包)\n\n4. 后端 API\n    - [x] 创建、保存、更新作品\n    - [x] 用户管理, 权限管理\n    - [x] 一键智能分析\n    - [x] 数据看版\n    - [x] 表单数据收集\n    - [x] 表单数据展示\n    - [x] 表单数据分析, 一键导出excel, 表单多条件搜索\n    - [x] 在线预览\n    - [x] 二维码预览\n    - [x] 模版管理\n    - [x] 出码接口\n\n## 更新日志\n1. 视频组件添加播放时是否全屏配置项\n2. 修复icon组件点击失效问题\n3. 编辑器支持多尺寸切换, 支持画布尺寸自定义\n4. 修复后台管理分析表单的多语言问题\n5. 组件库支持用户自定义选择\n\n### 后端部分\n后端部分由于涉及的知识点比较多, 不是本文考虑的重点, 所以这里大致提几个点, 大家可以用完全不同的技术来实现后台服务, 比如说**PHP**, **Java**, **Python**或者**Egg**. 笔者这里采用的是**koa**. \n\n具体代码可以参考全栈开发文章:\n\n- [基于Koa + React + TS从零开发全栈文档编辑器](https://mp.weixin.qq.com/s?__biz=MzU2Mzk1NzkwOA==&mid=2247486910&idx=2&sn=7ce865dd8a8f6769439f0e8eebb72212&chksm=fc531445cb249d534a7d8a362ad40d26bc90f2d2e867385768ee19575e32826fcbe419fcbe0b&token=297396546&lang=zh_CN#rd)\n\n- [Dooring后台接口文档](http://h5.dooring.cn/doc/zh/guide/deployDev/api.html)\n- [私有化部署](http://h5.dooring.cn/h5_plus/price)\n\n\n## 安装\n1. 下载代码\n```sh\ngit clone https://github.com/MrXujiang/h5-Dooring.git\n```\n2. 进入项目目录\n```sh\ncd ./h5-Dooring\n```\n\n3. 安装依赖包(需要提前安装yarn)\n```sh\nyarn pkg\n```\n\n## 使用\n\n本地启动应用\n```sh\nyarn start\nor\ncnpm run start\n```\n\n## 模块及目录说明\n\n本项目使用 lerna多包管理，采用模块联邦共用渲染器，巧妙解耦项目编辑器和C端展示器；增强组件健壮性和提升预览页加载性能\n\n- editor\n\n可视化编辑器;负责拖拽组件，编辑属性，保存发布\n\n- ui\n\n组件库和渲染器;负责各种组件物料和画布引擎加载\n\n- doc \n\n使用手册和开发文档\n\n## 如何运行下载后的代码?\n\n 1. 可以将压缩包解压直接放到服务器根目录, 访问根目录地址即可\n 2. `vscode`安装Live Server插件, 将下载的压缩包解压成文件夹, 用`vscode`打开, 点击Live Server即可, 注意要删除启动路径的`index.html`, 改成`/`\n\n\n如发现本地启动后组件拖拽遇到奇怪的报错, 是应为第三方组件在开发环境的bug, 可以采用一下方式解决:\n\n```sh\nyarn dev\nor\ncnpm run dev\n```\n前提是先安装http-server模块.\n\n## 浏览器支持\n\n兼容除了IE之外的任何主流浏览器\n\n| [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/edge/edge_48x48.png\" alt=\"IE / Edge\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>IEdge | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/firefox/firefox_48x48.png\" alt=\"Firefox\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>Firefox | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/chrome/chrome_48x48.png\" alt=\"Chrome\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>Chrome | [<img src=\"https://raw.githubusercontent.com/alrra/browser-logos/master/src/safari/safari_48x48.png\" alt=\"Safari\" width=\"24px\" height=\"24px\" />](https://godban.github.io/browsers-support-badges/)</br>Safari |\n| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |\n| Edge                                                         | last 2 versions                                              | last 2 versions                                              | last 2 versions                                              |\n\n## 合作项目\n\n* [mitu-editor - 轻量级且强大的图片编辑器](https://github.com/H5-Dooring/mitu-editor)\n* [powerNice - 一款轻量级文档管理编辑器](http://h5.dooring.cn/powernice/views)\n* [rc-drag - 基于react的轻量级拖拽缩放组件](https://github.com/MrXujiang/rc-drag)\n* [Luckysheet - 强大的在线excel编辑器](https://github.com/mengshukeji/Luckysheet)\n* [Blink - 一款自定义的生成故障艺术动画的组件库](https://github.com/MrXujiang/blink)\n* [frontend-developer-roadmap | 一个能提高开发者工作效率的前端js库汇总](https://github.com/MrXujiang/frontend-developer-roadmap)\n* [lucky-canvas 抽奖插件 | 一个支持H5, 微信小程序, React的抽奖插件](https://github.com/LuckDraw/lucky-canvas)\n* [vue-admin-box | 免费并且开源的中后台管理系统模板](https://github.com/cmdparkour/vue-admin-box)\n* [基于antd开箱即用的后台管理模版ant-simple-pro](https://github.com/lgf196/ant-simple-pro)\n* [使用gin+vue进行极速开发的全栈开发基础平台](https://github.com/flipped-aurora/gin-vue-admin)\n\n## 赞助\n开源不易, 有了您的赞助, 我们会做的更好~\n\n<img src=\"http://cdn.dooring.cn/dr/WechatIMG2.jpeg\" width=\"180px\" />\n\n## 技术反馈和交流群\n微信：beautifulFront\n\n<img src=\"http://cdn.dooring.cn/dr/qtqd_code.png\" width=\"180px\" />\n"
  }
]